Скачать MetaTrader 5

Свойства индикатора и раскраска дополнительных объектов

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Узнай, как социальный трейдинг увеличит твой доход
Eugeniy Lugovoy
1979
Eugeniy Lugovoy 2014.08.22 11:04 

Имеется индикатор показывающий открытие/закрытие рынков:

Индикатор 

Каждый рынок раскрашивается предопределенным цветом, дополнительные объекты (вертикальные линии и подписи) берут свойства #property индикатора.

Однако, если свойство цвета меняется интерактивно: 

Смена свойств 

То сам индикатор принимает нужный цвет (красный на скриншоте), однако дополнительные объекты не принимают измененный цвет.

Код:

void ShowEvent(int pLine, datetime pTime, string pEvent)
{
 string oName;
 color clr = clrNONE;
 int   style = STYLE_SOLID;
 int   width = 1;
 switch (pLine)
        {
         case 1: clr    = indicator_color1; 
                 style  = indicator_style1;
                 width  = indicator_width1;
                 break;
         case 2: clr    = indicator_color2; 
                 style  = indicator_style2;
                 width  = indicator_width2;
                 break;
         case 3: clr    = indicator_color3; 
                 style  = indicator_style3;
                 width  = indicator_width3;
                 break;
         case 4: clr    = indicator_color4; 
                 style  = indicator_style4;
                 width  = indicator_width4;
                 break;
         case 5: clr    = indicator_color5; 
                 style  = indicator_style5;
                 width  = indicator_width5;
                 break;
        }
 
 oName = oID+TimeToStr(pTime);
 ObjectCreate(0,oName+"V",OBJ_VLINE,0,pTime,0);
 ObjectSetString(0,oName+"V",OBJPROP_TEXT,pEvent);
 ObjectSetInteger(0,oName+"V",OBJPROP_COLOR,clr);
 ObjectSetInteger(0,oName+"V",OBJPROP_WIDTH,width);
 ObjectSetInteger(0,oName+"V",OBJPROP_STYLE,style); 
 ObjectSetInteger(0,oName+"V",OBJPROP_BACK,0); 

 double pPrice;
 pPrice = ChartGetDouble(0, CHART_PRICE_MIN, 0);
 ObjectCreate    (0,oName+"T",OBJ_TEXT,0,pTime,pPrice);
 ObjectSetString (0,oName+"T",OBJPROP_TEXT,pEvent);
 ObjectSetString (0,oName+"T",OBJPROP_FONT,"Arial");
 ObjectSetInteger(0,oName+"T",OBJPROP_FONTSIZE,10);
 ObjectSetDouble (0,oName+"T",OBJPROP_ANGLE,90);
 ObjectSetInteger(0,oName+"T",OBJPROP_ANCHOR,ANCHOR_LEFT_LOWER);
 ObjectSetInteger(0,oName+"T",OBJPROP_COLOR,clr);
}

 Я так полагаю, что при ссылке на свойства indicator_colorN  терминал выдает значения по умолчанию, хотя по сути у измененного свойства уже другое значение.

Можно ли каким-то образом получить это новое значение для правильной раскраски дополнительных объектов? или это недоработка/фича терминала?

Функции IndicatorGetInteger как таковой нет :( чтобы получить значение свойства...

Sergey Dzyublik
4818
Sergey Dzyublik 2014.08.22 11:29  

Вспомнил что на 4-ке видел когда-то похожий вопрос: "Как узнать цвет индикатора после его изменения?"

 Лучший ответ: 

TheXpert 04.01.2014 16:21 #

Ответ на вопрос в заголовке -- никак (в новых билдах с новым языком вроде можно). Можно вынести цвет в extern переменные, тогда его можно будет пользовать и для объектов тоже. 

Комбинатор
15923
Комбинатор 2014.09.04 15:40  
PlotIndexGetInteger
Eugeniy Lugovoy
1979
Eugeniy Lugovoy 2014.09.05 08:27  
TheXpert:
PlotIndexGetInteger
Вот это круто! Странно только что в Справке по MQL4 ничего про это не сказано. Хотя инструкцию PlotIndexGetInteger(0, PLOT_LINE_COLOR); компилирует.
Eugeniy Lugovoy
1979
Eugeniy Lugovoy 2014.09.05 20:09  
PlotIndexGetInteger не для этих целей, работает в паре с PlotIndexSetInteger... в MQL4 компилится, но вроде как никакого эффекта нет...
Комбинатор
15923
Комбинатор 2014.09.07 17:06  
Я его как раз для этих целей и использовал. Только в 5ке. в 4ке возможно заглушка, кто знает.
Artyom Trishkin
Модератор
75718
Artyom Trishkin 2014.09.07 17:33  
TheXpert:
Я его как раз для этих целей и использовал. Только в 5ке. в 4ке возможно заглушка, кто знает.
В четвёрке не используется, хотя и компилится.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий