MQL5: Validação :-( Eu já me arrebentei para descobrir o que é e como é resolvido. - página 2

 
Alexandr Gavrilin:

Outras mensagens sobre falta de margem estão chegando.

Eu tentei, como descrito no erro, somar todos os lotes para o instrumento em uma determinada direção, levando em conta as ordens pendentes e não dar um comando para abrir, se excedido levando em conta a ordem pendente, em vão.

O erro é o mesmo, minhas mensagens de depuração não são exibidas no log de relatório durante a validação Não sei como capturar e depurar este erro ou como emular este erro em meu terminal

Erro.

 
Alexandr Gavrilin:

....

O erro é o mesmo, minhas mensagens de debug não aparecem nos logs do relatório durante a validação Não sei como posso pegar e depurar o manuseio disso ou como simular esse erro em meu terminal...

Tente abrir uma posição com um volume muito grande. Veja se sua EA vai ou não pegar este erro.

 
Alexandr Gavrilin:

Outras mensagens sobre escassez de margem estão chegando.

Eu tentei, como descrito no erro, somar todos os lotes do instrumento em uma determinada direção levando em conta as ordens pendentes e não dar um comando para abrir, se excedido levando em conta a ordem aberta, é inútil.

O erro é o mesmo, não sei como rastrear e depurar este erro ou como imitá-lo em meu terminal.

Você pode verificar o Nível de Margem. Digamos que se for inferior a 5000%, nenhuma negociação será executada.

 
Vladimir Karputov:

Erro.

Resolvido.

//в функции до открытия ордера.

double max_volume=SymbolInfoDouble(m_name,SYMBOL_VOLUME_LIMIT);

      double current_lots=getAllVolume();

      if(max_volume>0 && max_volume-current_lots-dlot<=0)
        {
         //PrintFormat("%.2f - %.2f",max_volume , dlot);
         return 0;
        }
//...
//функция подсчета объема
double getAllVolume()
     {
      int itotal=PositionsTotal();
      ulong uticket=-1;
      double dVolume=0;

      for(int i=itotal-1;i>=0;i--)
        {
         if(!(uticket=PositionGetTicket(i))) continue;

         if(PositionGetString(POSITION_SYMBOL)==m_symbol.Name())
            dVolume+=PositionGetDouble(POSITION_VOLUME);
        }

      itotal=OrdersTotal();

      for(int i=itotal-1;i>=0;i--)
        {
         if(!(uticket=OrderGetTicket(i))) continue;

         if(OrderGetString(ORDER_SYMBOL)==m_symbol.Name())
            dVolume+=OrderGetDouble(ORDER_VOLUME_CURRENT);
        }

      return dVolume;
     }
O produto então passou nos controles com sucesso.
 
Alexandr Gavrilin:

Resolvido.

O produto foi então testado com sucesso.

:)

 

A propósito, observe em seus cálculos queSYMBOL_VOLUME_LIMIT pode ser "0,0".

Para não ficar preso no cheque:

if(check_volume > SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT))
   return;
 
Vladimir Karputov:

A propósito, note queSYMBOL_VOLUME_LIMIT pode ser ajustado para "0.0".

Para não ficar preso no cheque:

Sobre esta mensagem, algo está errado:venda instantânea falhada 3,30 EURUSD a 1,14380 [ Limite devolume atingido].

Eu tinha uma conta de compensação e não tinha limite ou ordens pendentes. Todos os cheques estavam presentes.

Agora eu verifiqueiSYMBOL_VOLUME_LIMIT, independentemente de haver ou não um pedido aberto, ele sempre retorna 0. Eu sempre tenho uma posição (já que sou do tipo rede) e esta mensagem só aparece quando eu aumento meu lote e só quando eu faço um loop automático.

 
Petros Shatakhtsyan:

Sobre esta mensagem, algo está errado:venda instantânea falhada 3,30 EURUSD a 1,14380 [ Limite devolume atingido].

Eu tinha uma conta de compensação e não tinha limite ou ordens pendentes. Todos os cheques estavam presentes.

Agora eu verifiqueiSYMBOL_VOLUME_LIMIT, independentemente de haver ou não um pedido aberto, ele sempre retorna 0. Eu sempre tenho uma posição (já que eu sou do tipo netting) e esta mensagem aparece somente quando eu aumento meu lote e somente durante a autovalidação.

Se você trabalha em algum servidor, isso não significa que todos os servidores ao redor têm as mesmas configurações :) .

 
Vladimir Karputov:

Se você trabalha em um determinado servidor, isso não significa que todos os servidores ao redor tenham as mesmas configurações :) .

E assim eu verifico em diferentes servidores, cerca de 5-6, onde há diferentes tipos de execução. Aqui neste post o tipo de execução é Instantânea.

Mas isso não é o principal. A autovalidação dá poucas informações, e dificulta a busca de um erro. E há sempre uma maneira de contornar isso.

 
Ontem eu passei pela Autovalidação na atualização. Na MT5 com meio pau, mas a MT4 passou quase a noite inteira com todos os pedidos não atendidos. Eu estava farto, voltei para a plataforma depois de algumas horas. Fiquei entediado e voltei depois de algumas horas. Às vezes o problema não é com o consultor especializado, mas com o serviço.