- Мультитаймфреймовые индикаторы
- Отличие работы прорисовки нескольких линий индикатора в МТ4 и в МТ5
- Дискретная отрисовка индикатора в стиле DRAW_SECTION
DRAW_SECTION + EMPTY_VALUE
Это я пробовал, получаются прямые цветные линии фрагментарно от рисованные..
Давайте конкретный индюк, условия и конечный вид.
Я хотел бы сам научиться! Исходные данные такие:
1. Подвальное окно.
2. Отрисовка 3-ёх цветной линии.
3. Имеется расчетное значение текущего Уровня линии.
4. Инициализированы 3 индикаторных буфера, для хранения значения уровня линии или пустого значения.
И вот скрин, то что сейчас отрисовывается: (белая линия, это "несущая" линия, она то и раскрашивается)
А вот отрисовка с DRAW_ARROW, простая замена стиля линии и все работает.. Но нужно нарисовать линией!?
вы должны установить для всех линий нулевое значение как EMPTY_VALUE SetIndexEmptyValue(X,EMPTY_VALUE); помните что буфера с большим номером накладываются сверху на предыдущие буфера.
выбираете например желтый как основной, и в нужный момент присваиваете другим цветам значимое значение - они наложатся сверху.
//-------------------------------------------------------------------+ #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);} //+------------------------------------------------------------------+как нибудь так
вы должны установить для всех линий нулевое значение как EMPTY_VALUE SetIndexEmptyValue(X,EMPTY_VALUE); помните что буфера с большим номером накладываются сверху на предыдущие буфера.
выбираете например желтый как основной, и в нужный момент присваиваете другим цветам значимое значение - они наложатся сверху.
Да, всё дело в последовательности отрисовки буферов! Начали фрагменты отрисовываться как надо, последний буфер то у меня был от несущей, сплошной линии, и она затирала все предыдущие! И стиль линии ставлю DRAW_LINE.
xrust, Спасибо!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования