una estrategia de negociación basada en la teoría de las ondas de Elliott - página 151
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
https://c.mql5.com/mql4/forum/2006/10/indicators.zip
#property indicator_chart_window #property indicator_buffers 8 #property indicator_color1 Sienna #property indicator_color2 OrangeRed #property indicator_color3 Maroon #property indicator_color4 Green #property indicator_color5 Indigo #property indicator_color6 Navy #property indicator_color7 DarkSlateBlue #property indicator_color8 DarkBlue //---- input parameters extern int CountBars=500; extern bool alert = true; extern int max_length = 30; extern double error = 0.1; extern color zz_clr = Blue; extern color bat_clr = Sienna; extern color crab_clr = OrangeRed; extern color gar_clr = Maroon; extern color ab_clr = Green; extern color but_clr = Indigo; color get_harmony_color(int pattern){ switch(pattern){ case 1: return (ab_clr); break; case 2: return (gar_clr); break; case 3: return (but_clr); break; case 4: return (bat_clr); break; case 5: return (crab_clr); break; } return (zz_clr); } string get_harmony_pattern(int pattern,int shift){ string pstr = ""; switch(pattern){ case 1: pstr = "AB=CD"; break; case 2: pstr = "Gartley"; break; case 3: pstr = "Butterfly"; break; case 4: pstr = "Bat"; break; case 5: pstr = "Crab"; break; } pstr = pstr + " at "+shift; return (pstr); } double bufBAT[]; double bufCRAB[]; double bufGAR[]; double bufAB[]; double bufBUT[]; double bufALL[]; double bufT0[]; double bufT1[]; int init(){ //---- SetIndexStyle(0,DRAW_NONE,STYLE_SOLID,3); SetIndexStyle(1,DRAW_NONE,STYLE_SOLID,3); SetIndexStyle(2,DRAW_NONE,STYLE_SOLID,3); SetIndexStyle(3,DRAW_NONE,STYLE_SOLID,3); SetIndexStyle(4,DRAW_NONE,STYLE_SOLID,3); SetIndexStyle(5,DRAW_NONE); SetIndexStyle(6,DRAW_ARROW,STYLE_SOLID,2); SetIndexStyle(7,DRAW_ARROW,STYLE_SOLID,2); SetIndexBuffer(0,bufBAT); SetIndexBuffer(1,bufCRAB); SetIndexBuffer(2,bufGAR); SetIndexBuffer(3,bufAB); SetIndexBuffer(4,bufBUT); SetIndexBuffer(5,bufALL); SetIndexBuffer(6,bufT0); SetIndexBuffer(7,bufT1); //SetIndexBuffer(0,bufALL); SetIndexEmptyValue(0,0); SetIndexEmptyValue(1,0); SetIndexEmptyValue(2,0); SetIndexEmptyValue(3,0); SetIndexEmptyValue(4,0); SetIndexEmptyValue(5,0); SetIndexEmptyValue(6,0); SetIndexEmptyValue(7,0); SetIndexArrow(0,132); SetIndexArrow(1,133); SetIndexArrow(2,130); SetIndexArrow(3,129); SetIndexArrow(4,131); SetIndexArrow(6,167); SetIndexArrow(7,110); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2); //---- return(0); } void delete_obj(){ string buff_str = ""; for(int i=ObjectsTotal()-1;i>=0;i--){ buff_str = ObjectName(i); if(StringFind(buff_str,"harmony_05_",0)==0) ObjectDelete(buff_str); } } static int acc = 0; void update_zz(int from,double arr[],int ind[]){ color c = Crimson; int off = 0 ; if(from==0){ c = DarkBlue; off = 3; } for(int i=from;i<4;i++){ create_line(ind[i],ind[i+1],get_harmony_color(7),arr[i],arr[i+1],0,STYLE_SOLID); if(i<3){ place_text( DoubleToStr(MathAbs(arr[i+2]-arr[i+1])/MathAbs(arr[i]-arr[i+1]),3), (ind[i]+ind[i+2])/2, (arr[i]+arr[i+2])/2, zz_clr); create_line(ind[i],ind[i+2],Gray,arr[i],arr[i+2],0,STYLE_DOT); } switch(i){ case 0:place_text("X",ind[i]+off,arr[i],c); break; case 1:place_text("A",ind[i]+off,arr[i],c); break; case 2:place_text("B",ind[i]+off,arr[i],c); break; case 3:place_text("C",ind[i]+off,arr[i],c); break; case 4:place_text("D",ind[i]+off,arr[i],c); break; } } if(from==0){ create_triangle(ind[0],ind[1],ind[2],BurlyWood,arr[0],arr[1],arr[2]); create_triangle(ind[2],ind[3],ind[4],CadetBlue,arr[2],arr[3],arr[4]); } else{ create_triangle(ind[2],ind[3],ind[4],Tomato,arr[2],arr[3],arr[4]); } } void place_text(string text,int x,double price,color c){ static int acc = 0; string buff_str = "harmony_05_text_"+acc; acc++; //OBJ_LABEL if(ObjectFind(buff_str)==-1){ ObjectCreate(buff_str, OBJ_TEXT, 0, Time[x], price); } //ObjectSet(buff_str,OBJPROP_COLOR,c); ObjectSet(buff_str,OBJPROP_TIME1,Time[x]); ObjectSet(buff_str,OBJPROP_PRICE1,price); //ObjectSet(buff_str,OBJPROP_FONTSIZE,10); ObjectSetText(buff_str,text,10,"Arial",c); } void create_line(int from,int to,color c,double p0,double p1,int long,int type){ static int acc = 0; string buff_str = "harmony_05_"+acc; acc++; ObjectCreate(buff_str, OBJ_TREND, 0, Time[from], p0, Time[to], p1); ObjectSet(buff_str,OBJPROP_RAY,long); ObjectSet(buff_str,OBJPROP_COLOR,c); ObjectSet(buff_str,OBJPROP_XDISTANCE,100); ObjectSet(buff_str,OBJPROP_YDISTANCE,100); ObjectSet(buff_str,OBJPROP_STYLE,type); if(type!=STYLE_SOLID) ObjectSet(buff_str,OBJPROP_WIDTH,1); else ObjectSet(buff_str,OBJPROP_WIDTH,2); } int deinit(){ delete_obj(); return (0); } double last_time = 0; double XA,XB,XD,AB,AC,BC,BD,CD,AD; void init_lines(double arr[],int ind[]){ XA = 0; if(MathAbs(ind[0]-ind[1])>1 && MathAbs(ind[1]-ind[2])>1 && MathAbs(ind[2]-ind[3])>1 && MathAbs(ind[3]-ind[4])>1){ if( (arr[1]-arr[3])*(arr[2]-arr[3])<0 && (arr[0]-arr[2])*(arr[1]-arr[2])<0 ){ XA = MathAbs(arr[1]-arr[0]) / Point; XB = MathAbs(arr[2]-arr[0]) / Point; XD = MathAbs(arr[4]-arr[0]) / Point; AB = MathAbs(arr[2]-arr[1]) / Point; AC = MathAbs(arr[3]-arr[1]) / Point; BC = MathAbs(arr[3]-arr[2]) / Point; BD = MathAbs(arr[4]-arr[2]) / Point; CD = MathAbs(arr[4]-arr[3]) / Point; AD = MathAbs(arr[4]-arr[1]) / Point; } } } /* double get_retracement(int a,int b,double arr[],double ret){ return (arr[a] + ((arr[a]-arr[b]) / Point)*ret*Point); } */ bool is_ABCD_pattern(double arr[],int ind[],double offset){ double F0,F1; bool found = false; F0 = NormalizeDouble(BC / AB,3); F1 = NormalizeDouble(CD / BC,3); found = (F0>=0.382-offset && F0<=0.382+offset && F1>=2.240-offset && F1<=2.240+offset) || (F0>=0.500-offset && F0<=0.500+offset && F1>=2.000-offset && F1<=2.000+offset) || (F0>=0.618-offset && F0<=0.618+offset && F1>=1.618-offset && F1<=1.618+offset) || (F0>=0.707-offset && F0<=0.707+offset && F1>=1.414-offset && F1<=1.414+offset) || (F0>=0.786-offset && F0<=0.786+offset && F1>=1.270-offset && F1<=1.270+offset) ; if(!found) return (false); bufAB[ind[4]] = arr[4]; bufALL[ind[4]] = 1.0; update_zz(1,arr,ind); bufT0[ind[4]] = arr[4]+(((arr[2]-arr[4])/Point)*0.618)*Point; bufT1[ind[4]] = arr[4]+(((arr[1]-arr[4])/Point)*0.618)*Point; place_text(get_harmony_pattern(1,ind[4]),ind[4],bufAB[ind[4]],get_harmony_color(1)); //Print(harmony_pattern(1,ind[4])); return (true); } bool is_Gartley_pattern(double arr[],int ind[],double offset){ double F0,F1; bool found = false; F0 = NormalizeDouble(AB / XA,3); F1 = NormalizeDouble(AD / XA,3); found = ( (F0>=0.382-offset && F0<=0.382+offset) || (F0>=0.477-offset && F0<=0.477+offset) || (F0>=0.500-offset && F0<=0.500+offset) || (F0>=0.618-offset && F0<=0.618+offset) ) && ( (F1>=0.618-offset && F1<=0.618+offset) || (F1>=0.786-offset && F1<=0.786+offset) ); //(F0==0.618/*-offset && F0<=0.618+offset*/ && F1==0.786/*-offset && F1<=0.786+offset*/); if(!found) return (false); F0 = NormalizeDouble(BC / AB,3); F1 = NormalizeDouble(CD / BC,3); found = (F0>=0.382-offset && F0<=0.382+offset && F1>=2.240-offset && F1<=2.240+offset) || (F0>=0.500-offset && F0<=0.500+offset && F1>=2.000-offset && F1<=2.000+offset) || (F0>=0.618-offset && F0<=0.618+offset && F1>=1.618-offset && F1<=1.618+offset) || (F0>=0.707-offset && F0<=0.707+offset && F1>=1.414-offset && F1<=1.414+offset) || (F0>=0.786-offset && F0<=0.786+offset && F1>=1.270-offset && F1<=1.270+offset) || (F0>=0.886-offset && F0<=0.886+offset && F1>=1.129-offset && F1<=1.129+offset) ; if(!found) return (false); bufGAR[ind[4]] = arr[4]+10*Point; bufT0[ind[4]] = arr[4]+(((arr[3]-arr[4])/Point)*0.618)*Point; bufT1[ind[4]] = arr[4]+(((arr[1]-arr[4])/Point)*0.618)*Point; bufALL[ind[4]] = 2.0; update_zz(0,arr,ind); place_text(get_harmony_pattern(2,ind[4]),ind[4],bufGAR[ind[4]],get_harmony_color(2)); //Print(harmony_pattern(2,ind[4])); return (true); } bool is_Butterfly_pattern(double arr[],int ind[],double offset){ double F0,F1; bool found = false; F0 = NormalizeDouble(AB / XA,3); F1 = NormalizeDouble(AD / XA,3); found = ( (F0>=0.618-offset && F0<=0.618+offset) || (F0>=0.786-offset && F0<=0.786+offset) || (F0>=0.886-offset && F0<=0.886+offset) ) && ( (F1>=1.270-offset && F1<=1.270+offset) || (F1>=1.618-offset && F1<=1.618+offset) ); //(F0==0.618/*-offset && F0<=0.618+offset*/ && F1==0.786/*-offset && F1<=0.786+offset*/); if(!found) return (false); F0 = NormalizeDouble(BC / AB,3); F1 = NormalizeDouble(CD / BC,3); found = ( (F0>=0.382-offset && F0<=0.382+offset) && ( (F1>=2.240-offset && F1<=2.240+offset) || (F1>=1.618-offset && F1<=1.618+offset) || (F1>=2.618-offset && F1<=2.618+offset) ) ) || ( (F0>=0.500-offset && F0<=0.500+offset) && ( (F1>=2.000-offset && F1<=2.000+offset) || (F1>=2.618-offset && F1<=2.618+offset) ) ) || ( (F0>=0.618-offset && F0<=0.618+offset) && ( (F1>=1.618-offset && F1<=1.618+offset) || (F1>=2.000-offset && F1<=2.000+offset) || (F1>=2.618-offset && F1<=2.618+offset) || (F1>=2.240-offset && F1<=2.240+offset) ) ) || (F0>=0.707-offset && F0<=0.707+offset && F1>=1.414-offset && F1<=1.414+offset) || ( (F0>=0.786-offset && F0<=0.786+offset) && ( (F1>=1.618-offset && F1<=1.618+offset) || (F1>=2.618-offset && F1<=2.618+offset) || (F1>=2.240-offset && F1<=2.240+offset) ) ) || (F0>=0.886-offset && F0<=0.886+offset && F1>=1.270-offset && F1<=1.270+offset); if(!found) return (false); bufBUT[ind[4]] = arr[4]+20*Point; bufALL[ind[4]] = 3.0; bufT0[ind[4]] = arr[4]+(((arr[3]-arr[4])/Point)*0.618)*Point; bufT1[ind[4]] = arr[4]+(((arr[1]-arr[4])/Point)*0.618)*Point; update_zz(0,arr,ind); place_text(get_harmony_pattern(3,ind[4]),ind[4],bufBUT[ind[4]],get_harmony_color(3)); //Print(harmony_pattern(3,ind[4])); return (true); } bool is_BAT_pattern(double arr[],int ind[],double offset){ double F0,F1,F2; bool found = false; F0 = NormalizeDouble(AB / XA,3); F1 = NormalizeDouble(AD / XA,3); F2 = NormalizeDouble(CD / BC,3); found = (F0>=0.382-offset && F0<=0.618+offset) && (F1>=0.886-offset && F1<=0.886+offset) && (F2>=1.618-offset && F2<=2.618+offset) ; if(!found) return (false); F0 = NormalizeDouble(BC / AB,3); F1 = F2; found = (F0>=0.500-offset && F0<=0.500+offset && F1>=2.618-offset && F1<=2.618+offset) || (F0>=0.618-offset && F0<=0.618+offset && F1>=2.000-offset && F1<=2.000+offset) || (F0>=0.618-offset && F0<=0.618+offset && F1>=2.240-offset && F1<=2.240+offset) || (F0>=0.786-offset && F0<=0.786+offset && F1>=1.618-offset && F1<=1.618+offset) || (F0>=0.886-offset && F0<=0.886+offset && F1>=1.270-offset && F1<=1.270+offset) ; if(!found) return (false); bufBAT[ind[4]] = arr[4]+30*Point; bufALL[ind[4]] = 4.0; bufT0[ind[4]] = arr[4]+(((arr[3]-arr[4])/Point)*0.618)*Point; bufT1[ind[4]] = arr[4]+(((arr[1]-arr[4])/Point)*0.618)*Point; update_zz(0,arr,ind); place_text(get_harmony_pattern(4,ind[4]),ind[4],bufBAT[ind[4]],get_harmony_color(4)); return (true); } bool is_CRAB_pattern(double arr[],int ind[],double offset){ double F0,F1; bool found = false; F0 = NormalizeDouble(AB / XA,3); F1 = NormalizeDouble(CD / BC,3); found = ( (F0>=0.382-offset && F0<=0.382-offset) || (F0>=0.477-offset && F0<=0.477+offset) || (F0>=0.500-offset && F0<=0.500+offset) || (F0>=0.618-offset && F0<=0.618+offset) ) && ( (F1>=2.618-offset && F1<=2.618+offset) || (F1>=3.140-offset && F1<=3.140+offset) || (F1>=3.618-offset && F1<=3.618+offset) ); if(!found) return (false); bufCRAB[ind[4]] = arr[4]+40*Point; bufALL[ind[4]] = 5.0; bufT0[ind[4]] = arr[4]+(((arr[3]-arr[4])/Point)*0.618)*Point; bufT1[ind[4]] = arr[4]+(((arr[1]-arr[4])/Point)*0.618)*Point; update_zz(0,arr,ind); place_text(get_harmony_pattern(5,ind[4]),ind[4],bufCRAB[ind[4]],get_harmony_color(5)); //Print(harmony_pattern(5,ind[4])); return (true); } int last = 0 ; datetime last_ = 0; int start(){ if(last==Bars) return (0); delete_obj(); last = Bars; //delete_obj(); int point_arr[5]; double val_arr[5]; int i,l = 0; int pi = 4,j = 0; datetime ld; double gann = 0; int limit = CountBars; int found = limit; for(int len = max_length;len>2;len--){ j = 0; pi = 4; while(j<limit && pi>=0){ gann = iCustom(Symbol(),Period(),"a_ZZ",limit,0,len,0,j); //gann = iCustom(Symbol(),Period(),"0_ZigZag",Length,0,0,0,from,0,j); if(gann!=0.0){ point_arr[pi] = j; val_arr[pi] = gann; pi--; } j++; } //limit -= 10; init_lines(val_arr,point_arr); if(XA!=0){ if( is_ABCD_pattern(val_arr,point_arr,error) || is_Gartley_pattern(val_arr,point_arr,error) || is_Butterfly_pattern(val_arr,point_arr,error) || is_CRAB_pattern(val_arr,point_arr,error) || is_BAT_pattern(val_arr,point_arr,error) ){ if(found>point_arr[4]){ found = point_arr[4]; } Sleep(50); } } } if(found!=CountBars && Time[found]>last_){ last_ = Time[found]; if(alert) Alert(Symbol()+":: Possible Price Pattern found at "+found+" bar."); } //ObjectsRedraw(); return(0); } //+------------------------------------------------------------------+ void create_triangle(int p0,int p1,int p2,color c,double c0,double c1,double c2){ static int acc = 0; string buff_str = "harmony_05_tri_"+acc; acc++; datetime t0 = Time[p0],t1 = Time[p1],t2 = Time[p2]; if(p1<0) t1 = Time[0] + Period()*60*MathAbs(p1); if(p2<0) t2 = Time[0] + Period()*60*MathAbs(p2); ObjectCreate(buff_str, OBJ_TRIANGLE, 0, t0, c0, t1, c1, t2, c2); ObjectSet(buff_str, OBJPROP_COLOR, c ); ObjectSet(buff_str, OBJPROP_STYLE, STYLE_DOT ); ObjectSet(buff_str,OBJPROP_BACK,true); }#property copyright "ANG3110@latchess.com" //-------------ang_Amp_ZZ--------------- #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Blue //-------------------------------- extern int cbars=1000; extern int from=0; extern int Length=10; extern double error = 0.1; extern bool draw = false; //--------------------------------- double ha[],la[],zz[],un[],pattern[],position[]; double hi,li,hm,lm,di,j; int f,f1,ai,bi,aii,bii,f0,aibar,bibar; //---------------------------------------------- string id = "a_zz_"; int init() { id = id + Length +"_"; IndicatorBuffers(6); SetIndexStyle(0,DRAW_SECTION,STYLE_SOLID,2); SetIndexBuffer(0,zz); SetIndexBuffer(1,la); SetIndexBuffer(2,ha); SetIndexBuffer(3,un); SetIndexBuffer(4,pattern); SetIndexBuffer(5,position); SetIndexEmptyValue(0,0); SetIndexEmptyValue(1,0); SetIndexEmptyValue(2,0); SetIndexEmptyValue(3,0); SetIndexEmptyValue(4,0); SetIndexEmptyValue(5,0); return(0); } void place_text(string text,int x,double price,color c){ if(!draw) return (0); string buff_str = id+text+x+price; //OBJ_LABEL if(ObjectFind(buff_str)==-1){ ObjectCreate(buff_str, OBJ_TEXT, 0, Time[x], price); } //ObjectSet(buff_str,OBJPROP_COLOR,c); ObjectSet(buff_str,OBJPROP_TIME1,Time[x]); ObjectSet(buff_str,OBJPROP_PRICE1,price); //ObjectSet(buff_str,OBJPROP_FONTSIZE,10); ObjectSetText(buff_str,text,10,"Arial",c); } void create_line(int from,int to,color c,double p0,double p1,int long,int style){ if(!draw) return (0); static int acc = 0; string buff_str = id+acc; acc++; ObjectCreate(buff_str, OBJ_TREND, 0, Time[from], p0, Time[to], p1); ObjectSet(buff_str,OBJPROP_RAY,long); ObjectSet(buff_str,OBJPROP_COLOR,c); ObjectSet(buff_str,OBJPROP_XDISTANCE,100); ObjectSet(buff_str,OBJPROP_YDISTANCE,100); ObjectSet(buff_str,OBJPROP_STYLE,style); ObjectSet(buff_str,OBJPROP_BACK,true); //ObjectSet(buff_str,OBJPROP_WIDTH,2); } void delete_obj(){ string buff_str = ""; for(int i=ObjectsTotal()-1;i>=0;i--){ buff_str = ObjectName(i); if(StringFind(buff_str,id,0)==0) ObjectDelete(buff_str); } } int deinit(){ delete_obj(); return (0); } int last=0; //================================ int start() { if(last==Bars) return (0); last=Bars; delete_obj(); ArrayInitialize(zz,0); //ArrayInitialize(ha,0); //ArrayInitialize(la,0); int shift,Swing,Swing_n,uzl,i,zu,zd,mv; double LL,HH,BH,BL,NH,NL; double Uzel[10000][3]; string text; // loop from first bar to current bar (with shift=0) Swing_n=0;Swing=0;uzl=0; int barn = from + cbars; BH =High[barn]; BL=Low[barn]; zu=barn; zd=barn; for(shift=barn;shift>=from;shift--) { LL=10000000; HH=-100000000; for(i=shift+Length;i>=shift+1;i--) { if (Low[i]< LL) LL=Low[i]; if (High[i]>HH) HH=High[i]; } if (Low[shift]<LL && High[shift]>HH){ Swing=2; if (Swing_n==1) zu=shift+1; if (Swing_n==-1) zd=shift+1; } else{ if (Low[shift]<LL) Swing=-1; if (High[shift]>HH) Swing=1; } if (Swing!=Swing_n && Swing_n!=0) { if (Swing==2) { Swing=-Swing_n; BH = High[shift]; BL = Low[shift]; } uzl=uzl+1; if(Swing==1) { Uzel[uzl][1]=zd; Uzel[uzl][2]=BL; } if(Swing==-1) { Uzel[uzl][1]=zu; Uzel[uzl][2]=BH; } BH = High[shift]; BL = Low[shift]; } if (Swing==1) { if(High[shift]>=BH) { BH=High[shift]; zu=shift; } } else if(Swing==-1) { if(Low[shift]<=BL) { BL=Low[shift]; zd=shift; } } Swing_n=Swing; } for(i=1;i<=uzl;i++) { mv=StrToInteger(DoubleToStr(Uzel[i][1],0)); zz[mv]=Uzel[i][2]; } //-------------------------------- int dir = 0; int pos[3]; int cpos = 0; int id = 0; for(i=barn; i>=from; i--){ un[i] = 0; if(zz[i]!=0){ pos[cpos] = i; cpos++; if(cpos==3){ un[i] = (MathAbs(zz[pos[2]]-zz[pos[1]])/Point) / // AB (MathAbs(zz[pos[0]]-zz[pos[1]])/Point); // XA double d = get_real_value(un[i],error); if(d!=0){ place_text(DoubleToStr(d,3),(pos[0]+pos[2])/2,(zz[pos[0]]+zz[pos[2]])/2,Crimson); create_line(pos[0],pos[2],Gray,zz[pos[0]],zz[pos[2]],0,STYLE_DASHDOT); } pos[0] = pos[1]; pos[1] = pos[2]; cpos = 2; } } } zz[from] = Close[from]; pos[cpos] = 0; cpos++; if(cpos==3){ un[from] = (MathAbs(zz[pos[2]]-zz[pos[1]])/Point) / // AB (MathAbs(zz[pos[0]]-zz[pos[1]])/Point); // XA d = get_real_value(un[from],error); if(d!=0){ place_text(DoubleToStr(d,3),(pos[0]+pos[2])/2,(zz[pos[0]]+zz[pos[2]])/2,Crimson); create_line(pos[0],pos[2],Gray,zz[pos[0]],zz[pos[2]],0,STYLE_DASHDOT); } } int cp = 0; for(i=from; i<barn; i++){ if(un[i]!=0){ pattern[cp] = un[i]; position[cp] = i; cp++; } } //------------------------------------ return(0); } double get_real_value(double v,double err){ double table[15] = { 0.382,2.240, 0.500,2.000, 0.618,1.618, 0.707,1.414, 0.786,1.270, 0.886,1.129, 3.140,3.618, 2.618 }; for(int i=0;i<15;i++){ if(v>=table[i]-err && v<=table[i]+err){ return (table[i]); } } return (v); }https://c.mql5.com/mql4/forum/2006/10/indicators.zip
Gracias.
En realidad no es muy difícil, especialmente con tu experiencia en programación. La única cosa IMHO - los algoritmos que "enderezan" la historia no son adecuados, simplemente no pueden detectar las señales de tiempo real y luego es difícil de verificar las estadísticas. Si no me equivoco, en su PMO hay un indicador que traza las oscilaciones según los valores de desviación en puntos y por regiones - es bastante adecuado: no redibuja el historial y para suavizar los "malos efectos" permite introducir rangos de tolerancia para los ratios de fibo como se hacía en el "harmony trader_06". En realidad, puede utilizar el adjunto como base.
Sinceramente, Vladislav.
Buena suerte y buenas tendencias.
No es muy difícil, especialmente con tu experiencia en programación. Lo único IMHO - los algoritmos que "enderezan" la historia no son adecuados, es simplemente imposible determinar las señales en tiempo real y entonces es difícil comprobar las estadísticas. Si no me equivoco, en su PMO hay un indicador que traza las oscilaciones según los valores de desviación en puntos y por regiones - es bastante adecuado: no redibuja el historial y para suavizar los "malos efectos" permite introducir rangos de tolerancia para los ratios de fibo como se hacía en el "harmony trader_06". En realidad, puede utilizar el adjunto como base.
Sinceramente, Vladislav.
Buena suerte y buenas tendencias.
1) El zigzag de mt - sus errores han sido ligeramente corregidos. La mt tiene muchos errores.
2) 3) indicadores de tendencia
4) - también nada riquezas
5) oscilaciones...
6) toma los datos de otro marco temporal con un zigzag mt muy corregido.
¿Y qué quiere decir con "enderezar la historia"?
El rango de tolerancia se establece allí de tres maneras. Bueno, esos son los detalles. Es que realmente no había una tarea para automatizarla. Ahora sí. Esta es la idea. Ponemos en marcha el indicador según el "calendario". Establecemos los pares de divisas a escanear y los marcos temporales. Y el indicador mostrará de una forma determinada: en qué pares de divisas y en qué plazos se formaron los patrones (y qué tipo de patrones) y también dónde se forman los patrones. El indicador lo tiene todo para resolver este problema.
Aquí parece haber algo elaborado por el indicador del judío. Por lo que entiendo es probablemente una señal para la caída de la UE o qué?
La imagen explicativa está tomada de aquí http://www.harmonictrader.com/price_patternsbfly.htm
Algunos indicadores tienen un pase inverso para eliminar las oscilaciones "extra" y esto se puede hacer en un rango de barras determinado. En realidad, esto lleva a un cambio en las lecturas del indicador: otros extremos en otros lugares. Pero sólo se puede hacer sobre el historial, porque no será fácil distinguir la situación en tiempo real (hasta ahora no tengo ni idea de cómo). El zig-zag incorporado en MT4 también sufre de lo mismo (parámetro ExtBackstep). Para la búsqueda de patrones no es muy esencial (me refiero a los columpios extra). Mucho peor es que después de un tiempo el comerciante puede ver una imagen diferente a la del tiempo real. Pero esto es IMHO. Quizás existan algoritmos que permitan determinar el verdadero (falso) extremo en el momento actual (alternativamente, existen estrategias que permiten utilizar estos indicadores con tales propiedades).
Por eso digo que no será difícil automatizar la búsqueda de patrones con tu experiencia en programación. Sobre todo porque los algoritmos son sencillos y están bien descritos.
Sinceramente, Vladislav.
Buena suerte y buenas tendencias.
Es posible establecer como parámetro, que se muestren los valores tal y como son, sin sustitución de los valores más cercanos.