自动化证券交易(零)——方案梳理

191 阅读5分钟

背景

最近在学习证券方面的知识,以及一些策略。这些策略需要的操作频次还好,最高频的也只是每天 1 次,全部手动也是可以接受的。但是这是对于普通人来说,对于程序员来说,这种每天都要做的重复劳动,不写个程序实现,那绝对是浑身难受。于是我开始了证券自动化探究之旅。

尝试过的方案

回测

证券自动化或者量化交易,有一个重要的环节就是回测。有了策略之后,要用历史数据跑一下到底效果怎么样。主要看胜率、收益、最大回撤。

最开始我用的是 Backtrader,开源免费,2 年前用业余时间研究了一阵,写了个专栏,本文就不展开了,详见:量化交易 Quantitative Trading

后来发现一些量化交易软件自带回测功能,就没再用它了,不过用了它之后,一些基础概念,比如滑点、手续费率什么的,都已经有基础了。甚至代码逻辑也大同小异,所以这波也不算亏。

量化交易

后来笔者开始了解量化,从一个 B 站 UP 主「麻辣龙虾仁」那里接触到了 QMT。于是开了国信证券的 iQuant(QMT 定制版),里面既可以实现回测,还能解决数据问题,还能实现自动交易。

然后,笔者就开始学习一些量化方面的知识。但是由于时间问题,目前的进度非常缓慢,知识看了不少,实践几乎没有。只写了一个自动逆回购的程序跑着,收益率也就比活期存款高一点。这个后续肯定要继续研究起来的,这里算是立个 flag,把计划写上:

  1. 模拟盘实现自动化定投策略;
  2. 模拟盘实现期权定投策略优化;
  3. 实盘上期权定投策略;
  4. 模拟盘实现可转债轮动策略;
  5. 实盘上可转债轮动策略;
  6. 模拟盘优化现有策略,并上实盘。

信息抓取

无论是手动实现策略,还是程序化实现策略。其中有一个关键点是无论如何也跨不过去的,那就是:根据自己的需求获取数据,然后进行辅助判断。

比如筛选可转债的时候,需要用到「集思录」里的一些数据。打新需要用到东方财富里的一些数据。甚至港股、美股信息,需要用到一些移动 APP 里的数据。

这些数据肯定要定制化爬取的,爬取之后还要用某种方式定时推送给自己。考虑到后续可能商业化,还要有微信、企业微信等的消息推送功能。

  1. 搞个网页或小程序,展示爬取的定制化数据;
  2. 实现消息的定制化群推送;
  3. 实现消息的定制化个人推送;

自动化交易

有了量化软件,实际上绝大多数自动化交易都能够实现。但是还是有一些边边角角的功能没办法实现,比如 LOF 基金的申购。

所以终极版本就是自动化操作手机 APP。当然,理论上这个方案的稳定程度是最低的,因为太受 UI 的影响了。不过它的优点也很明显,就是可以实现所有场景的诉求。

这里简单说一下笔者的心路历程。最开始,笔者尝试了 WEB 版的自动化。结果发现拥有 WEB 版的券商少得可怜,这个方案很快就 PASS 掉了。后来尝试用 pywinauto + pyautogui 自动化操作 PC 上的券商应用,结果发现好多移动端的功能,PC 端都没有。

最终还是选择了直接操作移动 APP 这条路,这个应该算是终极方案了,也是我打算写这个系列文章的缘起。年纪大了,记性不好,还是写下来比较靠谱。

这里插一嘴,之前在研究用企业微信群发消息的时候,发现有外部用户在的群,是不能加入机器人的,也就是不能够简单的实现程序化发消息。后来查到有个解决方案,就是搞一个云手机,在上面运行企业微信,然后再运行个脚本,监听信号,并且能够自动化操作企微。这样只需要给那个脚本发信号,就可以实现程序化发消息了。虽然兜了一大圈,但是这个方案的确是最安全也最彻底的。笔者也是受到了这个方案的启发。

说回自动化交易,目前打算分这么几步走:

  1. 本地单机:在 PC 上用 VirtualBox + Android + Appium 尝试实现自动化操作任意 APP;
  2. 手机分离:实现 Appium 无线操作实体手机;
  3. 脚本上云:实现在云服务器上运行 Appium,操作实体手机;
  4. 手机上云:最后搞个云手机,所有程序全部上云,全年无休,不用担心断电风险;
  5. 业务扩展:比如上文提到的消息推送。

有些聪明的同学可能会说,干嘛分这么多步,直接全部搞云不就行了。这里要解释一下:

首先,笔者平时的时间有限,每天只有 2、3 个小时的时间搞这个,所以尽量要拆分一下,尽可能快的有一些阶段性成果。

其次,笔者想要多了解一些技术,比如虚拟机,比如真机调试等。所以故意加入了这些看似不必要的步骤。之前不敢这么干,现在有了 ChatGPT 的加持,心里有了很大的底气。正好多用用 GPT,熟练熟练。

所以先 YY 了一版计划,希望能够实现。

结语

啰嗦了这么多,大家可能觉得没什么干货啊。的确,这篇文章更多是写给笔者自己看的,主要就是为了滤清思路。另外,也算是当众立个 flag,把自己逼到这个份上才行。

如果我上面的计划都能实现,并且形成一个专栏的话。那么回头再来看这篇文章,估计会别有一番感慨。(如果没有后面了,那这篇文章就是个屁)。