一个指标出现了除以零的错误 - 页 9

 
Sergey Savinkin:

而如果你首先从每小时的时间框架中制作CopyRates(圆周率的获得),然后将当前时间框架中的时间(时间,变成Time) 传递给过程CreateFigure,然后通过当前时间框架搜索索引,为什么它们会是圆周率呢?start_index=ArrayBsearch(Time,start_time)

没错,我们要在数组中的非圆形时间上寻找一个圆形时间...也就是说,在一分钟的时间框架上寻找一个时间与小时的开盘时间 相对应的条形。

 
О!
 
Алексей Тарабанов:
О!

情感是好的!

但也许会有一些实质性的想法!?

 

下面是关于时间的例子 - 我添加了两个变量以节省时间

void CreateFigure(int i,const datetime &Time[],const double &Open[],const double &High[],const double &Low[],const double &Close[],MqlRates &rates[])
  {
   datetime start_time=rates[i].time;
   datetime stop_time=(start_time+PeriodSeconds(TimeFrames));
   datetime start_timeA=start_time;
   
//---
   int start_index,stop_index,limit;
   datetime vertical_line_time;
//---
   start_index=ArrayBsearch(Time,start_time);
   datetime start_timeB=Time[start_index];   
   if(Time[start_index]<start_time) start_index=(start_index>0?start_index-1:start_index);
   start_time=Time[start_index];
   Print("start_timeA=", start_timeA, " start_timeB=",start_timeB," start_time=",start_time);

我们得到一个这样的印刷品

2018.07.05 00:39:30.465 IndDrafter_Test (Si-9.18,M1)    start_timeA=2018.07.04 12:00:00 start_timeB=2018.07.04 12:00:00 start_time=2018.07.04 12:00:00
2018.07.05 00:39:30.465 IndDrafter_Test (Si-9.18,M1)    start_timeA=2018.07.04 13:00:00 start_timeB=2018.07.04 13:00:00 start_time=2018.07.04 13:00:00
2018.07.05 00:39:30.465 IndDrafter_Test (Si-9.18,M1)    start_timeA=2018.07.04 14:00:00 start_timeB=2018.07.04 13:59:00 start_time=2018.07.04 14:05:00
2018.07.05 00:39:30.465 IndDrafter_Test (Si-9.18,M1)    start_timeA=2018.07.04 15:00:00 start_timeB=2018.07.04 15:00:00 start_time=2018.07.04 15:00:00

也就是说,好像在正常/静止的情况下,一切都很正确。

你可以看到,在14:00,分钟TF上的开盘时间 被修正为14:05 - TF M1上出现的第一个条形的实际时间。
 
Aleksey Vyazmikin:

情感是好的!

但也许会有一些实质性的想法!?

小时是一样的,所以极限=0。我想自己来做。

 
Алексей Тарабанов:

小时是一样的,所以极限=0。我想自己来做。

如果时间相同,那又如何?毕竟,在这一小时内,TF M1有60个小节!

在当前TF和计算的TF重合的情况下,有一个保护措施,在这种情况下不会出现除以0的 情况。

if(_Period>=TimeFrames) return(0);
 
睡觉的时候
 
Алексей Тарабанов:
睡觉的时候

你在躲避!?

 
睡觉的时候
 
Алексей Тарабанов:
睡觉的时候

???