Rejoignez notre page de fans
- Vues:
- 49
- Note:
- Publié:
-
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 :
- 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.
- 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).
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
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
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
Basé sur le participant Pirat à l'Automated Trading Championship 2011.
Triangle Hedge
Ouvre une position de couverture virtuelle dans MetaTrader 5.
