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

学习如何基于抛物线 SAR 设计交易系统

MetaTrader 5交易 | 3 八月 2022, 09:01
1 620 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

概述

在本文中,您将详细学习一个新的有用的技术指标,如果合适的话,根据您的交易风格,它可能会在交易中运用。 该技术指标为抛物线 SAR。 在使用 MetaTrader 5 内置的 MetaQuotes 语言编辑器编写该交易系统的代码后,我们将学习如何设计一个用于 MetaTrader5 交易平台的交易系统。 如果您想了解如何获取 MetaTrader 5,以及如何找到 MetaQuotes 语言编辑器,可以查看在 MetaEditor 中编写 MQL5 代码的主题。 我们将在该主题下学习本文的核心内容:

  1. 抛物线 SAR 定义
  2. 抛物线 SAR 策略
  3. 抛物线 SAR 策略蓝图
  4. 抛物线 SAR 策略系统
  5. 结束语

贯穿前面的主题,我们将学习基于抛物线 SAR 指标的简单策略,以及如何依据其背后的概念设计一个简单的交易系统。 贯穿抛物线 SAR 定义主题,我们将更详细地学习抛物线 SAR 指标是什么,或它意味着什么,以及如何计算该指标,从而了解其背后的概念,以此种方式运用抛物线 SAR 指标会变得有效、容易。 然后,我们将根据所学内容,通过一些基于该指标概念的简单策略来掌握如何利用抛物线 SAR 指标,这些学习内容贯穿于抛物线 SAR 策略主题部分。 然后,我们将为上述简单策略设计蓝图,该蓝图将帮助我们依据清晰的策略蓝图,和我们所需构建的内容,逐步设计我们的交易系统。 然后,我们将讨论本文中最有趣的主题,因为我们将学习如何编写交易系统的代码,令计算机根据我们的策略来检查我们设计好的信号条件,并返回信号,这个过程可在基于我们的简单策略实现的智能交易系统里自动准确地完成。

在我们深入讨论话题之前,我想给您一些建议,那就是应用您自己学到的东西,因为这种方法将加深您的理解,您必须测试任何策略或任何东西,然后才能在实际账户中使用它,特别是如果您所学内容出于学习目的,因为它可能对您的交易毫无用处。

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

现在,我们来遍历本文主题,开始我们有趣的旅程。


抛物线 SAR 定义

在这一部分中,我们将更详尽地学习威尔斯·怀尔德(Welles Wilder)创建的抛物线 SAR 指标。 该指标的名称来自“抛物线”,它是指图表上指标的形式,“SAR” 是指停止和反转,或者您也许会发现其名称“抛物线时间/价格系统”,该名称是威尔斯·怀尔德在其《技术交易系统的新概念》一书中所称的相同。

抛物线 SAR 指标是趋势跟踪指标,在趋势行情中使用。该指标能够在金融产品交易后的几个周期内作出反应,然后破位等级开始移动。 因此,我们可以说,该指标的主要目标是允许您根据当前行情方向或趋势设置合适的止损点,如果您不知道,您可以参阅趋势定义主题,从而了解更多有关趋势的信息。

换言之,抛物线 SAR 指标的主要目的是创建尾随停止。 破位事关两件事的函数:时间和价格,根据价格的函数,我们可以发现破位会随着价格的相对走势而上移或下移;而根据时间的函数,无论价格的方向如何,我们都会发现破位每时每刻都在移动。

因此,我们首先需要判定趋势,然后我们就可以运用抛物线 SAR 策略。 到目前为止,我们了解了抛物线 SAR 指标代表什么,以及它能告诉我们什么。现在我们需要知道如何手工计算该指标,从而了解其背后的概念,下面是实现这一点的途径。 

根据我们所学到的,我们需要首先判定行情的趋势或方向,然后根据该判定,我们要分两种情况计算,其一是如何在上涨行情中计算抛物线 SAR,并返回上涨的 SAR,另一个是在下跌行情中如何计算抛物线 SAR,并返回下跌的 SAR。 因此,我们将分别计算这两件事:在行情上涨的情况下,上升的 SAR;和在行情下跌的情况下,下降的 SAR。

  • 上升的 SAR:
    1. 判定前一个 SAR 值 = 前一周期的前一个 SAR 值。
    2. 判定极值(EP)= 当前上升趋势的最高值。
    3. 判定加速因子(AF)= 0.02 和 0.20 之间的值。 在判定第一个最小值(0.02)后,将根据(EP)判定该值;因为每当 EP 创造一个新的高点,从而更接近 0.20 的最大值时,AF 将增加 0.02,无论趋势将延长多长时间。
    4. 当前抛物线 SAR 值 = 先验 SAR(步骤 1)+ 先验 AF *(先验 EP - 先验 SAR)。

我们举一个例子,即上升 SAR,如果我们从行情上获得以下数据:

天数 最高价 最低价
1 45 43
2 44 43.5
3 46 43
4 47 42
5 48 42.5
6 47.5 42.75
7 48 42.60
8 47.75 42.5
9 48 43
10 49 42.5
11 48.75 42.60
12 50 42
13 51 42.5
14 52 43
15 51.5 42.5
16 51 42
17 52 43
18 53 44
19 54 45

现在我们需要计算上升 SAR,它将与以下内容相同:

  1. 判定先验 SAR 值 = 上一周期的先验 SAR 值;在本例中,得出了黄色的第一个值,出于简化,该值等于 42。
  2. 判定极值(EP)= 当前上升趋势的最高值,即 48
  3. 得到 EP 和 SAR 之间的差值,差值将为 48 - 42 = 6
  4. 判定加速度因子(AF)= 0.02 和 0.20 之间的值,第一个值为 0.02
  5. 将 AF 乘以 EP 和 SAR 之间的差值,该值将为 0.12
  6. 将先验 AF 乘以 EP 和 SAR 之间的差值(步骤 5 的结果),再与先验 SAR 相加,计算当前 SAR,该值将为 42.12

下图是示例中所有计算出的数值:

上升 SAR 示例

正如我们在 SAR 列中看到的那样,SAR 值在此期间每天都在上升。

  • 下降的 SAR:
    1. 判定前一个 SAR 值 = 前一周期的前一个 SAR 值。
    2. 判定极值(EP)= 当前下降趋势的最低低点。
    3. 判定加速因子(AF)= 0.02 和 0.20 之间的值。 在判定第一个最小值(0.02)后,将根据(EP)判定该值;因为每当 EP 创造一个新的低点,从而更接近 0.20 的最大值时,AF 将增加 0.02,无论趋势将延长多长时间。
    4. 当前抛物线 SAR 值 = 先验 SAR(步骤 1)- 先验 AF *(先验 EP - 先验 SAR)。

我们举一个例子,即下降 SAR,如果我们从行情上获得以下数据:

天数 最高价 最低价
1 54 45
2 53 44
3 52 43
4 51 42
5 51.5 42.5
6 52 43
7 51 42.5
8 50 42
9 48.75 42.6
10 49 42.5
11 48 43
12 47.75 42.50
13 48 42.60
14 47.50 42.75
15 48 42.50
16 47 42
17 46 43
18 44 43.50
19 45 43

现在,我们将计算给定周期内的下降 SAR 值,其将与以下内容相同:

  1. 判定先验 SAR 值 = 上一周期的先验 SAR 值,在本例中,给出了黄色的第一个值,出于简化,该值等于 51。
  2. 判定极值(EP)= 当前下降趋势的最低低点,即 42
  3. 得到 EP 和 SAR 之间的差值,差值将为 51 - 42 = 9
  4. 判定加速度因子(AF)= 0.02 和 0.20 之间的值,第一个值为 0.02
  5. 将 AF 乘以 EP 和 SAR 之间的差值,该值将为 0.18
  6. 取步骤 5 的结果减去先验 SAR 来计算当前 SAR,该值将为 50.82

以下是计算给定时间段内所有数值的图片:

正如我们在 SAR 列中看到的那样,SAR 值在此期间每天都在下降。

幸运的是,我们不需要计算抛物线 SAR 指标或任何其它指标,因为在 MetaTrader 5 交易平台中内置了该指标,我们只需要在可用指标中选择该指标即可。 以下就是我们如何做到这一点:

打开 MetaTrader 5 时,可以单击“插入”选项卡-->选择指标-->选择趋势-->选择抛物线 SAR

SAR 插入

之后,我们可以发现抛物线 SAR 参数窗口,如下所示:

SAR 参数

