Beliebte Beiträge

Tipp Der Redaktion - 2019

MQL4: Wir schreiben einen Berater auf einmal für MT4 und MT5

Grüße, Freunde!

Viele von Ihnen waren wahrscheinlich schon mehrmals mit dieser Unannehmlichkeit konfrontiert: Sie haben einen Berater in mql4 geschrieben, und dann wollte ich versuchen, mit MetaTrader 5 zu spielen. Das erneute Schreiben des gesamten Codes ist eine ziemlich mühsame und langwierige Aufgabe, und Sie müssen sich auch zuerst mit der Arbeit des vorhandenen beschäftigen . Das separate Schreiben von zwei unterschiedlichen Expert Advisors für MT4 und MT5 ist ebenfalls zeitaufwändig. Wir werden dieses Problem heute in einem neuen Video-Tutorial lösen.

Also, was ist zu tun? Die Antwort ist einfach: Schreiben Sie einen Berater für zwei Terminals gleichzeitig. In der Tat unterscheiden sich die Sprachen mql4 und mql5 größtenteils nicht so sehr, viele Methoden und die grundlegende Struktur von Skripten in diesen Sprachen sind ähnlich. Wenn es möglich wäre, gemeinsamen Code in einem Skript zu schreiben und die verschiedenen Abschnitte einfach in beiden Sprachen neu zu schreiben und den Compiler zu zwingen, die erforderlichen Codeteile auszuwählen, würde dies viel Zeit und Nerven sparen.

Glücklicherweise unterstützt MetaEditor Anweisungen zur bedingten Kompilierung von Präprozessoren. Und heute werden wir uns anhand eines sehr einfachen Beispiels ansehen, wie dies geschieht.

#ifdef bezeichner // Der Code hier wird kompiliert, wenn im Befehl #define bereits ein Bezeichner für den Präprozessor definiert wurde. #endif

Im Code für MT5 ersetzen wir die Variablen aus MQL4 mit der Direktive #define:

#ifdef __MQL5__ #Bestellungen definierenTotale PositionenTotale #endif

In der Kopfzeile des Beraters platzieren wir die Eingabevariablen:

input int Stop = 300; input int Take = 400; input int Slip = 100; Eingabe int MN = 123; Eingangsdoppel-LT = 0,1;

Jetzt können Sie Methoden für den Kauf und Verkauf schreiben:

bool Buy (doppelter Preis, doppelter sl, doppelter tp) {#ifdef __MQL4__ int ticket = OrderSend (Symbol (), 0, LT, Preis, Slip, sl, tp, "", MN); if (ticket <0) {PrintFormat ("OrderSend error% d", GetLastError ()); } #endif #ifdef __MQL5__ // --- Deklaration und Initialisierung der Abfrage und des Ergebnisses MqlTradeRequest request = {0}; MqlTradeResult result = {0}; // --- request parameters request.action = TRADE_ACTION_DEAL; // Art der Handelsoperation request.symbol = Symbol (); // character request.volume = LT; // volume request.type = 0; // Auftragstyp request.price = price; // Preis für das Öffnen der Anfrage.sl = sl; // Preis StopLoss request.tp = tp; // Preis TakeProfit request.deviation = Slip; // zulässige abweichung von der preisanfrage.magic = MN; // MagicNumber-Bestellungen // --- Senden einer Anfrage if (! OrderSend (Anfrage, Ergebnis)) {// Wenn die Anfrage nicht gesendet werden konnte, geben Sie einen Fehlercode aus PrintFormat ("OrderSend error% d", GetLastError ()); } // --- Informationen zur Operation PrintFormat ("Retcode =% u deal =% I64u order =% I64u", result.retcode, result.deal, result.order); #endif // --- return (false); }

Die Verkaufsmethode ähnelt der buy () -Methode. An die Strategie in diesem Beispiel werden wir nicht besonders denken, wir werden eine Bedingung für das zufällige Öffnen erhalten und diesen Code in OnTick () einfügen:

int oper = (int) (GetTickCount ()% 2); // der Rest der Division durch zwei ist immer entweder 0 oder 1 if (oper == 0) {double price = Ask; double SL = NormalizeDouble (Bid - Stop * _Point, _Digits); double TP = NormalizeDouble (Bid + Take * _Point, _Digits); Kaufen (Ask, SL, TP); } if (oper == 1) {doppelter Preis = Gebot; double SL = NormalizeDouble (Ask + Stop * _Point, _Digits); double TP = NormalizeDouble (Ask - Take * _Point, _Digits); Verkaufen (Ask, SL, TP); }

Fazit

Das ist alles. Jetzt können Sie den Code in MetaEditor 4 kompilieren und im MetaTrader 4-Terminal wird es funktionieren. Sie können den Expert Advisor in MetaEditor 5 kompilieren und er funktioniert normal im MetaTrader 5. Um das Terminal zu ändern, müssen Sie außerdem keine einzige Codezeile neu schreiben - alles wird kompiliert und funktioniert einwandfrei.

Lassen Sie Ihren Kommentar