Skip to content

Latest commit

 

History

History
109 lines (55 loc) · 16.1 KB

File metadata and controls

109 lines (55 loc) · 16.1 KB

一、介绍

在我们深入研究这本书的内容(或者豆腐,如果你喜欢的话)之前,我们应该清楚在这里你会发现什么,不会发现什么,以及读者应该做什么样的准备。

目标受众和内容概述

这本书的目标读者是那些统计学背景一般的人(统计学 101 已经足够了),对任何语言都有一些编程技巧的人(这里的例子中使用了非常倾向于传统 C 语言的 C++),以及对金融市场交易感兴趣的人,他们的数学严谨程度远远超过大多数交易者。在这里,你会发现一个有用的算法集合,包括样本代码,这将帮助你调整你的想法到交易系统,有高于平均水平的盈利能力。但是有很多东西你在这本书里找不到。我们从概述这本书的内容开始。

这本书里有什么

本书涵盖了以下主题:

  • 如果你的系统涉及到参数的优化,大多数都是这样,你将学会如何确定你的优化系统是否捕捉到了真实的市场模式,或者它只是学习了随机的噪声模式,而这些模式不会再出现。

  • 您将学习如何修改线性回归,使其更不容易过度拟合,并且作为一个奖励,将预测器分为有价值的和无价值的。您还将学习如何修改线性回归,以便在适度非线性的情况下使用它。

  • 你会发现一个非常通用和强大的非线性优化算法,适用于基于预测模型的交易系统和传统的算法系统。

  • 所有的交易系统都假定交易市场有一定程度的一致性;如果你的系统所基于的模式在最近的历史中经常发生,我们必须假设同样的模式至少会持续到不久的将来。一些交易系统对市场模式的适度变化很稳健,而另一些系统会因为市场模式的微小变化而变得一文不值。您将学习如何评估您的系统对这种变化的稳健程度。

  • 如果你已经设计了自己的专有指标,你将学会如何确认它们是合理稳定的(这是任何有效指标的关键属性),或者如果它们不稳定,如何将它们调整到平稳状态。你还将学习如何计算它们,以最大化它们的信息含量,最小化它们的噪音,并以有效的方式提供给你的交易系统,以最大化它们的效用。

  • 大多数交易系统开发人员都熟悉 walkforward 测试。但没有那么多人意识到,普通的前向算法通常不足以正确验证交易系统候选,而且可能因为微妙的原因产生危险的乐观结果。您将了解如何在第二层 walkforward 分析中嵌入一个 walkforward 算法,或者在 walkforward 分析中嵌入一个交叉验证层。这种“验证中验证”的场景不仅是测试交易系统的最佳方式,也是唯一真正正确的方式。

  • 你将学习如何估计你的系统可能产生的未来利润的范围。如果你发现你的系统有几乎确定的未来盈利能力,但是这种盈利能力相对于产生的风险来说很有可能很小,你就知道你的系统还没有准备好交易。

  • 你将学习如何估计灾难性下降的概率,即使你的系统运行“正确”

  • 您将了解严格的统计测试算法,这些算法能够抵抗偶尔的大赢大输,这些算法会使许多“传统”验证算法无效。

  • 许多交易系统开发人员喜欢使用“墙上的意大利面条”的方法来开发交易系统。尽管经常遭到蔑视,但这实际上是一种合法的方法,只要明智地去做。您将学习如何确定众多竞争系统中的“最佳”是否真正值得。

这本书里没有什么

本书不包括以下主题:

  • 这本书不是“市场交易者统计学入门”类型的书。假设读者已经熟悉了均值和标准差、正态分布、假设检验的 p 值等概念。不需要比这些概念更高级的东西;这里介绍的高级统计技术是建立在基本概念的基础上的,任何通过了统计学 101 甚至是心理学统计学课程的人都可以掌握。但是如果你不知道什么是标准差,你会发现这本书很难懂。

  • 这也不是一本“金融市场交易入门”的书。假设你知道一些术语的含义,比如开始交易的和结束交易的多头空头表示每笔交易的收益。如果你完全是金融市场交易的新手,在阅读这本书之前,你需要学习背景材料。**

** 在这里,你会发现很少或没有实际的、经过验证的交易系统。那些一毛钱一打,通常值这个价。但是如果你对交易系统有自己的想法,你将学习如何实现、测试和调整它,以最大化它的利润潜力。

*   你在这本书里找不到绝密的超级骗子保险指标。提出的几个指标要么是常识,要么在公共领域广为流传。但是如果你对指标有自己的想法,你就会学会如何最大化它们的效用。* 

*## 关于交易系统

由于本文中介绍了不同的测试程序,它们必然会在不同的交易系统中进行演示。请注意以下感兴趣的项目:

  • 我并不赞同这些系统赚钱。相反,我尽可能地保持系统的简单,这样就可以把重点放在它们的测试上,而不是它们的实际效用上。这本书假设读者对交易系统有自己的想法;这里的目标是为调整和严格测试现有系统提供先进的统计方法。

  • 所有用于演示的交易系统都假设我们在使用日线,但这不是必须的。条形可以是任何长度,从几分之一秒到几个月。事实上,大多数演示只使用每根棒线的开盘价或收盘价,所以将这些算法应用于交易分笔成交点数据也是可行的。日柱是最方便的,测试数据也是最容易得到的。

  • 大多数演示系统在酒吧收盘时开始和结束交易。自然,在现实生活中这是困难或不可能的;更公平和保守的方法是在一根棒线收盘时做交易决定,在下一根棒线开盘时开始或结束交易。但是这会给这里显示的算法增加不必要的混乱。请记住,我们的目标是以最直接的方式呈现统计算法,将焦点放在统计测试上。在大多数情况下,对实现的小修改不会从本质上改变严格统计测试的结果。

  • 在这些测试中,交易成本(滑点和佣金)被故意忽略了,这也是为了保持对统计测试的关注,而不增加混乱。提供的代码和附带的描述清楚地说明了如果需要,如何将交易成本纳入计算中。

市场价格和回报

大多数股票市场的价格范围很广,或许开始时每股交易几美元,经过分割调整后,今天每股交易数百或数千美元。当我们计算交易的回报时,我们不敢只减去开盘价和收盘价。从 1 美元到 2 美元的 1 美元波动是巨大的,而从 150 美元到 151 美元的波动几乎是微不足道的。因此,许多人计算百分比变动,将价格变动除以起始价格,然后乘以 100。这就解决了尺度问题,而且很直观。不幸的是,它有一个问题,这使得它在许多统计分析中是一个糟糕的方法。

百分比移动的问题在于它们是不对称的。如果我们在一笔交易中赚了 10 %,然后在下一笔交易中亏损了 10 %,我们就没有回到起点。如果我们从 100 点涨到 110 点,但是损失了 110 点的 10 %,我们就是 99 点。这似乎并不严重,但是如果我们从不同的角度来看,我们就会明白为什么它会成为一个大问题。假设我们有一个长期交易,市场从 100 移动到 110,我们的下一个交易从 110 回到 100。我们的净权益变化为零。然而,我们记录了 10%的收益,然后是 9.1%的损失,净收益接近 1%。如果我们记录一系列的交易回报进行统计分析,这些错误会很快增加,结果是一个完全没有价值的交易系统可以显示出惊人的净收益!这将使几乎所有的性能测试无效。

有一个简单的解决方案被专业开发人员使用,我将在本书中通篇使用:将所有价格转换为价格的对数,并将交易回报计算为这些对数的差值。这解决了所有的问题。例如,捕捉到从 10 到 11 的市场波动的交易是 2.39789–2.30258 = 0.09531,捕捉到从 100 到 110 的波动的交易是 4.70048–4.60517 = 0.09531。如果一笔交易让我们从 110 回到 100,我们损失 0.09531,净收益为零。太好了。

这种方法的一个好处是,较小的对数价格变化乘以 100,几乎等于百分比变化。例如,从 100 到 101,1%的变化,相当于 100 *(4.61512–4.605)= 0.995。甚至早些时候提到的 10%的变动也相当于 9.531%。出于这个原因,我们将把从日志中计算出的回报视为近似的百分比回报。

两种类型的自动交易系统

最初,所有形式的自动市场交易都是所谓的算法基于规则的 *。*系统开发人员提出了一套严格定义的规则来指导开仓和平仓。规则可能会规定,如果某个条件组合变为真,那么您将打开一个多头头寸并持有该头寸,直到某个其他条件组合变为真。算法交易的一个经典例子是均线交叉系统。计算短期和长期均线,如果短期均线高于长期均线,就做多,否则就做空。训练这个原始的交易系统是通过寻找在历史数据集上提供最佳性能的短期和长期回顾来执行的。算法系统,许多涉及几十个条件,今天仍在广泛使用。

最近,许多开发人员(包括我自己)已经形成了这样的观点,即基于模型的系统更强大,尽管它们有一个共同的缺点,即它们经常盲目信任内部工作方式深不可测的黑盒。在基于模型的自动交易中,我们计算一个或多个(通常更多)T2 指标,这些指标是回顾过去并衡量市场特征的变量。这些可能包括趋势、波动性、短期循环行为等等。我们还计算了一个展望未来并描述近期市场行为的目标变量。目标可以是下一根或几根棒线的大小和市场运动方向。目标也可能是一个二元标志,它告诉我们市场在触及保护性止损点之前是否先触及了一个预定义的利润目标。然后,在给定指标变量的值的情况下,我们训练一个预测模型来估计目标变量的值。为了交易该系统,我们用指标的当前值呈现训练的模型,并考虑模型的预测。如果预测足够强(表明有信心),我们根据预测的走势建立市场头寸。

基于模型的交易相对于基于规则的算法交易的优势在于,我们可以利用人工智能领域的许多最新发展,让运行在强大计算机上的复杂程序发现交易系统,这些系统可能非常复杂或模糊,没有人可能希望发现并以明确的规则编程。当然,这需要付出很高的代价:我们通常不知道模型到底发现了什么“规则”,我们必须盲目地接受模型的决定。

因为这两种类型的交易系统开发在今天都被广泛使用,所以本文将迎合这两种思想流派。不可避免的是,这里给出的一些统计检验只适用于其中一个。但是总是会尝试设计测试过程,让从业者可以使用这两种风格。

相信电脑的痛苦

对许多人来说,尤其是经验丰富的凭直觉交易者,走向自动化交易最困难的部分是当计算机的交易决策与他们的直觉冲突时接受它们,更不用说他们多年成功的交易了。我将从我自己的亲身经历中给出一个具体的例子。我根据合同开发了一个短期日内交易系统。我对该系统进行了极其彻底、严格的统计测试,结果明确显示,当该系统在冒着偶尔出现巨额亏损的风险(一种非常宽松的保护性止损)的情况下获取大量小额利润时,其利润最大化。这惹恼了负责将信号交易传到场内的交易员。他不断地用他的口头禅“减少你的损失,让你的胜利奔跑”来轰炸我。这是一些交易风格的真理,但不是这个特殊的系统。他控制不住自己;他一直否决电脑的交易决定。系统会要求平仓赢利的交易,但他会保持平仓,希望有更大的收益。或者,市场会朝着一个未平仓的位置移动,他会在系统止损点到达之前很久就把它平仓。他一直告诉我,如果他让它继续下滑,而不是早点止损,会损失多少钱。并行运行的计算机模拟赚了很多钱,而他的修改版本赚得少得多,这一事实对他的观点没有影响。多年来,他一直是一个成功的全权交易者,他知道如何交易,没有#$%^的电脑会告诉他别的方法。我们的关系从未成功过。这个故事的寓意是:如果你没有勇气相信自动化交易,那就忘掉它吧。

未来的泄露比你想象的更危险

未来泄露是未来知识非法泄露到测试程序中。在交易系统的开发和测试中,当未来市场行为的某个方面模拟了交易系统在现实生活中的表现时,就会发生这种情况。因为当我们交易我们的系统时,我们显然不知道未来,这种泄漏导致乐观的性能估计。

我不止一次地惊讶于原本严肃的系统开发人员如此随意地采取这种形式的欺骗。我有过聪明的、受过教育的开发人员耐心地向我解释说,是的,他们确实理解一些小程度的未来知识参与了他们的性能模拟。但是他们又煞费苦心地解释这种“不可避免的”泄漏是如此之小,以至于微不足道,不可能对他们的结果产生任何实质性的影响。他们不知道。这就是为什么本文反复强调的重点是避免未来泄漏的方法,即使是最微小的接触。在我早期的系统开发中,我经常惊讶于这种泄漏是如此的微妙。

为了强调这一点,图 1-1 显示了一个几乎随机的赢 1/输 1 交易系统的股票曲线,只有 1%的优势。这条曲线,如果它真的是随机的(无价值的),平均来说会是平坦的,仅仅从这个微小的边缘来看是相当可观的。未来的泄露远比你想象的更致命。认真对待。

img/474239_1_En_1_Fig1_HTML.jpg

图 1-1

有 1%边的随机系统的权益曲线

百分比获胜谬论

有一个简单的数学公式,对交易系统的开发和评估至关重要,但对许多人来说似乎很难接受,即使他们在智力上理解它。见方程式 1-1

$$ ExpectedReturn= Win\ast P\ (Win)- Loss\ast P\ (Loss) $$

(1-1)

这个公式表示,交易的预期回报(如果这种情况重复多次,我们将获得的平均回报)等于我们将赢的金额乘以赢的概率减去我们将输的金额乘以我们将输的概率。

很容易接受的是,如果我们掷一枚公平的硬币,正面赢一美元,反面输一美元,我们的预期收益是零;如果我们重复抛硬币很多次,从长期来看,每次抛硬币的平均回报是零。同样容易接受的是,如果硬币是公平的,我们赢了两美元,但只输了一美元,我们就处于令人羡慕的地位。

现在考虑交易一个真正随机游走的市场;在其他属性中,从一个条形到下一个条形的变化都是相互独立的,并且平均值为零。开发一个除了零期望(当然忽略交易成本)之外的交易系统是不可能的。但是我们可以很容易地改变预期的输赢,以及输赢的频率。

例如,假设我们建立了一个多头头寸,并在进场价格之上设置了 1 个点的利润目标,在进场价格之下设置了 9 个点的止损出场。每一次我们经历的损失,都是巨大的,是我们赢的 9 倍。但是如果我们在假设的随机市场上执行大量这样的交易,我们会发现我们赢的次数是输的 9 倍。我们赢了 90%的机会。根据等式 1-1 ,我们每笔交易的预期回报仍然是零。这里的要点是,输赢的大小和概率是密不可分的。如果有人吹嘘他们的交易系统多长时间赢一次,问问他们的盈亏情况。如果他们吹嘘他们的赢和他们的输相比是多么巨大,问问他们多久赢一次。二者都不是孤立存在的。*