MQL5 Tutorial - Automatisch traden mit Metatrader5

MQL5 Tutorial - Automatisch traden mit Metatrader5

By MQL5 Tutorial - Automatisch traden mit Metatrader5BusinessInvesting
Download on the App Store

MQL5 Tutorial - Automatisch traden mit Metatrader5 episodes

  • MQL5 TUTORIAL GRUNDLAGEN – 60 SIMPLE DYNAMISCHE SELL POSITIONSGROESSE
    In diesem Video wollen wir uns einmal anschauen, wie man die Positionsgröße für Sell Positionen anhand der Equity hier oben dynamisch berechnet. Aktuell sehen wir hier eine Positionsgröße von 0,98 Lot. Wenn wir das hier einmal beschleunigen und sich die Equity ändert, dann sehen wir, dass auch die Positionsgröße neu berechnet wird. Und wir wollen uns in diesem kurzen Video einmal anschauen, wie man so etwas programmieren kann. Um das zu tun, klicken Sie im Metaeditor bitte auf dieses kleine Symbol hier oben oder drücken Sie die F4 Taste. Das ruft dann hier den Metaeditor auf. Und hier klicken wir auf Datei, Neue Datei, Expert Advisor aus Vorlage, Weiter. Ich vergebe hier einmal den Namen SimpleDynamischeSellPositionsgröße, klicke auf Weiter, Weiter und Fertigstellen. Jetzt kann alles oberhalb dieser OnTick Funktion hier gelöscht werden. Und wir entfernen auch die zwei Kommentarzeilen. Wir starten mit einer include Anweisung. Die wird uns die Datei Trade.mqh importieren. Diese Datei ist Bestandteil von MQL5. Und sie ermöglicht uns eine Instanz von der Klasse CTrade zu erstellen. Die bekommt den Namen trade. Und wir werden sie gleich verwenden, um damit eine Position zu eröffnen. Innerhalb der OnTick Funktion berechnen wir zunächst den Bid Preis. Das übernimmt die Funktion SymbolInfoDouble für das aktuelle Währungspaar auf dem Chart. Wir übergeben hier als Parameter SIMBOL_BID, alles in Großbuchstaben. Und mit der Funktion NormalizeDouble und _Digits stellen wir sicher, dass wir die richtige Anzahl von Nachkommastellen berechnen. Denn, je nach Währungspaar können das entweder drei oder fünf Nachkommastellen sein. Und diese Zeile hier übernimmt das für uns. Danach möchte ich gerne die Equity berechnen. Das geht mit der Funktion AccountInfoDouble. Hier übergeben wir als Parameter ACCOUNT_EQUITY, auch alles in Großbuchstaben bitte. Die Equity ist das Netto-Guthaben. Jetzt wiederholen wir das Ganze noch einmal für die Balance, also das Brutto-Guthaben. Die einzigen Unterschiede sind der Variablenname und, dass wir diesmal als Parameter ACCOUNT_BALANCE angeben. Kommen wir zur Berechnung der eigentlichen Positionsgröße. Die möchte ich errechnen, indem ich die Equity, also das Netto-Guthaben nehme und durch 100.000 teile. Damit wir hinterher keine Probleme beim Absenden von Position haben, nutzen wir hier noch NormalizeDouble und Komma zwei, um die errechnete Positionsgröße auf zwei Nachkommastellen zu kürzen. Als Einstiegskonditionen für dieses einfache Beispiel prüfen wir mal, ob die Equity zumindest gleich groß oder größer ist, als die Balance. Und als zweites Kriterium prüfen wir den Rückgabewert für PositionsTotal. Wenn der null ist, dann bedeutet das, dass wir keine offenen Positionen haben. Und dann nutzen wir trade.Sell, um mit unserer dynamisch berechneten Positionsgröße hier eine Sell Position zu eröffnen. Zum Schluss nutzen wir hier noch den Comment Befehl, um eine Ausgabe auf dem Chart zu erzeugen. Dort werden uns die Balance, die Equity und die Positionsgröße, gefolgt von den ermittelten Werten angezeigt. Und das war es im Großen und Ganzen auch schon. Wenn Sie nicht verstehen, was diese Code-Zeilen hier bewirken sollen oder, wenn Ihnen das alles zu schnell war, dann möchten Sie sich vielleicht zunächst die anderen Videos aus dieser Grundlagenserie noch einmal anschauen. Oder vielleicht ist auch der Premiumkurs interessant für Sie. Tatsächlich war dieses Video eine Idee eines Mitglieds aus dem Premiumkurs. Falls Sie also schon einen Premiumkurs Mitglied sind und eine Idee für so ein Video haben, dann melden Sie sich einfach bei mir. Für den Moment klicken wir hier mal auf Kompilieren oder drücken die F7 Taste. Das hat bei mir hier ohne Fehler und Warnungen funktioniert. Und in dem Fall können wir hier oben klicken oder die F4 Taste drücken, um in den Metatrader zurückzukehren. Und im Metatrader klicken auf Ansicht, Strategietester oder drücken die Tastenkombination Ctrl+R. Bitte wählen Sie hier die neu erstellte Datei S...
    7 min
  • MQL5 TUTORIAL GRUNDLAGEN – 59 SIMPLE BENUTZERDEFINIERTE KAUFSPANNE
    In diesem Video wollen wir uns einmal anschauen, wie man einen individuellen Bereich anlegen kann. In dem ein Expert Advisor kaufen darf. In diesem Fall geht es um den EUR, USD. Unser oberes Limit ist bei 1.16. Das untere Limit liegt bei 1.14. Und wir wollen uns jetzt einmal anschauen wie man so etwas in MQL5 programmieren kann. Um das zu tun klicken Sie im Metatrader auf dieses kleine Symbol oder drücken die F4-Taste. Das ruft dann hier den Metaeditor auf und hier klicken wir auf Datei, neue Datei, Expert Advisor aus Vorlage, weiter. Ich vergebe hier mal den Namen SimpleKaufspanne. Klicke auf weiter, weiter und fertigstellen. Jetzt kann alles oberhalb dieser OnTick-Funktion gelöscht werden. Und auch die beiden Kommentarzeilen werden entfernt. Wir starten mit einem include-Befehl. Damit importieren wir uns die Inhalte der Datei Trade.mqh. Danach erstellen wir uns eine Instanz von der Klasse CTrade. Die bekommt den Namen trade und wir werden die später nutzen, um eine Position zu eröffnen. Zunächst definieren wir hier einmal eine Benutzervariable. Die kann vom Benutzer im Strategietester angepasst werden, ohne dass man da etwas fest programmieren müsste. Diese Variable ist für das obere Limit. Bekommt den Namen UpperLimit. Der Zusatz input sorgt dafür, dass der Benutzer während der Laufzeit des Programmes, also im Betrieb mit dem Strategietester, den Wert für diese Variable anpassen kann. Der Initialwert hier ist 10. Und es handelt sich um eine Variable vom Typ double, damit hier auch Fließkommazahlen verarbeiten kann. Das Ganze wiederholen wir jetzt nochmal für unser unteres Limit. Und außerdem legen wir hier eine globale Variable für den Ask-Preis fest. Der Grund dafür ist einfach. Wir werden den Ask-Preis sowohl in der OnTick-Funktion als auch in einer benutzerdefinierten Funktion benötigen. Im ersten Schritt berechnen wir den Ask-Preis in der OnTick-Funktion. Das übernimmt die Funktion SymbolInfoDouble für das aktuelle Währungspaar auf dem Chart. Wir nutzen SYMBOL_ASK und mit NormalizeDouble und _Digits stellen wir sicher, dass auch die richtige Anzahl von Nachkommastellen für das jeweilige Währungspaar berechnet werden. Danach prüfen wir ob uns die Funktion PositionsTotal den Wert 0 zurückliefert. Das wäre der Fall, wenn wir keine geöffnete Position haben. Anschließend möchten wir gerne abfragen, ob der Preis sich in dem erlaubten Bereich bewegt. Dazu nutzen wir eine benutzerdefinierte Funktion. Die wird uns den Wert true oder false zurückgeben. Und wenn unsere Abfrage positiv ist, dann nutzen wir hier trade.Buy, um einen Position in der Größe von 10 Microlot zu kaufen. Am Ende der OnTick-Funktion hätte ich gerne noch eine Chartausgabe. Das übernimmt hier der Comment-Befehl. Der wird uns das obere und das untere Limit anzeigen, so wie den Ask-Preis und ob sich der Preis im gewünschten Preisbereich befindet. Damit das Ganze funktioniert müssen wir diese Funktion hier noch erstellen. Die Funktion wird bool, also einen binären Wert zurückliefern. True steht in diesem Fall für wahr. False steht für falsch. Man könnte aber auch die Zahlen 1 oder 0 verwenden. Zunächst einmal definieren wir eine boolesche Variable, die diesen Rückgabewert aufnimmt. In diesem Fall heißt sie ReturnValue. Und sie bekommt von uns zunächst einen negativen Rückgabewert zugewiesen. Danach prüfen wir, ob sich der Ask-Preis im erlaubten Preisbereich befindet. Das wäre der Fall, wenn der Ask-Preis kleiner ist als unser oberes Limit, aber größer als das untere Limit. Und wenn das zutrifft, dann setzen wir den Wert für unsere Rückgabevariable auf wahr. Zum Schluss nutzen wir den return-Befehl, um unsere Rückgabevariable an das Hauptmodul zurückzugeben. Das war´s im Großen und Ganzen. Falls Sie nicht verstehen, was diese Codezeilen hier bewirken sollen oder Falls Ihnen das Alles zu schnell war, dann möchten Sie sich vielleicht zunächst eines der anderen Videos aus unserer Grundlagenserie anschauen. Oder vielleicht ist auch der Premiumkurs auf unserer Webse...
    8 min
  • MQL5 TUTORIAL GRUNDLAGEN – 58 DYNAMISCHE BUY POSITIONSGRÖSSE
    In diesem Video wollen wir einmal herausfinden, wie man die Positionsgröße dynamisch berechnen kann. In diesem Fall geht´s um Buy-Positionen. Und die Positionsgröße wird hier anhand der Equity berechnet. Also lassen Sie uns einmal schauen, wie man so etwas in MQL5 programmieren kann. Um das zu tun klicken Sie im Metatrader bitte hier oben auf dieses kleine Symbol oder drücken Sie die F4-Taste. Das ruft dann hier den Metaeditor auf und hier klicken wir auf Datei, neue Datei, Expert Advisor aus Vorlage, weiter. Ich vergebe hier einmal den Namen SimpleDynamischeBuyPositionsgroesse, klicke auf weiter, weiter und fertigstellen. Jetzt kann alles oberhalb dieser OnTick-Funktion hier gelöscht werden und wir entfernen auch die zwei Kommentarzeilen. Wir starten hier oben mit einer include-Funktion und importieren uns die Inhalte der Datei trade.mqh. Die werden benötigt, um vereinfachte Positionseröffnungen zu nutzen. Dazu erstellen wir uns zunächst einmal eine Instanz von der Klasse CTrade. Die bekommt den Namen trade und wir werden sie später zur Eröffnung unserer Kaufposition nutzen. In der OnTick-Funktion selbst starten wir damit, dass wir zunächst den ASK-Preis berechnen. Das übernimmt die Funktion SymbolInfoDouble, für das aktuelle Symbol, also das Währungspaar auf dem Chart. Wir nutzen hier SYMBOL_ASK da wir den ASK-Preis ermitteln möchten. Und mit NormalizeDouble und _Digits stellen wir sicher, dass wir die richtige Anzahl von Nachkommastellen berechnen. Das kann nämlich je nach Währungspaar etwas unterschiedlich ausfallen. Im nächsten Schritt ermitteln wir die Equity. Die Equity ist das Nettoguthaben, also das was unseren Kontostand nach Abzug aller Kosten ausmacht. Die Equity wird berechnet mit der Funktion AccountInfoDouble und als Parameter übergeben wir hier ACCOUNT_EQUITY. Bitte alles in Großbuchstaben. Außerdem möchte ich gerne die Balance, also das Bruttoguthaben berechnen. Die Ermittlung ist ähnlich. Auch hier nutzen wir AccountInfoDouble, aber diesmal übergeben wir als Parameter ACCOUNT_BALANCE. Kommen wir zur eigentlichen Berechnung der Positionsgröße. Auch das ist eine double-Variable, da wir Nachkommastellen benötigen. Die Variable hat den Namen PositionSize. Wir nutzen hier NormalizeDouble, denn wenn wir die Equity als Grundlage nehmen und die Positionsgröße gleich der Equity durch 100.000 sein soll, dann würden wir zu viele Nachkommastellen erhalten. Und mit NormalizeDouble kürzen wir die Anzahl der Nachkommastellen hier auf zwei. Wenn man das nicht tut, dann erhält man bei der Eröffnung von Positionen eine Fehlermeldung, dass die Positionsgröße ungültig ist. Und das lässt sich über diese Formatierung hier vermeiden. Wir möchten gerne Positionen eröffnen sofern unser Nettoguthaben größer oder gleich dem Bruttoguthaben ist. Packen wir noch einen Kommentar dazu. Und als zweites Einstiegskriterium möchte ich gerne wissen, ob der Rückgabewert der Funktion PositionsTotal den Wert 0 hat. Das bedeutet wir hätten keine geöffneten Positionen. Und sofern beide Bedingungen wahr sind, nutzen wir trade.Buy, um für die dynamische Positionsgröße die wir hier oben errechnet haben, eine Kauf-Position zu eröffnen. Zum Schluss erstellen wir uns hier noch eine Chartausgabe. Das übernimmt der Comment-Befehl. Der soll uns das Bruttoguthaben, das Nettoguthaben und die ermittelte dynamische Positionsgröße auf dem Chart anzeigen. Bitte nicht hier die letzte Klammer vergessen. Und wenn Sie so weit sind, dann können Sie jetzt hier oben auf kompilieren klicken oder die F7-Taste drücken. Bei mir hat das ohne Fehler funktioniert. Wenn Sie nicht verstehen, was diese Code-Zeilen hier bewirken wollen oder wenn Ihnen das zu schnell ging, dann möchten Sie sich vielleicht die anderen Videos aus dieser Grundlagenserie noch einmal anschauen. Vielleicht ist auch der Premiumkurs auf unserer Webseite interessant für Sie. Andernfalls, wenn sie beim Kompiliervorgang keine Fehler erhalten haben, dann klicken Sie hier oben auf dieses kleine Symbol oder drü...
    7 min
  • MQL5 TUTORIAL GRUNDLAGEN – 57 SO ERSTELLEN SIE METAQUOTES DEMOKONTEN IM METATRADER
    In diesem Video wollen wir uns einmal anschauen, wie man so ein MetaQuotes original Demokonto erstellen kann. Diese konnten werden eigentlich bei der Erstinstallation vom Metatrader direkt mitgeliefert, aber von Zeit zu Zeit kann es sinnvoll sein, ein solches Konto neu zu erstellen. Und wir wollen uns jetzt einmal anschauen, wie man das direkt im Metatrader bewerkstelligen kann. Das hier ist eine Demoversion, die auf der Webseite algotradingsystem.de heruntergeladen werden kann. Sie ist kostenlos verfügbar. Funktioniert allerdings auch nur mit original MetaQuotes-Demokonten. Der Grund dafür ist ziemlich einfach. MetaQuotes ist der Hersteller von der Software, die wir hier benutzen. Der Metatrader ist also bereits für sie verfügbar. Und diese MetaQuotes-Demokonten können auch in jedem Land angelegt werden. Normalerweise nutze ich den Broker RoboForex. Auch der unterstützt hier einen Hebel von 1:500. Das wäre aber mit deutschen Brokern beispielsweise nicht möglich. Und da auch andere Konditionen abweichen können, macht es Sinn ein solches Demokonto, zumindest für den Vergleich von solchen Ergebnissen hier, zu installieren. Denn je nachdem welchen Broker Sie nutzen, könnte es zum Beispiel sein, dass Sie andere Konditionen, wie zum Beispiel Swap-Gebühren haben. Und so ein MetaQuotes-Demokonto liefert die gleichen historischen Daten für alle. Also lassen Sie uns einmal anschauen, wie man ein solches Konto direkt im Metatrader einrichten kann. Dazu klicken wir mit der rechten Maustaste auf Konten, Konto eröffnen. Hier sollten Sie bereits den Eintrag MetaQuotes Software Corporation finden. Andernfalls kann man den hier oben auch suchen. Wir möchten diesen Eintrag auswählen. Klicken hier auf weiter. Hier ist bereits vorselektiert, dass wir ein Demokonto für den Handel mit virtuellem Geld ohne Risiko eröffnen möchten. Die MetaQutes-Demokonten sind kostenlos. Für ein Echtgeldkonto müsste man hier einen zusätzlichen Identitätsnachweis erbringen. In der Regel ist das so was wie Bilder vom Personalausweis oder Abrechnungen. Uns reicht aber in diesem Fall das Demokonto aus. Wir klicken jetzt hier auf weiter. Ich muss jetzt hier noch meine Angaben überprüfen und ganz wichtig, bitte setzen Sie hier den Haken beim Hedging. Bis zum Jahr 2016 oder so war Metatrader 5 ursprünglich nur in der Lage einzelne Positionen mit dem sogenannten Netting-Mode zu handeln. Wenn man aber mehrere Positionen handeln möchte, wie wir das hier gerade tun, dann braucht man ein Hedging-Konto. Nicht alle Broker unterstützen das in ihren Demokonten. Erkennen kann man das daran, dass das Wort Hedge hier oben, in der Leiste von Metatrader, auftaucht. Wir entscheiden uns hier für ein MetaQuotes-Demokonto. Mit einer Standardeinzahlung von 100.000 Euro. Man könnte auch USD auswählen. Und es stehen auch ein paar andere Währungen zur Verfügung. Beim Hebel wähle ich hier 1:500 aus. Sowas ist mittlerweile bei deutschen Brokern nicht mehr drin. Durch die ESMA-Regulierung kann man nur noch solche kleinen Hebel hier traden. Und zum Schluss muss ich hier noch den Bedingungen zustimmen. Danach klicken wir auf weiter. Und hier werden uns auch schon die Zugangsdaten angezeigt. Irgendwas habe ich jetzt beim Hebel falsch gemacht, aber für dieses Beispielvideo soll uns das so reichen. Über diesen Link hier unten, kann man sich die Registrierungsdaten direkt in die Zwischenablage kopieren und dann später mit Word oder Notepad öffnen. Wir klicken jetzt hier unten auf Fertigstellen. Und zack ist unser neues Konto hier oben auch schon verfügbar. Wie man sieht habe ich hier einen Hebel von 1:100 gewählt. Meine anderen Konten hier haben hier 1:500. Und das wird übrigens von RoboForex auch für mein Echtgeldkonto unterstützt. Schauen wir aber mal hier ob unser MetaQuotes-Demokonto auch mit automatischen Handelssystemen funktioniert. Dazu gehen wir hier einmal auf die neue Webseite algotradingsystem.de. Klicken hier oben auf den Link für die Resultate.
    8 min
  • MQL5 TUTORIAL GRUNDLAGEN – 56 SIMPLER POSITION CLOSE TIMER
    In diesem Video wollen wir uns einmal anschauen, wie man Positionen nach einer bestimmten Zeit schließen kann. In unserem Fall haben wir hier zwei Testpositionen eröffnet. Wir sehen hier eine Lokalzeit. Wir sehen eine Eröffnungszeit für die Position. Und sobald eine Stunde rum ist, werden Positionen geschlossen, die im Minus sind. Wir haben hier schon ein paar Positionen eröffnet und geschlossen. Das Ganze war eine Anfrage von einem Kursmitglied aus dem Premiumkurs. Und wir wollen uns jetzt einmal anschauen, wie man so etwas in MQL5 programmieren kann. Um das zu tun, klicken Sie im Metatrader bitte auf dieses kleine Symbol hier oben oder drücken die F4 Taste. Das ruft dann hier den Metaeditor auf. Und hier klicken wir auf Datei, Neue Datei, Expert Advisor aus Vorlage, Weiter. Ich vergebe hier mal den Namen SimplerCloseTimer, klicke auf Weiter, Weiter und Fertigstellen. Jetzt kann alles oberhalb der OnTick Funktion hier gelöscht werden. Und wir entfernen auch die zwei Kommentarzeilen. Wir starten mit einem include Befehl für die Datei Trade.mqh. Danach erstellen wir uns eine Instanz mit dem Namen trade. Die benötigen wir gleich zur Eröffnung von Testpositionen. Dazu müssen wir zunächst den Ask-Preis und den Bid-Preis ermitteln. Das übernimmt für uns die Funktion SymbolInfoDouble. Wir nutzen SYMBOL_ASK beziehungsweise SYMBOL_BID. Und mit NormalizeDouble und _Digits formatieren wir das Ganze je nach Währungspaar. Denn manche Währungspaare haben drei und andere fünf Nachkommastellen. Danach möchten wir ermitteln, ob der Wert für die Funktion PositionsTotal gleich null ist. Denn dann haben wir keine Position geöffnet. Und in dem Fall nutzen wir trade.Buy beziehungsweise trade.Sell, um jeweils eine Testposition zu eröffnen. Das würde man natürlich nicht auf einem Echtgeldkonto machen. Aber um Positionen im Strategietester schließen zu können, muss ich Positionen zunächst eröffnen. In diesem Fall ohne besonderes Einstiegskriterium. Denn, wir möchten ja unsere Positionen nach einer Stunde schließen, wenn sie nicht im Profit sind. Dazu rufen wir eine Funktion CheckCloseTimer auf. Die gibt es aber noch nicht. Also müssen wir die jetzt noch programmieren. Die Funktion selbst hat keinen Rückgabewert. Darum nutzen wir hier void. Und wir nutzen eine for Schleife, um alle Positionen der Reihe nach durchzugehen. Für jede gefundene Position ermitteln wir die Ticket Nummer mit der Funktion PositionGetTicket. Danach ermitteln wir die Eröffnungszeit der Position. Das geht über die Funktion PositionGetInteger. Und als Parameter übergeben wir hier POSITION_TIME. Wenn man das markiert und die F1 Taste drückt, dann lernen wir, POSITION_TIME gibt uns die Eröffnungszeit der Position im datetime Format zurück. Und datetime unterstützt hier bestimmte Formatierungstypen. Grundsätzlich bekommen wir aber eine Sekundenanzahl seitdem 1. Januar 1970 zurück. Für Menschen ist das nicht besonders gut lesbar. Darum erstellen wir uns jetzt hier eine Struktur vom Typ MqlDateTime. Eine Struktur kann man sich als Zusammenschluss von logischen Elementen vorstellen. In unserem Fall gibt es alle diese Rückgabewerte hier. Und wir möchten gerne die Stunde haben, damit wir nach einer oder mehreren Stunden Positionen schließen können, die nicht in den Profit gelaufen sind. Erstellen wir uns also hier eine Struktur mit dem Namen MyOpenTime. Danach nutzen wir diese Funktion hier, um unsere Zeit in eine Struktur zu konvertieren. Denn das ermöglicht es uns, innerhalb dieser Struktur auf die Stunde zuzugreifen. Jetzt wiederholen wir das Ganze nochmal. Diesmal für die Lokalzeit. TimeLocal gibt uns die lokale Zeit des Computers zurück. Aber nicht vom Windows Betriebssystem, sondern vom Strategietester. Auch hier erstellen wir uns eine Struktur mit MqlDateTime, konvertieren das Ganze mit TimetoStruct und ermitteln die aktuelle Stunde, indem wir aus der Struktur den Wert Punkt Hour extrahieren. Danach berechnen wir die Differenz, indem wir von der aktuellen Stunde den Wert für die...
    9 min
  • MQL5 TUTORIAL GRUNDLAGEN – 55 SO ERMITTELN SIE DATUM ZEIT UND WOCHENTAG
    In diesem Video wollen uns einmal anschauen, wie man Uhrzeit, Datum und Wochentag berechnen kann. Das war eine Frage von einem Premium Kurs Mitglied. Also schauen wir uns einmal an, wie man so etwas in MQL5 ermittelt. Um das zu tun, klicken Sie bitte im Metatrader auf dieses kleine Symbol hier oben oder drücken die F4 Taste. Das ruft dann hier den Meta Editor auf. Und hier klicken wir auf Datei, Neue Datei, Expert Advisor aus Vorlage. Weiter. Ich vergebe hier mal den Namen SimpleDatumsBerechnung, klicke auf Weiter, Weiter und Fertigstellen. Jetzt kann alles oberhalb der OnTick Funktion hier entfernt werden. Und wir löschen auch die zwei Kommentarzeilen. MQL5 nutzt für die Darstellung von Datum und Zeit einen Datentyp, der nennt sich datetime. Und mit der Funktion TimeLocal können wir uns den aktuellen Wert holen. TimeLocal gibt die lokale Zeit des Computers zurück. In unserem Fall jetzt, aber nicht die Zeit aus meiner Windows Installation. Sondern die aktuelle Uhrzeit für den Backtest. Damit das Ganze lesbar wird, müssen wir die datetime Angabe noch etwas verändern. Denn wir bekommen lediglich die Sekundenanzahl, seit dem 1. Januar 1970 geliefert. Und um das für Menschen lesbarer zu machen, nutzen wir die Funktion TimeToString, um die Lokalzeit, die wir hier oben ermittelt haben, in einem bestimmten Format bereitzustellen. Dazu nutzen wir TIME_MINUTES. TIME_MINUTES wird uns die Stunden und Minuten zurückliefern. Wenn Sie es noch genauer brauchen, dann können Sie auch TIME_SECONDS verwenden. Dann hätten Sie eine Ausgabe von Stunden, Minuten und Sekunden. Das Ganze wiederholen wir jetzt noch einmal, denn wir möchten auch das Jahr und das Datum ausgeben. Auch hier nutzen wir TimeToString für die Lokalzeit. Aber diesmal den Parameter TIME_DATE. Der liefert uns eine vierstellige Jahreszahl, den Monat und den Tag. Die Frage des Premium Kurs Mitgliedes war aber eine andere. Und zwar ging es darum, herauszufinden, welcher Wochentag denn gerade ist. Wie man sieht, wird hier der Wochentag mit ausgegeben. Hier haben wir die Ausgabe, heute ist Dienstag. Und um das herauszufinden, muss man einen kleinen Umweg nehmen. Das ist etwas kniffliger. Dazu nutzen wir die Funktion MqlDateTime. Die enthält acht Felder mit unterschiedlichen Werten und dazu gehört auch der Tag. Und um den zu ermitteln nutzen wir zunächst die Funktion TimeToStruct für die Lokalzeit und übergeben hier als weiteren Parameter unsere Datumsstruktur. Danach können wir den Wochentag erhalten, indem wir innerhalb der Datumsstruktur auf den Wert day-of-week zugreifen. Wenn man das einmal löscht und den Punkt drückt, dann sieht man, es gäbe zum Beispiel auch day-of-year. Aber brauchen hier den Wochentag. Und der wird uns als Zahl zurückgeliefert. Es ist eine Ganzzahl vom Typ integer. Ich hätte das Ganze aber gerne lesbar. Darum erstelle ich mir hier eine Textvariable mit dem Namen Wochentag. Und je nachdem, welche Zahl wir zurückerhalten, ordnen wir hier den entsprechenden Wochentag zu. Der Sonntag hat in diesem Fall den Wert null. Aber wenn man sich das hier mal im Schnelldurchlauf anschaut, dann sehen wir, wir bekommen nur Daten bis Freitag geliefert, da der Markt am Wochenende geschlossen ist. Also eigentlich könnten wir uns diese beiden Abfragen hier schenken. Eine Besonderheit ist, dass die Woche von Sonntag an mit dem Wert null hochgezählt wird. In Deutschland wäre der Sonntag der siebte Tag der Woche. So weit, so gut. Brauchen wir noch eine Chart Ausgabe. Ich hätte gerne die Ausgabe: Das Datum ist, gefolgt von Jahr und Datum. In einer neuen Zeile möchte ich gerne den Text haben: heute ist, gefolgt von dem Wochentag. Und in Zeile drei hätte ich dann gern die ermittelte Uhrzeit. Das war es im Großen und Ganzen. Wenn Sie nicht verstehen, was diese Codezeilen hier bewirken sollen oder wenn Ihnen das zu schnell war, dann möchten Sie sich vielleicht zunächst die anderen Videos aus diesem Grundlagenkurs noch einmal anschauen. Oder vielleicht ist auch der Premiumkurs auf unser...
    7 min
  • MQL5 TUTORIAL GRUNDLAGEN – 53 SIMPLES FIBONACCI OBJEKT
    In diesem Video wollen wir uns einmal anschauen, wie man ein solches Fibonacci-Objekt hier in MQL5 programmieren kann. Das ist eine Anfrage von einem unserer Premiumkurs-Mitglieder. Darum schauen wir uns jetzt einmal an, wie man so etwas im Metatrader umsetzt. Um zu starten, klicken wir zunächst auf dieses kleine Symbol hier oben oder drücken die F4-Taste. Das ruft dann hier den Metaeditor auf und hier klicken wir auf Datei, neue Datei, Expert Advisor aus Vorlage, weiter. Ich vergebe hier einmal den Namen SimplesFibonacciObjekt, klicke auf weiter, weiter und fertigstellen. Jetzt kann alles oberhalb dieser OnTick-Funktion hier gelöscht werden und auch die zwei Kommentarzeilen werden entfernt. Zunächst erstellen wir uns hier Variablen für die höchste und die niedrigste Kerze. Die sind vom Typ Integer, denn es handelt sich nur um die Nummer der höchsten oder niedrigsten Kerze. Außerdem benötigen wir noch jeweils ein Array für die höchsten und niedrigsten Preise. Wir nutzen ArraySetAsSeries um das Array von der aktuellen Kerze an abwärts zu sortieren. Das Ganze wiederholen wir noch für uns Low-Array. Und jetzt möchte ich das High-Array für 100 Kerzen füllen. Das geht mit dem Befehl CopyHigh. Der kopiert die Höchstpreise für das aktuelle Währungspaar und die auf dem Chart ausgewählte Zeiteinheit, von der aktuellen Kerze 0 für 100 Kerzen und speichert die Werte in unserem High-Array. Jetzt machen wir das Ganze nochmal mit CopyLow und speichern die niedrigsten Preise in unserem Low-Array. Und mit der Funktion ArrayMaximum ermitteln wir jetzt die höchste Kerze. Dazu schauen wir in unserem High-Array, von der ersten bis zur letzten Kerze, alle Werte durch. Den gleichen Vorgang gibt´s nochmal mit ArrayMinium. Damit lässt sich die Niedrigste der 100 Kerzen berechnen. Jetzt nutzen wir MqlRates, um ein neues Array für die Preisdaten zu erzeugen. Auch das wird mit der Funktion ArraySetasSeries von der aktuellen Kerze an, abwärts sortiert. Mit der Funktion CopyRates füllen wir jetzt dieses Array mit Preisdaten für das aktuelle Währungspaar auf dem Chart und die dort ausgewählte Zeiteinheit. Und zwar für alle Kerzen auf dem Chart. Diese Preisdaten werden jetzt in unserem PriceInformation-Array gespeichert. Mittels ObjectDelete löschen wir alte Fibonacci-Objekte auf unserem Chart. Beim allerersten Aufruf wird es kein altes Objekt geben, aber ab dem zweiten Durchlauf wird damit das alte Fibonacci-Objekt entfernt und mit dem Befehl ObjectCreate erstellen wir dann ein neues Fibonacci-Objekt für das aktuelle Währungspaar auf dem Chart. Der Name des Objektes soll Fibonacci sein. Der Objekttyp ist OBJ_FIBO. Wenn man das einmal markiert und die F1-Taste drückt, dann sieht man, dass es hier jede Menge unterschiedliche Objekttypen hier gibt. Wir werden diesen Objekttyp hier benutzen. Das Objekt soll auf dem Hauptfenster mit den Kerzen erstellt werden. Für die Berechnung wird die linke Grenze die 100ste Kerze sein. Die rechte Begrenzung ist bei der aktuellen Kerze. Die Obergrenze ist die höchste Kerze aus unseren 100 Kerzen. Und die Untergrenze wird bei der niedrigsten Kerze der 100 Kerzen dargestellt. Und damit wir mit diesen Werten auch rechnen können, ermitteln wir jetzt noch ein paar Werte für unser Objekt. Die Datums- und Zeitangaben erhalten wir über ObjectGetInteger für ein Objekt auf dem Hauptchart mit dem Namen Fibonacci. Die sogenannte Propertie, also die Eigenschaft ist OBJPROP_TIME. Wenn wir das mal markieren und die F1-Taste drücken, dann sehen wir, dass es noch jede Menge andere Properties gibt. Die können von Objekt zu Objekt etwas unterschiedlich sein. Mit ObjectGetInteger können wir uns beispielsweise die Zeit und mit ObjectGetDouble können wir uns den Preis aus den Objekteigenschaften auslesen. Genau so ist es auch möglich Objekteigenschaften zu setzen. Das ginge mit ObjectSet. Damit könnten man beispielsweise die Farbe verändern. Wir wollen in diesem Beispiel einfach nur die Objekteigenschaften mit einem Comment-Befehl auf dem Char...
    8 min
  • MQL5 TUTORIAL GRUNDLAGEN – 52 SIMPLE EXTERNE KERZENANZAHL EA
    In diesem Video wollen wir uns einmal anschauen, wie man für einen gleitenden Durchschnitt, wie diesen hier, einen Expert Advisor programmieren kann, bei dem man die Anzahl der Kerzen ohne Veränderung im Quellcode über eine Benutzervariable verändern kann. Hier werden auch Einstiegssignale produziert. Dieser Expert Advisor macht das gerade aufgrund von 50 Kerzen für einen einfachen gleitenden Durchschnitt. Schauen wir uns also einmal an, wie man so etwas in MQL5 programmieren kann. Um das zu tun klicken Sie im Metatrader bitte auf dieses kleine Symbol hier oben oder drücken Sie die F4-Taste. Das ruft dann hier den Metaeditor auf und hier klicken wir auf Datei, neue Datei, Expert Advisor aus Vorlage, weiter. Ich vergebe hier mal den Namen SimpleExterneKerzenanzahl. Hänge noch ein EA dran. Klicke auf weiter, weiter und fertigstellen. Alles oberhalb dieser OnTick-Funktion hier kann gelöscht werden und wir entfernen auch die zwei Kommentarzeilen. Zunächst starten wir mit einem Include-Befehl. Damit importieren wir vereinfachte Handelsfunktionen aus der Datei trade.mqh. Die ist Bestandteil von MQL5. Im nächsten Schritt erstellen wir uns eine Instanz von der Klasse CTrade. Die brauchen wir später, um damit Positionen zu eröffnen und danach erstellen wir eine externe Variable für die Anzahl der Kerzen. Die bekommt hier vorne eine Ergänzung. Einen sogenannten Modifier-Input. Das bedeutet so viel wie externe Benutzereingabe. Die Variable soll Kerzenanzahl heißen und der Initialwert ist 1. Innerhalb der OnTick-Funktion müssen wir uns zunächst den Ask- und den Bid-Preis besorgen. Das geht mit der Funktion SymbolInfoDouble. Für das aktuelle Währungspaar auf dem Chart. Wir nutzen SYMBOL_ASK oder SYMBOL_BID um uns jeweils den Ask- oder den Bid-Preis zu holen. Und mit NormalizeDouble und _Digits sorgen wir dafür, dass auch je nach Währungspaar die richtige Anzahl von Nachkommastellen berechnet wird. Mit MqlRates erstellen wir uns jetzt ein Array für die Preisdaten. Das bekommt den Namen PriceInfo. Im nächsten Schritt nutzen wir ArraySetAsSeries um unser neu erstelltes Array von der aktuellen Kerze an abwärts zu sortieren. Und danach nutzen wir die Funktion CopyRates für das aktuelle Währungspaar auf dem Chart und das aktuell ausgewählte Zeitfenster, um uns von Kerze 0 bis Kerze 3 die Daten zu besorgen und in unserem PriceInfo-Array zu speichern. Das hier ist eigentlich die alte Darstellung. Man kann das durch _Symbol und _Period ersetzen. Denn wenn man das einmal markiert und die F1-Taste drückt, dann lernen wir, man kann das untereinander austauschen. Jetzt möchte ich gern noch eine Variable für unser Signal. Die ist vom Typ string, damit sie Textketten aufnehmen kann. Wir weisen hier aber zunächst noch keinen Wert zu, denn den möchten wir noch berechnen. Für unseren einfach gleitenden Durchschnitt brauchen wir noch ein Array. Das nenne wir hier myMovingAverageArray. Und um den Moving-Average, also den gleitenden Durchschnitt zu berechnen, gibt es die interne Funktion iMA. Die ist Bestandteil von MQL5 und benötigt hier eine Reihe von Parametern für die Berechnung. Der erste Parameter ist für das aktuelle Währungspaar. Der zweite Parameter steht für die aktuell ermittelte Zeiteinheit auf dem Chart. Hier ist die variable für die Kerzenanzahl, die wir selbst bestimmen können. Dieser Parameter hier könnte ein Verschiebung nach rechts oder links bewirken. Das brauchen wir in diesem Fall nicht, darum steht der Parameter auf 0. MODE_SMA steht für SimpleMovingAverage, also einfachen gleitenden Durchschnitt. MODE_EMA währe beispielsweise ein einfacher exponentieller Durchschnitt. Und der letzte Parameter hier PRICE_CLOSE steht für die Berechnung anhand der Schlusskurse. Um unser Array mit Daten zu füllen, nutzen wir CopyBuffer. Damit wird anhand der movingAverage-Definition, die wir oben getroffen haben, für Buffer 0, also für diese rote Signallinie vom gleitenden Durchschnitt, von der aktuellen Kerze an, für drei Kerzen,
    10 min
  • MQL5 TUTORIAL GRUNDLAGEN – 51 SO MACHT MAN EINEN MASSENTEST
    In diesem Video wollen wir uns einmal zufallsbasierte Einstiege in Verbindung mit Massentests anschauen und wir werden sehen, dass der Zufall tatsächlich auch eine Möglichkeit darstellt profitabel zu handeln. Zunächst einmal stoppen wir hier den Test. Wir nutzen in diesem Fall, diesen einfachen Beispiel, Expert Advisor mit dem Namen SimplerRandomEntryEA. Den haben wir im letzten Video erstellt und der erstellt in laufender Reihenfolge Kaufen- und Verkaufen-Signale basierend auf einem Zufallsgenerator. Das hier ist die entsprechende Datei. Die verfügt hier über einen Wert für die Eingabe. Der nennt sich Massentest. Und den haben wir im Quelltext als externe Variable definiert. So kann man die Variable auch im laufenden Betrieb verändern, ohne den Quellcode anpassen zu müssen. Üblicherweise würden wir in einem Test den Expert Advisor auswählen, uns hier für ein Währungspaar entscheiden und dann hier unten den visuellen Modus aktivieren. Wenn man das macht sieht das Ganze dann so aus. So kennen Sie das vielleicht. Um Zeit zu sparen kann man den visuellen Modus hier auch deaktivieren. Wenn man dann einen Test startet, dann sieht man hier unten in der Reiterkarte Diagramm das Ergebnis. In diesem Fall haben wir einen Verlust gemacht von 147,48 €. Wir wiederholen das Ganze noch mal. Auch der Verlauf sieht hier etwas anders aus. Diesmal haben wir einen Nettogewinn von 690,23 €. Starten wir nochmal. Dann haben wir diesmal 421,23 € Profit gemacht. Und natürlich würde uns jetzt interessieren, ob die Profite oder die Verluste überwiegen. Und dafür machen wir einen sogenannten Massentest. Hier auf dieser Reiterkarte für die Eingaben, können wir einen Wert eingeben. Allerdings lässt sich hier diese Variable noch nicht markieren. Dazu müssen wir auf der Reiterkarte Einstellungen die Optimierung aktivieren. In diesem Fall wählen wir den schnellen generischen Algorithmus und danach ist dieses Kästchen hier verfügbar. Das markieren wir jetzt mal. Der Wert ist 1. Wir fangen hier von 1 an. Der Endwert ist 10. Das bedeutet wir erwarten 10 Durchläufe. Starten wir also unseren Test nochmal. Dann erscheint hier eine Reiterkarte Ergebnisse der Optimierung. Wir haben einen kleinen Verlust von 24,77 € und hier einen größeren Verlust von 227,15 € gemacht, aber überwiegend sehen die Ergebnisse hier positiv aus. Jetzt ändern wir das Ganze hier mal auf 20 Testreihen. Das kann je nach Rechnergeschwindigkeit einige Zeit dauern. Ich sortiere hier wieder nach der Variable, die wir erstellt haben. Und auch hier würde ich sagen, die Ergebnisse sind überwiegend positiv. Um das genau herauszufinden, klicken wir mit der rechten Maustaste in die Ergebnisse und wählen exportieren zu XML. Ich vergebe hier mal den Namen Testergebnisse, klicke auf speichern. So sieht das Ergebnis dann im Webbrowser aus, aber ich möchte das Ganze jetzt hier in Libre Office öffnen und dann kann ich damit schon mehr anfangen. Fügen wir hier einmal eine Summe ein. Drücken Enter. Dann sehen wir, dass in unseren 20 Testdurchläufen das Ergebnis durchaus positiv ist. Das kann aber in anderen Handelsjahren durchaus anders aussehen. Probieren wir mal das Jahr 2017 aus. Starten einen neuen Massentest. Hier kommen die Ergebnisse. Die Datei nenne wir mal Testergebnisse 2017, klicken auf speichern. Öffnen das Ganze wieder in der Software mit der Tabellenkalkulation. Und tatsächlich war auch das Ergebnis positiv. Der Zufall ist also tatsächlich brauchbarer als man glaubt und außerdem eine sehr gute Möglichkeit, um herauszufinden, ob bestimmte Einstiege tatsächlich einen Marktvorteil bieten. Und sie haben in diesem kurzen Video gelernt, wie Sie für einen Zufallseinstieg Massentests durchführen können. Und sie können das selbst testen mit diesen paar Zeilen hier in MQL5.
    6 min
  • MQL5 TUTORIAL GRUNDLAGEN – 50 SIMPLER RANDOM ENTRY EXPERT ADVISOR
    In diesem Video wollen wir uns einmal anschauen, wie man einen zufallsbasierten Einstieg programmieren kann. Unser Expert Advisor produziert hier kontinuierlich Kaufen- und Verkaufen-Signale. Der Zufallseinstieg mag Ihnen seltsam vorkommen, aber ich verspreche Ihnen die Ergebnisse sind interessant. Und wir wollen uns in diesem Video einmal anschauen, wie man so etwas mit MQL5 programmieren kann. Um das zu tun, klicken Sie im Metatrader bitte auf dieses kleine Symbol hier oben oder drücken auf die F4-Taste. Das ruft dann hier den Metaeditor auf und hier klicken wir auf Datei, neue Datei, Expert Advisor aus Vorlage, weiter. Ich vergebe hier mal den Namen SimplerRandomEntryEA, klicke auf weiter. Weiter und fertigstellen. Jetzt kann alles oberhalb der OnTick-Funktion hier gelöscht werden. Und auch die zwei Kommentarzeilen werden entfernt. Zunächst nutzen wir include und importieren uns die Datei Trade.mqh. Die ist Bestandteil von MQL5 und stellt uns vereinfachte Handelsfunktionen bereit. Danach erstellen wir uns eine Instanz von der Klasse CTrade. Die bekommt den Namen Trade und wir werden Sie später nutzen, um Positionen zu eröffnen. Außerdem erstellen wir uns noch eine externe Variable für die Eingabe eines Integer-Wertes. Die bekommt den Namen MassenTest und erhält den initialen Wert 1. Das Ganze hier wird später noch interessant, im nächsten Video, wo es um Massentests gehen wird. In der OnTick-Funktion berechnen wir zunächst einmal den Ask-Preis. Das übernimmt die Funktion SymbolInfoDouble. Die erhält als Parameter das aktuelle Währungspaar und den Parameter SYMBOL_ASK. Bitte alles in Großbuchstaben. Mit NormalizeDouble und _Digits stellen wir sicher, dass je nach Währungspaar entweder 3 oder 5 Nachkommastellen automatisch berechnet werden. Das Ganze wiederholen wir hier nochmal für den Bid-Preis. Die Zeile ist nahezu identisch, nur der Variablenname ist anders und wir nutzen hier als zweiten Parameter SYMBOL_BID. Wir brauchen auch noch eine Variable für unser Signal. Die bekommt auch den Namen Signal. Ist vom Typ string, bekommt hier aber noch keinen Wert zugewiesen, denn den möchten wir jetzt ermitteln. Dazu initialisieren wir zunächst einmal unseren Zufallsgenerator. Das übernimmt die Funktion MathSrand. Die stellt uns die Anfangsposition für das Generieren einer Folge von pseudozufälligen Ganzzahlen bereit. Und dieser Funktion übergeben wir als Parameter das Ergebnis der Funktion GetTickCount. Die Funktion GetTickCount gibt uns die Zahl der Millisekunden seit dem Systemstart an. Und die Kombination aus diesen beiden Funktionen hier wird eine einmalige Folge von Zufallszahlen erstellen. Berechnet wir das Ganze mit der Funktion MathRand. Diese Funktion kann bis zu 32767 Zufallszahlen generieren. Wir brauchen aber nur 2. Das wird entweder eine 0 oder eine 1 sein. Wenn unsere Zufallszahl einer 0 entspricht, dann möchten wir unser Signal auf kaufen setzen. Und gibt unser Zufallsgenerator eine 1 zurück, dann möchten wir gerne verkaufen, also setzen wir unser Signal auf Sell. Denn wenn unser Signal auf Sell steht und die Funktion PositionsTotal einen Rückgabewert hat von kleiner 1, dann haben wir ein Verkaufssignal und keine offenen Positionen. Und dann nutzen wir trade.Sell um 10 Mircolot zu verkaufen. Andernfalls, wenn unser Signal auf Buy steht und wir ebenfalls keine geöffneten Positionen haben, dann möchten wir 10 Micorlot kaufen. Also nutzen wir trade.Buy, um 10 Microlot zu kaufen. Zum Schluss erstellen wir mit Command noch eine Ausgabe auf dem Chart. Die wird uns den Text ausgeben „Das aktuelle Signal ist jetzt:“ gefolgt von dem ermittelten Signal. Das war´s so weit. Wenn Sie nicht verstanden haben, was alle diese Code-Zeile bewirken sollen oder falls Ihnen das zu schnell war. Dann wollen Sie sich vielleicht zunächst eines der anderen Videos aus dieser Grundlagen-Serie anschauen oder vielleicht ist sogar der Premiumkurs auf unserer Webseite interessant für Sie. Für den Moment klicken wir mal auf kompilieren.
    8 min

About MQL5 Tutorial - Automatisch traden mit Metatrader5

From the publisher's feed

Metatrader5 MQL5 Expert Advisor Tutorial