Hikyuu基于 C++/Python 的开源量化研究框架:金融与交易正确性优先,策略与组合同构、可任意深度嵌套、部件自由替换的高性能量化引擎。内核是交易理论与金融语义的完整与正确——不让一个「能跑通」却不成立的策略,被当成结论。
强大的功能特性,助力您的量化交易研究
一笔交易在金融上该怎样成立——何时成交、成本由哪几项构成、除权时持仓与现金如何变化、绩效用什么口径、空值与非有限值怎么传播——在框架里都是完整且显式的:环节不缺、规则被真正执行、可被逐项校验。立意只有一句:不让一个「能跑通」却不成立的策略,被当成结论。
组合与策略是同一件事:组合节点同样持有完整的交易语义,可任意深度嵌套;同一引擎支持三种运行模式(A 信号聚合 / B 资金分配 / C 共享账户),覆盖多策略观点叠加、FOF/MOM 再平衡与多策略共享资金池。团队 / 个人的策略池可以整体回测,也可以拆开算账。
把做策略该考虑的环节逐项列出(环境 → 条件 → 信号 → 仓位 → 退出 → 滑点 → 成本;组合层:选样 → 资金分配 → 风控),照图逐项填写,路径本身就是入门路径。它不是自动交易工具:不内置券商对接、不承诺自动下单,OrderBroker 只是可插拔接口,对接与否由你决定并承担合规责任。适合想把系统化交易认真学一遍的人。
C++ 核心库原生支持多线程与多核加速;Python 接口层集成 TA-Lib,与 numpy、pandas 无缝互转。AMD 7950x 实测:1913 万日 K 线首次加载约 6 秒,预热后计算 20 日均线并求和仅需 166 毫秒。核心库可独立剥离,快速构建自定义工具。
结合 Python + Jupyter 与云服务器,搭建完全自主可控的云量化平台,手机、平板、电脑随时随地访问。无缝对接 numpy、scipy、pandas、TensorFlow 等 AI 与数据分析工具,按需自定义界面、实现服务化部署。
Apache 2.0 开源协议,代码透明审计无忧。核心代码 1300+ 处显式校验拦住规则与输入边界,1600+ 个 doctest 用例、1.6 万条断言按「一模块一套件、一边界一用例」组织;Windows / Ubuntu / macOS 三平台 CI;C++ 核心可独立剥离,核心数据与策略全量本地可控。
from hikyuu.interactive import *
# 创建模拟交易账户进行回测,初始资金 30 万
my_tm = crtTM(init_cash = 300000)
# 创建信号指示器(以 5 日 EMA 为快线,其 10 日 EMA 为慢线)
# 快线向上穿越慢线时买入,反之卖出
my_sg = SG_Flex(EMA(CLOSE(), 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))
组合即策略:组合可作为节点,任意深度嵌套
from hikyuu.interactive import *
# 1. 每个子系统都是一套完整的系统化交易:各自的 SG / MM / ST 与账本
def make_leaf(code, sg):
sys = SYS_Simple(tm=crtTM(init_cash=100000), sg=sg,
mm=MM_FixedPercent(0.5), st=ST_FixedPercent(0.05))
sys.to = sm[code].get_kdata(Query(-500)) # 绑定自身 K 线
return sys
trend = make_leaf("sh600000", SG_Cross(EMA(CLOSE(), n=5), MA(CLOSE(), n=60)))
grid = make_leaf("sh600004", SG_Cross(EMA(CLOSE(), n=3), MA(CLOSE(), n=10)))
# 2. 组合工厂只做投资组合该做的事:谁参与(SE)+ 分多少钱(AF)
group = PF_SignalAggregate(tm=crtTM(Datetime(202001010000), 300000), adjust_cycle=5)
group.add(trend)
group.add(grid)
# 3. 这个组合还能作为节点参与更大的组合(多资产多策略的逐层聚合)
top = PF_Simple(tm=crtTM(Datetime(202001010000), 1000000),
af=AF_FixedWeightList([0.6, 0.4]), adjust_cycle=5)
top.add(group)
top.add(make_leaf("sh600005", SG_Cross(EMA(CLOSE(), n=10), MA(CLOSE(), n=30))))
# 4. 一次运行,整个组合在同一账户内统一结算
top.run(Query(-500))
print(top.tm.get_funds().total_assets)
每一行都是一个可替换的卡口,换掉任何一个,结算、成本与校验仍由框架承担,整体金融语义严格自洽
欢迎 Star、Fork,参与贡献
因作者精力有限,对捐赠用户的问题会优先解答、确保响应
支付宝 · 一次性支持(赠历史日线及 3 个月捐赠权益)
前往捐赠支付宝 · 半年期捐赠权益(赠历史日线)
前往捐赠支付宝 · 全年期捐赠权益(赠历史日 / 分 / 时 / 笔数据)
前往捐赠首年 ¥300 续费半价 · 3 台设备登录 · 专属微信群及策略部件库(赠历史日 / 分 / 时 / 笔数据)
前往加入捐赠计划与附赠详见 捐赠计划说明
有意赞助或深度合作请私下联系作者:
fasiondog@sina.com
也可以通过 GitHub issue 联系:
GitHub Issues
交流以微信群为主、QQ 群为辅。加入任一社群请备注「加入 hikyuu」,未备注将无法通过验证~
加入请备注「加入 hikyuu」
加入请备注「加入 hikyuu」
关注获取最新资讯、性能测试与技术文章
首年 300 元 / 续费半价 · 3 台设备登录 · 含专属微信群及策略部件库
需要的帮助:测试并反馈 Bug · 编写文档 · 开发新功能 · 网站优化
建议通过在 GitHub / Gitee / GitCode 开 issue 的方式贡献以上内容