MQL5: Validazione :-( Mi sono già scervellato per scoprire cos'è e come si risolve. - pagina 2

 
Alexandr Gavrilin:

Stanno arrivando altri messaggi sulla carenza di margini.

Ho provato come descritto nell'errore a sommare tutti i lotti per lo strumento in una data direzione, tenendo conto degli ordini pendenti e non dare un comando di apertura, se superato tenendo conto dell'ordine aperto, senza risultato.

L'errore è lo stesso, i miei messaggi di debug non vengono visualizzati nel log del report durante la convalida Non so come catturare e fare il debug di questo errore o come emulare questo errore nel mio terminale

Errore.

 
Alexandr Gavrilin:

....

L'errore è lo stesso, i miei messaggi di debug non appaiono nei log del report durante la validazione Non so come posso catturare e fare il debug della gestione di questo o come simulare questo errore nel mio terminale...

Prova ad aprire una posizione con un volume molto grande. Vedi se il tuo EA cattura questo errore o no.

 
Alexandr Gavrilin:

Altri messaggi sulla carenza di margini stanno arrivando.

Ho provato come descritto nell'errore a sommare tutti i lotti per lo strumento in una data direzione, tenendo conto degli ordini pendenti e non dare un comando di apertura, se superato tenendo conto dell'ordine aperto, senza risultato.

L'errore è lo stesso, i miei messaggi di debug non vengono visualizzati nel log del rapporto durante la convalida Non so come catturare ed eseguire il debug di questo errore o come simulare questo errore nel mio terminale.

Potete controllare Margin Level. Diciamo che se è inferiore al 5000% allora non verrà eseguito alcun trade.

 
Vladimir Karputov:

Errore.

Risolto.

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

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;
     }
Il prodotto ha poi superato i controlli con successo.
 
Alexandr Gavrilin:

Risolto.

Il prodotto è stato poi testato con successo.

:)

 

A proposito, notate cheSYMBOL_VOLUME_LIMIT può essere impostato a "0.0".

Per non essere presi nel controllo:

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

Oh, a proposito, notate nei vostri calcoli cheSYMBOL_VOLUME_LIMIT può essere "0.0".

Per non farsi prendere dal controllo:

A proposito di questo messaggio, qualcosa non va:fallita vendita istantanea di 3.30 EURUSD a 1.14380 [ Limite divolume raggiunto].

Avevo un conto netting e nessun ordine limite o pendente. Tutti gli assegni erano presenti.

Ora ho controllatoSYMBOL_VOLUME_LIMIT, indipendentemente dal fatto che ci sia un ordine aperto o meno, restituisce sempre 0. Ho sempre una posizione (dato che sono un tipo netting) e questo messaggio appare solo quando aumento il mio lotto e solo quando sto autovalidando.

 
Petros Shatakhtsyan:

A proposito di questo messaggio, qualcosa non va:fallita vendita istantanea di 3.30 EURUSD a 1.14380 [ Limite divolume raggiunto].

Avevo un conto netting e nessun ordine limite o pendente. Tutti gli assegni erano presenti.

Ora ho controllatoSYMBOL_VOLUME_LIMIT, indipendentemente dal fatto che ci sia un ordine aperto o meno, restituisce sempre 0. Ho sempre una posizione (dato che sono un tipo netting) e questo messaggio appare solo quando aumento il mio lotto e solo quando faccio autotrading.

Se si lavora su qualche server, non significa che tutti i server in giro abbiano le stesse impostazioni :) .

 
Vladimir Karputov:

Se si lavora su un certo server, non significa che tutti i server in giro abbiano le stesse impostazioni :) .

E così controllo su diversi server, circa 5-6, dove ci sono diversi tipi di esecuzione. Qui su questo post il tipo di esecuzione è Instant.

Ma non è questa la cosa principale. L'autovalidazione dà poche informazioni e rende difficile trovare un errore. E c'è sempre un modo per aggirarlo.

 
Ieri sono passato attraverso l'autovalidazione sull'aggiornamento. Su MT5 con un mezzo colpetto, ma MT4 ha passato quasi tutta la serata con tutti gli ordini non presi. Ne avevo abbastanza, sono tornato alla piattaforma dopo un paio d'ore. Mi sono stancato e in un paio d'ore l'ho usato senza alcun problema. A volte il problema non è con l'Expert Advisor ma con il servizio.