como comparar
double K = iCustom(Symbol(),0,"zigzag",ExtDepth,ExtDeviation,ExtBackstep,0,i); if (K==Low[i] && K>0) //..low zigzag......
deVries,
Muchas gracias por su pronta respuesta. ¿Se refiere a cambiar simplemente el penúltimo parámetro de iCustom a 0? Ya lo he intentado y el resultado no es el deseado... Para aclarar mi pregunta, muestro las dos figuras siguientes para ilustrar mi pregunta: ....
Fig1. Se muestran los topes no deseados cuando quiero mostrar sólo los botoms! Quiero filtrar todos los topes no deseados cuando sólo quiero mostrar los fondos.
FIg2. Se muestran los topes deseados sin los fondos no deseados. Este es el resultado que quiero obtener.
Así que mi pregunta es: ¿es posible mostrar sólo los puntos inferiores sin mostrar el punto A/B/C/D/E? Espero haber aclarado la pregunta.....
Muchas gracias por su pronta respuesta....
//+------------------------------------------------------------------+ //| Zigzag2.mq4 | //| Copyright © 2005-2007, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Red #property indicator_color2 Magenta #property indicator_color3 LightSkyBlue //---- indicator parameters extern int ExtDepth=12; extern int ExtDeviation=5; extern int ExtBackstep=3; //---- indicator buffers double ZigzagBuffer[]; double HighMapBuffer[]; double LowMapBuffer[]; int level=3; // recounting's depth bool downloadhistory=false; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(3); //---- drawing settings SetIndexStyle(0,DRAW_SECTION); SetIndexStyle(1,DRAW_SECTION); SetIndexStyle(2,DRAW_SECTION); //---- indicator buffers mapping SetIndexBuffer(0,ZigzagBuffer); SetIndexBuffer(1,HighMapBuffer); SetIndexBuffer(2,LowMapBuffer); SetIndexEmptyValue(0,0.0); SetIndexEmptyValue(1,0.0); SetIndexEmptyValue(2,0.0); //---- indicator short name IndicatorShortName("ZigZag("+ExtDepth+","+ExtDeviation+","+ExtBackstep+")"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int i, counted_bars = IndicatorCounted(); int limit,counterZ,whatlookfor; int shift,back,lasthighpos,lastlowpos; double val,res; double curlow,curhigh,lasthigh,lastlow; if (counted_bars==0 && downloadhistory) // history was downloaded { ArrayInitialize(ZigzagBuffer,0.0); ArrayInitialize(HighMapBuffer,0.0); ArrayInitialize(LowMapBuffer,0.0); } if (counted_bars==0) { limit=Bars-ExtDepth; downloadhistory=true; } if (counted_bars>0) { while (counterZ<level && i<100) { res=ZigzagBuffer[i]; if (res!=0) counterZ++; i++; } i--; limit=i; if (LowMapBuffer[i]!=0) { curlow=LowMapBuffer[i]; whatlookfor=1; } else { curhigh=HighMapBuffer[i]; whatlookfor=-1; } for (i=limit-1;i>=0;i--) { ZigzagBuffer[i]=0.0; LowMapBuffer[i]=0.0; HighMapBuffer[i]=0.0; } } for(shift=limit; shift>=0; shift--) { val=Low[iLowest(NULL,0,MODE_LOW,ExtDepth,shift)]; if(val==lastlow) val=0.0; else { lastlow=val; if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0; else { for(back=1; back<=ExtBackstep; back++) { res=LowMapBuffer[shift+back]; if((res!=0)&&(res>val)) LowMapBuffer[shift+back]=0.0; } } } if (Low[shift]==val) LowMapBuffer[shift]=val; else LowMapBuffer[shift]=0.0; //--- high val=High[iHighest(NULL,0,MODE_HIGH,ExtDepth,shift)]; if(val==lasthigh) val=0.0; else { lasthigh=val; if((val-High[shift])>(ExtDeviation*Point)) val=0.0; else { for(back=1; back<=ExtBackstep; back++) { res=HighMapBuffer[shift+back]; if((res!=0)&&(res<val)) HighMapBuffer[shift+back]=0.0; } } } if (High[shift]==val) HighMapBuffer[shift]=val; else HighMapBuffer[shift]=0.0; } // final cutting if (whatlookfor==0) { lastlow=0; lasthigh=0; } else { lastlow=curlow; lasthigh=curhigh; } for (shift=limit;shift>=0;shift--) { res=0.0; switch(whatlookfor) { case 0: // look for peak or lawn if (lastlow==0 && lasthigh==0) { if (HighMapBuffer[shift]!=0) { lasthigh=High[shift]; lasthighpos=shift; whatlookfor=-1; ZigzagBuffer[shift]=lasthigh; res=1; } if (LowMapBuffer[shift]!=0) { lastlow=Low[shift]; lastlowpos=shift; whatlookfor=1; ZigzagBuffer[shift]=lastlow; res=1; } } break; case 1: // look for peak if (LowMapBuffer[shift]!=0.0 && LowMapBuffer[shift]<lastlow && HighMapBuffer[shift]==0.0) { ZigzagBuffer[lastlowpos]=0.0; lastlowpos=shift; lastlow=LowMapBuffer[shift]; ZigzagBuffer[shift]=lastlow; res=1; } if (HighMapBuffer[shift]!=0.0 && LowMapBuffer[shift]==0.0) { lasthigh=HighMapBuffer[shift]; lasthighpos=shift; ZigzagBuffer[shift]=lasthigh; whatlookfor=-1; res=1; } break; case -1: // look for lawn if (HighMapBuffer[shift]!=0.0 && HighMapBuffer[shift]>lasthigh && LowMapBuffer[shift]==0.0) { ZigzagBuffer[lasthighpos]=0.0; lasthighpos=shift; lasthigh=HighMapBuffer[shift]; ZigzagBuffer[shift]=lasthigh; } if (LowMapBuffer[shift]!=0.0 && HighMapBuffer[shift]==0.0) { lastlow=LowMapBuffer[shift]; lastlowpos=shift; ZigzagBuffer[shift]=lastlow; whatlookfor=1; } break; default: return; } } return(0); } //+------------------------------------------------------------------+
Era posible mostrar sólo el búfer en zigzag
el zigzag se repinta
ver resultado de esto
Esto es lo que se me ocurrió. No he comprobado los resultados deVries arriba [estaba haciendo esto cuando él publicó].
#property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Green #property indicator_width1 1 #property indicator_color2 Yellow #property indicator_width2 1 double Bottoms[]; double Toppers[]; int init() { IndicatorBuffers(2); SetIndexStyle(0,DRAW_SECTION); SetIndexBuffer(0,Bottoms); SetIndexEmptyValue(0,0.0); SetIndexStyle(1,DRAW_SECTION); SetIndexBuffer(1,Toppers); SetIndexEmptyValue(1,0.0); IndicatorShortName("zz show top & bottom"); return(0); } int deinit() { return(0); } int start() { int counted_bars=IndicatorCounted(); int limit=0; limit = Bars-counted_bars; for(int shift=limit-1;shift>=0;shift--) { int ExtDepth=12; int ExtDeviation=5; int ExtBackstep=3; int ZigzagBuffer=0; int HighMapBuffer=1; int LowMapBuffer=2; Bottoms[shift]=iCustom( Symbol(),0,"ZigZag", ExtDepth, ExtDeviation, ExtBackstep, LowMapBuffer, shift ); Toppers[shift]=iCustom( Symbol(),0,"ZigZag", ExtDepth, ExtDeviation, ExtBackstep, HighMapBuffer, shift ); if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift]; } return(0); }
Esto es lo que se me ocurrió. No he comprobado los resultados deVries arriba [estaba haciendo esto cuando él publicó].
#property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Red #property indicator_width1 3 #property indicator_color2 Green #property indicator_width2 3 #property indicator_color3 Yellow #property indicator_width3 3 //---- indicator parameters extern int ExtDepth=12; extern int ExtDeviation=5; extern int ExtBackstep=3; double ZigZag[]; double Bottoms[]; double Toppers[]; int init() { IndicatorBuffers(3); SetIndexStyle(0,DRAW_SECTION); SetIndexBuffer(0,ZigZag); SetIndexEmptyValue(0,0.0); SetIndexStyle(1,DRAW_SECTION); SetIndexBuffer(1,Bottoms); SetIndexEmptyValue(1,0.0); SetIndexStyle(2,DRAW_SECTION); SetIndexBuffer(2,Toppers); SetIndexEmptyValue(2,0.0); IndicatorShortName("zz show top & bottom"); return(0); } int deinit() { return(0); } int start() { int counted_bars=IndicatorCounted(); int limit=0; limit = Bars-counted_bars; for(int shift=limit-1;shift>=0;shift--) { ZigZag[shift]=iCustom( Symbol(),0,"ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, shift ); if(ZigZag[shift]>0.1 && Low[shift]==ZigZag[shift]) Bottoms[shift]=ZigZag[shift]; if(ZigZag[shift]>0.1 && High[shift]==ZigZag[shift]) Toppers[shift]=ZigZag[shift]; } return(0); }
Esto está dando como resultado
ahora los fondos y los topes coinciden todos con el zigzag
deVries:
Niza ubzen con la ayuda de su código llegué a este......Esto está dando como resultado
ahora los fondos y los topes coinciden todos con el zigzag
Hola deVries,
Muchas gracias por tu código. Si quiero saber hasta dónde llega el retroceso de Fibonacci del último tramo en zigzag, comparado con el tramo en zigzag anterior. ¿Cómo puedo hacerlo?
Quiero hacer como la imagen, pero el código de abajo que probé no lo hizo ...
Gracias,
jack
#property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Red #property indicator_width1 3 #property indicator_color2 Green #property indicator_width2 3 #property indicator_color3 Yellow #property indicator_width3 3 //---- indicator parameters extern int ExtDepth=12; extern int ExtDeviation=5; extern int ExtBackstep=3; double ZigZag[]; double Bottoms[]; double Toppers[]; double resBuffer[][]; //--- int init() { IndicatorBuffers(3); SetIndexStyle(0,DRAW_SECTION); SetIndexBuffer(0,ZigZag); SetIndexEmptyValue(0,0.0); SetIndexStyle(1,DRAW_SECTION); SetIndexBuffer(1,Bottoms); SetIndexEmptyValue(1,0.0); SetIndexStyle(2,DRAW_SECTION); SetIndexBuffer(2,Toppers); SetIndexEmptyValue(2,0.0); IndicatorShortName("zz show top & bottom"); return(0); } int deinit() { ObjectDelete("myFibo"); return(0); } int start() { int counted_bars=IndicatorCounted(); int limit=0; limit = Bars-counted_bars; int k=0, m=0; int candle1=0, candle2=0; double prc1=0, prc2=0; for(int shift=limit-1;shift>=0;shift--) { ZigZag[shift]=iCustom( Symbol(),0,"ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, shift ); if(ZigZag[shift]>0.1 && Low[shift]==ZigZag[shift]) { Bottoms[shift]=ZigZag[shift]; resBuffer[k][0] = Bottoms[shift]; resBuffer[k][1] = shift; k++; } if(ZigZag[shift]>0.1 && High[shift]==ZigZag[shift]) { Toppers[shift]=ZigZag[shift]; resBuffer[k][0] = Toppers[shift]; resBuffer[k][1] = shift; k++; } } // ende for //--- for(m=k;m>=0;m--) { candle1 = resBuffer[m][1]; prc1 = resBuffer[m][0]; candle2 = resBuffer[m-1][1]; prc2 = resBuffer[m-1][0]; //--- ObjectDelete("myFibo"); ObjectCreate("myFibo", OBJ_FIBO, 0, Time[candle1], prc2, Time[candle2], prc1); } // ende for return(0); }
Hola deVries,
Muchas gracias por tu código. Si quiero saber a qué distancia está el retroceso de Fibonacci del último tramo en zigzag, en comparación con el tramo en zigzag anterior. ¿Cómo puedo hacerlo?
Gracias,
jack
dibujar fibonacci de esta manera encontrar los dos puntos con el indicador de zigzag iCustom
0.0 1.6154
100.0 1.6168
diferencia 0.0014
último máximo = 1.6169
diferencia con 0.0 0.0015 en% 0.0015/0.0014 * 100% = 107% en distancia + 0.0001
¿Es eso lo que quieres decir?
Hola deVries,
Gracias. Sí, es como la imagen que has enviado. Pero quiero saber como codificarlo. Debe calcular cada tramo de zigzag anterior, y luego dibujar el nivel de Fibonacci, para saber hasta dónde llega el actual / último zigzag.
edit: envié el código en el post anterior. No dibuj aría la línea de fibo ...
Gracias

- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Estimados todos, ¿Cómo modificar el código para mostrar sólo los fondos del zigzag?