Mas o que está acontecendo? - página 5

 
Andrey F. Zelinsky:

declarar uma variável globalmente e inicializá-la na declaração, por exemplo, int kk=0;

e depois em OnTick() unprint e mudar valor, por exemplo, Print("kk=",kk); ++kkk;

depois mudar TF -- e ver o resultado.

é claro que a variável global manterá seu valor mesmo se a TF for alterada - mas nada parecido acontece no testador.

 
Andrey Dik:

é claro que a variável global manterá seu valor mesmo se a TF for alterada - mas nada parecido acontece no testador.

Agora você encontrou a resposta para a causa da diferença nos resultados.

Ao otimizar, os parâmetros são re-selecionados, ou seja, o Expert Advisor é reiniciado com diferentes configurações.

 
Andrey F. Zelinsky:

Agora você encontrou a resposta para a diferença nos resultados.

Você acha que a variável EA global retém seu valor das execuções anteriores do otimizador e é transportada para as próximas?

 
Andrey F. Zelinsky:

verifique, é mais fácil de verificar do que adivinhar.

Renat acima escreveu que o otimizador funciona "como um relógio" e que a razão está no código - ele recomendou várias vezes que se fizesse um desabafo - presumo que ninguém o tenha feito.

você mesmo já verificou? algum exemplo claro de quando uma única execução funcionará de forma diferente do que como parte da otimização?

por exemplo, lembro que a remoção de uma alça no testador não funcionou antes, causou transbordamento de memória e falha de terminal junto com o sistema. talvez este problema já tenha sido resolvido, mas ainda existem algumas armadilhas com a criação e remoção de alças indicadoras e existem diferenças em otimizadores e execuções de indicadores únicos. como sei, os desenvolvedores trabalharam muito duro para acelerar e minimizar o consumo de memória sempre que possível.

 
Andrey Dik:

você mesmo já verificou? existem exemplos claros em que casos uma única execução funcionará de forma diferente do que como parte da otimização?

neste caso, não se trata de uma única corrida.

 
Andrey F. Zelinsky:

Verificar inicialização de variáveis declaradas globalmente.

Se a inicialização não estiver no OnInit(), mas na declaração e se seus valores forem alterados no código.

  1. Eu o verifiquei.
  2. É isso que são as variáveis - elas podem ser alteradas.
  3. Corrija-me se eu estiver errado.
  • Se uma variável for definida, a memória é reservada para ela.
  • Se não for inicializada, qualquer coisa pode ser armazenada nela.
  • Qual é a diferença entre inicializá-lo por zero imediatamente ou atribuir o resultado dos cálculos em um determinado lugar?
  • Se você tentar usar uma variável não-inicializada, o compilador gerará um aviso.

Um exemplo simples:

int tst(int x)
{
   int y;
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);		// possible use of uninitialized variable 'y'
}

Embora.... O compilador não gera o aviso por alguma razão se você colocar a declaração no escopo global (((

int y;

int tst(int x)
{
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);           // никакого предупреждения уже нет...
}
'test.mq5'
code generated
0 errors, 0 warnings, 143 msec elapsed

Eu estava esperando algo diferente...

 
Сергей Таболин:

  1. Eu verifiquei.
  2. As variáveis são apenas isso, variáveis, elas podem ser alteradas.
  3. Corrija-me se eu estiver errado.
  • Se uma variável é declarada, a memória é reservada para ela.
  • Se não for inicializada, qualquer coisa pode ser armazenada nela.
  • Qual é a diferença entre inicializá-lo por zero imediatamente ou atribuir o resultado dos cálculos em um determinado lugar?
  • Se você tentar usar uma variável não-inicializada, o compilador gerará um aviso.

Um exemplo simples:

Embora.... O compilador não gera o aviso por alguma razão se você colocar a declaração no escopo global (((

Eu estava esperando algo diferente.

A quinta página estava acontecendo, mas ainda não havia um código mql5... Também permanece um mistério envolto na escuridão em relação aos testes: símbolo(s), cronograma(s), configurações de teste.

 

Bem, mais uma pergunta antes de começar a preparar.

Por exemplo, eu registrei os resultados:

otimizador - comprar; vender; vender; comprar; comprar; vender

testador - comprar; vender; vender; comprar;comprar; vender; comprar; comprar; vender

Como os dados sobre esses acordos"extras" podem ajudar a entender de que teto eles vieram? Talvez devêssemos escrever também os preços dos bares anteriores, ou o que mais?

 
Vladimir Karputov:

A quinta página estava em andamento, mas o código mql5 ainda não estava lá... Também permanece um mistério envolto na escuridão em relação aos testes: símbolo(s), cronograma(s), configurações de teste.

Bem-vindo de volta das férias ))))

Você pode ver tudo aqui.

 
Сергей Таболин:

  1. Eu verifiquei.
  2. As variáveis são apenas isso, variáveis, elas podem ser alteradas.
  3. Corrija-me se eu estiver errado.
  • Se uma variável é declarada, a memória é reservada para ela.
  • Se não for inicializada, qualquer coisa pode ser armazenada nela.
  • Qual é a diferença entre inicializá-lo por zero imediatamente ou atribuir o resultado dos cálculos em um determinado lugar?
  • Se você tentar usar uma variável não-inicializada, o compilador gerará um aviso.

Um exemplo simples:

Embora.... O compilador não gera o aviso por alguma razão se você colocar a declaração no escopo global (((

Eu estava esperando algo diferente...

Se 'x' é do tipo duplo, os exemplos dados são fundamentalmente errados e o estado 'y' é indefinido em ambos os casos

isto é, é possível que em algum lugar nas profundezas das redes neurais se possa obter valores duplos especiais - em tipos, nanos tipos ou similares aos valores eps

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Вещественные типы (или типы с плавающей точкой) представляют значения, имеющие дробную часть. В языке MQL5 есть два типа для чисел с плавающей точкой. Способ представления вещественных чисел в машинной памяти определен стандартом IEEE 754 и не зависит от платформ, операционных систем и языков программирования. Константы с плавающей точкой...
Razão: