import numpy as np

import pandas as pd

import tushare as ts

import matplotlib.pyplot as plt

from pylab import mpl

from datetime import datetime

import talib

from sklearn.ensemble import RandomForestClassifier #分类决策树模型

from sklearn.metrics import accuracy_score #预测准确度评分函数

import warnings

warnings.filterwarnings("ignore")

#pd.set_option()就是pycharm输出控制显示的设置

pd.set_option('expand_frame_repr', False)#True就是可以换行显示。设置成False的时候不允许换行

pd.set_option('display.max_columns', None)# 显示所有列

#pd.set_option('display.max_rows', None)# 显示所有行

pd.set_option('colheader_justify', 'centre')# 显示居中

pro = ts.pro_api('要到tushare官网注册个账户然后将token复制到这里,可以的话请帮个忙用文章末我分享的链接注册,谢谢')

mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体

mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

#1.数据准备

df = pro.daily(ts_code='002505.SZ', start_date='20200101', end_date='20200818')

df.set_index('trade_date', inplace=True) #设置date列为索引,覆盖原来索引,这个时候索引还是 object 类型,就是字符串类型。

df.index = pd.DatetimeIndex(df.index) #将object类型转化成 DateIndex 类型,pd.DatetimeIndex 是把某一列进行转换,同时把该列的数据设置为索引 index。

df = df.sort_index(ascending=True) #将时间顺序升序,符合时间序列

print(df)

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

df['MA5'] = df['close'].rolling(5).mean()

df['MA10'] = df['close'].rolling(10).mean()

df.dropna(inplace=True)

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)

#2.提取特征变量和目标变量,用当天收盘后获取完整的数据为特征变量,下一天的涨跌情况为目标变量这样来训练分类决策树模型

X = df[['close', 'vol', 'close-open', 'MA5', 'MA10', 'high-low', 'RSI', 'MOM', 'EMA12', 'EMA26', 'MACD', 'MACDsignal', 'MACDhist']]

y = np.where(df['price_change'].shift(-1)>0, 1, -1) #下一天股价涨,赋值1,下跌或平,赋值-1

#3设置训练集跟测试集

X_length = X.shape[0] #获取X的行数和列数,shape[0]为行数

split = int(X_length * 0.8)

X_train, X_test = X[:split], X[split:]

y_train, y_test = y[:split], y[split:]

#4设置模型

model = RandomForestClassifier(max_depth=4, n_estimators=10, min_samples_leaf=5, random_state=1)

model.fit(X_train, y_train)

#5预测股价涨跌,根据X_test给出的'close', 'vol', 'close-open', 'MA5'等数据进行预测第二天股价的涨跌情况

y_pred = model.predict(X_test)

#print(y_pred)

a = pd.DataFrame()

a['预测值'] = list(y_pred)

a['实际值'] = list(y_test)

print(a)

#6预测属于各个分类的概率

y_pred_proba = model.predict_proba(X_test)

b = pd.DataFrame(y_pred_proba, columns=['分类为-1的概率', '分类为1的概率'])

print(b)

#7整体模型的预测准确度

from sklearn.metrics import accuracy_score

score = accuracy_score(y_pred, y_test)

print('准确率: ' + str(round(score*100, 2)) + '%')

#8分析特征变量的特征重要性

features = X.columns

importances = model.feature_importances_

b = pd.DataFrame()

b['特征'] = features

b['特征重要性'] = importances

b = b.sort_values('特征重要性', ascending=False)

print(b)

#参数调优

from sklearn.model_selection import GridSearchCV

parameters = {'n_estimators':[5, 10, 20], 'max_depth':[2, 3, 4, 5], 'min_samples_leaf':[5, 10, 20, 30]}

new_model = RandomForestClassifier(random_state=1)

grid_search = GridSearchCV(new_model, parameters, cv=6, scoring='accuracy')

grid_search.fit(X_train, y_train)

grid_search.best_params_

print('最优模型参数: ' + str(grid_search.best_params_))

