欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

用于追踪的函数库和 Experts / Yury Dzyuban - MetaTrader 4 库

author emer | 156 人阅读 | 0 人评论 |

众所周知,维持和平仓的算法几乎比开仓的规则更重要。有时跟踪系统的变化可能会导致交易表现发生相当大的变化——要么是后者的增加或减少。这是一个用于维持未平仓头寸的函数库,我在构建系统时使用了它。

所提出的函数基于一些最流行的跟踪算法,其他函数可能是我最初的开发,或者至少我以前没有见过它们。这些功能很容易包含/选择,这允许快速将它们应用到入口系统以测试不同的跟踪场景。所提出的函数是基本的,并且如果需要的话,允许在它们的基础上构造更复杂的跟踪算法。这些函数非常不同,都是为了简化构建新 EA 的过程而编写的。

所以,函数本身:

1. 尾随最后 N 根柱线的影线。

空白阴影尾随(整数票,整数TMFRM,整数酒吧_n, 
                      整数缩进,布尔值特里林洛斯)

该函数按照当前时间范围或当前时间范围内指定数量的柱的最低低点(对于多头头寸)或最高高点(对于空头头寸)实现追踪止损。

参数:

票 -唯一的订单号(在调用函数之前选择)订单选择());
tmfrm-时间范围,其柱用于追踪(选项 - 1、5、15、30、60、240、1440、10080、43200);
酒吧_n -确定止损水平的柱数(不少于 1);
缩进-距离所选最高价/最低价的缩进(以点为单位)以设置止损(不少于 0);
特里林洛斯 -是否将止损移至“无利可图”区域,即初始止损与开盘价之间的区间(真 - 追踪,假 - 追踪仅在新止损“优于”开盘价、“盈利”时激活)。

这种类型的追踪最初出现在 V. Barishpolts “每日图表上的平均突破”的策略描述中,该描述建议在每日时间范围内追踪最新 2 条柱(蜡烛)的低点(买入)或高点(卖出)止损。该算法的轨迹令人惊讶地“好”(尝试“用眼睛”“环视”图表),允许在回滚中幸存(深度取决于指定的柱数,酒吧_n)和波动性恶化的时期。 (根据定义)它会在下一个柱收盘时触发,即使它在每个价格变动中都使用。我主要在日线图上使用它来追踪 2-4 个(最常见的)最新柱线。


2. X 条形尾随分形。

空白分形尾随(整数票,整数TMFRM,整数frktl_bars,
                        整数缩进,布尔值特里林洛斯)

该函数根据指定时间范围内指定大小(即分形中包含的柱数)的分形极值来追踪止损。众所周知,“经典”分形(如果我没记错的话,由 Williams 设计)是 5 个柱的组合。但后来我想 - 为什么不使用“其他”尺寸 - 3 个柱或更多,包括成对的柱数(在后一种情况下,当移动“进入过去”时,极值之后的裸露数量将大于极值之前的裸露数量)。

参数:

票 -唯一的订单号(在调用函数之前选择)订单选择());
tmfrm-时间范围,其柱用于追踪(选项 - 1、5、15、30、60、240、1440、10080、43200);
酒吧_n -分形中包含的条形数量(不少于 3 个);
缩进-距离最新分形极值的缩进(以点为单位)以设置止损(不小于 0);
特里林洛斯 -是否将止损移至“无利可图”区域,即初始止损与开盘价之间的区间(真 - 追踪,假 - 追踪仅在新止损“优于”开盘价、“盈利”时激活)。

在几个俄罗斯外汇相关论坛中,有人指出“基于分形的追踪在较短的时间范围内效果很好”。由于分形本质上是局部极值,因此它们的尾随也基本上是局部极值的尾随。这个想法并不新鲜,而且相当强大,并且已被许多著名交易者使用(如果我没记错的话,前面提到的威廉姆斯)。它可以很好地承受回滚并“选择”明显的运动,但在平坦期间效果不佳(根据个人经验)。与前一个函数一样,该函数在已形成的柱上“追踪”。如有必要,可以动态更改参数(使用“寿命”位置)。例如,在利润快速“增长”期间(例如,在强劲趋势中),通过切换到更高的时间范围或增加分形中的柱数来“粗糙”其敏感性。或者相反,通过切换到较小的时间范围或减少分形中的柱形数量来提高波动率下跌期间的敏感性。其他选择也是可能的。


3. 标准尾随 - “阶梯式”。

空白尾随楼梯(整数票,整数三距离,整数三步)

这种尾随类型是标准类型的改进。据我所知,类似的文章是由金四世(但既然“自己的更珍贵”,...:) 它与标准止损的不同之处在于,止损不是“逐点”移动(例如,当追踪到 30 点的距离时,在 +31 时止损将移动 +1,在 +32 时止损将移动 +2 等),而是按指定大小的“步长”移动。例如,当追踪距离为 40 点且“步长”设置为 10 时,到达 +40 时,止损将移动 +10,然后直到利润达到 +50(40 点 + 步长)时,不会发生任何变化(即价格具有一定的自由度,这实际上是算法的本质),只有在 +50 时,止损才会从步长的 +10 移动到 +20,在 +60 时,止损会从步长的 +10 移动到 +20。 +30分等等。

参数:
票 -
唯一的订单号(在调用函数之前选择)订单选择());
三距离-距当前价格(以点为单位)开始“追踪”的距离(不小于 MarketInfo(Symbol(),MODE_STOPLEVEL));
三步-改变止损的“步长”(以点为单位)(不少于1)。

三步=1 此函数与标准尾随函数没有区别。该算法的主要“特征”再次是为价格提供一定的“移动自由度”——止损仅在价格“徘徊、确定”后才移动。这种尾随算法最初出现在前面提到的 V.Barishpolts 对“移动通道”策略的描述中。


4. 标准尾随-“结”。

空白尾随乌达夫卡(整数票,整数trl_dist_1,整数级别_1,
                    整数trl_dist_2,整数级别_2,整数trl_dist_3)

众所周知,不存在没有回滚的无限移动(呃......)。在某个“峰值”(例如,其平均值可以通过统计确定)之后,价格通常会形成盘整或回滚。这种维护算法的想法是随着利润的增加而减少追踪距离,这样当到达可能的反转/盘整区域时就有可能“挂钩”更多的利润。除了交易上述“尖峰”(通常发生在新闻期间或历史水平突破时)之外,该功能还可以用于在通道内工作,方法是在到达通道的相反(相对于开盘)边界时减少追踪距离。


例如,在值“ticket#, 30, 50, 20, 70, 10”处,最初在 30 点的距离处执行追踪,一旦价格偏离开盘价 50 点,它开始“收紧”追踪 - 在 20 点的距离处,如果它设法在利润增加的方向上超过 70 点,则将追踪距离“收紧”(因此得名)到10分(极有可能导致仓位很快平仓)。

空白按时间跟踪(整数票,整数间隔,整数三步,
                    布尔值特里林洛斯)

按时间跟踪,无论头寸的当前结果和市场状况如何。在设定的时间间隔(整分钟),它会尝试(如果可能)将止损移动指定的步长。单独使用这个尾随方法并不是很成功(至少对我来说,也许对其他人来说会有所不同),但是,当与其他尾随方法结合使用或由特定条件激活时,它可能会很有用。

空白尾随ATR(整数票,整数atr_时间范围,整数atr1_期间,
                  整数atr1_shift,整数atr2_期间,整数atr2_shift,
                  双倍的系数,布尔值特里林洛斯)
ATR - (Average True Range) 是波动率指标之一;值越大,(指标)指定时间段内的平均波动率越高;以点衡量。在大多数情况下,ATR 跟踪允许根据(“充分”、“适应性”)价格行为类型更改止损 - 在高波动性(可见峰值)时,价格“放开”,当“原地踏步”时,价格保持“更紧”。尾随使用 2 个 ATR,它们应该具有不同的周期 - 一个是短周期(例如 5),另一个是长周期(例如 20)。止损的计算始终使用 2 个 ATR 中较大的值 - 这样做是为了防止连续几个低波动性柱(例如,在新闻发布之前)将止损移动得太接近当前价格。

参数:
票 -
唯一的订单号(在调用函数之前选择)订单选择());
atr_时间范围-计算 ATR 值的时间范围(选项 - 1、5、15、30、60、240、1440、10080、43200);
atr1_期间-第一个 ATR 的周期(大于 0;可以与atr2_期间,但建议将其设置为不同的值,如上所述);
atr1_shift -“窗口”移动 第一个 ATR, 其中计算 ATR 值,指定相对于当前柱的向后柱数(非负整数);
atr2_期间-第二个 ATR 的周期(大于 0);
atr2_shift -“窗口”移动 第二个 ATR 其中计算 ATR 值,指定相对于当前柱的向后柱数(非负整数);
系数 -止损计算为 ATR*系数,即确定距离当前价格多少个ATR距离来设置止损的系数;
特里林洛斯 ->是否将止损移至“无利可图”区域,即初始止损与开盘价之间的区间(真 - 追踪,假 - 追踪仅在新止损“优于”开盘价、“盈利”时激活)。

它也是一种流行的跟踪方法,与具有对当前市场情况的“适应性”的标准不同(在大多数情况下是有利的)。


7.“棘轮”尾随(Barishpolts 创作)。

空白尾随棘轮B(整数票,整数pf_level_1,整数pf_level_2,
                      整数pf_level_3,整数ls_level_1,
                      整数ls_level_2,整数ls_level_3,
                      布尔值特里林洛斯)

棘轮钥匙是“仅向一个方向移动”的钥匙。这个名字是我的,在 Barishpolts 的描述中,它被称为“第二个追踪策略”(与“第一个”相反,带有“标准” - 进一步止损),在 Barishpolts 的版本中金四世- 所谓的“三级”尾随。这个想法:快速转移到盈亏平衡点,并以小额利润逐步跟踪(之后建议使用不同的跟踪方法,例如标准方法,或我的标准“逐步”或上述任何一种)。这种追踪的可行性——“绝对大多数头寸至少在一段时间内获利”,因此应尽快将止损移至盈亏平衡。如果它提前“关闭”,但开盘信号仍然存在,则有可能重新进入。一般来说,会有大量交易以盈亏平衡的方式平仓,也可能有一些交易获得不错的利润——这些交易在开仓后向盈利方向大幅波动。作者强调,这种追踪并不是为了“点差”,而是为了实现低比例无利可图的交易。

参数:
票 -
唯一的订单号(在调用函数之前选择)订单选择());
pf_level_1- 将止损移至盈亏平衡点的利润水平(以点为单位);
pf_level_2- 将止损从+1移动到距离的利润水平(以点为单位)pf_level_1开盘价的点数;
pf_level_3 -移动止损的利润水平(以点为单位)pf_level_1pf_level_2开盘价的点数(函数操作结束);
ls_level_1 -当头寸利润达到 +1 时(即在 +1 时,止损将移至ls_level_1);
ls_level_2- 在价格最初低于开盘价的情况下设置止损的距离ls_level_1,然后上涨(即有损失,但开始减少 - 不允许它再次增加);
ls_level_3 -在价格最初低于开盘价的情况下设置止损的距离ls_level_2,然后上涨;
特里林洛斯 ->是否将止损移至“无利可图”区域,即初始止损与开盘价之间的区间(真 - 追踪,假 - 追踪仅在新止损“优于”开盘价、“盈利”时激活)。

该想法的作者建议对欧元兑美元使用以下值:“5、10、25”,即在+5(即“补偿”点差并获得更多5个利润点)时,止损移至+1(在手动交易期间,建议“记住这个数字”,以免诱惑交易者),在+10点时,止损移至+5,在+25点利润时,止损为移动到+10,价格“放开”(可以通过其他方法收紧)。作者没有描述损失区间函数的类似部分,它是由他的追随者在讨论中开发的。有证据表明,作者(相当成功)在他的投资项目上使用了这种方法进行交易,这可能是他的交易中利润率非常高的因素之一。同时,应该注意的是,这种尾随算法非常具体,可能并不适合所有人。

8. Trailing by price channel (suggested by 画谜)。

空白按价格通道追踪(整数电子票,整数 iBars_n,整数i缩进)

参数:
电子票务 -
唯一的订单号(在调用函数之前选择)订单选择());
iBars_n- 通道周期(分别寻找最高价和最低价的柱数 - 通道的上边界和下边界);
缩进- 从通道边界设置止损的缩进(以磅为单位)。

价格通道追踪的结果实际上与蜡烛影追踪的结果一致(见上文),并且在某种程度上类似于分形追踪,尽管它在“概念”和“可行性”上有所不同。

9. 落后于移动平均线。

空白追踪MA(整数电子票,整数iTmFrme,整数iMAP 期间,整数iMA移动,
                  整数MA方法,整数iAppl价格,整数移动,整数i缩进)
这个想法基本上与价格通道的追踪“半步之遥”。该函数传递仓单、所需的时间范围、设置止损的 MA 偏移量(以点为单位)以及 MA 参数(与标准 iMA() 中的参数类似)。考虑到移动平均线的性质,很容易猜测该算法能够在趋势期间产生相当好的收紧,尽管在盘整期间它会“混淆”价格并经常导致过早平仓。然而,可以适当地改变追踪参数(特别是平均的方法和周期)以满足市场情况(例如考虑到波动性)。

参数:
电子票务 -
唯一的订单号(在调用函数之前选择)订单选择());
iTmFrme -计算移动平均线的图表周期;允许的输入选项:1 (M1)、5 (M5)、15 (M15)、30 (M30)、60 (H1)、240 (H4)、1440 (D)、10080 (W)、43200 (MN);
iMAPeriod -计算移动平均线的平均周期;
iMAShift -指标相对于价格图表的移动;
iMA方法-平均法;允许的输入选项:0 (MODE_SMA)、1 (MODE_EMA)、2 (MODE_SMMA)、3 (MODE_LWMA);
iAppl价格 -适用价格;输入选项:0 (PRICE_CLOSE)、1 (PRICE_OPEN)、2 (PRICE_HIGH)、3 (PRICE_LOW)、4 (PRICE_MEDIAN)、5 (PRICE_TYPICAL)、6 (PRICE_WEIGHTED);
iShift -相对于当前柱向后移动指定的周期数;
i缩进 -距离 MA 值的缩进(以点为单位)以设置止损。


10.“五十五”尾随。

空白尾随五十五十(整数电子票,整数iTmFrme,双倍的d 系数,
                        布尔值bTrlinloss)

想法如下:当另一根柱线收盘时,将止损与当前价格之间的距离减小 dCoeff 倍(初始值为 0.5,因此得名)。例如,有一个未平仓买入仓位,止损为 40 点。当入市的柱线关闭时,买价将比开盘价高 42 点。如果选择唯一的“盈利”(bTrlinloss==true) 追踪模式,则取开盘价到当前价格的距离 - 42 点,乘以 dCoeff(例如 0.5),得到 21 点,将止损移至 +21。假设在下一根柱线收盘时利润达到+71 点。那么当前止损与价格的差值是71-21=50,这个值的一半是50*0.5=25,所以新的止损必须比前一个高25点(距开盘价21+25=46点)。

