博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
隐马尔科夫模型研究 stock 以及 lotto
阅读量:7082 次
发布时间:2019-06-28

本文共 3365 字,大约阅读时间需要 11 分钟。

说明

本文参考了

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

一、stock代码

import tushare as tsimport pandas as pdimport numpy as npfrom hmmlearn.hmm import GaussianHMMfrom matplotlib import cm, pyplot as pltimport seaborn as snssns.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 = 5X = pd.concat([close.diff(1), close.diff(t), high-low], axis=1)[t:] # 显状态时间序列(观测得到)# 2.拟合 HMMmodel = 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()

效果图

img_e9ef22126fd5729096d36e9b7ce7db2f.png

解释

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

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

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

二、lotto 代码

import tushare as tsimport pandas as pdimport numpy as npfrom hmmlearn.hmm import GaussianHMMfrom matplotlib import cm, pyplot as pltfrom matplotlib.widgets import MultiCursorimport seaborn as snssns.set_style('white')import marksix_1import 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 = 2series = 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, 20ma1 = 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 = t3X = pd.DataFrame({'ma1':ma1,'ma2':ma2,'ma3':ma3,'std1':std1,'std2':std2,'std3':std3}, index=lt.df.index)[t:]'''# 转换二t = t2X = 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.拟合 HMMmodel = 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()

效果图

img_ab90d341001bdcd506c51b523692e835.png

转载地址:http://cemml.baihongyu.com/

你可能感兴趣的文章
js弹框 背景遮罩
查看>>
基础概念--欧式距离
查看>>
CSS-position详解
查看>>
OrderOnline——需求及数据描述
查看>>
二叉树的遍历
查看>>
phpcms笔记
查看>>
表格 td中,取checkbox后几位值
查看>>
linux 修改时区
查看>>
ueditor 定制工具栏图标
查看>>
编程技术面试的五大要点
查看>>
函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结
查看>>
wxwidgets wxstring与std::string互相转换
查看>>
zoj 2316 Matrix Multiplication(2-D)
查看>>
ios委托delegate与协议protocol
查看>>
Java动态调用webService,axis2动态调用webService
查看>>
PHP 发送邮件
查看>>
java初学代码,还不太熟练
查看>>
gb2312提交的url编码转换成utf8的查询
查看>>
python使用SUDS调用webservice
查看>>
会议室预定设计
查看>>