前 言 作为vn.py的作者,非常高兴能够看到本书的出版。最近十年,量化研究、大数据分析、机器学习等前沿技术越来越多地在金融和投资行业中得到实践应用,而要使用这类技术不可避免地都要先具备编程能力,就像学习代数要先掌握加减乘除。 我本人是量化交易员出身,早年刚开始工作的时候主要使用一些商业量化软件平台。尽管能基本满足工作需求,但也时常苦恼于某个想要研究的复杂策略无法回测,或者某个想要使用的执行算法无法实现。好在后来接触到了Python这一功能强大又易学易用的编程语言,在工作中也慢慢摸索掌握了交易API对接、UI界面开发、事件驱动算法等和量化交易相关的Python应用技术。后来秉承Python社区“鼓励分享,回馈社区”的开源精神,逐渐把自己积累的项目代码开源分享出来(主要在Github)上,也就是现在的vn.py项目。 尽管量化交易在中国已经有了快10年的历史,但目前整个金融市场对量化交易方面的需求依旧在飞速增长: 期权期货的做市商业务、银行间市场开放API接口、股票引入单次T+0制度等,都是目前全新的量化交易技术应用领域。 对于想要开始入门尝试学习Python量化交易的读者来说,学习本书是一个非常好的起点。从Python的语言基础开始,一步步掌握量化相关模块的使用方法,再到PyQt的图形界面开发,最后详细讲解vn.py的项目架构和使用方法。 最后,对于所有围绕编程语言的学习,我有一个建议,就是不要偷懒,把所有代码都手敲一遍(不要复制、粘贴),自己运行一遍,能够帮助您更快地掌握编程语言的知识体系。 陈晓优(vn.py作者,网名: 用Python的交易员)2020年12月Python是一门简单易学且功能强大的编程语言。它拥有高效的数据结构,能够用简单而高效的方式进行面向对象编程。Python优雅的语法和动态类型,再结合它的解释性,使其在大多数平台的许多领域成为编写脚本或开发应用程序的理想语言。使用Python很容易实现常用的金融算法和数学计算,使其在大数据的挖掘和处理、量化金融以及财务数据分析等领域有着得天独厚的优势。 Python广受欢迎的一个重要原因是它的易学性,但再易学的编程语言也要方法适当才能达到事半功倍的效果。学习曲线是一条表示“在一定时间内获得技能或知识”的曲线,又称练习曲线(practice curves),反映了学习进程中努力与学习效果的关系。按照不同的学习方法,会得到不同的学习曲线。学习曲线可能很复杂,可能多种多样,抽象后最有代表性的有3种,如图1中的曲线(a)、(b)和(c)所示。 图1学习曲线 学习曲线(a)是所谓的“一步一个脚印”,很多人认为学习就应该是这样,其实不然。很多情况下,学习曲线是偏(b)或偏(c)的形式。(b)表示初期见效慢,而一旦过了瓶颈期,就会厚积薄发,努力终究会有回报。(c)表示初期见效快,快速掌握编程技巧,并尽快用它解决实际问题,后期的学习可以边实践边进行。(b)和(c)只是方法不同,可以根据学习目标选择。按照本书的内容学习,可以达到曲线(c)的学习效果。顺便说一下,这3个图都是用Python的matplotlib包绘制的。 如果您是计算机专业人士,已经有多种编程语言的学习经历,您会发现本书非常符合学习习惯。如果您还是计算机专业的在校学生,本书在帮助您快速打下Python编程基础之后,用一个大型项目,让您直接升级为编程高手,在有限的课时中达到最大的学习效果。 如果您是非专业软件开发人员,学习编程是为了辅助本领域的研究工作,不需要达到顶级专业软件开发人员的水平。本书可以帮助您用最短的时间,取得最接近于顶级的效果。您不再需要学习软件开发的专业课程,甚至连Python本身都不需要全部学习,只需要学习与自己任务相关的部分,就可以完成绝大多数编程任务,如曲线(c)所示,期望用专业软件开发人员1/5甚至1/10的时间,达到60%到80%的效果。如果您是经济领域的专业人士,本书涉及的数据分析方面的知识,已经足够您应付工作中主要的数据分析工作,还能让您的程序带有漂亮的界面。如果您是金融领域的专业人士,或者您只是量化交易爱好者,使用本书,在学习Python编程的同时,还能接触到先进的量化交易技术。如果您还是经济或金融专业的学生,掌握本书内容对您今后就业会有极大帮助。 足球队的教练通常都有球员经历而不是仅仅当过足球评论员。本书作者在多种平台,使用多种编程语言,有长期从事编程工作的经验,愿意将此书作为团队知识的凝练与升华。 本书选用vn.py作为教学实践平台。vn.py是著名国产开源软件,在金融量化投资领域占据重要地位,大量从事金融和经济领域专业应用开发的读者,对此系统会感到亲切并有直接帮助。按照vn.py官网的介绍: “vn.py是一套基于Python的开源量化交易系统开发框架,全功能量化交易平台,整合了多种交易接口,并针对具体策略算法和功能开发提供了简洁易用的API,用于快速构建交易员所需的量化交易应用。”vn.py的编程水平很高,软件规模也是专业级的。作者对其进行深入分析,并有多方面优化的经验。本书不希望用一个专业程序员看起来很不像样的示例系统作为“大型项目”,vn.py符合专业化、高水平的要求。 本书内容一脉相承。第一部分以最浅显的方法介绍Python语言基础,即使是没有任何编程基础的读者都可以轻松掌握,本书完全可以作为Python编程的入门书籍使用。但本书的目的决不仅仅是入门,从第二部分开始是Python编程进阶,带领读者循序渐进地进入Python的专业编程实践。第三部分介绍PyQt界面开发,第四部分介绍vn.py量化交易平台,第四部分与前三部分是有机结合而不是割裂的。例如Python的数据分析和可视化工具有很多种,本书选择的NumPy、Pandas、matplotlib和PyQtGraph本身就是其中最常用的,也都在vn.py中确实得到了应用。虽然本书第四部分只是vn.py代码分析的基础,但vn.py编程涉及的所有技术,在前三部分都有介绍。从另一方面来说,有些读者,特别是编程的初学者,在学习新知识时,往往会困惑所学的知识是否有用。通过第四部分的验证,读者可以看到,本书的每个知识点,在实际编程中都是非常有用的。从编程初学者到专业程序员是一个成长的过程,第四部分的另一个作用是总结教学代码与实际系统的差别,培养真正程序员的编程习惯,而不是让读者自行摸索,帮助读者顺利完成这个成长与蜕变。 本书包含了大量真正的编程技巧,有vn.py这样的大型专业量化交易系统做支撑,Python量化交易的登堂入室,有此一本书足矣。但一本书毕竟篇幅有限,只能选择最通用的技术。为了兑现“有此一本书足矣”的承诺,把一些很通用、很重要的内容放到附配资源中,让读者花一本比较薄的书的钱,买到一本非常“厚”的书。本书的附配资源包含以下内容: ●附加的教学内容,会随着本书的使用以及技术的发展不断扩充和更新。 ●本书的所有源代码。 ●教学课件和部分习题的参考答案。 ●vn.py代码更全面、深入的分析,vn.py行情接口的扩充,vn.py行情显示的扩充等,内容超过300页。 ●版本与本书内容相匹配,包含了部分注释的vn.py源代码。 全部附配资源可以与清华大学出版社联系获取,仅与学习有关的资源也可以加入QQ群881645236下载。 在编写过程中,南京邮电大学的李玲娟教授、陈志教授仔细阅读了本书,提出了不少建设性的意见与建议;南京审计大学金审学院的刘力军等老师对本书的编写提出过很好的建议;感谢南京毕鹞信息科技有限公司的高屹老师跟我们一起深入分析vn.py量化交易平台的代码;感谢南京审计大学金审学院和南京邮电大学计算机学院对本书的大力支持! 张少娴2020年12月于南京