美文网首页Python爬虫实战投资理财
基于SVM上证指数涨跌预测

基于SVM上证指数涨跌预测

作者: 机智出品 | 来源:发表于2018-04-07 18:17 被阅读106次

财务的自我修养,微信公众号:机智出品(jizhjchupin),文中各类数据文件均可于公众号内下载

这里使用机器学习sklearn库中的SVM(支持向量机),训练上证近两年的数据,对上证指数涨跌进行预测。
那我们是不是能听着音乐,抖抖腿,开着Python进行股票预测,然后把钱赚了?(你想多了~)

一、需要的库

import pandas as pd
import numpy as np
from sklearn import svm
from sklearn import cross_validation

二、获取上证指数行情

如何获取股票行情数据可以看本人以前的文章。

df=ts.get_hist_data('sh',start='2016-04-06',end='2018-04-06')
df.to_csv('stock/sh.csv')
data=pd.read_csv('stock/sh.csv',parse_dates=[0],index_col=0)
data.sort_index(0,ascending=True,inplace=True)

三、开始工作,SVM

dayfeature=50#选取150天的数据
featurenum=5*dayfeature#选取的5个特征*天数
x=np.zeros((data.shape[0]-dayfeature,featurenum+1))#记录150天的5个特征值
y=np.zeros((data.shape[0]-dayfeature))#记录涨或者跌

for i in range(0,data.shape[0]-dayfeature):
    x[i,0:featurenum]=np.array(data[i:i+dayfeature] \
                               [[u'close',u'high',u'low',u'p_change',u'volume']]).reshape((1,featurenum))
    x[i,featurenum]=data.ix[i+dayfeature][u'open']

for i in range(0,data.shape[0]-dayfeature):
    if float(data.ix[i+dayfeature][u'price_change'])>=0:
        y[i]=1
    else:
        y[i]=0

clf=svm.SVC(kernel='rbf')
result = []
for i in range(5):
    x_train, x_test, y_train, y_test = \
                cross_validation.train_test_split(x, y, test_size = 0.2)
    clf.fit(x_train, y_train)
    result.append(np.mean(y_test == clf.predict(x_test)))
    #print(clf.score(x_test, y_test))
print("svm classifier accuacy:")
print(sum(result)/len(result))
#print(result)

打印出来显示:

svm classifier accuacy:
0.563636363636

56%的正确率!
比我抛硬币也好不了多少......所以,别做梦了,好好学习吧。
那说明A股符合随机漫步理论?对不起,我不知道。我只知道有很多中国巴菲特获得了超额收益。
说明还有一些影响上证的feature没有输入进来,或者是其他原因(原谅我水平半桶水都没有)
功力不到家,同志仍需努力。


机智出品.jpg

相关文章

网友评论

    本文标题:基于SVM上证指数涨跌预测

    本文链接:https://www.haomeiwen.com/subject/waiyhftx.html