...It's time for financial transactions...

Main menu

Массивы Time, Open, High, Low, etc. в MQL 5

При переносе из MQL 4 в MQL 5, новых разработках на MQL 5, разработчик сталкивается с отсутствием привычных средств разработки. Ничего страшного в этом нет, некоторых средств разработки нет, т.к. они устарели, в них исчезла необходимость, или имеются лучшие аналоги. Однако, в некоторых случаях хотелось бы иметь под рукой что то уже привычное, пусть даже и имеющее чисто внешнее сходство с ранее использовавшимися средствами.

Возьмем, для примера, массивы таймсерий Time, High, Low и проч. Трудно встретить индикатор, или советник, в котором не использовались бы эти массивы. Однако, в MQL 5 этих массивов нет! Вместо них приходится писать пачку кода, связанную с копированием. Вместе с тем, несколько не сложных манипуляций добавит поддержку массивов таймсерий из MQL 4 в любую программу на MQL5.

Для этого нужно вспомнить о поддержке ООП в MQL вообще и в MQL 5 в частности, а именно о перегрузке операций. А если еще точнее, о перегрузке индексного оператора [ ]. Например, для поддержки массива Time[ ] создадим такой класс:


class cTime {
public:
void cTime() {
symbol = _Symbol;
tf     = PERIOD_CURRENT;
}
virtual void ~cTime() {}
datetime operator[] (int i) {
datetime _Time[];
ArraySetAsSeries(_Time,true);
int _copied = CopyTime(symbol, tf, 0, Bars(symbol, tf), _Time);
if(_copied > 0) return _Time[i];
return (-1);
}
protected:
private:
string symbol;
ENUM_TIMEFRAMES tf;
};

Далее, где то в теле программы, действуем таким образом:


cTime Time;
//Теперь к Time можно обращаться, как к обычному массиву
Print("0 ",TimeToString(Time[0])," 1: ", TimeToString(Time[1])," 2: ", TimeToString(Time[2]) );

Аналогичным образом можно получить поддержку и прочих массивов таймсерий.

Leave a Reply

Your email address will not be published. Required fields are marked *

eleven + nine =

Политика обработки персональных данных