Local EPUB Text
必要的工具
在进行实盘交易之前,我们要对所使用的策略进行建模和测试,因此我们需要大量的历史数据、测试用的电脑程序,甚至可能要自己建立一个独立的数据库。如果有人以前不会编程,我强烈建议现在就挑选一门有用的编程语言,并马上开始学习。
关于编程的一点建议
量化交易员至少需要对编程的方法有最基本的了解,否则根本就没法在这个行业干下去。千万不要害怕自己过去没有任何的编程经验,也用不着担心这方面并非所长,既然你们正在阅读这本书,那么我就完全有理由相信你们在某种程度上已经下定决心从事这个行业,或者在这个行业中进一步提升自己,而懂得一定的编程知识正是达到目标的关键一环,所以这个问题是我们现在不得不面对的。哪怕我们手下有一支全部由科技怪才所组成的团队,可以为任何需求量身打造解决方案,但如果我们自身无法理解其中的重要细节,还是可能会让自己处于一个很不利的地位,特别是在想要对程序进行独创性改造的时候。这就像我们不可能因为可以雇到文秘就完全放弃打字的能力一样。现成的交易程序和简化的脚本语言是为散户准备的,而我们的目标是成为金融大鳄中的一员,所以从现在开始静下心来,先买一本学习编程的书,然后尝试写一些程序代码吧!
开发环境
接下来的事情就是选定一种适合开发交易策略的底层平台。在对市面上的软件包进行筛选的时候需要格外小心,我们应确定所选中的平台是否真正能满足工作的需要。大多数的大牌软件商为画图和交易系统开发所提供的软件包远不如他们在宣传材料里描述的那么好,在实际使用中我们可能会发现这些软件过于简单或受限较多。其实,这些软件包大多本来就是主要面向散户市场的,虽然有些专业人士也会用到它们,但这并不是其设计的主要目标。当我们开始构造更复杂一些的策略时,可能很快就会有相同的体会。
但市面上还是有一些相当不错的软件开发环境——在我眼中的“不错”,是指能够被用于定制化的开发。许多作图软件的问题在于它们的主要功能就只是作图,无法胜任严格的策略开发工作。这些软件的用途非常单一且使用的方向比较受限,如果我们想将它们拓展到软件开发商最初设计的用途之外,很快就会发现自己陷入了无处使力的困境。还有很多软件使用的是自主研发的脚本语言,而脚本语言的局限性非常大,我们在使用的时候会被牢牢地限制在各种条条框框之中。一个好的开发环境理论上应该允许使用者能够实现任何目标,其中自然包括很多环境开发商自己都无法想象出的用途;应该能够处理海量的数据和运算内存占用很高的投资组合策略,最好还能够使用标准化的计算机编程语言,并且允许接入诸如DLL动态链接库等形式的外挂。如果一个开发环境的开放程度足够高,任何其自带功能无法实现的部分将允许让我们自己用其他办法弥补。而为了快速地处理这些模拟环境中的海量数据,普通的32位系统肯定是不够用的。为了能够完全发挥运算服务器的强大功能(希望你们能有这种高规格的配置),最好确保操作系统和开发软件包都是x64的系统。
我最喜欢用的两个软件分别是WealthLab.Net和RightEdge,两者都是基于微软的通用语言运行平台(common language runtime,CLR),并且其主要的策略开发语言都是C#。它们的开放性都非常好,并且都能够在Visual Studio下定制生成DLL动态链接库,以实现性能的提升。WealthLab绝对比RightEdge更容易学习和使用,但后者具有更好的灵活性,并更适于用在比较复杂的策略建模上。当然如果已经能熟练运用MatLab,那么MatLab也是不错的选择。另外,请各位读者注意本书的成书时间是2012年,如果你们不知道在多少年之后见到了本书,我可不能保证未来的软件和编程语言会发展成到什么程度!
如果你们对编程语言没有特别的偏好,我还是推荐大家学习C#语言,并且从现在就开始在WeathLab上尝试建模。C#是一种非常有用的编程语言,而WeathLab也很容易上手。熟练的程序员可能会用RightEdge或者MatLab,但对于大多数策略来说,任何一种编程环境可能不会产生太大的差别。
传授编程技巧可不是本书能够胜任的,而且我也极力避免在书中抄录一些程序代码。构建我将要讲解的策略并不需要很复杂的程序代码,关键是让大家理解我们到底要构建些什么东西。别误解我的意思!我们要想在这行做下去,对编程一点都不懂可不行。虽然我们肯定进不了世界顶尖程序员之列,但想仅凭“粘贴复制”大法或简化的脚本语言应用混日子,也许真的要好好考虑要不要换份更容易些的工作!
数据链接插件是开发程序和数据库之间的纽带,所以一旦选定了开发环境,就应该尽快着手构建链接用的插件程序。由于每个人所采用的数据存储格式和数据提供商会有所差异,所以为了能让开发程序直接从数据库中提取数据,可能需要我们构建专门的插件程序。不要担心,这项工作其实非常简单,而且幸运的话,我们很可能会在互联网上找到现成的程序。
数据提供商
如果只是在某些特定市场中(如美国股市)使用股票的策略,我们很容易就能在网上找到很多免费的数据资料,而且这些数据的质量也很好。但对于期货数据就有些复杂了,拿到单个期货合约的时间序列数据(如大豆期货2005年12月合约的所有交易数据)并不难,但我们还需要对原始数据进行处理并保存下来。这项工作才是费时费力的,而且非常容易出错。值得庆幸的是,当前有一些不错的数据提供商可以提供已经处理过的日线数据,而且价格也不贵,比如CSI Data等。我们还可以从一些普通的行情提供商那里获得优质的数据包,就像彭博(Bloomberg)等,不过在不同的行情提供商那里,购买数据的价格差异非常大。
我们需要考察潜在的数据提供商,以保证他们提供的数据能够覆盖我们关注的全部市场。另外,他们应该能够自动将数据调整成我们需要的格式,如果这些都能做到的话,最好还能最大限度地允许我们制定自己的规则,以方便我们用多种不同的方法进行模型测试。数据的格式应当遵照适用于我们选定的模拟软件所指定的规格,并且能每天自动发送给我们。此外,如果能提供元数据(metadata)的信息那就更好了,我们可能还会用到如点价、货币种类、板块、交易时间、保证金要求等其他信息。
虽然本书提到过一些公司和产品的名称,但是我要特别声明,我既未曾从他们那里得到过任何的酬劳,又没有享受过任何的价格折扣或其他形式的好处,而且如果市面上出现了更好的产品,我也非常乐意更换现有的工具。
数据的存储
针对数据的存储,我们主要有两种选择:一是完全依赖所选定的数据提供商,让策略建模软件和工具从它们那里直接读取数据;二是自建本地的数据库。如果让软件直接从数据源读取数据,可能会存在一些不便之处,比如我们正在模拟运行的时候,数据服务器却无法正常地工作。有的数据提供商会在周末的时候进行系统维护,这也会造成我们在那段时间里无法获得数据,而另外还有一些数据提供商每天定时会自动发送文本格式的数据文件,这样虽然可以避免前面所述的风险,但让用户不得不依赖于数据提供商自身制定的数据格式及技术标准。虽然在这个问题上每个人的偏好各有不同,但我还是喜欢将真正的数据解决方案放在本地,这样就可以避免让整个业务过程中最关键的环节受制于任何一个特定的数据提供商,而且这也有利于随时更换数据提供商或综合来自多个数据提供商的数据,从而在整体上为交易数据的获取提供了更好的自由度和可控性。自己建立一个MySQL或类似的数据库并且让策略建模软件直接读取数据的工作相当容易,而且代价也不高。