Особенности языка mql5, тонкости и приёмы работы - страница 194

 

Здравствуйте! Прошу помощи экспертов!

Из документации

Глобальные переменные

"Инициализация глобальных переменных производится однократно после загрузки программы в память клиентского терминала и перед первой обработкой события Init. Для глобальных переменных, представляющих собой объекты классов, при инициализации вызываются соответствующие конструкторы."

Но по факту при смене периода графика у меня вызывается конструктор класса глобального объекта в индикаторе. 

Как сделать так, чтобы конструктор вызывался один раз после запуска индикатора?

 
Gudgeon:

Но по факту при смене периода графика у меня вызывается конструктор класса объекта в индикаторе. 

Как сделать так, чтобы конструктор вызывался один раз после запуска индикатора?

Смена ТФ для индикатора - запуск новой копии программы.

 
fxsaber:

Смена ТФ для индикатора - запуск новой копии программы.

Спасибо!

Неожиданно, по документации не понять.

В экспертах все нормально.

 
Узнать длительность компиляции своей программы можно следующим образом.
LastModifyEX5() - __DATETIME__
 
fxsaber:
Узнать длительность компиляции своей программы можно следующим образом.
А это LastModifyEX5() что? Поиском на сайте не находит.
 
Alexey Viktorov:
А это LastModifyEX5() что? Поиском на сайте не находит.

Это надо писать самому через WinAPI. Реализация здесь вторична.

 

Друзья , коллеги по увлечению!

Как программно для конкретного индикатора выставить видимость на конкретном ТФ, 

с учетом того что могут быть еще 5 индикаторов на других тф.

Рылся в описании, причем очень просто , поиск  в help , но поиск в описании не дает результат на механизм которым можно это решить.


Выставлять видимость объектов, умею.

 
Лимитник может поменять свое ORDER_TIME_SETUP_MSC - в случае частичного исполнения это свойство становится равно времени первого (возможно, предпоследнего) частичного исполнения.
 
В Тестере всегда будет срабатывать это условие.
int OnInit()
{
  MqlTick Tick;
  
  return(SymbolInfoTick(_Symbol, Tick) && (TimeCurrent() != Tick.time));
}
Сложно сказать, это баг Тестера или особенность.
 

Когда-то был предложен способ определения GMT-смещения серверного времени. Он не всегда работает точно.

Ниже, вроде, точный вариант.

// Аналог по серверному времени - https://www.mql5.com/ru/docs/dateandtime/timegmtoffset
int TimeServerGMTOffset( void )
{
  MqlCalendarValue Value[1];
  
  CalendarValueHistoryByEvent(840030016, Value, D'2020.12.03', D'2020.12.06');
  
  return((13 - ((Value[0].time / 3600) % 24)) * 3600);
}

// Аналог по серверному времени - https://www.mql5.com/ru/docs/dateandtime/timegmt
datetime TimeServerGMT( void )
{
  return(TimeTradeServer() + TimeServerGMTOffset());
}


Причина обращения: