Интервальный таймер

29 июля 2016, 03:16
Maxim Kuznetsov
0
388

В общее достояние - ОО реализация интервальных таймеров для MT4. Из фич - произвольное кол-во таймеров, привязка к реальному времени, возможность работы в тестере.

Набросано по мотивам https://www.mql5.com/ru/forum/91807 в результате бессоницы :-)

Далее - интерфейс, а библиотека и тестово-демонстрационный эксперт в аттаче

class TimeService;     
class Timer {
public:
   Timer(int period,datetime startTime=0);   // должен срабатывать с периодичностью period начиная со startTime (по умолч.прям сразу)
   ~Timer();
   virtual bool Clock();   // будет вызван при истечении period, если вернёт false то след.вызова не будет
   virtual void OnAttach();   // при постановке на обслуживание
   virtual void OnDetach();   // при снятии с обслуживания
   int Lag();  // задержка от последнего запланированного
   int Omit();// кол-во пропущенных сигналов
public:
   int period;          // периодичность таймера
   datetime startTime;  // время начала работы
   datetime shedTime;   // время след. запланированного вызова (устанавливается службой)
   Timer *next;         // след. таймер в списке таймеров службы
   TimeService *ts;     // служба таймеров
};
class TimeService {
public:
   TimeService();      
   ~TimeService();
   void Clock();// должен вызываться при каждом удобном случае
   bool Add(Timer *);   // добавить таймер
   bool Del(Timer *);   // удалить таймер
public:
   void Shed(Timer *);
   Timer *first;        // список таймеров сорт. по времени вызова (shedTime)
   datetime now;        // последнее известное время (время вызова Clock)
};


Файлы:
Timer.mqh  2 kb
Timer.mq4  4 kb
TimerDemo.mq4  4 kb
Поделитесь с друзьями: