本文仅从实战角度去观察,利用机器学习算法中,随机森林模型预测股票市场指数涨跌的准确率。
适合入门玩家


首先,我们导入所需要的模块

import numpy as np
import pandas as pd
import talib as ta  #金融数据计算
import datetime,pickle
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import mean_absolute_error,mean_squared_error,r2_score,accuracy_score,roc_auc_score
from sklearn.ensemble import RandomForestClassifier #随机森林分类模型

然后读取指数数据,这里所使用的数据为个人付费购买数据,本文所使用的数据可以从文末联系方式获取。
关于数据,如果仅做ML、DL学习使用,可以选择量化平台获取、tushare接口获取、爬虫获取等方式,但如果是做模拟交易或者实盘交易,请尽量购买券商提供的数据,否则在数据清洗方面,哪怕是团队也需要耗费大量的人力物力。

with open(r'D:\history_data_22\indexs.pkl','rb') as f:index_data = pickle.load(f)

然后将index_data 打印出来,我们可以得到这样的数据:
code – 指数代码(string)
date – 日期(int)
open – 开盘价(float)
close – 收盘价(float)
low – 最低价(float)
high – 最高价(float)
vol - 成交量(float)
money – 成交额(float)

因为指数包括了很多,如上证50、沪深300、中证500等等,这里我们仅用上证指数为例
所以选择code代码为SH000001的数据

df = index_data[index_data['code'] == "SH000001"]

现在我们添加一些简单的技术指标

np_close = np.array(df['close'])
diff, dea, macd = ta.MACD(np_close, fastperiod=12, slowperiod=26,signalperiod=9)
df['MA5'] = ta.MA(np_close,timeperiod=5)
df['MA10'] = ta.MA(np_close,timeperiod=10)
df['DIFF'] = diff
df['DEA'] = dea
df['MACD'] = macd

此时,我们的dataframe应该是这样的

那么,特征值(feature)为Open到MACD。
我们想要机器通过feature预测出明日大盘的涨跌情况,那么这时需要来定义一下label,即告诉机器你想要预测什么。
我们在本文中采用二分类作为测试,涨为1,跌为0。

def num_config(x):if x > 0 :return 1else:return 0
df["(t+1)-(t)"] = df['close'].shift(-1) - df['close']
df['label'] = df["(t+1)-(t)"].map(num_config) 

再次打印df,我们应该得到如下的数据

这时,特征值和标签,我们都应该搞定了。
现在,我们来划分一下训练集和测试集,因为此文仅做测试使用,大家可以根据个人兴趣,添加验证集,用网格搜索、交叉验证,寻找最优参数,然后再作用于测试集。
因为股票数据是一个典型的时间序列数据(后面会写一篇LSTM运用),所以尽量不要用随机切分。因为随机切分很可能导致你的训练集里面含有未来函数,即X里存在Y,进而导致准确率极其的高。
我们将2017年以前的数据用来做训练,用2017年以后的数据用来做测试。

df = df.dropna() #剔除缺失值
df['time'] = pd.to_datetime(df['date'],format='%Y%m%d')
train_data = df[df['time']<"2017-01-01"]
test_data = df[df['time']>="2017-01-01"]
train_X = train_data.ix[:,'open':"MACD"].values
train_y = train_data['label'].values
test_X = test_data.ix[:,'open':"MACD"].values
test_y = test_data['label'].values

所有数据均已准备完毕,下面开始调用sklearn中随机森林模型进行测试

clf = RandomForestClassifier(max_depth=3,n_estimators=20)
clf.fit(train_X,train_y)
print(accuracy_score(train_y,clf.predict(train_X)))
print(accuracy_score(test_y,clf.predict(test_X)))


此时我们看到,该模型在训练集上有58.86%的胜率,在测试集上也拥有56%的胜率。
毫无疑问,这当然是值得庆幸的事情,56%的胜率已经要比50%高出很多,如果按盈亏均为1:1的情况下,长此以往的跑下去,是很恐怖的事情,这简直比赌场里某些游戏的胜率还要高。
但在股票市场里,真的是这样吗?
我们思考一下真实情况,该模型仅是猜涨跌,简单的二分类问题。那假设该模型只是猜跌比较厉害,而猜涨很瓜皮呢?
我们查看一下召回率

发现概率是51%,该模型并没有过多的偏袒涨跌其中的一方。
那么这个模型就可以用了吗?不是的,我们在以前的主观交易到后来的量化交易,发现很多趋势追踪策略的胜率可能只有35%-40%,但仍然可以取得不俗的盈利,原因是趋势追踪策略在盘整或者下跌阶段,有不停的试错,而上涨阶段则是一直处于持仓状态,没有频繁的换仓。于是胜率虽然低,但一口波段也能吃个胖子。
反观我们的56%模型,会不会存在虽然胜率高,但是每次赚的少,而亏一次就亏个大的这样的状况存在呢。
毕竟大A股,暴跌总比暴涨的次数多,对吧。
这里仅抛砖引玉
1、我们是否可以通过回归方法来解决上述问题
2、我们是否可以通过多分类问题来解决上述问题