1- to determine the step (AF) that will be added every time the price creates a new high or low. — 判定每次价格创造新的高点或低点时将的步长递增量(AF)。

2- to determine the maximum value of (AF) and the same as we learned that the default is 0.20. — 判定(AF)的最大值,与我们所学相同,默认值为 0.20。

3- to determine the color of the indicator. — 确定指标的颜色。

4- to determine the style of the indicator. — 确定指标的样式。

确定抛物面 SAR 指标的参数合适之后,按下“确定”键,我们就可发现其附在图表上,如下所示:

SAR 加载

正如我们在前一张图片中所看到的那样,在上涨过程中,我们可以发现抛物线 SAR 低于价格,并继续根据波动向上移动,反之亦然;在下跌过程中,可以发现抛物面 SAR 指标高于价格,并根据波动继续向下移动。


抛物线 SAR 策略

在本主题中,我们将学习能够基于抛物线 SAR 运用的一些简单策略,但务必牢记在实际帐户上使用任何策略之前都必须进行严格测试,因为这里的主要目标是学习新工具的概念,以及如何为其设计交易系统。

我们提过这个抛物线 SAR 指标是趋势跟踪,我们可以在趋势行情、上升趋势和下降趋势中使用它。 所以我们要做的是首先判定趋势,然后我们就可以相应地运用抛物线 SAR。

  • 策略一:上升趋势策略:

根据该策略,对于每次即时报价,我们需要将抛物线 SAR 值与价格进行比较,并判定是否存在做多信号,因为我们能发现,当抛物线 SAR 值低于最低价格时,将生成做多信号,当然我们还会有另一个信号,当 SAR 值高于最高价格时,这是一个止盈信号。

SAR 值 < 价格低点 = 做多

SAR 值 > 价格高点 = 止盈

  • 策略二: 下行趋势策略

该策略则与上升趋势策略相反,根据该策略,对于每次即时报价,我们需要将抛物线 SAR 值与价格进行比较,并判定是否存在做空信号,因为我们可以发现,当抛物线 SAR 值大于最高价格时,将生成做空信号,我们还会有另一个信号,当 SAR 值低于最低价格时,这是一个止盈信号。

SAR 值 > 价格高点 = 做空

SAR 值 < 价格低点 = 止盈

  • 策略三: 做多信号配合尾随停止策略:

根据该策略,对于每次即时报价,我们需要将 SAR 值与价格进行比较,决定是否有做多信号,并在每次即时报价来临时根据抛物线 SAR 指标值判定尾随停止点。 因此,当 SAR 值低于价格低点时,这将是做多,我们将根据指标值得到尾随停止价位。

SAR 值 < 价格低点 = 做多 --> 尾随停止值即为 SAR 值

  • 策略四: 做空信号配合尾随停止策略:

根据该策略,对于每次即时报价,我们需要将 SAR 值与价格进行比较,决定是否有做空信号,并在每次即时报价来临时根据抛物线 SAR 指标值判定尾随停止点。 因此,当 SAR 值大于价格高点时,这将是做空,我们将根据 SAR 值获得尾随停止位。

SAR 值 > 价格高点 = 做空 --> 尾随停止值即为 SAR 值。


抛物线 SAR 策略蓝图

在本主题中,我们将为我们的策略设计一个蓝图,来帮助我们依据它们编写交易系统的代码,因为这样允许我们安排和结构化我们的念头,如此来了解我们需要通知智能系统每一步做什么,因此以下是每种策略的蓝图。

  • 策略一:上升趋势策略:

我们会通知计算机或智能系统所需检查的内容,以及在满足条件的情况下返回的内容,在此策略中,我们需要检查 SAR 值,并将其与价格进行比较,然后判定 SAR 值是否低于低点,如果不是的话,它无需返回任何信息;或者如果是的话,我们需要智能系统返回做多信号,然后再次检查它们,并比较两个值,以此决定 SAR 值是否大于高点值,如果不是的话,程序无需返回任何内容;或者如果是的话,我们需要它返回止盈信号。

SAR 值 < 价格低点 = 做多

SAR 值 > 价格高点 = 止盈

 SAR - 上行策略蓝图

  • 策略二: 下行趋势策略

在该策略中,我们需要检查 SAR 值,并将其与价格进行比较,然后判定 SAR 值是否大于价格高点,如果不是,则无需返回任何信息;或者如果是的话,我们需要智能系统返回一个做空信号,然后再次检查和比较两个值,判定 SAR 值是否小于低值,如果不是,则无需返回什么,如果是,我们需要它返回一个止盈信号。

SAR 值 > 价格高点 = 做空

SAR 值 < 价格低点 = 止盈

SAR 下跌趋势策略蓝图

  • 策略三: 做多信号配合尾随停止策略:
  • 为了编写该策略的代码,我们需要程序检查 SAR 值,并返回尾随停止值,用高点和低点来验证该值,并判定 SAR 值是否小于低点价,如果不是,仅返回尾随停止数值,如果是,则我们需要它返回做多信号和尾随停止值。 

    仅尾随停止级别 --> SAR 值 < 价格低点 = 做多 --> 尾随停止即为 SAR 值

    带有停止位得做多策略蓝图

    • 策略四: 做空信号配合尾随停止策略:

    为了编写该策略的代码,我们需要程序检查 SAR 值,并返回尾随停止值,用高点和低点来验证该值,并判定 SAR 值是否大于高点价,如果不是,仅返回尾随停止数值,如果是,则我们需要它返回做空信号和尾随停止值。

    仅尾随停止级别 --> SAR 值 < 价格高点 = 做多 --> 尾随停止即为 SAR 值

    带有停止位得做空策略蓝图

    抛物线 SAR 策略系统

    在这个有趣的主题中,我们将学习如何用 MQL5(MetaQuotes 语言编辑器)为每个提到的策略编写代码,并为每个策略设计一个交易系统,从而能在 MetaTrader 5 交易平台上自动准确地执行这些策略。

    首先,我们将学习如何编写代码来设计一个简单交易系统,来返回含有抛物线 SAR 值的注释,并为其编写简单的智能系统,我们将遵循以下步骤。

    • 为抛物线 SAR 创建一个数组,我们将采用 “double” 数据类型:
    double SARArray[];
    • 调用 “ArraySetAsSeries” 函数为数组设置数据排列顺序,并返回布尔值:
    ArraySetAsSeries(SARArray,true);
    • 调用 “iSAR” 函数定义 SAR 指标句柄:
    int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
    • 调用 “CopyBuffer” 函数读取 SAR 定义数值来填充 SARArray:
    CopyBuffer(SARDef,0,0,3,SARArray);
    • 以 “double” 数据类型为 SAR 值创建变量,调用 “NormalizeDouble” 函数计算 SAR 值:
    double SARValue=NormalizeDouble(SARArray[0],5);
    • 使用注释函数输出 SAR 值至图表:
    Comment("Parabolic SAR value is ",SARValue);

    之后,我们可以将代码归并为完整模块,如下所示:

    //+------------------------------------------------------------------+
    //|                                  Simple Parabolic SAR System.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()
      {    
       //create a SAR array
       double SARArray[];
    
       //sort array from current data
       ArraySetAsSeries(SARArray,true);
       
       //define SAR EA
       int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
       
       
       //fill SARArray with SARDef 
       CopyBuffer(SARDef,0,0,3,SARArray);
       
       //calculate value of last data
       double SARValue=NormalizeDouble(SARArray[0],5);
    
       //chart comment with the signal
       Comment("Parabolic SAR value is ",SARValue);
      }
    //+------------------------------------------------------------------+

    在编写并编译此代码之后,我们可以在导航器中找到它,与下图相同:

    简单抛物线 SAR 系统 - Nav.

    我们双击或拖放文件至图表上,即可执行智能交易系统,并获得结果或系统的产出,然后我们将发现以下窗口:

     简单抛物线 SAR 系统 - 窗口

    然后,我们勾选“允许算法交易”,然后按“确定”,我们可以发现系统或智能交易系统加载至图表上,如下所示:

    简单抛物线 SAR 系统 - 加载

    下图是该系统所生成信号的示例:

    简单抛物线 SAR 系统

    • 策略一:上升趋势策略:

    与我在本策略中提到的相同,我们需要为交易系统设置条件,以便在 SAR 值低于价格低点时生成做多信号,并在 SAR 值大于价格高点时生成止盈信号,以下是如何对该策略进行编码:

    • 以 “string” 数据类型为信号创建字符串变量:
    string signal="";
    • 调用 “MqlRates” 函数为价格创建一个数组,它存储有关价格、交易量和点差的信息:
    MqlRates PriceArray[];
    • 调用 “ArraySetAsSeries” 函数为价格数组设置数据排列顺序:
    ArraySetAsSeries(PriceArray,true);
    • 调用 “CopyRates” 函数读取价格数据填充数组,该函数在将数据存储为整数型后,可获取 “MqlRates” 结构的历史数据:
    int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
    • 以 “double” 数据类型为 SAR 值创建另一个数组:
    double SARArray[];
    • 调用 “ArraySetAsSeries” 函数为 SAR 数组设置数据排列顺序:
    ArraySetAsSeries(SARArray,true);
    • 调用 “iSAR” 函数定义 EA 的 SAR 指标句柄,因为返回的抛物线指标句柄,在 “SARDef” 里存储的是整数型 SAR 定义引用:
    int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
    • 调用 “CopyBuffer” 函数在 SARArray 中填充 SARDef,因为它获取指定指标的指定缓冲区的数据:
    CopyBuffer(SARDef,0,0,3,SARArray);
    • 调用 “NormalizeDouble” 函数计算最后一个数据的 SAR 值,该函数返回双精度数值类型: 
    double SARValue=NormalizeDouble(SARArray[0],5);
    • 利用 “if” 语句设置做多信号的条件,如果 SAR 值小于价格低点,则必须返回做多信号:
       if(SARValue < PriceArray[1].low)
       {
          signal="Buy";
       }
    • 利用 “if” 语句设置止盈信号的条件,如果 SAR 值大于价格高点,则必须返回止盈信号:
       if(SARValue > PriceArray[1].high)
       {
          signal="Take Profit";
       }
    • 调用 Comment 函数在图表上生成信号注释:
    Comment("The signal is ",signal);

    通过前面的步骤,我们为该策略创建了一个交易系统,下面是一个完整的模块代码:

    //+------------------------------------------------------------------+
    //|                      Parabilic SAR System - Uptrend Strategy.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()
      {  
       //create an string variable for signal
       string signal="";
       
       //create a price array
       MqlRates PriceArray[];
       
       //sort array from the current data
       ArraySetAsSeries(PriceArray,true);
       
       //fill array with price data
       int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
       
       //create a SAR array
       double SARArray[];
    
       //sort array from current data
       ArraySetAsSeries(SARArray,true);
       
       //define SAR EA
       int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
       
       
       //fill SARArray with SARDef 
       CopyBuffer(SARDef,0,0,3,SARArray);
       
       //calculate value of last data
       double SARValue=NormalizeDouble(SARArray[0],5);
       
       //buy signal
       //if current SAR value below candle 1 low
       if(SARValue < PriceArray[1].low)
       {
          signal="Buy";
       }
       
       //take profit signal
       //if current SAR value above candle 1 high
       if(SARValue > PriceArray[1].high)
       {
          signal="Take Profit";
       }
       
       //comment with the signal
       Comment("The signal is ",signal);
      }
    //+------------------------------------------------------------------+

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

    上升趋势 - 加载

    双击或将拖放文件至图表,将出现以下窗口:

     上行趋势 SAR - 窗口

    按下“确定”按钮后,我们可以发现智能交易系统加载到图表,并与下图相同:

    上升趋势 - 加载

    之后,我们可以在图表上的注释里找到生成的信号,与以下图片相同,作为测试示例:

    • 做多信号

    上行趋势 - 做多信号

    • 止盈信号

    上行趋势 - 止盈信号

    • 策略二: 下行趋势策略

    在该策略中,我们需要为交易系统设置做空条件,以便在 SAR 值高于价格高点时生成做空信号,并在 SAR 值小于价格低点时生成止盈信号,以下是如何对该策略进行编码:

    //+------------------------------------------------------------------+
    //|                    Parabolic SAR System - Downtrend Strategy.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()
      {  
       //create an string variable for signal
       string signal="";
       
       //create a price array
       MqlRates PriceArray[];
       
       //sort array from the current data
       ArraySetAsSeries(PriceArray,true);
       
       //fill array with price data
       int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
       
       //create a SAR array
       double SARArray[];
       
       //define SAR EA
       int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
       
       //sort array from current data
       ArraySetAsSeries(SARArray,true);
       
       //fill SARArray with SARDef 
       CopyBuffer(SARDef,0,0,3,SARArray);
       
       //calculate value of last data
       double SARValue=NormalizeDouble(SARArray[0],5);
       
       //buy signal
       //if current SAR value below candle 1 low
       if(SARValue > PriceArray[1].high)
       {
          signal="Sell";
       }
       
       //take profit signal
       //if current SAR value above candle 1 high
       if(SARValue < PriceArray[1].low)
       {
          signal="Take Profit";
       }
       
       //chart comment with the signal
       Comment("The signal is ",signal);
      }
    //+------------------------------------------------------------------+
    • 策略代码中的差异是:
      • 做空信号的条件 - 当 SAR 值大于价格高点时:
       if(SARValue > PriceArray[1].high)
       {
          signal="Sell";
       }
      • 止盈信号的条件 - 当 SAR 值小于价格低点时:
       if(SARValue < PriceArray[1].low)
       {
          signal="Take Profit";
       }

    编译此代码之后,我们可以在导航器窗口中找到该智能交易系统,如下图所示:

    SAR 下行趋势 - Nav

    将此文件拖放到图表上后,可执行该智能系统,将打开以下窗口:

    SAR 下行趋势 - 窗口

    按下“确定”按钮后,智能系统加载图表,并与下图相同:

    SAR 下行趋势 - 加载

    之后,我们可以在图表上的注释里找到策略的信号,与以下图片相同,作为测试示例:

    • 做空信号:

    SAR 下行趋势 - 做空信号

    • 止盈信号

    SAR 下行趋势 - 止盈信号

    • 策略三: 做多信号配合尾随停止策略:

    在该策略中,我们需要在图表上的注释里查看做多信号、尾随停止值(同时作为抛物线 SAR 值)、价格满足特定条件,即检查图表上的尾随停止(SAR 值)如果低于价格,生成新的做多信号。 我们可以找到以下代码来设计此策略的交易系统:

    //+------------------------------------------------------------------+
    //|         Parabolic SAR System - Buy signal with training stop.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()
      {  
       //create an string variable for signal
       string signal="";
       
       //create a price array
       MqlRates PriceArray[];
       
       //sort array from the current data
       ArraySetAsSeries(PriceArray,true);
       
       //fill array with price data
       int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
       
       //create a SAR array
       double SARArray[];
       
       //define SAR EA
       int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
       
       //sort array from current data
       ArraySetAsSeries(SARArray,true);
       
       //fill SARArray with SARDef 
       CopyBuffer(SARDef,0,0,3,SARArray);
       
       //calculate value of last data
       double SARValue=NormalizeDouble(SARArray[0],5);
       
       //buy signal
       //if current SAR value below candle 1 low
       if(SARValue < PriceArray[1].low)
       {
          signal="Buy";
       }
       
       //chart comment with the signal and trailing Stop
       Comment("The signal is ",signal,"\n", "Trailing Stop is ",SARValue);
      }
    //+------------------------------------------------------------------+
    • 区别是:
      • 在新行中添加尾随停止值,即 SAR 值,作为图表上的注释:
    Comment("The signal is ",signal,"\n", "Trailing Stop is ",SARValue);

    编译此代码后,我们可以在导航器中找到与以下相同的智能交易系统文件:

    SAR 上行趋势 -做多信号并带有尾随停止 - Nav

    当我们要在图表上执行该智能交易系统时,我们需将其拖放到图表上,然后将打开以下窗口:

    SAR 上行趋势 -做多信号并带有尾随停止 - 窗口

    按下“确定”按钮后,智能系统加载图表,并与下图相同:

    SAR 上行趋势 -做多信号并带有尾随停止 - 加载

    下图是根据该测试策略生成的信号示例:

    SAR 上行趋势 -做多信号并带有尾随停止1

    下图显示了尾随停止值将如何随价格增加而增加:

    SAR 上行趋势 -做多信号并带有尾随停止2

    • 策略四: 做空信号带有尾随停止策略:

    在该策略中,我们需要在图表上的注释里查看做空信号、尾随停止值(同时作为抛物线 SAR 值)、价格满足特定条件,即检查图表上的尾随停止(SAR 值)如果高于价格,生成新的做空信号。 我们可以找到以下代码来设计此策略的交易系统:

    //+-----------------------------------------------------------+
    //| Parabolic SAR System - Sell signal with trailing stop.mq5 |
    //| Copyright 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()
      {  
       //create an string variable for signal
       string signal="";
       
       //create a price array
       MqlRates PriceArray[];
       
       //sort array from the current data
       ArraySetAsSeries(PriceArray,true);
       
       //fill array with price data
       int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
       
       //create a SAR array
       double SARArray[];
       
       //define SAR EA
       int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
       
       //sort array from current data
       ArraySetAsSeries(SARArray,true);
       
       //fill SARArray with SARDef 
       CopyBuffer(SARDef,0,0,3,SARArray);
       
       //calculate value of last data
       double SARValue=NormalizeDouble(SARArray[0],5);
       
       //buy signal
       //if current SAR value below candle 1 low
       if(SARValue > PriceArray[1].high)
       {
          signal="Sell";
       }
       
       //chart comment with the signal and trailing Stop
       Comment("The signal is ",signal,"\n", "Trailing Stop is ",SARValue);
      }
    //+------------------------------------------------------------------+
    • 区别是:
      • 做空信号条件:
       if(SARValue > PriceArray[1].high)
       {
          signal="Sell";
       }

    编译此代码后,我们可以在导航器中找到与以下相同的智能交易系统文件:

    SAR 下行趋势 -做空信号并带有尾随停止 - Nav

    我们可拖放文件至图表上来执行它,然后我们会发现出现智能系统窗口:

    SAR 下行趋势 -做空信号并带有尾随停止 - 窗口

    按"确定"后,智能系统将被加载:

    SAR 下行趋势 -做空信号并带有尾随停止 - 加载

    下图是该所生成信号的示例:

    SAR 下行趋势 - 做空信号带有尾随停止1

    下图显示了尾随停止值将如何随价格降低:

    SAR 下行趋势 - 做空信号带有尾随停止2


    结束语

    现在,我们可以说,我们详细学习了抛物线 SAR 技术指标的一些基础知识,因为我们掌握了该指标是什么,它测量了什么,以及我们如何手工计算它,从而理解其背后的概念,我们了解了如何在简单策略里运用它,我们为这些策略设计了蓝图,来帮助我们设计基于它们的交易系统,我们学习了如何利用 MQL5 针对这些策略进行编码,并在 MetaTrader 5 上执行这些策略,从而能够自动准确地生成信号。

    我希望您自己编写这些策略,因为这将强化您的学习曲线,因为练习是掌握任何东西的一个非常重要的因素,您可以测试一下,当您学习任何东西时,您会发现,当您多次练习或应用您所学到的东西时,比之不加以练习,您会意识到自己提升更快。

    我也希望您发现这篇文章很有用,它给了您强大和有用的见解,来提高您的交易,它开阔了您的眼界,从文章主题或任何相关主题激发出新的思路。 我还需要确认,您在测试任何新工具或策略时,必须要在合理的区间内,然后再将其用于您的真实帐户,如此来确保它能提升您的交易结果。


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

    从头开始开发智能交易系统(第 15 部分):访问 web 上的数据(I) 从头开始开发智能交易系统(第 15 部分):访问 web 上的数据(I)
    如何通过 MetaTrader 5 访问在线数据? 互联网上有很多网站,提供海量信息。 您需要知道的是,在哪里查找、以及如何才能最好地利用这些信息。
    学习如何基于 ATR 设计交易系统 学习如何基于 ATR 设计交易系统
    在本文中,我们将学习一款可在交易中运用的新技术工具,作为我们学习如何设计简单交易系统系列的延续。 这次我们将选取另一个流行的技术指标:平均真实范围(ATR)。
    神经网络变得轻松(第十四部分):数据聚类 神经网络变得轻松(第十四部分):数据聚类
    我的上一篇文章已经发表一年多了。 这令我有了大量时间考虑修改思路和发展新方法。 在这篇新文章中,我想转移一下以前使用的监督学习方法。 这次我们将深入研究无监督学习算法。 特别是,我们将考虑一种聚类算法 — k-均值。
    从头开始开发智能交易系统(第 14 部分):添加价格成交量(II) 从头开始开发智能交易系统(第 14 部分):添加价格成交量(II)
    今天,我们要将更多资源加入 EA。 这篇有趣的文章可以提供一些展示信息的新思路和方法。 与此同时,它能帮助修复项目中的小缺陷。