Marché : pas d'opérations de trading

 

Quelqu'un peut-il expliquer pourquoi le marché renvoie cette erreur ? Tous les contrôles de l'EA sont en place...

Je comprends bien sûr l'essentiel - il n'y a pas de commerce, mais quelle en est la raison ?

Ограничения и проверки в экспертах
Ограничения и проверки в экспертах
  • www.mql5.com
При создании алгоритма для автоматической торговли необходимо не только уметь обрабатывать цены с целью выработки торговых сигналов, но и зачастую требуется получать множество вспомогательной информации об ограничениях, накладываемых на работу эксперта.  В этой статье будет рассказано о том как: получить информацию о торговых сессиях...
 
  • Par exemple - le lot de négociation dans les paramètres = 0, l'EA ne peut pas ouvrir une transaction parce que le lot = 0 .
  • Limitation du spread dans l'Expert Advisor, ne permet pas d'ouvrir des positions.
  • Il n'y a pas vraiment de signaux pour ouvrir des positions pendant la période de test.

Et les contrôles que vous voyez seulement, votre code n'est pas attaché.

Exemples par milliers....

 
Vladislav Andruschenko:
  • Par exemple - le lot de négociation dans les paramètres = 0, l'EA ne peut pas ouvrir une transaction parce que le lot = 0 .
  • Limitation du spread dans l'Expert Advisor, ne permet pas d'ouvrir des positions.
  • Il n'y a pas vraiment de signaux pour ouvrir des positions pendant la période de test.

Et les contrôles que vous voyez seulement, votre code n'est pas attaché.

Exemples par milliers....

Les contrôles du Lot correct sont là, les signaux sont bien là - c'est un netminder, pas de limites de diffusion...
 
Vladislav Andruschenko:
  • Par exemple - le lot de négociation dans les paramètres = 0, l'EA ne peut pas ouvrir une transaction parce que le lot = 0 .
  • Limitation du spread dans l'Expert Advisor, ne permet pas d'ouvrir des positions.
  • Il n'y a pas vraiment de signaux pour ouvrir des positions pendant la période de test.

Et les contrôles que vous voyez seulement, votre code n'est pas attaché.

Exemples par milliers....

Les contrôles du Lot correct sont là, les signaux sont bien là - c'est un netminder, pas de limites de diffusion... Je ne comprends rien...
 
Maksim Neimerik:
La validation du lot est là, les signaux sont bien là - c'est un netminder, pas de limitation de diffusion...

alors il y a 100500 options de plus.

le nettoyeur passe tranquillement le test du marché.

 
Vladislav Andruschenko:

alors il y a 100500 options de plus.

le nettoyeur passe tranquillement le test du marché.

D'accord, mais pas celui-là :)
 
Maksim Neimerik:
Je suis d'accord, mais pour une raison quelconque, pas celui-là :)


Il est interdit de discuter ici des bots du marché. Et vous ne le publierez pas dans le domaine public. Et il y a déjà 100500 sujets avec ce nom, ainsi que les raisons d'un tel sujet.

 
Maksim Neimerik:

Quelqu'un peut-il expliquer pourquoi le marché renvoie cette erreur ? Tous les contrôles de l'EA sont en place...

Je comprends bien sûr l'essentiel - pas de commerce, mais pour quelle raison ?

Est-il si difficile d'utiliser la recherche de site et de créer 100500 copies de branche !

https://www.mql5.com/ru/search#!keyword=no%20trading%20operations&method=2&module=mql5_module_forum

Поиск - MQL5.community
Поиск - MQL5.community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 

Je veux juste discuter du code :

double CheckVolumeValue(double volume)
{
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
   {
      Print("Volume is less than the minimum");
      return(min_volume);
   }

   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
   {
      Print("Volume is greater than the maximum");
      return(max_volume);
   }

   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
   {
      Print("Wrong lot size");
      return(min_volume);
   }
     
   if(volume<MarketInfo(Symbol(),MODE_MINLOT))
   {
      Print("Trade stop invalid lot size");
      Comment("Trade stop invalid lot size"); 
      return(MarketInfo(Symbol(),MODE_MINLOT));
   }
   return(volume);
}

J'ai modifié le contrôle standard pour qu'il renvoie le bon lot au lieu d'une erreur...

Nous appelons cette fonction ici :

   if(!OrderSend(Symbol(),cmd,CheckVolumeValue(Lot),NormalizeDouble(priceStep,Digits()),Slippage,0,0,"",magic,0))

Dans mon testeur et sur mon compte réel, ce robot fonctionne parfaitement ! Même lorsqu'un lot erroné est saisi, il renvoie toujours le lot correct et travaille encore...

Et vous savez où revient l'erreur 4051 ! C'est en général... !

 
Maksim Neimerik:

Je veux juste discuter du code :

J'ai modifié la vérification standard pour qu'elle renvoie le bon lot au lieu d'une erreur...

Nous appelons cette fonction ici :

Dans mon testeur et sur mon compte réel, ce robot fonctionne parfaitement ! Même lorsqu'un lot erroné est saisi, il renvoie toujours le lot correct et travaille encore...

Et vous savez où revient l'erreur 4051 ! C'est en général... !

Lot n'est-il pas normalisé ?
 
Maksim Neimerik:

Je veux juste discuter du code :

J'ai modifié le contrôle standard pour qu'il renvoie le bon lot au lieu d'une erreur...

Nous appelons cette fonction ici :

Dans mon testeur et sur mon compte réel, ce robot fonctionne parfaitement ! Même lorsqu'un lot erroné est saisi, il renvoie toujours le lot correct et travaille encore...

Et vous savez où revient l'erreur 4051 ! C'est en général... !

double CheckVolumeValue(double volume)
{
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
   {
      Print("Volume is less than the minimum");
      return(min_volume);
   }

   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
   {
      Print("Volume is greater than the maximum");
      return(max_volume);
   }

   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
   {
      Print("Wrong lot size");
      return(min_volume);
   }
     
   if(volume<MarketInfo(Symbol(),MODE_MINLOT))
   {
      Print("Trade stop invalid lot size");
      Comment("Trade stop invalid lot size"); 
      return(MarketInfo(Symbol(),MODE_MINLOT));
   }
   return(volume);
}
Et il n'arrivera jamais à ce point
Raison: