English Русский Deutsch 日本語
preview
MQL5 简介(第 18 部分):沃尔夫波浪形态简介

MQL5 简介(第 18 部分):沃尔夫波浪形态简介

MetaTrader 5交易 |
32 1
Israel Pelumi Abioye
Israel Pelumi Abioye

概述

欢迎回到 MQL5 入门系列的第 18 部分!本部分将继续以我们迄今为止探索的所有内容为基础,运用我们标志性的项目式方法,通过真实案例帮助您提高 MQL5 技能。在第 17 部分中,我们重点介绍了趋势线突破和反转设置,展示了如何构建能够对关键水平做出反应并根据趋势线附近的价格行为进行交易的 EA 交易系统。

在本文中,我们将更进一步,探索一种更高级的图表形态 —— 沃尔夫波浪。与严重依赖简单支撑和阻力突破的基本模式不同,沃尔夫波浪涉及一个精确的五点结构,旨在预测价格向特定目标线的走势。它是一个强大的工具,可以更精确地预测反转和及时入场。 

本部分将重点解释沃尔夫波浪形态背后的概念,包括如何识别看跌和看涨形态。你将学会如何在图表上发现这些形态,并了解定义有效沃尔夫波浪结构的条件。本节还将阐述以编程方式识别形态并基于此创建 EA 交易的框架。我们将在下一篇文章中将此逻辑应用于 MQL5,以自动识别 沃尔夫波浪并基于该形态构建 EA 交易系统。



1.沃尔夫波浪形态

沃尔夫波浪是可以用来识别市场方向可能转变的一种反转图表形态。价格走势由五个不同的波浪组成。要绘制这五个点,这种形态取决于找到重要的波动高点和低点。 确定这五个点之后,该形态表明价格将在第 5 个点反转,并朝着预期从第 1 点到第 4 点绘制的目标线方向前进。为了进一步提高策略的准确性,它还估计了预测的目标区域,并使用斐波那契扩展工具验证了形态。

看跌沃尔夫波浪形态

在看跌的沃尔夫波浪形态中,必须按顺序找到五个不同的价格点,每个价格点都有明确的结构原则。该形态必须以第 1 浪开始,且第 1 浪必须是波动高点。第 2 浪必须放在第 1 浪的下方,因为它是一个低点。第 3 浪是一个超过第 1 浪的高点,并且落在第 1 浪和第 2 浪之间价格走势的预定斐波那契扩展范围内。然后,形成第 4 浪,这是一个波动低点,它必须保持在第 2 浪之上,同时低于第 3 浪和第 1 浪。

由于第 5 浪是高于第 3 浪的波动高点,并且需要落入第 3 浪和第 4 浪之间走势的特定斐波那契扩展范围内,因此它最终成为最关键的点。由于第 5 浪的完成通常表明上涨行情过度,因此,一旦满足所有这些条件,市场就被认为已经准备好向下反转。

图 1. 看跌沃尔夫波浪形态

第 3 浪和第 4 浪的幅度至少应为第 1 浪和第 2 浪的 70%,从而提高反转的准确性。三条趋势线对于识别沃尔夫波形态至关重要。为了更好地定义该形态的上部结构,第一条趋势线是从第 1 浪到第 3 浪绘制的。下边界由第二条趋势线形成,该趋势线连接第 2 浪和第 4 浪。这两条线汇聚形成的结构在视觉上勾勒出了形态的轮廓。第三条趋势线发挥了更具战略性的作用,它是从第 1 浪到第 4 浪绘制的。它有助于确定第 5 波的预期轨迹。最后这条趋势线是交易入场的关键参考点,因为它经常表明当价格达到或接近它时可能会出现反转。

看涨沃尔夫波浪形态

在看涨的沃尔夫波浪形态中,必须按特定顺序识别五个不同的波动点,每个波动点都必须遵循精确的结构规则。该形态始于第 1 浪的低点。接下来是第 2 浪,形成一个需要位于第 1 浪之上的波动高点。然后,第 3 浪被认定为位于第 1 浪和第 2 浪之间走势的特定斐波那契扩展范围内的波动低点,并且跌破了第 1 浪。随后,第 4 浪看起来像是一个波动高点,需要上升到第 1 浪和第 3 浪之上,但保持在第 2 浪之下。

这种看涨形态中最重要的元素是第 5 浪。它必须位于从第 3 浪到第 4 浪的特定斐波那契扩展范围内,并且被认为是发生在第 3 浪下方的波动低点。第 5 浪完成后,市场被认为已经过度向下延伸,这表明向上反转的可能性很大。

