你好。
我试图开发一个挖掘历史数据(峰值和底部)的专家,以用于我的主要专家。我决定使用Zigzag指标,因为它很简单,很容易找到高/低点。
我的问题是,当我使用iCustom()函数调用ZigZag.ex4时,我无法得到正确的高低值。为了避免重绘,我使用iCustom()指标的索引20作为重绘的基本保护。
在ZigZag代码中有两个缓冲区(使用metaquotes版本https://www.mql5.com/en/code/7796 )。我可能会把高位和低位的数值取反,但目前并不太重要。
有些值与代码相符,有些则不相符,在日志中,我可以看到同一列中的高值和低值,这是不可能的。
我的代码如下。
我不知道我是否用错了 "之 "字形指标,或者我在代码中犯了一个错误?我找不到问题所在,所以我恳请您帮助查明我的问题。
谢谢
你能告诉阅读代码MACD样本,该EA是如何工作的吗?
在我看来,你从未尝试过....
你所写的就像我做了什么.....,不知道会发生什么,你能告诉我我做了什么吗?
你的每一个tick循环是什么?
这个吗?
if (tmp!= Time[0]) { tmp = Time[0]; double zh=iCustom(Symbol(),0,"ZigZag.ex4",6,5,3,1,20); double zl=iCustom(Symbol(),0,"ZigZag.ex4",6,5,3,0,20); Zig_high[cnt]=zh; Zig_low[cnt]=zl; cnt=cnt+1; Alert(" Zig zh=",zh," zl=",zl," cnt=",cnt-1); } // Every tick loop
是的,那么这个循环在哪里呢?
没有,那就逐行解释你的代码是什么意思......
你是对的,Start()函数本身就是一个循环。
但这个循环在哪里开始,Start()函数在哪里结束呢?
它是在其他地方...
你所打印的信息并不是每一个刻度都在重复 ....
那么你在做什么?......?
尽量解释你的代码行.....。
如果我不能正确解释,我很抱歉。
这个专家是用来做回测 的,我的目的是在15M图表中找到历史高点和低点。我将对高点和低点数据进行重新处理,以计算图表的相位和振幅。
我的做法是:我用两个数组来存储高点和低点的数值,用一个计数器来计算刻度。数组大小为1000,因为我最多运行2天(每天1440/15=96个刻度),这已经足够了。
int cnt=0; double Zig_high[1000]; double Zig_low[1000];
在init()函数中,我把数组中的数据填为零。
在start()函数中,我用下面的代码检查是否有新的tick被触发。
if (tmp!= Time[0]) { tmp = Time[0]; // the code here runs every 15M. }
所以start()函数有一个连续的循环,直到回测(2天)结束。
我认为我的主要问题是调用ZigZag。下面我正在调用Zigzag指标。通常情况下,如果有一个高点或低点,它应该返回一个非零值。但在我的例子中,它有时会以相同的值返回低点和高点,这是不可能的。
double zh=iCustom(Symbol(),0,"ZigZag.ex4",6,5,3,1,20); double zl=iCustom(Symbol(),0,"ZigZag.ex4",6,5,3,0,20); Zig_high[cnt]=zh; Zig_low[cnt]=zl; cnt=cnt+1;
可能是我没有理解原始Metaquotes zigzag指标中使用的数组(见下文)。我的理解是,这些是用来存储高点和低点值的。
//---- indicator buffers double ExtMapBuffer[]; double ExtMapBuffer2[];
谢谢
你好。
我试图开发一个挖掘历史数据(峰值和底部)的专家,以用于我的主要专家。我决定使用Zigzag指标,因为它很简单,很容易找到高/低点。
我的问题是,当我使用iCustom()函数调用ZigZag.ex4时,我无法得到正确的高低值。为了避免重绘,我使用iCustom()指标的索引20作为重绘的基本保护。
在ZigZag代码中有两个缓冲区(使用metaquotes版本https://www.mql5.com/en/code/7796 )。我可能会把高位和低位的数值取反,但目前并不太重要。
有些值与代码相符,有些则不相符,在日志中,我可以看到同一列中的高值和低值,这是不可能的。
我的代码如下。
我不知道我是否用错了 "之 "字形指标,或者我在代码中犯了一个错误?我找不到问题所在,所以我恳请您帮助查明我的问题。
谢谢