背景
最近在学习证券方面的知识,以及一些策略。这些策略需要的操作频次还好,最高频的也只是每天 1 次,全部手动也是可以接受的。但是这是对于普通人来说,对于程序员来说,这种每天都要做的重复劳动,不写个程序实现,那绝对是浑身难受。于是我开始了证券自动化探究之旅。
尝试过的方案
回测
证券自动化或者量化交易,有一个重要的环节就是回测。有了策略之后,要用历史数据跑一下到底效果怎么样。主要看胜率、收益、最大回撤。
最开始我用的是 Backtrader,开源免费,2 年前用业余时间研究了一阵,写了个专栏,本文就不展开了,详见:量化交易 Quantitative Trading。
后来发现一些量化交易软件自带回测功能,就没再用它了,不过用了它之后,一些基础概念,比如滑点、手续费率什么的,都已经有基础了。甚至代码逻辑也大同小异,所以这波也不算亏。
量化交易
后来笔者开始了解量化,从一个 B 站 UP 主「麻辣龙虾仁」那里接触到了 QMT。于是开了国信证券的 iQuant(QMT 定制版),里面既可以实现回测,还能解决数据问题,还能实现自动交易。
然后,笔者就开始学习一些量化方面的知识。但是由于时间问题,目前的进度非常缓慢,知识看了不少,实践几乎没有。只写了一个自动逆回购的程序跑着,收益率也就比活期存款高一点。这个后续肯定要继续研究起来的,这里算是立个 flag,把计划写上:
- 模拟盘实现自动化定投策略;
- 模拟盘实现期权定投策略优化;
- 实盘上期权定投策略;
- 模拟盘实现可转债轮动策略;
- 实盘上可转债轮动策略;
- 模拟盘优化现有策略,并上实盘。
信息抓取
无论是手动实现策略,还是程序化实现策略。其中有一个关键点是无论如何也跨不过去的,那就是:根据自己的需求获取数据,然后进行辅助判断。
比如筛选可转债的时候,需要用到「集思录」里的一些数据。打新需要用到东方财富里的一些数据。甚至港股、美股信息,需要用到一些移动 APP 里的数据。
这些数据肯定要定制化爬取的,爬取之后还要用某种方式定时推送给自己。考虑到后续可能商业化,还要有微信、企业微信等的消息推送功能。
- 搞个网页或小程序,展示爬取的定制化数据;
- 实现消息的定制化群推送;
- 实现消息的定制化个人推送;
自动化交易
有了量化软件,实际上绝大多数自动化交易都能够实现。但是还是有一些边边角角的功能没办法实现,比如 LOF 基金的申购。
所以终极版本就是自动化操作手机 APP。当然,理论上这个方案的稳定程度是最低的,因为太受 UI 的影响了。不过它的优点也很明显,就是可以实现所有场景的诉求。
这里简单说一下笔者的心路历程。最开始,笔者尝试了 WEB 版的自动化。结果发现拥有 WEB 版的券商少得可怜,这个方案很快就 PASS 掉了。后来尝试用 pywinauto + pyautogui 自动化操作 PC 上的券商应用,结果发现好多移动端的功能,PC 端都没有。
最终还是选择了直接操作移动 APP 这条路,这个应该算是终极方案了,也是我打算写这个系列文章的缘起。年纪大了,记性不好,还是写下来比较靠谱。
这里插一嘴,之前在研究用企业微信群发消息的时候,发现有外部用户在的群,是不能加入机器人的,也就是不能够简单的实现程序化发消息。后来查到有个解决方案,就是搞一个云手机,在上面运行企业微信,然后再运行个脚本,监听信号,并且能够自动化操作企微。这样只需要给那个脚本发信号,就可以实现程序化发消息了。虽然兜了一大圈,但是这个方案的确是最安全也最彻底的。笔者也是受到了这个方案的启发。
说回自动化交易,目前打算分这么几步走:
- 本地单机:在 PC 上用 VirtualBox + Android + Appium 尝试实现自动化操作任意 APP;
- 手机分离:实现 Appium 无线操作实体手机;
- 脚本上云:实现在云服务器上运行 Appium,操作实体手机;
- 手机上云:最后搞个云手机,所有程序全部上云,全年无休,不用担心断电风险;
- 业务扩展:比如上文提到的消息推送。
有些聪明的同学可能会说,干嘛分这么多步,直接全部搞云不就行了。这里要解释一下:
首先,笔者平时的时间有限,每天只有 2、3 个小时的时间搞这个,所以尽量要拆分一下,尽可能快的有一些阶段性成果。
其次,笔者想要多了解一些技术,比如虚拟机,比如真机调试等。所以故意加入了这些看似不必要的步骤。之前不敢这么干,现在有了 ChatGPT 的加持,心里有了很大的底气。正好多用用 GPT,熟练熟练。
所以先 YY 了一版计划,希望能够实现。
结语
啰嗦了这么多,大家可能觉得没什么干货啊。的确,这篇文章更多是写给笔者自己看的,主要就是为了滤清思路。另外,也算是当众立个 flag,把自己逼到这个份上才行。
如果我上面的计划都能实现,并且形成一个专栏的话。那么回头再来看这篇文章,估计会别有一番感慨。(如果没有后面了,那这篇文章就是个屁)。