news 2026/3/25 16:18:19

【期货量化AI】期货量化交易策略机器学习应用(Python量化)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【期货量化AI】期货量化交易策略机器学习应用(Python量化)

一、前言

机器学习在量化交易中的应用越来越广泛。通过机器学习模型,可以从历史数据中学习交易规律,提高策略的预测能力。本文将介绍如何将机器学习应用于期货量化交易。

本文将介绍:

二、为什么选择天勤量化(TqSdk)

TqSdk机器学习应用支持:

功能说明
数据获取支持获取高质量历史数据
数据处理pandas/numpy支持特征工程
模型训练支持与sklearn等库集成
实时预测支持实时数据预测

安装方法

pipinstalltqsdk pandas numpy scikit-learn

三、机器学习基础

3.1 机器学习类型

类型说明应用场景
监督学习有标签数据价格预测、信号分类
无监督学习无标签数据市场状态识别、聚类
强化学习与环境交互交易决策优化

3.2 常用算法

算法特点适用场景
线性回归简单、可解释价格预测
随机森林稳健、抗过拟合特征重要性分析
XGBoost性能好、精度高复杂模式识别
SVM小样本效果好分类问题

四、特征工程

4.1 技术指标特征

#!/usr/bin/env python# -*- coding: utf-8 -*-""" 功能:机器学习特征工程 说明:本代码仅供学习参考 """fromtqsdkimportTqApi,TqAuthfromtqsdk.tafuncimportma,macd,rsi,bollimportpandasaspdimportnumpyasnpdefcreate_technical_features(klines):"""创建技术指标特征"""features=pd.DataFrame(index=klines.index)# 均线特征features['ma5']=ma(klines['close'],5)features['ma20']=ma(klines['close'],20)features['ma_ratio']=features['ma5']/features['ma20']-1# MACD特征macd_data=macd(klines['close'],12,26,9)features['macd']=macd_data['macd']features['macd_signal']=macd_data['signal']features['macd_hist']=macd_data['hist']# RSI特征features['rsi']=rsi(klines['close'],14)# 布林带特征boll_data=boll(klines['close'],20,2)features['boll_upper']=boll_data['upper']features['boll_lower']=boll_data['lower']features['boll_position']=(klines['close']-boll_data['lower'])/(boll_data['upper']-boll_data['lower'])returnfeatures# 使用示例api=TqApi(auth=TqAuth("快期账户","快期密码"))klines=api.get_kline_serial("SHFE.rb2510",3600,500)api.wait_update()features=create_technical_features(klines)print(f"特征数量:{len(features.columns)}")api.close()

4.2 价格特征

defcreate_price_features(klines):"""创建价格特征"""features=pd.DataFrame(index=klines.index)# 收益率features['return_1d']=klines['close'].pct_change(1)features['return_5d']=klines['close'].pct_change(5)features['return_20d']=klines['close'].pct_change(20)# 波动率returns=klines['close'].pct_change()features['volatility_5d']=returns.rolling(5).std()features['volatility_20d']=returns.rolling(20).std()# 价格位置high_max=klines['high'].rolling(20).max()low_min=klines['low'].rolling(20).min()features['price_position']=(klines['close']-low_min)/(high_max-low_min)returnfeatures

4.3 成交量特征

defcreate_volume_features(klines):"""创建成交量特征"""features=pd.DataFrame(index=klines.index)# 成交量变化features['volume_change']=klines['volume'].pct_change()features['volume_ma_ratio']=klines['volume']/klines['volume'].rolling(20).mean()# 价量关系price_change=klines['close'].pct_change()features['price_volume_corr']=price_change.rolling(20).corr(klines['volume'].pct_change())returnfeatures

五、模型训练

5.1 价格预测模型

fromsklearn.ensembleimportRandomForestRegressorfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportmean_squared_error,r2_scoredeftrain_price_prediction_model(klines):"""训练价格预测模型"""# 创建特征technical_features=create_technical_features(klines)price_features=create_price_features(klines)volume_features=create_volume_features(klines)# 合并特征X=pd.concat([technical_features,price_features,volume_features],axis=1)X=X.dropna()# 创建标签(未来收益率)y=klines['close'].pct_change(1).shift(-1)y=y.loc[X.index]# 删除缺失值valid_idx=~(X.isnull().any(axis=1)|y.isnull())X=X[valid_idx]y=y[valid_idx]# 划分训练集和测试集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,shuffle=False)# 训练模型model=RandomForestRegressor(n_estimators=100,random_state=42)model.fit(X_train,y_train)# 预测y_pred=model.predict(X_test)# 评估mse=mean_squared_error(y_test,y_pred)r2=r2_score(y_test,y_pred)print(f"MSE:{mse:.6f}")print(f"R²:{r2:.4f}")returnmodel# 使用示例api=TqApi(auth=TqAuth("快期账户","快期密码"))klines=api.get_kline_serial("SHFE.rb2510",3600,1000)api.wait_update()model=train_price_prediction_model(klines)api.close()

5.2 信号分类模型

fromsklearn.ensembleimportRandomForestClassifierfromsklearn.metricsimportclassification_report,accuracy_scoredeftrain_signal_classification_model(klines):"""训练信号分类模型"""# 创建特征technical_features=create_technical_features(klines)price_features=create_price_features(klines)volume_features=create_volume_features(klines)X=pd.concat([technical_features,price_features,volume_features],axis=1)X=X.dropna()# 创建标签(买入1,卖出-1,持有0)future_return=klines['close'].pct_change(1).shift(-1)y=pd.Series(0,index=future_return.index)y[future_return>0.01]=1# 买入y[future_return<-0.01]=-1# 卖出y=y.loc[X.index]# 删除缺失值valid_idx=~(X.isnull().any(axis=1)|y.isnull())X=X[valid_idx]y=y[valid_idx]# 划分训练集和测试集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,shuffle=False)# 训练模型model=RandomForestClassifier(n_estimators=100,random_state=42)model.fit(X_train,y_train)# 预测y_pred=model.predict(X_test)# 评估accuracy=accuracy_score(y_test,y_pred)print(f"准确率:{accuracy:.4f}")print(classification_report(y_test,y_pred))returnmodel

六、模型集成

6.1 模型集成方法

fromsklearn.ensembleimportVotingRegressorfromsklearn.linear_modelimportLinearRegressionfromsklearn.ensembleimportGradientBoostingRegressordefensemble_models(klines):"""模型集成"""# 创建特征和标签technical_features=create_technical_features(klines)price_features=create_price_features(klines)volume_features=create_volume_features(klines)X=pd.concat([technical_features,price_features,volume_features],axis=1)X=X.dropna()y=klines['close'].pct_change(1).shift(-1)y=y.loc[X.index]valid_idx=~(X.isnull().any(axis=1)|y.isnull())X=X[valid_idx]y=y[valid_idx]X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,shuffle=False)# 创建多个模型models=[('rf',RandomForestRegressor(n_estimators=100)),('gb',GradientBoostingRegressor(n_estimators=100)),('lr',LinearRegression())]# 集成模型ensemble=VotingRegressor(models)ensemble.fit(X_train,y_train)# 预测y_pred=ensemble.predict(X_test)# 评估mse=mean_squared_error(y_test,y_pred)print(f"集成模型MSE:{mse:.6f}")returnensemble

七、实盘应用

7.1 实时预测

classMLStrategy:"""机器学习策略"""def__init__(self,api,symbol,model):self.api=api self.symbol=symbol self.model=model self.klines=Nonedefget_features(self):"""获取当前特征"""ifself.klinesisNone:self.klines=self.api.get_kline_serial(self.symbol,3600,500)else:self.api.wait_update()# 创建特征technical_features=create_technical_features(self.klines)price_features=create_price_features(self.klines)volume_features=create_volume_features(self.klines)X=pd.concat([technical_features,price_features,volume_features],axis=1)X=X.iloc[[-1]]# 最新特征returnXdefpredict(self):"""预测"""X=self.get_features()# 预测prediction=self.model.predict(X)[0]returnpredictiondefgenerate_signal(self):"""生成交易信号"""prediction=self.predict()ifprediction>0.01:return1# 买入elifprediction<-0.01:return-1# 卖出else:return0# 持有# 使用示例api=TqApi(auth=TqAuth("快期账户","快期密码"))model=train_price_prediction_model(klines)# 预先训练好的模型strategy=MLStrategy(api,"SHFE.rb2510",model)whileTrue:signal=strategy.generate_signal()ifsignal!=0:# 执行交易passapi.wait_update()time.sleep(60)

八、注意事项

8.1 过拟合问题

问题解决方法
过拟合使用交叉验证、正则化
数据泄露避免使用未来数据
样本外验证使用样本外数据验证

8.2 模型更新

defupdate_model(model,new_data,retrain_freq=30):"""定期更新模型"""# 每30天重新训练一次# ...pass

九、总结

9.1 机器学习应用要点

要点说明
特征工程创建有效特征
模型选择选择合适的模型
过拟合控制避免过拟合
持续更新定期更新模型

9.2 注意事项

  1. 避免过拟合- 使用交叉验证
  2. 数据质量- 确保数据质量
  3. 特征选择- 选择有效特征
  4. 模型更新- 定期更新模型

免责声明:本文仅供学习交流使用,不构成任何投资建议。期货交易有风险,入市需谨慎。

更多资源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 17:37:55

AI Agent部署架构对比与选择:一篇搞定,建议收藏

AI Agent 的部署架构没有万能解法&#xff0c;选择对了能事半功倍&#xff0c;选择错了则可能付出高昂的性能或成本代价。不同架构会直接影响性能表现、成本结构、延迟体验和适用场景。目前主流的四种部署模式包括批量部署、流式部署、实时部署和边缘部署。 1.批量部署 Agent 以…

作者头像 李华
网站建设 2026/3/23 17:33:00

想让 Git 忽略这个文件夹怎么办 ---- .gitignore Git文件使用教程

通过idea里的快捷操作添加&#xff08;最直接&#xff09;idea中右键文件夹 “添加到 .gitignore” 的选项&#xff0c;直接点击它&#xff0c;这个文件夹就会被自动写入项目的 .gitignore 文件&#xff0c;Git 之后就不会再追踪它了。手动编辑 .gitignore 文件&#xff08;如果…

作者头像 李华