1、选择好投资标的
2、利用机器学习获取最佳运行参数
3、进行量化交易
4、累计获利
import tushare as ts # 引入股票基本数据相关库
import numpy as np
import pandas as pd
import talib # 引入股票衍生变量数据相关库
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score # 引入预测准确度评分函数
from sklearn.model_selection import GridSearchCV # 网格搜索参数调优函数

1. 获取股票基本数据

df = ts.get_k_data(‘000592’, start=‘2020-01-01’,end=‘2022-10-12’)
df = df.set_index(‘date’) # 将日期作为索引值

2.简单衍生变量数据构造

df[‘close-open’] = (df[‘close’]-df[‘open’])/df[‘open’]
df[‘high-low’] = (df[‘high’]-df[‘low’])/df[‘low’]
df[‘pre_close’] = df[‘close’].shift(1)
df[‘price_change’] = df[‘close’]-df[‘pre_close’]
df[‘p_change’] = (df[‘close’]-df[‘pre_close’])/df[‘pre_close’]*100

3.移动平均线相关数据构造

df[‘MA5’] = df[‘close’].rolling(5).mean()
df[‘MA10’] = df[‘close’].rolling(10).mean()
df.dropna(inplace=True)

4. 通过TA_Lib 库构造衍生变量数据

df[‘RSI’] = talib.RSI(df[‘close’], timeperiod=12)
df[‘MOM’] = talib.MOM(df[‘close’],timeperiod=5)
df[‘EMA12’] = talib.EMA(df[‘close’],timeperiod=12)
df[‘EMA26’] = talib.EMA(df[‘close’], timeperiod=26)
df[‘MACD’], df[‘MACDsignal’], df[‘MACDhist’] = talib.MACD(df[‘close’], fastperiod=12, slowperiod=26, signalperiod=9)
df.dropna(inplace=True)

# 提取特征变量和目标变量

X = df[
[‘close’, ‘volume’, ‘close-open’, ‘MA5’, ‘MA10’, ‘high-low’,
‘RSI’, ‘MOM’, ‘EMA12’, ‘MACD’, ‘MACDsignal’, ‘MACDhist’]
]

“”“使用了NumPy库中的where()函数,传入的3个参数的含义分别为判断条件、满足条件的赋值、不满足条件的赋值。其中df[‘price_change’].shift(-1)
是利用shift()函数将price_change(股价变化)这一列的所有数据向上移动1行,这样就获得了每一行对应的下一天的股价变化。
因此,这里的判断条件就是下一天的股价变化是否大于0,如果大于0,说明下一天股价涨了,则y赋值为1;如果不大于0,说明下一天股价不变或跌了,则y赋值为-1。
预测结果就只有1或-1两种分类。”“”
y = np.where(df[‘price_change’].shift(-1) > 0, 1, -1)

#划分训练集和测试集

“”“需要注意的是,划分要按照时间序列进行,而不能用train_test_split()函数进行随机划分。
这是因为股价的变化趋势具有时间性特征,而随机划分会破坏这种特征,所以需要根据当天的股价数据预测下一天的股价涨跌情况,
而不能根据任意一天的股价数据预测下一天的股价涨跌情况。”“”
X_length = X.shape[0] # shape属性获取X的行数和列数,shape[0]即为行数
split = int(X_length*0.9)
X_train, X_test = X[:split], X[:split]
y_train, y_test = y[:split], y[:split]

# 模型搭建

“”“决策树的最大深度max_depth设置为3,即每个决策树最多只有3层;弱学习器(即决策树模型)的个数n_estimators设置为10,
即该随机森林中共有10个决策树;
叶子节点的最小样本数min_samples_leaf设置为10,即如果叶子节点的样本数小于10则停止分裂;
随机状态参数random_state的作用是使每次运行结果保持一致,这里设置的数字1没有特殊含义,可以换成其他数字。”“”
rfc = RandomForestClassifier(max_depth=3, n_estimators=10, min_samples_leaf=10, random_state=1)

rfc.fit(X_train,y_train)

y_pred = rfc.predict(X_test)

print(‘预测情况:\n’, y_pred)

“”“预测属于各个分类的概率,获得的y_pred_proba是一个二维数组,其第1列为分类为-1(下一天股价不变或下跌)的概率,
第2列为分类为1(下一天股价上涨)的概率”“”
y_pred_proba = rfc.predict_proba(X_test)

模型准确度评估

score = accuracy_score(y_pred, y_test)
print(score)
print(rfc.score(X_test,y_test)) # 和score值一样,等价操作

# 分析特征变量的重要性

print(rfc.feature_importances_)

对特征按照计算出来的特征重要性进行排序(降序)

features = X.columns
importances= rfc.feature_importances_
a = pd.DataFrame()
a[‘特征’] = features
a[‘特征重要性’] = importances
a = a.sort_values(‘特征重要性’, ascending=False)
print(a)

#参数调优

“”“n_estimators参数的候选值范围为{5,10,20},max_depth参数的候选值范围为{2,3,4,5},
min_samples_leaf参数的候选值范围为{5,10,20,30}。”“”
parameters = {‘n_estimators’: [5, 10, 20], ‘max_depth’: [2, 3, 4, 5], ‘min_samples_leaf’: [5, 10, 20, 30]}
new_rfc = RandomForestClassifier(random_state=1) # 构建的随机森林模型

“”“设置cv参数为6,表示交叉验证6次;设置模型评估标准scoring参数为’accuracy’,即以准确度作为评估标准,
如果设置成’roc_auc’则表示以ROC曲线的AUC值作为评估标准。”“”
grid_search = GridSearchCV(new_rfc, parameters, cv=6, scoring=‘accuracy’)

grid_search.fit(X_train, y_train)
print(grid_search.best_params_) # 打印调参最优结果

X_test[‘prediction’] = rfc.predict(X_test)

计算每天的股价变化率,即(当天的收盘价-前一天的收盘价)/前一天的收盘价。

X_test[‘p_change’] = (X_test[‘close’] - X_test[‘close’].shift(1))/X_test[‘close’].shift(1)

X_test[‘origin’] = (X_test[‘p_change’]+1).cumprod()
“”“因为是根据当天的股价数据预测下一天的股价涨跌情况,如果预测为1,则在下一天买入,如果预测为-1,则在下一天卖出,
所以这里通过shift(1)将预测结果这一列向下移一行,这样才能和下一天的股价变化率相匹配,再用cumprod()函数来计算收益率。”“”
X_test[‘strategy’] = (X_test[‘prediction’].shift(1)*X_test[‘p_change’]+1).cumprod()

X_test[[‘strategy’, ‘origin’]].dropna().plot()
plt.gcf().autofmt_xdate()
plt.show()

最佳运行参数
{‘max_depth’: 2, ‘min_samples_leaf’: 30, ‘n_estimators’: 20}

统计日期:‘2020-01-01’,end=‘2022-10-12’
近一段时间的总收益:
文章代码由网上整理得来,只作学习之用。

机器学习之量化交易-获取最大收益相关推荐

  1. 4天掌握python量化交易_【量化】4天学会python机器学习与量化交易-笔记1(p6~p10)

    文章目录 p6 获取板块.交易行情数据 p7 获取财务数据与定时器 p8 投资组合与交易 p9 策略的收益指标 p10 策略风险指标 视频:4天学会python机器学习与量化交易 平台:米筐 4天学会 ...

  2. AI和机器学习对量化交易领域的影响

    本文为Michael Harris 在欧洲作为邀请嘉宾为高净值客户和交易者所做的一场演讲概要,主题为"人工智能与机器学习将对交易与投资产生的巨大影响".文章主要从四个方面进行阐释, ...

  3. python定价_Python|机器学习与量化交易、定价高级训练营陆家嘴学

    Python|机器学习与量化交易.定价高级训练营陆家嘴学堂百度云下载 我买了这个课程,在此分享! 获取课程,请加幑信: 1403905263 (复制幑信号到幑信添加!) 或者扫下面码 <韩非子& ...

  4. 投资必读书籍-机器学习与量化交易

    投资理念 <开放社会及其敌人>卡尔⋅\cdot⋅波普尔,索罗斯的导师 <通往奴役之路>弗里德里希⋅\cdot⋅奥古斯特⋅\cdot⋅冯⋅\cdot⋅哈耶克 <原则> ...

  5. Python机器学习与量化交易

    文章目录 1. 量化交易简介 1.1 量化交易的历史 1.2 什么是量化交易 1.3 量化交易分类 1.4 金融产品及衍生品的投资策略 1.5 量化交易的优势 1.6 如何做量化交易项目 2. 量化回 ...

  6. 机器学习与量化交易∙笔记(3)

    数据存储方式 .csv NoSQL 存储文本 SQL 跟时间序列有关的金融数据 数据格式 交易所信息:上交所.深交所.标普 数据来源 Ticker/sumbol 价格 企业行为(stock split ...

  7. 通达信交易接口api_股票量化交易-获取数据的两种方法

    量化交易第一步就是获取数据,介绍两种免费的方法 1.通过pytdx获取本地通达信数据 2.通过requests爬虫爬取腾讯财经数据 通过python第三方库pytdx获取 这是个很强大的第三方库,原理 ...

  8. 通达信行情数据获取--python_股票量化交易-获取数据的两种方法

    量化交易第一步就是获取数据,介绍两种免费的方法 1.通过pytdx获取本地通达信数据 2.通过requests爬虫爬取腾讯财经数据 通过python第三方库pytdx获取 这是个很强大的第三方库,原理 ...

  9. 5、Python量化交易-回测收益计算

    目录 前言 一.回测的主方法 二.回测实现 1 - 获取回测数据ticks 2 - 运行回测 3 - 为回测数据添加生成方法 4 - sell中添加订单的pnl收益计算 5 - 策略执行中调整买卖ma ...

最新文章

  1. CMU 刘畅流:爱上人机交互源于科幻片,女性研究AI更感性、更哲学 | 妇女节特辑...
  2. mysql直接生成excel_MYSQL 将excel里面的数据直接生成sql语句
  3. jvm 宕机 打印jvm_通过入侵JVM打印阵列
  4. 2019蓝桥杯C++B:等差数列(详解)
  5. c++小学期大作业攻略(二)整体思路+主界面
  6. ora-28547 可能是oracle net 管理错误_PostgreSQL与Oracle:成本、易用性和功能上的差异...
  7. C语言从入门到精通pdf
  8. win7使用命令提示符怎么运行C语言,Win7如何打开命令行窗口?Win7打开命令提示符的多种方法...
  9. 2022年陕西省职业院校技能大赛中职组网络安全赛项规程
  10. hdu 1598 find the most comfortable road 枚举+最小成生树 kruskal 解题报告
  11. close函数 qt_QT中关闭应用程序和窗口的函数(quit(),exit()以及close()的区别)
  12. 复化梯形公式c语言sinx x,复化梯形公式和复化辛卜生公式
  13. c语言矩阵的逆的程序,C语言求矩阵的逆矩阵
  14. [Cue]emulator unknown skin name 'WVGA800'
  15. QNX独特的工程目录结构
  16. android 修改默认壁纸
  17. 【数据挖掘】数据挖掘工程师是做什么的?
  18. 【字符串比较函数】strcmp,stricmp,strcmpi区别
  19. 微信小程序调起扫码功能
  20. [CLI] mp4box 分割合併mp4

热门文章

  1. STM32(基于HAL库)驱动0.96寸OLED屏幕(四脚且中英文皆可显示)
  2. 共勉。怎么摆脱习惯性刷手机的习惯?
  3. 快速提高意志力的方法--自控力
  4. 【节能学院】关于芜湖某酒店电力运维系统的研究浅析
  5. 数据结构之内部排序--希尔排序
  6. Unity3D研究院之游戏开发中的人工智能AI
  7. bat命令映射网络驱动器
  8. matlab是什么意思,x'在matlab是什么意思
  9. Codeforce 1251 E. Voting (贪心,思维)
  10. 智慧大棚一小步,农业发展一大步