Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
Мульт 10 пар, WindowsXP, индекс 6.6, Core2Duo 6600 2.4 (разогнан до 2.88ГГц), 6Gb. Тест мультивалютника на периоде в семь месяцев на четырёхчасовом графике в режиме "Все тики" проходит примерно за 15 минут! Но это при использовании функции OnTimer() с периодичностью вызова 60 секунд. А если использовать функцию OnTick(), то тест съедает поболя получаса! Мультивалютник съедает в этом тесте 819 мегов памяти. В этом году я обленился и решил не упаковывать индикаторы в индикаторные функции, благо для чемпионата такого результата достаточно, только в индюках ампутировал пересчёт текущего бара и всё!
Я видел функцию OnTimer в документации и никогда не мог понять её отличие от OnTick. Нельзя ли объяснить как OnTimer позволяет ускорить советник по сравнению с OnTick? Будут ли скорости такие же если в OnTick проверять начало новой минуты как у Вас или любого другого таймфрейма и производить расчёты только тогда?
Конструкция у меня примерно такая (картинка во вложении).
Максимально получение данных убраны в "новый бар" .На тиках только условия.
А чего их обновлять? Все в цикле,запрашиваю скажем бид:
Если все данные рассчитываются на барах, почему бы и условия не проверять тоже на барах? Ведь если даже текущая цена (бид, аск) берутся на баре, то нет смысла проверять условия, использующие одни и те же данные, на каждом тике.
вы не можете понять - когда приходит тик, а когда срабатывает таймер?
какую страницу документации вы читали?
Давайте без сарказма и сосредоточимся на сути моего вопроса:
Будут ли скорости советников такие же если в одном используется OnTimer а в другом OnTick, в котором проверяется начало нового таймфрейма и производятся расчёты только тогда?
только конструктив! мне важна документация. Поэтому и спрашиваю. Где можно было читать и не понять. дайте ссылку.
Если вы уже поняли отличия и вам не надо их объяснять, то сами поймете
Читал документацию по ссылке в посте (выделена зелёным цветом). А вообще-то хотелось бы высказать желание чтобы модераторы не отклонялись от темы ветки и не флудили. А если им вместо того чтобы дать прямой ответ интересно узнать где я не нашёл описание функции OnTimer, то пишите в личку. На то она и есть.
OnTick - Генерируется только для экспертов
при поступлении нового тика по символу, к графику которого прикреплен
эксперт.
OnTimer - Функция OnTimer() вызывается при наступлении события Timer,
которое генерируется системным таймером. Периодичность
наступления этого события устанавливается при подписке на получение
функцией EventSetTimer().
на практике
Тиков может не быть, а таймер работает всегда. То есть тики могут не приходить, а эксперт ежетаймерово всегда может выполнять какие-то проверки и вычисления. в OnTimer. По сути - вы можете дублировать код в OnTick и в OnTimer, если нужно.
ваш вопрос:
Я видел функцию OnTimer в документации и никогда не мог понять её отличие от OnTick.
Конструкция у меня примерно такая (картинка во вложении).
Максимально получение данных убраны в "новый бар" .На тиках только условия.
А чего их обновлять? Все в цикле,запрашиваю скажем бид:
У меня следующая конструкция, работающая на каждом тике:
Так происходит инициализация.
А так происходит работа эксперта в функции OnTick().
То есть на каждом тике у меня обрабатывается один инструмент (переменная "к") .
PS: В своем коде я не использую понятие "новый бар" вообще. И получаю приемлемое время тестирования на 12 инструментах.
Инициализация такая же.Заполняю массивы.Циклом подключаю индикатор.
На каждом тике прохожу все инструменты.Надо обдумать будет последовательный вариант,если когда либо не влезу в лимит.
Мульт 10 пар, WindowsXP, индекс 6.6, Core2Duo 6600 2.4 (разогнан до 2.88ГГц), 6Gb. Тест мультивалютника на периоде в семь месяцев на четырёхчасовом графике в режиме "Все тики" проходит примерно за 15 минут! Но это при использовании функции OnTimer() с периодичностью вызова 60 секунд. А если использовать функцию OnTick(), то тест съедает поболя получаса! Мультивалютник съедает в этом тесте 819 мегов памяти. В этом году я обленился и решил не упаковывать индикаторы в индикаторные функции, благо для чемпионата такого результата достаточно, только в индюках ампутировал пересчёт текущего бара и всё!
Я видел функцию OnTimer в документации и никогда не мог понять её отличие от OnTick.
вы не можете понять - когда приходит тик, а когда срабатывает таймер?
какую страницу документации вы читали?
Конструкция у меня примерно такая (картинка во вложении).
Максимально получение данных убраны в "новый бар" .На тиках только условия.
А чего их обновлять? Все в цикле,запрашиваю скажем бид:
вы не можете понять - когда приходит тик, а когда срабатывает таймер?
какую страницу документации вы читали?
Давайте без сарказма и сосредоточимся на сути моего вопроса:
Будут ли скорости советников такие же если в одном используется OnTimer а в другом OnTick, в котором проверяется начало нового таймфрейма и производятся расчёты только тогда?
Давайте без сарказма и сосредоточимся на сути моего вопроса:
только конструктив! мне важна документация. Поэтому и спрашиваю. Где можно было читать и не понять. дайте ссылку.
Если вы уже поняли отличия и вам не надо их объяснять, то сами поймете
Будут ли скорости советников такие же если в одном используется OnTimer а в другом OnTick
только конструктив! мне важна документация. Поэтому и спрашиваю. Где можно было читать и не понять. дайте ссылку.
Если вы уже поняли отличия и вам не надо их объяснять, то сами поймете
Мне важно чтоб вы поняли суть
В теории
OnTick - Генерируется только для экспертов при поступлении нового тика по символу, к графику которого прикреплен эксперт.
OnTimer - Функция OnTimer() вызывается при наступлении события Timer, которое генерируется системным таймером. Периодичность наступления этого события устанавливается при подписке на получение функцией EventSetTimer().
на практике
Тиков может не быть, а таймер работает всегда. То есть тики могут не приходить, а эксперт ежетаймерово всегда может выполнять какие-то проверки и вычисления. в OnTimer.
По сути - вы можете дублировать код в OnTick и в OnTimer, если нужно.
ваш вопрос:
Я видел функцию OnTimer в документации и никогда не мог понять её отличие от OnTick.
объяснен?