说明

本文参考了这里

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

一、stock代码

import tushare as ts
import pandas as pd
import numpy as np
from hmmlearn.hmm import GaussianHMM from 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 GaussianHMM from matplotlib import cm, pyplot as plt
from matplotlib.widgets import MultiCursor import 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()

效果图

隐马尔科夫模型研究 stock 以及 lotto的更多相关文章

  1. HMM基本原理及其实现(隐马尔科夫模型)

    HMM(隐马尔科夫模型)基本原理及其实现 HMM基本原理 Markov链:如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程.马尔可夫链是时间和状态 ...

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

    文章目录 1. 1. 摘要 2. 2. Map-Matching(MM)问题 3. 3. 隐马尔科夫模型(HMM) 3.1. 3.1. HMM简述 3.2. 3.2. 基于HMM的Map-Matchi ...

  3. 隐马尔科夫模型HMM学习最佳范例

    谷歌路过这个专门介绍HMM及其相关算法的主页:http://rrurl.cn/vAgKhh 里面图文并茂动感十足,写得通俗易懂,可以说是介绍HMM很好的范例了.一个名为52nlp的博主(google ...

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

    隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...

  5. 隐马尔科夫模型(Hidden Markov Models)

    链接汇总 http://www.csie.ntnu.edu.tw/~u91029/HiddenMarkovModel.html 演算法笔记 http://read.pudn.com/downloads ...

  6. 隐马尔科夫模型HMM

    崔晓源 翻译 我们通常都习惯寻找一个事物在一段时间里的变化规律.在很多领域我们都希望找到这个规律,比如计算机中的指令顺序,句子中的词顺序和语音中的词顺序等等.一个最适用的例子就是天气的预测. 首先,本 ...

  7. 隐马尔科夫模型(HMM)

    基本概念 1Markov Models 2Hidden Markov Models 3概率计算算法前向后向算法 1-3-1直接计算 1-3-2前向算法 1-3-3后向算法 4学习问题Baum-Welc ...

  8. 机器学习中的隐马尔科夫模型(HMM)详解

    机器学习中的隐马尔科夫模型(HMM)详解 在之前介绍贝叶斯网络的博文中,我们已经讨论过概率图模型(PGM)的概念了.Russell等在文献[1]中指出:"在统计学中,图模型这个术语指包含贝叶 ...

  9. 隐马尔科夫模型 HMM(Hidden Markov Model)

    本科阶段学了三四遍的HMM,机器学习课,自然语言处理课,中文信息处理课:如今学研究生的自然语言处理,又碰见了这个老熟人: 虽多次碰到,但总觉得一知半解,对其了解不够全面,借着这次的机会,我想要直接搞定 ...

随机推荐

  1. Python Django框架笔记(三):django工作方式简单说明和创建用户界面

    (一)  说明 简单说明下django的工作方式,并举2个例子. (二)  Django工作方式 假定我们有下面这些文件 ,这里在前2篇的基础上增加了 templates目录(存放html文件) 和s ...

  2. go语言练习:结构体

    package main import "fmt" type book struct { title string author string page int } func ma ...

  3. Java 注解用法详解——@SuppressWarnings

    转自: https://www.cnblogs.com/fsjohnhuang/p/4040785.html Java魔法堂:注解用法详解——@SuppressWarnings   一.前言 编码时我 ...

  4. 从外部导入django模块

    import os import sys sys.path.append("D:\\pyweb\\sf"); # 项目位置(不是app) os.environ.setdefault ...

  5. Python实例---beautifulsoup小Demo

    豆瓣 # coding:utf - 8 from urllib.request import urlopen from bs4 import BeautifulSoup html = urlopen( ...

  6. 用JS制作《飞机大作战》游戏_第1讲(素材查找和界面框架搭建)-陈远波

    一.查找素材: 二.分析游戏界面框架: 登录界面.游戏界面.暂停游戏界面.玩家死亡后弹出界面:并对应的界面包含什么元素: 三.分别搭建以上四个界面: 1.登录界面与游戏界面框架(隐藏游戏界面,四个界面 ...

  7. 粗略的整改一下blog

    一.先找个简约的模板:看个人喜好咯 二.页面定制CSS: 1.首先,查看主页源码,了解一下各个标签的id,引用的class等 2.通过操作相应的id,class,和标签,进行个性化.这里需要具备看懂和 ...

  8. 张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用

    什么是 GPIO GPIO 是 General Purpose Input Output 的缩写,即"通用输入输出". Raspberry Pi 有两行 GPIO 引脚, Rasp ...

  9. Springboot连接MySQL8.0出现的问题

    以前用的是5.7版本的MySQL,在学习实践Springboot的时候顺带升级了一下8.0,遇到了一些坑,在这记录一下,有碰到同类问题的童鞋需要自取. 使用 navicat连接发现报错1251- Cl ...

  10. DFS的运用(二分图判定、无向图的割顶和桥,双连通分量,有向图的强连通分量)

    一.dfs框架: vector<int>G[maxn]; //存图 int vis[maxn]; //节点访问标记 void dfs(int u) { vis[u] = ; PREVISI ...