Die Modellierung der Requotes im Tester und die Stabilitätsanalyse des Expert Advisors
Murashov Anton | 31 März, 2016
Einführung
Der eingebaute Strategie-Tester im Client Terminal Meta Trader 4 ist ein sehr guter Prüfung /Qualitätsbewertungsinstrument einer Trading-Strategie, der in Expert Advisor realisiert wurde. Aber in diesem aktuellen Zeitpunkt hat der meiner Meinung nach zwei sehr kritische Besonderheiten. Erstens verwendet er nicht die reale History der Ticks nach einem Instrument, sondern modelliert sie auf Basis der Ein-Minuten-Bars. Zweitens berücksichtigt er nicht das Phänomen, dass Broker ziemlich oft requotes machen, insbesondere bei kleinen Handelsvolumen oder bei sehr großen, und auch bei "dünnen" Low-liquiden Markten. Wenn man nicht in der Lage ist, seinen Experte unter den Bedingungen der möglichen Requotes zu prüfen, führt es zur Auftauche der "Grails", die auf Spikes, Sprünge und Nichtmarktlichen Preisen handeln. Es wurde schon erklärt, und mehrmals bewiesen, dass eine solche Strategie auf einem realen Konto nicht profitabel sein kann, aber ist es leider oft schwierig, zu erkennen, ob Ihr Expert Advisor auf "Sprünge" spielt oder nicht. Auf einem History-Chart mit Trades, die zu ihm hinzugefügt wurden, kann man manchmal sehen, dass der Tester Trades auf Sprünge öffnet, aber es nicht immer klar, und man kann nicht voraussichtlich sagen, ob die Requote-Strategie in diesen Momenten ineffektiv sein wird oder wird einfach nur die Rentabilität senken. In diesem Artikel werde ich meine eigene Methode erklären, dieses Problem zu lösen.
Annahmen und Definitionen der notwendigen Konzepte
Requote - ist die Antwort des Brokers auf den Order, den Sie an den Handel-Server gesendet haben. Diese Antwort informiert darüber, dass der Preis (in dem Sie versuchen, einen Trade zu öffnen) ist nicht mehr aktuell. Es passiert oft auf Low-liquiden oder volatilen Märkten, wo der Preis sich erheblich während der Bearbeitung Ihrer Anfrage im Terminal ändern kann. Auch Requotes kommen sehr oft vor, wenn Sie versuchen, Orders bei Spikes und Nichtmarktlichen Preisen zu öffnen.
Nehmen wir an, dass der Expert Advisor nur Orders wie OP_SELL und OP_BUY öffnet und schließt. Im Allgemeinen ändert es nichts, aber es macht einige Funktionen einfacher.
Die Modellierung der Requotes im Strategie-Tester
Lassen Sie uns ein Ziel stellen, Requotes mit der vorher gegebenen Wahrscheinlichkeit während der Orders-Öffnung und Schließung zu modellieren. Vor allem lassen Sie uns eine spezielle externe Variable einfügen, die die Eintrittswahrscheinlichkeit unserer künstlichen Requote eingeben wird. Nach meiner Beobachtung ist die Wahrscheinlichkeit des Requotations auf Low-liquiden Paaren ungefähr 90% - deshalb lassen Sie uns diesen Wert für die Analyse des Expert Advisors nehmen.
extern int RQF_TEST = 90;Da wir die Funktion MathRand verwenden werden, die einen beliebigen Wert zurückliefern wird, ist es besser, die Folge von Pseudozufallszahlen zu initialisieren. Zu diesem Zweck wird die Funktion MathSrand am Anfang der Arbeit des Expert Advisors ausgeführt. Um die genaue Information über die Generierung der Zufallswerte und den Zweck dieser Funktion zu erfahren, können Sie das Referenzbuch über MQL 4 Sprache lesen. Ich sage bloß, dass wir trotz der Zufallszahlen aus der Funktion MathRand das gleiche Ergebnis bei jeder Überprüfung einer Strategie bekommen werden, wenn wir MathSrand nicht verwenden. Was wir uns eigentlich nicht wünschen:
int start() { //---- MathSrand(TimeCurrent());Danach müssen wir unsere eigenen Funktionen OrderSend und OrderClose schreiben. Nennen wir sie MyOrderSend und MyOrderClose:
int MyOrderSend(int req_prob, string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment="", int magic=0, datetime expiration=0, color arrow_color=CLR_NONE) { if(IsTesting() && (MathRand() % 100) < req_prob && (cmd == OP_SELL || cmd == OP_BUY)) return (-1); //modelling requote return(OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color)); } bool MyOrderClose(int req_prob, int ticket, double lots, double price, int slippage, color Color=CLR_NONE) { if(IsTesting() && (MathRand() % 100) < req_prob) return (false); //modelling requote return (OrderClose(ticket, lots, price, slippage, Color)); }Jetzt ersetzen wir alle OrderSend und OrderClose Funktionen im EA mit MyOrderSend und MyOrderClose, hierbei geben wir die eingefügte externe Variable RQF_TEST als erstes Argument. Unten gibt es ein Beispiel aus meinem eigenen EA.
OrderClose -> MyOrderClose:
if(MyOrderClose(RQF_TEST, ticket, amount, Bid, 0, Blue)) // PREV: if(OrderClose(ticket, amount, Bid, 0, Blue)) { Print("Skalpel: Order #" + ticket + " closed! (BUY, " + Bid + ")"); //... Something } else { // Requote or something like this Print("Skalpel: Error while closing order #" + ticket + " (BUY)!"); // ... Something }OrderSend -> MyOrderSend:
ticket = MyOrderSend(RQF_TEST, Symbol(), OP_BUY, amount, Ask, 0, Bid-StopLoss*Point, Bid+TakeProfit*Point, NULL, EXPERT_MAGIC, 0, Blue); // PREV: OrderSend(Symbol(), OP_BUY, amount, Ask, 0, Bid - StopLoss*Point, // Bid+TakeProfit*Point, NULL, EXPERT_MAGIC, 0, Blue); if(ticket > 0) Print("Skalpel: Order #" + ticket + " opened! (BUY)"); else Print("Skalpel: Error while placing order."); // ... Requote or something like this
Schlussfolgerungen und die Analyse der Ergebnisse
Vor allem muss der Wert der Variable RQF_TEST erklärt werden. Eben der legt die Anzahl von Requotes für 100 Trades und kann den Wert von 0, wenn überhaupt keine Requotes gibt, bis zu 100 nehmen, wenn es absolut unmöglich ist, einen Order zu öffnen oder zu schließen. Wenn RQF_TEST gleich 90 ist, wie im Beispiel, bedeutet das, dass etwa 90 Versuche von 100, der Trades zu öffnen oder zu schließen mit Misserfolg endet, das heißt, es wird requote modelliert.Eigentlich sind die Ergebnisse, die bei verschiedenen Werten von RQF_TEST bekommen wurden, zeigen die Stabilität Ihrer Strategie vor Requotes und vor Unterschieden in den Ticks aus dem Tester und dem Broker.
Wenn die Ergebnisse verschlechtern und RQF_TEST wächst, ist es notwendig, die Zweckmäßigkeit einer solchen Strategie zu überprüfen, da die Signalen gegen Requotes bedeuten, dass Sie auf scharfen, vorübergehenden Spikes spielen oder es ist scalpings. Und zu welchen Ergebnissen solche EAs bringen können, wurde schon viel geschrieben.
Als Beispiel lassen Sie uns Balance-Charts von einem klassischen Experten betrachten, mit verschiedenen Werten von RQF_TEST und der auf Spikes funktioniert. Der Expert Advisor wurde aus dem Artikel "Mein erster Graal" (https://www.mql5.com/de/articles/1413) genommen und wurde etwas für die Visualisierung verarbeitet. Alle Orders des Typs limit werden durch normaler marktübliche Weise realisiert, und auch Parameter werden so genommen, damit Charts deutlich die Verschlechterung beim Requoting zeigen könnten.
Keine reqoutes (RQF_TEST = 0):