Изменение цвета отдельной свечки (как?) - страница 2

 
sabluk писал(а) >>

это вроде нигде не описано

я сам обнаружил случайно

Здорово получилось. Спасибо!

 

О... да... Реально просто... Зер гуд.

2sabluk: Огромное спасибо.

 

да незашто, я и не думал что такая ерунда для каво то секрет

в другом топике меня призерают в этом уважают, какой контраст ))

чтобы полностью свечу нарисовать нужно сначало нитку свечи первыми двумя буферами, потом поверх ниток тело свечи еще два буфера

в зависимости от масштаба графика нужно выбрать толщину линий

 
Да... :-) Только при разных масштабах тайм-серии толщина линии не очень точно отображается, но, в общем, годится метод :-) исходную свечу можно вообще закрыть.
 

Код:

#define major   1
#define minor   0

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 OrangeRed
#property indicator_color2 DodgerBlue
#property indicator_color3 OrangeRed
#property indicator_color4 DodgerBlue

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

void init()
{
  SetIndexBuffer(0, ExtMapBuffer1);
  SetIndexBuffer(1, ExtMapBuffer2);
  SetIndexBuffer(2, ExtMapBuffer3);
  SetIndexBuffer(3, ExtMapBuffer4);
        
  SetIndexStyle(0, DRAW_HISTOGRAM, 0, 1);
  SetIndexStyle(1, DRAW_HISTOGRAM, 0, 1);
  SetIndexStyle(2, DRAW_HISTOGRAM, 0, 3);
  SetIndexStyle(3, DRAW_HISTOGRAM, 0, 3);
}

void deinit()
{
}

void start()
{
  int counted = IndicatorCounted();
  if (counted < 0) return (-1);
  
  if (counted > 0) counted--;
  int limit = Bars-counted;
  
  for (int i=0; i < limit; i++) 
  {
    
    double third = (High[i]-Low[i])/3;
  
    if (Close[i] > High[i] - third)
    {
      ExtMapBuffer1[i] = Low[i];
      ExtMapBuffer2[i] = High[i];
      ExtMapBuffer3[i] = MathMin(Open[i], Close[i]);
      ExtMapBuffer4[i] = MathMax(Open[i], Close[i]);
    } 
    
    if (Close[i] < Low[i] + third)
    {
      ExtMapBuffer1[i] = High[i];
      ExtMapBuffer2[i] = Low[i];
      ExtMapBuffer3[i] = MathMax(Open[i], Close[i]);
      ExtMapBuffer4[i] = MathMin(Open[i], Close[i]);
    }
  }
}
 
tim21701 писал(а) >>

Код:

Да, красиво смотрится. Жаль что при растяжке графика толщины гистограммы не хватает.

Пожелания к MQL5

В стиле гистограммы сделать свойство - моноширный\пропорциональный. Чтобы как у свечей менялась ширина.

А вообще сделать BarColor[i] и все.

 
2 tim21701: Здорово. Нашел этот код в Code Base. Но один минус - в пределах зоны не видно характер свечки (полная, пустая). Еще двумя буферами решил проблему с заполнением тела свечи.
 
sabluk >>:

да незашто, я и не думал что такая ерунда для каво то секрет

в другом топике меня призерают в этом уважают, какой контраст ))


" Подумать только, тоже Пират... А какая разница в судьбе!" (м/ф "Записки Пирата")

 
sabluk >>:\

в другом топике меня призерают в этом уважают, какой контраст ))

Дам подсказку :) Вы себя в разных топиках по разному ведете.
Причина обращения: