Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Não consegui responder (eu estava fora). Afixe o código que você precisa analisar para falar de uma coisa.
ZS Naquele ziguezague não foi um erro, mas um erro de digitação (comparado ao código em MT3), encontrei apenas este erro de digitação e não corrigi mais nada.
Acumulei agora um grande número dessas ou de outras edições. Eles funcionam muito bem. Entretanto, o primeiro raio - aquele que começa da barra zero ou qualquer uma das primeiras barras - falha com erros nas funções de identificação dos extremos. E o indicador funciona de forma instável.
//+------------------------------------------------------------------+
//| Média móvel personalizada.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp.
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#direitos autorais "Copyright © 2005, MetaQuotes Software Corp."
#link da propriedade "https://www.metaquotes.net/
#janela_do_cartão_indicador de propriedade
#property indicator_buffers 1
#indicador de propriedade_cores1 Vermelho
//---- parâmetros indicadores
intDepth=12;
ExtDeviação Externa Interna=5;
ExtBackstep ExtBackstep=3;
//---- buffers indicadores
duplo ExtMapBuffer[];
duplo ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(2);
//---- definições de desenho
SetIndexStyle(0,DRAW_SECTION);
//---- mapeamento de buffers indicadores
SetIndexBuffer(0,ExtMapBuffer);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(0,0,0.0);
//---- indicador nome curto
IndicatorShortName("ZigZag("+ExtDepth+", "+ExtDeviation+", "+ExtBackstep+")"));
//---- inicialização feita
retorno(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int shift,back,lasthighpos,lastlowpos;
duplo val,res;
duplo curlow,curhigh,lasthigh,lastlow;
for(shift=Bars-ExtDepth; shift>=0; shift--)
{
val=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)];
if(val===lastlow) val=0,0;
senão
{
lastlow=val;
if((Low[shift]-val)>(ExtDeviation*Point)) val=0,0;
senão
{
for(back=1; back<=ExtBackstep; back++)
{
res=ExtMapBuffer[shift+back];
if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0,0;
}
}
}
ExtMapBuffer[shift]=val;
//--- alto
val=Alto[Alto[NULL,0,MODE_HIGH,ExtDepth,shift)];
if(val===lasthigh) val=0,0;
senão
{
lasthigh=val;
if((val-High[shift])>(ExtDeviation*Point)) val=0,0;
senão
{
for(back=1; back<=ExtBackstep; back++)
{
res=ExtMapBuffer2[shift+back];
if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0,0;
}
}
}
ExtMapBuffer2[shift]=val;
}
// corte final
lasthigh=-1; lasthighpos=-1;
lastlow=-1; lastlowpos=-1;
for(shift=Bars-ExtDepth; shift>=0; shift--)
{
curlow=ExtMapBuffer[shift];
curhigh=ExtMapBuffer2[shift];
if((curlow==0)&&(curhigh==0)) continua;
//---
if(curhigh!=0)
{
if(lasthigh>0)
{
if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
senão ExtMapBuffer2[shift]=0;
}
//---
if(lasthigh<curhigh || lasthigh<0)
{
lasthigh=curhigh;
lasthighpos=shift;
}
lastlow=-1;
}
//----
if(curlow!=0)
{
if(lastlow>0)
{
if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
senão ExtMapBuffer[shift]=0;
}
//---
if((curlow<lastlow)|||(lastlow<0))
{
lastlow=curlow;
lastlowpos=shift;
}
lasthigh=-1;
}
}
for(shift=Bars-1; shift>=0; shift--)
{
if(shift>=Bars-ExtDepth) ExtMapBuffer[shift]=0.0;
senão
{
res=ExtMapBuffer2[shift];
if(res!=0.0) ExtMapBuffer[shift]=res;
}
}
}
Funciona em outros períodos de tempo, mas não em outros. Parece funcionar para mim. Sim, e não é meu código - a partir do fornecimento padrão parece ser. Pelo menos eu tenho em todas as versões de MT.
Em que prazos não é exibido. BC - Brezan.
GBP-CHF
Não é mostrado nos m1 e m15. É mostrado em todos os outros.
EUR-USD
Não é mostrado - m1, m5
AUD-USD - todos eles são mostrados.
Não sei por que parece ser assim.
Talvez você tenha o código que Slava retrabalhou no verão. Mas eu não gostei de seu retrabalho. Algumas questões não foram resolvidas ali.
================
GODZILLA (Nikolay) fez um bom trabalho. Mas tem apenas dois problemas resolvidos.
1) Recálculo em cada carrapato. Ele o reduziu drasticamente
2) Acrescentou um algoritmo de remoção de corcunda. As saliências aparecem principalmente devido à presença de mínimo e máximo em uma barra. O algoritmo de ziguezague deixa apenas altos. Isto muitas vezes resulta em várias elevações consecutivas.
Tenho algumas variantes de melhoria de indicadores fixadas pela GODZILL. As dobras penduradas no ar foram removidas. Entretanto, suponho que a operação incorreta das funções de busca extrema ainda persiste nos dois primeiros raios. É por causa deste problema que eu trouxe este tópico à tona aqui.
Entretanto, talvez a função de busca funcione corretamente, mas não há uma descrição clara desta função. É por isso que ele é usado incorretamente.
Ainda não consigo entender. Parece-me que deveria ser algo como ... .
Aqui o código "extra" antigo é comentado. Embora eu possa ainda não entender totalmente a idéia do ziguezague. Em qualquer caso, este código não produz extrema pendente. Se esta variante de código se encaixa, mas não foi inventada por mim :), peço desculpas pela falta de referência.
Muito bem. Não importa o ziguezague. A questão não é sobre o ziguezague. A questão é que as funções da linguagem MQ4 devem funcionar de forma estável e previsível.
E este é o PRINCIPAL PROBLEMA. As funções de busca não são utilizadas apenas no ZigZag. Mas também em muitos outros indicadores.
O ziguezague é um caso especial. Mas isso ajuda a destacar o problema. Muitos indicadores são baseados em ziguezagues. O ziguezague funciona instável. Não é um segredo para ninguém. Muitas pessoas têm que gastar seu tempo programando seus próprios ziguezagues para suas próprias necessidades. Quanto tempo é desperdiçado. Em vão. Devido a uma falta de compreensão da raiz do problema.
Essas são palavras de ouro. Você não é o primeiro a dizer isso. No entanto, as idéias por trás do ziguezague e parcialmente implementadas neste código são muito boas. Estas idéias devem ser levadas à prática.
Quando movemos a janela (shift,shift+ExtDepth) enquanto calculamos o indicador, a aparência de um novo extremo pode estar relacionada tanto ao novo preço quanto ao fato de que o antigo extremo deixou a janela. Este ponto precisa ser tratado. Para este fim, minha inserção contém a linha if(highpos!=shift) val=0,0; . Como isto é feito no código padrão, eu não entendo. A julgar pela falta de extrema na minha versão, ou isso é feito de forma incorreta ou não é feito de forma alguma.
E o que é exatamente a instabilidade do ziguezague?