Язык программирования 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