作为常年混迹加密货币量化圈的牛马,踩过无数坑后终于打磨出 banbot 这个量化框架。今天给大家分享下这把好用的锤子!
为什么要重复造轮子?
市面上确实已经有不少量化交易框架,但在实际使用中我遇到了这些问题:
- 性能问题:很多框架在回测时速度很慢,特别是在处理 1 分钟级别的数据时。
- 策略实现繁琐:需要写很多模板代码,而且策略代码在回测和实盘时还需要修改。
- 超参数优化容易过拟合:很多框架缺乏有效的防过拟合机制。
- 实盘部署复杂:需要配置很多环境依赖,而且不同策略要开多个进程。
banbot 的主要特点
经过反复打磨,banbot 现在具备以下特点:
- 超高性能:得益于 Go 语言和优化的指标库,1 秒钟就能回测 1 年的数据(基于 5 分钟 K 线测试)。
- 一份代码多处运行:同一个策略代码,无需修改即可用于回测、模拟交易和实盘。再也不用担心回测和实盘表现不一致了。
- 事件驱动架构:完全基于事件驱动设计,杜绝未来函数,让策略逻辑更自由,回测结果更可靠。
- 内置防过拟合机制:提供了滚动优化回测功能,可以更真实地模拟策略在未来的表现。比如用最近 3 年数据,每次用 1 年数据优化参数,然后用优化后的参数对后 2 个月进行回测,如此滚动,最终得到不含未来信息的回测报告。
- 规模化部署:一个 2 核 2G 的小服务器就能同时运行数百个账户的策略。而且所有策略打包成单个可执行文件,部署超级方便。
- 完善的 WebUI:提供了美观的 Web 界面,可以在线编辑策略、执行回测、分析交易表现等。
- 支持 AI 和机器学习:支持通过 grpc 和 python 交互,可供模型训练和调用 AI 模型推理。
技术实现上的一些思考
- 为什么选择 Go ?
量化交易最常用的语言是 Python ,但在追求性能的同时又要保持开发效率,Go 是很好的选择。而且 Go 的交叉编译特性让部署变得极其简单。
- 数据存储方案
采用了 TimeScaleDB 时序数据库存储 K 线数据,在存储空间和查询性能上取得了很好的平衡。只存储 1m 、5m 、15m 、1h 、1d 这些基础周期,其他周期都通过动态聚合生成。
- 回测性能优化
通过支持状态缓存的指标库设计,大大提升了回测速度。同时采用事件驱动架构,让回测更接近实盘表现。
示例量化策略
[ github 策略仓库]
banbot 提供了包括趋势、网格等社区公开策略,您可从上面示例策略仓库中查看并测试。(请勿直接用于实盘)
使用建议
- 在实盘之前,一定要进行充分的回测和滚动优化测试。
- 建议先用小资金测试策略,确认策略表现符合预期后再加大资金量。
- 实盘时建议配置微信通知,及时了解策略运行状态。
未来规划
- 支持更多交易所(目前仅支持币安)
- 添加更多经典策略
- 支持更多社交 app 通知和控制
项目完全开源,欢迎大家使用和贡献代码。如果对项目感兴趣,可以到 GitHub 查看更多细节。
[官方文档]
[ github 仓库]
PS:我只分享锤子,请别问我的圣杯雕刻的咋样,圣杯还得看各位大佬
更多深度交流从文档中扫码加微信进群