Тимур Машнин

Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5


Скачать книгу

— – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

      //| Custom indicator iteration function |

      //+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

      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 [])

      {

      // – —

      ArraySetAsSeries (time, true);

      ArraySetAsSeries (high, true);

      ArraySetAsSeries (low, true);

      ArraySetAsSeries (close, true);

      ObjectDelete (0,«Image»);

      ObjectCreate (0,«Image», OBJ_BITMAP,0,time [1],close [1]);

      ObjectSetString (0,«Image», OBJPROP_BMPFILE,»:: IMG»);

      uint width=100;

      uint height=100;

      ResourceReadImage("::Images\\image.bmp», ExtImg, width, height);

      TextOut («Text», 10,10,TA_LEFT|TA_TOP, ExtImg,100,100,0xffffff, COLOR_FORMAT_XRGB_NOALPHA);

      ResourceCreate (»:: IMG», ExtImg,100,100,0,0,0,COLOR_FORMAT_XRGB_NOALPHA);

      ChartRedraw ();

      // – - return value of prev_calculated for next call

      return (rates_total);

      }

      //+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

      void OnDeinit (const int reason) {

      ObjectsDeleteAll (0, -1, -1);

      }

      В качестве примера использования графических объектов, рассмотрим создание индикатора, который выводит в небольшое окно на графике символа тот же график, но с другим временным периодом.

      Для этого используем графический объект OBJ_CHART.

      В качестве входных параметров индикатора используем символ графика и его период:

      #property indicator_chart_window

      input string InpSymbol=«EURUSD»; // Символ

      input ENUM_TIMEFRAMES InpPeriod=PERIOD_CURRENT; // Период

      В функции OnInit () создадим графический объект График:

      int OnInit ()

      {

      if (!ObjectCreate (0,«Chart», OBJ_CHART,0,0,0))

      {

      return (false);

      }

      По умолчанию точка привязки этого объекта – левый верхний угол графика.

      Определим отступ точки привязки объекта, его размеры, символ и период графика, отображение шкалы времени, размер точки привязки, с помощью которой можно перемещать объект, отображение ценовой шкалы, режим перемещения мышкой, цвет рамки графика:

      ObjectSetInteger (0,«Chart», OBJPROP_XDISTANCE,10);

      ObjectSetInteger (0,«Chart», OBJPROP_YDISTANCE,20);

      ObjectSetInteger (0,«Chart», OBJPROP_XSIZE,300);

      ObjectSetInteger (0,«Chart», OBJPROP_YSIZE,200);

      ObjectSetString (0,«Chart», OBJPROP_SYMBOL, InpSymbol);

      ObjectSetInteger (0,«Chart», OBJPROP_PERIOD, InpPeriod);

      ObjectSetInteger (0,«Chart», OBJPROP_DATE_SCALE, true);

      ObjectSetInteger (0,«Chart», OBJPROP_WIDTH,1);

      ObjectSetInteger (0,«Chart», OBJPROP_PRICE_SCALE, true);

      ObjectSetInteger (0,«Chart», OBJPROP_SELECTABLE, true);

      ObjectSetInteger (0,«Chart», OBJPROP_SELECTED, true);

      ObjectSetInteger (0,«Chart», OBJPROP_COLOR, clrBlue);

      С помощью свойства объектов OBJPROP_CHART_ID функции ObjectGetInteger получим идентификатор графика, используя который мы теперь можем применять функции работы с графиками (https://www.mql5.com/ru/docs/chart_operations) и свойства графиков (https://www.mql5.com/ru/docs/constants/chartconstants/enum_chart_property):

      long chartId=ObjectGetInteger (0,«Chart», OBJPROP_CHART_ID);

      Откроем наш график символа, к которому мы хотим присоединить индикатор, и нажав правой кнопкой мышки, выберем пункт в контекстном меню Шаблоны и Сохранить шаблон.

      Теперь мы можем перенести на наш графический объект все настройки и индикаторы графика символа:

      ChartApplyTemplate(chartId,"my.tpl»);

      ChartRedraw (chartId);

      // – —

      return (INIT_SUCCEEDED);

      }

      Присоединив индикатор к графику символа, мы можем нажать на нем правой кнопкой мышки и изменить его свойства, включая его период, размеры