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

 
PapaYozh:
Non.
Le résultat n'est pas garanti.

S'il y a assez de pennies, c'est garanti.

 
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.


Qui a une solution sur MT5 ?

Une performance partielle est-elle possible ?
 
SanAlex:

S'il y a assez de centimes, c'est garanti.

Vous n'avez pas tenu compte des performances partielles, et lorsque vous le ferez, vous devrez également tenir compte du double comptage.

 
Alexey Viktorov:
L'exécution partielle est-elle possible ?

Supposons qu'il n'y ait pas d'exécution partielle. Toutefois, pendant que le script est en cours d'exécution, quelqu'un peut cliquer accidentellement sur la croix dans le tableau des positions, fermant ainsi une ou plusieurs des positions. Cependant, il devrait toujours y avoir exactement 100 positions à la fin de l'exécution du script.


Lavariante MT4 est incroyablement simple. C'est pourquoi j'ai écrit dans ce fil.

 
fxsaber:

Qui a une solution sur MT5 ?

Il n'y a pas de solution sans synchroniseur.

Il peut y avoir des requêtes élémentaires ou une perte de connectivité dans le processus, 100 commandes ne donneront pas toujours 100 transactions.

 
Andrey Khatimlianskii:

Il n'y a pas de solution sans synchroniseur.

Il peut y avoir des requêtes élémentaires ou une perte de communication dans le processus, 100 commandes ne se traduiront pas toujours par 100 transactions.

Le synchroniseur s'assurera seulement que les valeurs PositionsTotal et OrdersTotal ne se confondent pas. C'est précisément parce qu'ils mentent dans le temps que nous obtenons les doubles comptes.

En principe, le synchroniseur est une ligne unique. Et si vous ne vous penchez pas sur son mécanisme, la mise en œuvre est simple.


Cependant, même avec le synchroniseur, tout est extrêmement compliqué. Vous pouvez utiliser une telle condition :

while (OrdersTotal() + PositionsTotal < 100)

Cependant, cette condition sera un échec total si quelqu'un fait ce qui suit.

fxsaber:

Supposons qu'il n'y ait pas d'exécution partielle. Cependant, pendant que le script est en cours d'exécution, quelqu'un peut cliquer accidentellement sur une croix dans le tableau des positions, fermant ainsi une ou plusieurs d'entre elles. Cependant, à la fin de l'exécution du script, il devrait toujours y avoir exactement 100 positions.


C'est-à-dire qu'une tâche élémentaire, qui est résolue en deux lignes dans MT4, n'est pas facilement résolue dans MT5. C'est pourquoi le style MT4+Synchronizer prévaut dans MT5. Pour cette raison, je ne comprends pas bien comment d'autres EA peuvent être écrits dans MT5, qui sont si nombreux sur le marché.

 
fxsaber:

Le synchronisateur s'assurera seulement que les valeurs PositionsTotal et OrdersTotal ne se confondent pas. C'est précisément parce qu'elles sont temporairement fausses qu'elles donnent lieu à des doubles entrées.

En principe, le synchroniseur est une ligne unique. Et si vous ne vous penchez pas sur son mécanisme, la mise en œuvre est simple.


Cependant, même avec le synchroniseur, tout est extrêmement compliqué. Vous pouvez utiliser une telle condition :

Cependant, cette condition sera un échec total si quelqu'un fait ce qui suit.


C'est-à-dire qu'un problème élémentaire, qui se résout en deux lignes dans MT4, ne se résout pas facilement dans MT5. C'est pourquoi le style MT4+Synchronizer prévaut dans MT5. Pour cette raison, je ne comprends pas comment d'autres EA peuvent être écrits dans MT5, qui sont si nombreux sur le marché.

Dans MT5, tout est résolu de la même manière que dans MT4 et est souvent beaucoup plus facile, car le langage et l'API sont beaucoup plus riches. Plus précisément, les langues sont presque les mêmes, Metacquotes ayant fait un excellent travail de compatibilité, mais les API sont très différentes. Renat (directeur de Metakvotes) a déclaré un jour sur des forums que MT4 est mort et ne sera pas développé. Mais apparemment, les intérêts commerciaux étaient plus importants et les mises à jour sortent néanmoins. Mais il s'agit surtout de corrections de bugs et de nouvelles fonctionnalités de MKL 5. Donc les développeurs bien faits, j'enlève mon chapeau, ce que je ne fais pas.))

