本文仅用于学习研究与技术交流,不构成任何投资建议。

最近在 Codex 和灵码的帮助下,终于把自动交易的系统写好了,补上了从策略到自动交易的“最后一公里”。

至此,在本地进行策略研究、回测和自动交易的整个链条算是彻底打通。

这整个过程的构建有点漫长,断断续续算是搞了好几年了。虽然实际花的时间没那么多,但中途遇到困难时不想解决,就一直拖着。

自动交易系统概览

1. 缘起

自动交易最早是在 2023 年开始尝试,那时候用 miniQMT 搞过一版,但能力有限,只写了一个非常初级的 demo。

实际自动交易要处理的细节实在太多,太耗费精力和时间,就懒癌爆发一直不想继续往下写。

这几年 AI 大模型迅猛发展,写代码的方式也完全变了。以前很多事情要自己琢磨、自己敲代码。现在好了,只需要把详细的需求喂给 AI,AI 就能快速生成整个系统的代码。

而且写出来的代码风格之统一、结构之优雅,让人佩服。要我自己写,我可能很难写出这么漂亮的代码。

2. 订单处理

之前在本地搞了一些策略,一直没有对接 miniQMT 自动交易。主要原因是我想写一个真正不需要自己管的自动交易框架,类似于聚宽的模拟盘。策略丢进去就能自己跑,而不需要太多人工参与。

但一个真正意义上的自动交易框架,需要考虑的细节太多。

比如最基础的下单逻辑:

  • 下了单,如果部分成交怎么办?
  • 完全没成交又怎么办?

这些问题倒还算好处理。可行的解决办法有:

下单 -> 检查成交 -> 未完全成交则撤单 -> 按最新价格重新提交。

虽然不能保证百分百成交,但成功率已经很高了。

另一种更激进的办法是:买单主动加一跳、卖单主动减一跳。

这样可以提高成交概率,但交易成本会略微增加。

订单处理流程

3. 多策略并行

其实最麻烦的问题是:

一个账户对接多个策略时,如何隔离各策略的现金与持仓?

如果自动交易中途暂停了,那重启时这些隔离的信息又如何恢复?

如果只是简单地跑一个策略,那就没啥意思了。如果将多个策略杂糅成一个策略然后丢进一个账户,那组合策略的代码就非常混乱,后续也不好维护。

在 AI 的帮忙下,最终确定了如下解决方案:

  1. 为每个策略单独运行一个自动交易脚本,因此需要自动交易脚本足够通用,方便接入不同的策略;
  2. 每个脚本内部维护自己的“策略现金”和“策略持仓”;
  3. 这些数据根据成功成交的订单来进行更新,而不是用交易账户的变化来进行更新;
  4. 所有数据实时写入本地文件。

这样做的好处有:

  • 自动化暂停后重启时,只需读取本地文件即可恢复之前的信息状态;
  • 每个策略拥有完全独立的现金、持仓、市值信息;
  • 历史数据存入了本地,便于后续进行分析;
  • 多策略互不干扰,实盘框架也更加干净。

多策略状态隔离

4. AI 参与开发

于是在这些想法的指引下,开始 push Codex 和灵码从 0 来搭建这个自动交易系统。

要我自己来写这些代码,我都不知道要写到什么时候。但 AI 很快就写好了。

虽然 AI 写的代码也存在一些 bug,但在 AI 写好的代码基础上慢慢 debug,比自己从 0 写代码再慢慢 debug,还是快太多。

目前,整个系统已经 debug 和用测试账号测试完毕,最近开始用 miniQMT 来进行实盘交易了,在实际交易中慢慢完善和改进这个框架。

后续的工作也有很多,但从 0 到 1 的过程是最艰难的。现在 1 终于有了,后面再慢慢迭代就相对容易多了。

敬请期待。

本文仅用于学习研究与技术交流,不构成任何投资建议、证券投资咨询服务或收益承诺。
Discussion

评论与交流

当前主要通过知识星球和社交媒体交流文章相关问题。

交流入口

如果你想讨论文章里的代码、数据接口或本地运行问题,可以通过知识星球或页脚社交媒体联系我。