怎么编程和测试交易系统,测试一种交易系统要多久

首页 > 经验 > 作者:YD1662022-10-31 22:57:56

怎么编程和测试交易系统,测试一种交易系统要多久(1)

交易员们都知道要想提出有可持续优势的系统有多难。许多人可以通过看图表并确定完全适合该图表的交易策略。然而,当他们在一个较长的市场周期里来测试其策略时,却发现他们的系统并不可行。

还有一些交易员开发的系统忽略了佣金和滑点。交易系统看上去很棒,交易员也充满激情,但将现实的摩擦成本加进去后,这个成功的系统就成了一个仅仅盈亏平衡的系统,甚至更糟。

有了适当的测试和开发方法之后,对于交易员来说,在找到真正有效的那一个交易策略之前,测试其千百种想法将变得很常见。一个好的开发过程将会去除大量无用的交易系统。

然而,交易系统通过了初步的开发和测试之后,工作还远远没有完成。在将一个交易系统在真正的基金中运用之前,还需要更多的步骤。遵循这些“开发后”规则可以为交易员节省数千美元,也为其省去了很多令之心痛的难题。

一、蒙特·卡洛模拟

交易员常犯的一个错误是根据历史回溯测试资金曲线的形状做出交易决策。许多人盯着资金曲线,同时想着“因为历史最大跌幅为X元,那应该不会有更大的下跌了”。或者他们会得出结论“这个系统每年都盈利了,所以用它交易会很安全。”

很不幸,这两个假设都太天真了,因为历史曲线仅仅是交易系统随着时间的推移可能会采取的许多路径之一,如下图所示。重新安排几个零星分散的交易,则最大跌幅会变得更大,而盈利期则很容易变为亏损期。另一方面,效果可能会比原来的更好。

怎么编程和测试交易系统,测试一种交易系统要多久(2)

二、选择哪种方式?

交易系统的历史路径只是一种可能的结果。而将这段时间内交易系统的不同表现进行对比,不失为一个好办法。

有没有一种办法能分析这一现象——可以看到一个交易系统所采取的各种不同的路径?

答案是,有,蒙特·卡洛分析的方法就可以做到。

蒙特·卡洛分析是基于这样一种观点,该观点认为历史交易在未来发生,但是是以不同的或未知的次序发生。将这些交易的次序搅浑,则会产生不同的资金曲线。

虽然在有些情况下,蒙特·卡洛模拟是不合适的,但对于大多数的交易系统,蒙特·卡洛分析是有效的,同时还可以洞察交易系统。你只需记录每笔交易的结果,然后按各种次序选择出交易来创建一个资金曲线。

显然,用电脑处理这种采样过程要快得多,并能创建成千上万的模拟资金曲线。

当你分析成千上万的蒙特·卡洛模拟时,你会得到最大跌幅、可能年收益和*风险的统计数据。如果你的业绩目标倾向于模拟结果,那么你可以很容易地看到你的系统能否满足你的目标。仅看历史资金曲线是无法获取这些信息的。

三、观察策略的孵化期

当大多数交易员完成了一项策略的制定时,他们通常会很兴奋并马上投入真实的交易。这是一个很大的错误,尤其是对新的交易员来说。

所有这一切都与交易软件有关。大多数的现代交易软件可以很容易的创建系统,修改规则和进行多种优化。实际上,大多数软件的开发是为了鼓励优化,因为软件使优化变得更容易。

因此,由于软件促使了很多坏习惯的养成,在每经过一个新的测试后,历史资金曲线总会得到一些改善。然而,大多数时候看起来比较好的回测与未来的表现相关性为零(甚至是负的)。为什么会这样呢?简而言之,加入规则、引入过滤以及运行更多的优化将会使交易策略与历史数据相匹配,在优化时,这是一个巨大的风险。

很多情况下,在开发后通过观察策略可以得到一些重要的线索。这个过程被称为孵化期。其最简单的形式是,让该策略自由运行三至六个月,期间并不进行实际的交易。

每个月你可以观察下结果,并把这些新的结果添加到历史回测的曲线中。如下图所示,在这里面孵化期的结果被添加到“向前走”的历史结果里面。从这种情况来看,孵化期的结果看起来和历史结果相似,表明该策略开发的表现是正确的。

怎么编程和测试交易系统,测试一种交易系统要多久(3)

在经过几个月的孵化期后,可能看到以下两种情况中的一种:系统的表现看上去要么和历史测试一样,要么不一样。有个诀窍是将资金曲线图(历史性的和孵化期的)尽可能大的打印出来,并把它贴到墙上。如果能够观察到历史测试结束的地方以及孵化期开始的地方,就说明有问题。理论上,在表现上应该是没有变化的。

可以通过一个更加以数据为导向的测试来证明表现是否有改变,这个测试就是将每日的结果制作成柱状图。此外,重点是观察系统表现是否是在你制定系统之后发生变化的。

什么会导致表现的变化呢?当然,如果市场的表现与历史测试期间内的任何时段都不同,那么表现就可能发生变化。但是,假设你对数据测试了好几年,结果应该不会太离谱。更可能的情况是在制定过程中发生了错误。比如,策略可能被过分优化了。

四、注意系统相关性

另外一个交易员需要注意的领域是与其他系统的关联。如果你只在一个系统中交易,那么就没什么好担忧的。但是,如果你在已有投资组合里面添加了一个系统,那么必须确保新系统能与其他系统互补。你肯定不想所有的系统在同一时间进行买卖。

有一个方法可以实现无相关性,就是在不同市场以及不同时间段进行交易。如果你喜欢用数学来证明无相关性,那么你可以针对交易系统结果做一个线性回归。

最好的方法是通过比较两种策略的结果并且观察相关系数。如果结果是在-0.5到 0.5之间,那么证明两个系统之间的相关性较弱。下图显示了相关性强的系统和相关性弱系统的散点图。

怎么编程和测试交易系统,测试一种交易系统要多久(4)

系统之间的相关性很重要,因为交易的一个关键因素就是适当的风险控制。当两个或者多个系统高度相关时,你的风险会增大很多。不相关的系统产生的资金曲线更加平滑并且对适当的分散投资来说非常重要。

在进行了蒙特卡洛模拟之后,系统孵化以及其他系统的相关性检验之后,可能是时候进行少量交易了。为什么是少量呢?有如下几个原因,

其一,系统在经过之前的一系列步骤后仍然可能失败;

其二,少量交易对于用来检查针对滑点做的一些假设来说是一个很好的办法。

你可能发现滑点比你预想的高一点或者低一点,因此你的头寸大小可能会有所改变。

最后,你可能发觉自己并不喜欢这个系统,即使它是盈利的。如果你觉得一个系统使用感不好,你可能不能很好地应用它。当在进行少量交易的时候,你发现自己不喜欢该系统,这样其实更好。

怎么编程和测试交易系统,测试一种交易系统要多久(5)

在制定了一个系统之后,实际的资金交易并不是下一步。最好的办法是一直保持谨慎并作更多的分析。

从蒙特卡洛模拟到孵化期再到相关性分析,以及有限的实际资金测试,通过这些额外的步骤可以节省资金以及减少那些让你心痛的时刻。最后,你将会拥有一个更稳健的策略。

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.