Вопрос по OnTimer и возможным альтернативам
Попробуйте так:
Таймер, если я правильно понимаю, может быть только один. Как бы относительно эффективно реализовать две остальные?
Мой креатив на эту тему с горем пополам работает, но может есть более простой способ?Есть подозрение, что он заметно тормозит тестер как минимум на инициализации, а вероятнее каждый тик.
И смежная тема - устанавливаемый таймер а-ля "таймаут до". Есть ли варианты помимо просто записи времени в глобальную переменную? Просто есть смутное ощущение, что при написании большинства экспертов подобные задачи должны бы быть актуальными. И, следовательно, что их до меня уже сто раз успели реализовать более опытные товарищи. И вместо того, чтобы изобретать велосипед, стоило бы воспользоваться готовым девайсом, который почему-то не попадается среди документации...
так не устроит?
//+------------------------------------------------------------------+ //| timer.mq5 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ long timerminut=0, timerhour=0, timerday=0; //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(TimeCurrent()-timerminut>60) { //<---исполнение кода timerminut=TimeCurrent(); } if(TimeCurrent()-timerhour>3600) { //<---исполнение кода timerhour=TimeCurrent(); } if(TimeCurrent()-timerday>86400) { //<---исполнение кода timerday=TimeCurrent(); } } //+------------------------------------------------------------------+
Timer, if I understand correctly, there can be only one. How would relatively efficiently implement the other two?
My creative on this topic with grief in half works, but may have an easier way?There is a suspicion that it noticeably slows tester at least initialization, and probably every tick.
...
#define HOUR 60 #define DAY 1440 //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- create timer EventSetTimer(60); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- static int count=0; count++; FunctionMinute(); if(count%HOUR==0) FunctionHour(); if(count%DAY==0) FunctionDaily(); } void FunctionMinute() { Print(__FUNCTION__," ",TimeToString(TimeLocal())); } void FunctionHour() { Print(__FUNCTION__," ",TimeToString(TimeLocal())); } void FunctionDaily() { Print(__FUNCTION__," ",TimeToString(TimeLocal())); } //+------------------------------------------------------------------+
Thanks! This version is even better :) Adapted it for my script now -- works flawlessly and no longer requires multiple datetime counters.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Таймер, если я правильно понимаю, может быть только один. Как бы относительно эффективно реализовать две остальные?
Мой креатив на эту тему с горем пополам работает, но может есть более простой способ?Есть подозрение, что он заметно тормозит тестер как минимум на инициализации, а вероятнее каждый тик.
И смежная тема - устанавливаемый таймер а-ля "таймаут до". Есть ли варианты помимо просто записи времени в глобальную переменную? Просто есть смутное ощущение, что при написании большинства экспертов подобные задачи должны бы быть актуальными. И, следовательно, что их до меня уже сто раз успели реализовать более опытные товарищи. И вместо того, чтобы изобретать велосипед, стоило бы воспользоваться готовым девайсом, который почему-то не попадается среди документации...