Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

HistoryTicks - библиотека для MetaTrader 4

Просмотров:
4522
Рейтинг:
(16)
Опубликован:
2018.03.29 11:09
Обновлен:
2021.04.10 13:31
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Советники в MetaTrader 4 пропускают тики, пришедшие в во время любых пауз: выполнение торговых приказов, вычисления, ожидание и т.д. Такая потеря информации может привести к серьезному искажению заложенной логики в ТС. Особенно для ТС, где используется анализ Ask-цен, спред и т.д.

Например, стандартное написание MetaTrader 4 советника не позволяет гарантированно выяснить OHLC-Ask для текущего бара, даже если советник был запущен до начала его формирования.

Данная библиотека/инструментарий позволяет наделить любой советник информацией о прошедших тиках между соседними NewTick-событиями - вызовы OnTick(). Для этого нужно в начале исходника прописать следующую строку:

#include <fxsaber\HistoryTicks\HistoryTicks.mqh> // Библиотека доступа советников к прошедшим тикам


Пример

В качестве демонстрации описанной возможности приложен советник, из кода которого хорошо видна логика происходящего.

#property strict

#include <fxsaber\HistoryTicks\HistoryTicks.mqh> // Библиотека доступа советников к прошедшим тикам

#define TOSTRING(A) #A + " = " + (string)(A) + " "

void OnTick()
{
  static int Num = 0;
  
  // Распечатываем все тики, что пришли во время выполнения предыдущей OnTick
  for (int i = 0; i < ArraySize(LastTicks); i++)  
    Print(TOSTRING(Num++) + TOSTRING(LastTicks[i].time) + TOSTRING(LastTicks[i].bid) + TOSTRING(LastTicks[i].ask));
    
  Print(TOSTRING(ArraySize(HistoryTicks))); // Количество всего сохраненных тиков за время работы советника
    
  Sleep(10000); // Несмотря на длительную паузу, накопление тиков для следующей OnTick будет происходить
}

В коде видно, что стали доступны два тиковых массива:

  • HistoryTicks - все тики с момента запуска советника;
  • LastTicks - все тики с момента последнего события NewTick.


Индикатор

Работа таких советников возможна только при условии, что будет запущен индикатор HistoryTicks. Иначе на каждом тике любой такой советник будет выдавать следующее предупреждение:

2018.03.26 00:05:14.924 HistoryTicks_Example EURGBP,M1: Run the HistoryTicks_EURGBP-indicator!!!

Этот приложенный индикатор и транслирует получаемые им тики во все советники своего символа. Индикатор следит за тем, чтобы не было запущено несколько его копий на одном и том же символе. Также при его удалении с графика сохраняет все накопленные тики в соответствующий файл песочницы терминала.


Использование

В итоге алгоритм работы с модифицированными строкой советниками следующий (на примере EURUSD):

  • Запустить индикатор HistoryTicks на любом графике EURUSD;
  • Запустить советники на любых графиках EURUSD.

Теперь на каждом вызове OnTick можно прогонять в цикле логику ТС через все тики (массив LastTicks), будучи уверенным в отсутствии пропусков, а так же в OnTick достучаться до любого тика (с момента запуска советника) через массив HistoryTicks.


Особенности

  • Используется библиотека TypeToBytes;
  • Модифицированные таким образом (одна строка) советники будут работать только на Реал/Демо-счетах;
  • Чтобы советник работал в Тестере Стратегий, упомянутую строку нужно закомментировать;
  • В исходниках есть кроссплатформенные функции (файл Data_String.mqh), которые позволяют помещать/извлекать любые данные в/из строки. Например, это дает возможность производить удобный обмен произвольными данным между любыми MQL-программами за счет string-параметра (sparam) пользовательских событий;
  • Данная библиотека может служить ядром для написания MQL4-варианта функции CopyTicks, что вместе с другими решениями двигает код к еще большей кроссплатформенности;
  • В MetaTrader 5 из-за штатного MQL-доступа к тиковой истории смысл в таком дополнительном функционале отсутствует (хоть предложенное LastTicks-решение и видится более удобным). Однако, представленный подход к обмену различными данными может быть актуален и для MetaTrader 5;
  • Замер скорости показал, что подобные решения вызывают задержку в несколько микросекунд, редко давая всплески до нескольких единиц миллисекунд. Поэтому вопрос производительности предложенного инструментария остро не встает;
  • Передача данных идет через нулевое пользовательское событие (id == CHARTEVENT_CUSTOM). При необходимости изменить номер события потребуется править исходник;
  • Тики в соответствующих массивах расположены от более ранних/старых к более поздним/свежим. Последний тик - конец массива.
VR Smart Grid Lite VR Smart Grid Lite

Стратегия частичного усреднения и закрытия сети ордеров против тренда.

NYBOT Index NYBOT Index

Формула расчета индикатора соответствует индексу NYBOT (New York Board of Trade). Это индекс доллара по корзине из шести тех валют, чьи страны образуют наибольший внешнеторговый оборот США.

RenkoOneBuffer RenkoOneBuffer

Индикатор RenkoOneBuffer позволяет отображать графики Ренко в подокне индикатора. Тип графиков Ренко показывает лишь движения цены, большие заданного (box size). Он помогает устранить шум и сосредоточиться на основных трендах.

DeleteTradeArrows DeleteTradeArrows

Удаляет с графика объекты-стрелки, которыми отмечаются сделки на графике. Утилита реализована в виде индикатора, который сам ничего не рисует.