资料库: iBarShift - 页 3

 
angevoyageur:

谢谢,当 exact 为 true 时,我也必须修正我的代码,因为我误解了这个参数。iBarShift 的英文文档是错误的。

我想这也是我的错误,iBarShift 应该返回包含指定时间的条形图(而不是精确的打开时间)。

我能在我的函数库中使用您的函数吗(当然,您拥有版权)?如果它更快更正确,我为什么要重新发明轮子呢?)

 
komposter:

我想这也是我的错误,iBarShift 应该返回包含指定时间的条形图(而不是精确的打开时间)。

我能否在我的函数库中使用您的函数(当然,您拥有版权)?如果它更快更正确,我为什么要重新发明轮子呢?)

当然可以。
 
考虑到 "精确 "参数的修正代码已经发布。
 
angevoyageur:

谢谢,当 exact 为 true 时,我也必须修正我的代码,因为我误解了这个参数。iBarShift 的英文文档有误。

mql5 的错误发生在Bars() 函数 上,我已向服务台报告。

似乎 Bars() bug 已在第 880 版中修正。
 
第 880 版修复了 Bars() 的错误,现在一切正常。
 
angevoyageur:
第 880 版修复了 Bars() 的错误,现在一切正常。
 

在 m2 和 m1 上,由于某种原因,trudy 的值不是-1,而且在零小节时会返回到第一小节。

 

该函数至少有两处错误:

1) if(time>LastBar)

返回(0);

如果 exact=true,在时间不明确属于最后一棒的情况下,即 time>LastBar+PeriodSeconds(timeframe) 时,逻辑应该返回-1。

2) if(CopyTime(symbol,timeframe,time,1,checkcandle)==1)

...

返回(-1);

同样,如果 exact=false,则应返回最近的条形图,本例中为 Bars(symbol,timeframe)-1。

 

我认为您的代码中存在一个小错误:

//--- 如果时间 > LastBar,我们总是返回 0
   if(time>LastBar)
      return(0);

如果最后一个刻度线 "打开 "了一个新的条形图,那么 if(time>LastBar) 将变为 false - 因为现在 time == LastBar

然后我们在这里着陆:

 if(checkcandle[0]==time)
         return(shift-1);

现在 shift == 0,返回 -1,而不是 0!

所以我认为

//--- 如果时间 > LastBar,我们总是返回 0
   if(time>LastBar)
      return(0);

应该改为

//--- 如果时间 > LastBar,我们总是返回 0
   if(time>=LastBar)
      return(0);

调用

 
Carl Schreiber:

我认为您的代码中存在一个小错误:

如果最后一个刻度线 "打开 "了一个新的条形图,那么 if(time>LastBar) 将变为 false - 因为现在 time == LastBar

不确定您的意思?我认为 "最后一个刻度线 "无关紧要。使用该函数 时,time=LastBar 与否都无关。

然后我们就到了这里:

现在 shift == 0 ,返回 -1,而不是 0!

如果 time==Lastbar 则 shift=1 而不是 0。因此不存在错误(shift 来自 Bars(),它是条数,这就是为什么我们返回'shift-1')。

所以我认为

应改为

卡利

你的更正也行得通,但 "time===LastBar "的情况是作为 "正常 "情况处理的。

语句

 if(time>LastBar)

是作为错误修复添加的,如果时间大于当前条形图的 0 时间。