nen: Correto, ele é calculado. O número da célula é encontrado. Desta célula (série temporal) é tomado o valor do máximo ou mínimo da barra. Considera-se que o máximo foi encontrado nesta barra. Este valor é então colocado no buffer indicador com o número encontrado. O máximo do indicador deve corresponder ao máximo na barra. Em meu código, o máximo também é tirado da matriz (série de tempos) com o mesmo número encontrado e comparado com o valor de val. É verificado para ver se estamos fazendo a coisa certa: colocamos o número val no buffer com este número. Também deve ser igual ao máximo da barra. A comparação de números tirados do mesmo lugar é bastante correta.
Parece-me que a comparação ...==val, é perigosa porque é o número de célula que pode mudar de tique para tique. Especialmente em pequenos períodos de tempo, onde há muita combinação de Baixo e Alto. No entanto, devemos pensar bem, talvez nos referamos a momentos diferentes.
nen, você gostaria de testar este ziguezague? Na verdade, este é um pedido a todos que têm experiência no uso do ziguezague e sabem o que ele quer do ziguezague. Talvez você possa fazer algo útil a partir deste protótipo?
nen você gostaria de testar este ziguezague? Na verdade, este é um pedido a qualquer pessoa que tenha experiência com ziguezague e saiba o que quer de um ziguezague. Talvez você possa fazer algo útil a partir deste protótipo? Tenha em mente que, embora os nomes dos parâmetros sejam os mesmos, eles funcionam de forma diferente.
Candidato. Vou dar uma olhada nisso. A primeira vez que o instalei, tive a seguinte observação. Há vários bares consecutivos com os mesmos altos. Sua variante do ziguezague desenha uma pausa (topo) na última barra. Ou seja, a barra mais próxima a zero. Idealmente, o intervalo deveria ser traçado na primeira barra, que é a mais distante da barra zero. O primeiro vértice que aparece é significativo. O mesmo se passa com os parceiros. Posso citar várias fontes (da literatura), onde é necessário fazê-lo.
klot , obrigado. Seguindo a idéia de seu DT-ZigZag, agora fiz meu indicador para trabalhar com dados de alto prazo. Mas eu só deixei a idéia. Eu fiz meu próprio algoritmo. Ontem eu fiz mais algumas reparações em ziguezague. Agora eu o carreguei para testes coletivos. Tentarei certamente sua variante. Aqui está a descrição do indicador que causou toda a confusão: http://onix-trade.net/forum/index.php?showtopic=373. Observe que o modo DT-ZigZag utiliza o ziguezague externo que está incluído com o indicador. E este ziguezague externo às vezes falha na primeira viga. Uma nova versão do ziguezague externo está sendo testada.
klot Obrigado. Seguindo a idéia de seu DT-ZigZag, agora fiz meu indicador para trabalhar com dados de prazos mais altos. Mas eu deixei apenas a idéia. Eu fiz meu próprio algoritmo. Ontem eu fiz mais algumas reparações em ziguezague. Agora eu o carreguei para testes coletivos. Tentarei certamente sua variante. Aqui está a descrição do indicador que causou toda a confusão: http://onix-trade.net/forum/index.php?showtopic=373. Observe que o modo DT-ZigZag utiliza o ziguezague externo que está incluído com o indicador. E este ziguezague externo às vezes falha na primeira viga. Uma nova versão do ziguezague externo está sendo testada.
Sim, eu notei :) apenas uma idéia :) . Agora estou usando minha ZZ em todos os lugares (código no post acima) Funciona mais estável com outros dados TF.
nen: Na primeira instalação, a seguinte observação surgiu imediatamente. Há vários bares consecutivos com os mesmos altos. Sua opção em ziguezague faz uma pausa (topo) na última barra.
Aha, então eu escolhi a "opção" errada. Agora vou editar o código no posto de origem. O sinal das mudanças são as linhas comentadas da "opção" errada.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Correto, ele é calculado. O número da célula é encontrado. Desta célula (série temporal) é tomado o valor do máximo ou mínimo da barra. Considera-se que o máximo foi encontrado nesta barra. Este valor é então colocado no buffer indicador com o número encontrado. O máximo do indicador deve corresponder ao máximo na barra. Em meu código, o máximo também é tirado da matriz (série de tempos) com o mesmo número encontrado e comparado com o valor de val. É verificado para ver se estamos fazendo a coisa certa: colocamos o número val no buffer com este número. Também deve ser igual ao máximo da barra. A comparação de números tirados do mesmo lugar é bastante correta.
Parece-me que a comparação ...==val, é perigosa porque é o número de célula que pode mudar de tique para tique. Especialmente em pequenos períodos de tempo, onde há muita combinação de Baixo e Alto. No entanto, devemos pensar bem, talvez nos referamos a momentos diferentes.
//+------------------------------------------------------------------+ //| CZigZag.mq4 | //| Copyright © 2006, Candid | //| likh@yandex.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Candid" #property link "likh@yandex.ru" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Blue //---- indicator parameters extern int ExtDepth=12; extern int ExtDeviation=5; //extern int ExtBackstep=3; int shift; double res; int i; int fBar; double CurMax,CurMin; int CurMaxPos,CurMinPos; int CurMaxBar,CurMinBar; double hPoint; double mhPoint; double EDev; int MaxDist,MinDist; bool FirstRun; bool AfterMax,AfterMin; //---- indicator buffers double ZigZag[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_SECTION); //---- indicator buffers mapping SetIndexBuffer(0,ZigZag); SetIndexEmptyValue(0,0.0); //---- indicator short name IndicatorShortName("CZigZag("+ExtDepth+","+ExtDeviation+")"); FirstRun = true; //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); if (FirstRun) { hPoint = 0.5*Point; mhPoint = -hPoint; // EDev = ExtDeviation*Point; EDev = (ExtDeviation+0.5)*Point; AfterMax = true; AfterMin = true; fBar = Bars-1; CurMax = High[fBar]; CurMaxBar = 1; CurMin = Low[fBar]; CurMinBar = 1; MaxDist = 0; MinDist = 0; FirstRun = false; } //---- fBar = Bars-counted_bars-1; if (fBar > Bars-2) fBar = Bars-2; for(shift=fBar; shift>=0; shift--) { if (AfterMax) { // res = Low[shift]-CurMin-hPoint; res = Low[shift]-CurMin; // if (res < 0) { if (res < mhPoint) { ZigZag[Bars-CurMinBar] = 0; CurMin = Low[shift]; CurMinBar = Bars-shift; ZigZag[Bars-CurMinBar] = CurMin; } else { // if (res < 0) // if (res > 0 ) { if (res > hPoint ) { MaxDist = Bars-CurMaxBar-shift+1; MinDist = Bars-CurMinBar-shift+1; if ((MaxDist>ExtDepth && MinDist>ExtDepth) || res > EDev) { AfterMax = false; AfterMin = true; CurMaxBar = CurMinBar+1; CurMaxPos = Bars-CurMaxBar; CurMax = High[CurMaxPos]; for (i=CurMaxPos-1;i>=shift;i--) { if (High[i] > CurMax+hPoint) { CurMaxBar = Bars-i; CurMax = High[i]; } } // for (i=CurMaxPos-1;i>=shift;i--) ZigZag[Bars-CurMaxBar] = CurMax; } // if ((MaxDist>ExtDepth && MinDist>ExtDepth) || res > EDev) } // if (res > 0 ) } // else if (res < 0) } // if (AfterMax) if (AfterMin) { // res = CurMax-High[shift]-hPoint; res = CurMax-High[shift]; // if (res < 0) { if (res < mhPoint) { ZigZag[Bars-CurMaxBar] = 0; CurMax = High[shift]; CurMaxBar = Bars-shift; ZigZag[Bars-CurMaxBar] = CurMax; } else { // if (res < 0) // if (res > 0 ) { if (res > hPoint ) { MaxDist = Bars-CurMaxBar-shift+1; MinDist = Bars-CurMinBar-shift+1; if ((MaxDist>ExtDepth && MinDist>ExtDepth) || res > EDev) { AfterMin = false; AfterMax = true; CurMinBar = CurMaxBar+1; CurMinPos = Bars-CurMinBar; CurMin = Low[CurMinPos]; for (i=CurMinPos-1;i>=shift;i--) { if (Low[i] < CurMin-hPoint) { CurMinBar = Bars-i; CurMin = Low[i]; } } // for (i=CurMinPos-1;i>=shift;i--) ZigZag[Bars-CurMinBar] = CurMin; } // if ((MaxDist>ExtDepth && MinDist>ExtDepth) || res > EDev) } // if (res > 0 ) } // else if (res < 0) } // if (AfterMin) } // for(shift=fBar; shift>=0; shift--) //---- return(0); } //+------------------------------------------------------------------+Favor observar que embora os nomes dos parâmetros sejam mantidos, eles funcionam de maneira diferente.
//+------------------------------------------------------------------+ //| DT_ZZ.mq4 | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, klot." #property link "klot@mail.ru" #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Aqua #property indicator_color2 Blue #property indicator_color3 Red //---- indicator parameters extern int ExtDepth=12; //---- indicator buffers double zzL[]; double zzH[]; double zz[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { // IndicatorBuffers(3); //---- drawing settings SetIndexStyle(2,DRAW_ARROW); SetIndexStyle(1,DRAW_ARROW); SetIndexStyle(0,DRAW_SECTION); SetIndexArrow(2,159); SetIndexArrow(1,159); //---- indicator buffers mapping SetIndexBuffer(0,zz); SetIndexBuffer(1,zzH); SetIndexBuffer(2,zzL); SetIndexEmptyValue(0,0.0); SetIndexEmptyValue(1,0.0); SetIndexEmptyValue(2,0.0); //---- indicator short name IndicatorShortName("DT_ZZ("+ExtDepth+")"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int i,shift,pos,lasthighpos,lastlowpos,curhighpos,curlowpos; double curlow,curhigh,lasthigh,lastlow; double min, max; ArrayInitialize(zz,0.0); ArrayInitialize(zzL,0.0); ArrayInitialize(zzH,0.0); lasthighpos=Bars; lastlowpos=Bars; lastlow=Low[Bars];lasthigh=High[Bars]; for(shift=Bars-ExtDepth; shift>=0; shift--) { curlowpos=Lowest(NULL,0,MODE_LOW,ExtDepth,shift); curlow=Low[curlowpos]; curhighpos=Highest(NULL,0,MODE_HIGH,ExtDepth,shift); curhigh=High[curhighpos]; //------------------------------------------------ if( curlow>=lastlow ) { lastlow=curlow; } else { //идем вниз if( lasthighpos>curlowpos ) { zzL[curlowpos]=curlow; ///* min=100000; pos=lasthighpos; for(i=lasthighpos; i>=curlowpos; i--) { if (zzL[i]==0.0) continue; if (zzL[i]<min) { min=zzL[i]; pos=i; } zz[i]=0.0; } zz[pos]=min; //*/ } lastlowpos=curlowpos; lastlow=curlow; } //--- high if( curhigh<=lasthigh ) { lasthigh=curhigh;} else { // идем вверх if( lastlowpos>curhighpos ) { zzH[curhighpos]=curhigh; ///* max=-100000; pos=lastlowpos; for(i=lastlowpos; i>=curhighpos; i--) { if (zzH[i]==0.0) continue; if (zzH[i]>max) { max=zzH[i]; pos=i; } zz[i]=0.0; } zz[pos]=max; //*/ } lasthighpos=curhighpos; lasthigh=curhigh; } //---------------------------------------------------------------------- } return(0); } //+------------------------------------------------------------------+Tenha em mente que, embora os nomes dos parâmetros sejam os mesmos, eles funcionam de forma diferente.
Candidato. Vou dar uma olhada nisso. A primeira vez que o instalei, tive a seguinte observação.
Há vários bares consecutivos com os mesmos altos. Sua variante do ziguezague desenha uma pausa (topo) na última barra. Ou seja, a barra mais próxima a zero. Idealmente, o intervalo deveria ser traçado na primeira barra, que é a mais distante da barra zero. O primeiro vértice que aparece é significativo. O mesmo se passa com os parceiros. Posso citar várias fontes (da literatura), onde é necessário fazê-lo.
Sim, eu notei :) apenas uma idéia :) . Agora estou usando minha ZZ em todos os lugares (código no post acima) Funciona mais estável com outros dados TF.
Na primeira instalação, a seguinte observação surgiu imediatamente.
Há vários bares consecutivos com os mesmos altos. Sua opção em ziguezague faz uma pausa (topo) na última barra.
Klot, opção interessante.
Se suas variantes em ziguezague mostram resultados interessantes, posso aplicá-las em meu desenvolvimento?