
练习开发交易策略
概述
交易策略是一种固定计划,旨在通过做多或做空市场来实现盈利回报。通过组合各种想法,交易者可以制定自己的策略,以满足他们的特定需求和风格偏好。
可能的交易策略数量如此之多,甚至连对它们进行分类都成了一项艰巨的任务。不过,大多数交易策略通常都包含一定的要素。
- 工作交易品种和时间框架。
- 指标、过滤器等。
- 开仓和平仓规则。
- 资金和风险管理。
除这些要素外,交易策略还可能包括其他参数。交易策略可能有交易时间限制,例如,允许在上午 9 点至下午 1 点之间开仓,而在此时间段之外的进场信号将被忽略。
对交易策略参数的主要要求是其一致性和不存在内部矛盾。假设交易者决定使用某种资金管理方法,之后,交易者希望在策略中添加追踪止损。这两个要素是相互矛盾的。资金管理要求设置预先确定的止损和获利水平。但是,追踪止损可能会在价格达到止盈之前平仓,从而导致利润低于预期。要解决这一矛盾,交易者必须使用固定仓位交易量或取消追踪止损。
任何交易策略都必须以某种统计优势为基础。而且,这种优势应该长期存在。
制定策略的一个重要步骤是测试。使用策略测试器,您可以评估交易策略的功能及其优缺点。如有必要,您可以进行所需的更改。此外,测试器还能选择最佳策略参数,从而改善交易结果。
简单策略
最简单的交易策略是基于简单移动平均线的策略。其原理非常简单:价格越过指标线,此时就会建立仓位。仓位类型取决于交叉点发生的方向:如果价格从下向上移动 - 买入,从上向下移动 - 卖出。
让我们仔细看看这一策略。首先,让我们从数学的角度来理解一下什么是交点。从本质上讲,它表示跟踪差值的符号:
当差值的符号变为相反时,就发生了相交。
现在,让我们试着以不同的方式来看待这种差值。根据其计算方法,SMA 是价格总和除以价格数量。因此,我们的第一步是将差值缩小到一个共同点:
让我们去掉分母。这样做的原因是,通过去分母,我们可以将差值转换成整数。使用整数更简单、更方便。让我们将差值乘以等于 N 的比例因子,再除以点值。这样,我们可以得到以下公式
但我们对简单的差值不感兴趣。我们需要知道的是,在给定的交易品种和时间框架内,这种差异出现的频率有多高。在这种情况下,我使用 H1 时间框架的 EURUSD。以下是 N=24 的统计数据。
你喜欢这张图片吗?如果你对这个问题的回答是 "啊,我见过更好的",那么你就不是交易者。一个真正的交易者应该对这张照片感到满意。交易者可能喜欢的第一件事就是不对称。其次,差异的分布似乎并不均匀。
让我们休息一下。普通人会做什么噩梦?我猜这些噩梦可能是吸血鬼、狼人或行尸走肉。你知道交易员最可怕的噩梦是什么吗?它就是正态分布。
设想一个游戏:如果是正面,我付给你一些钱;如果是反面,你就付给我钱。我们兴奋地抛出一枚硬币,结果 ...... 这个游戏没有任何意义。硬币是公平的,这意味着正面和反面平均出现的次数相同(对等)。你我都不可能从这个游戏中致富。解决这种情况的办法只有一个:你需要破坏硬币,让其中一面更频繁地掉落出来。这将使我们摆脱统一分配,实现利润的变化;有人将开始更频繁地获胜。
让我们回到我们的策略上来。差异分布不均,且偏向负值。显然,基于移动平均线和价格交点的策略效果并不好。在该策略的经典版本中,当差值的符号发生变化时,即以零作为平均值时,就会开仓。但由于分布的性质,我们最好使用中位数而不是零。因此,只有当差值超过中位值时,才应开仓。
这种选择是可能的,但不适用于我们。中位数将样本分成两半:一半样本低于中位数,另一半样本高于中位数。这表明,在达到中位数后,差值的增减概率大致相同。
我们的做法略有不同,会在差值达到最大或最小值时开仓。这些时刻将与价格偏离均线的最大值相对应。在此之后,价格和均线很可能开始趋近。此外,由于该指标更具惯性("滞后"),我们可以希望价格会走得更远,从而为我们带来利润。
如何在实践中加以落实?首先,我们收集历史上的差值。我们设定了某种触发阈值。例如,我将使用最大值和最小值的 15%。如果当前差值小于下限值,则建立买入仓位。如果当前差值高于上限值,则打开卖出仓位。
仓位的关闭遵循同样的原则,但触发阈值设定为 45%(略低于中位数,中位数水平为 50%)。如果差值高于下限,我们就关闭买入仓位。如果差值低于上限值,则卖出仓位被平仓。
这些就是交易策略的规则。让我们看看它在测试器中的表现如何。在测试中,我们使用欧元兑美元(EURUSD)交易品种、H1 时间框架,测试区间为 01/01/2023 至 12/31/2023。我们使用 EA 默认参数对其进行测试。
余额曲线如下。
对于这样一个简单的策略来说,结果还不错,但你可以改进它。首先,您可以为买入和卖出仓位设置不同的触发阈值。分布是不对称的,因此这种方法可以产生积极的效果。
您可能不仅需要监控移动平均值的差异,还需要监控移动平均值的变化。例如,差值增加,而移动平均值减小,在这种情况下,建仓信号可能会更强。
更复杂的策略
要生成建仓信号,可以使用两个不同周期数的 SMA。在上一个例子中,我们使用的是当前价格。那么,可以将价格视为周期为 1 的均线。这一策略背后的理念非常简单。周期长的移动平均线显示主要趋势,周期短的平均线显示趋势变化的瞬间。
所有必要的计算均按照前一种策略进行。唯一不同的是,您需要用周期更短的 SMA 值代替价格值。
使用两条 SMA 可以更精确地配置策略参数。直观地说,该策略的盈利能力不仅取决于建仓和平仓水平,还取决于均线的周期。这是其中一个选项中的余额曲线。
添加另一个参数后,我们就有机会在策略中加入一个额外的过滤器。在我们的示例中,该过滤器只在开仓时起作用。例如,只有当小周期 SMA 开始上升时,才能建立买入仓位。因此,只有当该 SMA 值下降时,才允许建立卖出仓位。使用该过滤器能达到什么效果?建立仓位的数量肯定会减少,这将有助于减少存款负载。让我们来看看这个过滤器是如何工作的。
过滤器 | 总净利润 | 毛利润 | 毛损失 | 利润因子 | 期望收益 | 采收率 | 夏普比率 | Z 值 |
---|---|---|---|---|---|---|---|---|
false | 1 670.84 | 2 039.73 | -368.89 | 5.53 | 4.49 | 1.78 | 2.91 | -17.52 |
true | 379.20 | 607.75 | -228.55 | 2.66 | 2.92 | 0.92 | 1.95 | -10.26 |
过滤器极大地影响了交易结果。在此策略中,我们使用两条均线。每个过滤器都可以独立使用,也可以一起使用。过滤器既可用于打开仓位,也可用于关闭仓位。
复杂的策略
我们已经讨论过两个 SMA 的使用,是否可以使用三个 MA 呢?是的。进一步说,您还可以在一个策略中使用任意多个 MA。让我们看看如何在实践中实现这一点。
我们取几条不同周期的移动平均线,求出它们的总和,大致看起来是这样的:
在这种情况下,系数 k 的总和必须等于零。这可以通过不同的方式来取得。最简单的解决方案之一是使用有限差分。任何阶次的有限差分都可以通过取前一阶差分并减去其副本,再将系数指数偏移 1 而得到。
例如,一阶差分等于 k1-k2。
在此基础上,我们可以计算二阶差分:(k1-k2)-(k2-k3)=k1-2*k2+k3。
同样,我们可以求出三阶差分:(k1-2*k2+k3)-(k2-2*k3+k4)=k1-3*k2+3*k3-k4。以此类推。
如果不想费力计算,可以直接从 Pascal 三角形中提取所需的行。只需记住更改系数前面的符号即可。
我在这个例子中使用了三条 SMA,对它们采用二阶差分系数。因此,所有计算都将根据以下公式进行:
这种策略的结果取决于三个参数。哪怕是改变一条 SMA 的周期,也会对结果产生重大影响。下面举例说明这种策略的执行情况。
我们可以继续增加移动平均线的数量。乍一看,这一决定似乎非常合理,然而,这种方法会走进死胡同。我们可以使用任意数量的 SMA,但最终仍将使用一个振荡器。我们可以添加的每一条新的 SMA 都只是改变了该振荡器的系数和特性,仅此而已。我们本可以做得更简单一些,就是立即开始寻找最优振荡器的最优系数。遗憾的是,这项任务并不那么简单。
复杂性的新级别
在开发交易策略时,主要原则是不要放弃,并始终寻找新的机会。我们已经看到了使用一个指标所能达到的效果。现在,让我们看看如何使用多个指标创建策略。
在本策略中,我将使用经典的移动平均线。根据每个指标,您可以利用当前价格与指标值之间的差值来构建振荡指标。我们已经了解了如何使用 SMA 实现这一功能。不过,其他指标的情况就比较复杂了。
线性技术指标的核心是一组系数乘以相应的价格参考。指标的结果数值就是这些乘法的总和。例如,SMA 可以表示如下:
然而,EMA 并非如此简单。首先,对于指数平滑法,采用几何级数计算系数,初始系数范围为 0...1。其次,一般来说,EMA 周期数是无限的。更准确地说,EMA 周期等于指标设法处理的价格读数的数量。
让我们稍微改变一下 EMA:我们将使用 2 的幂次作为系数,而指标周期将任意设置。因此,我们的指标公式如下:
我们的指标将类似于周期为 3 的标准 EMA。我们的指标周期数越长,它们之间的距离就越近。
经过这样的修改,我们就能建立一个输出为整数值的振荡器。我们已经考虑了所有其他操作,包括将差值归入同分母、应用比例系数等。
SMMA 采用以下算法构建。首先,我们计算 SMA 值,然后对这些值进行另一次平均。结果是一个三角形窗口函数。我们将用这个函数来制作一个振荡器。
LWMA 系数由步长为 1 的算术级数求得。从本质上讲,EMA 和 LWMA 是 "遗忘" 过去数据的不同模型。EMA 比 LWMA 更快地遗忘过去的数据。
接下来的步骤非常简单。根据每个指标,我们建立自己的独立振荡指标。每个振荡指标都有自己的统计数据。根据这些统计数据,我们生成开仓和平仓信号。
在这里,我们需要决定如何运行我们的交易策略。四个振荡指标中的每一个只能产生四个可能信号中的一个:
- 建立买入仓位
- 建立卖出仓位
- 关闭买入仓位
- 关闭卖出仓位
第五个信号是 "什么也不做",但默认情况下是启用的,所以我们不计算它。
可能会出现每个指标都发出自己信号的情况,而这些信号会相互矛盾。示例
- SMA 发出买入信号
- EMA 发出卖出平仓信号
- SMMA 发出卖出开仓信号
- LWMA 生成关闭买入仓位的信号
在这种情况下,交易者该怎么办?首先,交易者需要记住拜占庭将军(Byzantine generals)问题。拜占庭将军问题的本质是,可以从多个来源获得不同的信号。有些信号可能是假的,有些则可能是真的。要确定哪个信号为真,需要遵循一个简单的规则:如果信号来自三分之二以上的信号源,就可以认为该信号是可靠的。
设 N 为指标总数,然后,可以用公式计算出发出相同信号的指标的最少数量:
我们共有四个指标。这意味着,只有当至少三个指标发出相同信号时,交易者才能采取任何行动。
这就是该理论。让我们来介绍一下我们的交易策略是如何运作的。首先,我们需要为每个指标收集单独的统计数据。根据这些统计数据,每个指标都会生成自己的信号。如果至少有三个信号匹配,那么 EA 就会认为信号正确并执行它。
现在,让我们来看看拜占庭将军们能否获利。
那么,这种方法也可以用在交易中。此外,这种交易策略还允许增加参数数量。对于每个指标,您都可以输入自己的开仓和平仓水平。这将使策略更加灵活,并对交易绩效产生积极影响。
基于多个指标,您可以以另一种方式构建交易系统。
收集统计数据后,我们可以估算出每个指标的特定值出现的频率。利用这个频率,我们可以构建一个经验分布函数。
设 N 为样本总量,f[i] 为第 i 个指标值的频率。然后就可以用下面的公式求出经验分布函数:
该函数用于描述下一个指标值小于当前指标值的概率。从图形上看是这样的:
因此,我们有四种不同的概率。但我们需要的是一个值。我们可以使用贝叶斯分类器来得到它。最终概率是由每个指标的概率通过公式计算得出的:
我们将利用这种概率来生成信号。只有当概率达到一定值时,才会建立或关闭仓位。
让我们看看这种方法能否用于交易。
现在,让我们尝试为开仓添加一个过滤器。这种过滤器的工作原理非常简单:
- 只有当最终概率开始增加时,才允许建立买入仓位;
- 只有当概率开始下降时,才允许建立卖出仓位。
因此,我们可以减少仓位数量,减轻存款负载。
可为平仓添加类似的过滤器。它有可能稍微提高这一策略的盈利能力。
我们已经考虑过根据几个不相关的指标创建交易策略的可能性。这种方法的主要特点是,所有指标应尽可能彼此不同。例如,如果我们使用周期等于 2 的 SMA 和 SMMA,那么它们的系数将相等。这将产生同一指标的两个副本。必须避免这种情况,因为信号会发生偏移,策略将无法正常运行。
提高复杂程度
让我们回到起点 - 根据一个指标开发策略。不过,这次我们将增加策略的复杂性。我们将以 CCI 指标为基础。
经典 CCI 的计算方法很简单:它是价格与移动平均线之间的差值,用标准差进行归一化。
采用这种方法,要获得用于收集统计数据的整数有些困难。因此,我们将对这一指标稍作修改。我们将使用中位数价格和绝对偏差来代替 SMA 和 StDev。
找到中位数非常简单。我们需要按升序对原始值集进行排序。居中的数值就是中位数。中位数的主要优点是不受异常值的影响。
我们将采取以下行动。首先,我们将获得所需的价格数量,并找出它们的中位数。由于我们方法的特殊性,价格数必须是奇数 - 只有在这种情况下,我们才能得到一个整数。接下来,我们将找出当前价格与中位数之间的差值,从而得到第一个统计量。我截去了出现频率最高的数值,使图表特征更加明显。
现在,我们需要找出价格与中位数之间差值的绝对值。让我们找出这些差异的中位数,这将是我们对标准差和第二个统计量的估计值。
我们得到了很好的分布,但不对称,也不均匀。让我们看看它们能否帮助我们进行交易。
我们的交易策略将非常简单。我们将利用价格与中位数之差的统计数据来生成开仓和平仓信号。如果当前差值远远偏离零,那么我们就会开仓,期待回归中位数。
标准偏差统计量将用作过滤器。较大的偏差可能预示着市场的某些强烈波动。此时,我们将禁止开仓。
让我们看看这一策略是否奏效。
我们使用了最简单的偏差过滤器。事实上,较大的偏差可能意味着您需要改变入市方向。例如,信号表示您应该建立买入仓位,而偏差则表示您应该将仓位类型改为卖出。
另一种可能的过滤器可以建立在中值的基础上。中值可以与任何价格值相吻合。这就是为什么中位数是一个非线性指标。让我们设定以下条件:只有中位数和价格与某个指数重合时,才会进行交易。例如,如果中位数等于指数为 5 的价格,余额线就是这个样子。
我们可以看到,即使是一个指标,也可以提供大量的选项。交易者的主要任务是分析所有可能性,并将其中最好的用于交易。
结论
撰写交易策略可能并不像乍看起来那么困难。然而,要成功实现策略,您应该考虑许多因素,并以理解和经验来对待这一过程。本文仅介绍了一些可能的解决方案和方法,对开发策略可能有用。交易者在选择过滤信号源等时必须非常谨慎。开发的策是一项非常令人兴奋的活动,有很大的创造空间。
撰写本文时使用了以下程序。
名称 | 类型 | 描述 |
---|---|---|
scr SMA1 | 脚本 | 计算并显示价格与 SMA 之间差值的分布情况
|
EA SMA1 | EA | 使用 "价格 - SMA" 策略进行交易
|
EA SMA2 | EA | 使用 "两条 SMA" 策略进行交易
|
EA SMA3 | EA | 使用三条 SMA 进行交易 |
EA Byzantine Generals | EA | 使用四个指标进行交易,根据拜占庭将军问题生成信号 |
EA NBC | EA | 使用四个指标进行交易,信号使用贝叶斯方法计算 |
scr CCI | 脚本 | 收集有关 CCI 指标的统计数据 |
EA CCI | EA | 使用 CCI 指标的统计数据进行交易
|
本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/14494


