Вот как вызывается обычный индикатор \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:
вкладка "Цвета" - здесь задан цвет clrRed (этот цвет по-умолчанию Вы видите в тестере стратегий в режиме визуализации, кстати):
и вот то, что видим на графике - цвет линии индикатора clrBlue, это именно тот цвет, который был задан во входных параметрах в новом параметре "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) запуска советника в тестере стратегий в режиме визуализации:
Файлы: Custom Moving Average Input Color.mq5 - индикатор, Take Profit = iMA.mq5 - советник проверочный.
Добавлено: код выложен Custom Moving Average Input Color
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Зачем это нужно
бывают ситуации (хотелки), когда в тестере стратегий нужно самостоятельно задать цвет одной из линий индикатора. Например если Ваш советник обращается к двум индикаторам Moving Average, то в тестере стратегий это будет выглядеть примерно так:
Рис. 1. Оба индикатора в тестере стратегий в визуальном режиме имеет один цвет
Как изменить индикатор
Понадобиться создать копию стандартного индикатора под новым именем, прописать один дополнительный параметр - цвет линии и не забыть про PlotIndexSetInteger и идентификатор "PLOT_LINE_COLOR".
...