问题
交易所交易者往往依赖电子表格和直觉做决定。他们没有一个安全的地方,在投入真金白银之前测试策略,也没有一份统一记录投注额、限额和结果的账本。此外还有一个硬性限制:在测试期间,Betfair Italy 拒绝了从数据中心服务器通过其 API 发送的投注请求。
我做了什么
我开发了 BetPilot AI,一个可安装的 Web 平台,用于分析、风险控制和模拟,每个策略都先从模拟交易(paper trading)开始。
- 可视化策略构建器——策略以声明式蓝图保存,并按照严格的白名单进行校验。系统从不执行任何用户代码。
- AI 策略助手——用户用日常语言描述策略,由 Claude(Anthropic)将其转换为蓝图,或改进已有的蓝图。如果回答未通过校验,错误信息会返回给模型,让它再试一次。
- 模拟引擎——回测、回放和对比作为后台任务运行。撮合引擎会模拟流动性、部分成交、滑点和延迟,而且结果是确定性的:相同的输入总是得到相同的结果。
- 风险引擎与信号——预算限额(投注额范围、每日和每周最大亏损、赔率范围)以及投注额建议器:在给出概率时采用四分之一凯利公式,上限为资金的 5%;否则采用 2% 规则。每个信号都会显示公平赔率和期望值。
- 真实交易日志——用户一键记录每笔真实投注;资金、盈亏(P&L)、ROI 和胜率随时保持最新。
- 实时数据——比赛统计来自 API-Football,交易所价格来自安装在用户电脑上的只读代理程序。
- 安全与记录——双因素登录、加密存储的密钥、按用户隔离的数据、审计日志,PDF、CSV 和 XLSX 格式的报告,以及通过电子邮件、推送和 webhook 发送的通知。
数据
- 一套自动化测试,其中包括一项证明模拟引擎无法发送真实订单的测试。
- 数据库结构中有18 个后端模块和42 个数据模型。
- 策略格式支持7 种运动和6 种投注额计算方法。
技术栈
前端使用 Next.js、React 和 TypeScript,配合 Tailwind CSS 和 Recharts,导出为静态文件。后端使用 NestJS,采用整洁架构(Clean Architecture)、领域驱动模块和 CQRS,通过 Prisma 连接 PostgreSQL。任务队列由 Redis 和 BullMQ 运行,并以 PostgreSQL 作为后备。集成:Anthropic API、API-Football 和 Betfair 只读 API。
为什么这样做
当交易所封锁服务器端投注后,我改变了模式。BetPilot 负责分析、计算投注额并记账;投注由用户本人完成。对于市场数据,我编写了一个本地代理程序,它只调用 Betfair 的读取方法,并将凭据保存在用户的电脑上。投注方法在设计上就被屏蔽,因此软件始终是一个决策辅助工具。