与看跌形态一样,看涨的沃尔夫波浪形态也依赖于波浪之间的对称性。理想情况下,第 3 波到第 4 波的过渡时间应该与第 1 波到第 2 波的过渡时间一样长。更具体地说,从第 1 波到第 2 波的过渡应该与从第 3 波到第 4 波的过渡至少有 70% 的相似度。

三条趋势线为看涨的沃尔夫波浪提供了重要的确认。从第 1 浪到第 3 浪绘制的初始趋势线定义了该形态的底部结构。第二条趋势线连接第 2 浪和第 4 浪,确定了该结构的上边界。这两条趋势线通常会形成一个更窄、收敛的形状。第三条也是最重要的一条趋势线显示的是从第 1 浪到第 4 浪。它有助于预测第 5 浪的预期轨迹,是交易入场的重要参考点。

图 2. 看涨沃尔夫波浪形态

识别波形

要识别沃尔夫波,我们首先必须了解如何检测波动高点和波动低点。在之前的文章中,我解释了如何识别这些关键点。要形成一个高点,特定柱形的最高价必须高于其前后一定数量的柱形的最高价。同样,当一根柱形的最低价低于其周围指定数量的柱形的最低价时,就会出现波动低点。这些波动点是确定沃尔夫波浪形态五浪结构的基础。如果不能准确检测出这些特征,就无法可靠地识别出其余的形态。

一旦准确检测到波动的高点和低点,下一步就是将它们组织成定义沃尔夫波浪形态的五浪结构。 每道浪都必须按照一定的顺序与其他浪连接。例如,第 3 浪必须在运动的合法斐波那契扩展范围内,而第 1 浪到第 2 浪确定起始方向。这种有组织的排列方式保持了形态的几何对称性和预测能力。在尝试将此序列放入 EA 交易系统之前,正确创建该序列至关重要。

示例:

//+------------------------------------------------------------------+
//| FUNCTION FOR SWING LOW                                           |
//+------------------------------------------------------------------+
bool IsSwingLow(const double &low_price[], int index, int lookback)
  {
   for(int i = 1; i <= lookback; i++)
     {
      if(low_price[index] > low_price[index - i] || low_price[index] > low_price[index + i])
         return false;
     }
   return true;
  }

//+------------------------------------------------------------------+
//| FUNCTION FOR SWING HIGH                                          |
//+------------------------------------------------------------------+
bool IsSwingHigh(const double &high_price[], int index, int lookback)
  {
   for(int i = 1; i <= lookback; i++)
     {
      if(high_price[index] < high_price[index - i] || high_price[index] < high_price[index + i])
         return false;
     }
   return true;
  }

图 3. 波动高点和低点

可以使用 IsSwingLow() 函数找到价格图表的波动低点。当一根柱形的最低价低于其周围柱形的最低价时,就会出现波动低点。该函数接受以下输入:一个低价数组、一个回溯数(指定当前柱前后要比较的柱数)以及一个要检查的特定索引。然后使用该函数将当前最低价与周围每个柱形进行比较。如果当前柱形不是摆波动低点,则该函数返回 false。如果当前低点低于周围任何一个低点,则返回 true,表示当前低点是波动低点。

同样,识别波动高点是 IsSwingHigh() 函数的职责。当图表上某根柱形的最高价超过其前后两根柱形的最高价时,就称为波动高点。与 IsSwingLow() 函数类似,此函数比较的是高价而不是低价。为了确定目标指数周围的柱形是否有更高的峰值,它会遍历这些柱形。如果某个柱形是波动高点,则该函数返回 false,并且当前柱形不是波动高点。如果当前柱形的最高价高于其周围所有柱形的最高价,则确认出现波动高点。

在研究沃尔夫波浪等基于波浪的形态时,这些函数对于定位价格数据中的峰值和谷值至关重要。在这些形态中,波动的高点和低点相互关联,从而产生波浪。这些功能使 EA 交易系统能够通过程序识别某些转折点,从而根据真实的市场行为构建合法的波浪结构。

在这两个函数中,lookback 参数都至关重要。它指定要检查的当前柱形两侧的柱形数量。更大的 lookback 值要求价格波动与周围的价格活动更加明显,从而减少错误信号。识别技术形态中波浪的逻辑基于这些函数,这些函数在整个 EA 中经常用于识别可能的交易设置。

获取柱形数据并识别波动

与往常一样,使用任何图表形态都意味着您直接与价格走势进行交互。要有效分析价格走势,第一步也是最关键的一步是从图表中获取柱形数据。如果没有柱形数据,就无法识别定义图表形态(如沃尔夫波浪)所需的波动高点和波动低点。 对于预先确定的最近几根柱形,我们将检索开盘价、最高价、最低价、收盘价和时间数据。为了帮助识别重要的价格转折点,这些值将保存在数组中,并通过之前的柱形进行扫描。我们可以通过确定这些波动位置来开始识别可能类似于沃尔夫波模式的波浪的产生。之后的一切,例如确定斐波那契扩展、确认形态结构和绘制趋势线,都基于准确的波动检测。

示例:
input ENUM_TIMEFRAMES timeframe = PERIOD_CURRENT;
int bars_check  = 500;
datetime time_bar;
double total_symbol_bars;

double open[];
double close[];
double low[];
double high[];
datetime time[];

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   total_symbol_bars = Bars(_Symbol, timeframe);
   time_bar = iTime(_Symbol, timeframe, 0);
   CopyOpen(_Symbol, timeframe, time_bar, bars_check, open);
   CopyClose(_Symbol, timeframe, time_bar, bars_check, close);
   CopyLow(_Symbol, timeframe, time_bar, bars_check, low);
   CopyHigh(_Symbol, timeframe, time_bar, bars_check, high);
   CopyTime(_Symbol, timeframe, time_bar, bars_check, time);
  }

//+------------------------------------------------------------------+
//| FUNCTION FOR SWING LOW                                           |
//+------------------------------------------------------------------+
bool IsSwingLow(const double &low_price[], int index, int lookback)
  {
   for(int i = 1; i <= lookback; i++)
     {
      if(low_price[index] > low_price[index - i] || low_price[index] > low_price[index + i])
         return false;
     }
   return true;
  }

//+------------------------------------------------------------------+
//| FUNCTION FOR SWING HIGH                                          |
//+------------------------------------------------------------------+
bool IsSwingHigh(const double &high_price[], int index, int lookback)
  {
   for(int i = 1; i <= lookback; i++)
     {
      if(high_price[index] < high_price[index - i] || high_price[index] < high_price[index + i])
         return false;
     }
   return true;
  }

解释:

为了控制它检查的历史柱形数量,该 EA 交易系统初始化了 timeframe 和 bars_check 等重要变量。为了识别波动和图表形态,它还声明了用于存储柱形数据的数组。该 EA 使用 Bars() 和 iTime() 函数来确定有多少根柱形以及何时开始复制数据。然后,Copy*() 函数将历史价格数据加载到数组中进行分析。

对于一定的时间段和一定数量的柱线,诸如 CopyOpen() 之类的函数会将特定的价格数据(例如开盘价、收盘价、最高价或最低价)加载到数组中。虽然它们针对不同的价格类型,但所有函数都遵循相同的框架。 IsSwingLow 和 IsSwingHigh 函数通过检查柱形的最低价或最高价是否比回溯范围内的周围柱形更极端,来帮助识别关键的价格转折点。如果满足条件,则该柱形被标记为有效波动点。

要找到表征沃尔夫波浪等图表形态的五个波浪点,需要使用这些函数。事实上,只要我们继续使用图表形态,这些波动检测功能就会一直有用。它们是该方法的基石,与本系列的其他文章一样,这篇文章扩展了之前提出的基本思想。然而,每一篇新文章都应该包括对它们的清晰解释,特别是对于只关注本系列这一部分而没有阅读其他部分的读者。

图 4. 柱形数据


2.构建 EA 交易

EA 的工作原理

开发沃尔夫波浪 EA 交易系统需要理解有效买卖机会背后的逻辑。EA 需要能够识别历史价格数据中的这些波动,并验证它们是否满足某些要求,例如对称性和斐波那契对齐,才能有效运行。

在开始实际编码之前,概述指导 EA 决策的基本框架至关重要。这包括明确什么是合格的形态,何时考虑可能的入场点,以及如何避免虚假的形态。如果建立了该框架,EA 交易系统只会对符合传统沃尔夫波浪结构的高概率设置做出响应。

文章的这一部分为后续将形态逻辑转化为程序步骤奠定了基础。我们将讲解如何使用关键波动点以可视化的方式呈现图表,以及如何准备 EA 在分析中使用的数据。

