Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Зарабатывай на сервисах MQL5. Это просто!
GreinV
77
GreinV 2011.08.21 08:56 
Подскажите, как отрисовать 3-ех цветную линию индикатора, в подвальном окне!? Сам принцип миксования трех цветов мне понятен. Если использую стиль рисования DRAW_ARROW, то всё получается. Использую три буфера для каждого цвета, такая линия получается из разноцветных бусинок маленьких. Как только стиль рисования ставлю DRAW_LINE, - вся отрисовка ломается, даже из другого буфера гистограмма не хочет отрисовываться!? В принципе можно и оставить с DRAW_ARROW, но хочется линией из 3-ех цветов научиться рисовать! Подскажите в чем проблема может быть!?
o_O
Модератор
23314
o_O 2011.08.21 09:49  
DRAW_SECTION + EMPTY_VALUE
GreinV
77
GreinV 2011.08.21 12:03  
sergeev:
DRAW_SECTION + EMPTY_VALUE

Это я пробовал, получаются прямые цветные линии фрагментарно от рисованные..
Комбинатор
15650
Комбинатор 2011.08.21 12:09  
Давайте конкретный индюк, условия и конечный вид.
Victor Nikolaev
Модератор
14078
Victor Nikolaev 2011.08.21 12:22  
Grein:

Это я пробовал, получаются прямые цветные линии фрагментарно от рисованные..

Делал подобное. Прямых линий видно не было. Ничем от машки не отличался. В принципе можно сделать без проблем до 8 цветов на индикатор (если конечно промежуточных расчетов нету).
Rustamzhan Salidzhanov
7685
Rustamzhan Salidzhanov 2011.08.21 12:25  
посмотрите как это сделано у других - у Виктора например
GreinV
77
GreinV 2011.08.21 12:43  
TheXpert:
Давайте конкретный индюк, условия и конечный вид.

Я хотел бы сам научиться! Исходные данные такие:

1. Подвальное окно.

2. Отрисовка 3-ёх цветной линии.

3. Имеется расчетное значение текущего Уровня линии.

4. Инициализированы 3 индикаторных буфера, для хранения значения уровня линии или пустого значения.

И вот скрин, то что сейчас отрисовывается: (белая линия, это "несущая" линия, она то и раскрашивается)

А вот отрисовка с DRAW_ARROW, простая замена стиля линии и все работает.. Но нужно нарисовать линией!?


Rustamzhan Salidzhanov
7685
Rustamzhan Salidzhanov 2011.08.21 13:12  

вы должны установить для всех линий нулевое значение как EMPTY_VALUE SetIndexEmptyValue(X,EMPTY_VALUE); помните что буфера с большим номером накладываются сверху на предыдущие буфера.

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

Rustamzhan Salidzhanov
7685
Rustamzhan Salidzhanov 2011.08.21 13:15  
//-------------------------------------------------------------------+
#property copyright "#Copyright © 2008, XrustSolution.#"
#property link      "#http://www.xrust.ucoz.net#"
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color2 Yellow
#property indicator_color3 Blue
#property indicator_color4 Red
extern int period=12;
extern int porog =3;
extern int metod =1;
extern int metod2=1;
extern int prise =0;
//---- buffers
double Signal[];
double Up[];
double Dn[];
double Fl[];
//+------------------------------------------------------------------+
void init(){
   SetIndexStyle(0,DRAW_NONE);
   SetIndexDrawBegin(0,0);
   SetIndexBuffer(0,Signal);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexDrawBegin(1,0);
   SetIndexBuffer(1,Fl);
   SetIndexEmptyValue(1,EMPTY_VALUE);   
   SetIndexStyle(2,DRAW_LINE);
   SetIndexDrawBegin(2,0);
   SetIndexBuffer(2,Up);
   SetIndexEmptyValue(2,EMPTY_VALUE);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexDrawBegin(3,0);
   SetIndexBuffer(3,Dn);
   SetIndexEmptyValue(3,EMPTY_VALUE);      
   IndicatorShortName("Xma"+period+porog);
return;} 
//+------------------------------------------------------------------+
int start() {
   int limit;
   double tmp1,tmp2;
   int counted_bars=IndicatorCounted();
   int i;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   for (i = limit;i>=0;i--){
     tmp1=iMA(Symbol(),0,period,0,metod,prise,i);
     tmp2=iMA(Symbol(),0,period,1,metod2,prise,i); 
     if(MathAbs(tmp1-tmp2)>=porog*Point){
       Signal[i]=tmp2;
       if(i>0){
         if(Close[i]<=Signal[i]){Dn[i]=Signal[i];}else{Fl[i]=Signal[i];}
         if(Close[i] >=Signal[i]){Up[i]=Signal[i];}else{Fl[i]=Signal[i];}
       }else{Fl[i]=Signal[i];}  
     }else{
       Signal[i]=Signal[i+1];
       Fl[i]=Signal[i];
     }
   }
   return(0);}
//+------------------------------------------------------------------+   
как нибудь так
GreinV
77
GreinV 2011.08.21 13:35  
xrust:

вы должны установить для всех линий нулевое значение как EMPTY_VALUE SetIndexEmptyValue(X,EMPTY_VALUE); помните что буфера с большим номером накладываются сверху на предыдущие буфера.

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


Да, всё дело в последовательности отрисовки буферов! Начали фрагменты отрисовываться как надо, последний буфер то у меня был от несущей, сплошной линии, и она затирала все предыдущие! И стиль линии ставлю DRAW_LINE.

xrust, Спасибо!

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий