前面已经讲过了逻辑回归和SVM分类的算法原理。
今天简单讲一个以收盘价为因子预测涨跌的例子。
以沪深300指数为例
策略 :以前七日的指数收盘价为学习因子,预测下一天收盘价的涨跌
分类问题
涨 label 1
跌 label -1
训练集 2014.01.01-2018.06.30 沪深300指数 收盘价
测试集 2018.07.01-2020.01.01 沪深300指数 收盘价
回测如下
一:准备
from pylab import plt%matplotlib inlineimport seabornimport matplotlib as mplmpl.rcParams['font.family'] = 'serif'import warnings;warnings.simplefilter('ignore')import pandas as pdimport numpy as npimport tushare as ts #数据来源
二 :数据准备
hs300 = ts.get_k_data('hs300',start='2014-01-01',end='2018-06-30') #训练集 17-19 19-20测试hs300.set_index('date',inplace=True)hs300.head(10)
hs300['return'] = hs300['close'].pct_change() #迭代差值就比例hs300.dropna(inplace=True)hs300.head()#得到指数收益

for i in range(1,8,1):hs300['close - '+str(i)+'d'] = hs300['close'].shift(i) #shift(period:表示移动的幅度 axis:轴向 =0 )hs300.head(10)

hs_7d = hs300[[x for x in hs300.columns if 'close' in x]].iloc[7:]hs_7d.head(10)

3:模型训练
import sklearnfrom sklearn import linear_modelX_train = hs_7dX_train = sklearn.preprocessing.scale(X_train) #标准化X_train

lm = linear_model.LogisticRegression(C=1000) #C 控制决策边界 的惩戒因子Y_train = np.sign(hs_7d['close'].pct_change().shift(-1)) #sign -1 0 +1 重要 拿到下一天的收益 所以上移Y_train.replace(to_replace=np.NAN,value= 0, inplace = True)

lm.fit(X_train,Y_train)

hs300['prediction'].value_counts()

hs300['strategy'] = (hs300['prediction']*hs300['return']+1).cumprod()hs300['cum_ret'] = (hs300['return']+1).cumprod()hs300[['strategy','cum_ret']].dropna().plot()

训练好的模型训练集的收益。 跑输大盘 我测了好几年的 表现都比较一般、
下面为测试集收益
hs300_test = ts.get_k_data('hs300',start='2019-01-01',end='2020-01-01')hs300_test.set_index('date',inplace = True)hs300_test['returns']= hs300_test['close'].pct_change()hs300_test.dropna(inplace=True)hs300_test.head()

for i in range(1,8,1):hs300_test['close - '+str(i)+'d'] = hs300_test['close'].shift(i) #shift(period:表示移动的幅度 axis:轴向 =0 )
hs_7d_test = hs300_test[[x for x in hs300_test.columns if 'close' in x]].iloc[7:]hs_7d_test.head()


可以看到 用逻辑回归算法 得到的回测结果比较一般。
SVM算法指数回测 数据处理情况比较类似
只是把 训练模型改成了SVM模型
我就把截图放一下
第一部分 数据准备


第二准备 数据处理



第三部分 训练模型以及训练集回测

第四部分 测试集的回测



今天的这两个回测 都是分类预测
即以前七天的股价涨跌为学习因子 预测下一天的涨跌。1 , -1
下一节学习一个以SVM为模型的回归问题
以前20天的股价为因子 预测下一天股市的收盘价。
定量输出称为回归,或者说是连续变量预测;
定性输出称为分类,或者说是离散变量预测。
举个例子:
预测明天的气温是多少度,这是一个回归任务;
预测明天是阴、晴还是雨,就是一个分类任务。
预测股市是上涨还是下跌,这是一个分类任务;
预测明天股市的点数 ,就是一个回归任务。
定性输出称为分类,或者说是离散变量预测。
文章转载自量化分析之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




