在建立交易模型前,抽象化的交易想法很有可能会在数学上存在一些逻辑错误和缺陷。模型阶段则是要验证交易想法、寻找逻辑错误以及评估备选方案,来帮助别人理解交易想法背后的数学机制。模型阶段就是解决开发过程前期的不确定性,来考察数学模型的可行性以及在不同市况下盈利是否稳定。同样,还必须预估一下实施阶段的工作量。模型阶段从数据准备、分类开始,通过模型编程,到最终测试和优化。
模型阶段按照设计文档中的交易思路、数学计算以及数据要求等。该阶段迫使研发团队对数学模型作出清晰的定义,并且解决相关问题(比如数据处理),此外,该阶段还要定义将来软件实施的各种要求。
1.收集数据
对历史数据进行清理就是进行成功历史回测和优化,从本回测本身或许会由于数据上已知和未知的错误而出现问题。得到高质量的历史数据并不仅仅是花钱买下来之后装入系统那么简单。对于交易商而言。一且他们决定对哪种资产进行交易,首先就是考察它的数据是否能够被获得。然后他们则决定需要什么类型的数据,从哪里得到,如何对数据进行清理才能让数据适应系统。
历史数据主要来自如下:
(1)从数据提供商购买数据。买入数据的时候,必须确定数据的类型(1分钟级别的还是Tick级别的等);还必须考虑数据提供商的专业经验和以往客户的口碑;另外,不管提供商说什么,应该是由自己来判断数据的质量,假如自己的系统上已经有些已知的高质量数据,不妨进行测试一下,看购买的数据结果怎么样。
(2)从网上下载一些免费的数据。此方法不值得推荐。由于你无法把握数据的质量。不可靠的数据可能造成模型计算错误,从而导致亏损的交易。因此相对而言。运用费用昂贵的数据反而更划算。然而即便是高质量的数据也会有问题,绝不能跳过数据清理这个环节。
(3)用程序来记录市场行情,并且把它清理和转化成想要的格式。经纪商一般会提供应用程序接口(API)来产生实时交易行情。一些商业程序化交易平台有行情写库功能,并且可以回放储存的数据来测试系统。此方法要求金融工程师具有熟练的编程技巧和数据库管理能力。
2.数据类型
数据可以分为如下类型:
(1)价格数据一般是由买入价、卖出价以及成交量等数据所组成。
(2)经济数据往往是短期市场走势的重要因素之一,尤其是在汇率市场高预交易系统对短期的市场走势敏感,因此经济数据对于系统而言非常重要。对于外汇交易而言,比较重要的经济数据是非农就业指数、利率、CPI ,零售业销售额、贸易顺逆差以及制造业PMI等。
(3)日历数据则包括公布重要经济数据的日期以及时间。一些量化交易系统纯粹建立在价格数据的基础上。然而即便是这些系统也要对日历数据多加小心。
(4)估值数据与价格数据不一样。对于场内交易的衍生品而言,是没有历史价格数据。价格仅仅存在于理论模型中,因此是估值数据。
(5)基本面数据则是商业上的关键数据。比如销售额、收益、库存和租金等。
3.数据分离
假如运用全部数据来开发交易模型,那么很可能会产生过度拟合的问题。为了解决该问题,我们应该引入数据分离过程,把全部历史数据分成开发数据、验证数据以及测试数据。
(1)开发数据(又称为样本内数据)通常包含数据最多。直接用以开发模型。数据量则取决于系统的周期。通常的原则是,这段数据必须产生30-50个交易样本,而且涵盖了市场行情向上、向下以及震荡这几种情况。一旦确定了参数以及交易策略以后,就按照开发数据来进行优化。
(2)验证数据就是用以评估和比较不同模型绩效的。假如在开发数据上表现很好的模型到了验证数据时突然失败了,这表明有过度拟合的问题,必须运用验证数据来改进模型。
(3)测试数据(又称为样本外数据)是用以再次验证模型,而且保证一切细节都正常。模型在这些数据上不再作出任何改动。
4.建模软件编程
对开发人员而言,MATLAB、SAS以及S-PLUS均是模型编程的理想工具。许多金融工程师运用Excel,然而处理海尼高频数据的时候却力不从心。假如你的模型要求很高的计算性能,则你要么升级硬件,要么自主研发一套系统来对模型进行支持。自主研发通常运用C++或者C#来开发具体的软件工具,用来高速处理文件和计算。
通常来说,模型编程必须与实施阶段的程序完全分离,并且由两组人来实施。第一组人是山交易员、分析师以及金融工程师组成,在金融建模功能工具(比如MATLAB以及SAS)上建立模型;第二组人是由软件工程师所组成的。他们并不是对模型本身发表意见,而是负责依据模型要求用C++以C#语育把模型付诸实施。在此过程中,要求建模阶段要快速,金融工程师应尽可能快地把各种要求、设计方案以及实施方案整理出来。这种分工的原因是金融工程师在量化领域很可能有很大的优势,然而不一定有足够的编程能力来撰写只有高稳定性和可靠性的,用以实时交易的代码。相反地,经验丰富的程序员也不一定有足够的投资知识来产生交易策略。很多交易商喜欢雇佣没有任何金融背景的纯程序员,以至于他们不会随便地在实施过程中改变交易策略。
另外一种建模编程的方式称为“进化型建模”,建模团队选择系统中的一部分加以建模,接着在这个基础上扩展形成整个系统。这样建模阶段的代码就不要舍弃。反之,这些代码就会“进化”成为实施应用程序,用来实时交易。也就是说,实施系统就是一系列模型进化之后的放终产物。该建模编程必须在一开始就做出高质量的代码。此过程要求团队有很强的管理能力,则适合于一些经验丰富有高度组织性的团队。进化型建模必须专注于系统中风险最高和难度最大的部分,明确项目中的很大障碍有利于评估项目的可行性。此做法往往适合那些在金融领域和软件开发领域都有不错基础的小团队。对大型团队而言,则适合运用一种按部就班的项目开发流程。团队一上来先构建一个简单的模型,接着由简到繁不断增加和集成其他的系统。比如MATLAB这样的建模语言可以把代码转换成c++或c#的形式,能够重复运用模型代码,从而实现进化型建模。
5.回测和优化
回测主要起到这些作用:第一,测试交易策略能否达到设计文档中的要求;第二,根据清理过的历史数据,在考虑交易成本以及滑点的情况之下,对策略加以模拟仿真,并且统计分析输入与输出的结果。一个交易策略唯有在结果达到标准的情况下才能被接受。否则的话就会重新回到研究阶段加以重做,或是直接舍弃。
优化就是经由改变交易策略参数达到最优结果的过程。设计人员应该发现并剔除那些在任何情况下都达不到标准的参数以及交易规则。
交易模型优化可以分为如下方面:
(1)交易模型的参数优化。它就是一种围绕原定的参数为中心的微调,并且大范围的跳跃式地进行搜索。
(2)交易模型的交易规则调整。它指的是增减交易模型的交易规则以及增减的变量,从而来改善交易模型的成绩而不是重新设计新的交易模型。
回测与优化能够在两个阶段之内完成,那就是建模阶段以及实施阶段。建模阶段的回测与优化是为了确立交易系统的设计方案。研发项目在建模阶段之后决定能否继续。实施阶段的回测与优化就是为了验证模型实施的有效性和质量。
6.实战检验
在通过回测与优化之后,交易模型就会进入实战检验阶段。交易模型能否通过实战检验,实战检验就是交易模型检验过程中极其重要的一个环节,实践则是检验真理的唯一标准,许多模拟交易比赛的优胜者为何会在实际交易中一塌糊涂?许多历史检验非常完美的交易模型投入实战为何总不能让人得心应手?
(1)当交易产生巨大利润时。因为期货基金的管理者担心利润流失以及顾虑投资者的压力,就会产生心理动摇、不等待交易模型发出退出信号,这样主观判断退场,从而就不能体现交易模型的前后一致性以及客观性,让交易结果出现不稳定性和不可比性。
(2)当交易出现持续的亏损时。依据浑浊理论,交易模型的噪声(假信号)分布有若随机性和集中性,因此当交易模型出现持续不断的噪声(假信号)时,就会对交易模型的应用者形成较大的心理压力,从而对交易模型产生怀疑,甚至出现了放弃的思想。此时必须检查交易记录以交易模型的设计理念,看是否因不严格执行交易模型发出的信号而导致失误,或者因交易模型的缺陷导致的失误,之后有的放矢地解决问题。
当交易模型进入实战检验阶段的时候,除了对交易模型进行检验外,还要对交易模型应用者的心理和性格进行检验。交易模型应用者对付心理压力的能力(包括应对市场的压力以及来自投资者的压力)以及是否有与交易模到相适应的性格才是交易模型成功的最重要的因素。
7.跟踪分析和调整
当交易模型进入实战应用阶段的时候,必须对交易模型的不同情况加以跟踪分析和调整,并且为交易模型应用者以及投资者提供统计资料。对交易模型的调整就是在很多的交易资料分析基础之上进行的,调整仅仅是阶段性的调整。不可以随机进行调整,由于只有在积累了具有统计意义的足够数量的交易数据样本之后,才可以作出相应的调整。此外,在金融市场形成市大变化、新品种上市之初以及市场的交易规则发生变化的时候,也必须要对交易模型作出相应的调整。随着交易技术分析理论的持续进步发展,金融市场也持续发展成熟,交易模型也在持续完善,期货基金的交易模型也会得到不断发展。
8.评估
对于交易模型的收益以及风险评估来说,大多数交易者通常只关心净利润和回报率,然而忽视了交易模型的风险测最评估,实质上这正是交易模型最重要的部分。
交易模型的评估项目则包括:净利润、盈亏次数比率、回报率、总交易次数、标准离差/标准离差率、回报回调率以及风险指标d七个方面。
(1)标准离差/标准离差率。期货基金交易模型经常运用的收益和风险评估是标准离差/标准离差率,由于标准离差/标准离差率越小,则表明交易模型的收益分布概率越集中,期货基金交易模型实际收益越接近理论收益,风险越低。评估可以分为如下儿步:
①计算交易模型的收益期望值。
E=∑Xi×Pi,E是收益期望位,Xi是第i笔交易的收益,Pi是第i种结果收益的概率。
②计算交易模型的收益标准离差。
δ=∑(Xi-E)2×Pi
③标准离差率。
V=δ÷E
④权衡交易模型优劣。
选择收益高并且标准离差率小的交易模型。
(2)风险指标d。在应用标准离差率对期货基金交易模型收益以及风险评估的前提下是交易模型的分布必须符合正态分布,也就是说收益分布是对称的,对于不符合正态分布的交易模型的收益以及风险评估就没有任何意义了。通常出现收益为负的交易模型的标准离差率小于收益为正的交易模型,所以我们为此引入了风险指标d。
d=|∑n÷∑c|,∑n是交易模型收益小于。的次数和收益的乘积,∑c是交易模型收益大于0的次数和收益的乘积。
引入风险指标d的益处就是不用对交易模型的收益分布作出任何似设,就能够对交易模型的收益加以比较。