como comparar
double K = iCustom(Symbol(),0,"zigzag",ExtDepth,ExtDeviation,ExtBackstep,0,i); if (K==Low[i] && K>0) //..low zigzag......
deVries,
Muito obrigado por sua pronta resposta. você quer dizer simplesmente mudar o segundo último parâmetro do iCustom para 0? Já tentei isto antes. E o resultado definitivamente não é o que eu desejava... Para tornar minha pergunta mais clara, mostro as duas figuras abaixo para ilustrar minha pergunta....
Fig1. Os topos indesejados são mostrados quando eu quero mostrar apenas os fundos! Quero filtrar todos os topos indesejados quando só quero mostrar os fundos.
FIg2. Os tops desejados são mostrados sem nenhum fundo indesejado. Este é o resultado que eu quero ter.
Portanto, minha pergunta é: é possível mostrar apenas os pontos inferiores sem mostrar o Ponto A/B/C/D/E ? Espero ter deixado clara a pergunta.....
Muito obrigado por sua resposta imediata....
//+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+
Foi possível mostrar apenas o tampão ziguezague
ziguezague é repintura
veja o resultado disso
Eis o que eu inventei. Eu não verifiquei os resultados do deVries acima [estava fazendo isto quando ele postou].
#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); }
Eis o que eu inventei. Eu não verifiquei os resultados do deVries acima [estava fazendo isto quando ele postou].
#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); }
Isto está dando como resultado
agora fundos e tops combinam todos com ziguezague
deVries:
Nice ubzen com a ajuda de seu código eu vim a esta......Isto está dando como resultado
agora fundos e tops combinam todos com ziguezague
Olá deVries,
Muito obrigado por seu código. Se eu quiser saber a que distância está o Fibonacci Retracement da última perna em ziguezague, compare com a perna anterior em ziguezague. Como fazer isso ?
Eu quero fazer como a foto, mas o código abaixo que tentei não conseguiu ...
Muito obrigado,
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); }
Olá deVries,
Muito obrigado por seu código. Se eu quiser saber a que distância está o Fibonacci Retracement da última perna em ziguezague, compare com a perna anterior em ziguezague. Como fazer isso ?
Muito obrigado,
jaque
desenhar fibonacci desta maneira encontrar os dois pontos com o indicador de ziguezague iCustom
0.0 1.6154
100.0 1.6168
diferença 0,0014
última alta = 1,6169
diferença com 0,0 0,0015 em% 0,0015/0,0014 * 100% = 107% em distância + 0,0001
É isso que você quer dizer ??
Olá deVries,
Obrigado. Sim, é como a foto que você enviou. Mas eu quero saber como codificá-la. Ele deve calcular cada etapa anterior em ziguezague, e depois desenhar o nível Fibonacci, para que saibamos até onde vai o ziguezague atual / último.
editar: eu enviei o código no post anterior. Ele não desenharia a linha de Fibonacci ...
Obrigado
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Caros todos, como modificar o código para mostrar apenas os fundos do ziguezague ?