为爱发电终是不能长久的……

最初个人量化就是为了防止自己手贱,用计算机了执行自己的策略。这个所谓的个人量化并没有非常清晰的目标,大概只有两点非常粗略的要求:第一个,就是策略的编写必须足够简单和迅速,第二个便是策略的执行足够稳定和正确。并没有性能要求,因为只是个人的资金量是非常少的,追求过高的性能和交易频率并没有实际上的意义。

所以自然而然便选择的Python(Python是一个无论你丢弃了多久,都可以迅速拿回来的语言)。当然的,市面上有各种量化的平台,不过免费使用的又能满足自己要求的,其实并没有太多。于是,只能重复发明轮子。

在最初的设想之中,大概分为五个模块:数据,投研,策略,回测,交易。数据就是从各种渠道快速获取所需要的数据,而投研就是利用所获得的数据就是一番的折腾和探索,策略就是根据折腾的结果编写成的策略,而这些策略被自己分为选择,交易,风控三类型的策略,回测就是对策略进行回归测试,探索这类策略的胜率和盈利,交易思议便是用策略进行实盘的交易了。

最后Python版本的被搞了出来,还真能把整工作流程跑通了。不过,最初不注重性能,最终在自己低端的机器上有点吃力。主要的表现上就是策略的回测多个实例跑起来后,就其卡无比。而在交易上面,则表现为行情的积压,不能及时处理最新的行情,这样导致的问题是不能及时风控。当然本来通过非正式手段来获取的行情,本来就有延迟,不过因为不是高频,这倒没什么大问题。所以后面polar-rs代替pandas,有些不少模块用pyo3进行加速。不过这些提升并不明显。

后面干脆就推到重来,先拿交易部分开刀,全部改成rust,效率的确有点提升。再后来,全部都改了rust,不过为了策略编写的简单,通过pyo3,支持两种语言的混合编写。差不多后,发现少了一样东西:自己一直后台操作,居然少了一个操作界面!所以,增加一个操作界面,也提上了日程。

自己本身也是搞过windows开发,也搞过qt(QML除外),不过一上来马上就否决了,因为有一开始的痛苦的调试经历以及非常慢的开发效率。所以选择的就只有两个了:第一个就是用electrontauri这种web的方案,国内如果不是专用软件的,绝大部分都转向了这类,因为开发效率高,web的人多。不过网易的那个云笔记,卡到我怀疑人生,就要有点失落了。不过真正的原因还是自己对css不熟悉,估计自己搞要耗费时间不会比c++少。Flutter也就自然而然的是选择了,rust-desk踩的坑也差不多了,也就轮到自己可以开始踩坑了。

事实上,Flutter并没有让人太失望,搞普通应用也没是问题,可以比较快速的挫出界面,如图的一点demo。

图示1:

图示2:

只是,这样瞎折腾,为爱发电下去好像不能支持长久呀……

以前的旧同事有时问,这数据怎么获取,行情,交易接口怎么搞?

其实数据和行情部分很简单,网上有开源的,再不行自己网上爬数据。自己开始之前是用tushare pro免费使用加上自己爬的一些,后面发现tushare pro居然只要一年的使用权,要使用必须同过积分的形式变相收费。所以之后切换至akshareopentools,不过akshare这个接口变更的有的频繁,突然间接口有改名,或者删除,又或者改变返回结果的形式,更为重要的是因为我是重复调用的,他的接口很多冗余,很多时候都必须改他的接口。最后,自己用rust重写了获取数据接口,简单封装给Python使用,算是比较稳定了。

而对于交易部分,这个其实很简单,没有想象中的复杂。虽然没有正式交易接口,不过我们有交易客户端即可。实现方式就类似按键精灵,自己定义好交易接口,然后提交给交易客户端。交易客户端主要使用pywinauto做为按键和鼠标,它主要靠截屏和图形对比的方式定位坐标。通过Python ocr识别文字。如此便可以实现交易的功能。