文章 "ZigZag (之字折线) 的力量(第二部分)。 接收、处理和显示数据的示例" - 页 3

 
lovaK:

...

更新时间:2019.03.12 13:28

立即试用新版程序库:EasyAndFastGUI - 用于创建图形界面的程序库

 
Anatoli Kazharski:

更新时间:2019.03.12 13:28

立即试用新版程序库:EasyAndFastGUI - 用于创建图形界面的程序库

请将所有文件添加到一个存档中。新版本发布时,Codobase 的常规存档不会更新。

 
Andrey Khatimlianskii:

请将所有文件添加到一个存档中。新版本发布时,Kodobase 标准存档不会更新。

 

阿纳托利,干得漂亮!

有一个问题...

在附件中,MultiPercentageSegmentZZ 看起来有一个错误。 zz_current0, zz_current1, zz_current2 的 GetZigZagData函数 没有 h_buff,l_buff。






应该是这样吗?

//+------------------------------------------------------------------+
//| 填入指标缓冲区|
//+------------------------------------------------------------------+
void FillIndicatorBuffers(const int i,const int total,const datetime &time[])
  {
   int index=total-i-1;
   int copy_total=1000;
   int h_buff=2,l_buff=3;
   datetime start_time_in =NULL;
   datetime stop_time_in  =NULL;
//--- 从更高时间段获取源数据
   datetime stop_time=time[i]-(PeriodSeconds(HigherTimeframe)*copy_total);
   CopyBuffer(zz_handle_htf,2,time[i],stop_time,h_zz_buffer_temp);
   CopyBuffer(zz_handle_htf,3,time[i],stop_time,l_zz_buffer_temp);
   CopyTime(_Symbol,HigherTimeframe,time[i],stop_time,t_zz_buffer_temp);
//--- 从更高的时间框架中获取最终数据
   zz_higher_tf.GetZigZagData(h_zz_buffer_temp,l_zz_buffer_temp,t_zz_buffer_temp);
   double htf_value=zz_higher_tf.PercentSumSegmentsDifference();
//--- 第一分段数据
   zz_higher_tf.SegmentTimes(zz_handle_current,h_buff,l_buff,_Symbol,HigherTimeframe,_Period,0,start_time_in,stop_time_in);
   zz_current0.GetZigZagData(zz_handle_current,h_buff,l_buff,_Symbol,_Period,start_time_in,stop_time_in);
//--- 第二段数据
   zz_higher_tf.SegmentTimes(zz_handle_current,h_buff,l_buff,_Symbol,HigherTimeframe,_Period,1,start_time_in,stop_time_in);
   zz_current1.GetZigZagData(zz_handle_current,h_buff,l_buff,_Symbol,_Period,start_time_in,stop_time_in);
//--- 第三分段数据
   zz_higher_tf.SegmentTimes(zz_handle_current,h_buff,l_buff,_Symbol,HigherTimeframe,_Period,2,start_time_in,stop_time_in);
   zz_current2.GetZigZagData(zz_handle_current,h_buff,l_buff,_Symbol,_Period,start_time_in,stop_time_in);
//--- 最后一小节
   if(i<total-1)
     {
      buffer_zz_higher_tf[i] =htf_value;
      buffer_segment_0[i]    =zz_current0.PercentSumSegmentsDifference();
      buffer_segment_1[i]    =zz_current1.PercentSumSegmentsDifference();
      buffer_segment_2[i]    =zz_current2.PercentSumSegmentsDifference();
     }
//--- 关于历史
   else
     {
      //--- 如果出现了较高时间框架的新条形图
      if(new_bar_time!=t_zz_buffer_temp[0])
        {
         new_bar_time=t_zz_buffer_temp[0];
         //---
         if(i>2)
           {
            int f=1,s=2;
            buffer_zz_higher_tf[i-f] =buffer_zz_higher_tf[i-s];
            buffer_segment_0[i-f]    =buffer_segment_0[i-s];
            buffer_segment_1[i-f]    =buffer_segment_1[i-s];
            buffer_segment_2[i-f]    =buffer_segment_2[i-s];
           }
        }
      else
        {
         buffer_zz_higher_tf[i] =htf_value;
         buffer_segment_0[i]    =zz_current0.PercentSumSegmentsDifference();
         buffer_segment_1[i]    =zz_current1.PercentSumSegmentsDifference();
         buffer_segment_2[i]    =zz_current2.PercentSumSegmentsDifference();
        }
     }
  }
//+------------------------------------------------------------------+
 
有人在编译时没有出错吗?
附加的文件:
 
遗憾的是,没有包含完全正常运行的第 2 部分应用程序的存档。没有什么可测试的。
 
Eugeni Neumoin #:

十多年前,我也曾 "迷恋 "人字形,并创作了大量人字形作品。

附件中有一些例子--9 个时间框架的多重之字形和之字形生成器,等等。

但实际意义非常重要。更重要的任务是识别这些极值,以便在分析时 "推倒重来"。

举个例子

我们借助之字形选择了三个极值。我们将安德鲁三叉戟与它们绑定在一起。我们看到,几天前市场正好到达虚线,并正好脱离了虚线。

这样的图片有很多。人字形找到的任何极值都不能用于此目的。

在菜单图片中,数字 0-10 和 12-14 共有 14 种之字形算法。在数字 11 处,还有 7 种用于寻找图案的之字形算法。总共有 21 种算法。

在附件中,你可以借助构造器创建大量算法。你可以在自己的开发中使用它们。

更多图片

下降


让我们再往下看,上图中 1 号位置的极值是如何形成的。

这不是通过打磨之字形的射线和极值来实现的。也不是通过计算 "之 "字形的一些不太清晰的统计模式。

更重要的是找到这样一种算法,它能检测出重要的极值。

我可以在 MT5 中使用所有这些 MZZ9 吗?