und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5
- Ansichten:
- 682
- Rating:
- Veröffentlicht:
- 2024.02.13 18:19
-
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:
- 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.
- 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)
Die Millisekunden-Zeit wurde automatisch in das datetime-Format übersetzt.

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

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.

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

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.