又想了一个问题:预测股价。这回跟量化有直接关系了吧?
先看两篇文章
首先是一篇综述性文章。
徐程成.股票价格预测方法综述.中国市场,2020, (9):42-43,68.
股票预测的方法有:
1.传统方法:
①基于统计学和概率论的VAR(向量自回归模型)、ARM(自回归滑动平均模型)、指数平滑模型。
②基于非统计原理的GM、SVM以及ANN创新型预测模型。
③灰色预测法。
④人工神经网络。
2.集合经验模态分解方法(EEMD)
3.机器学习方法:多种机器学习方法与金融模型融合。
4.时间序列方法:ARMA,ARIMA,GARCH等,以及与小波分析等方法结合。
5.神经网络:BP神经网络,小波神经网络,遗传算法等。
再来看具体的预测方法。
一篇用简单的多元线性回归模型进行预测的:
王培冬.基于多元线性回归的股价分析及预测.科技经济市场,2020(1):84-85.
此文用多元线性回归模型对沪深300指数进行了预测,以开盘价,收盘价,最高价,最低价,成交量,成交额,次日开盘价为自变量,以第二天收盘价为预测目标,用多元线性回归模型进行预测。我先用python尝试实现一下吧。
首先要搞到数据。开始用tushare,这个我从一开始就用了,发现提示要升级到pro版了,要使用更多功能要去挣积分,关键是积分有效期一年……我尝试了一下,好麻烦。收费我绝对不反对,但不应该这么折腾初级用户。想到了我以前用的一个笔记软件——为知笔记。它开始收费我就换到印象笔记了,尽管免费版基本够用了,我还是买了高级账户。扯远了,回来。找到个替代品:akshare。官网
选取沪深300指数2018年一整年的数据进行预测分析。
1 | import tushare as ts |
接着对数据进行处理,生成特征和目标值。次日收盘价为目标值。
就用多元线性回归模型对次交易日指数进行预测。
1 | # 数据预处理 |
OK,可以开始干活了。
加载完数据,画箱状图看看。
成交量数据远远大于其它数据,做标准化吧。
做完再画图看看。(标化以后又乘500再加了3500)
画配对图看看
OK,开始正式干活吧。
1 | # 训练 |
结果
截距: [2.36916081] 回归系数: [[-0.15301665 0.17758906 0.25901863 -0.39743459 -0.02732929 1.09816001 0.04366043]]
模型评分: 0.9880317755151593
论文给出的R²评分为0.989或0.988,我的结果与其很接近的。
下面输出残差对预测值的散点图。
随机分布,无任何规律性,说明数据满足模型基本假设。
下面应用模型,载入2019年的数据,用模型进行预测看看。
模型验证评分: 0.976653552728345
验证结果,大的趋势还是蛮像的,但是短期会有很大偏离。而我们使用今天的数据(以及明天开盘的数据)预测明天收盘,所以这种预测并没有啥卵用……
再看看预测误差
画直方图看看。
基本还是正态分布的。平均误差率-0.15%。
现在,来重构一下整个程序,把重复的部分提取出来。
最后,用一个策略来实际检验一下模型吧:从第二个交易日开始,用模型对当天的收盘价进行预测,并与头一天对比,如果上涨则以开盘价全仓(前一天资金的90%,因为还要cover手续费)买入,如果下跌则以开盘价清仓。当然这个策略不太真实,我不可能以开盘价买入,而且买入那么多。
这是用2019年整年的数据回测的结果。
可以说相当好了,一年涨了3倍。下面计算各种回测指标。用empyrical库计算,建了一个回测类。
1 | import empyrical as ey |
回测结果:
最大回撤 -0.014615
夏普比率 6.859218
索提比率 49.698812
α -0.729592
β 0.5453
好不好呢?不好评价,看看其它方法吧。
源代码
我发文章的三个地方,欢迎大家在朋友圈等地方分享,欢迎点“在看”。
我的个人博客地址:https://zwdnet.github.io
我的知乎文章地址: https://www.zhihu.com/people/zhao-you-min/posts
我的微信个人订阅号:赵瑜敏的口腔医学学习园地