В общее достояние - ОО реализация интервальных таймеров для 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)
};