Entwicklung eines selbstanpassenden Algorithmus (Teil I): Finden eines Grundmusters

9 Februar 2021, 15:02
Maxim Romanov
0
455

Einführung

Jeder Handelsalgorithmus ist im Allgemeinen ein Werkzeug, das einem erfahrenen Händler Gewinn bringen oder das Depot eines unerfahrenen Händlers sofort zerstören kann. Das Problem bei der Erstellung eines profitablen und zuverlässigen Algorithmus ist, dass wir nicht verstehen können, was getan werden muss, um Geld zu verdienen und welche Methoden von "erfolgreichen Händlern" verwendet werden. Während HFT, Arbitrage, Optionsstrategien und auf Kalenderspreads basierende Systeme eine solide theoretische Basis aufweisen, die klar angibt, was getan werden muss, um Gewinn zu machen, sind die Algorithmen, die auf Preisanalyse und Fundamentaldaten basieren, viel unklarer. In diesem Bereich gibt es keine vollwertige theoretische Basis, die die Preisbildung beschreiben würde, was es extrem schwierig macht, einen stabilen Handelsalgorithmus zu erstellen. Handeln wird hier zur Kunst, während die Wissenschaft hilft, alles zu systematisieren.

Aber ist es möglich, einen vollautomatischen Handelsalgorithmus zu erstellen, der nur auf der Analyse von Preisänderungen basiert und für jedes Handelsinstrument ohne Optimierung funktioniert, ohne dass die Parameter für jedes Handelsinstrument einzeln manuell angepasst werden müssen? Gibt es einen Algorithmus, den man einfach auf den Chart eines notwendigen Handelsinstruments anwenden kann, so dass er sofort profitable Parameter für dieses Instrument definiert? 

Ist es möglich, dass ein Algorithmus unabhängig von den Marktveränderungen nicht verliert? Ich glaube, es ist möglich, wenn auch schwer zu erreichen. Es gibt zwei Möglichkeiten, dieses Problem zu lösen:

  1. Man verwendet neuronale Netzwerke mit maschinellem Lernen und erhält eine "Black Box", die den Markt analysiert und nach ihren eigenen Kriterien Gewinn macht. Trotz der scheinbaren Offensichtlichkeit und Attraktivität dieses Ansatzes, hat er seine eigenen Komplexitäten. Wenn es so einfach wäre, dann hätten Unternehmen wie Google und Yandex mit ihrer großen Erfahrung im Umgang mit maschinellem Lernen und großen Budgets dieses Problem schon längst gelöst oder wären zumindest führend in der Analyse von Marktdaten und der Qualität von Prognosen. Ich glaube, es ist möglich, einen solchen Algorithmus zu erstellen. Er sollte mit der Entwicklung der Technologie ständig verfeinert werden, um wettbewerbsfähig zu bleiben. Schließlich werden Sie mit Tech-Giganten konkurrieren müssen.
  2. Studieren wir die Preismuster, entwickeln ein theoretisches Modell der Preisbildung und erstellen einen Algorithmus, der so viele Faktoren, die die Preisbildung beeinflussen, wie möglich berücksichtigt. Meiner Meinung nach ist diese Methode sogar noch komplizierter als maschinelles Lernen, aber ich denke, dass sie auch realistisch ist. Ein solcher Algorithmus wird sich mit der Entwicklung des theoretischen Hintergrunds und des Wissens der Entwickler verbessern. Außerdem wird er ständig modernisiert werden müssen.

Ich habe mich für die zweite Methode entschieden, nämlich die Erstellung einer vollwertigen Theorie und die Entwicklung eines darauf basierenden Algorithmus. Ich werde den Algorithmus in einer Reihe von Artikeln entwickeln, die sich von einem kleinen Muster bis zu einem großen Projekt bewegen. Außerdem werde ich zeigen, wie man Muster findet und untersucht und dabei die Arbeitseffizienz verbessert.

Der erste Algorithmus wird nur für FOREX und das Terminal MetaTrader 4 entwickelt werden. Im Laufe der Zeit soll er sich zu einem universellen Algorithmus für MetaTrader 5 entwickeln, der sowohl in FOREX als auch an Börsen funktioniert.

Grundmuster

Beginnen wir mit der Suche nach dem Grundmuster, das die Basis des Algorithmus bilden wird. Dieses Muster sollte grundlegend und den meisten Märkten inhärent sein, um es in Zukunft leicht auf jeden Markt skalieren zu können. Die Skalierbarkeit für jeden Markt deutet darauf hin, dass der Algorithmus wirklich selbstanpassend ist.

Lassen Sie uns zunächst versuchen zu definieren, warum es schwierig ist, auf dem Markt konstant zu verdienen. Es dreht sich alles um den direkten Wettbewerb. Die Aufgabe einiger Händler ist es, ein profitables Geschäft mit anderen abzuschließen, aber das Problem ist, dass jede der Parteien ein profitables Geschäft abschließen möchte und jemand definitiv einen Verlust erleidet. Deshalb sollte der Markt keine stabilen einfachen Muster haben, die jeder erkennen kann.

In meinem ersten Artikel "Diskretisierung von Preisreihen, Zufallskomponente und das Rauschen" schrieb ich über eine Zufallskomponente im Markt und die Tatsache, dass die Verteilung der Inkremente einer Preisreihe der Verteilung der Inkremente eines Random Walk sehr ähnlich ist. Auf den ersten Blick scheint die Preisreihe keine Muster zu haben, alles passiert zufällig und es ist unmöglich, damit stabil Geld zu verdienen.

Deshalb habe ich als Grundregel angenommen, dass es für jedes Instrument genau die gleiche Anzahl von steigenden Kerzen gibt wie von fallenden. Dies ist ein sehr einfaches Muster, und jede Abweichung davon führt zu stabilen Gewinnen für jeden, der es bemerkt. Ich denke, viele werden es bemerken, da es so einfach ist. Aber wie wir wissen, ist es unmöglich für jeden, Geld zu verdienen, deshalb kann es auf lange Sicht keine signifikante Änderung der Anzahl der fallenden Kerzen von der Anzahl der wachsenden geben. Dies wird in dem erwähnten Artikel implizit festgestellt. Theoretisch kann es Abweichungen von dieser Regel geben, denn ich habe nicht alle Tools geprüft, sondern nur etwa hundert. Das ist aber in diesem Stadium nicht so wichtig. 

Nehmen wir zum Beispiel 100.000 GBPUSD H1-Kerzen eines beliebigen Zeitraums und berechnen, wie viele davon steigen und wie viele fallen. Ich habe den Zeitraum von 100.000 Kerzen von 2020.10.27 bis in die Vergangenheit genommen. Der Zeitraum enthält 50.007 Auf- und 48.633 Abwärtskerzen. Bei den restlichen Kerzen ist der Eröffnungspreis gleich dem Schlusspreis. Mit anderen Worten, GBPUSD weist 50,7% Auf- und 49,3% Abwärtskerzen auf, die restlichen Kerzen haben Open = Close. Die Werte sind ungefähr gleich. Wenn wir eine größere Stichprobe nehmen, wird das Ergebnis gegen 50% tendieren.

Ich werde im Rahmen dieses Artikels nicht jedes Instrument messen. Ich habe hunderte von Instrumenten beobachtet und die Ergebnisse waren überall ähnlich. Aber um überzeugend zu sein, nehmen wir ein Instrument aus einem ganz anderen Markt GAZP (Gazprom) M15 und messen die Anzahl Auf- und Abwärtskerzen der 99.914 Kerzen. Das Ergebnis zeit 48.237 Auf- und 48.831 Abwärtskerzen. Die restlichen Kerzen sind neutral. Wie Sie sehen können, ist die Anzahl der Auf- und Abwärtskerzen ungefähr gleich.

Dieses Muster ist nicht nur auf einer großen Anzahl von Instrumenten vorhanden, sondern bleibt auch auf jedem Zeitrahmen erhalten. Um sich dessen zu vergewissern, lassen Sie uns GBPUSD M1 analysieren und die stetig wachsende AAPL Aktie auf M15 nehmen. Ich habe alle Daten in einer Tabelle zusammengefasst.

Symbol Zeitrahmen Gesamtzahl Kerzen Gesamtzahl Aufwärtskerzen Gesamtzahl Abwärtskerzen
GBPUSD M1 100,000 50.25% 49.74%
GBPUSD H1 100,125 50.69% 49.30%
GAZP M15 99,914 49.69% 50.30%
 AAPL  M15  57,645 50.60% 49.40%

Laut der Tabelle tendiert das Verhältnis von steigenden zu fallenden Kerzen bei den betrachteten Instrumenten gegen 50% und gilt für alle betrachteten Zeitrahmen. Die XLSX-Datei, die die in meinen Messungen verwendeten Daten sowie die Ergebnisse enthält, ist unten angehängt.

Die in der Tabelle dargestellten Ergebnisse bestätigen die Schlussfolgerung, dass die statistischen Parameter der Preisreihen über eine große Anzahl von Stichproben den Random-Walk-Parametern sehr ähnlich sind. Außerdem wird es bei einer kleinen Anzahl von Stichproben Abweichungen von der Referenzverteilung geben. Der Algorithmus wird auf der Annahme basieren, dass die Verteilung der Inkremente für die Preisreihe nur oberflächlich der Normalverteilung ähnelt.

Bei einer geringen Anzahl von Stichproben weicht die Form der Verteilung von der Referenzverteilung ab, während mit zunehmender Anzahl von Stichproben die Form zur Referenzverteilung tendiert. Am wichtigsten ist, dass die Geschwindigkeit, mit der sich die Verteilung der Referenz annähert, für jedes Instrument individuell ist und recht stabil ist. 

Verteilung

Abbildung 1

Abbildung 1 visualisiert das oben Beschriebene. Die Referenzverteilung der Inkremente ist in rot dargestellt, während die Verteilung der Inkremente für eine Preisreihe mit einer großen Anzahl von Stichproben in schwarz dargestellt ist. Die Verteilung von Preisreiheninkrementen bei einer kleinen Anzahl von Stichproben ist in violett, grün und blau dargestellt.

Die fundamentale Regelmäßigkeit, die einer großen Anzahl von Handelsinstrumenten innewohnt, wurde gefunden und eine Vermutung, wo man nach einem Gewinn suchen sollte, wurde aufgestellt. Die Anzahl der Abwärtskerzen = die Anzahl der Aufwärtskerzen, und wenn eine Abweichung vom Gleichgewicht auftritt, ist die Rate der Rückkehr zum Gleichgewicht für jedes Instrument individuell, stabil und schwankt innerhalb bestimmter Grenzen. Ich werde dieses Muster nutzen, um einen Gewinn zu erzielen.

Entwickeln eines Testalgorithmus

Jetzt müssen wir den einfachsten Algorithmus entwickeln, der dieses Muster nutzt, und ihn testen, um zu verstehen, ob es sich lohnt, die Theorie weiter zu entwickeln. Die lokale Abweichung der Anzahl der Auf- und Abwärtskerzen von 50% soll für den Handel genutzt werden. Im Durchschnitt ist die Anzahl der Auf- und Abwärtskerzen ungefähr gleich. Das Übergewicht eines Kerzentyps gegenüber einem anderen kann jedoch stark von 50% abweichen, um danach zum Gleichgewicht zu tendieren. Der Algorithmus funktioniert wie folgt:

