Не меняются программно настройки индикатора

 

Привет

Делаю так

#property indicator_separate_window
#property indicator_buffers 1

extern string indName = "EUR";

double indBuffer[];
int countBars, indNameN;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()  {
   IndicatorBuffers(1);
   SetIndexBuffer(0,indBuffer); 
   Print("Пишем имя " + indName);  // проверяем
   SetIndexLabel(0, "#_myInd_" + indName);
   Print("Написали имя " + indName);  // проверяем
   SetIndexStyle(0,DRAW_LINE, STYLE_SOLID, Green);      break;
   return(0);
}

Траблы:
- отображает в верх. лев. углу имя индикатора вместо "#_myInd_" + indName - не задает цвет индикатора вообще никак - черное окно, инд. не видно, если руками установить цвет в свойствах - прорисовывается

Где ошибка?

м.б. нужно дать команду рефрешь после таких установок? как ?
Спасибо

 

Попробуйте вместо SetIndexLabel() воспользоваться IndicatorShortName().

А цвет можно задать через #property.

 
Mathemat:

Попробуйте вместо SetIndexLabel() воспользоваться IndicatorShortName().

А цвет можно задать через #property.


Спасибо, IndicatorShortName() отобразил то, что нужно

Цвет именно нужно программно задавать.

Как быть?

И еще один вопрос:
Можно ли как то подсчитать сколько запущено на данной паре индикаторов с определенным шаблоном имени ?

 

Цвет программно - та же функция. Внимательно читайте. Green в коде как раз и указал ширину, а вот цвет должен быть следующим параметром.

На второй вопрос пока не знаю ответа.

 
Nik107:

Можно ли как то подсчитать сколько запущено на данной паре индикаторов с определенным шаблоном имени ?

В общем случае нет. Можно на графике, но тоже свои косяки. Чем вам эта ветка не по вкусу?
 
TheXpert:
В общем случае нет. Можно на графике, но тоже свои косяки. Чем вам эта ветка не по вкусу?
Сорри, имел ввиду именно на конкретном графике. Как это сделать ?
Mathemat:

Цвет программно - та же функция. Внимательно читайте. Green в коде как раз и указал ширину, а вот цвет должен быть следующим параметром.

На второй вопрос пока не знаю ответа.


Спасибо, добавил
Но заработало как-то криво:
- Кидаю на график индюк - черное окно
- вхожу в его свойства и "редактирую" единственный параметр, не меняя его значение (т.е. просто вхожу и выхожу в/из режима редактирования поля параметра не меняя его значения),
жму ОК - перерисовывается нужным цветом.

В чем трабл ?

 
Nik107:
Сорри, имел ввиду именно на конкретном графике. Как это сделать ?

Никак. Перепутал с 5кой. Есть функция WindowFind, это единственное что для этого можно применить.

Nik107:
В чем трабл ?

Добавьте

#property indicator_color1 Green
 
Nik107: Но заработало как-то криво: [...]

В чем трабл ?

Не знаю. Выложите полный код.

Может, терминал нужно перегрузить, чтобы без косяков. Всякое бывает - и такое иногда тоже.

2 TheXpert: я тоже так же предложил (через property), но топикстартер почему-то считает, что "Цвет именно нужно программно задавать", т.е. это решение типо не программное :)

 
Так пускай задаст сначала через #property (что бы был начальный цвет ), а потом программно меняет сколько хочет
 
А вообще изучение кодов встроенных индюкаторов помогает очень быстро сориентироваться в языке.
 
#property indicator_separate_window
#property indicator_buffers 1

extern string indName = "EUR";

double indBuffer[];
int countBars, indNameN;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()  {
   IndicatorBuffers(1);
   SetIndexBuffer(0,indBuffer); 
   Print("Пишем имя " + indName);  // проверяем
   SetIndexLabel(0, "#_myInd_" + indName);
   Print("Написали имя " + indName);  // проверяем
   SetIndexStyle(0,DRAW_LINE, STYLE_SOLID, 1, Green);
   countBars = Bars-IndicatorCounted()-1;
   Print("Перебор " + countBars);
   for (int i=countBars;i>=0;i--) {
      indBuffer[i] = 1.367;
      Print("Перебор__ " + i); // проверил - в Эксперте печатает все до 0 
   }

   return(0); }

Вот полный код - добавилась 1 перед Green
Поставил просто константу для простоты - код выполняется, но линия НЕ рисуется в окошке индикатора

Причина обращения: