MQL5 : Validation :-( Je me suis déjà creusé la tête pour savoir de quoi il s'agit et comment on le résout. - page 2

 
Alexandr Gavrilin:

D'autres messages sur le manque de marge sont à venir.

J'ai essayé comme décrit dans l'erreur de faire la somme de tous les lots pour l'instrument dans une direction donnée, en tenant compte des ordres en attente et de ne pas donner d'ordre d'ouverture, en cas de dépassement en tenant compte de l'ordre d'ouverture, en vain.

L'erreur est la même, mes messages de débogage ne sont pas affichés dans le journal du rapport pendant la validation Je ne sais pas comment attraper et déboguer cette erreur ou comment émuler cette erreur dans mon terminal.

Erreur.

 
Alexandr Gavrilin:

....

L'erreur est la même, mes messages de débogage n'apparaissent pas dans les journaux de rapport pendant la validation. Je ne sais pas comment attraper et déboguer le traitement de cette erreur ou comment simuler cette erreur dans mon terminal...

Essayez d'ouvrir une position avec un volume très important. Voyez si votre EA détectera cette erreur ou non.

 
Alexandr Gavrilin:

D'autres messages sur le manque de marge sont à venir.

J'ai essayé comme décrit dans l'erreur de faire la somme de tous les lots pour l'instrument dans une direction donnée, en tenant compte des ordres en attente et de ne pas donner d'ordre d'ouverture, en cas de dépassement en tenant compte de l'ordre d'ouverture, en vain.

L'erreur est la même, mes messages de débogage ne sont pas affichés dans le journal de rapport pendant la validation. Je ne sais pas comment attraper et déboguer cette erreur ou comment simuler cette erreur dans mon terminal.

Vous pouvez vérifier le niveau de marge. Disons que si elle est inférieure à 5000%, aucune transaction ne sera exécutée.

 
Vladimir Karputov:

Erreur.

Résolu.

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

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;
     }
Le produit a ensuite passé les contrôles avec succès.
 
Alexandr Gavrilin:

Résolu.

Le produit a ensuite été testé avec succès.

:)

 

À propos, notez queSYMBOL_VOLUME_LIMIT peut être réglé sur "0.0".

Pour ne pas être pris dans le contrôle :

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

Au fait, notez dans vos calculs queSYMBOL_VOLUME_LIMIT peut être "0.0".

Afin de ne pas être pris dans le contrôle :

A propos de ce message, quelque chose ne va pas :échec de la vente instantanée de 3.30 EURUSD à 1.14380 [ limite devolume atteinte].

J'avais un compte de compensation et aucun ordre limite ou en attente. Tous les contrôles étaient présents.

Maintenant, j'ai vérifiéSYMBOL_VOLUME_LIMIT, indépendamment du fait qu'il y ait un ordre ouvert ou non, il renvoie toujours 0. J'ai toujours une position (puisque je suis de type netting) et ce message n'apparaît que lorsque j'augmente mon lot et uniquement lorsque je suis en autovalidation.

 
Petros Shatakhtsyan:

A propos de ce message, quelque chose ne va pas :échec de la vente instantanée de 3.30 EURUSD à 1.14380 [ limite devolume atteinte].

J'avais un compte de compensation et aucun ordre limite ou en attente. Tous les contrôles étaient présents.

Maintenant, j'ai vérifiéSYMBOL_VOLUME_LIMIT, indépendamment du fait qu'il y ait un ordre ouvert ou non, il renvoie toujours 0. J'ai toujours une position (puisque je suis de type netting) et ce message n'apparaît que lorsque j'augmente mon lot et que je suis en autotrading.

Si vous travaillez sur un serveur, cela ne signifie pas que tous les serveurs autour ont les mêmes paramètres :) .

 
Vladimir Karputov:

Si vous travaillez sur un certain serveur, cela ne signifie pas que tous les serveurs autour ont les mêmes paramètres :) .

Et donc je vérifie sur différents serveurs, environ 5-6, où il y a différents types d'exécution. Ici, sur ce poste, le type d'exécution est Instantané.

Mais ce n'est pas l'essentiel. L'autovalidation donne peu d'informations, et il est difficile de trouver une erreur. Et il y a toujours un moyen de le contourner.

 
Hier, j'ai procédé à l'autovalidation de la mise à jour. Sur MT5 avec une demi-pointe, mais MT4 a passé presque toute la soirée avec tous les ordres non pris. J'en ai eu assez, je suis retourné sur la plate-forme après quelques heures. Je m'en suis lassé et en quelques heures je l'ai utilisé sans problème. Parfois, le problème ne vient pas du conseiller expert mais du service.