基于ricequant隐马尔科夫模型量化交易
看到我这篇文章,相信您已经是有一定的数学基础的,隐马尔科夫模型的介绍这里不做赘述。
目录
ricequant研究平台训练模型
回测框架测试结果
ricequant研究平台训练模型
我们假设隐藏状态数量是6,即假设股市的状态有6种,虽然我们并不知道每种状态到底是什么,但是通过后面的图我们可以看出那种状态下市场是上涨的,哪种是震荡的,哪种是下跌的。可观测的特征状态我们选择了3个指标进行标示,进行预测的时候假设假设所有的特征向量的状态服从高斯分布,这样就可以使用 hmmlearn 这个包中的 GaussianHMM 进行预测了。下面我会逐步解释。
首先导入必要的包:
from hmmlearn.hmm import GaussianHMM
import numpy as np
from matplotlib import cm, pyplot as plt
import matplotlib.dates as dates
import pandas as pd
import datetime
测试时间从2005年1月1日到2015年12月31日,拿到每日沪深300的各种交易数据。
beginDate = '2005-01-01'
endDate = '2015-12-31'
n = 6 #6个隐藏状态
data = get_price('000300.XSHG',start_date=beginDate, end_date=endDate,frequency='1d')
data[0:9]
拿到每日成交量和收盘价的数据。
volume = data['volume']
close = data['close']
logDel = np.log(np.array(data['high'])) - np.log(np.array(data['low']))
logDellogRet_1 = np.array(np.diff(np.log(close)))#这个作为后面计算收益使用
logRet_5 = np.log(np.array(close[5:])) - np.log(np.array(close[:-5]))
logRet_5logVol_5 = np.log(np.array(volume[5:])) - np.log(np.array(volume[:-5]))
logVol_5logDel = logDel[5:]
logRet_1 = logRet_1[4:]
close = close[5:]
Date = pd.to_datetime(data.reset_index()["date"][5:])
合并成训练数据
A = np.column_stack([logDel,logRet_5,logVol_5])
A
将数据送入模型,进行6分类隐马尔科夫预测
model = GaussianHMM(n_components= n, covariance_type="full", n_iter=2000).fit(A)
hidden_states = model.predict(A)
hidden_states
将预测的6个分类图形画,从图中可观测出红色点阵代表牛市,绿色代表熊市,其他颜色反应微涨微跌的,震荡等市场格局
plt.figure(figsize=(25, 18))
for i in range(model.n_components):pos = (hidden_states==i)plt.plot_date(Date[pos],close[pos],'o',label='hidden state %d'%i,lw=2)#plt.legend(loc="left")
从图中可以比较明显的看出绿色的隐藏状态代表指数大幅上涨,浅蓝色和黄色的隐藏状态代表指数下跌。
为了更直观的表现不同的隐藏状态分别对应了什么,我们采取获得隐藏状态结果后第二天进行买入的操作,这样可以看出每种隐藏状态代表了什么。
从图中可以看出在状态3和状态4做多可以获得较高收益,状态1和状态2做空可以获得较小损失
long = (hidden_states==3) + (hidden_states == 4) #做多
short = (hidden_states==1) + (hidden_states == 2) #做空
long = np.append(0,long[:-1]) #第二天才能操作
short = np.append(0,short[:-1]) #第二天才能操作
res['ret'] = df.multiply(long) - df.multiply(short)
plt.plot_date(Date,np.exp(res['ret'].cumsum()),'r-')
最后保存模型
#保存模型
import pickle# 保存模型
with open('hmm.txt', 'wb') as f:pickle.dump(model, f)# 读取模型
with open('hmm.txt', 'rb') as f:hmm = pickle.load(f)
回测框架测试结果
import pickle
from six import BytesIO
from rqfactor import *
import rqdatac
import datetime
import numpy as np
# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):context.stocklist = []body = get_file('hmm.txt')context.dict_model = pickle.load(BytesIO(body))context.hs300 = "000300.XSHG"# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次
def before_trading(context):pass# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):cnt = 16close = history_bars(context.hs300, cnt, '1d', 'close')high = history_bars(context.hs300, cnt, '1d', 'high')low = history_bars(context.hs300, cnt, '1d', 'low')volume = history_bars(context.hs300, cnt, '1d', 'volume')print(context.now)print(close)print(high)logDel = np.log(high) - np.log(low)logRet_5 = np.log(close[5:]) - np.log(close[:-5])logVol_5 = np.log(volume[5:]) - np.log(volume[:-5])logDel = logDel[5:]B = np.column_stack([logDel,logRet_5,logVol_5])ret = context.dict_model.predict(B)print(B)print(ret)if ret[-1] == 1 or ret[-1] == 2:for stock in context.portfolio.positions.keys():if context.portfolio.positions[stock].quantity > 0:order_target_percent(stock, 0)if ret[-1] == 3:order_target_percent(context.hs300, 1)# after_trading函数会在每天交易结束后被调用,当天只会被调用一次
def after_trading(context):pass
隐马尔科夫过往10年收益曲线
基于ricequant隐马尔科夫模型量化交易相关推荐
- 中文分词与马尔科夫模型之二:隐马尔科夫模型与维特比
转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uebv.html 前面一篇博客讲到了中文分词的机械分词算法,这种算法实现相对比较简单,但是分词效果还是有 ...
- python地图匹配_基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法
1. 摘要 本篇博客简单介绍下用隐马尔科夫模型(Hidden Markov Model, HMM)来解决地图匹配(Map-Matching)问题.转载请注明网址. 2. Map-Matching(MM ...
- 基于隐马尔科夫模型文本相似度问题研究
文本相似度是表示两个或者多个文本之间匹配程度的一个度量参数,相似度数值大,说明文本相似度高:反之文件相似程度就低.文本相似度的精确计算问题是进行信息处理的关键. 在如今信息技术飞速发展的互联网时代,文 ...
- 20200918:【广发金融工程】2018年重磅专题系列之九:基于隐马尔科夫模型的选股策略研究
参考链接:https://www.sohu.com/a/252454782_465470 [广发金融工程]2018年重磅专题系列之九:基于隐马尔科夫模型的选股策略研究 2018-09-07 11:26 ...
- 基于C#的序列分类器:Part I:隐马尔科夫模型
原文地址:http://www.codeproject.com/Articles/541428/Sequence-Classifiers-in-Csharp-Part-I-Hidden-Marko B ...
- m基于隐马尔科夫模型(HMM)的手机用户行为预测(MMUB)算法matlab仿真
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 隐马尔可夫模型(Hidden Markov Model,HMM)是一种统计模型,广泛应用在语音识别, ...
- 基于隐马尔科夫模型的道路匹配
随着导航定位.移动互联网等技术的快速发展,手机.车载定位装置等设备都可以进行地理空间数据采集.这些不同类型的地理空间数据往往能反映出某种规律.以时空轨迹为例,这些新形式的泛在地理空间数据,能够反映个体 ...
- 隐马尔科夫模型HMM(一)HMM模型
2019独角兽企业重金招聘Python工程师标准>>> 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理 ...
- 第十九课.隐马尔科夫模型
目录 隐马尔科夫模型的结构 马尔科夫链与隐马尔科夫模型 实例 HMM的要素 模型的性质 推理问题:HMM的状态解码 隐状态解码问题 最大路径概率与维特比算法 使用维特比算法解码 实例演示 基于Pyth ...
- 【NLP】用于语音识别、分词的隐马尔科夫模型HMM
大家好,今天介绍自然语言处理中经典的隐马尔科夫模型(HMM).HMM早期在语音识别.分词等序列标注问题中有着广泛的应用. 了解HMM的基础原理以及应用,对于了解NLP处理问题的基本思想和技术发展脉络有 ...
最新文章
- [android] 从gallery获取图片
- Choosing technologies for .NET project
- MySQL中保存emoji表情
- boost采取什么驱动电路_当我们只是采取积极的意愿时会发生什么?
- 无法创建ssis数据流任务_SSIS中的数据分析任务概述
- Java知识积累——同时输出到控制台和指定文件,或直接输出到指定文件
- c#中如何删除数组中的元素_C中的数组
- 基于Android的数据采集系统,一种基于Android的新型用户数据采集发送系统
- 附加属性来控制控件中,要扩展模块的visibility
- 喜马拉雅音频批量下载
- 毕业设计记录(二):基于VUE框架与ECharts和Axios技术结合的Web移动高校实验室管理系统设计与实现
- 浅谈JSONP跨域漏洞
- web网页设计期末课程大作业:美食餐饮文化主题网站设计——中华美德6页面HTML+CSS+JavaScript
- ESP32 WIFI MESH 网络个人学习笔记整理
- 权重推送 产品定位 直通车投放 关键词 直通车人群 创意标题 补单 新手上路,直通车烧钱没效果怎么办?
- 嵌入式Linux系统环境搭建全流程-4412友善之臂开发板
- 推荐一个好用的OKR工具
- FMDB And Dao
- mac安装软件允许任何来源(sudo spctl --master-disable)
- OSPF---路由备份的设计实验
热门文章
- 通达信公式-当天成交量不大于百日均成交量比例
- 问题解决:com.lowagie.text.DocumentException: Font 'STSong-Light' with 'UniGB-UCS2-H'
- 客户服务与工单管理系统—工单管理
- 大学生活的真实写照(经典)
- uniapp将h5链接打包成安卓
- 使用 CP2102通过串口下载程序到STM32F103中 (MCUISP)
- 如何学习opencv
- 利用Sen2cor工具对哨兵2影像进行大气校正和辐射校正
- 【腾讯犀牛鸟开源人才培养计划】开源人才培养计划活动参与指南
- 下载sqlserver2012 试用_大肥虫助手app下载-大肥虫助手最新版本下载v7.0.4