错误、漏洞、问题 - 页 2179

 
Nikolai Semko:

不,这与加载无关。

如果你不采取零起点的酒吧,而是说50个酒吧,那么一切都可以了。瞬间的。

如果我把它提高到包括30巴,它就会冻结。在那之后,就没有了。

这绝对是一个错误!

试试这个。

//+------------------------------------------------------------------+
//| Возвращает смещение бара по времени                              |
//| https://www.mql5.com/ru/code/1864                                |
//+------------------------------------------------------------------+
int iBarShift(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const datetime time,bool exact=false)
  {
   datetime last_bar;
   if(!SeriesInfoInteger(symbol_name,timeframe,SERIES_LASTBAR_DATE,last_bar))
     {
      datetime array[1];
      if(CopyTime(symbol_name,timeframe,0,1,array)==1)
         last_bar=array[0];
      else
         return WRONG_VALUE;
     }
   if(time>last_bar)
      return(0);
   int shift=Bars(symbol_name,timeframe,time,last_bar);
   datetime array[1];
   if(CopyTime(symbol_name,timeframe,time,1,array)==1)
      return(array[0]==time ? shift-1 : exact && time>array[0]+PeriodSeconds(timeframe) ? WRONG_VALUE : shift);
   return WRONG_VALUE;
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

试试这个。

iBarShift和什么有关系?

这是关于标准Bars函数 中的一个错误

 
Nikolai Semko:

iBarShift和什么有关系?

这是关于标准Bars函数 中的一个错误

该函数也使用了Bars()。你从iBarShift()的模拟开始

 
Artyom Trishkin:

该函数也使用了Bars()。在你的案例中,这一切都始于iBarShift()的模拟量

是的,当然,使用iBarShift的对应工具,发现了这个问题。

如果你使用你给的iBarShift函数,你就不会发现这个错误,因为那里只用了一个TF。

当你在CopyTime 和Bars函数 中使用不同的TF时,这个错误就会发生。

但Bars在任何时候都应该正常工作。但我的例子表明,有一种特殊情况,iBar会挂起几十秒。而且这与装载历史没有关系。

 
Nikolai Semko:

是的,当然,使用iBarShift的对应工具,发现了这个问题。

如果你使用你给的iBarShift函数,你就不会发现这个错误,因为那里只用了一个TF。

当你在CopyTime 和Bars函数 中使用不同的TF时,这个错误就会发生。

但Bars在任何时候都应该正常工作。但我的例子表明,有一种特殊情况,iBar会挂起几十秒。而且这与装载历史没有关系。

这很可能是由于历史原因造成的加载

 
Nikolai Semko:

是的,当然,使用iBarShift的对应工具,发现了这个问题。

如果你使用你给的iBarShift函数,你就不会发现这个错误,因为那里只用了一个TF。

当你在CopyTime 和Bars函数 中使用不同的TF时,这个错误就会发生。

但Bars在任何时候都应该正常工作。但我的例子表明,有一种特殊情况,iBar会挂起几十秒。而且这与装载历史没有关系。

我认为在要求的范围内没有条形图的情况下,存在循环同步的尝试--Bars正在努力 "正常工作",然后通过超时或同步尝试的次数放弃。

你应该自己检查这些值,以避免在这种情况下调用Bars。

 
Vitaly Muzichenko:

这很可能是由于历史上传造成的

我不同意。它在22秒内不会被再次下载。此外,我还通过一个特殊的指标加载了所有TFs的所有历史。

如果是加载,那么我们如何解释前31条需要加载,而后面的则不需要。

 
Nikolai Semko:

如果是分载,那么你怎么解释前31条需要分载,而后面的不需要。

从文件中可以看出:当要求在一个给定的日期范围内的条数 时,只有那些开盘时间在这个范围内的条数才被考虑在内。

因此,Bars()原型返回0,这被解释为没有历史记录,而::Bars()在脚本的情况下,正如在以前的帖子中正确指出的那样,以超时或失败的尝试次数来终止。

 
Kirill Belousov:

我认为在所要求的范围内没有柱状物时,存在循环同步的尝试--Bars正在努力 "正常工作",然后通过超时或同步尝试的次数而放弃。

这种情况的原因是,你不应该为了自己检查数值而调用Bars。

这是很有可能的。
但也有很多选择。

酒吧是一个非常重要的功能,没有它就很难做到。确切地说,你可以不这样做,但这将花费你大量的资源。

你必须确保其功能完美。

 
A100:

从文件中可以看出:当要求在一个给定的日期范围内的酒吧数量 时,只有那些营业时间在这个范围内的酒吧才会被考虑进去。

因此,Bars()的原型返回0,这被解释为缺乏历史记录,并且脚本,正如之前的信息中正确指出的那样,通过超时或失败的尝试次数来终止。

很明显,它是零。

还有呢--在给定的时间范围内,用22秒的时间来决定零条,这可以吗?

在Bars的内部实现中存在一个明显的算法错误。

我们应该就这个问题向服务台发出请求--周末就要到了,这个问题可能会在周一丢失。