基于预测模型的交易系统

作者:David Aronson

编译:郑娜

客观化系统化的交易金融工具相比主观方法有许多的优势:

(1)由于各种认知偏差和情绪因素,智能化设计的自动交易系统可以并经常超越主观交易的绩效。

(2)一个有效的数据挖掘程序可以发现市场行为中大多数人看不到的细微模式。

(3)自动化交易系统绝对是可重复的,而主观的交易系统受制于一时的兴致。交易决策的一致性对于长期盈利能力至关重要。重复性也很有价值,因为它可以审查交易,并通过信号过滤来提供性能。

(4)最适当设计的自动交易系统经得起严格的统计分析的考验,可以评估性能指标,如预期收益率,以及系统绩效中运气成分的占比。

(5)无人值守的操纵是可能的。

自动交易系统通常用于一个或两个应用项目。交易系统合成与提升(Trading System Synthesis and Boosting,TSSB)是一个先进的程序,能够生成两个应用:(1)一个完整独立的交易系统,能进行所有的交易决策;(2)一个能够通过筛选交易信号,提高已有交易系统性能的模型。我们称此为“Boosting”(Boosting是一种提高任意给定学习算法准确度的方法)。这是常有的事,通过智能化筛选现有交易系统的信号,同时忽略掉其他的,我们可以改善收益风险比。

两种自动化交易的方法

无论投资者的目的是开发一个独立的交易系统或是一个提高现有交易系统性能的过滤系统,有两种常见的开发和实现方法:(1)基于规则的方法(If/Then规则);(2)预测模型。

基于规则的交易系统需要投资者指定进行交易决策的规则,虽然这些规则中的一个或多个参数可以利用开发软件进行优化得到。下面是一个简单的基于算法的交易系统的例子:如果短期价格移动平均穿越长期价格移动平均,那么在下一根K线持入多头头寸。

随着高性能计算机的普及,一个替代的交易系统开发方法已经变得可行。预测建模通过利用采用复杂数学算法的软件,检验来自历史数据的指标,如价格、成交量、持仓量,以发现具有预测能力的重复模式。预测模型本质上是一个数学或逻辑公式,建立这些模式与目标变量或因变量之间的关系。这是TSSB所使用的方法,相对基于规则的方法,它具有以下几个优点:

(1)智能建模软件利用机器学习可以发现非常复杂的模式或是隐藏在噪声之下人们难以发现的模式。

(2)一旦一个基于预测模型的交易系统开发完成,它通常可以很容易的调整其操作,改变收益风险比以适应更广的范围。它可以在高交易频率低胜算和低胜算高交易频率之间取得平衡。这可以通过阀值控制模型预测转化为离散的买卖信号。

(3)设计良好的软件允许开发人员调整交易系统开发的自动化程度。有经验的开发者可以对整个过程进行良好的控制,把他们的知识转换为系统某些所需的属性;而缺乏经验的开发人员可以利用软件,完全自动化的来实现整个过程。

(4)一般来说,预测模型比基于规则的系统开发方法更能经受高级统计分析的检验。检验系统统计显著性的复杂分析算法可以更容易被纳入模型生成过程。

(5)预测建模是一个发展良好的数学学科,用于从数据集中最大量的提取有用的信息。直觉有助于提出方法以将原始数据集转换出大型候选指标列表。预测建模,即使是最简单的形式,如线性回归,也比靠人类直觉选择最好的候选指标并合成预测要更优。有150多名学者研究比较人类专家的统计模型,证明了这一事实。

预测模型

用预测模型方法开发交易系统依赖于市场价格运动的基本属性:所有市场都有会重复出现的模式,因此,可以用来预测未来价格行为。例如,在一定条件下,趋势将持续直到力度耗尽。在其他情况下,不同的模式将出现,趋势后面更可能伴随着回归近期均值的走势。预测模型研究历史市场数据,试图发现特征以区分这两种模式。

预测模型的目标然后是发现足以盈利的重复出现的模式。一旦发现,模型将寻找该模式的再次发生。基于历史观察,模型将能够用于预测市场是否会快速上升、下降或盘整。这些预测可以通过阀值转化为买卖的决策。

指标变量和目标变量

预测模型通常不直接使用原始市场数据。相反,市场价格和其他序列,如交易量,通常会转换成两类变量,指标变量和目标变量。这是在模型训练、检验以及最终实盘交易的时候使用的数据。正是在这些变量的定义过程中,开发人员对交易系统发挥着他们的作用。

指标变量是严格按时间向后推移的。当进行实时交易时,对于任意给定的K线都将对指标进行计算,假设我们拥有足够的历史价格数据可以满足对指标的定义。例如,有人可能用当根K线的收盘价与回溯第5根K线的收盘价的变化百分比来定义趋势。只要我们知道这两个价格,我们就可以计算出这个趋势指标。TSSB可以计算出上百种不同类型的指标以对市场行为特征进行量化度量。

目标变量是严格按时间向前推移的。(在经典回归模型中,目标通常指的是因变量。)目标揭示出未来的市场行为。我们可以利用历史数据计算目标变量,只要我们有足够的未来数据满足对目标变量的定义。显然,虽然当我们真正交易这些系统的时候,我们并不知道这些目标,除非我们有一个非凡的水晶球。例如,我们可以定义一个称为day-return的指标,表示第三天开盘价相对第二天开盘价的变动百分比。如果我们有价格的历史记录,我们可以在每一根K线上计算出这个目标,除了最后两根K线。TSSB可以计算各种类型的目标变量。

总之,预测模型背后的基本思想是,指标可能包含可用于预测目标的信息。预测模型的任务就是寻找和利用任何此类信息。

预测模型背后的基本思想是指标可能包含可以用来预测前瞻性变量(称为目标变量)的信息。预测模型的任务是寻找和利用任何此类信息。

日期 趋势性 波动率 日回报率

20130214 0.251 1.572 0.144

20130215 0.101 1.778 0.055

20130216 -0.167 2.004 -0.013

假设我们使用几年的数据建立模型,并让它学习如何用前一期的两个指标,趋势性和波动率,来对日回报率进行预测。在机器学习中,这个过程对应的术语称为模型的训练。然后,我们可以利用近期价格计算出当期趋势性等于0.225,波动率等于1.244。基于这些数据,训练的模型能预测出目标变量日回报率为0.152。(这些都是虚构的数字。)基于对市场很有可能出现大幅上涨的预测,我们可以选择建立多头仓位。

将预测结果转化为交易决策

直觉告诉我们,我们应该将更多的注意力放在极端预测值之上,而非围绕模型预测范围内的常规值。如果模型预测市场明天将上涨0.001%,我们不会像模型预测上涨5.8%那样建立多头仓位。这种直觉是正确的,因为我们的研究表明,一般来说,预测波动幅度与预测的成功率有高度的相关性。预测值较大相比预测值较小,更有可能预示出未来有利可图的市场波动。做出交易决策的标准方法是比较预测值与固定阀值。如果预测值大于或等于某一上限阀值(通常为正),则建立多头头寸。如果预测值小于或等于某一下限阀值(通常为负),则建立空头头寸。头寸的持仓周期隐含在对目标的定义中。很明显,阀值是在交易次数和胜率之间的权衡。如果设定的阀值接近0,预测值将频繁超过阀值,从而频繁触发交易,这类交易亏损率相对比较高。相反,如果设定的阀值很大,预测值将很少能超过阀值,这样交易次数少,胜率也就相对比较高。我们已经注意到,预测值大小和交易胜算有很大相关性。因此,通过选择一个合适的阀值,我们可以控制我们的交易系统。

交易系统合成与提升(Trading System Synthesis and Boosting,TSSB)自动选择最优的多头和空头阀值,从而最大化多头系统和空头系统的盈利因子。盈利因子,作为常见的交易系统性能指标,代表盈利交易的总盈利与亏损交易的总亏损之比。为了避免交易次数过少造成的过度拟合,用户可以定义最小交易次数,可以是一个绝对值或是相对历史数据长度的一定百分比。此外,TSSB可以在多空两边分别使用两组阀值,这样就可以生成两组信号,一组交易胜算处于正常水平,另一组属于偏保守的高胜算交易。最后,在许多应用中,TSSB会给出对应不同的阀值所展现出的交易系统绩效。

用户基于描述未来价格走势的最近观察历史和目标变量指定指标变量。TSSB提供原始历史市场数据(价和量),以及生成广泛的指标数据库和目标变量。给定一组指标,一个或多个模型被训练来预测目标变量。换句话说,模型学习使用指标中包含的预测信息,以预测目标所体现的未来。

检验交易系统

TSSB为预测模型交易或过滤系统提供了很多检测功能。在这里,我们讨论两个通用的测试方法:交叉验证和外推检验。这些在预测中都是主要的检验标准。绝大多数测试方法的基本原则,是将完整的历史数据分成几个独立的子集。其中一个子集被称为训练集或开发集,用于训练预测模型。另一个子集,称为测试集或验证集,用于对训练模型进行评估。

这里的关键是,用于训练模型的数据不能用于模型评估。在相当一般的情况下,这种互斥分离保证了测试集下的性能是对未来性能表现的无偏估计。换句话说,虽然观察到的性能几乎肯定不会等于未来的性能,但是它并不存在乐观或悲观的系统偏差。获得一个对未来绩效的无偏估计是交易系统开发和测试的两个目标之一。另一个目标是对于绩效中运气成分进行统计显著性检验。

在早期的模型构建和检验中,由于计算机性能的限制,对于数据分解为训练集和测试集只是一次。这是一种非常低效率的数据使用方式。TSSB提供交叉验证和推进分析的功能。这些技术将数据多次分成训练集和测试集,并组合这些性能统计数据提供交易系统真实水平的一个无偏估计。这样有效利用了宝贵和有限的历史数据。

推进分析

推进分析是一种简单、直观且受到广泛应用的检验方法。基本原理是,我们用一段相对较长的数据对模型进行训练。然后,用紧接着训练数据的一段相对较短的数据对模型进行测试。然后我们以测试集数据的长度向前推进训练数据集和测试数据集,并不断重复之前的步骤。直到数据全部被使用,推进分析结束。我们把所有测试模块的交易打包计算性能指标。这里是一个简单的推进分析的例子:

(1)使用1990年至2010年的数据训练模型,然后用2011年的数据测试模型;

(2)使用1991年至2011年的数据训练模型,然后用2012年的数据测试模型;

(3)使用1992年至2012年的数据训练模型,然后用2013年的数据测试模型;

把2011、2012和2013年所有测试集中的交易组合起来。这些交易算出来的性能可以作为模型性能的无偏估计。

推进分析的主要优势在于,它模拟的是现实的交易场景。大多数自动交易系统开发人员会定期再训练模型或对模型进行改进。因此,推进分析得出的结果模拟了实际交易过程中实际能拿到的结果。这是支持这种测试方法的一个令人信服的论点。

推进分析的另一优点是,它正确地反映了模型对于市场非平稳特征的反应。所有市场都会随着时间的推移而发展并改变它们的行为,有时在许多不同的状态下进行转变。不严格地说,这种市场动态的变化,也就是指标与目标变量之间的关系,称为非平稳。最好的预测模型对于这种变化有显著的鲁棒性,而推进分析能帮助我们判断模型的鲁棒性。

TSSB可以使用各种长度的测试数据集,使得评估模型应对非平稳的鲁棒性变得非常容易。假设当测试数据集很短的时候,模型取得了非常优异的外推结果。换句话说,模型并没有被要求对未来很远的数据进行预测。现在假设随着测试数据增多,外推绩效随之变差。这表明,模型并不能应对市场的快速变化。这类模型是具有风险的,并且需要不断的进行再训练以跟上当前市场状况。另一方面,如果随着测试数据增多,外推性能并没有太大波动,则表明模型在应对非平稳时是健壮的。这对于使用基于预测模型的方法开发交易系统是一个有价值的属性。见图1,它描述了沿着时间轴训练集和测试集的位置。

图的顶端部分描述的是推进的测试数据集较短的情形。底端部分描述的是推进的测试数据集较长的情形。

相比其他测试方法,比如交叉验证,推进分析只有一个缺点,那就是对于可用数据的使用效率较低。只有第一个训练数据集后面的数据才被用于测试。

交叉验证

并不是像推进分析一样在历史数据集末端对测试数据进行分割,交叉验证是对整个历史数据集进行均匀分配。例如,我们可以测试如下:

(1)使用2011年至2013年的数据训练模型,然后用2010年的数据测试模型;

(2)使用2010年至2013年,除开2011年的数据训练模型,然后用2011年的数据测试模型;

(3)使用2010年至2013年,除开2012年的数据训练模型,然后用2012年的数据测试模型;

(4)使用2010年至2013年,除开2013年的数据训练模型,然后用2013年的数据测试模型;

