我用 Go 写了一个高性能量化交易机器人,开源了

189 天前
 anyongjin

作为常年混迹加密货币量化圈的牛马,踩过无数坑后终于打磨出 banbot 这个量化框架。今天给大家分享下这把好用的锤子!

为什么要重复造轮子?

市面上确实已经有不少量化交易框架,但在实际使用中我遇到了这些问题:

  1. 性能问题:很多框架在回测时速度很慢,特别是在处理 1 分钟级别的数据时。
  2. 策略实现繁琐:需要写很多模板代码,而且策略代码在回测和实盘时还需要修改。
  3. 超参数优化容易过拟合:很多框架缺乏有效的防过拟合机制。
  4. 实盘部署复杂:需要配置很多环境依赖,而且不同策略要开多个进程。

banbot 的主要特点

经过反复打磨,banbot 现在具备以下特点:

  1. 超高性能:得益于 Go 语言和优化的指标库,1 秒钟就能回测 1 年的数据(基于 5 分钟 K 线测试)。
  2. 一份代码多处运行:同一个策略代码,无需修改即可用于回测、模拟交易和实盘。再也不用担心回测和实盘表现不一致了。
  3. 事件驱动架构:完全基于事件驱动设计,杜绝未来函数,让策略逻辑更自由,回测结果更可靠。
  4. 内置防过拟合机制:提供了滚动优化回测功能,可以更真实地模拟策略在未来的表现。比如用最近 3 年数据,每次用 1 年数据优化参数,然后用优化后的参数对后 2 个月进行回测,如此滚动,最终得到不含未来信息的回测报告。
  5. 规模化部署:一个 2 核 2G 的小服务器就能同时运行数百个账户的策略。而且所有策略打包成单个可执行文件,部署超级方便。
  6. 完善的 WebUI:提供了美观的 Web 界面,可以在线编辑策略、执行回测、分析交易表现等。
  7. 支持 AI 和机器学习:支持通过 grpc 和 python 交互,可供模型训练和调用 AI 模型推理。

技术实现上的一些思考

  1. 为什么选择 Go ?
    量化交易最常用的语言是 Python ,但在追求性能的同时又要保持开发效率,Go 是很好的选择。而且 Go 的交叉编译特性让部署变得极其简单。
  2. 数据存储方案
    采用了 TimeScaleDB 时序数据库存储 K 线数据,在存储空间和查询性能上取得了很好的平衡。只存储 1m 、5m 、15m 、1h 、1d 这些基础周期,其他周期都通过动态聚合生成。
  3. 回测性能优化
    通过支持状态缓存的指标库设计,大大提升了回测速度。同时采用事件驱动架构,让回测更接近实盘表现。

示例量化策略

[ github 策略仓库]

banbot 提供了包括趋势、网格等社区公开策略,您可从上面示例策略仓库中查看并测试。(请勿直接用于实盘)

使用建议

  1. 在实盘之前,一定要进行充分的回测和滚动优化测试。
  2. 建议先用小资金测试策略,确认策略表现符合预期后再加大资金量。
  3. 实盘时建议配置微信通知,及时了解策略运行状态。

未来规划

项目完全开源,欢迎大家使用和贡献代码。如果对项目感兴趣,可以到 GitHub 查看更多细节。

[官方文档]

[ github 仓库]

PS:我只分享锤子,请别问我的圣杯雕刻的咋样,圣杯还得看各位大佬

更多深度交流从文档中扫码加微信进群

4635 次点击
所在节点    分享创造
17 条回复
ziyeziye
189 天前
666, star 了,学习一下
Rabbit233
189 天前
太 6 啦,直接一手 start ,支持支持~
qloog
189 天前
厉害,已 star, 另外 关于子命令和帮助可以使用 github.com/spf13/cobra 可以极大的优化代码结构
gy0624ww
189 天前
大佬 真厉害
prosgtsr
189 天前
太神奇了
gy0624ww
189 天前
大佬 这个除了虚拟货币 支持美股不
anyongjin
189 天前
@gy0624ww #6 目前只支持虚拟货币的币安交易所哈,欢迎更多人参与进来对接更多市场~
anyongjin
189 天前
@qloog 感谢,看着很不错,晚些详细研究下
zjiajun
188 天前
点赞了
acerphoenix
188 天前
学习,star
xsen
188 天前
看着不错,详细研究下
yesha
188 天前
策略还要自己写吗?
anyongjin
188 天前
@yesha 策略是量化交易的核心,示例项目有经典的策略可以学习测试;不过可稳定盈利的实盘策略还是要花很多时间研究;我有组策略在实盘测试,感兴趣可以加文档中微信聊下
ddoyou
187 天前
有意思,什么时候支持一下 oke
CareiOS
186 天前
牛啊。
anyongjin
186 天前
@ddoyou 可以 issue 提需求哈,按优先级支持,社区一起完善
FatSheep2020
100 天前
谢谢楼主开源这套代码。
我今天试着在 Archlinux 编译运行了一下,发现启动不了。
我已经创建了一个新的 issue ,请楼主过目。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1115797

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX