une stratégie commerciale basée sur la théorie des vagues d'Elliott - page 151
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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
Merci.
Ce n'est en fait pas très difficile, surtout avec votre expérience de la programmation. La seule chose IMHO - les algorithmes qui "redressent" l'histoire ne sont pas adaptés, ils ne peuvent tout simplement pas détecter les signaux en temps réel et il est alors difficile de vérifier les statistiques. Si je ne me trompe pas, dans votre PMO il y a un indicateur qui trace les oscillations en fonction des valeurs d'écart en points et par régions - il est tout à fait adapté : il ne redessine pas l'historique et pour lisser les "mauvais effets" il est possible d'introduire des plages de tolérance pour les ratios fibo comme cela a été fait dans "l'harmonie trader_06". En fait, vous pouvez utiliser le modèle ci-joint comme base.
Sincèrement, Vladislav.
Bonne chance et bonnes tendances.
Ce n'est pas très difficile, surtout avec votre expérience de la programmation. La seule chose IMHO - les algorithmes qui "redressent" l'histoire ne sont pas appropriés, il est tout simplement impossible de déterminer les signaux en temps réel et ensuite il est difficile de vérifier les statistiques. Si je ne me trompe pas, dans votre PMO il y a un indicateur qui trace les oscillations en fonction des valeurs d'écart en points et par régions - il est tout à fait adapté : il ne redessine pas l'historique et pour lisser les "mauvais effets" il est possible d'introduire des plages de tolérance pour les ratios fibo comme cela a été fait dans "l'harmonie trader_06". En fait, vous pouvez utiliser le modèle ci-joint comme base.
Sincèrement, Vladislav.
Bonne chance et bonnes tendances.
1) Le zigzag de mt - ses erreurs ont été légèrement corrigées. Le mt one a beaucoup d'erreurs.
2) 3) indicateurs de tendance
4) - également rien de riche
5) oscillations...
6) prend les données d'une autre période de temps avec un zigzag mt fortement corrigé.
Et qu'entendez-vous par "redresser l'histoire" ?
La plage de tolérance y est définie de trois manières. Voilà pour les détails. C'est juste qu'il n'y avait pas vraiment de tâche pour l'automatiser. C'est maintenant. Voici l'idée. Nous commençons l'indicateur selon le "calendrier". Nous définissons les paires de devises à analyser et les délais. Et l'indicateur s'affichera sous une certaine forme : sur quelles paires de devises et sur quels délais les modèles ont été formés (et quel type de modèles) et aussi où les modèles sont formés. L'indicateur a tout pour résoudre ce problème.
Ici, il semble que l'indicateur sur le juif ait été élaboré. D'après ce que j'ai compris, c'est probablement un signal pour la chute de l'UE ou quoi ?
La photo explicative est prise ici http://www.harmonictrader.com/price_patternsbfly.htm
Certains indicateurs disposent d'un passage inverse pour supprimer les oscillations "supplémentaires" et cela peut être fait sur une plage donnée de barres. De manière réaliste, cela entraîne un changement dans les relevés de l'indicateur - d'autres extrema à d'autres endroits. Mais cela ne peut se faire que sur l'historique, car il ne sera pas facile de distinguer la situation en temps réel (jusqu'à présent, je ne sais pas comment). Le zig-zag intégré à MT4 souffre également de la même chose (paramètre ExtBackstep). Pour la recherche de motifs, il n'est pas très essentiel (je veux dire des balayages inutiles). Le pire est qu'au bout d'un certain temps, le trader peut voir une image différente de celle qu'il a en temps réel. Mais c'est IMHO. Il existe peut-être des algorithmes qui permettent de déterminer le vrai (faux) extremum au moment présent (alternativement, il existe des stratégies qui permettent d'utiliser ces indicateurs avec de telles propriétés).
Je dis donc qu'il ne sera pas difficile d'automatiser la recherche de modèles avec votre expérience de la programmation. D'autant plus que les algorithmes y sont simples et bien décrits.
Sincèrement, Vladislav.
Bonne chance et bonnes tendances.
Il est possible de définir comme paramètre, d'afficher les valeurs telles qu'elles sont, sans substitution des valeurs les plus proches.