Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 2672
- Рейтинг:
- Опубликован:
- 2017.04.17 11:44
- Обновлен:
- 2017.04.25 13:09
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Если в MT изменить таймфрейм или имя символа чарта, то все индикаторы на чарте выгрузятся с чарта и загрузятся на него снова. При этом, в отличие от MT4, в MT5 последовательность выгрузиться/загрузиться не определена из-за особенности внутренней архитектуры.
Данное обстоятельство иногда вызывает не сразу очевидные проблемы, связанные с тем, что OnInit новой загруженной копии индикатора может выполниться раньше OnDeinit выгружаемой копии.
Ситуации, в которых эта проблема проявляется, чаще всего связана с желанием передачи (явно/неявно) какой-то информации из OnDeinit старой копии индикатора в OnInit новой. Иначе говоря, требуется, чтобы новая копия индикатора знала о существовании старой и не загружалась, пока старая не выгрузится.
Данная библиотека позволяет любой индикатор наделить такой синхронизацией.
Как пример, возьмем простой индикатор
#property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 #property indicator_color1 clrRed #property indicator_type1 DRAW_LINE input int Input = 0; double Buffer[]; int OnInit() { SetIndexBuffer(0, Buffer); Print("Init"); return(INIT_SUCCEEDED); } void OnDeinit( const int Reason ) { Print("DeInit"); } void OnChartEvent( const int id, const long& lparam, const double& dparam, const string& sparam ) { } void OnTimer() { } int OnCalculate( const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[] ) { ArrayCopy(Buffer, open, prev_calculated, prev_calculated); return(rates_total); }
Если запустить этот индикатор и начать переключать ТФ или символ его чарта, то в журнале мы увидим нарушение чередования строк "Init" и "Deinit".
Однако, если добавить в начале кода индикатора следующую строку
#include <Init_Sync.mqh> // Делает синхронизированными Init/Deinit индикаторов
то соответствующее чередование будет соблюдаться.
Чтобы это свойство действовало для какого-либо индикатора, нужно так же в начале кода этого индикатора добавить вышеприведенную строку.
Замечания
// Библиотека делает синхронизированными Init/Deinit индикаторов. // В индикаторе обязательно должны быть int OnInit(), OnDeinit, OnTimer и OnChartEvent. // Которые не используются - прописать пустыми. #include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280 #include <crc64.mqh> // https://www.mql5.com/en/blogs/post/683577
Подцепляемые библиотекой mqh-файлы находятся по указанным в исходнике ссылкам.

Индикатор XFatlXSatlCloud с возможностью изменения таймфрейма индикатора во входных параметрах.

Построение этой, скользящей средней основано на методе Демарка "Прогнозирование дневного диапазона цен".

Значения индикатора Average True Range (ATR) с других таймреймов в цифровом виде выводятся в виде текста на график.

Индикатор MA, для которого можно из кода задавать значения двух уровней.