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):


In 90 Fällen von 100 gibt es eine requote (RQF_TEST = 90):


Offensichtlich ist die Situation äußerst bedauerlich. Vor allem unter der Bedingung, dass die getestete EURCHF ein extrem illiquide Paar ist und Requotes kommen da sehr oft vor, auch auf den ruhigen Märkten, geschweige denn der Spikes. Von daher ist die Zweckmäßigkeit unseres EAs gleich 0, trotz des sehr schönen Charts, auch wenn es Requotation nicht gibt.


Bemerkungen und Ergänzungen

Eigentlich ist es ziemlich schwierig, den EA zu finden, der wegen Requotes von profitabel zu unrentabel werden könnte. Ich war lange auf der Suche nach einem solchen Expert Advisor, der seine Qualität deutlich am Balance-Chart für eine lange Zeit zeigen konnte. Normalerweise Requotation (sogar auf dem Niveau von 50%) reduziert die Anzahl der Trades und generell den Gewinn, obwohl das Chart von außen genauso aussehen wird (konstant). Die Erklärung ist dazu sehr einfach - wenn der Broker Ihnen die Ordersöffnung bei 90 Fällen von 100 bei Spikes verbietet, dann bekommen Sie einen Gewinn von ein paar Scalpings in 10%, und eigentlich auch nur bis zu einem Zeitpunkt, in dem Ihnen die Verwendung der EAs verbieten wird. Wenn Sie sich daran erinnern, wurde eine solche Situation schon in meinem Artikel "Mein erster Graal" beschrieben. Aber selbst wenn wir davon ausgehen, dass der Broker uns nicht stört (was kaum möglich ist), ist der 10-fache Rückgang des Gewinns (und es ist genau diese Anzahl auf dem Niveau von 90% bei Requotation - der EA wird einfach 90 Spikes von 100 überspringen) macht aller Vorteile des "Grals" wertlos - er wird weniger rentabel sein, anstatt die Bankeinlagen.