Você não aprenderá nada se conseguir que outras pessoas o façam por você, a única maneira é fazê-lo por si mesmo para que você o entenda, a única maneira de fazê-lo você mesmo é examinar cada linha de código, quebrá-lo e descobrir exatamente o que ele está fazendo e há várias maneiras de fazer isso.
for(int i=1;i<=limit ;i++)
{ if( MathAbs(Close[i]-Open[i])/(High[i]-Low[i])<0.50
) // what is this parentheses doing here ? How can you expect to write code that works if you are this sloppy about it ?
boring[i]=Close[i];
}
Essas são todas as coisas que você poderia fazer que o ajudariam a encontrar a causa do problema
Você disse que verificou a guia do diário, você olhou na guia dos especialistas ao lado?
Eu já lhe disse na semana passada que seu código estava causando uma série fora de alcance, você procurou isso para descobrir o que significa?
Há um depurador no metaeditor que você poderia tentar aprender como usá-lo para depurar seu código.
Você poderia usar Print() para verificar quais eram os valores de suas variáveis quando o código estava rodando
.
Se você tivesse clicado na aba de especialistas, ele lhe diria que seu indicador fez divisão zero nesta linha, mudar os prazos não tinha nada a ver com isso.
Portanto, isso tem que significar que este Alto[i]-Baixo[i] foi zero por alguma razão. Se você olhar para o indicador no gráfico, você pode ver que o indicador desenhou alguns de seus valores, então pára em uma barra onde há apenas um tick. Se houver apenas um tick alto[i] ==baixo[i] de modo que causaria uma divisão zero
Agora certifique-se de que o alto[i]-baixo[i] não seja usado se for zero.
int limit=rates_total-prev_calculated;
if(limit<=0) limit=300;
//---for(int i=1;i<=limit ;i++)
{
if(High[i] - Low[i] == 0) continue;// --------------- skip this barif( MathAbs(Close[i]-Open[i])/(High[i]-Low[i])<0.50 )
{boring[i]=Close[i];
}}
//--- return value of prev_calculated for next callreturn(rates_total);
}
Agora você verá que a guia de especialistas lhe diz que o código não zerou mais a divisão, mas gera uma matriz fora do intervalo de erro nesta linha.
if(high[i] - low[i] == 0)
Então o que acontece se você retirar todos os cálculos e condidições para testar o laço?
int limit=rates_total-prev_calculated;
if(limit<=0) limit=300;
//---for(int i=1;i<=limit ;i++)
{
boring[i]=Close[i];
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
Agora os relatórios de tabulação dos especialistas estão novamente fora de alcance, desta vez nesta linha:
boring[i]=Close[i];
Portanto, agora você sabe que seu código causa um array fora do alcance cada vez que um array de preços é usado no loop. Então descubra o que está errado com o laço e porque Fechar[i], Baixo[i], Alto[i] está fora de alcance. Você pode ver o indicador desenhar até o final do gráfico, então o erro deve estar no final, os índices mais altos da matriz.
int limit=rates_total-prev_calculated; // what is the value of limit in this calculation when prev_calulated == 0 ?
if(limit<=0) limit=300;
//---for(int i=1;i<=limit;i++) // how does the value of limit compare with the highest available Close[] array index ?
Parece que você está tentando fazer um indicador sem aprender a codificar primeiro um laço que funciona corretamente. Há muitos exemplos de como fazer isso. Veja o código para os indicadores incluídos e experimente com eles até entender exatamente como funcionam e depois tente fazer um indicador para desenhar uma linha simples que funcione corretamente antes de tentar fazer os cálculos.
Desculpe, eu o orientei mal, peço desculpas, o indicador pode ser codificado assim :
int limit = -1;
if( prev_calculated == 0 ) limit = rates_total - 3000;// will calculate 3000 Barsif( prev_calculated > 0 ) limit = rates_total-prev_calculated;
for(int i=limit; i>=0; i--)
{
if(High[i] - Low[i] == 0) continue;// --------------- skip this bar
// Please test it, check if it's OK;
// Put the indicator in a backtest EA, say MACDSample, to check it
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.
Obrigado por sua explicação.
Vejo isso melhor agora.
SCFX
Hi,
Eu coço minha cabeça com esse erro louco.
Ainda assim este simples indicador de 4 linhas de código desaparece quando mudo de prazo.
Loucamente, já apliquei as sugestões postadas aqui, mas ainda assim falhei.
Eu me sinto tão mal...
Por favor, me ajude.
Muito obrigado,
SCFX
Hi,
Eu coço minha cabeça com esse erro louco.
Ainda assim este simples indicador de 4 linhas de código desaparece quando mudo de prazo.
Loucamente, já apliquei as sugestões postadas aqui, mas ainda assim falhei.
Eu me sinto tão mal...
Por favor, me ajude.
Muito obrigado,
SCFX
Obrigado por responder.
Em meu diário, não há tal aviso, mas quando eu troco de TF, este indicador é removido.
Eu ainda não posso corrigi-lo.
SCFX
2014.05.18 08:41:31.080Indicador personalizado H_889_boring GBPUSD,H1: removido
2014.05.18 08:41:25.441 Indicador personalizado H_889_boring GBPUSD,H4: carregado com sucesso
Ainda não consigo consertá-lo.
SCFX
Isso porque você não está se esforçando muito.
Você não aprenderá nada se conseguir que outras pessoas o façam por você, a única maneira é fazê-lo por si mesmo para que você o entenda, a única maneira de fazê-lo você mesmo é examinar cada linha de código, quebrá-lo e descobrir exatamente o que ele está fazendo e há várias maneiras de fazer isso.
Essas são todas as coisas que você poderia fazer que o ajudariam a encontrar a causa do problema
Se você tivesse clicado na aba de especialistas, ele lhe diria que seu indicador fez divisão zero nesta linha, mudar os prazos não tinha nada a ver com isso.
Portanto, isso tem que significar que este Alto[i]-Baixo[i] foi zero por alguma razão. Se você olhar para o indicador no gráfico, você pode ver que o indicador desenhou alguns de seus valores, então pára em uma barra onde há apenas um tick. Se houver apenas um tick alto[i] ==baixo[i] de modo que causaria uma divisão zero
Agora certifique-se de que o alto[i]-baixo[i] não seja usado se for zero.
Agora você verá que a guia de especialistas lhe diz que o código não zerou mais a divisão, mas gera uma matriz fora do intervalo de erro nesta linha.
if(high[i] - low[i] == 0)Então o que acontece se você retirar todos os cálculos e condidições para testar o laço?
Agora os relatórios de tabulação dos especialistas estão novamente fora de alcance, desta vez nesta linha:
Portanto, agora você sabe que seu código causa um array fora do alcance cada vez que um array de preços é usado no loop. Então descubra o que está errado com o laço e porque Fechar[i], Baixo[i], Alto[i] está fora de alcance. Você pode ver o indicador desenhar até o final do gráfico, então o erro deve estar no final, os índices mais altos da matriz.
Parece que você está tentando fazer um indicador sem aprender a codificar primeiro um laço que funciona corretamente. Há muitos exemplos de como fazer isso. Veja o código para os indicadores incluídos e experimente com eles até entender exatamente como funcionam e depois tente fazer um indicador para desenhar uma linha simples que funcione corretamente antes de tentar fazer os cálculos.
@ scfx
A única pessoa que pode consertar é você. Ou acesse https://www.mql5.com/en/job
e afixar o trabalho lá.
...
Por favor, SDC, não é preciso ser tão duro, mesmo que você esteja certo.
Por favor SDC, não é preciso ser tão duro, mesmo que você esteja certo.
rs reescrevi um pouco meu posto ;)
Desculpe, eu o orientei mal, peço desculpas, o indicador pode ser codificado assim :
Se o gráfico tiver menos de 3000 barras, ele ainda estará forade alcance.