新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1754

 
情况如下:X变量存储的是历史上条形的索引,我们知道,当一个新的条形出现时,会有一个转变,因此X已经指向一个不同的条形。如何解决这个问题?这个想法:每一个新的酒吧,我们都会增加计数器(count++),并将其添加到X中。因此,无论偏移量如何,X将始终指向同一个栏。但有一个问题--当EA初始化时,不应考虑当前的第一个条形图。 我认为如果最初计数只等于-1,就可以很容易地解决这个问题。也就是说,在当前条形图上的增量计数将是 "0",而在下一个新条形图上(当初始化后的第一个条形图转变为1时),它将是 "1"。你怎么看?也许我根本就想错了地方?
 
Nerd Trader #:
情况如下:X变量存储的是历史上条形的索引,我们知道,当一个新的条形出现时,会有一个转变,因此X已经指向一个不同的条形。如何解决这个问题?这个想法:每一个新的酒吧,我们都会增加计数器(count++),并将其添加到X中。因此,无论偏移量如何,X将始终指向同一个栏。但有一个问题--当EA初始化时,不应考虑当前的第一个条形图。 我认为如果最初计数只等于-1,就可以很容易地解决这个问题。也就是说,在当前条形图上的增量计数将是 "0",而在下一个新条形图上(当初始化后的第一个条形图转变为1时),它将是 "1"。你怎么看?也许我根本就想错了地方?

如果它是一个指标,那么它就足够了

bool  ArraySetAsSeries(
   const void&  array[],    // массив по ссылке
   bool         flag        // true означает обратный порядок индексации
   );

到所使用的指标的所有数组和缓冲区。

那么零条将成为 rates_total-1

ArraySetAsSeries - Операции с массивами - Справочник MQL4
ArraySetAsSeries - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArraySetAsSeries - Операции с массивами - Справочник MQL4
 
Nerd Trader #:
情况如下:X变量存储的是历史上条形的索引,我们知道,当一个新的条形出现时,会有一个转变,因此X已经指向一个不同的条形。如何解决这个问题?这个想法:每一个新的酒吧,我们都会增加计数器(count++),并将其添加到X中。因此,无论偏移量如何,X将始终指向同一个栏。但有一个问题--当EA初始化时,不应考虑当前的第一个条形图。 我认为如果最初计数只等于-1,就可以轻松解决。也就是说,在当前条形图上的增量计数将是 "0",而在下一个新条形图上(当初始化后的第一个条形图转变为1时),它将是 "1"。你怎么看?也许我根本就想错了地方?
      datetime x=время нужного бара;
      int index=iBarShift(_Symbol,0,x);
 
MakarFX #:
为什么要费这么大劲?
 
Alexey Viktorov #:
为什么要费这么大劲?
这对我来说更容易)
 
MakarFX #:
这对我来说更容易)

但是处理器更重...

 
Alexey Viktorov #:

但是处理器更重...

我不知道哪些功能承担了什么负荷。有什么地方可以读到这方面的内容吗?
 
Nerd Trader #:
情况如下:X变量存储的是历史上条形的索引,我们知道当一个新的条形出现时,它被移位,因此X已经指向另一个条形。如何解决这个问题?这个想法:每一个新的酒吧,我们都会增加计数器(count++),并将其添加到X中。因此,无论偏移量如何,X将始终指向同一个栏。但有一个问题--当EA初始化时,不应考虑当前的第一个条形图。 我认为如果最初计数只等于-1,就可以轻松解决。也就是说,在当前条形图上的增量计数将是 "0",而在下一个新条形图上(当初始化后的第一个条形图转变为1时),它将是 "1"。你怎么看?也许我根本就想错了地方?

不在那里。在加载EA/指示器时,如果它在终端内,X中没有任何东西,除非它是终端外的一个直觉或extern或全局变量,所以必须先在那里写一些东西。然后我们简单地计算出总条数的变化(应考虑新条数的出现)。

datetime BarTime。

FlagNewBar=false;
if(BarTime!=iTime(NULL,0,0))
{
 BarTime=iTime(NULL,0,0);
 FlagNewBar=true;
}
if(FlagNewBar==true)
{
// И когда тру, делаем что нужно делать когда появился новый бар, 
//на следующем тике флаг нового бара будет ложь, так как БарТайм время все время существования нулевого бара будет равным
}
 

问候。你能给我一个提示吗?在mt5中如何在初始化或tick时定义测试?

到目前为止,我只找到了OnTester(),它是在调用OnDeinit() 之前调用的。

 
@Alexey Viktorov @MakarFX 有趣,相当好的解决方案。谢谢你。

@Valeriy Yastremskiy 在OnInit()中,索引仍被放置在X中。我的代码是这样的:
last_time = iTime(NULL, 0, 0);

  if(last_time > bar.time_open){
    bar.time_open = last_time;
    coint++;//стартовое значение -1
  }
在我看来,带有FlagNewBar的条件是多余的。
原因: