基于hmm的股市预测的matlab,量价特征因子:基于HMM的多空策略(附代码)

来源:雪球App,作者: 量化投资与机器学习,(https://xueqiu.com/1524373058/132678812)

作者:Sergey Malchevskiy

编译:1+1=6 | 公众号海外部

前言

我们通常使用股市的一手数据来创建一个策略模型,预测下一时刻价格的多少、走势的判断或其他。 今天,我们想结合多样的市场条件(波动性,交易量,价格变化等等)和结合隐马尔科夫(HMM)来构建我们的交易策略。

HMM是一个统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。我们的观测数据就是的市场特征,隐藏状态是市场的行为。

我们的目标是解释建模后的隐藏状态,并基于此建立交易策略。

特征工程与模型构建

先导入有关的包:

4331d4c2fd2fea9dd5a90bfd5c7ca059.png

数据来自quandl:

43f1bf5aa349e486f694cfa11fdcfe18.png

先看看价格和成交量的走势图:

7ea223e2518ef49e582609ddcedce39b.png

3b4a71cf5e91ab3fb217094ada71c5a1.png

现在我们开始正式的特征工程和建模:

d41ea77530025d573eee1c20fa09ee0f.png

训练集:01 / 01 / 2018之前。下面的代码有关特征工程:

11eb5a7e3b92fd11400018960f5a8399.png

然后,我们得到了五个新的时间序列和训练模型:

bc0bec069c5ef2ed0605f499077414dd.png

特征序列

在上面的代码中,我们还创建了future_return列,它为last_return移动了一个lag。这是理解隐藏状态的第一个关键。我们把这个值画成每个状态的累加和。

8fb8b64aa166793040df05a220afb550.png

487235af2181019a997c8af72540e32c.png

正如我们看到的,状态#0有下降的趋势。状态#1没有一个明确的趋势。最后一个状态#2有强烈的上行趋势。 这个带有累积和future_return的简单技巧使我们能够理解每个状态如何对应下一个价格波动。

第二个关键是通过特征来研究每个状态。在此之后,我们可以将这两个事件(未来走势和当前状态)联系起来。让我们为每个状态的特征编写代码和可视化。

6248fe4a94f5925dd7e7e9d96e0cb6a2.png

c5a8e8c3db502eee213da768a6979cfa.png

每个状态的特征分布

现在你可以看到每个状态是如何描述当前状态的。例如,状态 #0和#2具有较大的成交量偏差,这意味着这些状态通常呈现在大成交量上,而状态#1呈现在较小的成交量上。此外,状态#0和#2经常表现出高度的波动性。

有趣的是,状态#0的last_return和ma_ratio的值都很低。也许,状态#0对应的是当前的条件(目前)。状态#2的情况是滞后的。

对上面的两个表述,我们可以总结为:

如果市场目前的状态是#0,那么在当前的情况下,我们主要处于下跌的市场状态,而这个趋势将会继续。

如果市场处于当前状态#1,趋势处于不确定性中。

如果市场目前的状态是#2,那么在当前的情况下,我们主要处于上升的市场状态,而这种趋势将会继续。

验证策略

逻辑很简单:

状态为#0时:做空

状态为#1时:空仓

状态为#2时:做多

我们将使用 Catalyst 框架:

92aa6fe36a383d1a3e4867feaa025d08.png

9f868e2f0cea509bb1a2ad5600a75197.png

初始化函数:

0a6d1eced414cf2010eb6bccd1d44b16.png

handle_data函数:

c0f722a38f2b1266653ff5ea0223e483.png

24b4ad8a608dd6aaa2a4304d7356362d.png

analyze函数(绘制图形并打印结果):

8771b6d6cb38a943be5e1287f8a4c421.png

运行策略:

cb46d4d446ea7a8ae74dc6a1cad0f714.png

正如我们预期的,策略跑赢了基准。如果没有趋势期,则它的结果可能一般。

0c12a7b38cfca674bcf7afc6d306f70a.png

总收益: 1.49

Sortino coef: 1.88

Max drawdown: -0.31

alpha: 0.57

beta: -0.15

总结

如何改进策略:

1、向模型添加新特征。

2、尝试不同窗口长度。

3、建立具有不同隐藏状态数的模型。

4、对策略中的隐藏状态和使用规则做出新的解释。

5、添加简单的交易规则,如止损等。

文章来自:网页链接

—End—

量化投资与机器学习微信公众号,是业内垂直于Quant、MFE、CST、AI等专业的主流量化自媒体。公众号拥有来自公募、私募、券商、银行、海外等众多圈内18W+关注者。每日发布行业前沿研究成果和最新量化资讯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值