MQL4

Alle Funktionalitäten des Open Range Breakout DELUXE EA's jetzt programmiert

Alle Funktionalitäten des Open Range Breakout DELUXE EA's sind jetzt fertig programmiert. Durch die “vierte von drei” Programmier-Sessions, eine über zwei-stündige Mammut-Sitzung gestern, in der online Workshop Serie DELUXE-Version des Open Range Breakout EA programmieren sind nun sämtliche garantierten Features umgesetzt. Nun steht ein ausführlicher Dauertest auf MT4-Demo-Konten der JFD Bank aus, durch den all diese Funktionen auf Mark und Bein geprüft werden.

Nach erfolgreichem Bestehen dieser Tests und eventuellem Fine-Tuning des Codes wird es den fertigen ORB EA käuflich zu erwerben geben! Bleiben Sie daher informiert, um im Juni zu den ersten zu gehören, die darüber per Email informiert werden:

Open Range Breakout EA Infos per Email erhalten

Bitte informieren Sie mich sofort, sobald es Neues zum ORB-EA gibt, per Email an folgende Email-Adresse:

    Freitagsmails mit wichtigen und spannenden Themen rund ums EA-Programmieren und Trading gewünscht (kostenlos und jederzeit abbestellbar):

    Datenschutz nach DSGVO. Sie können sich jederzeit aus unserem Email-Verteiler austragen.

    Powered By ConvertKit

    In der gestrigen Bonus-Sessions des insgesamt 8-teiligen Programmier-Workshops konnten die Teilnehmer folgende Lerneffekte mitnehmen:

    1. Verwendung von booleschen Eingabe-Variablen, um im EA bestimmte Features ein- und ausschaltbar zu machen.

    2. Korrektur der Stop-Loss- und Take-Profit-Kurse der Short-Positionen um den Spread, da bei Sell-Positionen der Spread beim Closing bezahlt wird, während man bei Buy-Deals die Geld-Brief-Spanne schon bei deren Eröffnung erledigt.

    3. Ermöglichen, dass die Range-Box abends ermittelt wird, das Handelsende aber erst am nächsten Morgen stattfindet.

    4. Optionale Deal-Eröffnung in Gegenrichtung direkt nach einem SL.

    5. Automatisch in der Dealhistorie erkennen, wann eine Order per SL geschlossen wurde.

    6. Einbeziehung des einstellbaren Lotsize-Erhöhungs-Faktors in die Volumensberechnung nach einem Verlustdeal.

    7. Verwendung von Globalen Variablen, um die Fortsetzung des EA’s nach einem gewünschten oder unerwünschten MT4-Neustart so nahtlos wie möglich zu gestalten.

    8. Grenzen des Strategietesters.

    9. Umgang mit Fehler- und Warnmeldungen im Kompilierbericht.

    10. Wie wichtig es ist, im Programmierplan eindeutige und unverwechselbare Beschreibungen aufzuführen.

    Ich berichte nächste Woche voraussichtlich über die ersten Dauertest-Ergebnisse. Bis dahin: dran bleiben!

    Herzliche Grüße und beste Trading-Erfolge
    Cristof Ensslin von mindful FX, Ihr EA-Programmierer

    Lotsize-Erhöhung nach Verlust und weiteres steht nun im ORB DELUXE EA

    Dienstag Abend konnten wir im derzeit laufenden online LIVE Programmier-Workshop den Open Range Breakout (ORB) DELUXE EA in großen Schritten weiter entwickeln. Was bisher schon programmiert wurde und funktionabel ist, sehen Sie im letztwöchigen Blog Open Range Breakout DELUXE Version nimmt im ersten Workshop-Teil Form an.

    Die Workshop-Teilnehmer und ich arbeiteten zunächst an der Lotsize-Erhöhung nach einem Verlustdeal, was wir letzte Woche nur teilweise fertig bekommen hatten. Diese Funktionalität steht nun auf stabilen Beinen. Zusammen mit ihr haben wir in den Handels-Robot außerdem eingefügt, dass er den Handel für den Rest des Tages einstellt, sobald ein Deal seinen Take-Profit erreicht hat. Dies nutzt ähnliche Code-Vorgänge, nämlich Schleifen durch die Kontohistorie im MT4.

    Weitere Funktionalitäten und Lerneffekte, die wir durch die dieswöchige Erweiterungs-Session des ORB Expert Advisors im Workshop vermitteln konnten:

    • wie man aus dem Dealpool der Kontohistorie die aktuelle Verlustserie ermittelt

    • dass wir den Dealpool vorwärts und rückwärts durchschleifen können, mit Beispielen, wann dies jeweils vorteilhaft ist

    • herauszufinden, ob ein Deal nicht nur mit Gewinn, sondern auch per TP geschlossen wurde

    • die StringFind()-Funktion kennenlernen

    • die Fehlermeldung 4111 kennenlernen und wie wir diese umgehen können

    • dass wir die Logik zur Erhöhung der Ausbruchszählungs- und Belegung der Ausbruchsrichtungs-Variable anpassen müssen, um “nur Long” oder “nur Short” als Deal-Modus zulassen zu können

    • dass wir eine true/false-Variable in einer If-Bedingung sowohl mit “== true” als auch ohne verwenden und damit Platz sparen und Programmiergeschwindigkeit gewinnen können

    • dass wir eine true/false-Variable in einer If-Bedingung sowohl mit “== false” als auch ohne und stattdessen mit einem führenden “!” verwenden und damit Platz sparen und Programmiergeschwindigkeit gewinnen können

    • den aktuellen Wochentag abzurufen und richtig zu deuten

    • daraus einen Wochentags-Filter zu programmieren

    • welche Überlegungen durchzudenken sind, um “return true;” in der OnTick()-Funktion so früh wie möglich und so spät wie nötig im Code zu platzieren.

    Somit kommen wir dem Endspurt der Programmierung des Open Range Breakout DELUXE EA’s immer näher. Nächste Woche steht noch auf dem Plan:

    • Einstiegsfilter nach einem Moving Average Indikator

    • Farbige Range-Linien zwischen Box und Schlusszeit

    • Trade in die Box hinein statt aus der Box heraus

    • Übernacht-Trade (Box heute, Close-All morgen)

    • Gegentrade bei SL (statt auf Gegensignal zu warten)

    • den EA bestmöglich auf einen Stromausfall bzw. MT4-Neustart während der Handelssession vorzubereiten.

    Ob wir dies alles in der dritten der drei geplanten Sessions schaffen, wird sich zeigen. Falls nötig, hängen wir noch eine Bonus-Session in der Folgewoche dran, um alles wie per Garantie zugesagt fertig zu bekommen.

    Bis bald, schöne Trading- und Programmier-Erfolge
    Cristof Ensslin von mindful FX, Ihr EA-Programmierer

    Open Range Breakout EA Infos per Email erhalten

    Bitte informieren Sie mich sofort, sobald es Neues zum ORB-EA gibt, per Email an folgende Email-Adresse:

      Freitagsmails mit wichtigen und spannenden Themen rund ums EA-Programmieren und Trading gewünscht (kostenlos und jederzeit abbestellbar):

      Datenschutz nach DSGVO. Sie können sich jederzeit aus unserem Email-Verteiler austragen.

      Powered By ConvertKit

      Basis-Version von EA ist fertig: Open Range Breakout für MT4

      Diese Woche Dienstag fand die letzte der drei online Programmier-Sessions im Rahmen der Online Workshop-Serie: Open Range Breakout EA programmieren statt. Der ORB EA ist nun in einer gut ausgestattteten Basis-Version voll funktionsfähig und arbeitstauglich.

      In Summe kann dieser Expert Advisor für MT4 Ihnen die manuelle Umsetzung der folgenden Strategie voll-automatisch abnehmen:

      • Handelsspanne des Chart-Symbols zwischen zwei eingebbaren Uhrzeiten erkennen und ins Chart als Box einzeichnen, z.B. die Tages-Eröffnungs-Range (= Open Range) zwischen 6 und 8 Uhr.

      • Am Rest des gleichen Tages werden Kursausbrüche (= Breakouts) aus diesem Rechteck in Ausbruchsrichtung automatisch getradet.

      • Stop-Loss wird automatisch einen Punkt außerhalb der gegenüber liegenden Rangebegrenzung gesetzt.

      • Die Lotsize wird automatisch berechnet, indem ein eingebbares Risiko pro Deal (in Prozent des Kontokapitals) mit dem Stop-Loss-Abstand als Kursrisiko und dem Tickwert des Symbols bei Ihrem Broker ins Verhältnis gesetzt wird.

      • Automatische Rundung der Lotsize auf die richtige Nachkommastelle, je nach Lotstep des Chartsymbols, egal bei welchem Broker.

      • Zusammen mit der eingebbaren maximalen Trade-Anzahl pro Tag können Sie damit perfekt Ihr Gesamtrisiko steuern.

      • Auf der Gewinnseite können Sie den Take-Profit-Abstand als Vielfaches der Range angeben, also im Endeffekt ein Vielfaches des eingesetzten Kapitals als Zielgewinn vorgeben.

      • Zur Gewinnsicherung dienen eine Break-Even-Funktionalität und ein Trailing-Stop, beide sinnvollerweise Range-abhängig steuerbar.

      • Am Tagesende schließt der EA zudem automatisch zu einer durch Sie einstellbaren Uhrzeit die eventuell noch offenen Deals (Achtung: Handelszeiten Ihres Brokers sind zu beachten, insbesondere bei verkürzten Handelstagen wie regelmäßig vor Wochenenden und Feiertagen der Fall).

      Die Teilnehmer des Workshops erfreuen sich nun schon seit Dienstag am Einsatz des EA's - wohl wissend, dass er weder eine Eier-legende Wollmilchsau noch eine Gelddruckmaschine ist, sondern ein Werkzeug, mit dem ein erfahrener Trader schneller, gezielter und konsequenter auf Wunsch und je nach Marktphase selektiv die beliebte Open-Range-Breakout-Strategie (ORB) automatisiert umsetzen kann.

      Weitere Funktionen sind gewünscht: DELUXE Version

      Dank der aktiven Mitgestaltung des EA’s durch viele der Teilnehmer werden wir in eine zweite Runde gehen und diesen Open Range Breakout EA mFX-OpenRangeBreakout in eine DELUXE-Version ausbauen. Darin wird umgesetzt sein:

      • Dealeröffnungen nur wenn Rangegröße innerhalb vorgebbarer Größenordnung liegt

      • Diese Größenordnung als Vielfaches des ATR

      • Lotsizeerhöhung nach Verlust

      • Teilgewinnmitnahme

      • Einstieg nur Long oder nur Short oder beides

      • automatischer Richtungsfilter nach der Position des Kurses zu einem Moving Average

      • Farbige Range-Linien zwischen Box und Schlusszeit

      • Trade in die Box hinein statt aus der Box heraus

      • Wochentag-Filter

      • Übernacht-Trade (Box heute, CloseAll morgen)

      • Gegentrade schon bei SL statt auf Gegensignal durch Box-Durchbruch zu warten

      • Sicherstellen, dass EA nach MT4-Neustart so nahtlos wie möglich weitermachen kann.

      Dazu gehen wir in eine weitere drei-teilige Online Workshop-Serie: DELUXE-Version des Open Range Breakout EA programmieren. Sie findet an folgenden Terminen statt:

      1. Dienstag, 7. Mai, 2019, 19 - 20 Uhr (MESZ)

      2. Dienstag, 14. Mai, 2019, 19 - 20 Uhr (MESZ)

      3. Dienstag, 21. Mai, 2019, 19 - 20 Uhr (MESZ)

      Sie können sich hier ausführlich informieren und noch bis 7.5.2019 um 16 Uhr anmelden. Teilnehmer erhalten Passwort-geschützten Zugang zu den Video-Aufzeichnungen und den gemeinsam entwickelten EA-Quellcode als mq4-Datei-Download. Somit bekommen sie freie Gestaltungs- und Nutzungsmöglichkeit dieses Open Range Breakout EA’s für MT4.

      Ich freue mich auf Ihre Anmeldung und Teilnahme.

      Auf profitables Trading und fröhliches Programmieren
      Cristof Ensslin von mindful FX, Ihr EA-Programmierer

      Für meine Freitags-Mails rund um die Themen TRADING, EXPERT ADVISORS UND EA-PROGRAMMIERUNG anmelden:

      Datenschutz nach DSGVO. Sie können sich jederzeit aus unserem Email-Verteiler austragen. Powered by ConvertKit

      Open Range Breakout EA programmieren

      Am vergangenen Dienstag, 9.4., habe ich, gemeinsam mit Ihnen, in einer LIVE-Programmier-Session den ersten Teil eines Expert Advisors (EA) für MetaTrader 4 (MT4) zum Automatisieren der beliebten Open Range Breakout Strategie programmiert. Die Teilnehmer des sehr gut gefüllten Webinar-Raums konnten dabei sehen und lernen, wie der EA

      1. mittels einer Programmierschleife die vergangenen M1-Kerzen im Chart nach deren Zeitstempel sowie deren Höchst- und Tiefstkursen durchsucht,

      2. mittels Wenn-dann-Abfragen und mathematischen Logiken die Handelsspanne des gewünschten Zeitraums ermittelt und

      3. diese Angaben nutzt, um ein blaues Rechteck in den Chart einzuzeichnen, das diese Range farbig markiert.

      Sehen Sie in der folgenden Webinaraufzeichnung selbst, wie wir dabei vorgegangen und welches Ergebnis dabei herausgekommen ist:

      Danke für all Ihre aktive Teilnahme am Webinar!

      Kostenloser Download des EA’s

      Um den EA zum Stand des Webinarendes absolut kostenlos und unverbindlich herunterzuladen, klicken Sie hier, um zum Bestellformular zu gelangen.

      Wichtig an dieser Stelle ist unser HAFTUNGSAUSSCHLUSS UND RISIKOHINWEIS: dieser EA stellt keine Handelsempfehlung dar, sondern dient lediglich zur Veranschaulichung des MQL4-Programmierens und somit nur für Lernzwecke des EA-Programmierens. Nutzen Sie ihn ausschließlich auf Demo-Konten!

      Erweiterte Version des EA’s kommt; und Sie können mit dabei sein

      Der EA ist in seinem jetzigen Stadium noch nicht fertig. Er kann lediglich die oben beschriebenen Dinge. Was ihm fehlt sind unter anderem

      • Handelssignale und automatische Tradeeröffnung

      • Deal- und Risikomanagement

      • gewisse Vorkehrungen im Code, die die Stabilität der Funktionalitäten auch bei MT4-Absturz oder -Neustart gewährleisten.

      All das werde ich für Sie und gemeinsam mit Ihnen in drei weiteren online LIVE Programmier-Sessions in den kommenden Wochen durchführen. Sie können mit von der Partie sein und

      • LIVE mitprogrammieren und dadurch das EA-Programmieren lernen

      • Durch Anregungen und Wünsche die Funktionalitäten des EA’s mitgestalten

      • mich direkt in den online Sessions fragen, was Sie schon immer über EAs, MT4, MQL4-Programmieren, Trading etc. wissen wollten.

      Die Sessions finden an den drei verbleibenden Dienstagen des April statt, jeweils 19 Uhr bis 20 Uhr: also 16.4., 23.4. und 30.4. Diese Programmierstunden werde ich für Sie aufzeichnen, so dass Sie nichts verpassen werden, auch wenn Sie mal eine Sitzung nicht dabei sein können. Sie erhalten auch immer den aktuellen Code-Stand als mq4-Datei direkt im Anschluss an jede Session. Die Kursabende werden wir übrigens über die sehr leicht bedienbare online-Videokonferenz-Plattform Zoom.us durchführen.

      Klicken Sie hier für alle Informationen und melden sich am besten gleich an, um sich Ihren Platz zu sichern. Ich freue mich auf Ihre Teilnahme.

      Ganz herzliche Grüße
      Cristof Ensslin von mindful FX, Ihr EA-Programmierer


      Wie man in MQL4 einen Teilverkauf mit Breakeven für die Restposition programmiert

      Ein beliebter Ansatz des Positionsmanagements im Forex-Trading ist es, für einen Deal nicht nur ein, sondern zwei Take-Profit-Levels zu definieren. Bei Erreichen des ersten Gewinnziels wird ein Teil der Position, z.B. 50% der ursprünglichen Lotsize, glattgestellt und somit ein Mindestgewinn gesichert. Damit dieser nicht mehr verloren werden kann, wird für die verbleibende, 50-prozentige Restposition der Stop-Loss auf Einstandskurs nachgezogen.

      Das kann man selbstverständlich manuell durchführen. Diese Vorgehensweise lässt sich aber ebenso in einem Expert Advisor (EA) für MetaTrader (MT4/MT5) automatisieren. In diesem Wissen erreichte mich neulich die folgende Frage eines Kunden.

      Ich interessiere mich für den MAXingPro EA, hätte aber dazu jetzt eine Frage zu einer möglichen Änderung bzw. Anpassung des Codes. Wäre es möglich, eine Funktion in den Code einzubauen, wo man z.B. nach Erreichen von angegeben Pips einen Teilverkauf macht (diesen könnte man in % angeben) und dann die noch offene Position auf Break Even zieht und mit Trailing Stop einfach laufen lässt?
      — Philipp L., Trader und mindful FX Kunde

      Ich war mit Herrn L. so verblieben, dass diese Funktion in einer der nächsten EA-Versionen eingeführt wird. Heute ist es so weit.

      Ich zeige all denjenigen, die selbst am Programmieren interessiert sind, zudem bei dieser Gegelenheit, wie ein solcher Teilverkauf in MQL4 programmiert werden kann. Los geht's, am Beispiel unseres Trendfolge-EA's mFX-MAXingPro!

      Wichtiger Hinweis: in den folgenden Code-Beispielen sind die Änderungen bzw. Hinzufügungen in Fettschrift aufgeführt, während gleich bleibender Code in normaler Schrift geschrieben ist.

      Schritt 1: EA-Datei unter neuem Namen abspeichern und neue Versionsnummer eintragen

      Hier im ersten Schritt öffnen wir zunächst die mq4-Datei des EA's mFX-MAXingPro, der Kreuzungen von zwei Moving Averages (Gleitenden Durchschnitten) als Signalgeber verwendet. Wir speichern sie sofort unter einem neuen Namen (mFX-MAXingPro_v1.50) ab. Damit stellen wir sicher, dass wir jederzeit zur Ausgangs-Version v1.40 zurück kehren können, von der wir wissen, dass sie einwandfrei funktioniert.

      Dann ändern wir im Code die Versionsnummer und das Erstellungsdatum ab, um unsere Arbeit im EA später nachvollziehen zu können. Die Code-Zeile lautet nun:

      #property version "1.50" // 31.08.2018

      Entsprechend unserer neuen Eingaben wird die neue Versionsnummer ab sofort bei Verwendung im MT4-Terminal unter "Allgemein" in den EA-Eigenschaften angezeigt.

      Schritt 2: Teilverkaufs-Eingabeariable definieren

      Eine Break-Even-Funktionalität haben wir in diesem EA schon. Diese wird gesteuert durch die folgenden Eingabevariablen:

      input bool BreakEven_verwenden=true;
      input double BreakEven_Trigger=30;
      input double BreakEven_Profit=0;

      Mit der ersten Variable BreakEven_verwenden kann der EA-Nutzer nachher die Break-Even-Funktionalität ein- und ausschalten. Bei BreakEven_Trigger kann er oder sie in Pips eingeben, bei welchem Dealgewinn der SL auf Einstandskurs nachgezogen werden soll. Mit BreakEven_Profit kann die Traderin schlussendlich eine Vertikalverschiebung in Pips eingeben, so dass der SL-Nachzug auf z.B. 1 Pip im Gewinn vollzogen wird.

      Nun fügen wir zu diesem Codeblock die Eingabe-Variable hinzu, mit der wir später bei der EA Verwendung den gleichzeitigen Teilverkauf steuern können. Sinnvoll ist hier, den Prozentsatz der originalen Lotsize eingeben zu können, der teilgeschlossen werden soll:

      input double BreakEven_Teilverkauf=50;

      Wir werden das so programmieren, dass die Eingabge von 0 den Teilverkauf ausschaltet. Bei Eingabe der voreingestellten 50 würde der EA bei Erreichen der unter BreakEven_Trigger definierten Gewinn-Pips 50% der Ursprungsposition (Beispiel: 50% von 1.00 Lots = 0.50 Lots), also die Hälfte der bestehenden Lotsize teilschließen.

      Schritt 3: Teilverkauf in Break-Even-Funktionalität zunächst für Buy-Deals einfügen

      Nun bewegen wir uns hinein in die OnTick-Funktion, also die Funktion, die ein EA bei Empfang eines jeden Chartkursticks durchläuft. Dort haben wir eine schon eine Schleife programmiert, die alle bestehenden Deals auf MagicNumber und Chartsymbol filtert. Das macht den EA multi-Deal-fähig, denn somit kann er jederzeit seine eigenen Deals wiedererkennen.

      Im bestehenden Code fragen wir für BUY- und SELL-Deals getrennt schon ab, ob einerseits die Break-Even-Funktionalität überhaupt aktiviert ist und ob andererseits der Kurs-Trigger erreicht ist, der zum Nachziehen des Stop-Loss-Kurses auf Einstandskurs +/- Mindestgewinn-Pips eingestellt wurde. Hier fügen wir nun Code ein, der den Teilverkauf effektiv durchführt.

      Zuerst führen wir eine Serie von Bedingungs-Abfragen durch. Sie stellt fest, ob eine Teilschließung überhaupt zugelassen ist in diesem Moment. Am Ende, wenn also alle Bedingungen wahr sind, kommt das Closing selbst in den geschweiften Klammern.

      Ich kommentiere dabei die jeweilige Zeile zum besseren Verständnis:

      if ( BreakEven_Teilverkauf > 0 && BreakEven_Teilverkauf <= 100)
      Diese Bedingung fragt ab, ob der Teilverkauf durch den EA-Nutzer gewünscht ist. Die Abfrage ist genau dann wahr, wenn die Eingabe-Variable BreakEven_Teilverkauf größer als null und gleichzeitig maximal 100 ist. Alle anderen Eingaben schalten also die Teilverkauf-Funktionalität effektiv aus.

      if ( OrderSelect ( Count, SELECT_BY_POS ) )
      In den folgenden Bedingungen benötigen wir Zugriff auf das bestehende Orderkommentar, die Orderlotsize, die Orderticketnummer sowie den aktuell verfügbaren Closingpreis für die Order. Damit der EA auf jeden Fall all diese Orderattribute zur Verfügung hat, selektieren wir die Order nocheinmal. Denn im Fall der OrderModify-Durchführung der Breakeven-Funktionalität kann es sein, dass die bisherige Orderselektion aufgehoben wird. OrderSelect(...) gibt dann wahr zurück, wenn die Order anhand des Schleifen-Zählers Count im Dealpool (SELECT_BY_POS) erfolgreich gefunden werden konnte.

      if ( StringFind ( OrderComment(), "from #" ) < 0 )
      Nun schauen wir im Orderkommentar OrderComment() nach, ob diese Order schon einmal teilgeschlossen wurde. Alle Teilschließungen werden im MT4 automatisch mit from #1234567 anstelle eines eventuell schon bestehenden Orderkommentars kommentiert, damit man erkennen kann, von welcher ursprünglichen Order her diese Restposition stammt. Das ist hilfreich, weil Restpositionen zwar den gleichen Einstiegskurs und die selbe Einstigeszeit, jedoch eine neue Ticketnummer erhalten. Mit der in MQL4 eingebauten StringFind-Funktion durchsucht der Expert Advisor nun das OrderComment() daraufhin, ob der Text from # schon darin zu finden ist. Wenn nein, gibt uns die StringFind-Funktion einen negativen Wert zurück. Unsere if-Bedingung ist also immer dann wahr, wenn die Order noch nicht teilgeschlossen wurde.

      if ( BreakEven_Teilverkauf / 100 * OrderLots() >= MarketInfo ( Symbol(), MODE_MINLOT ) )
      Um Fehlermeldungen im EA-Ablauf der eigentlichen Teilverkäufe zu vermeiden, fragen wir hier ab, ob der Prozentsatz BreakEven_Teilverkauf / 100 der bestehenden Orderlotsize OrderLots() mindestens so groß ist wir die Mindestlotsize des Brokers. Letztere wird über die MarketInfo-Funktion für das aktuelle Chartsymbol Symbol() mit dem Bezeichner MODE_MINLOT abgefragt.

      Sind nun alle vier Bedingungen wahr, kann der EA in die geschweiften Klammern eintreten und den folgenden Code durchlaufen:
         {
         double clsLots = NormalizeDouble ( BreakEven_Teilverkauf / 100 * OrderLots() ,                                              LotsRundung ) ;

      Hier wird die Berechnung der teilschließenden Lotsize der neuen double-Variable clsLots zugewiesen. Der Wert wird dabei durch die NormalizeDouble-Funktion auf die richtige Anzahl an Nachkommastellen gerundet, welche wir in der OnInit-Funktion ermittelt und der Integer-Variable LotsRundung zugewiesen haben.

         while ( IsTradeContextBusy() ) Sleep ( 10 ) ;
      Wir lassen den Experten über die Sleep-Funktion ein in Millisekunden (hier: 10) definiertes Nickerchen machen, solange (while...) die Tradingleitung zum Broker belegt ist, was wir über IsTradeContextBusy() erfahren.

         bool oc = OrderClose ( OrderTicket(), clsLots, OrderClosePrice(), UseSlippage,                                    clrCornflowerBlue ) ;
         }

      Zu guter letzt wird der Teilverkauf an sich durchgeführt. Die OrderClose-Funktion bestücken wir entsprechend mit den notwendigen Parametern Ordernummer OrderTicket(), Lotanzahl clsLots, aktueller Schließpreis (Bid oder Ask) OrderClosePrice(), maximal akzeptierte Kursabweichung (Slippage) UseSlippage (schon in OnInit-Funktion mit dem gewünschten Maximalwert belegt) sowie die Farbe clrCornflowerBlue des Pfeils, der vom EA bei Teilschließung in den Chart eingezeichnet wird.

      Schritt 4: Teilverkauf für SELL-Deals ergänzen

      Der Code, um Sell-Deals teilzuclosen ähnelt dem im letzten Schritt geschriebenen Code sehr stark. Wir können ihn daher per Copy & Paste in die Sell-Deal-Abfrage einfügen. Wir müssen dann nur noch eine kleine Änderung ergänzen:

      if ( BreakEven_Teilverkauf > 0 && BreakEven_Teilverkauf <= 100 )
      if ( OrderSelect ( Count, SELECT_BY_POS ) )
      if ( StringFind ( OrderComment(), "from #" ) < 0 )
      if ( BreakEven_Teilverkauf / 100 * OrderLots() >= MarketInfo ( Symbol(), MODE_MINLOT ) ) 
         {
         clsLots = NormalizeDouble ( BreakEven_Teilverkauf / 100 * OrderLots() ,                                              LotsRundung ) ;
         while ( IsTradeContextBusy() ) Sleep ( 10 ) ;
         oc = OrderClose ( OrderTicket(), clsLots, OrderClosePrice(), UseSlippage,                                    clrCornflowerBlue ) ;
         }

      Vor den Variablen clsLots und oc musste ich lediglich die Variablendefinition entfernen, da wir diese schon bei der Behandlung der Buy-Orders definiert haben und wir uns nicht im strikten Kompiliermodus befinden. Alles andere konnte eins zu eins von der Buy-Seite übernommen werden. (Im strikten Kompiliermodus #property strict hätten wir den kompletten Code inklusive der Variablendefinitionen übernehmen können.)

      Hinweis: um Copy&Paste zu vermeiden, hätten wir auch eine eigene Funktion schreiben können, die dann jeweils bei BUY und SELL abgefragt wird. Das bewirkt das exakt gleiche Ergebnis in der letztendlichen EA Verwendung, spart aber Platz im Code.

      Schritt 5: testen, ob der EA mit dem neuen MQL4-Code funktioniert

      Abschließend testen wir die neue EA-Version des mFX-MAXingPro noch, um sicherzustellen, dass die neuen Code-Module auch wirklich das bewirken, was wir mit ihnen beabsichtigt haben. Dazu rufen wir den Strategietester im MetaTrader 4 auf.

      Bei solchen Funktionalitätstests ist das Modell "Kontrollpunkte" ausreichend. Im folgenden Screenshot sehen Sie wunderbar, wie die Teilclosings nun in der Chart-Grafik aussehen, sowohl für Buy als auch für Sell. Wir beobachten in diesen Fällen zwei gestrichelte Linien vom Einstiegsmoment nach rechts. Die erste hin zum Moment des Breakeven-SL-Nachzugs und Teilverkaufs, die zweite hin zum Zeitpunkt des Schließens der Restposition.

      Funktioniert also alles wie gewünscht! Insbesondere im Fall des Buy-Teilverkaufs am 9. August um ca. 13 Uhr sieht man, wie positiv sich ein solcher Teilclose auf das Ergebnis auswirken kann. Die zwischenzeitlichen Kursgewinne konnten hier zumindest zur Hälfte (Teilverkauf von 50%) mitgenommen werden, während für die Restposition bei Gegensignal immerhin noch ein kleiner Gewinn verblieb.

      Wollen Sie noch mehr MQL4 und EA-programmieren lernen? Vielleicht sogar von Grund auf?

      MQL4-Intensivkurs in Stuttgart

      Wollen Sie von Grund auf lernen, eigene EA's zu programmieren? Möchten Sie mit mir und Gleichgesinnten gemeinsam ein Grundgerüst für einen MT4 Expert Advisor erstellen, auf dem aufbauend Sie weiter entwickeln und lernen können? 

      Dann kommen Sie Ende Oktober zum nächsten MQL4-Intensivkurs - EA-programmieren lernen. Alle Details erfahren Sie hier: https://www.mindfulfx.de/mql4intensivkurs/

      Ich freue mich auf Sie!

      Allerbeste Programmier- und Tradingerfolge wünscht
      Cristof Ensslin von mindful FX, Ihr EA-Programmierer

      Wie programmiert man einen EA, damit Range-Ausbrüche nur auf Schlusskursbasis getradet werden?

      In diesem Blogpost zeige ich Ihnen, wie Sie einem Expert Advisor (EA) für MetaTrader 4 (MT4) sagen können, dass er Signale nur auf Schlusskursbasis handeln soll. Das bedeutet, dass zum Eröffnungstick einer jeden Kerze der gerade festgestellte Kerzenschluss der Vorperiode analysiert wird. Das geschieht dann anstelle der ständigen Tick-für-Tick-Beobachtung.

      Ein Beispiel anhand unseres mFX-HochTiefAusbruch EA's: dieser vergleicht bislang bei jedem Kurstick, ob der aktuelle Bid-Kurs höher oder tiefer als die Handelsspanne der letzten 24 abgeschlossenen Kerzen liegt, wobei die Periodenanzahl '24' einstellbar ist durch den EA-Nutzer. Wenn ein Kursausbruch aus dieser gleitenden Range auf dieser kontinuierlichen Beobachtungsbasis vorliegt, tradet der EA vollautomatisch in Ausbruchsrichtung.

      Was aber, wenn Sie als Trader auf den Schlusskurs warten und damit eine eindeutige Signalbestätigung erhalten möchten, um viele voreilige Fehlsignale herauszufiltern? (Eine sehr ähnliche Schlusskurs-orientierte Ausbruchsstrategie hat übrigens die legendären Turtle Trader aus Chicago berühmt und reich gemacht.)

      Um ein Chart-Beispiel für Ausbruch auf Schlusskursbasis und Fehlausbruch auf kontinuierlicher Beobachtungsbasis zu betrachten, sehen Sie sich bitte obiges Video von Minute 0:27 bis Minute 1:24 an. Dann sehen Sie sofort, was ich meine.

      Jetzt zeige ich Ihnen die Elemente im MQL4-Code des EA's, die notwendig sind, um dieses Ziel zu erreichen. Geänderte oder neue Codebestandteile werde ich dabei in Fettschrift darstellen.

      Schritt 1: EA-Datei unter neuem Namen abspeichern und Versionsnummer und Datum ändern

      Zunächst öffnen wir die mq4-Datei des EA's mFX-HochTiefAusbruch, die wir schon haben, und speichern sie unter einem neuen Namen (mFX-HochTiefAusbruch_v1.50) ab. Damit stellen wir sicher, dass wir jederzeit zur Ausgangs-Version v1.40 zurück kehren können, von der wir wissen, dass sie einwandfrei funktioniert.

      Nun ändern wir die Versionsnummer und das Erstellungsdatum ab, um unsere Arbeit im EA jederzeit identifizieren können. Die geänderte Code-Zeile lautet:

      #property version "1.50" // 14.08.2018

      Die neue Versionsnummer in Anführungszeichen wird nun im Reiter "Allgemein" des EA-Eigenschaften-Fensters ohne Anführungszeichen angezeigt.

      Schritt 2: Neue Eingabevariable definieren

      Wir fügen nun im Code-Block der Eingabevariablen eine neue durch den EA-Nutzer in den EA-Eingaben einstellbare boolesche Variable ein, also ein True/False- bzw. An/Aus-Schalter. Damit können wir später in der Nutzung des fertigen EA's zwischen alter und neuer Version hin und her springen, z.B. um in Tests festzustellen, in welcher Marktphase die ständige Ausbruchsbeobachtung besser ist und wann wir lieber die Schlusskursbetrachtung bevorzugen sollten.

      Die neue, eingefügte Code-Zeile lautet:

      extern bool AusbruchNurAufSchlusskursBasis = true ;

      Schritt 3: Eröffnungstick einer neuen Kerze erkennen

      Als nächstes benötigen wir einen Mechanismus, der feststellt, wann eine neue Kerze eröffnet wurde. Denn im Moment der neuen Kerzeneröffnung liegt uns effektiv ein gerade abgeschlossener Kerzenschlusskurs vor, den der EA auf Range-Ausbruch hin untersuchen soll.

      Dazu brauchen wir zunächst eine neue Datum-und-Zeit-Variable (Variablentyp "datetime" in MQL4) auf globaler Basis, also außerhalb aller Funktionen definiert. Diese Variable kann somit in der OnInit-Funktion einen ersten Wert erhalten, der dann einfach in der OnTick-Funktion verwertet werden kann.

      Wir nennen sie "CurrentTimeStamp", also der Zeitstempel der aktuellen Kerze, und fügen diese Variable im relevanten Code-Block zu schon bestehenden, global verfügbaren datetime-Variablen des EA's hinzu:

      datetime SignalTime, Waitzeit, WaitzeitTP, CurrentTimeStamp ;    

      Schritt 4: neue Variable mit erstem Wert belegen  

      In der OnInit-Funktion, die einmalig bei jedem Start des EA's durchlaufen wird, lassen wir den EA nun die neue Variable CurrentTimeStamp mit dem ersten Wert belegen. Das nennt sich auch "initialisieren".

      Innerhalb der geschweiften Klammern der OnInit-Funktion fügen wir folgende Code-Zeile ein:

      CurrentTimeStamp = Time[0] ;

      Time[0] fragt den Zeitstempel (Time) der aktuellen Kerze ([0]) ab. Time[1] wäre der Zeitstempel der zuletzt abgeschlossenen Kerze, Time[2] der davor etc.

      Schritt 5: Tick für Tick den Chart auf neue Kerze hin überprüfen

      Nun bewegen wir uns zur OnTick-Funktion. Das ist der Code-Bestandteil, in dem Sie definieren, was der EA bei jedem Empfang eines Kursticks des gewählten Chartsymbols berechnen und ausführen soll.

      Hier überprüfen wir nun jeden Tick, ob der Zeitstempel der aktuellen Kerze noch dem in der Variable CurrentTimeStamp festgehaltenen Wert entspricht. Wenn ja, befinden wir uns offensichtlich noch in der selben Kerze wie zum vorherigen Tick. Wenn nein, was in MQL4 durch die Zeichenkombination != geprüft wird, dann ist soeben eine neue Kerze eröffnet worden.

      In diesem letzteren Fall müssen wir eine zuvor neu definierte Wahr-Falsch-Variable NewBar (englisch für neuer Balken, neue Kerze) für diesen einen Kurstick auf WAHR (true) stellen sowie die CurrentTimeStamp-Variable auf den jetzt vorhandenen Zeitstempel anpassen.

      Das alles geht folgendermaßen:

      bool NewBar = false ;
      if (Time[0]  != CurrentTimeStamp)
         {
         NewBar = true ;
         CurrentTimeStamp = Time[0] ;
         }

      Für den Rest des OnTick-Codes, also alles, was unterhalb dieses eben eingefügten Code-Blocks geschrieben ist, kann nun die Variable NewBar, die nun exakt einen Tick lang auf True steht, als Hinweis auf die Kerzeneröffnungs-Situation verwertet werden.

      Schritt 6: Handelssignal auf beide Ausbruchsmethoden anpassen

      Den bestehenden Code, der ein Ausbruchs-Handelssignal in der kontinuierlichen Betrachtungsmethode auslöst, müssen wir nun daraufhin anpassen, dass er nur noch dann durchlaufen wird, wenn eben diese Ausbruchsmethode ausgewählt ist. Wir erinnern uns an Schritt 3: das wird dadurch durch den EA-Nutzer gesteuert, dass die Eingabevariable AusbruchNurAufSchlusskursBasis auf False gesetzt wird.

      Das fragen wir nun so ab:

      if ( !AusbruchNurAufSchlusskursBasis && Bid > LongLevel && HandelsRichtung >= 0 ) LongSignal = true ;
      if( !AusbruchNurAufSchlusskursBasis && Bid < ShortLevel && HandelsRichtung <= 0 ) ShortSignal = true ;

      Hinweise: LongLevel und ShortLevel sind Variablen, die aus Range-Untergrenze bzw. Range-Obergrenze ermittelt werden, siehe weiter unten. HandelsRichtung ist eine Eingabevariable des EA's, die die erlaubte Handels-Richtung definiert, also Long (1), Short (-1), oder Long&Short (0).

      Nun ergänzen wir Code für den Fall, dass AusbruchNurAufSchlusskursBasis auf True eingestellt ist:

      if ( AusbruchNurAufSchlusskursBasis && NewBar && Close[1] > LongLevel && HandelsRichtung >= 0 ) LongSignal = true ;
      if ( AusbruchNurAufSchlusskursBasis && NewBar && Close[1] < ShortLevel && HandelsRichtung <=0 ) ShortSignal = true ;

      Damit fragen wir nun diese Ausbruchslogik nur einmal pro Kerze ab (NewBar, also zum ersten Tick einer Kerze) und vergleichen dann den gerade festgestellten Schlusskurs (Close[1]) mit der Range.

      Schritt 7: Range aus den richtigen Kerzen ermitteln

      Kommen wir nun zur Range-Ermittlung, also zur Berechnung der Variablen LongLevel und ShortLevel. Diese müssen wir nun noch so anpassen, dass sie bei der Schlusskurs-basierten Verwendung unseres Ausbruch-EA's die Range aus den richtigen Kerzen ermittelt.

      Wir befinden uns ja im Moment der Kerzeneröffnung schon in einer neuen Kerze, wollen aber nun die Vorkerze mit den vor dieser Vorkerze liegenden Extremkursen vergleichen. Daher müssen wir die Höchst- und Tiefstkursabfrage um eine Kerze nach links verschieben, den Abfrage-Shift also um eins erhöhen.

      Das machen wir so:

      int barshift = 0 ;
      if ( AusbruchNurAufSchlusskursBasis ) barshift = 1 ;
      double RangeUp = High [ iHighest ( NULL, 0, MODE_HIGH, HochTief_Perioden, 1+barshift ) ] ;
      double RangeLo = Low [ iLowest ( NULL, 0, MODE_LOW, HochTief_Perioden, 1+barshift ) ] ;
      double LongLevel = RangeUp + ( Puffer_Pips * UsePoint ) ;
      double ShortLevel = RangeLo - ( Puffer_Pips * UsePoint ) ;

      LongLevel und ShortLevel werden in dieser Programmierweise durch einen Zwischenschritt berechnet. Zunächst berechnen wir die Variablen RangeUp und RangeLo, die den höchsten Höchstkurs bzw. den tiefsten Tiefstkurs innerhalb der durch die Eingabevariable HochTief_Perioden in Anzahl Kerzen definierten Rangedauer zugewiesen bekommen. Danach adjustieren wir die Range noch um einen manuellen Puffer, der durch die Eingabevariable Puffer_Pips in Pips vom EA-Nutzer definiert wird. UsePoint enthält dann unsere Pip-Definition: 1 Pip = 0,0001 Kursbewegung, wenn 4- oder 5-stellig quotiert wird; 1 Pip = 0,01 Kursbewegung, wenn 3-stellig quotiert wird; 1 Pip = 1,00 Kursbewegung, wenn 0-, 1- oder 2-stellig quotiert wird.

      Diese sieben Schritte sind nun im MQL4-Code für den EA mFX-HochTiefAusbruch eingefügt, wodurch Sie nun ab sofort in Deals einsteigen können, so wie die Turtle Traders aus Chicago es getan hätten - nur mit dem klitzekleinen Unterschied, dass Sie es mit einem EA voll automatisch haben können anstatt manuell die Märkte überwachen zu müssen.

      Wollen Sie mehr EA-programmieren lernen? Kommen Sie einfach zu meinem Präsenz-Workshop MQL4-Intensivkurs - EA-programmieren lernen in Stuttgart im Oktober. Klicken Sie hier oder auf das Bild, um sich zu informieren und dann anzumelden.

      Herzliche Grüße und beste Wünsche für Ihr eigenes Trading
      Ihr Cristof Ensslin von mindful FX, Ihr EA-Programmierer

      Neuer MQL4-Intensivkurs-Termin im Oktober: EA-programmieren lernen

      Nach einigen Anfragen in den letzten Wochen, wann es denn wieder einen MQL4-Intensivkurs – EA-programmieren lernen geben wird, habe ich nun einen neuen Termin für Sie:

      29.-30. Oktober 2018 in Stuttgart, jeweils ganztägig.

      Was lernen Sie hier?

      1. Sie lernen, einen eigenen Expert Advisor für MetaTrader 4 zu programmieren. Wir bauen dabei gemeinsam ein EA-Grundgerüst, so dass Sie daraus selbst weitere EAs erstellen können.

      2. Sie lernen die wichtigsten Funktionen und Befehle der Programmiersprache MQL4 kennen, um selbst darauf aufbauen und weiter lernen zu können.

      3. Sie lernen direkt aus meinen Erfahrungen aus über 6 Jahren EA-Programmierung, so dass Sie schnell lernen, auf was es in der Programmierpraxis ankommt und wie Sie übliche Anfängerfehler einfach umgehen können.

      Das alles macht es vergleichsweise einfach, den Sprung ins kalte Wasser der EA-Programmierung mit Leichtigkeit zu schaffen.

      Was sagen vorherige Teilnehmer?

      Ich würde den MQL4-Intensivkurs – EA programmieren lernen weiterempfehlen, da man die komplette Funktionalität eines EA’s kennenlernt und da man im Anschluss in der Lage ist, eigenständig Strategien zu programmieren.
      — Timo Heberling, Marburg
      EA-Programmierung ist doch kein Hexenwerk! Durch klar strukturierte Herangehensweise haben wir unseren ersten EA programmiert.
      — Johann Hamm, Bonn
      Selbst wenn man ohne Vorkenntnisse teilnimmt, wird man an jeder Stelle mitgenommen und nach zwei Kurstagen in die Lage versetzt, eigene Handelssysteme aufzusetzen. Herr Ensslin nimmt sich viel Zeit und kann sich in die Situation eines Traders genauso wie eines Programmierers hineinversetzen. Klare Empfehlung!
      — E. Baumgarten, Ulm
       
      Der Kurs ist für Anfänger geeignet, wobei der Stoff zügig vorgestellt wird. Es wird darauf geachtet, dass die Teilnehmer folgen können. Vorkenntnisse in MQL4 sind vorteilhaft, jedoch keine Bedingung.
      — Teilnehmer vom Januar 2018
      Der Kurs gibt sehr praxisorientiert Einblick in Logik und Vorgehen der MQL4-Programmierung. Die Teilnehmer programmieren selbst ihr MQL4-Programm, was parallel von einem regen Austausch zu verschiedensten MQL4-/FX-Themen begleitet wird
      — Teilnehmer vom Januar 2018

      Übrigens: bei den letzten Terminen im August 2017 und Januar 2018 waren die 8 Workshop-Plätze sehr nachgefragt und daher schnell ausgebucht. Daher empfehle ich Ihnen, sich bei Interesse gleich zu informieren und anzumelden.

      Hier der Link zur Info- und Anmeldeseite: https://www.mindfulfx.de/mql4intensivkurs/

      Wer sich schon mindestens einen Monat vor dem ersten Workshoptag, also spätestens bis zum 29.9.2018, anmeldet, erhält 100 EUR Frühbucherrabatt. Das reduziert das Teilnahme-Ticket von 695 EUR auf nur 595 EUR.

      Darin enthalten sind Workshop-Teilnahme, ein Einführungs-Begleitbuch, Seminargetränke und -snacks sowie drei jeweils einstündige Follow-up-Sitzungen per online Video-Konferenz, in der Sie alle Ihre Fragen klären können, die im Nachhinein auftreten.

      Ich freue mich auf Sie und Ihre Anmeldung
      Cristof Ensslin

      Wo ist Rate of Change Indikator im MetaTrader?

      Bis vor kurzem suchte ich vergeblich im MetaTrader 4 den Indikator "Rate of Change" oder auch "RoC" genannt. Dieser soll einfach die prozentuale Abweichung des aktuellen Kurses von vor x Perioden darstellen. 

      Die mathematische Formel lautet:

      RoC = ( aktueller Kurs / Referenzkurs - 1 ) * 100

      Beispiel EURUSD, Tages-Chart (D1 in MT4), 14 Perioden: wenn EURUSD vor 14 Tagen bei 1,19090 stand und jetzt aktuell bei 1,19953 liegt, wird für die RoC ganz einfach gerechnet:

      Also für unser Beispiel: 

      RoC = ( 1,19953 / 1,19090 - 1 ) * 100 = 0,7247 (gerundet auf 4 Nachkommastellen).

      Heißt zu gut deutsch, dass der EURUSD jetzt gerade 0,7247% höher steht als der Schlusskurs vor 14 Tagen.

      Das ist ein schöner, einfacher, um den 0-Wert oszillierender Indikator, um einen Hinweis auf die Trendrichtung zu bekommen. Ich benutze ihn gerne im gleichen Chart mehrfach, z.B. einmal mit 10, einmal mit 38 und einmal mit 52 Perioden. 

      Mit der mehrfachen Betrachtung kann ich Zufälligkeiten reduzieren und erhalte einen besseren Überblick, ob es sich wirklich um einen soliden Aufwärts- oder Abwärtstrend handelt. Dazu müssten alle drei RoCs auf der selben Seite der 0-Linie sein.

      Wo ist nun aber der Indikator Rate of Change oder RoC im MetaTrader?

      Zwar bin ich auf Foren fündig geworden und könnte diesen Indikator auch selbst programmieren in MQL4, aber dann handelt es sich ja immer um einen so genannten Custom-Indikator, dessen Abruf in einem Expert Advisor (EA) länger dauert als die eingebauten Indikatoren.

      Ich konnte es einfach nicht fassen, dass ein solch einfacher, auch durchaus üblicher Indikator, nicht im MT4 vorhanden ist. Also bin ich auf die Suche durch die Code-Files der im MetaTrader eingebauten Indikatoren gegangen - und siehe da: wer suchet, der findet!

      Darf ich vorstellen: Momentum.

      Der Momentum-Indikator ist im MetaTrader untern den Oszillatoren zu finden. Wenn wir ihn öffnen, sehen wir schnell, dass das Momentum um die 100-Linie hin und her schwankt.

      RoC ist um die 0-Linie zentriert, Momentum um die 100-Linie. Offensichtlich ein Unterschied, oder?

      Ja und nein. Die Berechnung des Momentum ist ganz ähnlich wie die des RoC und geht wie folgt:

      Momentum = ( aktueller Kurs / Referenzkurs ) * 100

      Also für unser Beispiel: 

      ( 1,19953 / 1,19090 ) * 100 = 100,7247 (gerundet auf 4 Nachkommastellen), siehe auch der Chart-Screenshot rechts, den Sie durch Klicken vergrößern können.

      Mathematisch wird einfach die Konstante '-1' weggelassen. Das führt rechnerisch dazu, dass Momentum um die 100, während RoC um die 0 oszilliert.

      100,7247 im Momentum heißt dann ebenfalls wie oben im RoC, dass der derzeitige Kurs 0,7247% höher liegt als der Schlusskurs vor 14 Tagen.

      Ansonsten ist Momentum aber exakt das gleiche wie die Rate of Change - und umgekehrt!

      Nun kann ich also auch im MetaTrader meine EAs mit einem eingebauten, schneller und einfacher abrufbaren Indikator versehen. Dazu nutze ich einfach die iMomentum-Funktion.

      Für unser 14-Tage-Momentum im aktuellen Chart wäre im MQL4-Code eines Expert Advisors also folgender Abruf zu erfolgen:

      double aktuellerMomentum = iMomentum ( Symbol() , PERIOD_D1 , 14 , 0 , 0 ) ;

      Feine Sache. Glauben Sie mir: als ich die Gleichheit von Momentum zum Rate-of-Change entdeckte, habe ich fast einen Luftsprung gemacht. Daher wollte ich dies unbedingt mit Ihnen teilen.

      Ihnen die allerbesten Wünsche und erfolgreiche Trades
      Cristof Ensslin von mindful FX, Ihrem EA Programmierer

      MQL4 zu MQL5: Äquivalent zu IsTesting()

      MQL4 und MQL5 sind unterschiedlicher als viele MetaTrader 4 und 5 Nutzer ahnen. Hier und heute eine noch relativ einfache "Übersetzung" von MT4-Code nach MT5-Code für Expert Advisors (EA's), Skripte und Indikatoren.

      Die Funktion bool IsTesting() in MQL4 prüft, ob der EA (oder das Skript oder der Indikator) im Test- oder im Live-Betrieb läuft - unabhängig davon ob wir uns in einem Demo- oder Echtgeldkonto befinden. Die Funktion IsTesting() gibt den Wert TRUE zurück, wenn der EA im Strategietester läuft, FALSE dagegen, wenn sie in einem Chart durchlaufen wird.

      In MQL5 ist diese Funktion nicht verfügbar. Was tun? Nicht verzagen, denn die "Übersetzung" ist nahe:

      Wir können im MT5-Code die Funktion int MQLInfoInteger(int  property_id) mit Abfrage-Parameter MQL_TESTER nutzen. Also z.B.:

      if ( MQLInfoInteger ( MQL_TESTER ) == 1 ) Print ( "EA im Testmodus" );
      if ( MQLInfoInteger ( MQL_TESTER ) == 0 ) Print ( "EA im Livebetrieb" );

      Viele Grüße,
      Ihr EA Programmierer Cristof Ensslin mit dem Team von mindful FX