La grande et terrible MT4 pour toujours (ou comment organiser une transition) - page 19

 
fxsaber:

Les termes MT4 et MT5 sont les mêmes.

Pendant tant d'années, tout le monde a connu le marigot, en venant... Dormir. Parce que c'est TRÈS compliqué. Les développeurs ne connaissent pas ou n'ont pas commenté un grand nombre des fonctionnalités de l'API de négociation qui ont été évoquées sur le forum.


Personne ne critique MT5. Je vous ai montré à l'aide d'exemples certains problèmes qui se posent lors de la résolution des tâches de base.

Pourquoi sont-ils les mêmes ? Vous n'avez toujours pas répondu à ma question.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Le grand et l'horrible MT4 Forever (ou comment déterminer efficacement une stratégie de migration)

Alexey Viktorov, 2021.05.09 09:15

... Et si je me connecte à mon compte depuis un autre ordinateur et que je passe quelques ordres ... qu'est-ce que MQL4 ouvrira ?

Personne ne critique MT5. J'ai montré quelques problèmes de résolution de problèmes élémentaires avec des exemples.

Il vous suffit de traiter correctement le résultat de la fonction OrderSend() et vous ne pouvez pas échapper à la simplicité de mql4. Vous avez votre propre objectif, attraper des microsecondes, pas faire du commerce... Un DT a des problèmes et vous faites passer ces problèmes pour des bugs de MT. Montrez le renversement de position sur le compte MQ et les développeurs y prêteront attention. J'ai exécuté votre code sur la démo de Robo et je n'ai pas vu de retour en arrière.

Certains de vos rapports de bogue sont vraiment dignes de respect, mais d'autres... désolé, une telle absurdité, je suis sans voix.

C'est tout... Joyeux Jour de la Victoire. La paix. Le travail. Mai.

 
Alexey Viktorov:

Pourquoi sont-ils les mêmes ? Vous n'avez toujours pas répondu à la question.

Une fois encore, les conditions sont les mêmes pour MT4/5. Vous devez avoir 100 positions ouvertes dans un compte vide à la fin de l'exécution du script. Il est permis de fermer certaines positions dans n'importe quel terminal pendant l'exécution du script. Cette "intervention" n'est nécessaire que pour éviter les décisions stupides.

for (int i = 0; i < 100; i += OrderSend(Request, Result))
  ;

Le résultat de la fonction OrderSend() doit être traité correctement, mais vous ne pouvez pas échapper à la simplicité de mql4. Vous avez votre propre objectif, attraper des microsecondes, pas faire du commerce... Une dtz a des problèmes et vous faites passer ces problèmes pour des bugs de MT. Montrez le renversement de position sur le compte MQ et les développeurs y prêteront attention. J'ai exécuté votre code sur la démo de Robo et je n'ai pas vu de retour en arrière.

Certains de vos rapports de bogue sont vraiment dignes de respect, mais d'autres... désolé, une telle absurdité, ça manque de mots décents.

Ce n'est pas parce que vous ne remarquez pas les problèmes qu'il n'y en a pas. La démo MQ est un endroit répugnant, en termes de débogage. Il existe un type d'exécution où OrderSend renvoie vrai pour les ordres au marché uniquement lorsqu'une position est ouverte. En réalité, il n'y a rien de tel sur les comptes ECN. true - l'ordre de marché est accepté. Il est important de surveiller ce qui se passe ensuite. Seuls les DC de cuisine utilisent un schéma d'exécution différent (comme dans MQ-Demo).

C'est tout... Joyeux Jour de la Victoire. La paix. Le travail. Mai.

De même.

 
fxsaber:

Je dois écrire un script sur un MT5 qui ouvre 100 positions sur un compte vide.


Sur MT4, je l'ai résolu de cette façon.

void OnStart()
{
  while (OrdersTotal() < 100)
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0);
    
  Print(OrdersTotal());
}

Qui a une solution sur MT5 ?

J'ai reçu le code le plus court que j'ai jamais écrit sur MT5 :

MqlTradeRequest BuyRequest = {0};
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   static bool run = false;
   if(run) return;
   BuyRequest.action = TRADE_ACTION_DEAL;
   BuyRequest.type = ORDER_TYPE_BUY;
   BuyRequest.symbol = _Symbol;
   BuyRequest.volume = 0.1;
   BuyRequest.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   BuyRequest.type_filling = GetFilling();
   MqlTradeResult result;
   run = OrderSend(BuyRequest, result);
}
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
{
   MqlTradeResult result;
   while(PositionsTotal() < 10 &&
         SymbolInfoDouble(_Symbol, SYMBOL_ASK, BuyRequest.price) &&
         OrderSend(BuyRequest, result))
   {}
}
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING GetFilling(const uint Type = ORDER_FILLING_FOK)
{
   const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = (ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE);
   const int FillingMode = (int)::SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);

   return((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN) || ((FillingMode & (Type + 1)) != Type + 1)) ?
          (((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)) ?
           ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK)) :
          (ENUM_ORDER_TYPE_FILLING)Type);
}
//+------------------------------------------------------------------+

sansGetFilling() - ne fonctionne pas sur les crypto ((()

Mais même avec ce code, 11 positions ont été ouvertes :


 
Igor Makanu:

le code le plus court que j'ai pu écrire sur MT5 :

Je pourrais faire SB pour la brièveté.

Mais même dans ce code, j'ai 11 positions ouvertes :

Parce que la logique du code est la suivante .

 
fxsaber:

Vous pouvez utiliser SB pour la brièveté

Parce que la logique du code est la suivante .

le problème n'est pas résolu avec PositionsTotal() même comme cela :

void OnTrade()
{
   if(PositionsTotal() >= 10) return;
   MqlTradeResult result;
   BuyRequest.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   OrderSend(BuyRequest, result);
}

il s'ouvre quand il y a 10 positions, quand il y a même 13

la seule façon de le résoudre est de mémoriser l'ordre de ticket à partir du résultat de MqlTradeResult et d'attendre l'apparition d'une position ouverte ; le nombre spécifié de positions sera alors ouvert.

 
Igor Makanu:

PositionsTotal() n'est pas résolu même de cette façon :

il s'ouvre quand il y a 10 positions, quand il y a même 13

il n'y a pas d'autre choix que de se souvenir de l'ordre du ticket à partir du résultat de MqlTradeResult et d'attendre l'apparition d'une position ouverte, puis le nombre spécifié de positions sera ouvert à coup sûr.

Alors attendez ! !! Parce que mql4 attend, et vous ne lui en voulez pas. Et dans MQL5, vous avez décidé que vous pouvez simplement envoyer une requête et supposer qu'elle doit être exécutée.............

 
Igor Makanu:

PositionsTotal() n'est pas résolu même de cette façon :

il s'ouvre quand il y a 10 positions, quand il y a même 13

il n'y a pas grand-chose à faire, si ce n'est mémoriser le ticket d'ordre à partir du résultat de MqlTradeResult et attendre l'ouverture des positions ; ensuite, le nombre spécifié de positions sera ouvert à coup sûr.

Veuillez noter qu'il ne s'agit pas d'un script/service mais d'une EA. Mais même avec un EA, il faudrait beaucoup d'efforts pour résoudre une tâche aussi simple à deux lignes.

 
Alexey Viktorov:

Alors attendez ! !! Après tout, le mql4 attend et vous ne lui en voulez pas. Et dans MQL5, vous avez décidé que vous pouvez simplement envoyer une requête et supposer qu'elle doit être exécutée.............

Plusieurs personnes ont déclaré ici qu'il n'y avait pas de difficultés. Cependant, ils n'ont pas apporté de solution.

 
fxsaber:

Plusieurs personnes ont exprimé ici qu'il n'y a pas de difficultés. Cependant, ils n'ont pas apporté de solution.

Je n'en fournirai pas non plus, pour la raison la plus simple. Je ne veux pas enseigner aux ...codeurs (pas vous), mais si nécessaire, je résoudrai le problème sans trop réfléchir. Et tout cela pour la même raison : depuis longtemps, des codes apparaissent dans CodeBase exclusivement à partir de Tumblr. Tous les autres sont silencieux...

 
Alexey Viktorov:

Je ne fournirai ni l'un ni l'autre, pour la raison la plus simple. Je ne veux pas enseigner aux ...codeurs (cela ne vous concerne pas), mais si nécessaire, je résoudrai le problème sans trop réfléchir. Et tout cela pour la même raison : depuis longtemps, les codes arrivent sur CodeBase exclusivement depuis Tumblr. Tous les autres sont silencieux...

Parler avec sa langue n'est pas comme parler avec un sac. Tu devrais m'apprendre. Moi, s'il vous plaît.

Il y a un problème, et ce n'est pas seulement chez ce courtier.
Et le problème n'est pas d'attendre l'exécution d'un ordre spécifique (c'est un autre problème), mais le fait que lorsque l'ordre est exécuté, il disparaît temporairement de toutes les listes (ouvert, fermé, transactions, positions).

Nous pourrions utiliser une autre béquille, bien sûr. Mais nous voulons trouver une solution humaine. Et c'est ce à quoi fxsaber travaille publiquement, en écoutant les aboiements des sympathisants qui passent par là.

Raison: