Истинный CoeffofLine ниже:
//+----------------------------------------------------------------+ //| CoeffofLine_true.mq4 //| Ramdass - Conversion only //+----------------------------------------------------------------+ #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Green #property indicator_color2 Red #property indicator_width1 2 #property indicator_width2 2 extern int ndot = 5; extern int CountBars=300; //---- buffers double Up[]; double Dw[]; //+----------------------------------------------------------------+ //| Custom indicator initialization function | //+----------------------------------------------------------------+ int init() { string short_name; //---- indicator line IndicatorBuffers(3); SetIndexBuffer(0,Up); SetIndexBuffer(1,Dw); SetIndexStyle(0,DRAW_HISTOGRAM,0,2); SetIndexStyle(1,DRAW_HISTOGRAM,0,2); //---- IndicatorShortName("CoeffofLine_true(" + ndot + ")"); //---- return(0); } //+----------------------------------------------------------------+ //| CoeffofLine_true | //+----------------------------------------------------------------+ int start() { if (CountBars>=Bars) CountBars=Bars; SetIndexDrawBegin(0,Bars-CountBars+ndot+1); SetIndexDrawBegin(1,Bars-CountBars+ndot+1); int i,shift,cnt;//counted_bars=IndicatorCounted(); double TYVar,ZYVar,TIndicatorVar,ZIndicatorVar,M,N,AY,AIndicator, cfl,cfl1; //---- if(Bars<=ndot) return(0); //---- shift=CountBars-ndot-1; while(shift>=0) { cfl1=cfl; TYVar=0; ZYVar=0; N=0; M=0; TIndicatorVar=0; ZIndicatorVar=0; for (cnt=ndot; cnt>=1; cnt--) // n=5 - по пяти точкам { ZYVar=ZYVar+(High[shift+cnt-1]+Low[shift+cnt-1])/2*(ndot-cnt+1); TYVar=TYVar+(High[shift+cnt-1]+Low[shift+cnt-1])/2; N=N+cnt*cnt; //равно 55 M=M+cnt; //равно 15 ZIndicatorVar=ZIndicatorVar+iMA(NULL,0,ndot,3,MODE_SMMA, PRICE_MEDIAN,shift+cnt-1)*(ndot-cnt+1); TIndicatorVar=TIndicatorVar+iMA(NULL,0,ndot,3,MODE_SMMA, PRICE_MEDIAN,shift+cnt-1); } AY=(TYVar+(N-2*ZYVar)*ndot/M)/M; AIndicator=(TIndicatorVar+(N-2*ZIndicatorVar)*ndot/M)/M; if (Symbol()=="EURUSD" || Symbol()=="GBPUSD" || Symbol()=="USDCAD" || Symbol()=="USDCHF" || Symbol()=="EURGBP" || Symbol()=="EURCHF" || Symbol()=="AUDUSD" || Symbol()=="EURAUD" || Symbol()=="GBPCHF" || Symbol()=="NZDUSD") {cfl=(-1000)*MathLog(AY/AIndicator);} else {cfl=(1000)*MathLog(AY/AIndicator);} if (cfl>cfl1) {Up[shift]=cfl; Dw[shift]=0.0;} else {Dw[shift]=cfl; Up[shift]=0.0;} shift--; } return(0); } //+----------------------------------------------------------------+
Этот индикатор получился из поисков критерия для выхода из позиции
по зеленой линии Аллигатора. Когда цена растет значительно
быстрее, чем губы Аллигатора , необходимо включать трейлинг-стоп
по предыдущему High(Low). С помощью методов наименьших квадратов
была попытка аппроксимировать цены (по медиане ) и губы аллигатора,
взять отношении коэффициентов A в ураванении Yi=A*Xi+B на 5 последних
барах. Вся история здесь - http://forum.alpari-idc.ru/thread19405-10.html
Истинный CoeffofLine с небольшими поправками:
//+----------------------------------------------------------------+ //| CoeffofLine_true.mq4 | //| Ramdass - Conversion only | //+----------------------------------------------------------------+ #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Black #property indicator_color2 Green #property indicator_color3 Red //---- extern int ndot = 5; extern int CountBars = 300; //---- buffers double Work[]; double Up[]; double Dw[]; //+----------------------------------------------------------------+ //| Custom indicator initialization function | //+----------------------------------------------------------------+ int init() { //---- indicator line SetIndexBuffer(0, Work); SetIndexBuffer(1, Up); SetIndexBuffer(2, Dw); SetIndexStyle(0, DRAW_NONE); SetIndexStyle(1, DRAW_HISTOGRAM, 0, 2); SetIndexStyle(2, DRAW_HISTOGRAM, 0, 2); //---- IndicatorShortName("CoeffofLine_true2(" + ndot + ")"); SetIndexLabel(1,NULL); SetIndexLabel(2,NULL); //---- if (CountBars >= Bars) CountBars = Bars; SetIndexDrawBegin(0, Bars - CountBars + ndot + 1); SetIndexDrawBegin(1, Bars - CountBars + ndot + 1); //---- return(0); } //+----------------------------------------------------------------+ //| CoeffofLine_true | //+----------------------------------------------------------------+ int start() { int i, shift, cnt; //counted_bars=IndicatorCounted(); double TYVar, ZYVar, TIndicatorVar, ZIndicatorVar, M, N, AY, AIndicator, cfl, cfl1; //---- if(Bars <= ndot) return(0); //---- shift = CountBars - ndot - 1; //---- while(shift >= 0) { cfl1 = cfl; TYVar = 0; ZYVar = 0; N = 0; M = 0; TIndicatorVar = 0; ZIndicatorVar = 0; //---- for(cnt = ndot; cnt >= 1; cnt--) // n=5 - по пяти точкам { ZYVar = ZYVar + (High[shift+cnt-1] + Low[shift+cnt-1]) / 2*(ndot - cnt + 1); TYVar = TYVar + (High[shift+cnt-1] + Low[shift+cnt-1]) / 2; N = N + cnt*cnt; //равно 55 M = M + cnt; //равно 15 ZIndicatorVar = ZIndicatorVar + iMA(NULL, 0, ndot, 3, MODE_SMMA, PRICE_MEDIAN, shift + cnt - 1)*(ndot - cnt + 1); TIndicatorVar = TIndicatorVar + iMA(NULL, 0, ndot, 3, MODE_SMMA, PRICE_MEDIAN, shift + cnt - 1); } AY = (TYVar + (N - 2*ZYVar)*ndot / M) / M; AIndicator = (TIndicatorVar + (N - 2*ZIndicatorVar)*ndot / M) / M; //---- if(Symbol() == "EURUSD" || Symbol() == "GBPUSD" || Symbol() == "USDCAD" || Symbol() == "USDCHF" || Symbol() == "EURGBP" || Symbol() == "EURCHF" || Symbol() == "AUDUSD" || Symbol() == "EURAUD" || Symbol() == "GBPCHF" || Symbol() == "NZDUSD") { cfl = (-1000)*MathLog(AY / AIndicator); } else { cfl = (1000)*MathLog(AY / AIndicator); } //---- if(cfl > cfl1) { Work[shift] = cfl; Up[shift] = cfl; Dw[shift] = 0.0; } else { Work[shift] = cfl; Dw[shift] = cfl; Up[shift] = 0.0; } shift--; } return(0); } //+----------------------------------------------------------------+
Editor:
Истинный CoeffofLine с небольшими поправками:
А зачем нужен буфер Work[] ?
Истинный CoeffofLine с небольшими поправками:
Bookkeeper:
Work[] используется для отображения значения индикатора, а Up[]
и Dw[] - для прорисовки разноцветной гистограммы.Editor:
Истинный CoeffofLine с небольшими поправками:
А зачем нужен буфер Work[] ?Истинный CoeffofLine с небольшими поправками:
SetIndexStyle(0, DRAW_NONE); SetIndexStyle(1, DRAW_HISTOGRAM, 0, 2); SetIndexStyle(2, DRAW_HISTOGRAM, 0, 2); //---- IndicatorShortName("CoeffofLine_true2(" + ndot + ")"); SetIndexLabel(1,NULL); SetIndexLabel(2,NULL);
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
CoeffofLine:
Author: Collector