English Русский Español Deutsch 日本語
preview
您应当知道的 MQL5 向导技术(第 56 部分):比尔·威廉姆斯(Bill Williams)分形

您应当知道的 MQL5 向导技术(第 56 部分):比尔·威廉姆斯(Bill Williams)分形

MetaTrader 5交易系统 |
15 0
Stephen Njuki
Stephen Njuki

概述

比尔·威廉姆斯的分形指标在已知收集品中一个关键且重要的指标。它主要识别所交易品种价格动作中的逆转点。基于分形的概念,作为一个重现的 5-柱线形态,如果 5-柱线的中间柱线最高价是最高点,往往被标记为看跌;如果中间柱线的最低价是最低点,则被标记为看涨。我们会像以往的 MQL5 向导文章一样,考察该指标的一些可用形态。


同向的连续分形

对于我们的第一个形态,形态-0,多头形态定义为一连串多头分形低点在/或接近前低点的位置。这通常被解读为市场此刻正在寻找支撑。重点要注意,连续分形低点是指低点之间没有分形高点。这是一个重要指标,因为典型形态是分形高点紧随分形低点交替出现。不过,对于看涨形态,这被认为表明不同买家在相似的价位入场,这再度夯实了在上涨前会有一个积累阶段的观点。

相较之,多个连续看跌分形高点可能映射出价格无法突破的阻力位。这种强烈的抵触(或在较大时间帧反复抵触)往往意味着强烈的卖压,以及可能的下跌趋势持续或开始。

我们实现的 MQL5 版本形态-0 如下:

//+------------------------------------------------------------------+
//| Check for Pattern 0.                                             |
//+------------------------------------------------------------------+
bool CSignalFractals::IsPattern_0(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && FractalLow(X() + 1) != 0.0 && FractalLow(X()) != 0.0)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && FractalHigh(X() + 1) != 0.0 && FractalHigh(X()) != 0.0)
   {  return(true);
   }
   return(false);
}

默认情况下,内置指标套件中包含比尔·威廉姆斯分形指标。它需要做一些调整,在于它的上边界/高点、和下边界/点低缓冲区的很多数值在初次用到时会产生无效数字错误。因此,我们创建一个修改版,引入两个函数:FractalHigh 和 FractalLow。两者的代码清单如下:

double            FractalHigh(int ind)
{  //
   m_high.Refresh(-1);
   if(m_high.MaxIndex(ind, 5) == ind)
   {  return(m_high.GetData(ind));
   }
   return(0.0);
}

double            FractalLow(int ind)
{  //
   m_low.Refresh(-1);
   if(m_low.MinIndex(ind, 5) == ind)
   {  return(m_low.GetData(ind));
   }
   return(0.0);
}

在形态-0 函数中,我们 在检查看多信号时,简单地据前两根连续柱线调用 FractalLow 函数,或寻找看跌形态时同样调用 FractalHigh。如果需要过滤更多假信号,读者可增加连续柱线的数量来自定义。正如通常情况,在它们可获信任前,较少交易需要覆盖更长区间测试。我们针对该指标所有形态的测试,都依据 GBPUSD 的 2024 年 H4 时间帧执行,而形态已据 2023 年做过优化了。形态-0 的前向漫游为我们给出以下报告。

r0

形态-0示意强劲趋势延续。因此,如果当时已获利了结,它有助于顺应盛行趋势重新开仓。


分形趋势突破

我们的第二个形态-1,看涨形式的定义首先参照一个曾作为阻力的看跌分形。看涨形态出现在价格逆势而上,果断突破这个分形高点之时。该突破被解读为买方压倒卖方,令原阻力位折返为支撑位,暗示趋势逆转。如果它发生在一个更宽的看涨趋势中,这也可能是强劲趋势的延续,而在小的时间帧内这并不明显。

看跌版本形态-1 则如预期般恰恰相反。看涨的低点分形之后,紧随价格将跌破分形低点。该突破被视为卖方掌控局面、为下跌趋势奠定基础的信号。我们的 MQL5 实现如下:

//+------------------------------------------------------------------+
//| Check for Pattern 1.                                             |
//+------------------------------------------------------------------+
bool CSignalFractals::IsPattern_1(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && FractalHigh(X() + 1) != 0.0 && Close(X()) > FractalHigh(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && FractalLow(X() + 1) != 0.0 && Close(X()) < FractalLow(X() + 1))
   {  return(true);
   }
   return(false);
}

在我们上面的代码中,我们检查的是上一根柱线上的分形点,然后将当前收盘价与该分形的价格进行比较。正如逻辑论调,分形高点(看跌分形)与看涨形态相关,分形低点对看跌形态亦如此。

基于 2023 年开盘和收盘阈值进行优化,前瞻测试则从 2024年开始,为我们给出以下结果:

r1

形态-1 之所以高出一筹,是因为与延续形态-0 不同,这可以作为逆反。有因于此,最好将它和其它指标配合使用。


分形内部(最低价的低点,最高价的高点)

形态-2 的看涨形式定义为看涨分形(波段低点)接近之前较宽分形范围。价格动作往往在该范围内压缩,低位分形几乎形成一条直线。故此,当价格移至该狭窄范围上方时,即确认看涨倾向,因为买方将价格推离盘整区域。

而翻过来说,随着看跌分形形成,如果摆动高点在先前的看跌分形范围内形成集群,这类似标记犹豫不决的阶段。一旦价格跌破该范围下限,则支撑失效,突破下行将确认看跌走势。这是我们实现的该方法 MQL5 版本:

//+------------------------------------------------------------------+
//| Check for Pattern 2.                                             |
//+------------------------------------------------------------------+
bool CSignalFractals::IsPattern_2(ENUM_POSITION_TYPE T)
{  CArrayDouble _buffer;
   if(T == POSITION_TYPE_BUY)
   {  for(int i = 0; i < m_periods; i++)
      {  if(FractalLow(X() + i) != 0.0)
         {  _buffer.Add(FractalLow(X() + i));
         }
      }
      if(_buffer[_buffer.Maximum(0, _buffer.Total())] - _buffer[_buffer.Minimum(0, _buffer.Total())] <= fabs(Close(X()) - Close(X() + 10)))
      {  return(true);
      }
   }
   else if(T == POSITION_TYPE_SELL)
   {  for(int i = 0; i < m_periods; i++)
      {  if(FractalHigh(X() + i) != 0.0)
         {  _buffer.Add(FractalHigh(X() + i));
         }
      }
      if(_buffer[_buffer.Maximum(0, _buffer.Total())] - _buffer[_buffer.Minimum(0, _buffer.Total())] <= fabs(Close(X()) - Close(X() + 10)))
      {  return(true);
      }
   }
   return(false);
}

实现这一形态需要,正如我们每次的方式,会用到一个数组标准类。这是因为我们正寻找的是覆盖固定区间的分形点,而我们能提取的数量是不确定的。据此,我们还需要了解这些分形点的标准差含义。

因为我们的数组类不像向量数据类型那样提供标准差函数,亦因计算密集,故我们选择取这些点的范围来替代。为了感知它们的范围是否被压缩,我们会将其与收盘价趋势的量级进行比较,如果更小,则我们得到确认。

严格来说,这是一个粗略的评估,在于在趋势行情中,当收盘价格变化量级较大时,任何一组分形点范围都会通过该测试。这就是为什么建议读者做一些修改,譬如说比较分形点范围、或其标准差与绝对值。该数值能通过优化来精调。

由向导汇编的智能系统经优化后,据 USDJPY 对,H4 时间帧,运行测试,为我们给出以下结果:

r2

形态-2 为压缩形态,示意突破潜力。在多时间帧中,当时间帧较大时,您会得到较小的分形,通常意味着在扩张之前会出现挤压。


分形背离与价格动作

价格动作背离是我们的形态-3。对于该形态,当价格产生一个低点最低价(持续下行压力的指示),然而对应的看涨分形(波段低点)高于前一波段时,就会见到看涨背离。该背离被解读为看涨,理由是尽管价格下跌,但底部支撑正在增强,暗示看涨逆转马上到来。

另一方面,看跌背离是指价格形成更高的最高价,而看跌分形高点低于之前的高点。该设定通常表明尽管价格在上行,阻力仍在挤压价格,这可能是购买力下降、及您转下行的预警。我们实现的 MQL5 版本如下:

//+------------------------------------------------------------------+
//| Check for Pattern 3.                                             |
//+------------------------------------------------------------------+
bool CSignalFractals::IsPattern_3(ENUM_POSITION_TYPE T)
{  CArrayDouble _buffer;
   if(T == POSITION_TYPE_BUY)
   {  for(int i = 0; i < m_periods; i++)
      {  if(FractalLow(X() + i) != 0.0)
         {  _buffer.Add(FractalLow(X() + i));
         }
         if(_buffer.Total() >= 2)
         {  break;
         }
      }
      if(_buffer[0] > _buffer[1] && Low(X()) < Low(X() + 1))
      {  return(true);
      }
   }
   else if(T == POSITION_TYPE_SELL)
   {  for(int i = 0; i < m_periods; i++)
      {  if(FractalHigh(X() + i) != 0.0)
         {  _buffer.Add(FractalHigh(X() + i));
         }
         if(_buffer.Total() >= 2)
         {  break;
         }
      }
      if(_buffer[0] < _buffer[1] && High(X()) > High(X() + 1))
      {  return(true);
      }
   }
   return(false);
}

编写形态-3 代码还需用到 MQL5 IDE 中可用的标准数组类。主要原因已在形态-2 中提及,不过在本例中我们仅寻找两个分形点,而非覆盖输入参数 “m_periods” 设定周期内的集合。我们结合这两个分形点,和两个价格点极值来确立潜在信号,如上论调。

优化后的前向漫游测试,采用与前述形态类似的品种、时间帧、和测试周期,为我们呈现如下报告:

r3



双胞对立分形(您转区域)

双胞对立分形构成了我们的形态-4。该形态的看涨形式涉及放置两个雷同的分形,一个看涨(在低位)、及一个看跌(在高位)。这两者交错形成了一个犹豫不决的区域。当价格从看涨分形反弹,并升至看跌分形之上时,看涨信号确认。

若看跌形式,序列是一个看涨分形,紧随一个看跌分形。如果价格从看跌(高位)分形反弹,并跌破看涨分形,则卖出信号确认。我们的 MQL5 版本代码如下:

//+------------------------------------------------------------------+
//| Check for Pattern 4.                                             |
//+------------------------------------------------------------------+
bool CSignalFractals::IsPattern_4(ENUM_POSITION_TYPE T)
{  bool _1 = (FractalHigh(X() + 1) != 0.0 && FractalLow(X() + 1) != 0.0);
   bool _2 = (FractalHigh(X() + 2) != 0.0 && FractalLow(X() + 2) != 0.0);
   if(_1 || _2)
   {  if(T == POSITION_TYPE_BUY)
      {  if((_1 && Close(X()) > FractalHigh(X() + 1)) || (_2 && Close(X()) > FractalHigh(X() + 2)))
         {  return(true);
         }
      }
      else if(T == POSITION_TYPE_SELL)
      {  if((_1 && Close(X()) < FractalLow(X() + 1)) || (_2 && Close(X()) < FractalLow(X() + 2)))
         {  return(true);
         }
      }
   }
   return(false);
}

我们的代码用到两个布尔值来检查双胞分形形态。我们已选用 2 个布尔值,因为这种独特形态的影响可能会略微拖后(与滞后对立)。每个数值标记最后一根完整柱线,或其前一根柱线。如果找到该形态,我们只需检查收盘价是否跌破了上面解读的任何关键价位。 

该形态优化后的前向漫游测试为我们给出以下报告:

r4

连续出现的看涨和看跌分形也凸显出市场的另一个犹豫不决点。因此,两侧的突破信号就作为形态-4的信号。


分形确认波段高点 & 低点

对于该形态,即形态-5,我们考察覆盖一连串柱线的价格动作,其与分形基准的相对性。看涨形式定义为看涨分形(往往是潜在支撑位)设定,且后续价格动作并未显著跌破该价位。如果价格继续从该价位反弹,这就强化了其为看涨支撑区域的观点。

相较之,如果设定了一个分形高点,且后续价格动作未超过分形的高点基准,则看跌波段形式确立。此处的论调是,持续无法突破分形区的高位,强化了其作为阻力区间的角色,因此是看跌情绪的信号。我们实现的 MQL5 版本如下:

//+------------------------------------------------------------------+
//| Check for Pattern 5.                                             |
//+------------------------------------------------------------------+
bool CSignalFractals::IsPattern_5(ENUM_POSITION_TYPE T)
{  vector _std;
   _std.Init(5);
   _std.Fill(0.0);
   if(T == POSITION_TYPE_BUY && FractalLow(X() + m_periods) != 0.0)
   {  if(_std.CopyRates(m_symbol.Name(), m_period, 4, 0, m_periods) && _std.Std() <= fabs(Close(X()) - Close(X() + m_periods)))
      {  return(true);
      }
   }
   else if(T == POSITION_TYPE_SELL && FractalHigh(X() + m_periods))
   {  if(_std.CopyRates(m_symbol.Name(), m_period, 2, 0, m_periods) && _std.Std() <= fabs(Close(X()) - Close(X() + m_periods)))
      {  return(true);
      }
   }
   return(false);
}

我们上面的代码不仅用来复制所需的汇率缓冲区,还高效地提取其标准差。我们取该偏离,和收盘价距盛行趋势的量级进行比较,就如我们对形态-2 所做的那样。因此,形态-2 中浮现的瑕疵和注意事项于此均适用,故读者可自由修改附带的代码。

据上述类似的品种、窗口和时间帧优化后,运行一次向前测试,为我们给出如下报告:

r5

在本系列中,之前我未做前向漫游测试,但由于测试窗口非常小,我们现在将其纳入作为标准。而会缺失的是覆盖训练期间的优化运行,因为两者同时进行会让文章过于拥挤。


分形失效波段

形态-6 专注于价格动作突破分形价位“失败”。对于看涨,在牛市分形波段之后,如果价格尝试向下突破且失败,即拒绝新低并快速逆转向上,这往往示意卖方已耗尽,买方需要介入。

相较之,对于看跌,当形成分形高点,并尝试突破该分形高位但失败时,这种“波段失败”被视为卖方掌控局势的信号,价格很可能头朝下跌趋势。MQL5 版本实现如下:

//+------------------------------------------------------------------+
//| Check for Pattern 6.                                             |
//+------------------------------------------------------------------+
bool CSignalFractals::IsPattern_6(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && FractalLow(X() + 2) != 0.0)
   {  if(Low(X() + 1) <= FractalLow(X() + 2) && Close(X()) >= High(X() + 2))
      {  return(true);
      }
   }
   else if(T == POSITION_TYPE_SELL && FractalHigh(X() + 2) != 0.0)
   {  if(High(X() + 1) >= FractalHigh(X() + 2) && Close(X()) <= Low(X() + 2))
      {  return(true);
      }
   }
   return(false);
}

就编码而言,这是我们最直接了当的形态之一。如上论调,我们简单地将之前的最低价与其前的分形低点比较,然后比较收盘价与前一看涨时的两根柱线高点。我们在看跌时,遵照反向过程。至于历史回溯要选择多久,可由读者自行考虑。

在优化后进行前向漫游测试,正如形态0-5 同样的开仓和平仓阈值 ,为我们呈现如下报告:

r6

若后续蜡烛未超过分形高位(或低位),往往被视为抵触。这是趋势耗尽的强烈信号。



围绕移动平均线的分形聚集

我们的第八个形态-7,结合了分形指标与移动平均线。对于看涨设置,当一连串分形低位聚集在移动平均线附近(例如 50-周期均线),这被视为移动平均线充当强支撑位的信号。因此,这些分形低位偏向为买方提供入场机会,一旦价格决定性突破最近的阻力位,甚至移动平均线,这就确认了看涨观点。

同样,看跌形式是指多个分形高位聚集在移动平均线周围,而此刻移动平均线充当阻力位。价格在这些价位反复遭抵触,且明显跌破支撑或移动平均线,则确认看跌倾向。MQL5 版本实现如下:

//+------------------------------------------------------------------+
//| Check for Pattern 7.                                             |
//+------------------------------------------------------------------+
bool CSignalFractals::IsPattern_7(ENUM_POSITION_TYPE T)
{  CArrayDouble _buffer;
   if(T == POSITION_TYPE_BUY)
   {  for(int i = 1; i < m_periods; i++)
      {  if(FractalLow(X() + i) != 0.0)
         {  _buffer.Add(fabs(FractalLow(X() + i) - MA(X() + i)));
         }
      }
      if(_buffer[_buffer.Maximum(0, _buffer.Total())] <= fabs(Close(X() + 1) - Close(X() + m_periods)) && Close(X() + 1) <= MA(X() + 1) && Close(X()) > MA(X()))
      {  return(true);
      }
   }
   else if(T == POSITION_TYPE_SELL)
   {  for(int i = 1; i < m_periods; i++)
      {  if(FractalHigh(X() + i) != 0.0)
         {  _buffer.Add(fabs(FractalHigh(X() + i) - MA(X() + i)));
         }
      }
      if(_buffer[_buffer.Maximum(0, _buffer.Total())] <= fabs(Close(X() + 1) - Close(X() + m_periods)) && Close(X() + 1) >= MA(X() + 1) && Close(X()) < MA(X()))
      {  return(true);
      }
   }
   return(false);
}

形态-7 如同形态-2、形态-3,也用到数组类,但这次是记录分形点与移动平均线之间的缝隙大小。如上论调,我们正在寻找尽可能缩小该缺口的状况,这就是为什么我们从缓冲区内取所有缝隙点的最大值。我们再次将这一量级与盛行趋势进行比较,故提醒读者如上其它形态所述进行调整,譬如形态-6。

按照上述形态优化时所用的品种和输入设置进行前向漫游测试,为我们给出如下报告:

r7

当许多分形在移动平均线附近固定时,它暗示存在一个枢轴区域,并依聚集突破确认延续或逆转。



分形缝隙形态

对于形态-8,看涨信号是当看涨分形低位处于价格缝隙附近(通常在高波动性、或新闻驱动的价格动作期间)。在这种状况下,更细充当支撑区。缝隙处存在分形,则被解读为买家把该区域视作一个机会。一旦缺口被“填补”或维持,很可能会出现上行。

看跌形式还指当一个看跌分形高点出现在价格缝隙附近,或上端开放位置。在这种状况下,缝隙代表了一个阻力位。分形的存在表明卖方正在防守该价位,如果价格开始下行,则会锁定看跌趋势。我们实现的 MQL5 版本如下:

//+------------------------------------------------------------------+
//| Check for Pattern 8.                                             |
//+------------------------------------------------------------------+
bool CSignalFractals::IsPattern_8(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && FractalLow(X() + 2) != 0.0)
   {  if(Low(X() + 1) > High(X() + 2) && Close(X()) >= High(X() + 2))
      {  return(true);
      }
   }
   else if(T == POSITION_TYPE_SELL && FractalHigh(X() + 2) != 0.0)
   {  if(High(X() + 1) < Low(X() + 2) && Close(X()) <= Low(X() + 2))
      {  return(true);
      }
   }
   return(false);
}

对于形态-8,我们只是对价格缺口感兴趣,故我们的上述实现几乎和形态-6 一样直接了当。

按照与上面类似的品种和测试环境设置进行前瞻漫游测试,USDJPY 的 2023 年 H4 时间帧,给出如下:

r8

价格缺口与分形突破的巧合始终放大价格走势。不过,这种设置在新闻驱动的事件中更为常见。



分形排列与斐波那契级别

我们的最终形态是把分形和斐波那契级别结合。当低位分形与关键的斐波那契回撤级别重合时,就会出现看涨排列。在分形所识别支撑、与斐波那契级别重合,强化了支撑区域的强度。因此,这一双重确认充当了健壮的看涨信号 — 如果价格维持该级别。通常,这可能是反弹或趋势延续的信号。

在看跌形式中,高位分形与关键的斐波那契回撤级别排列。这种排列会在那一点强化阻力。如果价格难以突破斐波那契区域,取而代之从重合区向下反转,则看跌信号确认。两种设置的 MQL5 版本编码如下:

//+------------------------------------------------------------------+
//| Check for Pattern 9.                                             |
//+------------------------------------------------------------------+
bool CSignalFractals::IsPattern_9(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && FractalLow(X()) != 0.0)
   {  if(Is_Fibo_Level(X()))
      {  return(true);
      }
   }
   else if(T == POSITION_TYPE_SELL && FractalHigh(X()) != 0.0)
   {  if(Is_Fibo_Level(X()))
      {  return(true);
      }
   }
   return(false);
}

如何为我们的最终形态编码有些难以构思,因为这在手工交易中始终显而易见,但遇到自动化却是困难重重。我们该如何“绘制”和标记斐波那契级别?我们设计了一个底层函数来帮助我们实现这一点,我们称其为 “Is_Fibo_Level()”。其代码给出如下:

bool Is_Fibo_Level(int ind)
{  double _r=0.0;
   vector _h,_l;
   int _size = 3 * PeriodSeconds(PERIOD_MN1) / PeriodSeconds(m_period);
   _h.Init(_size);
   _l.Init(_size);
   if(_h.CopyRates(m_symbol.Name(),m_period,2,0,_size) && _l.CopyRates(m_symbol.Name(),m_period,4,0,_size))
   {  _r = _h.Max()-_l.Min();
      if(_l.Min()-ATR(ind) <= Close(ind) && Close(ind) <= _l.Min()+ATR(ind))
      {  return(true);
      }
      else if(_l.Min()+(0.236*_r)-ATR(ind) <= Close(ind) && Close(ind) <= _l.Min()+(0.236*_r)+ATR(ind))
      {  return(true);
      }
      else if(_l.Min()+(0.382*_r)-ATR(ind) <= Close(ind) && Close(ind) <= _l.Min()+(0.382*_r)+ATR(ind))
      {  return(true);
      }
      else if(_l.Min()+(0.5*_r)-ATR(ind) <= Close(ind) && Close(ind) <= _l.Min()+(0.5*_r)+ATR(ind))
      {  return(true);
      }
      else if(_l.Min()+(0.618*_r)-ATR(ind) <= Close(ind) && Close(ind) <= _l.Min()+(0.618*_r)+ATR(ind))
      {  return(true);
      }
      else if(_h.Max()-ATR(ind) <= Close(ind) && Close(ind) <= _h.Max()+ATR(ind))
      {  return(true);
      }
   }
   return(false);
}

该函数简单地从过去三个月的价格里抽样,一个任意的时间区间显然无法像手工设置那样捕捉关键价位。人们总说,“布丁的证据在于吃“,故大概过于纠结于我们手工的视角,或许就不能转化为交易绩效,这也是我们将其开发成形态-9 的原因,我们简单地寻找分形点与该函数级别之间的重合。ATR 也被用来设定我们非常底层的级别宽度,故如果有三个月窗口内的波动率较低这样的事件,出现大量重叠在所难免。对于感兴趣的读者,这可作为修改时的起点。

如我们针对其它五种形态所做的那样,前向漫游测试为我们给出这样的报告:

r9

因此,这一形态可作为关键逆转区域的确认。在这些系列中,每当我们查看形态时,也考虑过不只用一个形态的选项(如上述 9 种形态),也可将所有形态组合运用。



组合形态

附带的代码涵盖了我们所有 9 种形态,均以自定义信号类的形式。我们在 MQL5 向导中用该类来汇编智能系统。这里这里都有关于如何操作的指南。我们上述进行的单一形态优化和测试,基于分配输入参数映射 — 使用一种特殊索引,形式为 2 的幂次方,幂值是形态的索引。故形态-5 是 2^5,其结果是 32,形态-7 就是 128,依此类推。当配合多个形态交易时,这个输入作为一张映射图,而非指向特定形态的指针。我们有 9 个形态,故参数的最大值是 2^9,即 512 减一(因为我们从零开始计数)。

如果我们据开盘和收盘阈值来优化最佳形态组合,那么我们的最佳输入设置如下:

i_o

据训练数据运行测试,为我们给出以下报告:

r_oll

c_oll

而前向漫游测试,到来年 2024 年,为我们给出以下结果:

r_oll_

c_oll_

我认为这些结果印证了之前文章中强调的观点,即组合多种形态需要交易者具备专业知识。他需要非常具体地组合形态。从优化运行中应当不能寻出答案。我们已考察了各个形态的前瞻测试。这是基于一年如此长度的测试区间,而过去的绩效并不代表未来结果。我还要说,选择信号形态时需要有针对性的方式,而这与平均化对立。



时间帧的重要性

分形的解读高度主观化,取决于所用的时间帧。较高时间帧如 H4、日报、和周线能提供更强、且更可靠的信号,因为它们偏重过滤大量市场杂音。这些时间帧上的分形往往标记着关键支撑和阻力位,而这是机构和长线交易者所关注的。信号生成的形式非常缓慢,这对许多交易者来说可能令人沮丧,但它们一旦形成,往往是高置信度的设置。

翻过另一面,M15、M20、M30 等较低时间帧的出现频率更高,但由于短期价格波动,可靠性较低。它们最适合剥头皮策略,因为更有利快速反应。不过,作为规则,它们更容易出现假突破,需要额外的过滤器来提升准确度。

还有中性时间帧 H1、H2,纸面上应能在两者之间找到折中。邀请读者去探究这一切的真实性;然而,最佳实践表明,在较长时间帧内组合分形效果良好。



结束语

分形在流动性高、且机构兴趣强烈的市场中趋于坚定的存在。低成交量价格尖刺必然会产生假分形,并很快被否定,这就是为何交易量分析、或足迹图表能增加基于分形的决策信心。

话尽于此,我们已考察了这个非常“关键”指标的 9 个独立形态,虽然它在较短时间帧上存在主要缺点,但如果耐心地在较长时间帧内使用,可能会产生有趣的结果,正如我们从某些形态 1 年期的前向漫游测试中所见。

文件 描述
SignalWZ_56.mqh 信号类文件
WZ_56.mq5 智能系统展品的包含文件

本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/17334

附加的文件 |
SignalWZ_56.mqh (23.11 KB)
WZ_56.mq5 (7.99 KB)
MQL5 简介(第 16 部分):利用技术图表形态构建 EA 交易 MQL5 简介(第 16 部分):利用技术图表形态构建 EA 交易
本文向初学者介绍如何构建一个 MQL5 EA 交易,该系统可以识别和交易经典的技术图表形态 —— 头肩顶形态。它涵盖了如何利用价格行为来检测形态,如何在图表上绘制形态,如何设置入场点、止损点和止盈点,以及如何根据形态自动执行交易。
MQL5 中的高级订单执行算法:TWAP、VWAP 和冰山订单 MQL5 中的高级订单执行算法:TWAP、VWAP 和冰山订单
MQL5 框架通过统一的执行管理器和性能分析器,将机构级执行算法(TWAP、VWAP、冰山订单)带给散户交易者,从而实现更流畅、更精确的订单切片和分析。
MQL5交易工具(第二部分):为交互式交易助手添加动态视觉反馈 MQL5交易工具(第二部分):为交互式交易助手添加动态视觉反馈
本文通过引入拖拽面板功能和悬停交互效果,对交易助手工具进行全面升级,使界面操作更直观且响应更迅速。我们优化了工具的实时订单验证机制,确保交易参数能根据市场价格动态校准。同时,我们通过回测验证了这些改进的可靠性。
突破机器学习的局限(第一部分):缺乏可互操作的度量指标 突破机器学习的局限(第一部分):缺乏可互操作的度量指标
无论以何种形式构建可靠的人工智能(AI)交易策略,都有一种强大且普遍存在的力量,正悄然地侵蚀着我们社区的集体努力,本文提到,我们所面临的部分问题,源于对“最优实践”的盲目遵循。通过为读者提供基于现实市场的简单证据,我们说明为何必须摒弃这种做法,转而采用特定领域内的最优实践,这样一来,我们的社区才有可能重振AI的潜在力量。