如何只提取Zigzag指标提取的底部转折点? - 页 3

 
jackprobe:
谢谢你deVries。将尝试它...


如果你把像这样的东西

这个在你的代码里面 ....

 
ubzen:

这是我得出的结果。我还没有检查上面deVries的结果[他发帖时正在做这个]。


你好,ubzen,我刚刚看到你的代码如下。

我不知道这两行代码是什么意思:if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift]。

我发现,当我删除这两行代码时,几乎没有任何变化,所以我不知道你为什么要加这两行。

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_width1 1
#property indicator_color2 Yellow
#property indicator_width2 1

double Bottoms[];
double Toppers[];

int init()
{

   IndicatorBuffers(2);

   SetIndexStyle(0,DRAW_SECTION);
   SetIndexBuffer(0,Bottoms);
   SetIndexEmptyValue(0,0.0);

   SetIndexStyle(1,DRAW_SECTION);
   SetIndexBuffer(1,Toppers);
   SetIndexEmptyValue(1,0.0);

  IndicatorShortName("zz show top & bottom");
  return(0);
}

int deinit()
{
  return(0);
}

int start()
{
  int counted_bars=IndicatorCounted();
  int limit=0;
  limit = Bars-counted_bars;
  
  for(int shift=limit-1;shift>=0;shift--)
  {
    int ExtDepth=12; int ExtDeviation=5; int ExtBackstep=3;
    int ZigzagBuffer=0; int HighMapBuffer=1; int LowMapBuffer=2;
    
    Bottoms[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        LowMapBuffer, shift
    );
    
    Toppers[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        HighMapBuffer, shift
    );
    
    if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift];
    if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];
  }
  
  return(0);
}
 
vx0532:


你好,ubzen,我刚刚看到你的代码如下。

我不知道这两行代码是什么意思:if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift]。

我发现,当我删除这两行代码时,它几乎没有任何变化,所以我不知道你为什么要加这两行。


低点有线,高点有线的 "之 "字形。
 
deVries:

在低点和高点都有线的 "之"字形结构


我在EA中写了下面这些代码

但当我在历史数据中测试它时,"打印 "显示全部为0,为什么?

for(int shift=99;shift>=0;shift--)
  {
    int ExtDepth=12; int ExtDeviation=5; int ExtBackstep=3;
    int ZigzagBuffer=0; int HighMapBuffer=1; int LowMapBuffer=2;
    
    Bottoms[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        LowMapBuffer, shift
    );
    
    Toppers[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        HighMapBuffer, shift
    );
    if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift];
    if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];
 }
 
 shift=0;
 while(shift<100)
 {
 Print("Bottoms,Toppers:",Bottoms[shift]," , ",Toppers[shift]);
 shift++;
 }
 

请看我在后面1页的帖子

deVries 2013.10.19 12:13 #

https://www.mql5.com/en/forum/144092/page2#854926


//+------------------------------------------------------------------+
//|                                              ZigZag practise.mq4 |
//|                                Copyright © 2012, Tjipke de Vries |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Tjipke de Vries"
#property link      ""

//---- input parameters  ZigZag
extern int ExtDepth=12;
extern int ExtDeviation=5;
 
deVries:

谢谢deVries,我在看了你的帖子后知道了这个问题。

所以我得到的结论是,我们可以在指标代码中使用双数组和变量来接收iCustom()的返回值;但我们只能在EA的代码中使用变量来接收iCustom()的返回值。

你的解释是:"那是错误的缓冲区,你必须找到i的值,在哪个栏的顶部或底部将是"

我的理解是,在EA中,当我们使用数组x[i]来接收iCustom()时,赋值是可以的,但赋值的小节是不确定的。

所以iCustom()不仅仅是简单地返回一个值,还有其他东西,是吗?

但我还是不明白这段代码的意义:"if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];"

 
vx0532:

谢谢deVries,我在看了你的帖子后知道了这个问题。

所以我得到的结论是,我们可以在指标代码中使用双数组和变量来接收iCustom()的返回值;但我们只能在EA的代码中使用变量来接收iCustom()的返回值。

你的解释是:"那是错误的缓冲区,你必须找到i的值,在哪个栏的顶部或底部将是"

我的理解是,在EA中,当我们使用数组x[i]来接收iCustom()时,赋值是可以的,但赋值的小节是不确定的。

所以iCustom()不仅仅是简单地返回一个值,还有其他东西,是吗?

但我还是不明白这段代码的意义:"if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];"


你还在为从ZigZag指标中获取数据而苦恼吗?

为什么你要我解释我的代码中没有的东西?

你为什么不研究一下这段代码呢?

//+------------------------------------------------------------------+
//|                                              ZigZag practise.mq4 |
//|                                Copyright © 2012, Tjipke de Vries |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Tjipke de Vries"
#property link      ""

//---- input parameters  ZigZag
extern int ExtDepth=12;
extern int ExtDeviation=5;

整个代码你可以在后面找到一页....https://www.mql5.com/en/forum/144092/page2#854926

如果你了解该代码的工作原理,那么它只是在EA中使用了同样的方法。

 
  1. deVries: 整个代码你可以在后面一页找到....
    不要说返回一页,要贴出确切的帖子链接。就是你名字右边的#号(点击右键,复制链接),在后面 一页。
  2. vx0532: 但我还是不明白这段代码的意义:"if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift);"
    你认为 "if(x> 0.1) x=x; "的意义是什么?什么也不是!更正 后的代码说。
        if(ZigZag[shift]>0.1 && Low[shift]==ZigZag[shift]) Bottoms[shift]=ZigZag[shift];
        if(ZigZag[shift]>0.1 && High[shift]==ZigZag[shift]) Toppers[shift]=ZigZag[shift];
    
 
WHRoeder:
  1. deVries:整个代码你可以在后面一页找到....
    不要说后面一页,要贴出确切的帖子的链接。就是你名字右边的#号(点击右键,复制链接),在 后面 一页。
  2. vx0532:但我还是不明白这段代码的意义:"if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];"
    你认为 "if(x> 0.1) x=x; "的意义是什么?什么也不是!更正 后的代码说。

完成https://www.mql5.com/en/forum/144092/page2#854926
 

亲爱的各位。

感谢对ZigZag和代码的精彩讨论。我想在讨论中加入一个新的内容
对我来说,如果我能够将ZigZag
指标计算出的高/低值(给定的、特定的参数 集)连同它们的出现时间提取到一个文本或csv文件中,将具有很大的价值,
,像这样。

- 日,时间,高值,高(布尔值)
- 日,时间,低值,低(布尔值)。

我想提取这些值在MS Excel中作进一步分析,以确定图表中时间段和振幅的
出现的概率。最后,直方图将从
这一数据中创建,通过识别内在的时间段和
,以及内在的摆动幅度来表明图表中数值的 "特征"。

也许我在这里试图重新发明轮子,而外面有一些代码可以做我想做的
。如果没有,开发这样的代码也是值得的。我每天都在用大量的图表进行这种类型的分析
,我可以清楚地指出,了解一个价值的内在特征
,可以大大提高预测方向改变的机会。在我看来,这个过程可以很容易地实现
自动化......但我需要一些有编程经验的人的帮助。
结果将是一个方便的指标,甚至是一个自动的MT4 EA(专家顾问)
,在重大转折点进行交易。

如果能在这里找到有兴趣合作的人,那就更好了。但如果有一些关于如何从ZigZag指标中提取数据的提示
,也会有帮助。非常感谢!

- spjuliman