Возможно иметь массив примитивов в MQL4, проблема здесь в том, что вам придется копировать их все каждый тик, что является пустой тратой времени и ресурсов.Если вы хотите сохранить более сложные данные (скажем, MqlTick
), вы должны сохранить их как структуру или создать класс и сохранить классы.Копировать все объекты бессмысленно, поэтому стоит подумать о применении CList
или CArrayObj
и добавлении объектов в конец.Простая магия поможет вызвать элемент с индексом 0:
#include <Arrays\ArrayObj.mqh>
class CTick : public CObject{
public: double m_bid, m_ask;
CTick(const double bid,const double ask):m_bid(bid),m_ask(ask){}
};
CArrayObj *listOfTicks;
CTick *getTickByShift(const int shift=0)
{
return listOfTicks.At(listOfTicks.Total()-1-shift));
}
int OnInit(){
listOfTicks=new CArrayObj();
return(1);
}
void OnTick(){
listOfTicks.Add(new CTick(Bid,Ask));
//example of accessing ticks 0 and 3, keep in mind you do not have 3 at start!
double bid0=getTickByShift(0).m_bid;
double ask3=getTickByShift(3).m_bid;
}
void OnDeinit(const int reason){delete listOfTicks;}
Если вам нужно действительно неограниченное количество операций - вероятно, вам будет достаточно 2 ^ 31-1, для ускорения вы можете подумать о listOfTicks.Step(1000);
иметь 1000 пустых слотов и не изменять размер (= копировать все в новое место) массив каждый тик.