una strategia di trading basata sulla teoria dell'onda di Elliott - pagina 151
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
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
Grazie.
In realtà non è molto difficile, specialmente con la vostra esperienza di programmazione. L'unica cosa IMHO - gli algoritmi che "raddrizzano" la storia non sono adatti, semplicemente non possono rilevare segnali di tempo reale e poi è difficile verificare le statistiche. Se non mi sbaglio, nel tuo PMO c'è un indicatore che traccia le oscillazioni secondo i valori di deviazione in punti e per regioni - è abbastanza adatto: non ridisegna la storia e per smussare i "cattivi effetti" permette di introdurre intervalli di tolleranza per i rapporti fibo come è stato fatto nel "harmony trader_06". In realtà, puoi usare quello allegato come base.
Sinceramente, Vladislav.
Buona fortuna e buone tendenze.
Non è molto difficile, specialmente con la tua esperienza di programmazione. L'unica cosa IMHO - gli algoritmi che "raddrizzano" la storia non sono adatti, è semplicemente impossibile determinare i segnali in tempo reale e poi è difficile controllare le statistiche. Se non mi sbaglio, nel tuo PMO c'è un indicatore che traccia le oscillazioni secondo i valori di deviazione in punti e per regioni - è abbastanza adatto: non ridisegna la storia e per smussare i "cattivi effetti" permette di introdurre intervalli di tolleranza per i rapporti fibo come è stato fatto nel "harmony trader_06". In realtà, puoi usare quello allegato come base.
Sinceramente, Vladislav.
Buona fortuna e buone tendenze.
1) Lo zigzag di mt - i suoi errori sono stati leggermente corretti. Quello di mt ha un sacco di errori.
2) 3) indicatori di tendenza
4) - anche niente ricchezze
5) oscillazioni...
6) prende i dati da un altro timeframe con un mt zigzag pesantemente corretto.
E cosa intende per "raddrizza la storia"?
L'intervallo di tolleranza è impostato in tre modi. Bene, questi sono i dettagli. È solo che non c'era davvero un compito per automatizzarlo. Lo è ora. Ecco l'idea. Iniziamo l'indicatore secondo il "programma". Impostiamo le coppie di valute da analizzare e i timeframe. E l'indicatore visualizzerà in una certa forma: su quali coppie di valute e su quali timeframes si sono formati i pattern (e che tipo di pattern) e anche dove si sono formati i pattern. L'indicatore ha tutto per risolvere questo problema.
Qui sembra essere qualcosa elaborato dall'indicatore sull'ebreo. Per quanto ho capito è probabilmente un segnale per la caduta dell'UE o cosa?
L'immagine esplicativa è presa da qui http://www.harmonictrader.com/price_patternsbfly.htm
Alcuni indicatori hanno un passaggio inverso per rimuovere le oscillazioni "extra" e questo può essere fatto su un dato intervallo di barre. Realisticamente questo porta a un cambiamento nelle letture dell'indicatore - altri estremi in altri luoghi. Ma può essere fatto solo sulla storia, perché non sarà facile distinguere la situazione in tempo reale (finora non ho idea di come). Anche lo zig-zag incorporato in MT4 soffre della stessa cosa (parametro ExtBackstep). Per la ricerca di modelli non è molto essenziale (intendo spazzate inutili). Molto peggio è che dopo un po' il trader può vedere un'immagine diversa da quella in tempo reale. Ma questo è IMHO. Forse ci sono algoritmi che permettono di determinare il vero (falso) estremo al momento attuale (in alternativa, ci sono strategie che permettono di utilizzare questi indicatori con tali proprietà).
Quindi sto dicendo che non sarà difficile automatizzare la ricerca di modelli con la vostra esperienza di programmazione. Tanto più che gli algoritmi sono semplici e ben descritti.
Sinceramente, Vladislav.
Buona fortuna e buone tendenze.
È possibile impostare come parametro, per mostrare i valori così come sono, senza sostituzione dei valori più vicini.