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

Init_Sync - библиотека для MetaTrader 5

Просмотров:
2422
Рейтинг:
(31)
Опубликован:
2017.04.17 11:44
Обновлен:
2017.04.25 13:09
\MQL5\Include\
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Если в 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_HTF XFatlXSatlCloud_HTF

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

ColorXMUV ColorXMUV

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

Average True Range (digital) Average True Range (digital)

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

Custom Moving Average Levels Custom Moving Average Levels

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