【量化课程】08_1.机器学习量化策略基础实战

文章目录

    • 1. 常用机器学习模型
      • 1.1 回归模型
      • 1.2 分类模型
        • 1.2.1 SVC介绍
        • 1.2.2 SVC在量化策略中的应用
    • 2. 机器学习量化策略实现的基本步骤
    • 3. 策略实现

1. 常用机器学习模型

1.1 回归模型

  • 线性回归
  • 多层感知器回归
  • 自适应提升树回归
  • 随机森林回归

1.2 分类模型

  • 线性分类
  • 支持向量机
  • XGBoost分类
  • K近邻分类

1.2.1 SVC介绍

SVC(Support Vector Classifier)是一种在机器学习中常用的分类算法,它基于支持向量机(Support Vector Machine)算法。SVC通过寻找最佳的超平面来实现分类任务,在数据平面上进行线性或非线性的划分。

1.2.2 SVC在量化策略中的应用

在量化策略中,SVC(Support Vector Classifier)可以用于股票预测和交易决策。以下是SVC在量化策略中的应用步骤:

  • 数据准备:首先,需要准备训练数据和测试数据。训练数据包括历史股票价格和相关特征,以及对应的标签(例如涨跌幅度)。测试数据包括最新的股票价格和特征,用于进行预测。

  • 特征工程:根据历史股票数据,使用技术指标或其他特征工程方法构建特征。这些特征可能包括移动平均线、波动性指标、成交量等。

  • 数据预处理:将训练数据和测试数据进行标准化,使其均值为0,方差为1。这可以提高分类算法的性能。

  • 训练模型:使用训练数据训练SVC模型。在训练过程中,SVC将学习股票的价格模式和特征之间的关系。

  • 模型预测:使用训练好的SVC模型对测试数据进行预测。根据预测结果,判断股票是涨还是跌。

  • 交易决策:根据预测结果进行交易决策。例如,如果SVC预测股票会涨,可以选择买入;如果SVC预测股票会跌,可以选择卖出或不做操作。

  • 交易执行:根据交易决策执行相应的交易操作。这可能涉及到下单、调整仓位等操作。

  • 盈亏评估:根据交易结果评估策略的盈亏情况。可以计算交易收益、回撤等指标,进行策略的优化和调整。

需要注意的是,SVC作为机器学习算法,对数据的准备和特征工程至关重要。合理选择特征和调整参数可以显著影响SVC的预测性能。此外,量化策略中还需要考虑交易成本、风险管理和市场流动性等因素,以构建更加完整和可靠的策略。

2. 机器学习量化策略实现的基本步骤

  1. 加载数据
  2. 标注数据
  3. 特征工程,分割训练集和测试集
  4. 选择机器学习模型并配置适当的参数
  5. 训练模型
  6. 利用模型数据样本之外的数据进行回测
  7. 对回测结果进行可视化

3. 策略实现

本部分将介绍如何在BigQuant实现一个基于支持向量机模型的选股策略

