说明

本文参考了这里

由于数据是连续的,因此使用了高斯隐马尔科夫模型:gaussianHMM

一、stock代码

import tushare as ts
import pandas as pd
import numpy as np
from hmmlearn.hmm import GaussianHMMfrom matplotlib import cm, pyplot as plt
import seaborn as sns
sns.set_style('white')'''
假定隐藏状态数目为4,观测状态数目为2
'''# 1.准备 X
df = ts.get_hist_data('sh',start='2014-01-01',end='2017-07-27')[::-1] # 上证指数close = np.log(df['close'])
low, high = np.log(df['low']), np.log(df['high'])
t = 5
X = pd.concat([close.diff(1), close.diff(t), high-low], axis=1)[t:] # 显状态时间序列(观测得到)# 2.拟合 HMM
model = GaussianHMM(n_components=6, covariance_type="diag", n_iter=1000).fit(X)
Z = model.predict(X) # 隐状态时间序列# 3.画图看看
plt.figure(figsize=(12, 7))
for i in range(model.n_components):mask = (Z==i) # 注意这里的Z!!!plt.plot_date(df.index[t:][mask], df['close'][t:][mask],'.',label=f'{i}th hidden state',lw=1)plt.legend()plt.grid(1)plt.show()

效果图

解释

下面是对6种隐状态的一种可能的解释:【图文对不上,文字来自这里】

  • 状态0————蓝色————震荡下跌
  • 状态1————绿色————小幅的上涨
  • 状态2————红色————牛市上涨
  • 状态3————紫色————牛市下跌
  • 状态4————黄色————震荡下跌
  • 状态5————浅蓝色————牛市下跌
    以上的意义归结是存在一定主观性的。因为HMM模型对输入的多维度观测变量进行处理后,只负责分出几个类别,而并不会定义出每种类别的实际含义。所以我们从图形中做出上述的判断。

所以,这种方法本质上是一种 Classification(分类) 或者 Clustering(聚类)

二、lotto 代码

import tushare as ts
import pandas as pd
import numpy as np
from hmmlearn.hmm import GaussianHMMfrom matplotlib import cm, pyplot as plt
from matplotlib.widgets import MultiCursorimport seaborn as sns
sns.set_style('white')import marksix_1
import talib as ta'''
假定隐藏状态数目为6,观测状态数目为4
'''# 1.准备 X
lt = marksix_1.Marksix()
lt.load_data(period=1000)#series = lt.adapter(loc='0000001', zb_name='ptsx', args=(1,), tf_n=0)
m = 2
series = lt.adapter(loc='0000001', zb_name='mod', args=(m, lt.get_mod_list(m)), tf_n=0)
# 实时线
close = np.cumsum(series).astype(float)# 低阶数据
t1, t2, t3 = 5, 10, 20
ma1 = ta.MA(close, timeperiod=t1, matype=0)
std1 = ta.STDDEV(close, timeperiod=t1, nbdev=1)ma2 = ta.MA(close, timeperiod=t2, matype=0)
std2 = ta.STDDEV(close, timeperiod=t2, nbdev=1)ma3 = ta.MA(close, timeperiod=t3, matype=0)
std3 = ta.STDDEV(close, timeperiod=t3, nbdev=1)# 转换一
'''
t = t3
X = pd.DataFrame({'ma1':ma1,'ma2':ma2,'ma3':ma3,'std1':std1,'std2':std2,'std3':std3}, index=lt.df.index)[t:]
'''# 转换二
t = t2
X = pd.DataFrame({'ma1':ma1,'ma2':ma2,'std1':std1,'std2':std2}, index=lt.df.index)[t:]#close = np.log(df['close'])
#low, high = np.log(df['low']), np.log(df['high'])
#t = 5
#X = pd.concat([close.diff(1), close.diff(t), high-low], axis=1)[t:] # 显状态时间序列(观测得到)# 2.拟合 HMM
model = GaussianHMM(n_components=6, covariance_type="diag", n_iter=1000).fit(X)
Z = model.predict(X) # 隐状态时间序列# 3.画图看看
fig, axes = plt.subplots(2, 1, sharex=True)
ax1, ax2 = axes[0], axes[1]show_period = 300
# 布林线
upperband, middleband, lowerband = ta.BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)
axes[0].plot_date(lt.df.index[-show_period:], close[-show_period:], 'rd-', markersize = 3)
axes[0].plot_date(lt.df.index[-show_period:], upperband[-show_period:], 'y-')
axes[0].plot_date(lt.df.index[-show_period:], middleband[-show_period:], 'b-')
axes[0].plot_date(lt.df.index[-show_period:], lowerband[-show_period:], 'y-')for i in range(model.n_components):mask = (Z[-show_period:]==i) # 注意这里的Z!!!axes[1].plot_date(lt.df.index[-show_period:][mask], close[-show_period:][mask],'d',markersize=3,label=f'{i}th hidden state',lw=1)axes[1].legend()axes[1].grid(1)multi = MultiCursor(fig.canvas, (axes[0], axes[1]), color='b', lw=2)plt.show()

