
学习如何基于 Williams PR 设计交易系统
概述
来自本系列的新文章是关于如何根据最流行的技术指标设计交易,我们将学习如何根据新的技术指标 Williams Percent Range(WPR)设计不同的简单交易系统。 除了详细了解 Williams Percent Range 技术指标外,还可以学习我们如何根据其背后的主要思想有效地运用它。 我相信,如果我们能够理解事物的根源,我们不仅能够有效地运用它,而且能够围绕主要概念、或任何相关工具发现新的认知或思路,从而在交易中获得更卓越和更优秀的结果。 所以,我有一种方式来尝试学习和传授事物的根源,进而越来越加深我们的理解。
我们将在本文中贯穿许多主题,学习以下内容:
即贯第一个主题的内容,就是 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 指标。 简单地说,我们可以按照以下步骤计算:
- 计算最高点的最高价 = 计算区间最高点的最高价。
- 计算最低点的最低价 = 计算区间最低点的最低价。
- 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- 获取最高点的最高价。
2- 获取最低点的最低价。
3- 得到 WPR。
现在,我们已计算出 WPR 值。 它应是一条在 0 和 -100 之间振荡的曲线,用来衡量动量,就像我们提到的一样。 如今,我们不需要手工计算它,因为我们可以在 MetaTrader 5 交易终端中找到它,我们所需要做的就是在可用指标中选择它,步骤如下所示。
之后,我们将找到其窗口,以确定其参数,如下所示:
1- 设置期望的周期。
2- 确定 WPR 指示线的颜色。
3- 确定 WPR 指示线的样式。
4- 确定 WPR 指示线的宽度。
我们还可以通过 “Levels” 选项卡控制指标的级别,如下所示:
我们在前面的图片中看到,我们有两个级别 -80 和 -20,这两个级别是记录高位读数和低位读数的重要级别。 此外,我们还可以根据我们发现的其它有用级别,视情况添加,譬如,添加 -50 级别,按 “Add”,然后确定要在图表指标窗口上示意的级别。
确定所有所需参数,并按下“确定”后,指标将按如下所示加载到图表上。
正如我们在前一张图片中所见,图表下部窗口中的黑线在 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 - 交叉。
基于此策略,我们需要程序根据检查前一个 WPR、当期 WPR 和 -50 三个值来生成买入或卖出信号。 智能系统在每次跳价时检查这三个值,并根据比较生成信号,从而确定前期和当期 WPR 值在 -50 级别的位置。 根据我们提到的内容,如果前期 WPR 低于 -50,而当期 WPR 值大于 -50,我们将在图表上生成注释,包含生成的买入信号、当期和前期 Williams %R 值。 如果前期 WPR 大于 -50,且当期 WPR 低于 -50,则图表上的注释应包含卖出信号,当期和前期 Williams %R 值。
以下是此策略的蓝图,以图表形式显示。
- 策略三: Williams %R 和 MA:
我们需要根据这一策略创建一个交易系统,并根据其它条件或其它度量生成买入或卖出信号。 因为我们需要创建一个简单的智能系统,它能够不断检查要价、出价、WPR 值、移动平均值、和 -50 级别,并据其生成信号。 当智能系统发现要价大于移动平均值,WPR 值大于 -50 级别时,我们需要智能系统生成买入信号、Williams %R 值、和指数移动平均值,作为图表上的注释。 另一种情况是,当出价低于移动平均值,且 WPR 低于 -50 级别时,生成卖出信号、Williams %R 值、和指数移动平均值,作为图表上的注释。
以下是创建这个交易系统的示意蓝图。
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 值。 为了确保生成的信号与 MetaTrader 5 中的内置指标相同,我们可以在下图中看到这一点。
正如我们在前一张图片中看到的那样,连接了智能系统,插入了指标,两者生成了相同的信号或数值。 加载 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 值高于 -20 级别时,智能系统生成了一个超买信号,这意味着价格在 14 个时期内接近其最高点。
超卖信号:
根据前面的例子,我们发现 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); }
编译这段代码之后,我们可以在导航器窗口中找到它,如下所示。
双击该策略的智能系统作为第二个选项,在所需图表上执行该策略,智能系统窗口将出现。
按下“确定”后,它将加载到图表上。
以下是此策略生成信号的测试示例。
做多信号
正如我们在图表上看到的一样,智能系统在图表左上角的注释里包含了生成的买入信号、Williams %R 值,因为满足了该策略的条件,因为前期的 WPR = -55.93 低于 -50 级别,而当期的 WPR = -41.09 高于 -50 级别。
做空信号:
正如我们在前面的示例中看到的基于该策略的卖出信号,因为符合该策略的条件,我们在图表的左上角生成了一个注释信号,其中包含当前 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 值
- EMA 值
条件满足 要价大于均值,WPR 大于 -50
卖出信号情况:
正如我们在图表上看到的,左上角生成的信号,
- 卖出信号
- WPR 值
- EMA 值
条件满足 出价低于均值,WPR 低于 -50 级别。
结束语
Williams' PR 是一个重要的技术工具,正如我们所提到的,它可被视为衡量动量的最流行指标之一。 它还可以与另一个技术指标相结合,从而放大效益,因为这是技术分析最重要的效益之一,即我们可以采用一个以上的工具来确认多个层面,以便更好地理解工具,从而做出相应的决策。
我们通过这篇文章学习了更多关于 Williams' PR 技术指标的话题,因而我们通过这个例子了解了它是什么,它衡量什么,以及如何来计算它,从而加深我们的理解,然后我们还学习了如何插入指标,以及如何读取它,进而理解它想要告诉我们什么。
我们还学习了如何根据其背后的主要概念在简单策略运用它,由此我们学习了三种简单策略,它们是:
- Williams %R - OB 和 OS: 当价格达到这些区域时,产生超买和超卖的信号。
- Williams %R - 交叉:根据特定和有意义的条件生成买入和卖出信号。
- Williams %R - MA: 根据 WPR 和指数移动平均线读数生成买入和卖出信号。
所有我们在本文中所学到的内容只是一个简单的示例,阐述了如何利用编程,因为算法交易是一个令人难以置信的工具,可以帮助我们顺利、轻松、有效地进行交易。 它可以是一个非常有用的工具,令您在睡觉的时候也能赚钱。 因此,我鼓励每个人都来学习或思考如何从这个工具中获益,从而提高利润最大化的可能性。
我必须在此再次确认,在将任何策略用于您的真实帐户之前,您必须测试它,因为没有适合每个人的策略,适合我的可能不适合您。 特别是由于本文的主要目的是教学,因此我们可能会发现策略需要优化。 我希望您尝试应用自己阅读的内容,因为这将是理解您所学内容的重要因素。 我还希望本文对您增强交易,从而获得更好的结果有所帮助,如果您想阅读有关如何根据最流行的技术指标设计交易系统的类似文章,您可以阅读我在本系列中的前几篇文章,我希望它们对您有所助力。
本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/11142
注意: MetaQuotes Ltd.将保留所有关于这些材料的权利。全部或部分复制或者转载这些材料将被禁止。
This article was written by a user of the site and reflects their personal views. MetaQuotes Ltd is not responsible for the accuracy of the information presented, nor for any consequences resulting from the use of the solutions, strategies or recommendations described.



你写了压力测试......写了一些垃圾......等等......比如说,我只能对 mql5 说声谢谢......在社区里,应该有一些团结的东西......用户应该互相帮助......为什么要赞扬这种最简单的事情。
所以你连最起码的研究精神都没有?还是没有其他人可以就免费话题进行交流?
别再迷茫了。如果您需要帮助,可以联系我。)
这么说你连起码的研究能力都没有?还是没有其他人可以就免费话题进行交流?
别再迷茫了。如果你需要帮助,可以联系我。)
比如说,我就不喜欢这些离题的评论。
我要离开这个主题。不要再回复我了。
你有一个免费的话题,却因为看到作者的错误而把它弄得一团糟。
...
你在哪儿看到的?给我看看。)
对于那些不理解的人,我可以解释一下。我说的是作者写了很多几乎一模一样的文章,唯一不同的是他们提供了不同的指标。整个代码库充满了这种无用的 "好东西"。
而你却想象出了什么错误。
...
我要离开这个话题了,别再回复我了。
你不应该开始。
感谢各位的评论。蓝图错误已被编辑并发送给大家重新发布。关于我在 mql5 上的第一个系列中的文章,我需要再澄清一件事,因为这个系列的主要目的是分享大多数技术指标,并根据每个指标的基本概念创建可以使用的简单策略。你可以找到类似的内容,但每篇文章的主要话题是不同的,因为在每篇文章中,我都会分享一个带有不同技术策略的新指标,并为这些策略创建一个简单的交易系统,它们不可能在一篇文章中出现。因此,这一系列文章是为初学者准备的,此外,我们在交易中使用的工具或指标并不相同,但当我们根据我前面提到的内容提供最受欢迎的技术指标 时,如今每个人都能找到自己需要的东西。 除了了解如何作为初学者编码外,这一系列文章还适合他们的交易。
谢谢。
祝大家新年快乐!
非常感谢作者的工作。在我看来,移动平均价格 正常化时仍有一个细微差别需要纠正。不是 将浮点数四舍五入到 2:
四舍五入到_位数:
因为用颜色标出的条件往往无法满足:
谢谢,弗拉基米尔。