Индикатор с входным параметром: цвет линии

 
Добавлено: код выложен Custom Moving Average Input Color

Зачем это нужно

бывают ситуации (хотелки), когда в тестере стратегий нужно самостоятельно задать цвет одной из линий индикатора. Например если Ваш советник обращается к двум индикаторам Moving Average, то в тестере стратегий это будет выглядеть примерно так:

Оба индикатора в тестере стратегий в визуальном режиме имеет один цвет

Рис. 1. Оба индикатора в тестере стратегий в визуальном режиме имеет один цвет

Как изменить индикатор

Понадобиться создать копию стандартного индикатора под новым именем, прописать один дополнительный параметр - цвет линии и не забыть про PlotIndexSetInteger и идентификатор "PLOT_LINE_COLOR".

...

 

Вот как вызывается обычный индикатор \MQL5\Indicators\Examples\Custom Moving Average.mq5 через iCustom:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ResetLastError();
   MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",
                     MA_Period,
                     MA_Shift,
                     MA_Method,
                     PRICE_CLOSE // считаем по ценам закрытия 
                     );
   if(MA_Method==INVALID_HANDLE)
     {
      Print("MA_handle = ",MA_handle,"  error = ",GetLastError());
      return(INIT_FAILED);
     }

и сравниваем с входными параметрами самого индикатора:

//--- input parameters
input int            InpMAPeriod=13;         // Period
input int            InpMAShift=0;           // Shift
input ENUM_MA_METHOD InpMAMethod=MODE_SMMA;  // Method

Как видите, отдельного ВХОДНОГО параметра отвечающего за цвет линии индикатора нет, так как цвет прописывается через свойство indicator_color1.


Начнём переделку индикатора Custom Moving Average

Первым делом сохраним индикатор под другим именем:

  • вкладка с индикатором должна быть активна и выбрана в редакторе кода MetaEditor
  • меню "Файл" - "Сохранить как..."
  • пусть имя будет "Custom Moving Average Input Color"
  • в полученном индикаторе сразу не забываем изменить в шапке название:

//+------------------------------------------------------------------+
//|                            Custom Moving Average Input Color.mq5 |
//|                   Copyright 2009-2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009-2017, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"

//--- indicator settings


Во входных параметрах прописываем новый параметр, через который будет задавать цвет линии индикатора:

//--- input parameters
input int            InpMAPeriod=13;         // Period
input int            InpMAShift=0;           // Shift
input ENUM_MA_METHOD InpMAMethod=MODE_SMMA;  // Method
input color          InpColor=clrBlue;       // Color
//--- indicator buffers


В OnInit() применяем цвет из входных параметров:

void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtLineBuffer,INDICATOR_DATA);
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpMAPeriod);
//---- line shifts when drawing
   PlotIndexSetInteger(0,PLOT_SHIFT,InpMAShift);
//--- color line
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,InpColor);
//--- name for DataWindow


Проверяем

входные параметры - заданный цвет clrBlue:

входные параметры - заданный цвет clrBlue

вкладка "Цвета" - здесь задан цвет clrRed (этот цвет по-умолчанию Вы видите в тестере стратегий в режиме визуализации, кстати):

вкладка "Цвета" - здесь задан цвет clrRed

и вот то, что видим на графике - цвет линии индикатора clrBlue, это именно тот цвет, который был задан во входных параметрах в новом параметре "Color":

Цвет линии в соответствии с входным параметром "Color"

...

 

Вызываем индикатор "Custom Moving Average Input Color" из эксперта

Порядок входных параметров должен соответствовать входным параметрам индикатора. 

В индикаторе:

//--- input parameters
input int            InpMAPeriod=13;         // Period
input int            InpMAShift=0;           // Shift
input ENUM_MA_METHOD InpMAMethod=MODE_SMMA;  // Method
input color          InpColor=clrBlue;       // Color

значит в эксперте нужно так:

//--- input parameters 
input int MA_Period=21;
input int MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMA;
input color MA_color=clrOrange;


Создание хендла пользовательского индикатора "Custom Moving Average Input Color" в OnInit() советника при помощи iCustom:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ResetLastError();
   MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average Input Color",
                     MA_Period,
                     MA_Shift,
                     MA_Method,
                     MA_color,
                     PRICE_CLOSE // считаем по ценам закрытия 
                     );
   if(MA_Method==INVALID_HANDLE)
     {
      Print("MA_handle = ",MA_handle,"  error = ",GetLastError());
      return(INIT_FAILED);
     }


Результат (в советнике для индикатора задан цвет clrOrange) запуска советника в тестере стратегий в режиме визуализации:

Цвет индикатора в тестере стратегий в визуальном режиме clrOrange

Файлы: Custom Moving Average Input Color.mq5 - индикатор, Take Profit = iMA.mq5 - советник проверочный.

 

Добавлено: код выложен Custom Moving Average Input Color