English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
preview
学习如何基于 Williams PR 设计交易系统

学习如何基于 Williams PR 设计交易系统

MetaTrader 5交易 | 29 九月 2022, 08:48
2 047 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

概述

来自本系列的新文章是关于如何根据最流行的技术指标设计交易,我们将学习如何根据新的技术指标 Williams Percent Range(WPR)设计不同的简单交易系统。 除了详细了解 Williams Percent Range 技术指标外,还可以学习我们如何根据其背后的主要思想有效地运用它。 我相信,如果我们能够理解事物的根源,我们不仅能够有效地运用它,而且能够围绕主要概念、或任何相关工具发现新的认知或思路,从而在交易中获得更卓越和更优秀的结果。 所以,我有一种方式来尝试学习和传授事物的根源,进而越来越加深我们的理解。

我们将在本文中贯穿许多主题,学习以下内容:

  1. Williams' %R 定义
  2. Williams' %R 策略
  3. Williams' %R 策略蓝图
  4. Williams' %R 交易系统
  5. 结束语

即贯第一个主题的内容,就是 Williams' %R 的定义,我们将学习什么是 Williams' %R,它测量什么,以及我们如何手工计算它。 然后,我们将学习如何基于该指标背后的主要概念在简单策略里正确运用该指标,我们将通过 Williams' %R 策略主题了解这一点。 我们将为每个提到的策略设计一个循序渐进的蓝图,来帮助我们创建本文中的主要任务,即通过此指标创建一个交易系统。 该蓝图将在 Williams' %R 策略蓝图主题里完成。 然后,我们将讨论本文中最有趣的主题,即依据 Williams' %R 交易系统主题,创建基于上述策略的一个交易系统。

在以上提到的主题之后,我认为除了学习如何创建一个简单的交易系统,以便能够在 MetaTrader 5 中运用该交易系统自动生成信号之外,我们还应学习该技术指标的基本原理。 我鼓励您自己运用所学的一切,因为这将非常有助于深入理解。 我还奉劝您在真实帐户上使用之前,要测试每个信号策略,以确保它对您有用。

我们将用 MetaTrader 5 交易终端和内置 MetaEditor 编写 MQL5 代码,并以智能系统的形式创建我们的交易系统。 如果您不知道如何获取 MetaTrader 5,或如何编写 MQL5 代码,可以阅读上一篇文章在 MetaEditor 中编写 MQL5主题,从而了解更多信息。

免责声明:所有信息“按原样”提供仅用于教学目的,并非出于交易目的或建议。 这些信息不能保证任何结果。 如果您选择在您的任何交易账户上使用这些材料,您将自行承担风险,您是唯一的责任人。

现在,我们开始学习一种新的工具,它也许是我们交易过程中的一个过渡点,以此获得更好的结果。


Williams' %R 定义

正如我在介绍中提到的,我们将详细了解 Williams' %R 指标。 Williams' %R (WPR) 是 Larry Williams 开发的动量指标。 我们可以说,WPR 是 Stochastic 振荡器的对手,因为它们之间的区别在于它们是如何缩放的,我们也可以说,WPR 也可以如同 Stochastic 那样使用。 如果您想了解更多关于随机指标的信息,可以阅读我以前的文章,学习如何基于 Stochastic 设计交易系统。 WPR 衡量收盘价和高低区间之间的关系。 WPR 指标也在 0 和 -100 之间振荡。 因为 WPR 是一个动量指标,它也可以用来衡量趋势的强度。 如果您需要了解更多关于趋势和趋势类型的信息,您可以阅读前一篇文章中的趋势定义主题,因为它可能有助于理解这一点。 通过观察 -80、-20 和中位 -50 的重要级别,该指标可能会有意义。

尝试将另一个技术工具与该指标相结合是很重要的,例如价格行动工具、图表形态、成交量、和移动平均线,就像我们在这篇关于策略主题的文章所做的那样,因为这样做非常有用,您能够厘清您所研究的工具中的更多层面,而这有助于做出适合的决策。

现在,我们需要知道如何计算 WPR 指标。 简单地说,我们可以按照以下步骤计算:

  1. 计算最高点的最高价 = 计算区间最高点的最高价。
  2. 计算最低点的最低价 = 计算区间最低点的最低价。
  3. WPR = (最高点的最高价 - 收盘价)/(最高点的最高价 - 最低点的最低价) * -100

为了更好地理解,我们需要举一个具有实际值的示例,应用它并计算 WPR,所以,如果我们有以下金融产品的数据。

周期 最高价 最低价 收盘价
1 1.078 1.0678 1.0733
2 1.0788 1.0726 1.0777
3 1.0766 1.0697 1.0727
4 1.0733 1.0662 1.0724
5 1.074 1.0642 1.068
6 1.0749 1.0661 1.0734
7 1.0698 1.0558 1.0689
8 1.0599 1.0532 1.056
9 1.0608 1.046 1.0586
10 1.0565 1.046 1.0466
11 1.0556 1.0429 1.0547
12 1.0444 1.0388 1.0431
13 1.0421 1.035 1.0411
14 1.053 1.0353 1.0379
15 1.0577 1.0502 1.0511
16 1.0586 1.0525 1.0527
17 1.0594 1.0495 1.0555
18 1.0601 1.0482 1.0551
19 1.0642 1.0493 1.054
20 1.0632 1.0505 1.0621
21 1.0579 1.0491 1.052
22 1.0567 1.0491 1.051
23 1.0602 1.0381 1.0547
24 1.0509 1.0359 1.0443
25 1.0486 1.0396 1.0414
26 1.052 1.04 1.0408
27 1.0644 1.0505 1.0515
28 1.0775 1.0611 1.0614
29 1.0749 1.0671 1.0714
30 1.0715 1.0652 1.0699

现在,我们通过计算步骤得到的 WPR 与下面的相同。 请注意,我们所采用的周期默认设置为 14。

1- 获取最高点的最高价。

HH 值

2- 获取最低点的最低价。

LL 值

3- 得到 WPR。

现在,我们已计算出 WPR 值。 它应是一条在 0 和 -100 之间振荡的曲线,用来衡量动量,就像我们提到的一样。 如今,我们不需要手工计算它,因为我们可以在 MetaTrader 5 交易终端中找到它,我们所需要做的就是在可用指标中选择它,步骤如下所示。

W_R 插入

之后,我们将找到其窗口,以确定其参数,如下所示:

 W_R 参数

1- 设置期望的周期。

2- 确定 WPR 指示线的颜色。

3- 确定 WPR 指示线的样式。

4- 确定 WPR 指示线的宽度。

我们还可以通过 “Levels” 选项卡控制指标的级别,如下所示:

W_R lvls

我们在前面的图片中看到,我们有两个级别 -80 和 -20,这两个级别是记录高位读数和低位读数的重要级别。 此外,我们还可以根据我们发现的其它有用级别,视情况添加,譬如,添加 -50 级别,按 “Add”,然后确定要在图表指标窗口上示意的级别。

确定所有所需参数,并按下“确定”后,指标将按如下所示加载到图表上。

 W_R 加载

正如我们在前一张图片中所见,图表下部窗口中的黑线在 0 和 -100 之间摇摆,可衡量动量。 此外,中位 -50 是一个重要的级别,它对价格走势有着重要的洞察力,因为当 WPR 高于 -50 级别时,这意味着价格在计算周期处于高低区间的上半部分,反之亦然,当 WPR 低于 -50 级别,这意味着价格在计算周期处于高低区间的下半部分。 否则,当我们看到指标读数低于 -80 区域时,这意味着低读数,表明价格接近其低点;但当我们看到指标读数高于 -20 区域,这意味着高读数,表示价格接近其高点。 -80 和 -20 的级别是非常重要的区域,因而它们表明价格达到超买和超卖的区域,这与我们稍后将看到的情况相同。


Williams' %R 策略