Et en général, je ne comprends pas les gémissements de certains camarades, comme difficile de passer à MKL5. Il n'y a pas de complications, enfin une autre API, donc il y a des sources détaillées, je préfère apprendre d'elles. Ceux qui n'ont pas encore assez de connaissances sont les bienvenus pour aider, c'est bref mais clair. En tout cas, le cinquième est plus rapide que le quatrième au moins 10 fois, et dans le mode d'optimisation en général utilise tous les cœurs du CPU que vous avez autorisé et avec une carte vidéo moderne bat le quatrième dans des centaines de fois. Donc pas besoin d'écrire des chansons tristes. ))

 
Andrei Trukhanovich:

vous n'avez pas pris en compte les performances partielles, et lorsque vous le faites, vous devez prendre en compte le dépassement également

et ce n'est pas bien non plus ? - Bien que je ne comprenne pas ce que quelqu'un attende de cette fonction - mais elle fait son travail à 100 % ! !!

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits = 3;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots   = 0.01; // Lots
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double sl=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   for(uint i=0; i<maxLimits; i++)
     {
      //--- open position
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
//---
   for(uint i=0; i<maxLimits; i++)
     {
      //--- open position
      if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      //if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
 
fxsaber:

Supposons qu'il n'y ait pas d'exécution partielle. Cependant, pendant que le script est en cours d'exécution, quelqu'un peut cliquer accidentellement sur la croix dans le tableau des positions, fermant ainsi une ou plusieurs des positions. Cependant, il devrait toujours y avoir exactement 100 positions à la fin de l'exécution du script.


La version MT4 est incroyablement simple. C'est pourquoi j'ai écrit dans ce fil.

Ainsi, pour MQL5, vous fixez des conditions telles que quelqu'un peut jouer autour, alors que pour MQL4 vous ne le faites pas ? Et si je me connecte au compte depuis un autre ordinateur et que je place quelques pips... qu'est-ce que MQL4 va ouvrir ?

Vous voulez vous planter sans aucun contrôle ? Prônez-vous la permissivité dans la programmation, ou essayez-vous simplement de calomnier MQL5 pour les intérêts égoïstes de quelqu'un ?

Écrire la même chose en mql4 avec des vérifications et des contrôles infaillibles.

 
Alexey Viktorov:

Ainsi, pour MQL5, vous définissez des conditions telles que quelqu'un peut s'y perdre, mais pas pour MQL4 ? Et si je me connecte à mon compte depuis un autre ordinateur et que je place quelques pips... qu'est-ce que MQL4 va ouvrir ?

Les termes et conditions de MT4 et MT5 sont les mêmes.

Voulez-vous vous tromper sans faire de contrôle ? Prônez-vous la permissivité dans la programmation, ou essayez-vous simplement de dénigrer MQL5 pour les intérêts égoïstes de quelqu'un ?

Si vous ne savez pas comment faire, vous devrez montrer les mêmes problèmes avec mql4 avec des contrôles et des protections contre la fraude.

Je fais tout sur MT5 uniquement. Je dis simplement que MT5 n'est pas plus compliqué que MT4. C'est BEAUCOUP plus compliqué que ça ! Il n'y a que cette semaine qu'il existe une solution d'inversion de position, et elle ne fonctionne pas à 100%.

Pendant tant d'années, tout le monde a connu le backtesting, pour en arriver à... Dormir. Parce que c'est TRÈS compliqué. De nombreuses particularités de l'API de négociation, qui ont été soulevées sur le forum, les développeurs ne sont pas au courant, ou n'ont pas donné leurs commentaires.


Personne ne critique MT5. J'ai montré par des exemples quelques difficultés à résoudre des problèmes élémentaires.

Raison: