Hikyuu

基于 C++/Python 的开源量化交易研究框架
授权协议 MIT
开发语言 C/C++ Python
所属分类 企业应用、 金融/财务/证券系统
软件类型 开源软件
地区 国产
投 递 者 贝德辉
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Hikyuu Quant Framework是一款基于C++/Python的开源量化交易研究框架,用于策略分析及回测。其核心思想基于当前成熟的系统化交易方法,将整个系统化交易抽象为由市场环境判断策略、系统有效条件、信号指示器、止损/止盈策略、资金管理策略、盈利目标策略、移滑价差算法七大组件,你可以分别构建这些组件的策略资产库,在实际研究中对它们自由组合来观察系统的有效性、稳定性以及单一种类策略的效果。例如::

#创建模拟交易账户进行回测,初始资金30万
my_tm = crtTM(initCash = 300000)

#创建信号指示器(以5日EMA为快线,5日EMA自身的10日EMA最为慢线,快线向上穿越慢线时买入,反之卖出)
my_sg = SG_Flex(OP(EMA(n=5)), slow_n=10)

#固定每次买入1000股
my_mm = MM_FixedCount(1000)

#创建交易系统并运行
sys = SYS_Simple(tm = my_tm, sg = my_sg, mm = my_mm)
sys.run(sm['sz000001'], Query(-150))

完整示例参见:https://nbviewer.jupyter.org/github/fasiondog/hikyuu_examples/blob/master/001-overview.ipynb?flush_cache=True

Maybe,你已经注意到了,上面没有“选股策略”?!是的,选股策略是股票交易的重要方面,肯定不会少。事实上,之前所述的交易系统都是针对一个交易对象的,也就是经常听到的策略,但很多所谓的“策略”其实仅仅只是买入、卖出的指示信号而已,并非完整的交易策略。为了区别,在这里直接以系统指称,表示一个完整的系统化交易方法或策略。而在系统之上,称为Portfolio资产组合,选股策略则是Portfolio的组件,Portfolio的另一重要组成则是资金分配策略,比如选股策略选定了4个交易对象(股票或基金等),那么如何在它们之间进行合理的资金分配?

所以,Hikyuu Quant Framework其实是在System和Portfolio基础之上、包含了九大策略组件:市场环境判断策略、系统有效条件、信号指示器、止损/止盈策略、资金管理策略、盈利目标策略、移滑价差算法、交易对象选择策略、资金分配策略。可以在此基础上构建自己的策略库,并进行灵活的组合和测试,甚至可以更进一步,在选择交易对象的同时,选取与之匹配的最优系统交易策略(System)。

为什么选择 Hikyuu

1、组合灵活,分类构建策略资产库 Hikyuu对系统化交易方法进行了良好的抽象,将完整的系统交易分为不同的策略组件接口,在进行策略探索时,可以更加专注于某一方面的策略性能与影响,可以构建自己的策略库累计资产,并灵活组合。其主要功能模块如下:

主要功能模块示意图

2、性能保障,打造自己的专属应用 目前项目包含了3个主要组成部分:基于C++的核心库、对C++进行包装的Python库(hikyuu)、基于Python的交互式工具。

  • C++核心库,提供了整体的策略框架,在保证性能的同时,已经考虑了对多线程和多核处理的支持,在未来追求更高运算速度提供便利。C++核心库,可以单独剥离使用,自行构建自己的客户端工具。

  • Python库(hikyuu),提供了对C++库的包装,同时集成了talib库(如TA_SMA,对应talib.SMA),可以与numpy、pandas数据结构进行互相转换,为使用其他成熟的python数据分析工具提供了便利。

  • hikyuu.interactive 交互式探索工具,提供了K线、指标、系统信号等的基本绘图功能,用于对量化策略的探索和回测。

3、多范式支持,探索更便捷、自由 同时支持面向对象和命令行编程范式。其中,命令行在进行策略探索时,更加简单、便捷、自由。

4、安全、自由、隐私,搭建自己的专属云量化平台 结合 Python + Jupyter 的强大能力与云服务器,可以搭建自己专属的云量化平台。将Jupyter部署在云服务器上,随时随地的访问自己的云平台,即刻实现自己新的想法,如下图所示通过手机访问自己的云平台。结合Python强大成熟的数据分析、人工智能工具(如 numpy、scipy、pandas、TensorFlow)搭建更强大的人工智能平台。

5、数据存储方式可扩展 目前支持本地HDF5格式、MySQL存储。默认使用HDF5,数据文件体积小、速度更快、备份更便利。截止至2017年4月21日,沪市日线数据文件149M、深市日线数据文件184M、5分钟线数据各不到2G。

  • 很多时候为了运行复杂的策略用python速度会很慢,而核心部分用C 编写可以大幅提升策略的运行速度。另外通达信、金字塔等主流证券软件都支持C 的dll库,而且可以很方便地图形化展示策略结果,那么策略核心部分用C 编写成dll库也是一种通用的跨平台方案。 而传统的python对C 库调用方法,需要自己编写很多封装函数,且聚宽的策略回测平台本身也不支持调用本地的C 库。 这时可以借助一个开源的第三方平

  • 一、安装环境 所有的软件包都下载到/tmp/ sudo apt-get install vim git bzip2 build-essential autotools-dev automake autoconf sudo apt-get install hdf5-helpers libhdf5-cpp-100 libhdf5-dev libhdf5-100 libhdf5-serial-dev l

  • —— 本篇文章 by 平心静气 很多时候为了运行复杂的策略用python速度会很慢,而核心部分用C 编写可以大幅提升策略的运行速度。另外通达信、金字塔等主流证券软件都支持C 的dll库,而且可以很方便地图形化展示策略结果,那么策略核心部分用C 编写成dll库也是一种通用的跨平台方案。 而传统的python对C 库调用方法,需要自己编写很多封装函数,且聚宽的策略回测平台本身也不支持调用本地的C 库。

 相关资料
  • 作为无基础的初学者,只想先大概了解一下 Python,随便编个小程序,并能看懂一般的程序,那些什么 JAVA 啊、C 啊、继承 啊、异常啊通通不懂怎么办,于是我找了很多资料,写成下面这篇日记,希望以完全初学者的角度入手来认识 Python 这个在量化领域日益重要的语言

  • 问题内容: 我有一个包含的字符串变量 字符串不包含空格。我想编写一个仅打印包含(az)的单词的正则表达式,我尝试了一个简单的正则表达式 match对象仅包含单词,而单词不匹配。 使用时,我可以同时获得和。 我的问题是为什么我们不能这样做? 如何处理? 问题答案: 在字符串documenation中找到 一次 模式: 扫描字符串以查找正则表达式模式产生匹配项的位置,然后返回相应的MatchObjec

  • 实习中用qt做的是什么?上位机开发吗? qt中主要使用了什么控件? 界面是代码生成还是可视化拖动? qt的源对象系统? pushbutton是怎么实现的? 信号和槽是一个什么样的机制? qt每一个类都有一个宏定义,这个宏定义是什么? 说一下智能指针 为什么使用智能指针? unique_ptr和weak_ptr? 右值引用 虚函数一般是怎么用的? 多态有几种形式? 用过STL的那些容器? 什么情况下

  • 网易-研究院-前端一面 面试分为三个部分30分钟:1.自我介绍 2.专业面试 3.反问环节 1. 你觉得项目中最难的点是什么? 2. 你说了动态表单,能直接手写一个吗? 3. 根据写的代码,ref='sel'获取了DOM元素,this.$refs.sel 引用这个DOM元素,你知道Vue是如何实现ref的吗? 4. 看你用了v-model,Vue是如何实现双向绑定的? 回答v-bind+input

  • 第一次接触电话面试的形式,聊了四十多分钟 设计一个strcpy函数?(答了dest长度不够怎么办,拷贝用memcpy,释放空指针,结尾补) 你设计的这个函数中有什么bug吗?(只回答了结尾和NULL的问题) strlen和sizeof的区别 内存管理中堆和栈的区别 static是全局变量吗 那么static和const的区别 malloc和new的区别 封装、继承、多态 智能指针了解吗 c++11

  • 本文向大家介绍PHP CodeIgniter框架的工作原理研究,包括了PHP CodeIgniter框架的工作原理研究的使用技巧和注意事项,需要的朋友参考一下 CodeIgniter(以下简称CI,官网以及中国站)是一个流行的PHP框架,小巧但功能强大,简洁轻量同时拥有很好的扩展性,在国内也比较受欢迎。另一方面,CI却没有与时俱进,并不支持PHP5.3之后的一些特性,导致它相对更适合较老一些的项目