查看: 892|回复: 0

高频交易系统开发的实施阶段

[复制链接]

46

主题

47

帖子

168

积分

注册会员

Rank: 2

积分
168
发表于 2014-4-23 21:35:59 | 显示全部楼层 |阅读模式
高频交易系统的开发大致可以分为三个阶段:研究阶段,模型阶段和实施阶段。每一个阶段都有自己的内部过程和子系统。一旦建立的交易策略和风险模型进入实施阶段,之前的设计文档细节就是这一阶段的基础。
  

  实施编程
  
  实施系统的编程应该遵循软件工程的标准。一些公司可能会依赖软件工程师的个人能力而不采用系统设计的方法进行系统编程,虽然出类拔萃的程序员确实可以胜任,但软件开发领域里的个人英雄主义往往是失败的开端。遵守软件开发流程是为了做出低故障高可靠性的系统。
  交易系统最重要的特点是它必须具有高质量,决不允许出bug,一个微小的错误可能导致巨额资本损失。一些互联网创业企业采用的“先编先用之后再改”这样的编程方法并不适用于交易商,交易商需要找出一套适合自己的编程流程,用软件工程行业的高标准来要求自己,从而形成高质量的代码。常用的流程有测试驱动开发(TDD)和结对编程(Pair Programming)。
  测试驱动开发是一种软件开发技术,基于事先写好的测试实例来定义新功能和新改进,不断地进行迭代式的开发。每一次迭代都会产生通过该次迭代的代码,最终程序员调整代码来应对各种变化。测试驱动开发的思想就是在各种变化反馈之前事先做好测试。
  结对编程是指两个程序员在一个工作站一起编程。一个程序员负责写程序,另一个程序员负责检查每一行代码。每过一段时间(大约30分钟)两人交换一下位置。负责检查的人同时也要思考开发的方向和改进的思路。这种方法可以让负责编写程序的人员完全专注于代码,而同时让负责检查的人员能安全地进行把关。
  粗看之下,无论是测试驱动开发还是结对编程似乎都很耗成本和时间。但事实上这么做却提高了纪律性以及时间管理的效率和代码质量。同样,并没有一套标准的过程来进行系统实施编程,交易商需要自己设计适合自己需的流程。
  在实施阶段,金融工程师负责用实际系统的代码来进行历史回测和优化,以检验系统是否严格执行了模型的交易策略。
  实时高频交易的竞争优势是速度。与建模阶段要求快速迭代来检验数学模型不同,实际系统要求实时交易的可靠性和速度。因此编程的工具一般是C++和C#这些能在运行时快速执行的语言。
  
  系统实施阶段的质量管理
  
  实施阶段的质量管理涉及三个过程。首先是保证软件代码的质量。在这一过程中程序员会做一些情景测试并检验交易是否自动执行。其次是回测和优化,这一阶段的回测和优化并不是用来验证交易思路和数学模型的合理性,而是检查模型阶段的成果是否被正确地执行。对于相同的历史数据,模型系统和实际系统理论上应该返回同样的结果,但在一些特定的情况下,又会有差异。这种差异应该被控制在可以接受的范围内,并且需要找出造成差异的原因。最后,在整个系统付诸交易之前,应该实时测试一段时间,主要包括:
  1.实时模拟交易。基于实时行情产生信号,用模拟帐户进行交易,可以有效地发现在市场极端情况下系统可能出现的问题。
  2.实盘检验。采用较小的资金量进行交易,可以发现实时交易中存在的问题,尤其能帮助解决下单撤单等操作中的错误。
  在评估了模拟交易和实盘检验的表现之后,决定是否采用该系统。对高频交易系统来说,最好先进行模拟交易和小资金量的实盘测试,而对低频交易系统来说,可能短时间内没法通过模拟交易收集足够多的样本,可以直接进行小资金量的实盘检验。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表