HMM模型(Ⅱ)—量化投资

  • 引言
  • 何为量化投资
  • 实现思想
  • 试水实现
    • 获取数据
    • 对数据使用HMM模型
    • 数据读入与处理
    • 调用HMM模型
    • 对HMM的结果进行可视化处理
    • 做出量化策略
  • 小结

引言

关于HMM模型数学原理及简用,笔者上文已有阐述,此文主要内容是HMM模型在量化投资上的应用;主要为为所览的博客、文献的思路整理,不足之处望多多指正。

何为量化投资

作为没有上过多少经济学课程的菜鸡,笔者对此的解释以一个例子为引子,避免失误:
据说量化投资大佬是数学家西蒙斯,其人送外号“对冲王”,老人家利用自己掌握的数学本领投身股票市场,在华尔街赚的是盆满锅满,而在众多用于量化投资的数学利器中,HMM模型便是其中之一。

实现思想

结合前HMM的数学思想,笔者结合实现的python工具,总结其大概可以实现的功能。

试水实现

获取数据

在获取数据上,据笔者所知:可以在调用API函数,使用get price()直接在网址上爬取,但笔者使用朋友pycharm似乎做不到这一点(不会),于是选用了比较直接的方式通过别人给的数据,和网易财经的数据,实现数据的获取,本文以沪深300为例。

对数据使用HMM模型

在python的hmmlearn库中,主要有三种hmm的数学模型,按照观测状态是连续状态还是离散状态,可以分为两类。GaussianHMM和GMMHMM是连续观测状态的HMM模型,而MultinomialHMM是离散观测状态的模型,我们在文章里面使用的模型为GaussianHMM在这里插入代码片。由于对hmmlearn库掌握还不是不很熟练,下面主要为实现方法与结果,原理暂不做阐述。

数据读入与处理

n=3#状态数
data=pd.read_csv('399300.csv',engine='python')
#print(data.head())
volume=data['成交量'][0:3674]
#print(volume)
close=data['收盘价'][0:3674]
print(close)
logDel = np.log(np.array(data['最高价'][0:3674])) - np.log(np.array(data['最低价'][0:3674]))
logRet_1 = np.array(np.diff(np.log(close)))
logRet_5 = np.log(np.array(close[5:])) - np.log(np.array(close[:-5]))
logVol_5 = np.log(np.array(volume[5:])) - np.log(np.array(volume[:-5]))# 保持所有的数据shape相同
logDel = logDel[5:]
logRet_1 = logRet_1[4:]
close = close[5:]
#将行数合并
Date = pd.to_datetime(data['日期'][5:3674])
print(Date)
# print(logDel.shape)
# print(logRet_5.shape)
# print(logVol_5.shape)
A = np.column_stack([logDel, logRet_5, logVol_5])
#model=hmm.GaussianHMM()

调用HMM模型

model = hmm.GaussianHMM(n_components=n, covariance_type="full", n_iter=2000).fit(A)
hidden_states = model.predict(A)

对HMM的结果进行可视化处理

plt.figure(figsize=(25, 18))
for i in range(n):pos = (hidden_states == i)plt.plot_date(Date[pos], close[pos], 'o', label='hidden state %d' % i, lw=2)plt.legend()
plt.show()res = pd.DataFrame({'Date': Date, 'logReg_1': logRet_1, 'state': hidden_states}).set_index('Date')
series = res.logReg_1templist = []
plt.figure(figsize=(25, 18))
for i in range(n):pos = (hidden_states == i)pos = np.append(1, pos[:-1])res['state_ret%d' % i] = series.multiply(pos)data_i = np.exp(res['state_ret%d' % i].cumsum())templist.append(data_i[-1])plt.plot_date(Date, data_i, '-', label='hidden state %d' % i)plt.legend()
plt.show()

3隐藏状态下的可视化效果:

做出量化策略

对冲的思想是到谷底进行进仓操作,到波峰进行出仓操作。这里将操作进行理想化,不考虑买入卖出的费率。

templist = np.array(templist).argsort()
long = (hidden_states == templist[-1]) + (hidden_states == templist[-2])  # 买入
short = (hidden_states == templist[0]) + (hidden_states == templist[1])  # 卖出
long = np.append(0, long[:-1])
short = np.append(0, short[:-1])plt.figure(figsize=(25, 18))
res['ret'] = series.multiply(long) - series.multiply(short)
plt.plot_date(Date, np.exp(res['ret'].cumsum()), 'r-')
plt.show()

结果:

小结

此文主要试水,在结果阐述上、模型优化上仍有许多可提升之处,原理解释也不够详尽,同时,准确率、收益率计算也尚未进行,也希望读者可以不吝给出更好的方案,共同探讨。