总结:机器学习对于预测股票市场是存在一定作用的,但该文所涉及的模型仅对第二天的涨跌情况起辅助效果,并不能作为决策的依据!

文中所涉及代码及其付费数据集可以通过下面联系方式索取

注:该文属个人原创,转载请联系
Email:454001240@qq.com
VX:gq454001240

利用随机森林预测股票大盘涨跌相关推荐

  1. python mql4_可以转发文章不?老外用随机森林预测外汇分钟涨跌准确率高达85%。求高手用python重写。...

    [https://www.mql5.com/zh/articles/1165][1] 简介 创建任何交易系统的目的都是为了能够预测金融产品的市场行为,如一个货币对.预测的目标可以是不同的.我们在此限定 ...

  2. 利用随机森林算法实现Bank风险预测

    利用随机森林算法实现Bank风险预测 源码分享及数据集分享:https://github.com/luo948521848/BigDatas 在机器学习中,随机森林是一个包含多个决策树的分类器, 并且 ...

  3. RandomForest:随机森林预测生物标记biomarker——回归

    关于随机森林的简介和应用理论,请阅读之前分享的文章: 一文读懂随机森林在微生态中的应用 关于随机森林进行分类的入门实战,请阅读 之前分享的 - <RandomForest:随机森林预测生物标记b ...

  4. 利用随机森林进行特征选择

    随机森林中的特征重要性 随机森林算法示意图 利用随机森林选择特征可参看论文Variable selection using Random Forests. 用随机森林进行特征重要性评估的思想其实很简单 ...

  5. 利用随机森林填补缺失值

    利用随机森林填补缺失值 介绍 利用随机森林填补缺失值 介绍 说到缺失值,我想各位在进行数据分析之前或多或少都是会遇到的.在做有关机器学习的项目的时候,出题人都是会给你一个好几万好几十万的数据,可能会出 ...

  6. 基于大尺度结构的随机森林预测与I类HLA结合的稳定肽

    点击下载https://www.frontiersin.org/articles/10.3389/fimmu.2020.01583/full 1.Abstract HLA I类亲和力预测的稳定肽是设计 ...

  7. python在Scikit-learn中用决策树和随机森林预测NBA获胜者

    在本文中,我们将以Scikit-learn的决策树和随机森林预测NBA获胜者.美国国家篮球协会(NBA)是北美主要的男子职业篮球联赛,被广泛认为是首屈一指的男子职业篮球联赛在世界上.它有30个团队(美 ...

  8. Python使用随机森林预测泰坦尼克号生存

    tags: 随机森林 kaggle 数据挖掘 categories: 数据挖掘 mathjax: true 文章目录 前言: 1 数据预处理 1.1 读入数据 1.2 训练集与数据集 1.2.1 查看 ...

  9. 随机森林预测财务报表是否舞弊

    随机森林预测财务报表是否舞弊 爬取财务报表 设置文件保存在c盘eastmoney文件夹下 1 设置表格爬取时期 2 设置表格爬取起始页数 3 表格正式爬取 写入表头 方法1 借助csv包,最常用 数据 ...

最新文章

  1. ANSYS报错Accelerations are exceeding internal limit解决方法
  2. 程序猿充电的五本优质编程技术书
  3. 【机器学习】主题模型
  4. GDI+ 设置文本对齐方式
  5. 88. [ExtJS2.1教程-5]ToolBar(工具栏)
  6. php编码机器语言,机器语言使用的编码是
  7. ubuntu 16源码安装zabbix4.2
  8. 7-4 用天平找小球 (10 分)
  9. 使用Entity Framework时遇到的问题
  10. dev-cpp的安装教程
  11. 航班可售舱位及机票价格查询api实例
  12. EC20和esp32 串口做wifi透传
  13. Java NIO 详解
  14. Flutter跑马灯Marquee
  15. 国企,私企与外企利弊通观--关键时刻给应届毕业生及时点拨(二)
  16. 对于von Mises distribution(冯·米塞斯分布)的一点心得
  17. iOS 自建应用内测分发平台
  18. Java获得随机汉字
  19. APP——功耗测试(耗电测试)——基础知识
  20. Unity网页插件Embedded Browser(ZFBrowser)打包文件无法加载本地网页或网站网址解决方法

热门文章

  1. C++顺序结构——小玉买文具
  2. Luogu P3346 [ZJOI2015]诸神眷顾的幻想乡 广义SAM 后缀自动机
  3. WebView的简单介绍和Android使用WebView无法显示网页
  4. 技术员 Ghost Win7 Sp1 x64 装机版/纯净版 201710
  5. 装机员 Ghost Win7 Sp1 64位纯净贺岁版2017
  6. Unity3D使用经验总结 优点篇
  7. 看互联网将如何颠覆这17个传统行业
  8. iOS仿写有妖气漫画、视频捕获框架、启动页广告页demo、多种动画效果等源码
  9. EXCEL的Ctrl键神操作续集,Ctrl+字母=高效
  10. php warning require,Thinkphp 网站打开提示Warning: require(): open_basedir restriction in effect另一种解决方法...