Возьмите за эталон какой-нибудь тикер. Например, Ваши наручные часы. Посмотрите, на сколько будет отличаться время Вашего компа через час (по эталону) от эталона. Конечно, расхождения будут.
Но расхождения познаются в сравнении. Возьмите секундный таймер или 100 мс. И посмотрите, какие будут различия опять же с эталоном через 3600 "секунд" эталона и 3600 "секунд" таймера.
Однако, данная библиотека может включить таймер и в этом режиме работы советника, для этого перед вызовом библиотеки нужно прописать следующую строку
#define ACCURATETIMER_FRAME_MODE // Делает рабочим таймер советников, работающих во Frame-режиме
Учитывайте, что в исходном советнике должен быть прописан OnChartEvent (даже пустой), и на OnTimer начинает распространяться соответствующая Frame-уязвимость.
Пример такого советника приложен
// Демонстрация работы таймера советника во Frame-режиме#define ACCURATETIMER_FRAME_MODE // Делает рабочим таймер советников, работающих во Frame-режиме #include <AccurateTimer.mqh> // Повышение точности штатного таймераsinputuint Range = 1; // Входной параметр для Оптимизации#define SETRANGE(A, START, STEP, END) ParameterSetRange(#A, true, A, START, STEP, END)
voidOnTesterInit() { SETRANGE(Range, 0, 1, Range); }
voidOnTesterDeinit() { EventSetTimer(1); } // В конце Оптимизации установили таймер// Учитывайте Frame-уязвимость! - https://www.mql5.com/ru/forum/170952/page71#comment_6626688voidOnChartEvent( constint id, constlong& lparam, constdouble& dparam, conststring& sparam ) {}
voidOnTimer()
{
staticconstbool IsFrame = MQLInfoInteger(MQL_FRAME_MODE);
if (IsFrame)
Print("Hello World!");
}
всё упомянутое - разные таймеры. На нагруженной машине расхождения будут существенны и естественны
С бибилиотекой расхождений не будет.
всё упомянутое - разные таймеры. На нагруженной машине расхождения будут существенны и естественны
В чем противоречие?
Чтобы убрать эти "естественные" расхождения и была написана библиотека.
В чем противоречие?
Чтобы убрать эти "естественные" расхождения и была написана библиотека.
они измеряют разные вещи..
Возьмите за эталон какой-нибудь тикер. Например, Ваши наручные часы. Посмотрите, на сколько будет отличаться время Вашего компа через час (по эталону) от эталона. Конечно, расхождения будут.
Но расхождения познаются в сравнении. Возьмите секундный таймер или 100 мс. И посмотрите, какие будут различия опять же с эталоном через 3600 "секунд" эталона и 3600 "секунд" таймера.
они измеряют разные вещи..
Какая разница, что они измеряют?
Есть задача - каждые Х мс выполнять действие, и с помощью обычного таймера это сделать не удастся из-за особенностей его реализации.
Библиотека позволяет закрыть этот пробел.
Какая разница, что они измеряют?
Есть задача - каждые Х мс выполнять действие, и с помощью обычного таймера это сделать не удастся из-за особенностей его реализации.
Библиотека позволяет закрыть этот пробел.
Да ладно :) Сначала придумают себе проблему, потом её героически решают. Нет такой задачи.
Да ладно :) Сначала придумают себе проблему, потом её героически решают. Нет такой задачи.
Ну, нет так нет
Frame-режим
Советники в режиме сбора фреймов результатов Оптимизации игнорируют следующие штатные события обычной работы советника: Init, Deinit, NewTick, Trade, TradeTransaction, BookEvent и Timer. Рабочим событием остается только ChartEvent.
Однако, данная библиотека может включить таймер и в этом режиме работы советника, для этого перед вызовом библиотеки нужно прописать следующую строку
Учитывайте, что в исходном советнике должен быть прописан OnChartEvent (даже пустой), и на OnTimer начинает распространяться соответствующая Frame-уязвимость.
Пример такого советника приложен
fxsaber:
Frame-режим
Советники в режиме сбора фреймов результатов Оптимизации игнорируют следующие штатные события обычной работы советника: Init, Deinit, NewTick, Trade, TradeTransaction, BookEvent и Timer. Рабочим событием остается только ChartEvent.
Имхо, частично правильное утверждение. Обсуждалось.
Имхо, частично правильное утверждение. Обсуждалось.
Не заметил частичности. Все, как сказал.