在这一部分中,我们将学习如何基于指标的主要概念在简单策略里运用 Williams' %R。 我们将根据 Williams %R 指标背后的思路学习三种不同的策略。 第一种策略,我们称之为 Williams %R - OB 和 OS(超买和超卖);第二种策略,可以称之为 Williams %R - 交叉;第三种策略我们将称之为 Williams %R - 均线。 在以下几行中,我们将辨别如何运用这些策略。

  • 策略一: Williams %R - OB 和 OS:

根据这一策略,我们需要根据具体情况在金融产品处于超买或超卖区域时得到通知。 当 Williams %R 值低于 -80 级别时,这将是超卖信号。 当 Williams %R 值高于 -20 级别时,这将是超买信号。

这一策略将有助于在价格达到超买或超卖区域时通知我们,而解读动量状态,能帮助我们预期即将到来的走势。

WPR 值 < -80 --> 超卖

WPR 值 > - 20 --> 超买

  • 策略二: Williams %R - 交叉。

根据这一策略,我们需要在当期 Williams %R、前期 Williams %R(WPR)、和 -50 级别之间出现交叉时产生并捕获买入或卖出信号。 若前期 WPR 低于 -50,而当期 WPR 大于 -50 时,这是买入信号。 若前期 WPR 高于 -50,而当期 WPR 低于 -50 时,这是卖出信号。

这一策略会非常有用,因为它根据交叉点生成买入和卖出信号,交叉点非常重要,即 -50,如果我们结合另一个技术工具来确认这些信号,将更加有效。

前期 WPR < -50 且当期 WPR > -50 --> 买入信号

前期 WPR > -50 且当期 WPR < -50 --> 卖出信号

  • 策略三: Williams %R - MA:

根据这一策略,当生成买入或卖出信号时,我们也需要得到通知,但这将基于另一个条件,因为当要求大于移动平均值,且 Williams %R 值大于 -50 级别时,我们需要得到买入信号。 而当出价低于移动平均值,且 Williams %R 值低于移动平均时,我们需要获得卖出信号。

这一策略令我们能够根据其条件获得更明确的买入和卖出信号,因为在此处,我们结合了另一种技术工具,即移动平均线,来确认当前信号,并过滤假突破。

要价 > 均线值,且 WPR > -50 --> 买入信号

出价 < 均线值,且 WPR < -50 --> 卖出信号


Williams' %R 策略蓝图

在本主题中,我们将设计一个循序渐进的蓝图,为每个提到的策略创建一个交易系统。 我认为这一步在任何交易系统创建过程中都是非常重要的一步,因为它能帮助我们通过有组织的步骤了解我们需要做什么。

  • 策略一: Williams %R - OB 和 OS:

基于这一策略,我们将设计一个循序渐进的蓝图,来创建一个交易系统,因为我们需要程序或智能系统在每次跳价时一次性检查三个值,并进行比较,从而判定其中一个值相对于其它值的位置,这三个值是当期 WPR、-80 和 -20 级别。 智能系统将在之前的比较后,决定当期 WPR 值是否低于 -80 级别,我们需要智能系统在图表上生成带有“超卖”的注释。 在另一个场景中,若当期 WPR 值大于 -20 级别时,我们需要智能系统在图表上生成一个不同的带有 “超买”的注释。

以下是该策略的蓝图:

 Williams_R - OB _ OS 蓝图

 

  • 策略二: Williams %R - 交叉。

基于此策略,我们需要程序根据检查前一个 WPR、当期 WPR 和 -50 三个值来生成买入或卖出信号。 智能系统在每次跳价时检查这三个值,并根据比较生成信号,从而确定前期和当期 WPR 值在 -50 级别的位置。 根据我们提到的内容,如果前期 WPR 低于 -50,而当期 WPR 值大于 -50,我们将在图表上生成注释,包含生成的买入信号、当期和前期 Williams %R 值。 如果前期 WPR 大于 -50,且当期 WPR 低于 -50,则图表上的注释应包含卖出信号,当期和前期 Williams %R 值。

以下是此策略的蓝图,以图表形式显示。

 Williams_R - 交叉蓝图

  • 策略三: Williams %R 和 MA:

我们需要根据这一策略创建一个交易系统,并根据其它条件或其它度量生成买入或卖出信号。 因为我们需要创建一个简单的智能系统,它能够不断检查要价、出价、WPR 值、移动平均值、和 -50 级别,并据其生成信号。 当智能系统发现要价大于移动平均值,WPR 值大于 -50 级别时,我们需要智能系统生成买入信号、Williams %R 值、和指数移动平均值,作为图表上的注释。 另一种情况是,当出价低于移动平均值,且 WPR 低于 -50 级别时,生成卖出信号、Williams %R 值、和指数移动平均值,作为图表上的注释。

以下是创建这个交易系统的示意蓝图。

 Williams_R _ MA 蓝图

Williams' %R 交易系统

在这一部分中,我们将学习如何为每个提到的策略创建一个交易系统,这是本文最有趣的部分。 首先,我们将创建一个简单的交易系统,在图表上生成含有 Williams' %R 值的注释,以此作为所有策略的基础。

以下是编写的该交易系统的代码:

  • 创建 “double” 类型数组,可表达分数值。
double WPArray[];
  • 调用 “ArraySetAsSeries” 函数为数组设置排列顺序,该函数会返回布尔值 true 或 false。 此函数的参数是数组 [] 和 标志。
ArraySetAsSeries(WPArray,true);
  • 创建保存 Williams %R 定义的整数型变量后,调用 “iWPR” 定义 Williams' %R 属性。 "iWPR" 函数返回 Larry Williams 百分比范围指标的句柄。 参数包括品种名称、周期和均化周期。
    • 我们将采用(_Symbol)对应于当前所在品种,并采用(_Period)对应于当前所用的时间帧。
int WPDef = iWPR(_Symbol,_Period,14);
  • 调用 “CopyBuffer” 函数复制价格数据到所创建的数组,返回复制的数据计数,如果有错误,则返回 -1。 参数包括指标句柄、指标缓冲时间、开始位置、要复制的数量、和要复制的目标数组。
CopyBuffer(WPDef,0,0,3,WPArray);
  • 为当期 Williams' %R 值创建 WPValue 双精度变量后,调用 “NormalizeDouble” 函数获取当期 Williams%R 值。 “NormalizeDouble” 函数的参数是欲标准化的数字,和小数点后的位数。
double WPVal = NormalizeDouble(WPArray[0],2);
  • 调用 “Comment” 函数在图表上生成 Williams' %R 值作为注释。
Comment("Williams' %R Value is",WPVal);

我们可以查看以下完整代码,了解之前的交易系统:

//+------------------------------------------------------------------+
//|                                            Simple Williams%R.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double WPArray[];

   ArraySetAsSeries(WPArray,true);

   int WPDef = iWPR(_Symbol,_Period,14);

   CopyBuffer(WPDef,0,0,3,WPArray);

   double WPVal = NormalizeDouble(WPArray[0],2);

   Comment("Williams' %R Value is",WPVal);

  }
//+------------------------------------------------------------------+

编译此代码后,我们可在导航器窗口的 “expert Advisors” 文件夹文件中找到智能系统,如下图所示。

WPR nav1

将其拖放到所需的图表来执行它,该交易系统的窗口将显示如下。

Simple W_R 窗口

按下“确定”后,它将加载到图表上,如下所示。

 Simple W_R 加载

以下是该交易系统生成的信号的测试示例。

 简单 W_R 信号

正如我们在前面的示例中看到的,智能系统在图表的左上角生成了一个注释信号,其中包含当前 WPR 值。 为了确保生成的信号与 MetaTrader 5 中的内置指标相同,我们可以在下图中看到这一点。

简单 W_R - 相同信号

正如我们在前一张图片中看到的那样,连接了智能系统,插入了指标,两者生成了相同的信号或数值。 加载 Simple Williams' %R 智能系统后,在右上角,以及在左上角,我们可以找到它生成的信号作为注释,它等于 -78.15,这与插入图表下窗口的内置指标的数值相同,且与 WPR 指标线左上方显示的值相同。 

  • 策略一: Williams%R - OB & OS:

基于这一策略,我们需要创建一个交易系统,能够生成信号,从而在价格达到超买或超卖区域时自动通知我们。 以下是针对该策略创建交易系统的完整代码:

//+------------------------------------------------------------------+
//|                                         Williams%R - OB & OS.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double WPArray[];
   
   ArraySetAsSeries(WPArray,true);
   
   int WPDef = iWPR(_Symbol,_Period,14);
   
   CopyBuffer(WPDef,0,0,3,WPArray);
   
   double WPVal = NormalizeDouble(WPArray[0],2);
   
   if(WPVal<-80)
   {
      Comment("Over Sold");
   }
   
   if(WPVal>-20)
   {
      Comment("Over Bought");
   }
   
  }
//+------------------------------------------------------------------+

此代码中的差异如下所示。

超卖条件:

   if(WPVal<-80)
   {
      Comment("Over Sold");
   }

超买条件:

   if(WPVal>-20)
   {
      Comment("Over Bought");
   }

编译此代码之后,若我们想在 MetaTrader 5 中执行它以便生成自动信号时,我们要按以下步骤执行:

在导航器窗口中查找智能系统文件。

WPR nav3

将其拖放到需要提取信号的所需图表上。 以下是其窗口。

Williams_R - OB _ OS 窗口

勾选“允许算法交易” --> 按“确定”。 在图表中找到它。

Williams_R - OB _ OS 加载

以下是基于此策略生成信号的测试示例。

超买:

Williams_R - OB _ OS - OB 信号

正如我们在前面的例子中看到的那样,当 WPR 值高于 -20 级别时,智能系统生成了一个超买信号,这意味着价格在 14 个时期内接近其最高点。

超卖信号:

Williams_R - OB _ OS - OS 信号

根据前面的例子,我们发现 WPR 低于 -80 级别,这意味着价格接近其低点,因此,这里的信号是超卖。

  • 策略二: Williams %R - 交叉:

根据这一策略,我们需要创建一个交易系统,从而基于交叉产生买入和卖出信号。 以下是基于此策略创建交易系统的完整代码:

//+------------------------------------------------------------------+
//|                                       Williams%R - Crossover.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double WPArray[];

   ArraySetAsSeries(WPArray,true);

   int WPDef = iWPR(_Symbol,_Period,14);

   CopyBuffer(WPDef,0,0,3,WPArray);

   double WPVal = NormalizeDouble(WPArray[0],2);
   double WPPrevVal = NormalizeDouble(WPArray[1],2);

   if(WPPrevVal<-50 && WPVal>-50)
     {
      Comment("Buy signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "Williams % R Previous Value is",WPPrevVal);
     }

   if(WPPrevVal>-50 && WPVal<-50)
     {
      Comment("Sell signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "Williams % R Previous Value is",WPPrevVal);
     }

  }
//+------------------------------------------------------------------+

此代码中的差异如下所示。

为前期 Williams %R 值创建 WPPrevValue 双精度型变量后,调用 “NormalizeDouble” 函数获取前期 Williams %R 值。 “NormalizeDouble” 函数的参数是欲标准化的数字,和小数点后的位数。

double WPPrevVal = NormalizeDouble(WPArray[1],2);

Williams %R 的条件 - 交叉策略。

买入信号的情况:

   if(WPPrevVal<-50 && WPVal>-50)
     {
      Comment("Buy signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "Williams % R Previous Value is",WPPrevVal);
     }

卖出信号的情况:

   if(WPPrevVal>-50 && WPVal<-50)
     {
      Comment("Sell signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "Williams % R Previous Value is",WPPrevVal);
     }

编译这段代码之后,我们可以在导航器窗口中找到它,如下所示。

WPR nav2

双击该策略的智能系统作为第二个选项,在所需图表上执行该策略,智能系统窗口将出现。

Williams_R - 交叉窗口

按下“确定”后,它将加载到图表上。

Williams_R - 交叉加载

以下是此策略生成信号的测试示例。

做多信号

Williams_R - 交叉信号 - 买入信号

正如我们在图表上看到的一样,智能系统在图表左上角的注释里包含了生成的买入信号、Williams %R 值,因为满足了该策略的条件,因为前期的 WPR = -55.93 低于 -50 级别,而当期的 WPR = -41.09 高于 -50 级别。

做空信号:

Williams_R - 交叉信号 - 卖出信号

 

正如我们在前面的示例中看到的基于该策略的卖出信号,因为符合该策略的条件,我们在图表的左上角生成了一个注释信号,其中包含当前 WPR 值、前期 WPR 值,。

前期 WPR 值 = -29.95,大于 -50 级别,当期 WPR = -58.8,小于 -50 级别。

  • 策略三: Williams %R - MA:

以下是为该策略创建交易系统的完整代码:

//+------------------------------------------------------------------+
//|                                              Williams%R & MA.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double WPArray[];
   double MAArray[];

   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   ArraySetAsSeries(WPArray,true);
   ArraySetAsSeries(MAArray,true);

   int WPDef = iWPR(_Symbol,_Period,14);
   int MADef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);

   CopyBuffer(WPDef,0,0,3,WPArray);
   CopyBuffer(MADef,0,0,3,MAArray);

   double WPVal = NormalizeDouble(WPArray[0],2);
   double MAVal = NormalizeDouble(MAArray[0],2);

   if(Ask>MAVal && WPVal>-50)
     {
      Comment("Buy signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "EMA Value is",MAVal);
     }

   if(Bid<MAVal && WPVal<-50)
     {
      Comment("Sell signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "EMA Value is",MAVal);
     }

  }
//+------------------------------------------------------------------+

此代码中的差异如下所示。

为 WP 和 MA 创建数组。

double WPArray[];
double MAArray[];

在为其创建双精度变量后,获取要价和出价的数值。

double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

根据当前数据在所创建数组里进行排序。

ArraySetAsSeries(WPArray,true);
ArraySetAsSeries(MAArray,true);

调用 iWPR 函数定义 Williams' PR,调用 iMA 函数定义移动均线。 前面提到的 iWPR 参数。 iMA 的参数包括品种名称、周期、均化周期、水平偏移、平滑类型、和价格类型。

int WPDef = iWPR(_Symbol,_Period,14);
int MADef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);

调用 “CopyBuffer” 函数复制价格数据到创建的数组。

CopyBuffer(WPDef,0,0,3,WPArray);
CopyBuffer(MADef,0,0,3,MAArray);

获取当期 Williams RP 和移动平均值。

double WPVal = NormalizeDouble(WPArray[0],2);
double MAVal = NormalizeDouble(MAArray[0],2);

策略的条件。

买入信号情况:

   if(Ask>MAVal && WPVal>-50)
     {
      Comment("Buy signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "EMA Value is",MAVal);
     }

卖出信号情况

   if(Bid<MAVal && WPVal<-50)
     {
      Comment("Sell signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "EMA Value is",MAVal);
     }

编译这段代码之后,我们将在 MetaTrader 5 的导航器窗口中找到智能系统,如下所示。

WPR nav4

将其拖放到所需的图表上,我们将发现其窗口与下面的窗口相同。

 Williams_R _ MA 窗口

勾选“允许算法交易”旁边的选项,然后按“确定”,智能系统将被加载到图表中,如下所示。

 Williams_R _ MA 加载

以下是基于此策略生成的信号的示例。

买入信号情况:

 Williams_R _ MA - 买入

正如我们在图表上看到的,左上角生成的信号,

  • 买入信号 
  • WPR 值
  • EMA 值

条件满足 要价大于均值,WPR 大于 -50

卖出信号情况:

 Williams_R _ MA - 卖出

正如我们在图表上看到的,左上角生成的信号,

  • 卖出信号 
  • WPR 值
  • EMA 值

条件满足 出价低于均值,WPR 低于 -50 级别。


结束语

Williams' PR 是一个重要的技术工具,正如我们所提到的,它可被视为衡量动量的最流行指标之一。 它还可以与另一个技术指标相结合,从而放大效益,因为这是技术分析最重要的效益之一,即我们可以采用一个以上的工具来确认多个层面,以便更好地理解工具,从而做出相应的决策。

我们通过这篇文章学习了更多关于 Williams' PR 技术指标的话题,因而我们通过这个例子了解了它是什么,它衡量什么,以及如何来计算它,从而加深我们的理解,然后我们还学习了如何插入指标,以及如何读取它,进而理解它想要告诉我们什么。

我们还学习了如何根据其背后的主要概念在简单策略运用它,由此我们学习了三种简单策略,它们是:

  • Williams %R - OB 和 OS: 当价格达到这些区域时,产生超买和超卖的信号。
  • Williams %R - 交叉:根据特定和有意义的条件生成买入和卖出信号。
  • Williams %R - MA: 根据 WPR 和指数移动平均线读数生成买入和卖出信号。
此后,我们为每一个提到的策略设计了一个循序渐进的蓝图,来帮助我们为每个策略创建一个交易系统。 然后,我们学习并利用 MQL5 创建了针对每个策略的交易系统,可在 MetaTrader 5 交易终端中运行它们自动、准确地生成信号。

所有我们在本文中所学到的内容只是一个简单的示例,阐述了如何利用编程,因为算法交易是一个令人难以置信的工具,可以帮助我们顺利、轻松、有效地进行交易。 它可以是一个非常有用的工具,令您在睡觉的时候也能赚钱。 因此,我鼓励每个人都来学习或思考如何从这个工具中获益,从而提高利润最大化的可能性。

我必须在此再次确认,在将任何策略用于您的真实帐户之前,您必须测试它,因为没有适合每个人的策略,适合我的可能不适合您。 特别是由于本文的主要目的是教学,因此我们可能会发现策略需要优化。 我希望您尝试应用自己阅读的内容,因为这将是理解您所学内容的重要因素。 我还希望本文对您增强交易,从而获得更好的结果有所帮助,如果您想阅读有关如何根据最流行的技术指标设计交易系统的类似文章,您可以阅读我在本系列中的前几篇文章,我希望它们对您有所助力。

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

从头开始开发智能交易系统(第 22 部分):新订单系统 (V) 从头开始开发智能交易系统(第 22 部分):新订单系统 (V)
今天,我们将继续开发新订单系统。 实现一个新系统并非那么容易,因为我们经常会遇到各种问题令过程复杂化。 当这些问题出现时,我们必须停下来重新分析我们前进的方向。
CCI 指标。 升级和新特征 CCI 指标。 升级和新特征
在本文中,我将研究升级 CCI 指标的可能性。 此外,我将对指标进行修改。
您应该知道的 MQL5 向导技术(第 02 部分):Kohonen 映射 您应该知道的 MQL5 向导技术(第 02 部分):Kohonen 映射
这些系列文章所提议的是,MQL5 向导应作为交易员的支柱。 为什么呢? 因为交易员不仅可以利用 MQL5 向导装配他的新想法来节省时间,还可以大大减少重复编码带来的错误;他最终可把精力投向自我交易哲学中的几个关键领域。
神经网络变得轻松(第十九部分):使用 MQL5 的关联规则 神经网络变得轻松(第十九部分):使用 MQL5 的关联规则
我们继续研究关联规则。 在前一篇文章中,我们讨论了这种类型问题的理论层面。 在本文中,我将展示利用 MQL5 实现 FP-Growth 方法。 我们还将采用真实数据测试所实现的解决方案。