欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

斐波那契之字折线 - MetaTrader 5脚本

author emer | 131 人阅读 | 0 人评论 |

Fibonacci ZigZag - indicator for MetaTrader 5

Fibonacci ZigZag - indicator for MetaTrader 5

Fibonacci ZigZag - indicator for MetaTrader 5

Fibonacci ZigZag - indicator for MetaTrader 5

#财产指标缓冲区 2
#财产指标图 1
输入 双倍的回撤=23.6;//回撤金额
输入 双倍的minSizeInAtrUnits=0.0;//以 atr 为单位的波浪最小尺寸
输入 整数滚动AtrPeriod=14;//滚动atr周期
输入 颜色颜色=clr道奇蓝;//波浪颜色
输入 整数宽度=3;//波宽
输入 ENUM_LINE_STYLE风格=样式_实体;//波浪风格
//+------------------------------------------------------------------+
//|自定义指标初始化函数                         |
//+------------------------------------------------------------------+
//--- 上升波和下降波  双倍的upWaves[],dwWaves[];

上波数组将存储高点和dw波数组将存储最低值

系统变量:

我们需要知道最后的波浪类型、开始位置、结束位置、从开始到结束的距离(以柱为单位)。

然后我们需要局部高点和局部低点变量以及距每个点的柱形距离。

//--- 跟踪之字形  //--- 我们拥有的波浪类型 [0] 无 [1] 向上 [2] 向下    整数波类型=0;
  //--- 波浪的价格(起始价格)    双倍的波开始价格=0.0;
  //--- 波浪的价格(结束价格)    双倍的波结束价格=0.0;
  //--- 距起始价的距离(以柱为单位)    整数波起始距离=0;
  //--- 距最终价格的距离(以柱为单位)    整数波结束距离=0;
  //--- 高价跟踪    双倍的高内存=0.0;
    整数距离高=0;
  //--- 低价跟踪    双倍的低内存=0.0;
    整数距低点的距离=0;
  //--- 滚动atr    双倍的滚动属性=0.0;
      整数滚动Atrs=0;

最后计算了滚动atr单位和多少 

然后我们创建一个系统重置函数:

无效重置系统(){
数组填充(upWaves,0,数组大小(upWaves),0.0);
数组填充(dwWaves,0,数组大小(dwWaves),0.0);
波类型=0;
波开始价格=0.0;
波结束价格=0.0;
波起始距离=0;
波结束距离=0;
高内存=0.0;
低内存=0.0;
距离高=0;
距低点的距离=0;
滚动属性=0.0;
滚动Atrs=0;
}

标准的东西,用零填充数组并重置系统变量。

在初始化时,我们设置缓冲区、绘图,然后第一次调用重置:

  设置索引缓冲区0,上波,INDICATOR_DATA);
  设置索引缓冲区1,dwWaves,INDICATOR_DATA);
  绘图索引设置双精度0,PLOT_EMPTY_VALUE,0.0);
  绘图索引集整数0,绘图类型,DRAW_ZIGZAG);
  绘图索引集整数0,绘图线颜色,0,颜色);
  绘图索引集整数0,绘图线宽度,宽度);
  绘图索引集整数0,PLOT_LINE_STYLE,风格);
  重置系统();

那么让我们直接开始计算吧。

我们需要处理的第一件事是滚动 atr。

在我们收集到比 atr 期间更多的条之前,我们不会做任何其他事情。

管理滚动 atr 的部分如下:

    //--- 管理 atr       滚动Atrs++;
      如果(rollingAtrs>rollingAtrPeriod){
      双倍的new_portion=((高[i]-低[i])/_观点)/((双倍的)rollingAtrPeriod);
      //--- 我们删除旧部分并添加新部分       滚动Atr=(滚动Atr)-(滚动Atr/((双倍的)rollingAtrPeriod))+new_portion;
       }
      别的 如果(rollingAtrs<=rollingAtrPeriod){
         rollAtr+=(高[i]-低[i])/_观点;
        如果(rollingAtrs==rollingAtrPeriod){
           滚动Atr/=((双倍的)rollingAtrs);
          //--- 启动高点和低点内存以及系统             high_mem=高[i];
             low_mem=低[i];
             距离高=0;
             距低点的距离=0;
           }
         }

太棒了,现在还有另一个问题。

这个之字形的基础是回调。 

但要发生回调,必须至少有一波。

但第一波会折返什么呢? xD

为此,我们将执行以下操作:

这样我们就不会出现回调作为初始波浪,但是,我们必须以某种方式开始序列。

请注意,我们也可以选择仅针对第一波采用经典的分形方法,然后继续进行回撤。

只要我们没有波浪,这就是我们所做的:

  //--- 如果我们还没有波浪类型    别的{
      //--- 如果我们突破了高点而不是低点        如果(高[i]>高_mem&&低[i]>=低_mem){
        双倍的new_wave_size_in_atr_units=((high[i]-low_mem)/_观点)/rollingAtr;
        //--- 如果新的波浪大小有效        如果(new_wave_size_in_atr_units>=minSizeInAtrUnits){
          //--- 开始新的上升波             波类型=1;
          //--- 起始价格是最低内存             wave_start_price=low_mem;
             wave_start_distance=distance_from_low;
          //--- 最终价格是新高             wave_end_price=最高价[i];
             波结束距离=0;
          //--- 绘制波浪             dwWaves[i-wave_start_distance]=low_mem;
             upWaves[i]=high[i];
          //--- 改变高位             high_mem=高[i];
             距离高=0;
          //--- 改变最低值             low_mem=低[i];
             距低点的距离=0;
           }
           } 
      //--- 如果我们突破低点而不是高点        别的 如果(低[i]双倍的new_wave_size_in_atr_units=((high_mem-low[i])/_观点)/rollingAtr;
        //--- 如果新的波浪大小有效        如果(new_wave_size_in_atr_units>=minSizeInAtrUnits){         
          //--- 开始新的下行波             波类型=-1;
          //--- 起始价格是最高内存             wave_start_price=high_mem;
             wave_start_distance=距高点的距离;
          //--- 最终价格是新低             wave_end_price=低[i];
             波结束距离=0;
          //--- 绘制波浪             upWaves[i-wave_start_distance]=high_mem;
             dwWaves[i]=低[i];
          //--- 改变高位             high_mem=高[i];
             距离高=0;
          //--- 改变最低值             low_mem=低[i];
             距低点的距离=0;
           }
           }
      //--- 如果我们都破坏了        别的 如果(低[i]high_mem){
          //--- 改变它们             high_mem=高[i];
             low_mem=低[i];
             距离高=0;
             距低点的距离=0;
           }
       }

伟大的 。现在是最后一块。

这是上述的相关代码:

      //--- 如果我们有上升波        如果(波类型==1){
          //--- 如果波浪向上扩展            如果(最高[i]>wave_end_price){
              //--- 从数组位置删除前一个最终价格(0.0=空)                upWaves[i-wave_end_distance]=0.0;
              //--- 将其放在新位置                upWaves[i]=high[i];
                wave_end_price=最高价[i];
                波结束距离=0;
              //--- 改变高位                high_mem=高[i];
                距离高=0;
              //--- 改变最低值                low_mem=低[i];
                距低点的距离=0;
               }
          //--- 检查回撤            如果(low[i]0){
               low_mem=低[i];
               距低点的距离=0;
              双倍的size_of_wave=(wave_end_price-wave_start_price)/_观点;
              双倍的size_of_retracement=(wave_end_price-low_mem)/_观点;
              如果(波的大小>0.0){
                双倍的回撤=(回撤大小/波浪大小)*100.0;
                双倍的new_wave_size_in_atr_units=((wave_end_price-low_mem)/_观点)/rollingAtr;
              //--- 如果新的波浪大小有效              如果(new_wave_size_in_atr_units>=minSizeInAtrUnits){
                //--- 如果回撤显着,则启动下行波                  如果(回撤>=回撤){
                    //--- 开始新的下行波                      波类型=-1;
                    //--- 起始价格是最高内存                      wave_start_price=high[i-distance_from_high];
                      wave_start_distance=距高点的距离;
                    //--- 最终价格是新低                      wave_end_price=低[i];
                      波结束距离=0;
                    //--- 绘制波浪                      upWaves[i-wave_start_distance]=high_mem;
                      dwWaves[i]=低[i];
                    //--- 改变高位                      high_mem=高[i];
                      距离高=0;
                    //--- 改变最低值                      low_mem=低[i];
                      距低点的距离=0;                     
                     }
                   }
                 }
               }
           }

当波浪向下时,我们会做相反的事情。

我们完成了,我们的回撤之字形已准备就绪。

这是之字形23.6%回撤和0.0 atr 单位中波浪的最小大小

Fibonacci ZigZag - indicator for MetaTrader 5

这是相同的锯齿形3 最小波浪大小(atr 单位)

Fibonacci ZigZag - indicator for MetaTrader 5


附件下载

📎 fibozigzag.mq5 (13.54 KB)

Source: MQL5 #56619

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录