Validador automático - problemas

 

Eu tento atualizar a versão EA e recebo um erro.

O mesmo EA está no testador de estratégia.


Também estou escrevendo EAs para o MT4 ao mesmo tempo, tudo está bem aí. O código para 4 e 5 EAs é o mesmo, a única diferença é incluir o arquivo (eles são diferentes para 4 e 5).

A última vez que atualizei este EA, foi em janeiro e tudo estava bem.

Versão do software - MetaTrader 5 x64 build 2025 iniciado (MetaQuotes Software Corp.)

- Terminal Windows 10 (build 14393) x64, IE 11, UAC, Intel Celeron N2815 @ 1.86GHz, Memória: 1866 / 3967 Mb, Disco: 5 / 35 Gb, GMT+3

 
Uladzimir Kirychenka:

Eu tento atualizar a versão EA e recebo um erro.

O mesmo EA está no testador de estratégia.


Também estou escrevendo EAs para o MT4 ao mesmo tempo, tudo está bem aí. O código para 4 e 5 EAs é o mesmo, a única diferença é incluir o arquivo (eles são diferentes para 4 e 5).

A última vez que atualizei este EA, foi em janeiro e tudo estava bem.

Versão do software - MetaTrader 5 x64 build 2025 iniciado (MetaQuotes Software Corp.)

- Terminal Windows 10 (build 14393) x64, IE 11, UAC, Intel Celeron N2815 @ 1.86GHz, Memória: 1866 / 3967 Mb, Disco: 5 / 35 Gb, GMT+3

Finja ser um idiota e coloque em um depósito de $1 ou em um lote de 100500 dólares e veja se haverá alguma negociação. E haverá alertas de que somente um idiota definiria tais parâmetros.

 
Alexey Viktorov:

Finja que você é um idiota e coloque um depósito de 1$ ou lote 100500 e verifique se haverá negociações. E se haverá alertas de que somente um idiota pode definir tais parâmetros.

O mesmo problema. Experimentei-o - não ajuda ). Não pode ser atualizado desde 13 de abril. Se eu verificar tudo e tudo - eu recebo apenas uma inscrição em todos os símbolos "trehe are no trading operations". Se eu não verificar tudo, recebo um erro - não tenho capital suficiente para abrir a posição. A versão para o MT4, bem como para o autor TS foi atualizada sem problemas.

123

Eu veria na figura que o lote mínimo é 2000, o saldo é 10.000 e claramente não há dinheiro suficiente para abrir a posição. Eu não passo o cheque de qualquer maneira.

O que fazer em tais casos?

 

É claro que não haverá acordos. E quais são os alertas supostamente? Só tenho no OnInit se o tamanho do lote não estiver no intervalo SYMBOL_VOLUME_MIN e SYMBOL_VOLUME_MAX, então erro de inicialização INIT_PARAMETERS_INCORRECT

 
Uladzimir Kirychenka:

É claro que não haverá acordos. E quais são os alertas supostamente? Só tenho no OnInit se o tamanho do lote não estiver no intervalo SYMBOL_VOLUME_MIN e SYMBOL_VOLUME_MAX, então erro de inicialização INIT_PARAMETERS_INCORRECT

Lembro-me que na época eu tinha mais ou menos a mesma coisa com os moderadores verificando após a auto-verificação. Em caso de parâmetros incorretos, o OnInit também terminou com o código INIT_PARAMETERS_INCORRECT. E a auto-verificação gerou o mesmo erro que não houve operação comercial. Portanto, o moderador me aconselhou a não terminar o OnInit() com este código, mas a emitir um Alerta.

 

Provavelmente, uma vez por mês, alguém o traz à tona. Isso já vem acontecendo há algum tempo.

O problema é que quando a negociação (na vida real) não só o tamanho do saldo pode mudar, mas também o tamanho do lote.

E durante os testes o tamanho do depósito (de 1 a 10000000) ou do lote (de 1000000 a 0,01) pode variar.

Portanto, estas verificações devem ser realizadas não apenas uma vez no OnInit, mas permanentemente, no loop (por exemplo, no OnTick).

Para evitar o transbordo de registros, é necessário emitir o aviso( Mensagemimpressa ou Alerta) apenas uma vez.

 
Uladzimir Kirychenka:

É claro que não haverá acordos. E quais são os alertas supostamente? Só tenho no OnInit se o tamanho do lote não estiver no intervalo SYMBOL_VOLUME_MIN e SYMBOL_VOLUME_MAX, então erro de inicialização INIT_PARAMETERS_INCORRECT

Entendo que é muito difícil fingir ser um idiota, mas esta habilidade às vezes ajuda. Tente novamente. Você definiu o Expert Advisor, sua conta tem $1, você definiu o lote 100500 e você espera. Você espera um dia, um segundo, um terceiro... então você começa a se ressentir: "O que eu paguei por isso? Por que esta merda não está funcionando?" e ninguém diz nada, ninguém quer dizer algo como "Você é um idiota... Você não pode trabalhar no mercado Forex com tal depósito. Só um idiota colocaria um lote de 100500"... É assim que as coisas são.

 
Petros Shatakhtsyan:

Provavelmente, uma vez por mês, alguém o traz à tona. Isso já vem acontecendo há algum tempo.

O problema é que quando a negociação (na vida real) não só o tamanho do saldo pode mudar, mas também o tamanho do lote.

E durante os testes o tamanho do depósito (de 1 a 10000000) ou do lote (de 1000000 a 0,01) pode variar.

Portanto, estas verificações devem ser realizadas não apenas uma vez no OnInit, mas permanentemente, no loop (por exemplo, no OnTick).

O aviso (Mensagem impressa ou Alerta) deve ser impresso apenas uma vez para evitar o transbordo de registros.

Mesmo um código muito simples não pode passar na validação. Parece satisfazer as condições que você menciona.

void OnTick()
  {
   ENUM_POSITION_TYPE PosType=POSITION_TYPE_SELL;
   MqlTradeRequest request;
   MqlTradeResult result;
   MqlTradeCheckResult check;
   ZeroMemory(request);
   ZeroMemory(result);
   ZeroMemory(check);
   long digit;
   double point,Bid;
   SymbolInfoDouble(_Symbol,SYMBOL_BID,Bid);
   request.type   = ORDER_TYPE_SELL;
   request.price  = Bid;
   request.action = TRADE_ACTION_DEAL;
   request.symbol = _Symbol;
   request.volume = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   request.sl=0;
   request.tp=0;
   request.deviation=10;
   request.magic=55555;
   request.comment=NULL;
   request.type_filling=0;
   if(PositionsTotal()==0
   &&CheckMoneyForTrade(_Symbol,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),ORDER_TYPE_SELL)==true
   ){
   OrderSend(request,result);
   }else{
      ExtExpert.Deinit();
      return;
   }
  }
  bool CheckMoneyForTrade(string symb,double lots,ENUM_ORDER_TYPE type)
  {
//--- получим цену открытия
   MqlTick mqltick;
   SymbolInfoTick(symb,mqltick);
   double price=mqltick.ask;
   if(type==ORDER_TYPE_SELL)
      price=mqltick.bid;
//--- значения необходимой и свободной маржи
   double margin,free_margin=AccountInfoDouble(ACCOUNT_MARGIN_FREE);
   //--- вызовем функцию проверки
   if(!OrderCalcMargin(type,symb,lots,price,margin))
     {
      //--- что-то пошло не так, сообщим и вернем false
      Print("Error in ",__FUNCTION__," code=",GetLastError());
      return(false);
     }
   //--- если не хватает средств на проведение операции
   if(margin>free_margin)
     {
      //--- сообщим об ошибке и вернем false
      Print("Not enough money for ",EnumToString(type)," ",lots," ",symb," Error code=",GetLastError());
      return(false);
     }
//--- проверка прошла успешно
   return(true);
  }
com cheque em dinheiro - não há operações comerciais, sem cheque - não há dinheiro suficiente
 
Petros Shatakhtsyan:

Provavelmente, uma vez por mês, alguém o traz à tona. Isso já vem acontecendo há algum tempo.

O problema é que quando a negociação (na vida real) não só o tamanho do saldo pode mudar, mas também o tamanho do lote.

E durante os testes o tamanho do depósito (de 1 a 10000000) ou do lote (de 1000000 a 0,01) pode variar.

Portanto, estas verificações devem ser realizadas não apenas uma vez no OnInit, mas permanentemente, no loop (por exemplo, no OnTick).

O aviso (Mensagem impressa ou Alerta) deve ser emitido apenas uma vez para evitar o transbordo de registros.

Estas verificações (LotMin, LotMax, LotNormalizeStep, check balance, OrderCheck) são realizadas cada vez que uma posição é aberta. E o cheque noInit só verifica o lote. Não conheço a lógica de verificar o saldo no OnInit.

PS: Alerta não me salva de erros de validador ((((((((((

 
Uladzimir Kirychenka:

Estas verificações (LotMin, LotMax, LotNormalizeStep, check balance, OrderCheck) são realizadas cada vez que uma posição é aberta. E onInit só verifica o lote. Não conheço a lógica de verificar o saldo no OnInit.

PS: Alerta não salva de erros do validador ((((((((((

O validador não tem erros :)

O validador apenas mostra que no código fornecido

  • não há cheques completos
  • não há manipulação de erros
O validador mostra que o chamado escritor de códigos nunca se colocou no lugar do usuário.

 
Vladimir Karputov:

O validador não tem erros :)

O validador apenas mostra que o código fornecido

  • não há cheques completos
  • Não há manipulação de erros
O validador mostra que o chamado escritor de códigos nunca se pôs no lugar do usuário.

))