【明天股票会涨吗?】


最近真的是啥都一片绿啊,股票也、基金也、哎!说多了都是泪,幸好我没买,嘻嘻。但是这种价格的大幅度的变动也让不少热爱风险的人看到了机会。想起以前学的东西,正好再复习一遍。所以这片短文以通过支持向量机、逻辑回归和神经网络这样三种方法来判断中证500指数的走势。(tushare ID:436348)

以中证500为例的股指涨跌预测

1.数据的获取

短文中所用的数据来自于Tushare大数据社区,获取过程比较简单:

  1. **打开Tushare 社区,点击数据工具
    在这里插入图片描述

  2. 点击你想要抓取的数据,并填写相关参数

  3. 点击运行调试可以预览数据;点击生成代码,可以自动生成从Tushare下载数据的程序代码;点击详细文档可以看到界面右边各个指标的详细含义,非常好用

# 导入需要的包
import tushare as ts
import pandas as pd
import numpy as np
from sklearn import svm
from sklearn.linear_model import LogisticRegression as LR
# 初始化pro接口
pro = ts.pro_api('你的token')
# 拉取数据 中证500从2021年1月1日开始的数据

这是Tushare自动生成的数据提取代码

df = pro.index_daily(**{
    "ts_code": "000905.SH",
    "trade_date": "",
    "start_date": 20210101,
    "end_date": "",
    "limit": "",
    "offset": ""
}, fields=[
    "ts_code",
    "trade_date",
    "close",
    "open",
    "high",
    "low",
    "pre_close",
    "change",
    "pct_chg",
    "vol",
    "amount"
])
# 结果输出
print(df)
       ts_code trade_date      close       open       high        low  \
0    000905.SH   20220330  6377.8744  6272.0017  6377.8744  6261.8037   
1    000905.SH   20220329  6253.0692  6289.4756  6316.3129  6233.2822   
2    000905.SH   20220328  6283.2814  6230.1211  6322.1284  6176.2482   
3    000905.SH   20220325  6268.2376  6346.7106  6373.4658  6268.2376   
4    000905.SH   20220324  6344.1150  6370.9710  6384.4046  6315.1424   
..         ...        ...        ...        ...        ...        ...   
295  000905.SH   20210108  6557.5964  6541.5576  6598.3812  6484.3979   
296  000905.SH   20210107  6538.1162  6523.6756  6567.2727  6467.4371   
297  000905.SH   20210106  6528.1425  6549.7310  6569.1990  6472.7446   
298  000905.SH   20210105  6539.7315  6470.2503  6539.7315  6452.5245   
299  000905.SH   20210104  6482.7868  6395.6118  6501.5892  6359.0797   

     pre_close    change  pct_chg          vol        amount  
0    6253.0692  124.8052   1.9959  164014575.0  1.556008e+08  
1    6283.2814  -30.2122  -0.4808  141362124.0  1.404014e+08  
2    6268.2376   15.0438   0.2400  144857887.0  1.369917e+08  
3    6344.1150  -75.8774  -1.1960  134972256.0  1.351818e+08  
4    6398.1009  -53.9859  -0.8438  137749086.0  1.391760e+08  

2.数据的处理

因为拿到的数据中,指标间的单位差别很大,为了便于比较同时也是常规的处理方法,即对承担解释功能的指标进行归一化处理。将股指的涨跌作为决策变量,按照其上涨或者下跌分别赋值为1或者0。

  1. **对决策变量进行走势标识
Y= df['pct_chg'].values
# 设置走势标识
Y[Y>0]=1
Y[Y<=0]= -1
Y= Y.reshape(len(Y),1)
# 删除本实验中用不到的数据
del df['pct_chg']
del df['change']
del df['ts_code']
del df['trade_date']

2. 对解释变量进行归一化

 col = df.columns
for i in range(,):
    dff[col[i]] = (df[col[i]]-df[col[i]].min())/(df[col[i]].max()-df[col[i]].min())

3.模型训练与求解

  1. **将数据划分为训练样本和测试样本
x_train = dff.iloc[:len(dff)-50,:]
y_train = Y[:len(Y)-50]
x_test = dff.iloc[len(dff)-50:,:]
y_test = Y[len(Y)-50:]
type(y_test)

2.训练并求解

# 支持向量机代码
clf = svm.SVC(kernel="rbf")
clf.fit(x_train,y_train)
rv1 = clf.score(x_train,y_train)
R = clf.predict(x_test)
R = R.reshape(len(R),1)
Z = R-y_test
Rs1 = len(Z[Z==0])/len(Z)

# l逻辑回归模型
lr = LR()
lr.fit(x_train,y_train)
rv2 = lr.score(x_train, y_train)
R = lr.predict(x_test)
R = R.reshape(len(R),1)
Z = R - y_test
Rs2 = len(Z[Z==0])/len(Z)

# 神经网络模型
from sklearn.neural_network import MLPClassifier
clf = MLPClassifier(solver='lbfgs',alpha = 1e-5,hidden_layer_sizes = (5,3),random_state=1)
clf.fit(x_train,y_train)
rv3 = clf.score(x_train, y_train)
R = clf.predict(x_test)
R = R.reshape(len(R),1)
Z = R - y_test
Rs3 = len(Z[Z==0])/len(Z)

# 结果输出
print('支持向量机模型准确率:',rv1)
print('逻辑模型准确率:',rv2)
print('神经网络模型准确率:',rv3)
print(" ="*30)
print('支持向量机模型预测准确率:',Rs1)
print('逻辑模型预测准确率:',Rs2)
print('神经网络模型预测准确率:',Rs3)
print(" ="*30)

4.结果与反思

支持向量机模型准确率: 0.7
逻辑模型准确率: 0.632
神经网络模型准确率: 0.56
 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
 支持向量机模型预测准确率: 0.66
逻辑模型预测准确率: 0.56
神经网络模型预测准确率: 0.52

从模型准确率来讲呢,最高的是支持向量机模型最低的是神经网络模型,逻辑回归模型居中;从预测准确率来讲最高的也是支持向量机模型,最低的也是神经网络模型,然后逻辑回归模型居中。总体上讲预测的结果都是还是难以差强人意。
反思:
准确率不高的原因有可能有1.数据的处理过于粗糙,比如有些在处理过程中先于变量的均值作比较再进行标准化归一化等操作;2.模型参数的设置需要改进;3.数据波动较大,预测较为困难,因为模型采用的是最近的数据,而最近新冠疫情、俄乌战争叠加影响,预测难度提高。当然还有其他原因,比如只考虑了交易层面的数据,也许加入宏观数据,结果会有改善。

5.结语

**从这次的小实验来看,想要仅仅依靠基本模型和简单的数据处理来判断股市,基本上是痴心妄想,嘻嘻。后期会在上述思考的基础上再进行试验,也会分享出来。最好祝福看到这篇文章的人都能发大财!
ps:文中的部分代码来自 黄恒秋、张良均等的《python金融数据分析与挖掘实战》一书,感兴趣的朋友也可以买来看看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值