卖出逻辑

  • 该 EA 将检测出符合看跌沃尔夫波浪形态第 1 浪、第 2 浪、第 3 浪和第 4 浪条件的四个点。
  • 它会在图表上画出三条趋势线。第一根连接第 1 浪和第 3 浪,勾勒出上部结构。第二根连接第 2 浪和第 4 浪,定义了下部结构。第三条趋势线连接第 1 浪和第 4 浪,用于预测潜在的盈利目标区域。
  • 图表中还将添加斐波那契扩展对象,分别对应第 1 浪和第 2 浪,以及第 3 浪和第 4 浪。这有助于验证第 3 浪和第 5 浪是否符合基于沃尔夫波浪结构的必要扩展标准。
  • 该 EA 会监控价格突破并收于从第 1 浪到第 3 浪绘制的趋势线之上的看涨突破。
  • 突破发生后,EA 会等待确认柱形,即向下穿过同一趋势线并收于其下方的阴线柱形。
  • 一旦确认反转的柱形收盘,EA 就会立即下达卖单。
  • 然后,它会评估突破柱形和反转柱形之间的所有柱形,以找到该范围内的最高价。该高点被视为第 5 浪的顶部,并用作止损位。
  • 止盈目标将会被指定。它允许交易持续进行,直到价格达到从第 1 浪到第 4 浪绘制的预测趋势线。这条趋势线是最终的止盈触发点。
  • 当价格触及第 1 浪至第 4 浪趋势线时,EA 会自动平仓卖单。

图 5. 卖出逻辑

买入逻辑

  • 该 EA 将检测出符合看涨沃尔夫波浪形态第 1 浪、第 2 浪、第 3 浪和第 4 浪条件的四个点。
  • 它会在图表上画出三条趋势线。第一条连接第 1 浪和第 3 浪,定义了下部结构。第二条连接第 2 波和第 4 波,形成上边界。第三条趋势线连接第 1 浪和第 4 浪,用于预测潜在的盈利目标区域。
  • 图表中还将添加斐波那契扩展对象,分别对应第 1 浪和第 2 浪,以及第 3 浪和第 4 浪。这有助于验证第 3 浪和第 5 浪是否落在正确的沃尔夫波浪形态所期望的扩展范围内。
  • 该 EA 会监控价格跌破并从第 1 浪到第 3 浪绘制的趋势线收盘的看跌突破。
  • 突破之后,EA 会等待确认柱形,即一根向上穿过同一趋势线并收于其上方的阳线。
  • 一旦确认柱形关闭,EA 会立即下达买入订单。
  • 然后,EA 会检查突破柱形和反转柱形之间的所有柱形,以确定该范围内的最低价。该低点被视为第 5 浪的底部,并用作止损位。
  • 止盈目标将会被指定。交易将一直保持开放状态,直到价格达到从第 1 浪到第 4 浪绘制的预测趋势线,该趋势线将作为盈利目标区域。
  • 当价格触及连接第 1 浪和第 4 浪的趋势线时,EA 会自动平仓买入交易。

图 6. 买入逻辑

请注意:  本项目旨在教授 MQL5 编程和图表形态策略,而非用于实盘交易。在实际市场中使用任何策略之前,务必咨询金融专家。


结论

本文介绍了沃尔夫波浪形态的概念,包括其结构以及基于该形态构建 EA 交易系统所需的逻辑。我们探讨了如何利用波段高点和低点来识别有效的波浪点,以及指导买卖设置的关键原则。在下一篇文章中,我们将探讨如何在 MQL5 中以编程方式实现此逻辑,通过自动交易将沃尔夫波浪策略变为现实。

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

附加的文件 |
最近评论 | 前往讨论 (1)
Alamdar
Alamdar | 13 7月 2025 在 06:50
它只是广告,不起作用
交易策略 交易策略
各种交易策略的分类都是任意的,下面这种分类强调从交易的基本概念上分类。
从基础到中级:事件(一) 从基础到中级:事件(一)
鉴于目前所展示的一切,我认为我们现在可以开始实现某种应用程序,以便直接在图表上运行某些交易品种。然而,首先我们需要讨论一个对初学者来说可能相当困惑的概念。也就是说,在 MQL5 中开发并用于在图表上显示的应用程序的创建方式与我们迄今为止看到的不同。在本文中,我们将开始更好地理解这一点。
新手在交易中的10个基本错误 新手在交易中的10个基本错误
新手在交易中会犯的10个基本错误: 在市场刚开始时交易, 获利时不适当地仓促, 在损失的时候追加投资, 从最好的仓位开始平仓, 翻本心理, 最优越的仓位, 用永远买进的规则进行交易, 在第一天就平掉获利的仓位,当发出建一个相反的仓位警示时平仓, 犹豫。
数据科学和机器学习(第 35 部分):MQL5 中的 NumPy — 用更少代码制作复杂算法的艺术 数据科学和机器学习(第 35 部分):MQL5 中的 NumPy — 用更少代码制作复杂算法的艺术
NumPy 库几乎为所有 Python 语言编程的机器学习算法提供核心动力,在本文中我们即将实现一个类似的模块,其收集了所有复杂的代码,辅助我们构建各种类的复杂模型和算法。