Разворотный индикатор Priliv.mq4

 
 
Такой-же только раскрашенный в зонах для бай и селл.....
//+------------------------------------------------------------------+ //| | //| Copyright © 2004, MetaQuotes Software Corp. | //| https://www.metaquotes.net// | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, FX Sniper " #property link "https://www.metaquotes.net//" //---- indicator settings #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Yellow #property indicator_color2 Green #property indicator_color3 Red //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer3[]; int width; extern int Rperiod = 50; extern int Draw4HowLongg = 10000; int Draw4HowLong; int shift; int i; int loopbegin; double sum[]; int length; double lengthvar; double tmp ; double wt[]; int c; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- 2 additional buffers are used for counting. IndicatorBuffers(5); //---- drawing settings SetIndexBuffer(2,ExtMapBuffer1); SetIndexBuffer(1,ExtMapBuffer2); SetIndexBuffer(0,ExtMapBuffer3); SetIndexBuffer(3,sum); SetIndexBuffer(4,wt); SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,2); SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2); //---- initialization done return(0); } int start() { Draw4HowLong = Bars-Rperiod - 5; length = Rperiod; loopbegin = Draw4HowLong - length - 1; for(shift = loopbegin; shift >= 0; shift--) { sum[1] = 0; for(i = length; i >= 1 ; i--) { lengthvar = length + 1; lengthvar /= 3; tmp = 0; tmp = ( i - lengthvar)*Close[length-i+shift]; sum[1]+=tmp; } wt[shift] = sum[1]*6/(length*(length+1)); //========== COLOR CODING =========================================== ExtMapBuffer3[shift] = wt[shift]; //red ExtMapBuffer2[shift] = wt[shift]; //green ExtMapBuffer1[shift] = wt[shift]; //yellow if (wt[shift+1] > wt[shift]) { ExtMapBuffer2[shift+1] = EMPTY_VALUE; } else if (wt[shift+1] < wt[shift]) { ExtMapBuffer1[shift+1] = EMPTY_VALUE; //-1 red/greem tight } else { ExtMapBuffer1[shift+1]=CLR_NONE;//EMPTY_VALUE; ExtMapBuffer2[shift+1]=CLR_NONE;//EMPTY_VALUE; } } return(0); } //+------------------------------------------------------------------+
 
Вот, посмотрите. Это мой любимый Приливчик.
Запаздывания практически нет. При условии, что допускается запаздывание, можно было бы его немного доработать, получилась бы красивая синусоида. Текуший ТФ - бежевый, ближайший больший - зелёный, след. больший - коричневый.
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж // Priliv.mq4 // Разворотный индикатор. // Распространяется бесплатно без ограничений. // Сергей Ковалёв, Днепропетровск, sk@mail.dnepr.net //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж // // //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 White #property indicator_color2 Wheat #property indicator_color3 DarkSeaGreen #property indicator_color4 DarkSalmon //-------------------------------------------------------------------------------------------------------------------- double Buf_1[]; // Буффер опорной MA double Buf_2[]; // Буффер индикатора текущего ТФ double Buf_3[]; // Буффер индикатора ближайшего большего ТФ double Buf_4[]; // Буффер индикатора следующего большего ТФ double MA_0, MA_11, MA_12, MA_13, MA_14; double Polzun_1[21],Polzun_2[21],Polzun_3[21],Line[21]; double KK=1.2; double K=5; //-------------------------------------------------------------------------------------------------------------------- int i,n,k, counted_bars, K2, K3, Period_MA_2, Period_MA_3; int Period_MA_0 = 8; int Period_MA_1 = 21; int Kol_Line=20; //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж int init() { switch(Period()) { case 1: K2=5; K3=15; break; case 5: K2=3; K3= 6; break; case 15: K2=2; K3= 4; break; case 30: K2=2; K3= 8; break; case 60: K2=4; K3=24; break; case 240: K2=6; K3=42; break; case 1440: K2=7; K3=30; break; case 10080: K2=4; K3= 0; break; case 43200: K2=0; K3= 0; break; } Polzun_1[1]=20; Polzun_2[1]=Polzun_1[1]*K2; Period_MA_2=Period_MA_1*K2; Polzun_3[1]=Polzun_1[1]*K3; Period_MA_3=Period_MA_1*K3; //-------------------------------------------------------------------------------------------------------------------- SetIndexStyle (0,DRAW_LINE); SetIndexBuffer(0,Buf_1); //-------------------------------------------------------------------------------------------------------------------- SetIndexStyle (1,DRAW_LINE); SetIndexBuffer(1,Buf_2); //-------------------------------------------------------------------------------------------------------------------- SetIndexStyle (2,DRAW_LINE); SetIndexBuffer(2,Buf_3); //-------------------------------------------------------------------------------------------------------------------- SetIndexStyle (3,DRAW_LINE); SetIndexBuffer(3,Buf_4); //-------------------------------------------------------------------------------------------------------------------- return(0); } //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж int start() { counted_bars=IndicatorCounted(); i=Bars-counted_bars-1; //-------------------------------------------------------------------------------------------------------------------- for (n=2;n<=Kol_Line;n++) { k=n-1; Polzun_1[n]=Polzun_1[k]/KK; Polzun_2[n]=Polzun_2[k]/KK; Polzun_3[n]=Polzun_3[k]/KK; } //==================================================================================================================== while(i>=0) { //-------------------------------------------------------------------------------------------------------------------- MA_0 = iMA( NULL, 0, Period_MA_0, 0, MODE_LWMA, PRICE_TYPICAL, i ); Buf_1[i]=MA_0; // Опорная МА //-------------------------------------------------------------------------------------------------------------------- Buf_2[i]= 0; MA_11 = iMA( NULL, 0, Period_MA_1, 0, MODE_LWMA, PRICE_TYPICAL, i ); for (n=1;n<=Kol_Line;n++) { MA_12 = iMA( NULL, 0, Period_MA_1, 0, MODE_LWMA, PRICE_TYPICAL, i +Polzun_1[n]); Line[n] = MA_11-MA_12; Buf_2[i] = Buf_2[i]+Line[n]; } Buf_2[i]= MA_0 + K*Buf_2[i]/Kol_Line; //-------------------------------------------------------------------------------------------------------------------- Buf_3[i]= 0; MA_11 = iMA( NULL, 0, Period_MA_2, 0, MODE_LWMA, PRICE_TYPICAL, i ); for (n=1;n<=Kol_Line;n++) { MA_12 = iMA( NULL, 0, Period_MA_2, 0, MODE_LWMA, PRICE_TYPICAL, i +Polzun_2[n]); Line[n] = MA_11-MA_12; Buf_3[i] = Buf_3[i]+Line[n]; } Buf_3[i]= iMA( NULL, 0, Period_MA_0*K2, 0, MODE_LWMA, PRICE_TYPICAL, i) + K*Buf_3[i]/Kol_Line; if (K2==0)Buf_3[i]=0; //-------------------------------------------------------------------------------------------------------------------- Buf_4[i]= 0; MA_11 = iMA( NULL, 0, Period_MA_3, 0, MODE_LWMA, PRICE_TYPICAL, i ); for (n=1;n<=Kol_Line;n++) { MA_12 = iMA( NULL, 0, Period_MA_3, 0, MODE_LWMA, PRICE_TYPICAL, i +Polzun_3[n]); Line[n] = MA_11-MA_12; Buf_4[i] = Buf_4[i]+Line[n]; } Buf_4[i]= iMA( NULL, 0, Period_MA_0*K3, 0, MODE_LWMA, PRICE_TYPICAL, i) + K*Buf_4[i]/Kol_Line; if (K3==0)Buf_4[i]=0; //-------------------------------------------------------------------------------------------------------------------- i--; } //==================================================================================================================== return(0); } //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж int deinit() { return(0); } //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж /*
Файлы:
17.png  25 kb
 
Помогите плз, как взять значение в эксперта цвет ЛСМА?
 
в индикаторе ошибка есть:

ExtMapBuffer1[shift+1]=CLR_NONE;//EMPTY_VALUE; ExtMapBuffer2[shift+1]=CLR_NONE;//EMPTY_VALUE; //надо ExtMapBuffer1[shift+1]=EMPTY_VALUE; ExtMapBuffer2[shift+1]=EMPTY_VALUE;



Помогите плз, как взять значение в эксперта цвет ЛСМА?
определить можно по наличию в соответствующем буфере значений отличных от EMPTY_VALUE (после исправлеия), или CLR_NONE (до исправления). Проще использовать первый буфер или нераскрашенный индикатор и проверять его наклон.
Причина обращения: