用SVM预测股票涨跌 - 免费分享全套代码

突然看到几篇用SVM预测股票涨跌的博客, 照着跑了一下发现正确率很高78.85%, 盈利次数和亏损次数的比值 也是不得了啊

用SVM预测股票涨跌 - 免费分享全套代码_第1张图片

 

然后发现这些文章的涨跌是当日对昨日的涨跌,也就是在盘中, 已知开盘价,最低价,最高价等资讯, 预测今天收盘是涨还是跌.....这需要用svm?

value = pd.Series(df_CB['close']-df_CB['close'].shift(1),\
                  index=df_CB.index)

 

为了贴近真实操盘情况, 我把涨跌幅改成 后天开盘价对明天开盘价(或是明天收盘价)的涨跌幅,看看能不能预测.....

 

# 第二天开盘买入,第三天开盘卖出
value = pd.Series((df['open'].shift(-2)-df['open'].shift(-1))/df['open'].shift(-1),index=df.index)

用SVM预测股票涨跌 - 免费分享全套代码_第2张图片

当然可以改成明天收盘买入,后天开盘卖出,但是这样取得正例的几率又更少了

当百分比大于0.7%(股票交易成本)的时候为正

交易策略就是如果预测会盈利就在明天开盘买入,然后后天卖出,运行结果正确率还是很高62.98%,但是其实是因为预测结果都是0,其实就是没法预测的意思

用SVM预测股票涨跌 - 免费分享全套代码_第3张图片

虽然心里受到了一点打击,但其实是符合常理的, 你真的以为能赚钱的代码会免费分享给你么?

最后免费分享全套代码

股票数据可以从yahoo上取得https://hk.finance.yahoo.com/lookup

import pandas as pd
from sklearn import svm,preprocessing

df=pd.read_csv("./MNIST_data/601012.csv")
columns=['date','open','high','low','close','adjclose','vol']
df.columns=columns
df_original=df.copy()
# value = pd.Series((df['close']-df['close'].shift(1))/df['close'].shift(1),index=df.index)

# 第二天收盘买入,第三天开盘卖出
# value = pd.Series((df['open'].shift(-2)-df['close'].shift(-1))/df['close'].shift(-1),index=df.index)

# 第二天开盘买入,第三天开盘卖出
value = pd.Series((df['open'].shift(-2)-df['open'].shift(-1))/df['open'].shift(-1),index=df.index)

#明日上涨
# value = pd.Series((df['close'].shift(-1)-df['close'])/df['close'],index=df.index)

df_original['后天开盘价']=df['open'].shift(-2)
df_original['明天开盘价']=df['open'].shift(-1)
df_original['涨幅']=value
# df_original['close shift(1)']=df['close'].shift(1)




value=value.fillna(0) #第一笔数据是nan
value[value>0.007]=1  #交易成本千分之7,至少要覆盖
value[value<=0.007]=0

df['value']=value
df.set_index('date')
df.sort_index()
df.drop(columns='date',inplace=True)

#删除无效数据
df=df.dropna(axis=0, how='any')
df=df.astype('float64')


df_x=df.drop(columns='value',axis=1)
df_x=preprocessing.scale(df_x)

correct=0
totalNum=0

df_original['结果']=""
trainNo=int(df_x.shape[0]*0.8)
trainOrigin=trainNo
profitTimes=0 #盈利次数
lossTimes=0 #亏损次数
miss_op=0. #
esc_risk=0. #

while trainNo

 

 

 

 

 

 

你可能感兴趣的:(ai)