Allgemeiner, vereinfachter Algorithmus

  • Scannen eines Fenster mit N Kerzen; 
  • Prüfen, welche Kerzen vorherrschend sind — auf- oder abwärts;
  • Aktivieren des Signals zum Starten einer Reihe von Positionen, wenn die Prävalenz den Schwellenwert überschreitet; 
  • Abwärtskerzen sind vorherrschend = Kaufsignal, Aufwärtskerzen sind vorherrschend = Verkauf;
  • Berechnen der Losgröße;
  • Eröffnen einer neuen Position bei jeder folgenden, bis die Serienschlussbedingung ausgelöst wird; 
  • Ausgelöste Serienschlussbedingung;
  • Schließen aller Positionen;
  • Suche nach einem neuen Signal.

Der Algorithmus verwendet der Einfachheit halber Market Orders. Der Algorithmus verwendet nur Schlusskurse, und alle Aktionen werden nach der Bildung einer neuen Kerze ausgeführt. Es ist nicht notwendig, irgendetwas innerhalb der Kerze zu analysieren. Wir müssen nur den aktuellen Gewinn und die Mittel kontrollieren. Alle anderen Berechnungen sind unnötig.

Signal zur Positionseröffnung

  1. Analyse-Fenster. Festlegen der Anzahl der Kerzen (Analysefenster), um den aktuellen Prozentsatz der abwärts und aufwärts gerichteten Kerzen zu überprüfen. Die Analyse einer festen Anzahl von Kerzen ist keine gute Idee, da es längere oder kürzere Abschnitte mit Abweichungen von 50% oder mehr geben kann. Festlegen des Analysefensters von der minimalen bis zur maximalen Anzahl der Kerzen, wobei eine größere Anzahl von Kerzen Vorrang hat, da ein kleiner Bereich Teil eines großen sein kann, aber den gesamten Bereich erfassen soll. Das Analysefenster wird durch die Parameter MinBars und MaxBars festgelegt. Der Algorithmus sucht nach dem Überwiegen der Auf- und Abwärtskerzen im Bereich von MinBars bis MaxBars. Sobald er gefunden wird, wählt der Algorithmus die maximale Anzahl von Kerzen mit einem Übergewicht an abwärts oder aufwärts gerichteten Kerzen über dem Schwellenwert aus.
  2. Der Prozentsatz des Schwellenwertüberschusses für die Eröffnung einer Position. Wir müssen definieren, welcher Überschussprozentsatz an abwärts oder aufwärts gerichteten Kerzen als Schwellenwert für die Signalerzeugung angesehen werden kann. Dieser Parameter kann durch Optimierung ausgewählt werden. Die Einstellungen weisen den Parameter OpenPerc auf. Er wird in Prozent eingestellt und ist der prozentuale Wert für die Eröffnung. Wenn der Prozentsatz der Abwärtskerzen in der Stichprobe größer oder gleich dem Eröffnungsprozentsatz ist, wird Kaufen geöffnet. Wenn der Prozentsatz der Aufwärtskerzen in der Stichprobe größer oder gleich dem Eröffnungsprozentsatz ist, öffnen Sie Sell. 
  3. Bereichsaufzählung. Wir müssen die Kerzen aus dem Bereich mit einem gewissen Schritt analysieren. Ein ungerader Schritt ist nicht geeignet, da er unweigerlich eine Abweichung von 50% aufweist, die ein falsches Einstiegssignal liefert, deshalb kann der Schritt für die Überprüfung des Bereichs in den Einstellungen gefunden werden (Parameter Schritt). Die Aufzählung des Bereichs erfolgt vom kleinsten zum größten.

Maximale Anzahl von Positionen in einer Serie

Während des Handels wird eine Position mit einer Reihe von Aufträgen gefüllt, daher müssen wir die maximale Anzahl der Positionen begrenzen. Dazu müssen wir die Anzahl der Kerzen berechnen, bei denen der Überschuss auf 50 % begradigt werden kann. Wir verwenden die Stichprobe, die den Start der Serie ausgelöst hat (bestehend aus N Kerzen), berechnen die Anzahl der dominanten Kerzen, subtrahieren die restlichen Kerzen davon, addieren sie zur Anzahl der Kerzen in der anfänglichen Stichprobe und multiplizieren sie mit dem Anpassungsfaktor К. Das К-Verhältnis ist indirekt mit den statistischen Eigenschaften des Instruments verknüpft.

So erhalten wir die erwartete Anzahl von Kerzen, bei der die Abweichung von 50 % verschwinden sollte.

R = (N+NB-NM)*K
N - Anzahl der Kerzen in der Stichprobe, die einen Überschuss über dem Schwellenwert aufweisen
NB - Anzahl der dominanten Kerzen
NM - Anzahl der verbleibenden Kerzen
K - in den Einstellungen definierter Anpassungsfaktor

Als Nächstes müssen wir die maximale Anzahl der Positionen berechnen, die der Roboter öffnen soll. Dazu müssen wir die Anzahl der Kerzen in der Anfangsprobe N von der Gesamtzahl der Kerzen R subtrahieren. Das Ergebnis ist die maximale Anzahl der Positionen E, die der Roboter in der Serie nicht überschreiten soll.

E = R-N
Е - maximale Anzahl der Positionen in der Serie
R - Gesamtzahl der Kerzen, bei denen die Rückkehr auf 50% geplant ist

Dieser Algorithmus ist noch nicht selbstanpassend, aber die ersten Schritte werden gemacht und die Anzahl der Positionen wird aus der Anzahl der Kerzen in der Anfangsprobe angepasst.

Auswahl der Losgröße

Der Algorithmus wurde erstellt, um das Muster zu prüfen. Daher müssen wir mehrere Einstellungen hinzufügen, um die Losgröße zu bestimmen. Nehmen wir an, dass die Losgröße von der erwarteten Anzahl der Positionen in der Serie abhängt. Je mehr Positionen in der Serie, desto kleiner das Los. Fügen Sie dazu zwei Einstellungen hinzu: Depo und RiskPerc. Der Einfachheit halber nehmen wir an, dass $1000 = lot ($500=0,5 lot). Nehmen Sie den Wert aus der Depo-Einstellung und multiplizieren Sie ihn mit RiskPerc. Teilen Sie den erhaltenen Wert durch die maximale Anzahl der Positionen E und runden Sie ihn auf den nächsten richtigen Wert. So erhalten wir die Losgröße einer Position.

Wir müssen die Funktion zur automatischen Erhöhung des Loses hinzufügen, wenn das Depot wächst. In diesem Fall, wenn Depo = 0 ist, wird der aktuelle Depotwert mit RiskPerc multipliziert und die Losgröße für das Eröffnen von Positionen wird mit dem erhaltenen Wert gefunden.

Positionen schließen

Das Schließen erfolgt in mehreren Fällen:

1) Der Gesamtgewinn der offenen Positionen erreicht die in CloseProfit eingestellten Werte. Da die Anzahl der vom EA geöffneten Positionen nicht konstant ist und sich die Losgröße ändern kann, wäre es falsch, den festen Gewinn in USD einzustellen. Wir brauchen den USD-Gewinn in Abhängigkeit von der aktuellen Anzahl der offenen Positionen und der gesamten Lotgröße im Markt. Dazu benötigen wir ein Konzept des "Gewinns pro Losgröße".

Die Einstellung von CloseProfit legt den Gewinn für die Gesamtposition von 1 Losgröße fest, und der Roboter berechnet den Gewinn für die Anzahl der offenen Lots neu. Wenn wir 10 offene Positionen zu je 0,01 lot haben, ist das Gesamtlot 0,1. Um also den Gewinnwert für das Schließen einer Position zu erhalten, ist Profit = CloseProfit * 0.1. Passen wir den Gewinn zum Schließen von Positionen jedes Mal an, wenn sich die Anzahl der Positionen ändert. Als Ergebnis, wenn der Gesamtgewinn größer oder gleich dem berechneten Profit-Wert wird, schließt der EA Positionen.

2) Wenn der aktuelle Überschussprozentsatz kleiner oder gleich dem Wert von ClosePerc wird. ClosePerc legt den Überschussprozentsatz der aktuellen Kerzen fest, um ein Signal zum Schließen der Positionsreihe zu erzeugen. Als die erste Position eröffnet wurde, wurde der Überschuss bei der Anzahl N von Kerzen festgestellt. Jetzt, mit jeder neuen Kerze, erhöht sich die Anzahl der Kerzen zu N+1; N+2; N+3 usw... Mit jeder neuen Kerze müssen wir den aktuellen Überschussprozentsatz der vorherrschenden Blöcke auf einer Probe prüfen, wobei die Anzahl der Kerzen um 1 zunimmt. Die Serie wird beendet, wenn die Bedingung erfüllt ist.

3) Bei Erreichen von MinEquity. Wenn der aktuelle Fonds unter den eingestellten Wert gefallen ist, müssen Sie die offene Serie beenden und vermeiden, neue zu öffnen, bis der Fonds steigt. Dies ist die Stop-Loss-Funktion, die das Depot vor Verlusten schützt.

Test

Der Algorithmus ist recht primitiv. Er ist nicht in der Lage, sich an veränderte Marktbedingungen anzupassen und dient nur zur Überprüfung der Durchführbarkeit der Idee. Daher werde ich die Einstellungen mithilfe einer Optimierung auswählen. Die Optimierung soll durch Aufzählung aller Optionen ohne genetischen Algorithmus erfolgen. Der EA wurde im Jahr 2014 entwickelt und für MetaTrader 4 erstellt. Ich werde ihn zunächst auf GBPUSD H1 testen. Ich werde einen künstlich hohen Spread von 40 einstellen, damit die Optimierung unter nicht perfekten Bedingungen durchgeführt wird, um eine gewisse Marge an Stabilität in der Zukunft zu gewährleisten. Ein erhöhter Spread wird benötigt, weil der EA den aktuellen Gewinn auf offenen Positionen kontrolliert und durch den Spread beeinflusst wird.

Ich werde nur drei Bedingungen optimieren: die minimale Anzahl von Kerzen MinBars, den Prozentsatz für offene Positionen OpenPerc und den Gewinn pro Lot CloseProfit. Vermutlich werden die Signale umso zuverlässiger, aber weniger häufig sein, je größer die Mindestanzahl der Kerzen für die Analyse und je höher der Prozentsatz für die Eröffnung ist. CloseProfit hängt indirekt von der Volatilität ab. Daher müssen Sie sich vor der Optimierung die Volatilität des Instruments ansehen und einen angemessenen Bereich festlegen. Die Optimierung soll für das Jahr vom 25.11.2019 bis zum 25.11.2020 auf H1 durchgeführt werden.

Optimierung von GBPUSD

Bild 2. Die Optimierungsergebnisse

Die Brute-Force-Optimierung ist notwendig, um zu sehen, wie sich die Parameter auf das Ergebnis auswirken und wie die Ergebnisse mit den Annahmen darüber konvergieren, wie der Algorithmus in der Theorie funktionieren sollte. Abbildung 2 zeigt einige der Ergebnisse. Wir müssen die Sortierung nach maximalem Gewinn aktivieren und die Einstellungen auswählen, die die geeignetsten Indikatoren für Drawdown und Profitabilität haben. Die markierten Einstellungen scheinen in Ordnung zu sein.

Die weitere Analyse der Optimierungsergebnisse zeigt, dass eine Erhöhung von MinBars und OpenPercent die Profitabilität und den Drawdown reduziert. Als Nächstes habe ich die hervorgehobenen Parameter genommen, sie innerhalb eines Jahres getestet, Ergebnisse erhalten und definiert, was sich ändert, wenn MinBars und OpenPercent erhöht/verringert werden. Meine Schlussfolgerung ist, dass mit einer Erhöhung von MinBars und OpenPercent die Anzahl der Deals abnimmt und die Zuverlässigkeit des Signals steigt. Das heißt, wir müssen die Balance zwischen Profitabilität und Drawdown finden.

Für den Handel habe ich bewusst konservativere Parameter gewählt, um eine Sicherheitsmarge für wechselnde Marktbedingungen zu gewährleisten. Die folgende Abbildung 3 zeigt, wie der EA Positionen eröffnet.

Der Handel

Abb. 3. Eröffnen von Positionen

Abbildung 3 zeigt, dass eine Position bei Bedarf aus mehreren Positionen besteht. Das Einstiegssignal ist zeitlich gestreckt. Die erste Version des Algorithmus weist ein grobes Signal auf, das an einigen Stellen erheblich in der Zeit gestreckt ist. Es sieht eher aus wie eine unscharfe Eingabe als eine Standard-Mittelung. Dies ist ein Bereich mit unscharfen Grenzen, in dem Abwärtskerzen wahrscheinlicher sind als Aufwärtskerzen. Es ist möglich, aus dieser Wahrscheinlichkeit Profit zu schlagen.

Der Algorithmus bleibt zuverlässig bei MinBars = 70, aber ich setze ihn auf 80, damit es einen Spielraum für Schwankungen in den Eigenschaften des Handelsinstruments gibt. Die Logik ist ähnlich bei der Auswahl des Parameters CloseProfit. Im Beispiel ist er gleich 150. Bei einem geringeren Wert wird der Algorithmus stabiler, aber der Gewinn wird reduziert. Wenn er auf 168 erhöht wird, ist der Algorithmus nicht mehr zuverlässig, deshalb bleibe ich bei 150. Als Ergebnis haben wir den Rentabilitätsgraphen für ein Jahr wie in Abbildung 4 erhalten. CloseProfit ist nichts anderes als die durchschnittliche Volatilität umgerechnet in USD.

GBPUSD 2019 Chart

GBPUSD 2019 Bericht

Abb. 4. GBPUSD H1, 2019.11.25 - 2020.11.25

Die Ersteinlage wird zur Optimierung auf 10.000 $ gesetzt. Nach Abschluss der Untersuchung können wir die Summe wieder auf den optimalen Wert setzen. Der Test und die Optimierung wurden im Modus "Referenzpunkt" durchgeführt, weil der Algorithmus auf Schlusskursen arbeitet, so dass die Ereignisse innerhalb einer Kerze für ihn keine Bedeutung haben. Abbildung 5 zeigt den Test für den gleichen Zeitraum im Modus "Jeder Tick".

GBPUSD Ticks 2019 Chart

GBPUSD Ticks 2019 Bericht

Bild 5. GBPUSD H1, 2019.11.25 - 2020.11.25 Modus "Jeder Tick"

Laut Bild 5 hat sich der Gewinn im Modus "Jedem Tick" sogar leicht erhöht, weil der Test genauer geworden ist. Die Profitabilitätskurve bleibt fast vollständig gleich. Beide Tests haben einen hervorragenden Gewinnfaktor von knapp über fünf ergeben.

Es wäre falsch, aus den Tests für ein einziges optimiertes Jahr Rückschlüsse auf die Zuverlässigkeit des Musters zu ziehen, daher wollen wir sehen, wie viele Jahre der Algorithmus mit diesen Parametern in der Vergangenheit durchhält. Abbildung 6 zeigt das Testergebnis außerhalb des optimierten Zeitraums.

GBPUSD 2001 Chart

GBPUSD Bericht 2001

Bild 6. GBPUSD H1, 2001.01.01 - 2020.11.25

Abbildung 6 zeigt den Backtest seit 2001 mit denselben Parametern, die während der einjährigen Optimierung vom 25.11.2019 bis zum 25.11.2020 ermittelt wurden. Der Test zeigt, dass sich der Drawdown bei einem so großen Intervall nur um ein paar Dollar erhöht hat, während der Gewinn deutlich gestiegen ist und der Gewinnfaktor auf 7,5 gestiegen ist. Der Test wurde für die Einlage von $3000 ohne Refinanzierung durchgeführt, um zu verstehen, wie sich das Muster über lange Zeiträume verhält. 

Die Tatsache, dass die Optimierung in einem Jahr durchgeführt wurde, während der Algorithmus ein stabiles Ergebnis für 20 Jahre zeigt, deutet darauf hin, dass das Muster ziemlich stabil ist und die Parameter nicht an die Geschichte angepasst werden. Aus irgendeinem Grund weicht das GBPUSD-Paar nicht stark von seinen inhärenten statistischen Eigenschaften ab. 

Es wäre falsch, Schlussfolgerungen auf der Grundlage des Tests eines einzelnen Währungspaares und Zeitrahmens zu ziehen. Lassen Sie uns daher die Tests für EURUSD betrachten. Wie im vorherigen Fall wurde die Optimierung in einem Jahr vom 2019.11.25 bis 2020.11.25 auf H1 durchgeführt. Bei der Wahl der Parameter bin ich genauso vorgegangen wie im vorherigen Fall. Die Ergebnisse sind in Abbildung 7 dargestellt.

EURUSD 2019 Chart

EURUSD 2019 Bericht

Bild 7. EURUSD H1, 2019.11.25 - 2020.11.25

Wie wir in Abbildung 7 sehen können, ist die Rentabilität bei EURUSD niedriger als bei GBPUSD, während der Drawdown etwas größer ist. Das Profitabilitätsdiagramm zeigt, dass es ein Segment mit mehreren geöffneten Positionen gab. Nachdem wir die Parameter MinBars und OpenPercent, leicht verschärft haben, können wir die Anzahl der Positionen und damit den Drawdown reduzieren. Kommen wir nun zum Test der langen Periode. Abbildung 8 zeigt den Test von EURUSD vom 2007.01.01 bis 2020.11.25.

EURUSD Chart 2007

EURUSD 2007 Bericht

Abbildung 8. EURUSD H1, 2007.01.01 - 2020.11.25

Der Handel mit EURUSD ist im Vergleich zu GBPUSD nicht so stabil. Der Zeitraum der stabilen Arbeit mit den weiter zurückliegenden Daten hat sich als sechs Jahre weniger herausgestellt. Das Ergebnis ist immer noch gut. Die Optimierung der Parameter wurde in einem Jahr durchgeführt, und die stabile Arbeit dauerte fast 14 Jahre. Diese Tatsache deutet wiederum darauf hin, dass die Parameter nicht einfach an die Historie angepasst wurden und das Handelsinstrument ein recht stabiles Muster aufweist.

Als Nächstes müssen wir prüfen, wie sich der Algorithmus auf anderen Zeitrahmen verhält. Theoretisch sollte mit einer Verringerung des Zeitrahmens die Stabilität abnehmen, da die Größe der Kerzen auf einem niedrigeren Zeitrahmen im Verhältnis zum Spread deutlich abnimmt. Folglich wird es weniger Gewinn und mehr Handelskosten geben. Außerdem kann auf kleineren Zeitrahmen der Einstiegspunkt mit der Zeit noch mehr gedehnt werden, was zu mehr offenen Positionen und dementsprechend zu größeren Drawdowns führt.

Lassen Sie uns einen Test auf GBPUSD M15 durchführen. Wie im vorherigen Fall soll die Optimierung für das Jahr vom 2019.11.25 bis 2020.11.25 durchgeführt werden. Aber ich werde die Optimierungskurve nicht für ein Jahr anzeigen. Stattdessen werde ich das größtmögliche Intervall anzeigen, das der Algorithmus reibungslos durchlaufen kann.

GBPUSD M15 Chart

Abb. 9. GBPUSD m15 2000.01.01-2020.11.25

Abbildung 9 zeigt den Test von GBPUSD M15, der ab dem Jahr 2000 durchgeführt wurde. Aber die Anzahl der Einstiegssignale und Positionen ist klein. Wie ich oben schrieb, zeigt der untere Zeitrahmen weniger Stabilität, und die Einstellungen erweisen sich als sehr konservativ. Das Einstiegssignal wird selten generiert, die Profitabilität ist nicht hoch, aber im Verhältnis zum Drawdown angemessen.

Als Nächstes wollen wir den Test auf dem höheren Zeitrahmen GBPUSD H4 durchführen. H4 hat wenige Kerzen für die Optimierung. Deshalb werde ich die Optimierung auf einem zweijährigen Segment von 2018.11.25 bis 2020.11.25 durchführen. Das Ergebnis wird auf dem maximalen Intervall angezeigt.

GBPUSD H4

GBPUSD H4 Bericht

Abbildung 10. GBPUSD H4 2000.01.01-2020.11.25

H4 zeigt ein stabiles Ergebnis über fast 20 Jahre von 2000.01.01 bis 2020.11.25. Wie in den vorherigen Fällen läuft die gesamte Optimierung darauf hinaus, die Balance zwischen Gewinn und Zuverlässigkeit zu finden. Die konservativen Einstellungen aus M15 arbeiten sowohl auf H1 als auch auf H4 zuverlässig. Dort machen sie aber aufgrund der sehr seltenen Signale und der geringen Anzahl von Abschlüssen keinen Sinn.

Sie können auch jedes andere Handelsinstrument testen. Je nach Symbol arbeitet der Algorithmus besser oder schlechter. Aber der Trend setzt sich fort — eine einjährige Optimierung ermöglicht eine stabile Arbeit für mehrere Jahre. Unten sind die Ergebnisse für GBPJPY H1. Die Optimierung wurde für ein Jahr durchgeführt, das Ergebnis ist in Abbildung 11 dargestellt.

GBPJPY Chart

GBPGPY Bericht

Abb. 11. GBPJPY 2009.01.01 - 2020.11.25

GBPJPY zeigt einen stabilen Backtest seit 2009. Das Ergebnis ist nicht so beeindruckend wie im Fall von GBPUSD, aber es funktioniert. 

Der EA bietet die Möglichkeit, die verdienten Gelder zu re-investieren. Sie müssen das nutzen. Bis jetzt habe ich die Tests mit konservativen Einstellungen gezeigt. Aber was ist, wenn wir sehr aggressive Einstellungen setzen und eine Lot-Erhöhung ermöglichen? Ich bin kein Fan von hohen Risiken, aber lassen Sie uns sehen, wozu der Algorithmus fähig ist. Ich werde den Test auf GBPUSD von 2006.01.01 bis 2020.11.25 im Modus "Jeder Tick" durchführen. Natürlich ist es möglich, ein anderes Symbol zu testen. Der Spread ist auf 20 reduziert. Dies liegt leicht über dem Durchschnitt. Abbildung 12 zeigt das Backtest-Ergebnis für fast 15 Jahre.


GBPUSD maximales Risiko

Abb. 12. GBPUSD von 2006.01.01 bis 2020.11.25, aggressive Einstellungen

Wie Sie sich vielleicht erinnern, verwendet der Algorithmus die Schlusskurse. Daher ist dieses Ergebnis kein "Testgral". Außerdem ist der angemessene Spread von 20 eingestellt. Das Handelsergebnis des Algorithmus auf dem realen Markt stimmt in der Regel mit dem im Tester erzielten Ergebnis überein. Ich habe nie mit solch aggressiven Einstellungen gehandelt. Außerdem ist es unmöglich, reale Spreads im MetaTrader 4 zu berücksichtigen, daher werde ich nicht behaupten, dass er diese Zeitspanne auch im realen Handel bestanden hätte.

Die Analyse der Ergebnisse

Der EA ist einfach und leicht zu optimieren. Die Optimierung für einen kurzen Zeitraum und die Verwendung von nicht-optimalen Parametern im Voraus ermöglichen es, dass er mehrere Jahre, manchmal sogar Dutzende von Jahren, stabil bleibt. Dies deutet darauf hin, dass das gefundene Muster nicht zufällig ist und wirklich auf dem Markt vorhanden ist. Allerdings ist der Algorithmus recht "starr", da er wenige Freiheitsgrade hat und mit starr vorgegebenen Parametern arbeitet. Wenn eine Preisreihe über die Fähigkeiten des Algorithmus hinausgeht, dann verliert er sofort seine Stabilität. 

Am wichtigsten ist, dass er auf jedem Zeitrahmen verwendet werden kann, beginnend mit dem, dessen Kerzengröße den Spread und die Kommission deutlich übersteigt. Wird der Zeitrahmen erhöht, wächst die Stabilität bis zum Tages-Zeitrahmen. Allerdings steigen auch die Anforderungen an die Ersteinlage, da die Kerzengröße signifikant wird und große Drawdowns verursacht.

Wir können feststellen, dass die Preisreihe nur oberflächlich einem Random Walk ähnelt, wie ich ihn in meinem ersten Artikel "Diskretisierung von Preisreihen, Zufallskomponente und das Rauschen" beschrieben habe. Die Preisreihe enthält mindestens ein verstecktes Muster.

Auf der anderen Seite kenne und verstehe ich das Muster, das es ermöglicht, Gewinne zu erzielen, was bedeutet, dass es Zeit für eine ernsthafte Modernisierung ist.

Verwendung im Handel

Der große Nachteil des aktuellen Algorithmus ist seine geringe Rendite im Verhältnis zum Risiko. Wir müssen ehrlich zu uns selbst sein und verstehen, dass es Risiken gibt (so wie überall sonst auch). Aber während die Entwicklung von Verbesserungen im Gange ist, können wir den EA für den Handel verwenden. Um dies zu tun, müssen wir seine Profitabilität erhöhen und das Drawdown-Niveau beibehalten. Es ist notwendig, die Funktionen des Algorithmus zu nutzen. Er generiert nur selten Signale für Handelsinstrumente, und in der Regel sind sie für verschiedene Handelsinstrumente zeitlich deutlich voneinander entfernt. Die meiste Zeit findet kein Handel mit dem Instrument statt. Wir müssen diese "Ausfallzeiten" füllen. 

In der Regel gibt es keine stabile Korrelation der Signale für verschiedene Instrumente. Wir sollten diese Funktion nutzen, um den Gewinn zu erhöhen und gleichzeitig das Drawdown-Niveau zu halten.

Um die Profitabilität zu erhöhen, müssen wir mehrere Instrumente gleichzeitig analysieren. Wenn ein Signal für eines der Instrumente erscheint, öffnen Sie Positionen für dieses Instrument. Wenn Positionen für ein Instrument geöffnet werden, ignorieren Sie die Serienstartsignale von anderen Symbolen. Das erlaubt, die Zeit so effizient wie möglich zu nutzen, die Anzahl der Signale zu erhöhen und dementsprechend den Gewinn proportional zu steigern. Der maximale Drawdown bleibt auf der Ebene eines Instruments.

Serien-Startsignale sind schwach korreliert, nicht nur zwischen unabhängigen Symbolen, sondern auch zwischen verschiedenen Zeitrahmen desselben Symbols. Daher ist es möglich, die Zeit noch effizienter zu nutzen und eine Situation zu erreichen, in der es fast immer offene Positionen auf dem Markt gibt, indem drei Zeitrahmen desselben Symbols im Handel verwendet werden. Das Drawdown-Niveau bleibt auf demselben Niveau, während der Gewinn deutlich wächst.

Für die Arbeit auf realen Konten wurden mehrere Änderungen vorgenommen:

1) Hinzufügen von neun neuen unabhängigen Handelsinstrumenten, jedes mit seinen eigenen Parametern. Dies ermöglicht dem Algorithmus, 10 Handelsinstrumente gleichzeitig zu analysieren und zu handeln. Es ist möglich, die Parameter für jedes Instrument bis zu einem gewissen Grad zu optimieren, daher erscheint die Entscheidung logisch.

2) Begrenztes gleichzeitiges Eröffnen von Positionen für mehrere Handelsinstrumente. Dazu wird der Parameter MaxSeries hinzugefügt. Wenn er auf 1 gesetzt ist, wird der Handel nur für ein Instrument durchgeführt. Wenn 2, können Positionen gleichzeitig auf zwei Instrumenten geöffnet werden, und so weiter. Dadurch wird es dem EA ermöglicht, häufiger Positionseröffnungssignale zu generieren und seine "freie Zeit" zu nutzen. Der Gewinn wird proportional erhöht, während der maximale Drawdown auf dem Niveau von einem Instrument bleibt.

MetaTrader 4 ist nicht in der Lage, Multi-Währungs-Tests durchzuführen. Aber wenn mehr als ein Symbol gehandelt wird, erhöht sich der Drawdown wahrscheinlich proportional zur Quadratwurzel der Anzahl der gleichzeitig gehandelten Instrumente, vorausgesetzt, dass es keine Korrelation zwischen den Signalen verschiedener Instrumente gibt. Wenn wir einen Drawdown von $1000 erwarten, dann können wir beim gleichzeitigen Handel von drei Instrumenten einen Anstieg des Drawdowns auf das Niveau von $1000*Wurzel(3)=$1732 erwarten.

3) Es wurde eine Begrenzung für die Mindestanzahl von "MinEquity" Fonds hinzugefügt. Bei Erreichen dieses Wertes wird der Handel gestoppt und die Positionen geschlossen. Dies ist notwendig, um die Risiken planen und einhalten zu können.

4) Der EA kann auf mehreren Zeitrahmen gleichzeitig eingesetzt werden, um die Profitabilität zu erhöhen. Meinen Tests zufolge haben die Positionseröffnungssignale in der Regel eine Korrelation zwischen verschiedenen Zeitrahmen, auch wenn diese bei weitem nicht 100% ist.

Ich habe den EA für den Handel auf 25 Währungspaaren sowie auf H1- und H4-Zeitrahmen gleichzeitig mit konservativen Einstellungen verwendet und es geschafft, die Profitabilität bei 10% pro Monat zu halten. Auf einem anderen Konto, mit etwas aggressiveren Einstellungen, gelang es mir, eine Profitabilität von 15% pro Monat zu erreichen. Es gab eine Menge von Positionen.

Schlussfolgerungen und weitere Entwicklung

  • Es wurde eine unkonventionelle Handelsmethode gefunden.
  • Das gewählte Grundmuster hat sich als universell erwiesen und ist bei den getesteten Handelsinstrumenten vorhanden.
  • Das Muster ist einfach und klar. Wir müssen die Gründe für sein Auftreten untersuchen und Wege zur Verbesserung der Signalqualität entwickeln.
  • Der Algorithmus ist perfekt optimiert und bleibt für eine lange Zeit stabil.
  • Der Einstiegspunkt ist zeitlich stark gestreckt. Wir müssen an einer besseren Lokalisierung des Signals zur Positionseröffnung arbeiten.
  • Unberücksichtigte Faktoren führen zu einem Verlust der Stabilität des Algorithmus mit der Zeit.
  • Es ist notwendig, die Entwicklung des theoretischen Modells fortzusetzen, um die Anzahl der nicht berücksichtigten Faktoren mit jeder neuen Version zu reduzieren und somit alle möglichen Faktoren, die das Muster beeinflussen, zu berücksichtigen.
  • Die nächste Version des Algorithmus sollte flexibler werden und bereits damit beginnen, seine Parameter bei Marktveränderungen leicht anzupassen.

Der nächste Artikel soll sich mit Mechanismen beschäftigen, die ich entwickelt habe, um die Zuverlässigkeit und Flexibilität des Algorithmus zu verbessern.

Der EA-Code und die entsprechende Anforderungsspezifikation sind unten angehängt.

Der Autor der Idee und der Anforderungsspezifikation ist Maxim Romanov. Der Code wurde von Vyacheslav Ivanov geschrieben.

Übersetzt aus dem Russischen von MetaQuotes Software Corp.
Originalartikel: https://www.mql5.com/ru/articles/8616

Beigefügte Dateien |
50p_V1.mq4 (100.93 KB)
Technical_task.zip (30.59 KB)
AAPL_GAZP_statistics.zip (12989.18 KB)
GBPUSD_statistics.zip (14471.42 KB)
Zeitreihen in der Bibliothek DoEasy (Teil 59): Objekt zum Speichern der Daten eines Ticks Zeitreihen in der Bibliothek DoEasy (Teil 59): Objekt zum Speichern der Daten eines Ticks

Ab diesem Artikel beginnen wir mit der Erstellung von Bibliotheksfunktionen für die Arbeit mit Preisdaten. Heute erstellen wir eine Objektklasse, die alle Preisdaten speichert, die mit einem weiteren Tick angekommen sind.

Neuronale Netze leicht gemacht (Teil 8): Attention-Mechanismen Neuronale Netze leicht gemacht (Teil 8): Attention-Mechanismen

In früheren Artikeln haben wir bereits verschiedene Möglichkeiten zur Organisation neuronaler Netze getestet. Wir haben auch Convolutional Networks (Faltungsnetze) besprochen, die aus Bildverarbeitungsalgorithmen entlehnt sind. In diesem Artikel schlage ich vor, sich den Attention-Mechanismen (Aufmerksamkeitsmechanismus) zuzuwenden, deren Erscheinen der Entwicklung von Sprachmodellen den Anstoß gab.

Neuronale Netze leicht gemacht (Teil 9): Dokumentation der Arbeit Neuronale Netze leicht gemacht (Teil 9): Dokumentation der Arbeit

Wir haben schon einen langen Weg hinter uns und der Code in unserer Bibliothek wird immer umfangreicher. Das macht es schwierig, den Überblick über alle Verbindungen und Abhängigkeiten zu behalten. Daher schlage ich vor, eine Dokumentation für den früher erstellten Code zu erstellen und diese mit jedem neuen Schritt zu aktualisieren. Eine gut vorbereitete Dokumentation wird uns helfen, die Integrität unserer Arbeit zu erkennen.

Der Markt und die Physik seiner globalen Muster Der Markt und die Physik seiner globalen Muster

In diesem Artikel werde ich versuchen, die Annahme zu testen, dass jedes System mit auch nur einem kleinen Verständnis des Marktes auf globaler Ebene funktionieren kann. Ich werde keine Theorien oder Muster erfinden, sondern nur bekannte Fakten verwenden und diese Fakten schrittweise in die Sprache der mathematischen Analyse übersetzen.