HMM模型(Ⅱ)—量化投资相关推荐

  1. 量化进阶-《python与量化投资从基础到实战》——常用的量化策略及其实现

    python与量化投资从基础到实战--常用的量化策略及其实现 量化投资概述 量化投资简介 量化投资策略的类型 年化研究流程 行业轮动理论及其策略 行业轮动理论简介 行业轮动的原因 从产业链的角度来看行 ...

  2. 量化投资入门指南:风险模型和交易成本模型

    目录 3. 风险模型 3.1 风险规模的度量 3.2 风险模型的种类 4. 交易成本模型 4.1 定义交易成本 4.2 交易成本模型的种类 3. 风险模型 风险管理是通过对敞口实施有目的的选择和规模控 ...

  3. 量化投资入门指南:量化交易系统框架与阿尔法模型

    目录 1. 量化交易系统框架 2. 阿尔法模型 2.1 阿尔法模型的定义 2.2 阿尔法模型的分类 2.2.1 理论驱动型阿尔法模型 2.2.2 数据驱动型阿尔法模型 2.3 实施策略的方式 1. 量 ...

  4. joinquant量化投资震荡类指标模型的MACD指标是什么?

    震荡类指标模型的基本表现特性就是指标值在运行中上下波动.与趋势类指标相比,震荡类指标更广泛应用于joinquant量化投资的横盘市场,而且信号的出现有比较高的准确率. 常用的震荡类指标有KDJ(随机指 ...

  5. 量化投资-基本面模型-螺纹多因素模型

    测算报告 螺纹指数 日线 螺纹 ------------------------------- 名称 全部交易 多头 空头 报告生成时间 2017/03/11 16:24:18 资金分配量 50000 ...

  6. alpha模型:打开量化投资的黑箱;附创业板布林带策略代码:年化15%。

    原创文章第108篇,专注"个人成长与财富自由.世界运作的逻辑, AI量化投资". 关于量化投资,我们写了不少文章.从数据准备,预处理,因子特征工程,因子分析,规则策略,模型,回测, ...

  7. 还在买白酒?算法工程师们,量化投资了解一下

    文 | 阿财@知乎 本文已获作者授权,禁止二次转载 赚取你认知中的Alpha 坚持用量化的观点去看待宇宙的终极问题:买不买,卖不卖. 很多人的在互联网这一片方寸之地,表现出来的行为是矛盾的.举个例子, ...

  8. 量化投资之王:他连续27年回报率打败巴菲特

    转 量化投资之王:他连续27年回报率打败巴菲特! 40岁前韬光养晦.钻研数学之美,40岁后靠数理天赋"奇袭"华尔街,连续27年用惊人的回报打败索罗斯和巴菲特--詹姆斯·西蒙斯 (J ...

  9. python量化投资必背代码-量化投资:用Python实现金融数据的获取与整理

    小编说:数据可以说是量化投资的根本,一切投资策略都是建立在数据基础上的.本文以优矿网为例,带领大家用Python实现金融数据的获取与整理. 本文选自<Python与量化投资:从基础到实战> ...

最新文章

  1. 解决Ubuntu终端编辑时上下左右变成ABCD问题
  2. H5开发开发利器——flex
  3. THUPCCTSAPIO摸鱼被$\Huge{\color{black}{\mathbf{z}}\color{red}{\mathbf{zh}}}$爆踩记
  4. 理解JavaScript继承(二)
  5. java 缓存ech_ehcache获取缓存空指针
  6. Blazor Server 和 WebAssembly 应用程序入门指南
  7. java php 女生数量,萌妹子告诉你php和java如何选
  8. (35)FPGA原语设计(BUFGCTRL)
  9. MySQL存储过程(四)——存储过程循环流控语句
  10. pg数据库创建触发器
  11. iOS开发-使用dSYM文件符号化Crash日志
  12. 开发如何转型做项目管理
  13. 金山打字通 官网 下载
  14. Verilog语言乒乓球机8段译码器
  15. 吉他技巧—如何推算和记忆和弦
  16. 聊城大学计算机学院2016级11班,E·社会实践 | “观运河风采,忆聊城古韵”——2016级11班...
  17. centos7 无网络 安装oracle 脚本静默安装
  18. 从医记之程序员请呵护你的胃
  19. YOLOV7详细解读(一)网络架构解读
  20. 【Codewars python 4kyu】: Breadcrumb Generator

热门文章

  1. 从PSCAD中导出数据并绘图MATLAB程序
  2. 2019年计算机类专业保研经历(清华软院、中科院计算所、中科院软件所、南大计算机、清华深圳)
  3. 淘宝的开源平台“淘蝌蚪”正式上线
  4. 长电科技完成收购ADI新加坡测试工厂;Canva可画上线视频音乐功能;印孚瑟斯上榜福布斯全球企业2000强 | 全球TMT...
  5. 云顶之弈手游账号怎么改服务器,云顶之弈手游如何换区 云顶之弈手游换区方法...
  6. 2023年如何通过软考初级程序员?
  7. 基于STM32单片机智能手环脉搏心率计步器体温显示设计
  8. 介绍嘉宾的顺序左右之分_液压系统顺序阀工作原理、功用、性能及其应用
  9. jrtplib for android,Jthread1.3.1 Jrtplib3.9.1跨平台交叉编译之Android(二)
  10. sharepoint2013 如何在office365 下用infopath13开发formlibrary