工具推荐
『正文』
ˇ
讲解视频
一、策略思路
1.1 核心理念
本策略采用机器学习预测模型与技术指标相结合的方式,通过历史数据训练LightGBM模型来预测期货品种未来的价格走势,并结合多重风险管理机制实现稳健的自动化交易。策略的核心优势在于:
(1)数据驱动的交易决策:利用机器学习模型挖掘历史数据中的潜在规律
(2)多维度特征工程:构建了包含价格、波动、趋势等多个维度的特征体系
(3)完善的风险管理:包括动态止损、跟踪止损、波动率过滤等多重风险控制机制
1.2 交易逻辑
策略的交易逻辑可以概括为以下几个步骤:
(1)使用历史K线数据构建技术指标特征
(2)训练机器学习模型预测未来收益
(3)根据模型预测信号,结合趋势过滤和波动率过滤决定是否开仓
(4)开仓后实施动态止损、跟踪止损等风险管理措施
二、机器学习流程
2.1 数据准备与特征工程
第一步:导入数据(使用vnpy中的 AlphaLab - 数据管理和回测引擎核心)
AlphaLab(lab_path)AlphaLab是VNPY中用于因子研究和策略开发的核心组件,策略主要使用了以下功能:
1.数据加载:通过lab.load_bar_df()加载历史K线数据
2.合约设置:使用lab.add_contract_setting()配置交易费用、合约乘数等参数
3.回测框架支持:为BacktestingEngine提供数据和配置管理,这个回测框架区别于vnpy之前的cta回测框架,他的路径是在vnpy.alpha.strategy.backtesting
本次策略数据文件需要以parquet格式保存在.\alpha_lab\daily
第二步:特征工程(策略构建了一个全面的特征体系,包括):
基础价格特征:不同时间窗口的收益率、移动平均线比率、高低点位置等
K线形态特征:实体比例、上下影线等
动量指标:RSI、MACD等
波动率指标:ATR、波动率突破等
成交量特征:成交量趋势、成交量与价格的相关性等
特征生成采用了时间序列专用的操作符(如ts_delay、ts_mean等),确保不产生未来函数。
特征工程使用的是vnpy中的AlphaDataset - 特征工程框架
"""继承自AlphaDataset,实现特征工程"""
AlphaDataset提供了强大的特征工程能力:
表达式引擎:使用字符串表达式定义特征,如"close / ts_delay(close, 5) - 1"
时序操作符:ts_delay, ts_mean, ts_std等时序计算函数
数据处理器:通过add_processor()添加数据预处理逻辑
数据分段:支持train/valid/test数据集的自动划分
第三步: 模型训练、验证与信号生成
数据集划分:将数据按时间顺序分为训练集(70%)、验证集(15%)、测试集(15%)
模型选择:使用LightGBM模型,具有训练速度快、预测准确等优点
Lightgbm模型介绍:
LightGBM 是一个 提升树(boosting tree),核心思想是:
1、初始模型预测值一般为一个常数;
2、每轮训练一棵树,拟合前一轮预测的残差;
3、多轮迭代,每棵树不断修正误差,最终集成多个“弱分类器”提升精度
Lightgbm超参数介绍:
参数 | 作用 | 影响 | 量化交易中的建议 |
num_leaves | 每棵树的最大叶子数 | 控制模型复杂度。越大 | 建议从31开始调,100以上需加 |
max_depth | 树的最大深度 | 限制树的深度,防止过 | 通常设3~7,深度越小越平滑, |
learning_rate | 每棵树的学习步长 | 越小越稳定,但训练需要更多轮 | 常用值:0.01~0.1,配合早停使用 |
early_stopping_round | 验证集 n 轮不提升就停止 | 提高训练效率,防止过拟合 | 常设为 20~100,需配合验证集使用 |
num_boost_round | 最多训练多少棵树 | 影响训练时间和模型复杂度 | 配合 early_stopping 一起设,避免设太高 |
防过拟合:通过早停、正则化等技术防止过拟合
信号标准化:使用tanh函数将预测信号标准化到[-1, 1]区间
模型训练使用AlphaDataset的fetch_learn方法获取训练数据
训练机器学习模型
生成预测信号
# 训练模型
model = LgbModel(**model_params)model.fit(dataset)
# 生成信号
signal_df = generate_prediction_signal(model, dataset, Segment.TEST)
# 标准化信号
normalized_signal = self.normalize_signal(raw_signal_value)
# 信号平滑
signal_value = sum(self.signal_history[vt_symbol]) / len(self.signal_history[vt_symbol])
三、策略部分:
class EnhancedFuturesMlStrategy(AlphaStrategy): """继承自AlphaStrategy基类"""
策略继承自AlphaStrategy,获得了以下能力:
标准化的策略接口:on_init(), on_bars(), on_trade()等回调函数
仓位管理:get_pos(), set_target()方法
交易执行:execute_trading()自动处理订单逻辑
日志系统:write_log()方法
四、回测引擎介绍
BacktestingEngine - 回测引擎
本次策略回测引擎采用vnpy最新版4.0框架中alpha中的回测引擎,不同于之前vnpy框架中cta和多品种组合的回测引擎:
from vnpy.alpha.strategy.backtesting import BacktestingEngineengine = BacktestingEngine(lab)
回测引擎提供了完整的回测功能:
参数设置:set_parameters()配置回测时间、资金等
策略添加:add_strategy()加载策略和信号数据
回测执行:run_backtesting()运行回测
结果分析:calculate_result(), calculate_statistics()生成统计报告
绩效:
五、总结
本策略展示了如何将机器学习技术应用于期货量化交易中。通过完整的特征工程、模型训练、参数优化和风险管理流程,策略能够在保持较好收益的同时有效控制风险。详细的日志系统为策略优化提供了重要依据,使得策略能够不断迭代改进。
在实际应用中,建议先在模拟环境中充分测试,并根据具体品种的特性调整参数,同时持续监控策略表现,及时调整以适应市场变化。
机器学习在量化交易的应用如果想做好,其实模型是次要的,主要还是在特征工程,也就是因子部分。本次是首期机器学习策略,目的是先打通机器学习在量化交易中应用的工作流程,结合vnpy4.0新框架,还有很多代码框架需要完善。
专享策略21期完整源码及ipynb(含数据):
防迷路
微 信|小松鼠-松鼠Quant
微信号|viquant01