当使用所描述的尾随模式时,“盈利”(bTrlinloss==true),仅当新止损“优于”开盘价时才移动止损。如果bTrlinloss 设置为 false,那么追踪也将在损失区域中执行(即在开盘价和止损之间的区间内,顺便说一下,必须定义该值(不等于 0)才能使该元素起作用)。也就是说,如果使用上述变体,则在下一个柱线收盘时,止损将移至止损与当前价格之间的 0.5 距离,而不是开盘价与当前价格之间的距离(在止损为 40 点且利润为 42 点时,该距离将等于 (40+42)/2 = 82/2 = 41 点,止损将设置在距开盘价 +1 点的位置。在利润为 71 的第二根柱线处分:a) 71 - 1 = 70,b) 70*0.5 = 35,c) 1 + 35 = 36 分 可以看出,这个变体将以更大的“距离”开始,并且会落后于第一个变体。其主要功能是在负面发展期间收紧止损。例如,如果在第一根柱线关闭后,利润达到 -10 点,则bTrlinloss==true: a) 求出价格到止损的距离,|-40 + (-10)| = 30 点,b) 计算该值的一半 - 30*0.5 = 15 点,c) 将止损移向此距离的利润:-40 + 15 = -25。

尽管账户受到保护,不会遭受大额损失,但追踪损失会导致提前关闭的数量增加(也有小额损失)。

dCoeff -the coefficient that determines the number of times to decrease the distance between the price at the moment the bar closes and the current stop loss;

bTrlinloss -在无利可图的区域激活追踪。

11.“KillLoss”尾随。

空白杀戮损失(整数电子票,双倍的d速度系数)
我在开发组合类型尾随的过程中提出了这种维护的想法,其中包括上述几种(即 Barishpolts 的“棘轮”尾随和分形的尾随)。根据这个想法,它被设计为仅在亏损区域(当仓位处于亏损状态时)发挥作用。例如,如果入场明显错误,损失迅速增加,价格迅速接近初始止损,那么建议通过以等于或大于价格的速度将止损向价格移动来限制可能的损失。这就是杀戮损失函数确实如此。一旦启动,它会在终端的全局变量中“记住”止损和价格之间的距离,并且将来如果价格接近止损 X 点,则将止损移动到 X 点*d速度系数对其的系数。上述系数既可以是一个常数(例如,1 - 价格逼近每点,止损将移动 1 个点,或 1.5 - 止损将以比价格速度快 1.5 倍的速度向价格移动),也可以是根据市场状况而变化的变量值(例如,其波动性 - “如果市场波动且损失不断增加,则更快地削减止损”)。当价格向盈利方向回滚(损失减少)时杀戮损失函数什么也不做。附:请记住,该函数在运行期间使用终端的 2 个全局变量 -斯迪夫泽票,后者也用在上面的一些尾随函数中。请小心,如有必要(例如在联合或交替使用这些函数期间),请更改其中一个函数中的全局变量的名称。

以上所有功能都集中在TrailingFuncLib.mq4库文件,附加到文章标题。对我来说使用库更方便,虽然它有点慢,但是你可以将这些功能包含在你的程序中。我还附上了名为 EA 的示例我的分形以及包含的功能。有人可能也对 EA 感兴趣。

2007 年 8 月 11 日。对于那些通过手动控制部分交易(例如,开仓,仅仅因为某些策略几乎无法算法化)和使用脚本和 MQL4 专家控制另一部分交易(例如,头寸维护和平仓)来进行“半自动”交易的人,我基于库的上述每个跟踪函数开发了 EA。他们在TrailingExperts.zip档案。因此,现在,手动开仓后,您只需指定票据(仓位的唯一编号)并设置必要的参数,即可运行具有所需追踪类型的 EA。而且,如有必要,您还可以随着市场情况的变化,轻松地将一种跟踪类型更改为另一种跟踪类型,只需运行另一位专家即可。更详细的说明可以在每个 EA 的注释中找到。我真心希望这些程序对您的工作有用。

我最近才开始学习 MQL4 语言(2007 年 3 月底)。因此,我很乐意接受有关上述功能的任何建设性注释、提示、建议、想法等。我希望它们对你有用。

此致,
尤里·朱班。


附件下载

📎 MyFractalsgexamplea.mq4 (8.17 KB)

📎 TrailingFuncLib.mq4 (58.4 KB)

Source: MQL5 #7108

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录