Тимур Машнин

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


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

для уровней необходимо определить их количество, используя функцию IndicatorSetInteger. Например, для индикатора RSI это выглядит следующим образом.

      Свойства индикатора:

      //#property indicator_level1 30

      //#property indicator_level2 70

      //#property indicator_levelcolor Red

      //#property indicator_levelstyle STYLE_SOLID

      //#property indicator_levelwidth 1

      Заменяем на код:

      IndicatorSetInteger (INDICATOR_LEVELS,2);

      IndicatorSetDouble (INDICATOR_LEVELVALUE,0,30);

      IndicatorSetDouble (INDICATOR_LEVELVALUE,1,70);

      IndicatorSetInteger (INDICATOR_LEVELCOLOR,0,0xff0);

      IndicatorSetInteger (INDICATOR_LEVELCOLOR,1,0xff0);

      IndicatorSetInteger (INDICATOR_LEVELSTYLE,0,STYLE_SOLID);

      IndicatorSetInteger (INDICATOR_LEVELSTYLE,1,STYLE_SOLID);

      IndicatorSetInteger (INDICATOR_LEVELWIDTH,0,1);

      IndicatorSetInteger (INDICATOR_LEVELWIDTH,1,1);

      Функция IndicatorSetInteger также позволяет определить точность индикатора, например:

      IndicatorSetInteger (INDICATOR_DIGITS,2);

      В результате будут отображаться только два знака после запятой значения индикатора.

      Для функции IndicatorSetString нет соответствующих ей свойств индикатора.

      С помощью функции IndicatorSetString можно определить короткое наименование индикатора, например для индикатора MACD:

      IndicatorSetString (INDICATOR_SHORTNAME,«MACD (»+string (InpFastEMA) +»,»+string (InpSlowEMA) +»,»+string (InpSignalSMA) +»)»);

      Соответственно имя индикатора будет отображаться в окне индикатора как:

      Кроме того, функция IndicatorSetString позволяет установить подписи к уровням индикатора, например для индикатора RSI:

      IndicatorSetString (INDICATOR_LEVELTEXT, 0,«Oversold»);

      IndicatorSetString (INDICATOR_LEVELTEXT, 1,«Overbought»)

      С помощью функции PlotIndexSetDouble определяют, какое значение буфера индикатора является пустым и не участвует в отрисовке диаграммы индикатора.

      Диаграмма индикатора рисуется от одного непустого значения до другого непустого значения индикаторного буфера, пустые значения пропускаются. Чтобы указать, какое значение следует считать «пустым», необходимо определить это значение в свойстве PLOT_EMPTY_VALUE. Например, если индикатор должен рисоваться по ненулевым значениям, то нужно задать нулевое значение в качестве пустого значения буфера индикатора:

      PlotIndexSetDouble (индекс_построения, PLOT_EMPTY_VALUE,0);

      Функция PlotIndexSetInteger позволяет программным способом, динамически, задавать такие свойства диаграммы индикатора, как код стрелки для стиля DRAW_ARROW, смещение стрелок по вертикали для стиля DRAW_ARROW, количество начальных баров без отрисовки и значений в DataWindow, тип графического построения, признак отображения значений построения в окне DataWindow, сдвиг графического построения индикатора по оси времени в барах, стиль линии отрисовки, толщина линии отрисовки, количество цветов, индекс буфера, содержащего цвет отрисовки.

      Давайте разберем каждое из этих свойств по порядку на примере индикатора Custom Moving Average.

      Изменим свойство indicator_type1 индикатора Custom Moving Average:

      #property indicator_type1 DRAW_ARROW

      В функции OnInit () добавим вызов функции PlotIndexSetInteger, определяя различный код стрелки для стиля DRAW_ARROW:

      PlotIndexSetInteger (0,PLOT_ARROW,2);

      PlotIndexSetInteger (0,PLOT_ARROW,3);

      PlotIndexSetInteger (0,PLOT_ARROW,4);

      PlotIndexSetInteger (0,PLOT_ARROW,5);

      PlotIndexSetInteger (0,PLOT_ARROW,6);

      PlotIndexSetInteger (0,PLOT_ARROW,7);

      PlotIndexSetInteger (0,PLOT_ARROW,8);

      PlotIndexSetInteger (0,PLOT_ARROW,11);

      PlotIndexSetInteger