隐马尔科夫模型的Python3实现代码
2024-09-02 15:12:21
下面给出计算隐马尔科夫模型的编程代码: 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)
最新文章
- python学习之路 第四天
- 【转】HiveQL:对数据定义的学习
- node.js 简介
- Struts2(六):ResultType
- jsp打印页面 js代码
- java中throw和throws的区别
- [codeforces 325]B. Stadium and Games
- P1574: [Usaco2009 Jan]地震损坏Damage
- tomcat+JNDI+spring 的配置问题
- OpenJudge/Poj 1979 Red and Black / OpenJudge 2816 红与黑
- malloc()与calloc差别
- Matlab 符号运算
- POJ 2774 最长公共子串
- MySQL my.cnf 参数说明
- SQLServer 错误: 15404,无法获取有关 Windows NT 组 用户
- 一览Django框架(转载)
- 中国 A 股纳入 MSCI
- 洛谷P4456 交错序列[CQOI2018] dp+数论
- MySQL 基础 查询
- 关于softmax、argmax、softargmax
热门文章
- sed 用法
- wordpress定时发布失败Missed Schedule解决方法
- template-web.js 自定义过滤器
- Eclipse中将java类打成jar包形式运行
- diffy 方便的bug 以及流量测试系统
- Linux 系统管理——系统安全及应用
- Android Studio软件技术基础 —Android项目描述---1-类的概念-android studio 组件属性-+标志-Android Studio 连接真机不识别其他途径
- [CMS]凡诺cms 2.1文件包含
- [Gamma阶段]第十次Scrum Meeting
- 冰多多团队-第八次Scrum例会