西蒙斯的赚钱秘籍:隐马尔科夫模型(HMM)的择时应用
摘要:
西蒙斯是被量化圈所广为追捧的量化之神,旗下的大奖章基金创造了无数神话。成立初期的创始人中,有一位科学家发明了广泛应用在语音识别等领域的鲍姆-威尔士算法。隐马尔可夫模型(HMM)已经被成功应用在工程领域,并取得了具有科学意义和应用价值的重要成果。
本文将西蒙斯大奖章基金的利器-隐马尔可夫模型应用到我国股市的预测中,通过对股票数据序列的模式识别来对大盘走势进行预测。
一、前言:从大奖章讲起
西蒙斯是被量化圈所广为追捧的量化之神,在全球金融危机的08年,大部分对冲基金都亏损背景下,其收益高达80%。
西蒙斯创办的文艺复兴科技公司拥有一群物理学家和数学家,这群人聚在一起到底搞出了什么赚钱利器?一直是外界所猜测。众说纷纭,而其中隐马尔科夫模型也由于一些原因被推举出来。
本文将隐马尔可夫模型应用到我国股市的预测中,通过对股票数据序列的模式识别来对大盘走势进行预测。
二、HMM范例及原理
先简单回顾一下马尔科夫链。马尔可夫链,是指数学中具有马尔可夫性质的离散事件随机过程。马尔科夫性用数学公式表示如下:
马尔科夫经典范例:
根据当前天气的情况来预测未来天气情况。一种办法就是假设每天的天气状态都只依赖于前一天的状态。以下展示了天气预测的马尔科夫模型状态转移图:
假设天气预测模型的状态转移矩阵如下:
这个矩阵表示,如果昨天是阴天,那么今天有25%的可能是晴天,12.5%的概率是阴天,62.5%的概率会下雨,很明显,矩阵中每一行的和都是1。
为了初始化这样一个系统,我们需要一个初始的概率向量:
这个向量表示第一天是晴天。到这里,我们就为上面的一阶马尔科夫过程定义了以下三个部分:
状态:晴天、阴天和下雨。
初始向量:定义系统在时间为0的时候的状态的概率。
状态转移矩阵:每种天气转换的概率。所有的能被这样描述的系统都是一个马尔科夫过程。
然而在某些情况下,马尔科夫过程不足以描述我们希望发现的模式。基于观测序列及隐含变量建立HMM模型,在模式识别上有一定优势。
HMM(隐马尔科夫)经典范例:
假设有3个不同的骰子。骰子1有6个面,称为D6,每个面对应数字出现的概率是1/6;骰子2有4个面,称为D4,每个面对应数字出现的概率是1/4;骰子3有8个面,称为D8,每个面对应数字出现的概率是1/8。
现在掷骰子10次,并假设得到这么一串数字:1 6 3 5 2 7 3 5 2 4,这串数字叫做观测序列。但是在隐马尔可夫模型中,我们不仅仅有这么一串可见状态链,还有一串隐含状态链。在这个例子里,这串隐含状态链就是你用的骰子的序列。比如,隐含状态链有可能是:D4 D6 D8 D6 D4 D8 D6 D6 D6 D4。
一般来说,HMM中说到的马尔可夫链其实是指隐含状态链,因为隐含状态(骰子)之间存在转换概率。
在我们这个例子里,D6的下一个状态是D4,D6,D8的概率都是1/3。D4,D8的下一个状态是D4,D6,D8的转换概率也都一样是1/3。这样设定是为了最开始容易说清楚,但是我们其实是可以随意设定转换概率的。比如,我们可以这样定义,D6后面不能接D4,D6后面是D6的概率是0.9,是D8的概率是0.1。这样就是一个新的HMM。
可见状态之间没有转换概率,但是隐含状态和可见状态之间有一个概率叫做输出概率。就我们的例子来说,六面骰子(D6)得到每个数字的输出概率都是1/6(假设骰子没被动过手脚)。
在上面的这些情况下,可以观察到的状态序列和隐藏的状态序列是概率相关的。于是我们可以将这种类型的过程建模为有一个隐藏的马尔科夫过程和一个与这个隐藏马尔科夫过程概率相关的并且可以观察到的状态集合,就是隐马尔可夫模型(Hidden Markov Model),简称HMM。
HMM的三个问题及算法:
对于股市我们也常常面临以下的问题:我们希望基于能观测到的有限的信息(股价、成交量及波动率)来预测我们所无法得知的股价背后驱动因素,乃至预测股价的涨跌原理,这个预测的建模过程与HMM不乏有许多相似之处。
HMM模型的构建,重点在于分别解决三种问题:
问题1:知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率),根据掷骰子掷出的结果(可见状态链),我想知道每次掷出来的都是哪种骰子(隐含状态链)。
问题2:知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率),根据掷骰子掷出的结果(可见状态链),我想知道掷出这个结果的概率。
问题3:知道骰子有几种(隐含状态数量),不知道每种骰子是什么(转换概率),观测到很多次掷骰子的结果(可见状态链),我想反推出每种骰子是什么(转换概率)。
三、HMM在股市预测中的应用
HMM在语音识别中的应用流程:
(1)首先,从输入的语音中提取相应的数字特征序列,并对模型进行训练,得到局部最优参数估计。HMM语音识别模型训练过程如下图:
(2)其次,输入需要进行识别的语音,通过提取相应的数字特征序列,再运用向前-向后算法对各类模型进行似然估计,得到最大概率的模型输出,从而实现识别功能。HMM模型语音识别过程如下图:
基于HMM模式识别模型的股市走势预测:
(1)首先,按照事先分类,选取历史上属于同类走势的日期以及该日期之前若干个星期的股票数据,提取股票数据中某些特征指标(成交价格,成交量,等等)形成相应的序列作为模型的输入,并应用Baum-Welch算法对各类模型进行训练,训练过程如下图:
(2)其次, 根据训练好的HMM模型,选取若干个星期的股票特征指标(成交价格,成交量,等等)序列作为输入,应用向前-向后算法计算各个模型发生的概率,选取最大概率对应的模型,从而得到下一阶段股票走势的识别结果。识别过程如下图:
四、HMM策略实证结果
4.1、策略说明
择时指数:沪深300指数;
时间区间:2007/07/20至2016/09/09;
我们分别基于大盘的涨跌幅、换手率、成交金额以及每日的主动买卖盘金额等数据构造不同的观测序列变量如下:
X1: 股票日收益率;
X2: 资金日净流入占当日所有流动资金的比例;
X3: 日总流动资金环比;
X4: 标准化资金流,即:(日总流动资金-过去一年平均流动资金/过去一年流动资金波动率。
X5: 换手率日环比;
X6: 成交金额日环比;
X7: 标准化成交金额日。
从中选择不同的变量构造观测变量组合,并根据标的指数周涨跌情况将所有样本划分为两类(分别对应涨、跌),分别运用观测变量组合训练不同的HMM模型。
4.2、基于HMM的指数择时原理
基于不同类型(分涨、跌两类)样本数据分别训练得到对应的模型:HMM1和HMM2,根据最新观测变量输入之后的概率高低作为下周大盘涨跌的判断依据,对指数进行多空操作。此外,为了避免模型连续预测错误导致的策略较大亏损,我们加入了信号止损机制:当最近一次信号开仓起来,策略累计亏损达到某个阀值(如5%),则对当前仓位进行平仓,直到下一次出现相反信号再重新开仓
4.3、策略表现
(1)不考虑做空
若当信号为空时,指数空仓,不考虑做空,则在2007年07月20至2016年9月9日共450周间,共发出了62次买入信号和61次卖出信号,信号止损信号8次。平均每3.8周一次买卖信号。其中,预测结果准确为250周,准确率为56 %,策略累计收益率为183%,年化21.1%。
(2)考虑做空
若当信号为空时,指数开空仓,则在2007年07月20日至2016年9月9日共450周间,共发出了62次买入信号和61次卖出信号,信号止损信号16次,由于止损而空仓31周。平均每3.8周一次买卖信号。其中,预测结果准确为250周,准确率为56 %,策略累计收益率为899%,年化103.9%。
五、总结
5.1、研究意义和创新点
本报告首次提出将HMM模式识别模型引入到股票价格波动预测问题中,通过解决HMM模型中的学习问题和识别问题,建立了一个基于股票日收益率以及日资金流等变量的对股票指数择时模型,经实证检验,无论是预测准确率和择时策略收益,该模型都取得了比较不错的效果,具有相当的理论和现实意义。
由于HMM模型的相关算法相当成熟,且具有效率高,效果好以及易于通过已有的数据进行模型训练等特点,因此选用HMM模型进行股票波动模式识别不仅是一个较大的创新,更是一个值得探讨的选择。
5.2、模型的不足
(1)模型的预测准确率有待进一步提高;
(2)输入向量的选择是HMM模型的关键,本文仅针对股价、换手率以及资金流等构造输入变量,所能提取的股市信息存在局限。
-------------------------
拓展阅读:
1.一个量化策略师的自白(好文强烈推荐)
2.市面上经典的量化交易策略都在这里了!(源码)
3.期货/股票数据大全查询(历史/实时/Tick/财务等)
4.干货| 量化金融经典理论、重要模型、发展简史大全
5.从量化到高频交易,不可不读的五本书
6.高频交易四大派系大揭秘
西蒙斯的赚钱秘籍:隐马尔科夫模型(HMM)的择时应用相关推荐
- 隐马尔科夫模型(HMM)择时应用的量化策略
HMM模型 隐马尔科夫模型(HMM)择时应用的量化策略. 仅为研究学习使用, 不作为任何投资策略建议. 文章内容从各处整理汇总而成, 感谢各位大神分享. 具体策略代码均调试通过. 一.从大奖章讲起 ...
- 隐马尔科夫模型HMM自学 (3)
Viterbi Algorithm 本来想明天再把后面的部分写好,可是睡觉今天是节日呢?一时情不自禁就有打开电脑.......... 找到可能性最大的隐含状态序列 崔晓源 翻译 多数情况下,我们都希望 ...
- 隐马尔科夫模型HMM自学 (2)
HMM 定义 崔晓源 翻译 HMM是一个三元组 (,A,B). the vector of the initial state probabilities; the state transitio ...
- 隐马尔科夫模型HMM自学(1)
介绍 崔晓源 翻译 我们通常都习惯寻找一个事物在一段时间里的变化规律.在很多领域我们都希望找到这个规律,比如计算机中的指令顺序,句子中的词顺序和语音中的词顺序等等.一个最适用的例子就是天气的预测. 首 ...
- 【NLP】用于语音识别、分词的隐马尔科夫模型HMM
大家好,今天介绍自然语言处理中经典的隐马尔科夫模型(HMM).HMM早期在语音识别.分词等序列标注问题中有着广泛的应用. 了解HMM的基础原理以及应用,对于了解NLP处理问题的基本思想和技术发展脉络有 ...
- python地图匹配_基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法
1. 摘要 本篇博客简单介绍下用隐马尔科夫模型(Hidden Markov Model, HMM)来解决地图匹配(Map-Matching)问题.转载请注明网址. 2. Map-Matching(MM ...
- 隐马尔科夫模型 HMM 与 语音识别 speech recognition (1):名词解释
0.引言 想在 CSDN 上看一下隐马尔科夫模型,简称HMM(Hidden Markov Model)的例子,找了几篇博文,却发现大部分都是转载的,转载的还没有出处,文中的表述与逻辑也看的人晕头转向, ...
- 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数
在本篇我们会讨论HMM模型参数求解的问题,这个问题在HMM三个问题里算是最复杂的.在研究这个问题之前,建议先阅读这个系列的前两篇以熟悉HMM模型和HMM的前向后向算法,以及EM算法原理总结,这些在本篇 ...
- 一、隐马尔科夫模型HMM
隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用. ...
- 隐马尔科夫模型 (HMM) 算法介绍及代码实现
Table of Contents Hidden Markov Model (隐马尔科夫模型) 定义 基本问题 前向算法 算法流程 实现代码 后向算法 算法流程 实现代码 Viterbi算法 算法流程 ...
最新文章
- 查看正在执行的事务_看懂sql_trace--分析执行计划及CBO行为
- excel甘特图模板_类似这样的甘特图是怎么做的?
- 在 MySQL 中查找含有目标字段的表
- redis缓存数据表
- PAT_B_1003_Java(20分)
- Swift语言高速入门
- Bootstrap HTML编码规范之减少标签的数量
- php 星座运势_星座运势查询示例代码
- tcp socket的发送与接收缓冲区
- java进程里面调用方法_在java里面调用CUI程序的方法
- Windows 8 各个版本区别对比
- QQ机器人:群成员自我禁言管理【最新beta2版本】
- 智能家居 (9) ——人脸识别摄像头安装实现监控功能
- 雷曼兄弟 算法_雷曼如何失去双腿
- [转]windows 7 professional 64 bit SP1 change system language(sucess)
- 2016年安徽省程序设计竞赛 水题C,D,E 题解
- 打造自己的图像识别模型
- 简智音科技:抖音短视频时长几何为好呢?
- 美团饿了么外卖返利cps项目可以给你带来什么?
- OFDMA正交频分技术
热门文章
- android arial字体,Arial字体大小
- css设置遮罩层(半透明)
- 手把手教你快速构建自定义分类器
- 基于netty构建http服务器
- 原生JavaScript实现幻灯片效果
- 无盘服务器游戏盘大了IO多,BXP无盘详细图文系统教程4
- 在电脑上怎么做报表新手_在电脑上如何制作表格_电脑制作表格的步骤教程-系统城...
- idea翻译成中文_IDEA使用有道翻译插件
- loadrunner11 linux服务器,loadrunner11监控linux服务器性能
- winrar 注册码