python股票交易模型_python随机森林模型简单股票涨跌预测相关推荐

  1. python房价预测模型_python随机森林房价预测

    Kaggle房价预测 作为Kaggle竞赛中的经典入门题目,我主要在kernels中学习其他人分析和处理数据的流程,首先是通过各类plt的图表,分析数据特征和房价之间的相关性 载入数据集 df_tra ...

  2. python随机森林模型简单股票涨跌预测

    前言: 学了差不多10多天的入门机器学习,突然发现学好数学是多么的重要,以前上学时还觉得数学只要学会加减乘除就可以了,什么导数,回归方程都没什么用,这段时间真后悔死,看了好多模型原理推导,有好多的数学 ...

  3. 随机森林模型构建--在凯斯西储(CWRU)数据上的简单测试(1)

    随机森林模型构建测试–在凯斯西储(CWRU)数据上的简单测试(1) 文章目录 随机森林模型构建测试--在凯斯西储(CWRU)数据上的简单测试(1) 1. 实验数据集说明 2. 测试数据说明 3. 随机 ...

  4. Python使用随机森林模型进行电影评分预测

    目录 数据处理 数据划分 数据建模 模型评估 结果预测 综合运用数据分析与数据挖掘课程中的数据探索.数据预处理.分析建模等理论知识,能够根据不同的业务的场景,选定不同的数据分析与数据挖掘模型,并能够通 ...

  5. Python计算树模型(随机森林、xgboost等)的特征重要度及其波动程度:基于熵减的特征重要度计算及可视化、基于特征排列的特征重要性(feature permutation)计算及可视化

    Python计算树模型(随机森林.xgboost等)的特征重要度及其波动程度:基于熵减的特征重要度计算及可视化.基于特征排列的特征重要性(feature permutation)计算及可视化 目录

  6. python基于随机森林模型的预测概率和标签信息可视化ROC曲线

    python基于随机森林模型的预测概率和标签信息可视化ROC曲线 目录 python基于随机森林模型的预测概率和标签信息可视化ROC曲线

  7. 【信用评分预测模型(四)】Python随机森林模型

    文章目录 前言 一.随机森林介绍 一.定义函数 二.模型建立 1.模型参数设置 2.模型训练集和测试集拆分 3.模型训练 4.特征值 总结 前言 在https://blog.csdn.net/m0_6 ...

  8. kaggle项目:基于随机森林模型的心脏病患者预测分类!

    公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 新年的第一个项目实践~给大家分享一个新的kaggle案例:基于随机森林模型(RandomForest)的心脏病人预测分类 ...

  9. ArcGIS Pro随机森林模型深度机器学习预测海草栖息地【教程】

    开始之前,总体梳理一下项目流程,大致了解一下我们是怎么一步一步得到最终结果的 1.创建训练数据集 下载数据(链接:https://pan.baidu.com/s/1tM4ZXplEP2MC787OKS ...

最新文章

  1. 被忽视的Web安全漏洞:如何识别和解决?
  2. ABAP,Java, nodejs和go语言的web server编程 1
  3. OpenShift 4 - 提权运行容器
  4. Neo4j HA环境配置
  5. Spring MVC中ModelAndView
  6. php larval开发规范,Laravel 开发规范摘要
  7. 使用Spider提取数据(爬取起点中文网)
  8. python3 接口获取数据
  9. 冰冻三尺,非一日之寒
  10. 迅为4418/6818开发板 Yocto 系统烧写
  11. win10亮度调节变为灰色无法调节
  12. 智能电话机器人介绍(AI语音机器人)
  13. 计算机组成原理 习题+知识点
  14. 2022年大厂招聘Java程序员的技术标准,你有什么看法?
  15. Graphics.FromImage报错“Graphics object cannot be created from an image that has an indexed pixel ...”
  16. 如何策划新闻稿,低成本实现品牌影响力增长
  17. 论文翻译 SGCN:Sparse Graph Convolution Network for Pedestrian Trajectory Prediction 用于行人轨迹预测的稀疏图卷积网络
  18. Ubuntu显示连上网络却上不了网
  19. prometheus+grafana对数据库mysql监控
  20. SpringBoot的宠物医院管理系统(有文档)

热门文章

  1. 游戏策划笔记:系统数值分析
  2. 大幅修改!《涉密信息系统集成资质管理办法》 现行有效管理办法与征求意见稿变化汇总(附对照表)...
  3. AR8161网卡驱动安装
  4. Math Problem(等差数列求和)
  5. visual pushing grasping 模型部分 Q值怎么来的
  6. python可以这样学豆瓣_豆瓣程序员如何利用Python开发出这么成功的社区?
  7. 「永恒之塔私服」- 区块链基础设施之跨链通信协议层-Aionsf详解
  8. 二、YUV420图像的水平拼接
  9. 深信服防火墙AF8.0配置
  10. 推荐几本经典的计算机视觉和OpenCV书籍