Voir comment télécharger gratuitement des robots de trading
Retrouvez-nous sur Telegram !
Rejoignez notre page de fans
Un script intéressant ?
Poster un lien vers celui-ci -
laisser les autres l'évaluer
Vous avez aimé le script ? Essayez-le dans le terminal MetaTrader 5
Vues:
49
Note:
(3)
Publié:
\MQL5\Include\Tools\Custom\ \MQL5\Expert\Test\DateTimeMsc\
MQL5 Freelance Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance

Lorsque j'ai récemment commencé à tester intensivement le fonctionnement de CopyTicksRange(), je me suis heurté à quelques problèmes gênants lors de la manipulation des durées en millisecondes :

  1. Je voulais en fait utiliser CDateTime, car il est dérivé de MqlTimeStruct et on peut très facilement manipuler les différentes unités de temps grâce aux méthodes d'incrémentation et de décrémentation qu'il contient.
  2. En même temps, j'avais besoin d'une possibilité de traduire les temps en millisecondes (secondes depuis le 01/01/1970 fois 1000 au format ulong) dans un sens et dans l'autre sans problème.

Je me suis heurté à la difficulté suivante : le nombre de millisecondes, par exemple, est un nombre très obscur qui ne donne pas beaucoup d'informations sur la date exacte. En revanche, si l'on utilise CDateTime ou TimeStruct, toutes les unités de temps peuvent être facilement modifiées, mais elles sont séparées par le format et le résultat est également très peu clair. C'est en essayant de résoudre ce problème que cette classe CDateTimeMsc a vu le jour.

#include <Tools\DateTime.mqh>

struct CDateTimeMsc: public CDateTime
  {
public:
   int               msc;               // additional variable for msc storage
   datetime          check_datetime;    // pour une observation pratique, il est nécessaire d'avoir un peu d'avance.

   //--- Méthodes CDateTimeMsc

   ulong             MscTime(void) {return(ulong(double(CDateTime::DateTime()) * 1000) + msc);}
   void              MscTime(ulong a_msc_time);  // entrée (datetime*1000)
   void              Msc(int value);
   //bool IsNumInt(const int num) ;
   void              MscDec(int delta = 1);
   void              MscInc(int delta = 1);
   void              SecTime(int a_int_time);
   ulong             SecTime(void);
   void              UpdateDateTime();   // met à jour la variable d'observation check_datetime
   void              DateTime(datetime a_datetime) {CDateTime::DateTime(a_datetime); UpdateDateTime();}
   datetime          DateTime(void) {return(CDateTime::DateTime());}

  };

Les nouvelles méthodes ont été insérées sous l'héritage de l'ancienne structure.

Désormais, la classe, qui est en fait une structure (voir Structures/Classes), peut également travailler avec des millisecondes, pour autant que de telles durées précises soient disponibles.

En outre, les méthodes d'incrémentation et de décrémentation ont été étendues à la propriété msc.

On pourrait maintenant se demander si la variable supplémentaire "check_datetime" est vraiment nécessaire, car elle crée un certain overhead (pour certaines personnes, c'est très important). Cependant, je suis parti du principe que la plupart du temps, on n'utilise pas beaucoup d'objets CDateTime, mais seulement quelques-uns aux endroits importants où il s'agit de modifier des unités de temps comme les heures, les minutes, les secondes ou les jours. J'avais également quelques doutes sur la méthode UpDateTime(), qui est appelée de manière superflue à chaque incrément/décrément.

Dans l'ensemble, le facteur de manipulation était toutefois au premier plan.


Le test
Il n'est plus nécessaire de demander l'heure avec une variable datetime supplémentaire si l'on veut connaître la date exacte, mais on peut simplement mettre la variable "check_datetime" sous surveillance : (TestEA voir ci-dessus).


obs2

Le temps en millisecondes a été automatiquement traduit au format datetime.


Traduit de l’allemand par MetaQuotes Ltd.
Code original : https://www.mql5.com/de/code/48156

Triple performance intrajournalière Triple performance intrajournalière

Définissez trois croisements et surveillez le pourcentage quotidien de performance à partir d'un moment donné (qui peut également être défini).

Le ZigZag parfait Le ZigZag parfait

Zigzag ultrarapide selon le principe le plus simple possible. Pas de sommets pendants. Avec prise en charge de la recherche de sommets optimisée en fonction du temps.

La version du conseiller de Jolly Roger La version du conseiller de Jolly Roger

Basé sur le participant Pirat à l'Automated Trading Championship 2011.

Triangle Hedge Triangle Hedge

Ouvre une position de couverture virtuelle dans MetaTrader 5.