隐马尔科夫模型的Python3实现代码
下面给出计算隐马尔科夫模型的编程代码:
from hmmlearn.hmm import GaussianHMM
import datetime
import numpy as np
from matplotlib import cm, pyplot as plt
import matplotlib.dates as dates
import pandas as pd
import seaborn as sns#导入模块
beginDate = '
endDate = '
data=DataAPI.MktIdxdGet(ticker=")
data1=DataAPI.FstTotalGet(exchangeCD=u"XSHE",beginDate=beginDate,endDate=end
Date,field=[")#深圳交易所融资融券信息,'tradeval'是指当日 融资融券余额
data2=DataAPI.FstTotalGet(exchangeCD=u"XSHG",beginDate=beginDate,endDate=end
Date,field=[")#上海交易所融资融券信息,'tradeval'是指当日 融资融券余额
tradeVal = data1 + data2 #数据汇总
tradeDate = pd.to_datetime(data['tradeDate'][5:])
volume = data['turnoverVol'][5:] #成交量
closeIndex = data['closeIndex']#收盘价
deltaIndex=(np.log(np.array(data['highestIndex']))-np.log(np.array(data['lowestIndex'])))[5:]
logReturn1 = np.array(np.diff(np.log(closeIndex)))[4:]#取对数收益率
logReturn5=np.log(np.array(closeIndex[5:]))- np.log(np.array(closeIndex[:-5]))#5 日对数收益率
logReturnFst = (np.array(np.diff(np.log(tradeVal['tradeVal']))))[4:]
closeIndex = closeIndex[5:]#收盘价截取
from scipy import stats # To perform box-cox transformation
from sklearn import preprocessing #导入模块
boxcox_volume,lmbda = stats.boxcox(volume/100000000000)
# Standardize the observation sequence distribution
rescaled_boxcox_volume=preprocessing.scale(boxcox_volume,axis=0, with_mean=True,
with_std=True, copy=False)#数据处理
boxcox_deltaIndex,lmbda = stats.boxcox(deltaIndex)
# Standardize the observation sequence distribution
rescaled_boxcox_deltaIndex=preprocessing.scale(boxcox_deltaIndex, axis=0,
with_mean=True, with_std=True, copy=False)
X=np.column_stack([logReturn1,logReturn5,rescaled_boxcox_deltaIndex,rescaled_boxco
x_volume,logReturnFst])#数据整合
# Make an HMM instance and execute fit
model=GaussianHMM(n_components=5,covariance_type="diag", n_iter=10000).fit([X])
# Predict the optimal sequence of internal hidden state#计算模型
hidden_states = model.predict(X)#估计状态
print("Transition matrix")
print(model.transmat_)
print()
#print("Means and vars of each hidden state")
for i in range(model.n_components):
print("{0}th hidden state".format(i))
print("mean = ", model.means_[i])
print("var = ", np.diag(model.covars_[i]))
plt.figure(figsize=(15, 8))
plt.title('hidden states')
for i in range(model.n_components):
idx = (hidden_states==i)
plt.plot_date(tradeDate[idx],closeIndex[idx],'.',label='%dth hidden state'%i,lw=1)
plt.legend()
plt.grid(True)
model.transmat_
import xlwt
import xlrd
wb3=xlwt.Workbook()
wb3.add_sheet('first',cell_overwrite_ok=True)
ws_1=wb3.get_sheet(0)
for r in range(model.transmat_.shape[0]): #行数
for c in range(model.transmat_.shape[1]): #列数
ws_1.write(r,c,model.transmat_[r,c])
wb3.save('文件夹 0/上证指数转移概率矩阵.xls')
#整合数据
res=pd.DataFrame({'tradeDate':tradeDate,'logReturn1':logReturn1,'logReturn5':logReturn
5,'volume':volume,'zstate':hidden_states}).set_index('tradeDate')
plt.figure(figsize=(15, 8))
plt.xlabel('time')
plt.ylabel('earninigs multiplier')
for i in range(model.n_components):
idx = (hidden_states==i)
idx = np.append(0,idx[:-1])#获得状态结果后第二天进行买入操作
#fast factor backtest
df = res.logReturn1
res['sig_ret%s'%i] = df.multiply(idx,axis=0)
plt.plot(np.exp(res['sig_ret%s'%i].cumsum()),label='%dth hidden state'%i)
plt.legend()
plt.grid(1)
隐马尔科夫模型的Python3实现代码的更多相关文章
- 隐马尔科夫模型 介绍 HMM python代码
#HMM Forward algorithm #input Matrix A,B vector pi import numpy as np A=np.array([[0.5,0.2,0.3],[0.3 ...
- 隐马尔科夫模型python实现简单拼音输入法
在网上看到一篇关于隐马尔科夫模型的介绍,觉得简直不能再神奇,又在网上找到大神的一篇关于如何用隐马尔可夫模型实现中文拼音输入的博客,无奈大神没给可以运行的代码,只能纯手动网上找到了结巴分词的词库,根据此 ...
- HMM基本原理及其实现(隐马尔科夫模型)
HMM(隐马尔科夫模型)基本原理及其实现 HMM基本原理 Markov链:如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程.马尔可夫链是时间和状态 ...
- 基于隐马尔科夫模型(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 ...
- 隐马尔科夫模型HMM学习最佳范例
谷歌路过这个专门介绍HMM及其相关算法的主页:http://rrurl.cn/vAgKhh 里面图文并茂动感十足,写得通俗易懂,可以说是介绍HMM很好的范例了.一个名为52nlp的博主(google ...
- HMM 自学教程(四)隐马尔科夫模型
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- HMM隐马尔科夫模型
这是一个非常重要的模型,凡是学统计学.机器学习.数据挖掘的人都应该彻底搞懂. python包: hmmlearn 0.2.0 https://github.com/hmmlearn/hmmlearn ...
- 隐马尔科夫模型(HMM)的概念
定义隐马尔科夫模型可以用一个三元组(π,A,B)来定义:π 表示初始状态概率的向量A =(aij)(隐藏状态的)转移矩阵 P(Xit|Xj(t-1)) t-1时刻是j而t时刻是i的概率B =(bij) ...
- 隐马尔科夫模型,第三种问题解法,维比特算法(biterbi) algorithm python代码
上篇介绍了隐马尔科夫模型 本文给出关于问题3解决方法,并给出一个例子的python代码 回顾上文,问题3是什么, 下面给出,维比特算法(biterbi) algorithm 下面通过一个具体例子,来说 ...
随机推荐
- django小知识(2)
昨日内容回顾 1.choices参数 class Userinfo(models.Model): username = ... age = ... gender_choice = ( (1,'male ...
- ArcGIS 合并相邻Polygon
先说效果: 合并前效果:
- Echo团队Beta冲刺随笔集合
班级:软件工程1916|W 作业:项目Beta冲刺(团队) 团队名称:Echo 作业目标:完成项目Beta冲刺 凡事预则立 Day 0: 凡事预则立 冲刺随笔 Day 1: Beta冲刺第一天 Day ...
- 17、Python面向对象高级
一.isinstance和issubclass type():不会认为子类实例是一种父类类型: isinstance():认为子类实例是一种父类类型. issubclass():判断是否为其子类. c ...
- Dockerfile 常见指令的意义/常见的使用方式/使用示例/
一.什么是 Dockerfile ? Dockerfile 就是生成docker镜像的指令集, 通过使用docker工具执行这些指令集可以方便快捷地生成镜像, 并且能不断复用 Dockerfile 指 ...
- Vant 实现 上拉加载更多
Vant 的List 组件 默认支持 瀑布流滚动加载.官方的示例是用定时器模拟的数据.我们在项目实战中,肯定是结合ajax请求处理的.那么我们该如何实现这个效果呢? Vant 的 List组件 使用方 ...
- BZOJ 2091: [Poi2010]The Minima Game 博弈dp
十分有趣的问题. 我们发现如果拿的话肯定要先拿一些大的. 所以我们可以先将所有数从小到大排序,令 $f[i]$ 表示拿完前 $i$ 小先手-后手的最大值. 则有转移:$f[i]=max(f[i-1], ...
- JavaScript原始类型转换和进制转换
1.JavaScript转换包括:强制转换和基本转换 如: var str = 'A',num=10,nu=null,t=true,und=undefined,x; //注意:定义的x未被初始化:默 ...
- luogu P3975 [TJOI2015]弦论 SAM
luogu P3975 [TJOI2015]弦论 链接 bzoj 思路 建出sam. 子串算多个的,统计preant tree的子树大小,否则就是大小为1 然后再统计sam的节点能走到多少串. 然后就 ...
- linux netstat 命令简介
常用选项: -r, --route 显示路由表 -i, --interfaces 显示接口信息表-s, --statistics 显示网络协议汇总信息 -n, --numeric 不解析域名-p, - ...