一整套高频交易系统的开发必须连接许多学科领域的知识,它包括系统设计和软件工程以及量化金融等。比如在量化金融方面,大家对如何建立数学交易模型已经作出深入的研究。甚至如何设计系统把这些模型实施出来也很重要。在现在的交易圈之内,连续不断地去发现并建立更好的交易系统才是保持竞争优势的核心要求。所以,把交易理念转化为数学模型并进一步变成一套行之有效,并兼顾运行速度和质量的交易系统对市场参与者来说是相当关键的。
高频交易系统的开发大概可分成三个阶段:研究阶段、模型阶段以及实现阶段。每一个阶段均有自己的内部过程与子系统。然而,整个系统的开发并不一定必须完全按照这个流水线过程,一旦在某个阶段有问题出现时候,能够追索到前一个。尽管在每一个系统设计项目中运用什么方法和选择什么工具必须依据具体问题、工程师的水平、研发的时间限制和预算限制来确定。但是我们选择的设计方法至少必须提供一个框架和一系列原则用以兼容金融工程师和程序员的能力。一个缺乏设计原则的系统通常会失败。
1.设计原则
由深厚的研究所产生的投资想法是建立任何交易系统的基础。在讨论研究方法之前,我们必须先深入了解一些用于设计高频交易系统的基本原则。
(1)交易获利理念是交易系统的根本。假如其中出现逻辑错误,那么我们就是在冒很大的风险。
(2)必须理解直觉交易系统与非直觉交易系统的区别。高频交易系统的设计则倾向于自动的非直觉交易系统,它可以被显性的交易规则以及参数所精确量化。
(3)不要对市场作出任何判断。对于大多数高频交易系统而言,利润只有来自于对市场迅速的反应并不是对市场将来走势的预测。
(4)必须了解交易理念中的缺陷,并且在研究阶段还要考虑风险控制。在产生投资想法当初就开始建立风险管理模型。
(5)必须严守纪律。纪律是成功的关键,一套自动交易系统将让你严守纪律并远离贪婪和恐惧。
(6)必须经常运用历史数据追索你的模型,并每天都要进行复盘,但是还要避免过度拟合。
2.设计方法
系统设计的第一步则是从研究中产生交易想法。有许多种方法可以用来进行研究,包括改进现有交易模型、市场调研、学术文献阅读甚至逆向工程(通过对已有的系统的结构、功能、运作加以分析、分解和研究之后,开发出功能相似,然而又不完全一样的系统过程)特别注意的是,历史回渊以及参数优化永远不能开发出新的交易系统,只有依靠在历史回测中尝试不同的交易规则和参数组合仅仅能让你的策略对历史数据产生过度拟合,最后造成实盘交易的失败。
研究阶段的成果就是一系列描述交易思想各个方面细节的设计文档,这些文档则当作指导下一阶段构建系统模型的蓝图。
具体文档包括这些方面:
(1)交易策略和盈利理念的具体描述。
(2)交易的目标市场和交易的品种。
(3)对于交易品种波动性和流动性的要求。
(4)过滤入场和出场信号的算法。
(5)执行交易的算法。
(6)数据要求。
(7)算法优化周期。
(8)交易系统的交易频率。
(9)风险管理的逻辑。
(10)绩效指标。
(11)备选系统设计方案。
(12)系统的缺陷。
(13)未来改进的思路。
当上述的文档全部成形以后,需要开发团队聚在一起对细节进行讨论。金融工程师可能会展示各自的设计方案,相互帮助验证方案的有效性,并为交易策略进行把关,从而做好进入下一个阶段的准备。
3.实施程序
高频交易的全部流程主要由三个部分构成:
(1)依据市场情况,建立数理金融的模型来预测短期价格的波动。
第一,必须先将历史数据加以有效分割。
由于每两个相邻的价格之间时间差是不相同的,必须依据kernelscurve等技术,剔除极值和润滑曲线,将价格与时间的坐标图连接成一条平滑的曲线。此后依据自己的频数时间,对相对应的价格加以相应提取。
第二,依据回归分析,将后一个频数的价格与前一频数的价格建立公式,获取相应的参数。在现实模型中,对于价格的预测模型比较复杂,而思路都是相同的,则是依据前一频数的价格获排后一频数的价格。
第三,将参数应用于未来价格的模拟。当价格符合执行命令的条件时,迅速下单。
这是一个非常复杂的过程,对数学知识要求非常高。每个公司对于具体的模型分析,又具有不同的计算模型,而且不少高频交易公司都对新的金融和数学理论进行大量的研究,从而开发出新的金融模型。
(2)利用先进的计算机系统,支持复杂的数理经济模型。
常用的软件是MATLAR, C++、C#以及R来实现金融模创的建立。模型的数学计算,常用MATLAB以及R工具,至于应用程序的开发,多运用C++以及C#等编程工具。运用这些软件开发的金融模型,必须对大量的历史数据加以验证,才可以应用到真正的金融市场中去。
(3)把模型运用于实践,而且还要进行成本的管理和风险控制。
高频交易模型涉及许多对于价格的模拟预测、季节方差的计算以及期权的价格计算等复杂的数学和统计过程。对此只是简要概括,其中数学模型和金融理论的有效结合是成功的高频交易有效方法。
至于风险的控制则是模型能成功运用于市场的一个很关键步骤。第一,首先必须确认风险,把金融市场的风险分为信用风险、流动性风险、市场风险、运行风险以及法律风险。把市场风险之外的风险归类为商业风险。第二,必须对风险加以评估。至于不同类型的风险应用不同的评估模型。第三,制定出能预防风险产生的有效手段,以及对不可控风险产生时的应对措施。