from biglearning.api import M
from biglearning.api import tools as T
from bigdatasource.api import DataSource
from biglearning.module2.common.data import Outputs
from zipline.finance.commission import PerOrder# 对训练数据和测试数据进行标准化处理
def m6_run_bigquant_run(input_1, input_2, input_3):train_df = input_1.read()features = input_2.read()feature_min = train_df[features].quantile(0.005)feature_max = train_df[features].quantile(0.995)train_df[features] = train_df[features].clip(feature_min,feature_max,axis=1) data_1 = DataSource.write_df(train_df)test_df = input_3.read()test_df[features] = test_df[features].clip(feature_min,feature_max,axis=1)data_2 = DataSource.write_df(test_df)return Outputs(data_1=data_1, data_2=data_2, data_3=None)# 后处理函数
def m6_post_run_bigquant_run(outputs):return outputs# 处理每个交易日的数据
def m4_handle_data_bigquant_run(context, data):context.extension['index'] += 1if  context.extension['index'] % context.rebalance_days != 0:return date = data.current_dt.strftime('%Y-%m-%d')cur_data = context.indicator_data[context.indicator_data['date'] == date]cur_data = cur_data[cur_data['pred_label'] == 1.0]stock_to_buy =  list(cur_data.sort_values('instrument',ascending=False).instrument)[:context.stock_num]if date == '2017-02-06':print(date, len(stock_to_buy), stock_to_buy)# 获取当前持仓股票stock_hold_now = [equity.symbol for equity in context.portfolio.positions]# 需要保留的股票no_need_to_sell = [i for i in stock_hold_now if i in stock_to_buy]# 需要卖出的股票stock_to_sell = [i for i in stock_hold_now if i not in no_need_to_sell]for stock in stock_to_sell:if data.can_trade(context.symbol(stock)):context.order_target_percent(context.symbol(stock), 0)if len(stock_to_buy) == 0:returnweight =  1 / len(stock_to_buy)for stock in stock_to_buy:if data.can_trade(context.symbol(stock)):context.order_target_percent(context.symbol(stock), weight)# 准备工作
def m4_prepare_bigquant_run(context):pass# 初始化策略
def m4_initialize_bigquant_run(context):context.indicator_data = context.options['data'].read_df()context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))context.rebalance_days = 5context.stock_num = 50if 'index' not in context.extension:context.extension['index'] = 0# 开盘前处理函数
def m4_before_trading_start_bigquant_run(context, data):pass# 获取2020年至2021年股票数据
m1 = M.instruments.v2(start_date='2020-01-01',end_date='2021-01-01',market='CN_STOCK_A',instrument_list='',max_count=0
)# 使用高级自动标注器获取标签
m2 = M.advanced_auto_labeler.v2(instruments=m1.data,label_expr="""shift(close, -5) / shift(open, -1)-1
rank(label)
where(label>=0.95,1,0)""",start_date='',end_date='',benchmark='000300.SHA',drop_na_label=False,cast_label_int=False
)# 输入特征
m3 = M.input_features.v1(features="""(close_0-mean(close_0,12))/mean(close_0,12)*100
rank(std(amount_0,15))
rank_avg_amount_0/rank_avg_amount_8
ts_argmin(low_0,20)
rank_return_30
(low_1-close_0)/close_0
ta_bbands_lowerband_14_0
mean(mf_net_pct_s_0,4)
amount_0/avg_amount_3
return_0/return_5
return_1/return_5
rank_avg_amount_7/rank_avg_amount_10
ta_sma_10_0/close_0
sqrt(high_0*low_0)-amount_0/volume_0*adjust_factor_0
avg_turn_15/(turn_0+1e-5)
return_10
mf_net_pct_s_0
(close_0-open_0)/close_1"""
)# 抽取基础特征
m15 = M.general_feature_extractor.v7(instruments=m1.data,features=m3.data,start_date='',end_date='',before_start_days=0
)# 提取派生特征
m16 = M.derived_feature_extractor.v3(input_data=m15.data,features=m3.data,date_col='date',instrument_col='instrument',drop_na=False,remove_extra_columns=False
)# 合并标签和特征
m7 = M.join.v3(data1=m2.data,data2=m16.data,on='date,instrument',how='inner',sort=False
)# 删除缺失值
m13 = M.dropnan.v1(input_data=m7.data
)# 获取2021年至2022年股票数据
m9 = M.instruments.v2(start_date=T.live_run_param('trading_date', '2021-01-01'),end_date=T.live_run_param('trading_date', '2022-01-01'),market='CN_STOCK_A',instrument_list='',max_count=0
)# 抽取基础特征
m17 = M.general_feature_extractor.v7(instruments=m9.data,features=m3.data,start_date='',end_date='',before_start_days=0
)# 提取派生特征
m18 = M.derived_feature_extractor.v3(input_data=m17.data,features=m3.data,date_col='date',instrument_col='instrument',drop_na=False,remove_extra_columns=False
)# 删除缺失值
m14 = M.dropnan.v1(input_data=m18.data
)# 标准化训练数据和测试数据
m6 = M.cached.v3(input_1=m13.data,input_2=m3.data,input_3=m14.data,run=m6_run_bigquant_run,post_run=m6_post_run_bigquant_run,input_ports='',params='{}',output_ports=''
)# 对数据进行RobustScaler标准化处理
m8 = M.RobustScaler.v13(train_ds=m6.data_1,features=m3.data,test_ds=m6.data_2,scale_type='standard',quantile_range_min=0.01,quantile_range_max=0.99,global_scale=True
)# 使用SVC进行训练和预测
m10 = M.svc.v1(training_ds=m8.train_data,features=m3.data,predict_ds=m8.test_data,C=1,kernel='rbf',degree=3,gamma=-1,coef0=0,tol=0.1,max_iter=100,key_cols='date,instrument',other_train_parameters={}
)# 创建交易策略实例
m4 = M.trade.v4(instruments=m9.data,options_data=m10.predictions,start_date='',end_date='',handle_data=m4_handle_data_bigquant_run,prepare=m4_prepare_bigquant_run,initialize=m4_initialize_bigquant_run,before_trading_start=m4_before_trading_start_bigquant_run,volume_limit=0,order_price_field_buy='open',order_price_field_sell='open',capital_base=10000000,auto_cancel_non_tradable_orders=True,data_frequency='daily',price_type='后复权',product_type='股票',plot_charts=True,backtest_only=False,benchmark=''
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/90499.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虹科方案 | 汽车总线协议转换解决方案(二)

上期说到,虹科的PCAN-LIN网关在CAN、LIN总线转换方面有显著的作用,尤其是为BMS电池通信的测试提供了优秀的解决方案。假如您感兴趣,可以点击文末相关链接进行回顾! 而今天,虹科将继续给大家带来Router系列在各个领域的…

【Linux操作系统】编译过程中遇到的问题-为什么加-c?执行文件提示无法执行二进制文件?main函数参数argc和*argv[]的作用和理解?

在使用GCC编译器进行程序开发时,我们经常会遇到一些编译过程中的问题, 比如为什么要加上"-c"选项,以及为什么生成的可执行文件无法执行等问题。 本篇博客将详细介绍这些问题,并给出相应的代码和解释,帮助读者…

Python web实战之Django的AJAX支持详解

关键词:Web开发、Django、AJAX、前端交互、动态网页 今天和大家分享Django的AJAX支持。AJAX可实现在网页上动态加载内容、无刷新更新数据的需求。 1. AJAX简介 AJAX(Asynchronous JavaScript and XML)是一种在网页上实现异步通信的技术。通过…

20230814让惠普(HP)锐14 新AMD锐龙电脑不联网进WIN11进系统

20230814让惠普(HP)锐14 新AMD锐龙电脑不联网进WIN11进系统 2023/8/14 17:19 win11系统无法跳过联网 https://www.xpwin7.com/jiaocheng/28499.html Win11开机联网跳过不了怎么办?Win11开机联网跳过不了解决方法 Win11开机联网跳过不了怎么办?Win11开机…

8.14 ARM

1.练习一 .text 文本段 .global _start 声明一个_start函数入口 _start: _start标签,相当于C语言中函数mov r0,#0x2mov r1,#0x3cmp r0,r1beq stopsubhi r0,r0,r1subcc r1,r1,r0stop: stop标签,相当于C语言中函数b stop 跳转到stop标签下的第一条…

HCIP-OpenStack

1、OpenStack概述 OpenStack是一种云操作系统,OpenStack是虚拟机、裸金属和容器的云基础架构。可控制整个数据中心的大型计算、存储和网络资源池,所有资源都通过API或Web界面进行管理。 为什么称OpenStack是云操作系统? 云一般指云计算&…

【MySQL--->数据类型】

文章目录 [TOC](文章目录) 一、数据类型分类二、整型类型三、bit(位)类型四、float类型五、decimal类型六、char和varchar类型1.char类型2.varchar3.char与varchar的区别 七、日期与时间类型八、enum和set 一、数据类型分类 二、整型类型 数值类型有数据存储上限,而且每个类型都…

C语言暑假刷题冲刺篇——day1

目录 一、选择题 二、编程题 🎈个人主页:库库的里昂 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:C语言每日一练 ✨其他专栏:代码小游戏C语言初阶🤝希望作者的文章能对你…

【计算机视觉|生成对抗】改进的生成对抗网络(GANs)训练技术

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Improved Techniques for Training GANs 链接:[1606.03498v1] Improved Techniques for Training GANs (arxiv.org) 摘要 本文介绍了一系列应用于生成对抗网络(G…

数据可视化工具的三大类报表制作流程分享

电脑(pc)、移动、大屏三大类型的BI数据可视化报表制作步骤基本相同,差别就在于尺寸调整和具体的报表布局。这对于采用点击、拖拉拽方式来制作报表的奥威BI数据可视化工具来说就显得特别简单。接下来,我们就一起看看不这三大类型的…

ES中倒排索引机制

在ES的倒排索引机制中有四个重要的名词:Term、Term Dictionary、Term Index、Posting List。 Term(词条):词条是索引里面最小的存储和查询单元。一段文本经过分析器分析以后就会输出一串词条。一般来说英文语境中词条是一个单词&a…

wps设置一键标题字体和大小

参考 wps设置一键标题字体和大小:https://www.kafan.cn/A/7v5le1op3g.html 统一一键设置

数据结构:力扣刷题

题一:删除有序数组中的重复项 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的…

Intel汇编和ATT汇编的区别?

一、前缀不同 在 Intel 语法中,没有寄存器前缀或立即前缀。 然而,在 AT&T 中,寄存器的前缀是“%”,而 immed 的前缀是“$”。 Intel 语法十六进制或二进制即时数据分别带有“h”和“b”后缀。 此外,如果第一个十六…

14k字综述视觉大模型

目录 0.导读1.背景介绍1.1基础架构1.2目标函数1.2.1对比式学习1.2.2生成式学习1.3预训练1.3.1预训练数据集1.3.2微调1.3.3提示工程2.基于文本提示的基础模型2.1基于对比学习的方法2.1.1基于通用模型的对比方法2.1.2基于视觉定位基础模型的方法2.2基于生成式的方法2.3基于对比学…

安全加密框架图——Oracle安全开发者

Oracle安全开发者 ACLs 设计 ACLs(访问控制列表)时,可以根据以下思路进行设计: 所有者文件权限:确定文件的所有者能够对文件执行哪些操作,如读取、写入、执行等。这可以根据文件的性质和拥有者的职责来决…

Destination Host Unreachable

背景:物理机的IP地址是192.168.31.189,虚拟机的IP地址是192.168.194.130 物理机ping得通虚拟机 虚拟机ping得通外网 可是虚拟机ping不通物理机 1、报错信息 Destination Host Unreachable 2、原因 用route -n命令查看路由表发现192.168.194.0没有走网…

opencv+ffmpeg+QOpenGLWidget开发的音视频播放器demo

前言 本篇文档的demo包含了 1.使用OpenCV对图像进行处理,对图像进行置灰,旋转,抠图,高斯模糊,中值滤波,部分区域清除置黑,背景移除,边缘检测等操作;2.单纯使用opencv播放…

基于深度信念神经网络+长短期神经网络的降雨量预测,基于dbn-lstm的降雨量预测,dbn原理,lstm原理

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) LSTM原理 DBN-LSTM的降雨量预测 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,通过dbn进行无监督学习提取特征,然后长短期神经…

Android Studio实现图形验证码

源代码 源代码MainActivity 效果图32行需要修改,不修改会报错:需要常量表达式,我的代码已修改 点击后 MainActivity import static com.example.graphicverificationcode.RxCaptcha.TYPE.NUMBER;import android.annotation.SuppressLint; …