如下图2所示,在交叉验证中,每一步通常被称为一折(fold)。

相对于推进分析,交叉验证的明显优势就是数据集的每一部分都可能成为测试集的一部分。然而,这里有几个缺点是需要注意的。最严重的潜在问题是,交叉验证对于非平稳性很敏感。在推进分析中,只有相对较近的数据被当作测试对象。但是在交叉验证中,最开始的数据集也会被用于性能测试。如果早期的市场行为与近期状态显著不同,也就是指标与目标的关系已经发生变化,那么使用早期的数据进行测试可能不是一件明智的事情。

另一个缺点是偏哲学层面的,但它是值得注意的。不同于推进分析,交叉验证并不是模拟交易系统的实际场景。在交叉验证中,除了最后一折,我们使用的是未来的数据对测试模型进行测试。另外,在交叉验证中,重叠问题也比推进分析中显得更麻烦。

考虑重叠问题

在讨论交叉验证和推进分析时,我们都是假设各个数据集之间是相互独立的。不幸的是,事实往往并非如此。时间上相近的数据集,倾向于具有类似的指标值或目标。这通常以以下一个或两个方式呈现:

(1)TSSB中许多可用的目标并非只是向前推进一期。例如,假设我们的目标是未来10期的市场趋势。这是为了做出交易决策而预测的数量。如果某一天这个值很高,表明在随后的10天里市场趋势强烈向上,那么十有八九这个值明天也会比较高,前一天也可能很高。向前或向后一天,对于10天的目标变量窗口都有9天的重叠。这种时间序列数据的相关性被称为序列相关性。

(2)在大多数交易系统,指标通常会回溯相当长一段时间。例如,一个指标可能是前50天的市场趋势,或是衡量过去100天的波动率。因此,指标随时间变化非常慢。

这些事实有几个重要的意义。因为指标变化缓慢,模型的预测也慢慢地改变。因此,市场状态也变化缓慢。如果预测值高于阀值,它将持续多期高于阀值;相反,如果预测值低于阀值,它将持续多期低于阀值。这立即使得大多数常见的统计显著性检验变得无效,如t检验、靴环检验、蒙特卡洛排列检验等。TSSB确实包含几个统计显著性检验以减少序列相关性的影响。

指标和目标缺乏独立性还有另一个含义,这一点比仅仅使得显著性检验失效更加严重。测试结果的合理性本身也会由于偏差而被破坏。幸运地是,在TSSB中,这个问题能够通过重叠(OVERLAP)选项轻易解决。现在,我们将简单地探索问题的本质。

问题发生在训练数据集和测试数据集的分界附近。最简单的是推进分析的情形,只有一个(移动的)边界。假设目标包括未来十天的市场运动。考虑训练数据集的最后一节,它的目标包括测试模块开始的第一个10天。这种情况像所有的训练集一样,在预测模型的发展过程中发挥作用。现在考虑测试集中的第一个10天,正如已经指出的那样,其指标值与前期指标值将非常类似。因此,模型的预测值也将于前值相似。因为目标向前推进了10天,我们仅仅向前推进1天,留下9天重叠部分,这个测试集的目标将与前一数据集目标相似。由于前面的数据集与测试数据集特别类似,因此我们认为它们的绩效将类似于训练集的绩效。这个结果存在乐观偏差。我们的测试结果将比实际测试结果要优。

作者简介:

David Aronson是机器学习、非线性交易系统开发以及信号增强/过滤方面的先锋,也是TSSB平台的联合开发者。TSSB是一个自动开发具有统计显著性的基于预测模型的交易系统的软件平台。自1979年以来,他就一直在这个领域工作,并在1992年获得市场技术员协会的注册市场分析师认证。同时,他也是一名金融学副教授,常规性的为MBA和金融工程研究生讲授关于技术分析、数据挖掘和预测分析的课程。他最近的新书《Statistically SoundMachine Learning for Algorithmic Trading of Financial Instruments》深入讲述了关于如何使用TSSB开发基于预测模型的交易系统。
模型, 交易技术, 理论基础, 交易策略

原文发布于宽客论坛,点击阅读原文

风险提示及免责条款

市场有风险,投资需谨慎。本文不构成个人投资建议,也未考虑到个别用户特殊的投资目标、财务状况或需要。用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击下方“内容举报”进行投诉反馈!
立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部