专享策略21 | 基于机器学习的期货量化交易策略(一)

松鼠Quant
2025-05-06


图片
量化策略开发,高质量社群,交易思路分享等相关内容

工具推荐

· 参数筛选工具

·Ai帮你编写策略

· 订单流图表

· 加入2025俱乐部

· Ai投研助手课程

『正文』

ˇ

讲解视频

,时长24:49

一、策略思路

1.1 核心理念

本策略采用机器学习预测模型与技术指标相结合的方式,通过历史数据训练LightGBM模型来预测期货品种未来的价格走势,并结合多重风险管理机制实现稳健的自动化交易。策略的核心优势在于:

(1)数据驱动的交易决策:利用机器学习模型挖掘历史数据中的潜在规律

2多维度特征工程:构建了包含价格、波动、趋势等多个维度的特征体系

3完善的风险管理:包括动态止损、跟踪止损、波动率过滤等多重风险控制机制

1.2 交易逻辑

策略的交易逻辑可以概括为以下几个步骤:

1使用历史K线数据构建技术指标特征

2训练机器学习模型预测未来收益

3根据模型预测信号,结合趋势过滤和波动率过滤决定是否开仓

4开仓后实施动态止损、跟踪止损等风险管理措施

二、机器学习流程

2.1 数据准备与特征工程

第一步:导入数据(使用vnpy中的 AlphaLab - 数据管理和回测引擎核心


from vnpy.alpha import AlphaLablab

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 - 特征工程框架


class EnhancedFuturesMlDataset(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、多轮迭代,每棵树不断修正误差,最终集成多个“弱分类器”提升精度

























# 选择特征重要性占比大于1%的特征   new_dataset, feature_importances = feature_selection(    dataset=dataset,     model=model,     importance_threshold=0.005,    method='gain')# 使用优化的模型参数nmodel_params = {    "learning_rate": 0.005,    "num_leaves": 30,       "max_depth": 6,    # 限制树深度    "min_child_samples": 30,   # 增加最小数据量要求    "subsample": 0.6,   # 数据子采样    "colsample_bytree": 0.8,   # 特征子采样    "reg_alpha": 1,   # L1正则化    "reg_lambda": 1,   # L2正则化    "num_boost_round": 500,    "early_stopping_rounds": 50,   # 提前停止}# 创建模型实例new_model = LgbModel(**nmodel_params)# 训练模型new_model.fit(new_dataset)
图片
图片
图片

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

25俱乐部源码《VIP21

加入2025量化俱乐部


分享