了解不同的股市状况,改变交易策略,对股市收益有很大的影响。
最近我们被客户要求撰写关于股市预测的研究报告。弄清楚何时开始或何时止损,调整风险和资金管理技巧,都取决于股市的当前状况。
可下载资源
有些策略在波澜不惊的股市中表现良好,而有些策略可能适合强劲增长或长期下跌的情况。
证券市场的预测方法一直是技术分析与量化投资的核心。建立在经典无套利理论和一般均衡定价理论基础上的资产定价模型大多依赖先验给定的状态变量,这些变量称作定价因子。其中部分因子是可观测的经济变量,如:历史价格、交易量、利率、红利等,而另一部分定价因子却是无法直接观测到的,如:市场波动率、股民偏好等,甚至是未知变量——尽管该类因子影响价格,但建模者并没有意识到其重要性。
后两类变量统称为“隐”变量。隐变量的存在,无疑对股市建模,特别是股市预测,增加了技术上的难度。一方面,需要估计状态变量的维数;另外还要对状态结构参数进行模式辨识。
隐马尔可夫链模型(Hidden Markov Model,HMM)最初是由Baum and Egon (1967)提出的参数估计和模式辨识技术。其建模过程包含一个双重随机过程的设定:一重是用隐马尔可夫链来描述的随机状态转移过程;另一重是与模型中状态相关的随机观察值输出概率分布,以描述状态和观测变量之间的统计对应关系。HMM建模和预测的机制是:通过对观测数据的收集与统计分析对不完全可观测的(隐)状态变量的维数和结构特征进行估计和辨识,进而对将来状态和输出变量进行预测。
在本文中,我们将通过使用一类强大的机器学习算法“隐马尔科夫模型”(HMM)来探索如何识别不同的股市状况。
隐马尔科夫模型
马尔科夫模型是一个概率过程,查看当前状态来预测下一个状态。 一个简单的例子就是看天气。
假设我们有三种天气情况:下雨、多云、阳光明媚。 如果今天下雨,马尔科夫模型就会寻找每种不同天气的概率。 例如,明天可能会持续下雨的可能性较高,变得多云的可能性略低,而会变得晴朗的几率很小。
构建模型
基于以上背景, 然后我们可以用来找到不同的股市状况优化我们的交易策略。 我们使用2004年至今的上证指数(000001.ss)来构建模型。
首先,我们得到上证指数的收盘价数据,计算得到收益率数据,并建立HMM模型比较模型的预测结果。
df <- data.frame(Date=index(shdata),coredata(shdata))
# 创建布林带
bbands <- BBands(shdata[,c("000001.SS.High","000001.SS.Low","000001.SS.Close")])
# 连接和数据子集
df <- subset(cbind(df, data.frame(bbands[,1:3])), Date >= "2015-02-14")
#用于增长和减少的颜色列
for (i in 1:length(df[,1])) {
if (df$X000001.SS.Close[i] >= df$X000001.SS.Open[i]) {
df$direction[i] = 'Increasing'
} else {
df$direction[i] = 'Decreasing'
}
}
i <- list(line = list(color = '#17BECF'))
d <- list(line = list(color = '#7F7F7F'))
# 绘制烛台图
# 绘制条形图
pp <- df %>%
plot_ly(x=~Date, y=~X000001.SS.Volume, type='bar', name = "000001.SS Volume",
color = ~direction, colors = c('#17BECF','#7F7F7F')) %>%
layout(yaxis = list(title = "Volume"))
# 创建范围选择器按钮
rs <- list(visible = TRUE, x = 0.5, y = -0.055,
xanchor = 'center', yref = 'paper',
font = list(size = 9),
buttons = list(
...)
))
# 具有共享x轴的子图
p <- subplot(p, pp, heights = c(0.7,0.2), nrows=2,
shareX = TRUE, titleY = TRUE) %>%
layout(title = paste("000001.SS: 2004-01-01 -",Sys.Date()),
xaxis = list(rangeselector = rs),
legend = list(orientation = 'h', x = 0.5, y = 1,
xanchor = 'center', yref = 'paper',
font = list(size = 10),
bgcolor = 'transparent'))
p
绘制上证指数的收盘价和收益率数据,我们看到2004年和2017年期间股市的波动情况。
对收益率拟合了三状态隐马尔可夫模型之后, 绘制每个状态的后验概率:
2007 – 2009年间,由于次贷危机,股市出现了惊人的波动,迅速改变了不同状态的后验概率。
可以看到2008年前后状态2和状态3的概率出现了很大的变化。
股市在2010年后变得平静,因此状态2和状态3的概率处于平衡状态。
基于以上判断,我们将三种不同的状态进行定义。状态1认为是震荡市场,状态2认为是下跌市场,状态3认为是上涨市场。然后将不同状态的预测结果返回到真实的上证指数来观察是否符合客观逻辑。
通过真实数据拟合,我们看到状态1(紫色)震荡市场,状态2(绿色)下跌市场,状态3(红色)上涨市场符合实际的情况。
通过隐马尔科夫模型,可以深入了解不断变化的股市状况。 从而提高交易策略的性能。就从我们的简单探索来看,这个模型应当是值得花一些时间去打磨的。可改进的地方非常多。例如可以引入多因子分析,建立多元模型等。