Preocupado com o erro, não há operações comerciais - página 4

 
Alexey Viktorov:

O computador é um idiota. © M.M. Botvinnik.

Então, finja ser um idiota e tente passar o algoritmo do ponto de vista de um idiota e com os parâmetros definidos por um idiota. É deste ponto de vista que o autovalidador se encaixa. Preste atenção ao "feedback". O Expert Advisor o notifica sobre erros?

Eu finalmente descobri, talvez alguém possa ajudar, em geral, o soviético só tem quando o MM foi checado para um lote mínimo, e então o lote do conjunto hardcore = 0,01, bem, no depósito do validador acaba sendo $ 1 (encontrei esta informação em um dos tópicos), respectivamente, ele usa o lote 0,001 (ou mais) para negociar e porque eu sempre tive em um lugar foi o lote 0,01, respectivamente, ele não tinha os meios e o robô não negocia)

 
Roman Gergert:

Finalmente descobri, talvez alguém ajude, em geral, o quadro somente quando o MM foi verificado para um lote mínimo, e então o lote do conjunto hardcore = 0,01, bem, no depósito do validador acaba sendo $ 1 (encontrei esta informação em um dos tópicos), respectivamente, ele usa o lote 0,001 (ou mais) para negociar e porque eu sempre tive em um lugar um lote de 0,01, respectivamente, ele não tinha dinheiro suficiente e o robô não negocia)

Gostaria de falar novamente sobre o assunto. Sua resposta não me ajuda. Eu tenho um cálculo de volume e se tudo não se encaixa no volume mínimo é usado:

SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN)

No final, coloque o volume mínimo de uma vez sem nenhum cálculo. Depois vem a verificação da margem... e nenhuma operação comercial.

Ontem eu tropecei em uma resposta do fórum dizendo que às vezes um e o mesmo código pode ser enviado depois de algum tempo e ele vai passar. O tempo passou, ele não envia.

O que fazer, há 2 semanas esta função de detecção de volume passou e desde então ela não mudou em nada!!!

 
Evgeniy Scherbina:

Gostaria de falar novamente sobre o assunto. Sua resposta não me ajuda. Tenho um cálculo de volume, e se tudo não se encaixa, então o volume mínimo é usado:

No final, coloque o volume mínimo de uma vez sem nenhum cálculo. Depois vem a verificação da margem... e nenhuma operação comercial.

Ontem eu tropecei em uma resposta do fórum dizendo que às vezes um e o mesmo código pode ser enviado depois de algum tempo e ele vai passar. O tempo passou, ele não envia.

O que fazer, há 2 semanas esta função de detecção de volume passou e desde então ela não mudou em nada!!!

Eu vou ser um veterano. Com tal classificação, números sob o avatar, e tendo um problema de alguma forma você não viu o tópico onde ele foi discutido. E aí você encontrou uma solução.

Автоматический валидатор - проблемы
Автоматический валидатор - проблемы
  • 2019.04.26
  • www.mql5.com
Пытаюсь обновить версию советника и получаю ошибку. Тот же советник в тестере стратегий. Паралельно пишу советники и для MT4, там все ОК...
 
Alexey Viktorov:

Eu vou ser um veterano. Com tal classificação, números sob o avatar, e tendo um problema de alguma forma você não viu o tópico onde ele foi discutido. E foi aí que a solução foi encontrada.

Entre os povos da Rússia há aqueles que rezam aos deuses pagãos, e aqueles que respondem
 
Evgeniy Scherbina:
Entre os povos da Rússia há aqueles que rezam aos deuses pagãos, e aqueles que respondem

Eu respondi, mas não sou um deus pagão. Penso que esta é uma solução temporária para o problema, espero que seja consertada em breve.

 
Nota - este comentário é provavelmente mais para mim da próxima vez que eu procurar o erro "não há operações comerciais".
Usado ForceStop em locais duvidosos. Além disso, aparecerá no relatório como divisão com zero e a localização exata deste erro.
Exemplo no meu caso:
//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
int ForceStop=0;
int sstop=0;
bool CheckVolumeValue(double volume,string &description)
  {
  
//--- минимально допустимый объем для торговых операций
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
     {     
      description=StringFormat("Volume is less than the minimum allowable SYMBOL_VOLUME_MIN=%.2f",min_volume);
      sstop=5/ForceStop; // force stop, zerro divide
      return(false);
     }

//--- максимально допустимый объем для торговых операций
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
     {
      description=StringFormat("Volume is greater than the maximum allowable SYMBOL_VOLUME_MAX=%.2f",max_volume);
      sstop=5/ForceStop; // force stop, zerro divide
      return(false);
     }

//--- получим минимальную градацию объема
   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
     {
      description=StringFormat("The volume is not a multiple of the minimum gradation SYMBOL_VOLUME_STEP=%.2f, Closest correct volume %.2f",
                               volume_step,ratio*volume_step);
      sstop=5/ForceStop; // force stop, zerro divide
      return(false);
     }
   description="Correct value of volume";
   return(true);
  }
 

Mano, isso me ajudou a mover todas as variáveis para o cabeçalho do código.

nulo OnDeinit

{
Alerta(GetLastError());

}

E no init ResetLastError();

Eu não sei o que funcionou, mas algo assim

 

Isso me ajuda a simplesmente mudar (editar) algumas linhas no código.
Ou simplesmente adicionar linhas em branco, e recompilar novamente.

Acho que é algum tipo de bug no servidor.

 
Taras Slobodyanik:

Ou simplesmente adicionar linhas em branco, e recompilar novamente.

Confirmado, às vezes apenas recompilado e funciona.

 
Nauris Zukas:

Confirmado, às vezes apenas recompilado e passa.

Não é porque eu a recompilei, é porque o teste começou a partir de uma data diferente. E eu notei tal erro, se você escorregar algo que já foi, então o teste não acontece, e imediatamente dá o resultado do teste anterior. Portanto, não se deixe enganar por tais muletas. Tente torná-lo normal. Se algo estiver faltando ou se os parâmetros forem inválidos, informe através de Imprimir e tudo estará correto.

Razão: