利用随机森林预测股票大盘涨跌

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


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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620396.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

大盘涨跌预测及仓位控制思考

今天分享一篇个人在大盘涨跌上的预测及通过涨跌预测延伸的仓位控制思考。 大盘的择时个人一直认为是股票量化中最重要的部分&#xff08;普通的策略&#xff09;。一个好的择时方法&#xff0c;虽然可能会让部分盈利变少&#xff0c;但能够大大的降低回撤。很多策略虽然有很高…

[第七届蓝帽杯全国大学生网络安全技能大赛 蓝帽杯 2023]——Web方向部分题 详细Writeup

Web LovePHP 你真的熟悉PHP吗&#xff1f; 源码如下 <?php class Saferman{public $check True;public function __destruct(){if($this->check True){file($_GET[secret]);}}public function __wakeup(){$this->checkFalse;} } if(isset($_GET[my_secret.flag]…

想要买一款手机!得先用爬虫爬取一下他的评论是否值得买!

1. 网站分析 本文实现的爬虫是抓取京东商城指定苹果手机的评论信息。使用 requests 抓取手机评论 API 信息&#xff0c;然后通过 json 模块的相应 API 将返回的 JSON 格式的字符串转换为 JSON 对象&#xff0c;并提取其中感兴趣的信息。读者可以点击此处打开 京东商城&#xf…

Web前端期末大作业-在线手机商城网站设计(HTML+CSS+JS)

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

优秀网站看前端 —— 小米Note介绍页面

刚开始经营博客的时候&#xff0c;我写过不少“扒皮”系列的文章&#xff0c;主要介绍一些知名站点上有趣的交互效果&#xff0c;然后试着实现它们。后来开始把注意力挪到一些新颖的前端技术上&#xff0c;“扒皮”系列便因此封笔多时。今天打算重开“扒皮”的坑&#xff0c;不…

爬取五大平台621款手机,告诉你双十一在哪买最便宜!

↑关注置顶~ 有趣的不像个技术号 今晚0点&#xff0c;相约剁手 大家好&#xff0c;我是朱小五 明天就是双十一了&#xff0c;看了看自己手里的卡的像IE浏览器的手机&#xff0c;感觉可能等不到5G普及了。 我&#xff01;要&#xff01;换&#xff01;手&#xff01;机&#xff…

宁花4000买手机 不花6元买游戏

宁花4000买手机 不花6元买游戏 2012-03-22 09:17 0评论 阅读数&#xff1a;1005 单独窗口打印放大字号缩小字号 千变万变&#xff0c;国情不变。曾经毁了中国PC游戏市场的那些东西&#xff0c;如今又在iOS游戏市场一一重现&#xff1a;盗版、外挂、抄袭、强制消费、恶意竞争………

买手机选择困难症,Python数据分析帮你解决

每年各大品牌旗舰机发布都是一大热点&#xff0c;特别是前几天发布的iPhone Xs Max算是手机界的大新闻了&#xff0c;新款iPhone的价格也再度刷新了手机定价的记录。看完发布会&#xff0c;相信很多人的心情是这样的&#xff08;文末爬虫资料赠送&#xff09; 我一朋友鱼哥之前…

基于JAVA的盛卖手机销售网站的设计

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;

HTML/CSS/Javascript注册登陆界面全模版(表单验证/验证码生成/敏感词屏蔽/炫酷动画/账号信息储存)

作为前端初学者&#xff0c;我在自学过程中发现了许多自己难以解决的问题&#xff0c;而在搜索相关内容时由于许多资料过于分散&#xff0c;使用起来十分麻烦&#xff0c;所以我在完成相关内容编写后将其整理为一个模块来进行逐个分析。 示例源码&#xff1a;https://download…

小程序如何写一个优美的tab选项卡

小程序如何写一个优美的tab选项卡&#xff1f; 最近有位朋友刚学小程序&#xff0c;于是乎给我传了他写的一个tab选项卡&#xff0c;昨天晚上恰有空闲&#xff0c;于是改了一下 写选项卡的方法有很多&#xff0c;方法也特别简单&#xff0c;本文就介绍一下就客户体验而言如何让…

css html5布局方式_创建新HTML5 / CSS3单页布局–艺术主题

css html5布局方式 HTML5/CSS3 single page layout – Art theme. Today I will like to product new great masterpiece – new template with codename: ‘Art theme’. This will nice HTML5 template with nice gray colors. Hope that you will like new styles and you w…

android popWindow组件微信式实现(较完整版)

效果 PopWinLayout package com.coral3.common_module.components;import android.content.Context; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.Gravity; import android.view.LayoutInflater; import a…

前端学习第四周

目录 一.position定位1.1定位的用法&#xff08;写法&#xff09;1.2relative相对定位1.2.1特性1.2.2实际案例 1.3absolute绝对定位1.3.1特性1.3.2实际案例 1.4fixed&#xff1a;固定定位1.4.1特性1.4.2实际案例 1.5sticky粘性定位1.5.1特性1.5.2实际案例 1.6z-index定位层级1.…

Web前端4

一、relative相对定位 position定位 1.position特性 css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则决定了该元素的最终位置。 2.position取值 static(默认) relative absolute fixed sticky relative相对定位 1.如果没有定位偏移量&am…

Flutter 城市/通讯录列表字母索引联动效果实现

前言 在像通讯录&#xff0c;联系人列表&#xff0c;城市选择列表等数据量比较多的长列表页面中&#xff0c;我们经常会留意到产品设计会在页面的右侧区域提供一个竖向的字母索引列表&#xff0c;供用户点击选择快速定位到长列表中的指定索引位置&#xff0c;以便于用户快速定位…

快给你的Vue项目添加一个编辑图片组件吧

一款功能极其强大的图片编辑插件 tui.image-editor 快速体验 首选在你的前端项目中安装&#xff1a; npm i tui-image-editor // or yarn add tui-image-editor现在你就去新建一个.vue文件&#xff0c;复制进去下面这段代码&#xff1a; <template><div id"t…

QTableWidget表格控件的用法(非常详细)

QTableWidget表格控件的用法&#xff08;非常详细&#xff09; [1] QTableWidget表格控件的用法&#xff08;非常详细&#xff09;[2] QTableWidget详解1.常用API设置自动调整行高和列宽设置表格内容是否可编辑设置行表头、列表头是否显示 2.添加子项3.右键弹出菜单4.设置风格5…

如果你觉得自己对 CSS 变量不熟悉,那么可以补充这个!

作者&#xff1a; Ahmad Shadeed 译者&#xff1a;前端小智 来源&#xff1a;ishadeed 点赞再看&#xff0c;养成习惯 本文 GitHub https://github.com/qq449245884/xiaozhi 上已经收录&#xff0c;更多往期高赞文章的分类&#xff0c;也整理了很多我的文档&#xff0c;和教程资…

VMware中配置NAT方式上网 by.zyw

VMware中配置NAT方式上网 by.zyw 看了本站上众大神的VMware配置NAT方式上网的文章后&#xff0c;发现在本人电脑上并不能完全设置成功&#xff0c;在自己摸索后&#xff0c;虚拟机配置NAT方式上网成功&#xff0c;下列个人实际操作经验&#xff1a; NAT模式介绍&#xff1a; …