这篇序在我的任务列表中拖了差不多快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社区 -)中,可能在其他网站转载,但如果有任何反馈还是请前往社区论坛发帖。