Erros, bugs, perguntas - página 38

 

Surgiu um problema, não sei onde o colocar.

aqui está a secção de código em que estou interessado:

      Print("itogo do=",itogo);
      if(itogo>1000)
        {
         Print("itogo>1000 =",itogo);
         itogo=500;
         Print("vsego_if=",itogo);
        }
      Print("itogo posle=",itogo);
      Print("+-----------------------------------------------------------+");

Diz que primeiro precisamos de desimprimir o valor do itogo variável com o texto "itogo do",

então se o itogo é mais de 1000 então imprima o itogo com o texto "itogo>1000".

itogo é atribuído 500

Imprimir itogo com o texto "vsego_if=" e depois deixar a zona protegida

imprimir itogo com o texto "itogo posle=".

desenhar uma linha.

Porque estou a entrar em detalhes?

deve ficar claro que se não houvesse nenhuma condição, haverá duas linhas entre elas; se houvesse uma condição, haverá quatro linhas.

Temos de perceber que quando a condição é desencadeada, o valor da variável mudará.

Posso ver a falta de impressão a partir da qual podemos ver que a condição não desencadeou, mas o valor da variável mudou.

Como pode isto ser ??????????


Aqui está uma imagem do código para mostrar que nada entre as linhas, algures para além dos limites do campo, está escondido.

O código falha de todo, compila sem problemas mas recusa-se a trabalhar como pretendido.

A variável é declarada globalmente int, o código em si é grande mas as impressões não estão em mais lado nenhum no código.

E a coisa mais interessante com o depurador funciona bem, mas quando se corre em modo normal, aqui estão esses turnos

e isto não é o bot da impressora na lógica do programa vejo que algo está errado.

 

Ainda não fui capaz de o reproduzir noutros exemplos, mas esta parece ser a solução

Anteriormente existia DebugBreak(); e o código era executado através do depurador, mais tarde DebugBreak() foi removido e tudo foi recompilado

mas aparentemente ME lembra-se que o depurador foi utilizado e recusa-se a trabalhar correctamente sem um depurador após a compilação.

Se eu executar o depurador, então mesmo no arranque normal o guião funciona bem.

 
Urain:

Ainda não fui capaz de o reproduzir noutros exemplos, mas esta parece ser a solução

Anteriormente existia DebugBreak(); e o código era executado através do depurador, mais tarde DebugBreak() foi removido e tudo foi recompilado

mas aparentemente ME lembra-se que o depurador foi utilizado e recusa-se a trabalhar correctamente sem o utilizar após a compilação.

Se o passar através do depurador, o guião funciona bem mesmo durante o funcionamento normal.


E eles chamam-lhe uma libertação?

O potencial participante do Campeonato de 2010 escreveu um Expert Advisor e depurou-o, mas o material do depurador permanece no código. No entanto, o Expert Advisor trabalha bem. No entanto, funciona apenas com "truques". No entanto, o Participante não sabe disso - como poderia saber sobre uma característica tão indocumentada?

Assim, o participante enviou o código fonte da sua EA para a MetaQuotes para participar no Campeonato 2010 e eles apenas o compilaram e, claro, o código ficou limpo sem qualquer "material de depuração".

O Campeonato 2010 está a decorrer, mas o MetaQuotes Expert Advisor de alguma forma não negoceia da mesma forma que no seu computador. Um participante está perplexo e tem todo o tipo de pensamentos...

 
Urain:

Surgiu um problema, não sei onde o colocar.

Fiz este código como um exemplo (coloquei os vossos valores):

void Check(int itogo)
  {
   Print("itogo do=",itogo);
   if(itogo>1000)
     {
      Print("itogo>1000 =",itogo);
      itogo=500;
      Print("vsego_if=",itogo);
     }
   Print("itogo posle=",itogo);
   Print("+-----------------------------------------------------------+");  
  }
void OnStart()
  {
   Check(158);
   Check(179);
   Check(202);
   Check(222);
   Check(243);
   Check(261);
   Check(288);
   Check(301);
  }

Funcionou bem:

2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=301
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=301
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=288
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=288
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=261
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=261
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=243
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=243
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=222
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=222
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=202
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=202
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=179
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=179
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=158
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=158

Como se pode ver, não há erros ou inconsistências nos valores das variáveis.

Talvez se tenha esquecido de recompilar o código após numerosas reedições e utilizou uma versão antiga.

O que precisa de fazer:

  • Copie o seu código do zero, reinicie o terminal (para garantia) e verifique
  • Se o erro persistir, envie-nos o código completo via servicedesk (ou mesmo no fórum) - iremos certamente verificá-lo
 
simpleton:

Deixar de ser já histérico.

Se este erro for confirmado, será corrigido imediatamente. O desenvolvimento de software não pode continuar sem erros.

 
Renat:

Deixar de ser já histérico.

Se este erro for confirmado, será corrigido imediatamente. O desenvolvimento de software não pode continuar sem erros.

Renat, sugiro a abertura do tópico "Críticas à MQL5" ou algo semelhante. E todas essas mensagens de outros tópicos (tópicos) devem ser eliminadas como fora do topo.

Desta forma, os críticos terão a possibilidade de expressar o seu ponto de vista, e os fios serão bem comportados.

 

Gostaria de saber o destino do pedido#18261 parauma chamada de indicador de uma EA (o valor não corresponde ao indicador).

Seria bom se respondessem de alguma forma...

Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • 2010.03.09
  • KlimMalgin
  • www.mql5.com
C появлением новой версии языка MQL, не только изменился подход к работе с индикаторами, но и появились новые способы создания индикаторов. Кроме того, появилась дополнительная гибкость при работе с индикаторными буферами - теперь вы можете самостоятельно указать нужное направление индексации и получать ровно столько значений индикатора, сколько вам требуется. В этой статье рассмотрены базовые методы вызова индикаторов и получения данных из индикаторных буферов.
 
ddd06:

Gostaria de saber o destino do pedido #18261 para uma chamada de indicador de uma EA (o valor não corresponde ao indicador).

Seria bom se respondessem de alguma forma...

O seu pedido foi atendido. Foi aconselhado.

Porque é que não foi actualizado no seu perfil - vamos descobri-lo.

 
Renat:

Fiz este código como exemplo (coloquem os vossos valores):

Funcionou bem:

Como se pode ver, não há erros ou inconsistências nos valores variáveis.

É possível que após numerosas reedições se tenha esquecido de recompilar o código e utilizado uma versão antiga.

O que fazer:

  • Recopie o seu código do zero, reinicie o terminal (para ter a certeza) e verifique
  • Se ainda tiver o erro, envie-nos o código completo através de servicedesk (ou mesmo no fórum) - iremos definitivamente verificar

E antes de afixar aqui o mesmo, e o resultado foi o mesmo que você, mas aqui na folha onde o erro inicialmente surgiu tudo e colide.

Repito a razão no depurador, se nessa folha de trabalho em particular se procedeu a uma recompilação e não se correu através de trabalhos de depuração incorrectamente, após uma corrida no depurador tudo é normal. Não sei porque é que o depurador está ligado a esta folha de trabalho específica, as cópias de código em outras folhas de trabalho funcionam bem, mas esta não.

É por isso que escrevi acima que não posso reproduzir o erro até agora (ou melhor, ele reproduz-se mas apenas no âmbito do projecto localizado).

Talvez haja uma característica de debugger ou ME para recordar a história das edições, talvez tenha havido um erro crítico antes do incidente, ao qual não prestei atenção.

Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Программы MQL5 / Ошибки выполнения - Документация по MQL5
 
Urain:

E eu fiz o mesmo antes de o colocar aqui, e o resultado foi como o seu, mas na folha onde o erro ocorreu originalmente, tudo se desmorona.

Repito a razão em debugger, se recompilei em folha específica e não a executei através de trabalhos de depuração incorrectos, depois de ter depurado tudo é normal. Não sei porque é que o depurador está ligado a esta folha de trabalho específica, as cópias de código em outras folhas de trabalho funcionam bem, mas esta não.

É por isso que escrevi acima que não posso reproduzir o erro até agora (ou melhor, ele reproduz-se mas apenas no âmbito do projecto localizado).

Talvez haja uma característica de debugger ou ME para recordar a história das edições, talvez tenha havido um erro crítico antes do incidente, ao qual eu não prestei atenção.

Lembra-se onde DebugBreak() foi colocado?

Sem sorte em reproduzi-la até agora.