基于Python的量化交易系统开发实战!
这篇序在我的任务列表中拖了差不多快3个月。从2019年春节到现在5月底,大部分精力都铺在项目v2.0版本的开发上,终于核心架构在上周发布的v2.0.3基本稳定了下来,也就终于有了时间来动笔。
如果你今天去Github上,查看vn.py项目的仓库: vnpy/vnpy ,可能会发现一套包括了API封装、事件引擎、策略应用、图形界面等组件的完整量化交易平台,但更早的时候,它只是个能在CMD命令提示符(Windows那个黑框框)中打印期权价格的小程序而已。
本科求学期间,由于机缘巧合接触到了量化交易的这一概念。一家英国场外衍生品经纪商IG Index(现在的IG.com)推出了一种全新的交易产品:One Touch Custom Bet,本质上是一种美式二元期权(American Binary Option),但允许客户自由选择行权价格和到期时间:从30分钟到2天。而IG Index最初对于这类期权的定价模型存在着若干缺陷,比如忽视了某些重要经济数据公布导致的市场波动率瞬时暴涨。在这种情况下,即使对于完全不懂编程的大二学生,也可以通过简单的“Excel表数据统计” + “盈亏比分析” + “只选有优势时下注”,实现2个月资金翻倍(且回撤低于5%)的收益水平。但由于这种交易机会的不可复现性,在这里就不更多深入其中的细节,只是想借着这个例子说明:
量化交易的门槛并没有那么高,只要肯花心思每个人都可以做量化。
2012年毕业后,我的职业经历从期货公司的量化研究员开始,2013年中开始传出国内即将推出期权的消息,天然自带量化属性的期权产品上市,当务之急就是找到能够满足期权交易需求的量化平台。彼时量化交易已经在国内的期货市场逐渐起步,文华、TB、MC、金字塔四大平台占据了市场的大多数份额,但主要都是针对CTA趋势类交易策略设计,和期权上围绕波动率交易的量化策略属于不同的方向。
本土产品略逊,那只能把目光转向外来的“和尚”,但结果却依旧失望:RTS(后来被Bloomberg收购)的交易功能比较粗糙,Horizon的期权策略无法定制开发,ORC(后并购为ITIVITI)则是连CTP的对接都要用户自己做。求学时候交易One Touch Custom Bet的经历,让我对国内期权的量化交易十分执着。现成的既然没有,那就只有发扬“吃苦耐劳”的中华民族精神,“自己动手丰衣足食”了。
尽管硕士念了个金融工程专业,但整体上对于编程的接触依旧停留在Excel VBA和Matlab写点简单的数据分析和策略回测脚本,想靠着这点知识和经验,从0开发一套量化交易系统出来未必有点“心太大”。好在当时的目标定的也挺简单,只要能实现三步功能:收取实时行情->计算波动率->输出在屏幕上,新的市场初期竞争不会太激烈,下单执行人工手点也行。
定好目标就要选编程语言了,大致是个排除法的过程:
- Excel VBA的功能太有限,而且期权波动率实时计算的压力可能也无法满足;
- Matlab学过肯定最方便,但无奈搞不定CTP API的对接,扩展编程要用其他语言,同样为科学计算设计的R语言也差不多;
- C++是CTP API的原生支持语言,但指针、内存管理等等细节对于初学者来说实在太过艰深;
- Java和C#有虚拟机的支持不用关心内存问题了,但语法还是比较复杂和啰嗦;
- 胶水类语言,由于动态语言的特点,相对容易上手一些,但Perl、Ruby、Lua在金融领域的应用资料比较少;
- 排除到最后,最好的选择就只有Python了,基础语法和Matlab比较相似,金融方面应用的资料非常丰富,作为开源软件社区氛围也挺活跃。
选定Python后就是一个快速前进的过程,从Learn Python the Hard Way的教程起步,到写出能在CMD黑框中打印期权波动率的小程序,花了差不多三个月的时间。再往后添加GUI图形界面,逐步实现从半自动到全自动的交易功能,得益于Python本身的易学易用特点以及活跃的开源社区生态,整体还是挺快的,总结一句的话:
即使没什么编程经验,通过边学边写的方式,也一样可以短时间内搭建出属于你自己的量化交易系统。
遵循着Python开源社区的原则:“没能力时从社区获得帮助,有能力后帮助回报社区”,2015年1月的时候在Github上正式开源了vn.py项目,希望可以把自己积累的经验分享出来,帮助后来人在前进的路上少踩一些坑。
vn.py项目最初的定位,就是一套教用户如何开发量化交易系统的教程,在早期功能简单、项目规模还比较小的时候,注释和代码本身就是这套教程。但随着5年时间里项目的快速成长,以上两者能传递的知识信息就显得太碎片化了,所以希望通过这本书来帮助大家实现两个目标:
- 建立成体系的量化交易系统开发知识
- 通过动手实践来积累量化编程的经验
从小语文就学的比较一般,加上第一次写书,可能字里行间有很多不足的地方,欢迎大家指正。
最后讲下本书的写作计划:因为担心动笔之后,由于种种原因(工作、偷懒、写太烂)导致太监无法完成,决定还是直接更新挂在网上,有社区这么多人监督着我应该能比较好的坚持下去,所有篇幅会更新在[vn.py社区论坛](vn.py社区 -)中,可能在其他网站转载,但如果有任何反馈还是请前往社区论坛发帖。