效果图

转载于:https://www.cnblogs.com/hhh5460/p/7250116.html

隐马尔科夫模型研究 stock 以及 lotto相关推荐

  1. 基于隐马尔科夫模型文本相似度问题研究

    文本相似度是表示两个或者多个文本之间匹配程度的一个度量参数,相似度数值大,说明文本相似度高:反之文件相似程度就低.文本相似度的精确计算问题是进行信息处理的关键. 在如今信息技术飞速发展的互联网时代,文 ...

  2. 隐马尔科夫模型HMM自学 (3)

    Viterbi Algorithm 本来想明天再把后面的部分写好,可是睡觉今天是节日呢?一时情不自禁就有打开电脑.......... 找到可能性最大的隐含状态序列 崔晓源 翻译 多数情况下,我们都希望 ...

  3. 隐马尔科夫模型(HMM)详解

    转载自:http://blog.csdn.net/u012990623/article/details/39353381 隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L ...

  4. python地图匹配_基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法

    1. 摘要 本篇博客简单介绍下用隐马尔科夫模型(Hidden Markov Model, HMM)来解决地图匹配(Map-Matching)问题.转载请注明网址. 2. Map-Matching(MM ...

  5. 隐马尔科夫模型 HMM 与 语音识别 speech recognition (1):名词解释

    0.引言 想在 CSDN 上看一下隐马尔科夫模型,简称HMM(Hidden Markov Model)的例子,找了几篇博文,却发现大部分都是转载的,转载的还没有出处,文中的表述与逻辑也看的人晕头转向, ...

  6. 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数

    在本篇我们会讨论HMM模型参数求解的问题,这个问题在HMM三个问题里算是最复杂的.在研究这个问题之前,建议先阅读这个系列的前两篇以熟悉HMM模型和HMM的前向后向算法,以及EM算法原理总结,这些在本篇 ...

  7. 隐马尔科夫模型(HMM)及其扩展

    转载自:(http://blog.csdn.net/xinzhangyanxiang/article/details/8522078) 学习概率的时候,大家一定都学过马尔科夫模型吧,当时就觉得很有意思 ...

  8. 20200918:【广发金融工程】2018年重磅专题系列之九:基于隐马尔科夫模型的选股策略研究

    参考链接:https://www.sohu.com/a/252454782_465470 [广发金融工程]2018年重磅专题系列之九:基于隐马尔科夫模型的选股策略研究 2018-09-07 11:26 ...

  9. 计算机语音处理包括,关于用于计算机语音识别的隐马尔科夫模型和自然语言的计算机处理...

    简单介绍HMM:hidden Markov model 用于计算机语音识别的隐马尔科夫模型. 它可以清楚地描述语音信号的产生过程--双重随机过程 人类的语音信号的产生过程是一个随机过程.也就是说,人在 ...

最新文章

  1. linux 存储映射lun 给_如何在 Linux 上扫描/检测新的 LUN 和 SCSI 磁盘 | Linux 中国
  2. linux 磁盘分区情况6,Linux磁盘分区介绍
  3. 各种促销背后的精明算术
  4. docker 登陆mysql_启用登录docker mysql容器
  5. jQuery中的事件冒泡、事件捕获和事件追加引发的问题
  6. Python字符串| 带示例的format()方法
  7. ZZULIOJ 1052:数列求和4
  8. 空间参考不存在_空间实景三维信息如何服务于BIM应用
  9. UI自动化:单元测试框架
  10. Windows XP声卡驱动正常,丢失声音服务的解决
  11. openCV之中值滤波均值滤波(及代码实现)
  12. 安卓手机qq怎么看密友值_qq好友密友值在哪里看
  13. Linux中vim的安装和使用
  14. X Chen笔记---Centos安装使用xmr-stack-cpu教程
  15. kinect_v2-ros(iai_kinect2)安装,环境ubuntu1604+INTEL+NVIDIA
  16. CAN总线测试方法——单通道USBCAN及双通道USBCAN
  17. 【ffmpeg】下载以及使用-视频截取
  18. 手写Vuex核心原理,再也不怕面试官问我Vuex原理
  19. Franka Emika Panda机械臂规划路径时,rviz中手爪显示碰撞
  20. 操作系统之生产者与消费者

热门文章

  1. dlsym RTLD_DEFAULT和RTLD_NEXT
  2. listagg( )详解
  3. 前端需要了解的计算机网络知识, 这一篇就够了!(图文并茂,万字长文!)
  4. 产品设计在生活中——设计与生产的关系
  5. 计算机考试边框,2010年职称计算机考试:添加边框
  6. target.ID 和 source.ID 的属性冲突: DataType 属性不匹配
  7. Kali Linux换源及更新
  8. OpenCV人脸笑容识别
  9. 【Spyder 快捷键】之翻译快捷键
  10. win10自定义鼠标右键多级菜单(包含桌面)