Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Facebook!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Bibliotheken

CDatetimeMsc - Bibliothek für den MetaTrader 5

Ansichten:
178
Rating:
(2)
Veröffentlicht:
2024.02.13 18:19
\MQL5\Include\Tools\Custom\ \MQL5\Expert\Test\DateTimeMsc\
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Als ich neulich begann, die Funktionsweise von CopyTicksRange() intensiv zu testen, stieß ich bei der Handhabung von Millisekunden-Zeiten auf ein paar ungünstige Probleme:

  1. Ich wollte eigentlich CDateTime verwenden, da diese von MqlTimeStruct abgeleitet ist und man die verschiedenen Zeiteinheiten sehr einfach durch die enthaltenen Inkrement- und Dekrement- Methoden bearbeiten kann.
  2. Gleichzeitig benötigte ich eine Möglichkeit, Millisekunden-Zeiten (Sekunden seit 01.01.1970 mal 1000 im ulong Format) reibungslos hin und her zu übersetzen.

Hierbei stieß ich auf die Schwierigkeit, dass beispielsweise die Millisekundenzahl eine sehr unanschauliche Zahl ist, die einem nicht sehr viel über das genaue Datum verrät. Verwendet man jedoch CDateTime oder TimeStruct, sind sämtliche Zeiteinheiten zwar leicht zu verändern, doch durch das Format auseinandergerissen und das Ergebnis ist ebenfalls sehr unanschaulich. Auf dem Weg zur Lösung dieses Problems entstand diese CDateTimeMsc - Klasse.

#include <Tools\DateTime.mqh>

struct CDateTimeMsc: public CDateTime
  {
public:
   int               msc;               // additional variable for msc storage
   datetime          check_datetime;    // for convenient observation a little overhead is required.

   //--- CDateTimeMsc methods

   ulong             MscTime(void) {return(ulong(double(CDateTime::DateTime()) * 1000) + msc);}
   void              MscTime(ulong a_msc_time);  // input (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();   // updates the observation variable check_datetime
   void              DateTime(datetime a_datetime) {CDateTime::DateTime(a_datetime); UpdateDateTime();}
   datetime          DateTime(void) {return(CDateTime::DateTime());}

  };

Die neuen Methoden wurden unter der Vererbung der alten Struktur eingefügt.

Nun kann die Klasse, welche eigentlich eine Struktur ist (siehe Strukturen/Klassen) auch mit Millisekunden arbeiten, sofern solche genauen Zeiten zur Verfügung stehen.

Desweiteren wurden die Inkrement- und Dekrementmethoden auf die msc-Eigenschaft ausgedehnt.

Man könnte nun darüber streiten, ob die zusätzliche Variable "check_datetime" wirklich notwendig ist, da sie einen gewissen Overhead erzeugt (für manche Leute ist das sehr entscheidend). Jedoch bin ich davon ausgegangen, dass meist nicht sehr viele CDateTime-Objekte verwendet werden, sondern nur ein paar an den wichtigen Stellen, wo es darum geht, Zeiteinheiten wie Stunden, Minuten, Sekunden oder Tage zu verändern. Ebenfalls hatte ich ein paar Zweifel bei der Methode UpDateTime(), die überflüssigerweise bei jedem Inkrement/Dekrement aufgerufen wird.

Alles in Allem stand jedoch der Handlingfaktor im Vordergrund.


Der Test
Man muss nun nicht mehr extra die Zeit mit einer zusätzlichen datetime-Variablen abfragen, wenn man das genaue Datum wissen will, sondern kann einfach die variable "check_datetime" unter Aufsicht stellen: (TestEA s. oben)


obs2

Die Millisekunden-Zeit wurde automatisch in das datetime-Format übersetzt.


Indices Tester Indices Tester

Der EA tradet nur Buy - Positionen und setzt kein Sl und TP ein.

MQL5 Programming for Traders – Quellcodes aus dem Buch. Teil 7 MQL5 Programming for Traders – Quellcodes aus dem Buch. Teil 7

Der abschließende siebte Teil des Buches befasst sich mit den erweiterten Möglichkeiten der MQL5-API, die bei der Entwicklung von Programmen für MetaTrader 5 nützlich sind. Dazu gehören nutzerdefinierte Finanzsymbole, integrierte wirtschaftliche Kalenderereignisse und allgemeine Technologien wie Netzwerke, Datenbanken und Kryptografie.

Stochastic Momentum Color Candles Stochastic Momentum Color Candles

Idee von Andrey F. Zelinsky, nach einem Indikator von William Blau

Beispiele aus dem Buch „Neuronale Netze für den algorithmischen Handel mit MQL5“ Beispiele aus dem Buch „Neuronale Netze für den algorithmischen Handel mit MQL5“

Das Buch „Neuronale Netze im algorithmischen Handel mit MQL5“ ist ein umfassender Leitfaden, der sowohl die theoretischen Grundlagen der künstlichen Intelligenz und der neuronalen Netze als auch die praktischen Aspekte ihrer Anwendung im Finanzhandel unter Verwendung der Programmiersprache MQL5 behandelt.