Нужна помощь в "рихтовке" индикатора.

 

Уткнулся в написании пользовательского индикатора.

Сам индикатор создать получилось, а вот немного доработать не хватает опыта

Программирования.

Суть проблемы в том что необходимо отражать в цвете текущее значение.

А именно – открытие – 1.0 (как пример), происходит его изменение – 1.1 (т.е. увеличение – отражение – зеленым)

Дальше – 1.0 ( возврат к первоначальному – белый) 0.99 ( уменьшение – красный).

Т.е. индикатор исторически отражается одним цветом (скажем белым) а текущее его состояние изменят цвет

В зависимости от его текущего значения (положение относительно оси – 0 не учитывается)

Если у Вас есть минутка, подскажите как решить эту проблему.

Спасибо

 

FinLexx писал(а) >>

..

Суть проблемы в том что необходимо отражать в цвете текущее значение.

Те индикатор в виде гистограммы и вы хотите перекрашивать последний, нулевой бар?

Или, например, в правом углу экрана мигал многоцветный светофор?

Т.е. индикатор исторически отражается одним цветом (скажем белым) а текущее его состояние изменят цвет

В зависимости от его текущего значения (положение относительно оси – 0 не учитывается)

Замечание в скобках вообще не понятно. Если хотите, чтобы вам подсказали, приведите схематический рисунок.

 
OneDepo писал(а) >>

Те индикатор в виде гистограммы и вы хотите перекрашивать последний, нулевой бар?

Или, например, в правом углу экрана мигал многоцветный светофор?

Замечание в скобках вообще не понятно. Если хотите, чтобы вам подсказали, приведите схематический рисунок.

я Вам в личку скрин отправил

 

Я такое делал.

Агоритм расчёта того, что я делал, не дам, а как построить скажу. Мне самому тогда здесь помогли.


1. Допустим, что есть 8 градаций цвета. Определяете 8 буферов. Названия в данном случае неважны.

#property  indicator_separate_window

#property  indicator_buffers 8

#property  indicator_color1  DarkGreen
#property  indicator_color2  Green
#property  indicator_color3  MediumSeaGreen
#property  indicator_color4  LightGreen
#property  indicator_color5  Red
#property  indicator_color6  Tomato
#property  indicator_color7  LightCoral
#property  indicator_color8  LightPink

2. Названия массивов для расчётов.

double     BufferUpStrong[];        // Up Strong
double     BufferUpMedium[];        // Up Medium
double     BufferUpWeak[];          // Up Weak
double     BufferUpVeryWeak[];      // Up Very Weak
double     BufferDownStrong[];      // Down Strong
double     BufferDownMedium[];      // Down Medium
double     BufferDownWeak[];        // Down Weak
double     BufferDownVeryWeak[];    // Down Very Weak

3. В init() определяете соответствие буферов, цветов и линий.

int init()
  {
//---- drawing settings and buffers mapping
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);  // Stile for UpStrong
   SetIndexBuffer(0,BufferUpStrong);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,3);  // Stile for UpMedium
   SetIndexBuffer(1,BufferUpMedium);
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,3);  // Stile for UpWeak
   SetIndexBuffer(2,BufferUpWeak);
   SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,3);  // Stile for UpVeryWeak
   SetIndexBuffer(3,BufferUpVeryWeak);
   SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID,3);  // Stile for DownStrong
   SetIndexBuffer(4,BufferDownStrong);
   SetIndexStyle(5,DRAW_HISTOGRAM,STYLE_SOLID,3);  // Stile for DownMedium
   SetIndexBuffer(5,BufferDownMedium);   
   SetIndexStyle(6,DRAW_HISTOGRAM,STYLE_SOLID,3);  // Stile for DownWeak
   SetIndexBuffer(6,BufferDownWeak);
   SetIndexStyle(7,DRAW_HISTOGRAM,STYLE_SOLID,3);  // Stile for DownVeryWeak
   SetIndexBuffer(7,BufferDownVeryWeak);
   
   IndicatorDigits(Digits+1);
   
//---- initialization done
   return(0);
  }

4. Start() начинаете со стандартных определений.

int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- counted in the 1-st buffer
   for(int i=0; i<limit; i++)
     {
       . 
       .
       .

5. Далее идёт расчёт значений буферов по вашим критериям, а также (до того) обнуление буферов, отдельной функцией.

          if(...
               ClearAllBuffers(i); 

               BufferUpStrong[i]=.........; 
          else
           if(...
               ClearAllBuffers(i); 

               BufferUpMedium[i]=.........; 
            .
            .
            .

void ClearAllBuffers(int index)
   {
       BufferUpStrong[index]=0;
       BufferUpMedium[index]=0;
       BufferUpWeak[index]=0;
       BufferUpVeryWeak[index]=0;
       BufferDownStrong[index]=0;
       BufferDownMedium[index]=0;
       BufferDownWeak[index]=0;
       BufferDownVeryWeak[index]=0;

   }


Идея понятна?

Вот, что у меня тогда получилось:




Последний бар динамично меняется в зависимости от цены.

 

Спасибо!

Буду разбираться, а за одно вспоминать программирование.