Validateur automatique - problèmes

 

J'essaie de mettre à jour la version de l'EA et j'obtiens une erreur.

Le même EA est dans le testeur de stratégie.


J'écris également des EAs pour MT4 en même temps, tout est OK là-bas. Le code pour les EAs 4 et 5 est le même, la seule différence est le fichier include (ils sont différents pour 4 et 5).

La dernière fois que j'ai mis à jour cette EA, c'était en janvier et tout était OK.

Version du logiciel - MetaTrader 5 x64 build 2025 démarré (MetaQuotes Software Corp.)

- Terminal Windows 10 (build 14393) x64, IE 11, UAC, Intel Celeron N2815 @ 1.86GHz, Mémoire : 1866 / 3967 Mb, Disque : 5 / 35 Gb, GMT+3

 
Uladzimir Kirychenka:

J'essaie de mettre à jour la version de l'EA et je reçois une erreur.

Le même EA est dans le testeur de stratégie.


J'écris également des EAs pour MT4 en même temps, tout est OK là-bas. Le code pour les EAs 4 et 5 est le même, la seule différence est le fichier include (ils sont différents pour 4 et 5).

La dernière fois que j'ai mis à jour cette EA, c'était en janvier et tout était OK.

Version du logiciel - MetaTrader 5 x64 build 2025 démarré (MetaQuotes Software Corp.)

- Terminal Windows 10 (build 14393) x64, IE 11, UAC, Intel Celeron N2815 @ 1.86GHz, Mémoire : 1866 / 3967 Mb, Disque : 5 / 35 Gb, GMT+3

Faites semblant d'être un idiot et faites un dépôt de 1 dollar ou un lot de 100500 et voyez s'il y aura des transactions. Et y aura-t-il des alertes que seul un idiot définirait de tels paramètres.

 
Alexey Viktorov:

Faites semblant d'être un idiot et faites un dépôt de 1$ ou un lot de 100500 et vérifiez s'il y aura des transactions. Et s'il y aura des alertes indiquant que seul un idiot peut définir de tels paramètres.

Le même problème. J'ai essayé - ça ne sert à rien). Impossible de mettre à jour depuis le 13 avril. Si je vérifie tout et n'importe quoi - je n'obtiens qu'une seule inscription sur tous les symboles "trehe are no trading operations". Si je ne vérifie pas tout, je reçois une erreur - pas assez d'équité pour ouvrir la position. La version pour MT4, ainsi que pour l'auteur TS a été mise à jour sans aucun problème.

123

Je vois dans l'image que le lot minimum est de 2000, le solde est de 10000 et il n'y a manifestement pas assez d'argent pour ouvrir une position. Je ne passe pas le contrôle de toute façon.

Que faire dans de tels cas ?

 

Bien sûr, il n'y aura pas d'accord. Et que sont censées être les alertes ? J'ai seulement dans OnInit si la taille du lot n'est pas dans la gamme SYMBOL_VOLUME_MIN et SYMBOL_VOLUME_MAX, alors l'erreur d'initialisation INIT_PARAMETERS_INCORRECT.

 
Uladzimir Kirychenka:

Bien sûr, il n'y aura pas d'accord. Et que sont censées être les alertes ? J'ai seulement dans OnInit si la taille du lot n'est pas dans la gamme SYMBOL_VOLUME_MIN et SYMBOL_VOLUME_MAX, alors l'erreur d'initialisation INIT_PARAMETERS_INCORRECT.

Je me souviens que j'avais à peu près la même chose à l'époque avec les modérateurs qui vérifiaient après l'auto-vérification. En cas de paramètres incorrects, OnInit se termine également par le code INIT_PARAMETERS_INCORRECT. Et la vérification automatique a généré la même erreur, à savoir qu'il n'y avait pas d'opération commerciale. Le modérateur m'a donc conseillé de ne pas terminer OnInit() avec ce code, mais d'émettre une alerte.

 

Probablement une fois par mois, quelqu'un en parle. Ça fait un moment que ça dure.

Le fait est que lors des transactions (dans la vie réelle), non seulement la taille du solde peut changer, mais aussi la taille du lot.

Et pendant les tests, la taille du dépôt (de 1 à 10000000) ou du lot (de 1000000 à 0,01) peut varier.

Par conséquent, ces contrôles doivent être effectués non seulement une fois à OnInit, mais en permanence, dans la boucle (par exemple, dans OnTick).

Pour éviter le débordement du journal, il est nécessaire d'émettre l'avertissement(Imprimer le message ou Alerte) une seule fois.

 
Uladzimir Kirychenka:

Bien sûr, il n'y aura pas d'accord. Et que sont censées être les alertes ? J'ai seulement dans OnInit si la taille du lot n'est pas dans la gamme SYMBOL_VOLUME_MIN et SYMBOL_VOLUME_MAX, alors l'erreur d'initialisation INIT_PARAMETERS_INCORRECT.

Je comprends qu'il est très difficile de faire semblant d'être un idiot, mais cette compétence aide parfois. Essayez encore. Vous définissez un EA, avec 1 $ sur votre compte, définissez un lot de 100500 et attendez... Vous attendez un jour, un deuxième, un troisième... puis vous commencez à vous en vouloir, "Pour quoi ai-je payé ? Pourquoi cette merde ne marche pas ?" et personne ne dit rien, personne ne veut dire quelque chose comme "Tu es un idiot... Vous ne pouvez pas travailler sur le marché du Forex avec un tel dépôt. Seul un idiot mettrait un lot de 100500"... C'est comme ça.

 
Petros Shatakhtsyan:

Probablement une fois par mois, quelqu'un en parle. Ça fait un moment que ça dure.

Le fait est que lors des transactions (dans la vie réelle), non seulement la taille du solde peut changer, mais aussi la taille du lot.

Et pendant les tests, la taille du dépôt (de 1 à 10000000) ou du lot (de 1000000 à 0,01) peut varier.

Par conséquent, ces contrôles doivent être effectués non seulement une fois à OnInit, mais en permanence, dans la boucle (par exemple, dans OnTick).

L'avertissement (Imprimer le message ou l'alerte) ne doit être imprimé qu'une seule fois pour éviter le débordement du journal.

Même un code très simple ne peut pas passer la validation. Elle semble satisfaire aux conditions que vous mentionnez.

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);
  }
avec un chèque d'argent - il n'y a pas d'opérations commerciales, sans chèque - pas assez d'argent
 
Petros Shatakhtsyan:

Probablement une fois par mois, quelqu'un en parle. Ça fait un moment que ça dure.

Le fait est que lors des transactions (dans la vie réelle), non seulement la taille du solde peut changer, mais aussi la taille du lot.

Et pendant les tests, la taille du dépôt (de 1 à 10000000) ou du lot (de 1000000 à 0,01) peut varier.

Par conséquent, ces contrôles doivent être effectués non seulement une fois à OnInit, mais en permanence, dans la boucle (par exemple, dans OnTick).

L'avertissement (Imprimer le message ou Alerte) ne doit être émis qu'une seule fois pour éviter le débordement du journal.

Ces contrôles (LotMin, LotMax, LotNormalizeStep, check balance, OrderCheck) sont effectués à chaque fois qu'une position est ouverte. Et la vérification du lot seulement dans OnInit. Je ne connais pas la logique de la vérification du solde dans OnInit.

PS : L'alerte ne me sauve pas des erreurs du validateur ((((((((((

 
Uladzimir Kirychenka:

Ces contrôles (LotMin, LotMax, LotNormalizeStep, check balance, OrderCheck) sont effectués à chaque fois qu'une position est ouverte. Et onInit ne vérifie que le lot. Je ne connais pas la logique de la vérification du solde dans OnInit.

PS : L'alerte ne sauve pas des erreurs du validateur ((((((((((

Le validateur n'a pas d'erreur :)

Le validateur montre juste que dans le code fourni

  • il n'y a pas de contrôles à part entière
  • il n'y a pas de gestion des erreurs
Le validateur montre que le soi-disant rédacteur du code ne s'est jamais mis à la place de l'utilisateur.

 
Vladimir Karputov:

Le validateur n'a pas d'erreurs :)

Le validateur montre juste que le code fourni

  • il n'y a pas de contrôles à part entière
  • Il n'y a pas de gestion des erreurs
Le validateur montre que le soi-disant auteur du code ne s'est jamais mis à la place de l'utilisateur.

))