Ein wissenschaftlicher Ansatz für die Entwicklung von Handelsalgorithmen

Maxim Romanov | 9 Dezember, 2020

Einführung

Der Finanzmarkthandel ohne ein ordentliches Handelssystem hat alle Chancen, die Einlage des Händlers zu verpulvern. Unabhängig davon, welcher Markt ausgewählt wird - das langfristige Ergebnis wäre für einen unerfahrenen Händler dasselbe. Ein Handelssystem oder ein Algorithmus ist erforderlich, um Gewinne zu erzielen.

Es gibt viele verschiedene Handelssysteme und -algorithmen, einschließlich einer eigenen Kategorie mathematisch profitabler Algorithmen, wie Arbitrage-Strategien, HFT, Optionsstrategien und SPOT-Symbolhandel mit Derivaten. Alle bekannten Algorithmen haben jedoch ihre Nachteile. Sie haben entweder eine geringe Rentabilität oder erfordern einen hohen Wettbewerb um Liquidität und Ausführungsgeschwindigkeit von Aufträgen. Aus diesem Grund versuchen Händler, ihre eigenen Algorithmen zu entwickeln, die auf einer einzigartigen Logik basieren.

In der Regel nutzen die meisten Handelsalgorithmen die Vermögenspreisanalyse, um zukünftige Preise mit einer gewissen Wahrscheinlichkeit vorherzusagen. Andere Algorithmen verwenden nicht nur die Preisanalyse, sondern auch externe Daten und berücksichtigen Fundamental- und Nachrichtenhintergründe, einschließlich der Analyse von Gerüchten.

Das Problem ist, dass nur sehr wenige Menschen genau verstehen, wie man nach Mustern sucht, welche effizient sind und welche nicht und warum. Warum, wenn sie Standardindikatoren oder andere gefundene Indikatoren auf einem Chart gestartet haben, können sie keinen profitablen Algorithmus erhalten. Sie versuchen, die Strategieparameter im Optimierer zu optimieren, um einen Gewinn zu erzielen, aber sie passen die Strategieparameter eigentlich nur an einen kleinen Abschnitt der Geschichte an und erleiden dann in einer Vorwärtsperiode Verluste. Der Optimierer ist ein notwendiges und nützliches Werkzeug, aber er sollte verwendet werden, um optimale Parameter für einen profitablen Algorithmus zu finden, und nicht, um zu versuchen, aus einem verlustreichen System durch Anpassung der Parameter auf historischen Daten ein profitables System zu machen.

Im Gegensatz zu anderen Bereichen entwickelt sich der Handel aufgrund des hohen Wettbewerbs schlecht. Profitable und bahnbrechende Ideen werden in der Regel geheim gehalten und nicht online diskutiert. Während sich unprofitable Ideen oder Ideen, die keinen Gewinn abwerfen, sehr schnell weiter verbreiten. Denn wenn eine Person oder eine Gruppe von Menschen etwas wirklich Lohnenswertes entwickelt, brauchen sie ihre Entwicklungen nicht mit anderen zu teilen - sie monetarisieren ihr Wissen. Wenn sie die Grundlagen ihres Systems enthüllen, schafft dies Konkurrenten, die ebenfalls versuchen werden, sich Liquidität zu verschaffen, die bei weitem nicht unendlich ist. Daher muss jeder, der zum algorithmischen Handel kommt, alle Informationen von Grund auf sammeln und seine eigenen Erfahrungen sammeln. Es kann Jahre dauern, bis man die Grundregeln versteht.

Wegen all dieser Faktoren gibt es beim Handel mehr Aberglauben als wirklich funktionierende Regeln. Wenn es um den wissenschaftlichen Ansatz geht, ist er in allen Bereichen gleich, so dass Sie bei der Entwicklung Ihrer profitablen Algorithmen schneller vorankommen können. Lassen Sie uns daher überlegen, wie wir bei der Entwicklung eines Handelsalgorithmus an einem wissenschaftlichen Ansatz festhalten und Aberglauben vermeiden können. Wir werden in diesem Artikel einige Ideen am Beispiel eines einfachen Handelssystems betrachten.

Suche nach Mustern der Preisbildung

Die Entwicklung eines Handelsalgorithmus sollte mit der Suche nach einem Preisbildungsmuster beginnen, das eine positive mathematische Gewinnerwartung beim Handel ermöglicht. Das Muster kann sich aus einer zuvor entwickelten Preisbildungshypothese ergeben oder durch Zufall gefunden werden. Beide Möglichkeiten kommen in der Wissenschaft häufig vor: einige Erfindungen sind zufällig entstanden, während andere das Ergebnis langfristiger Forschung sind. Der frühere Artikel "Diskretisierung von Preisreihen, Zufallskomponente und das Rauschen" befasste sich mit der Verwendung von Blockdiagrammen und beschrieb die Gründe für deren Verwendung. Ich werde also Blockdiagramme anstelle von Kerzendiagrammen verwenden.

In meinem früheren Artikel mit dem Titel "Was ist ein Trend und basiert die Marktstruktur auf einem Trend oder einer Seitwärtsbewegung?" habe ich eine Definition für das Konzept eines Trends entwickelt und eine Studie darüber durchgeführt, ob die Marktstruktur auf Trend oder einer Seitwärtsbewegung basiert. Ich empfehle Ihnen, diesen Artikel zu lesen, damit Sie weitere Ideen verstehen können.

Die Analyse hat gezeigt, dass die meisten Märkte eine Trendstruktur haben, was bedeutet, dass die Wahrscheinlichkeit einer Trendfortsetzung höher ist als die Wahrscheinlichkeit einer Umkehrung. Dies ergibt sich aus der Tatsache, dass die Verteilungsdichte der Inkremente in N Schritten bei Preisreihen breiter und niedriger ist als bei einem Prozess mit einer 50%igen Wahrscheinlichkeit einer Umkehrung in jedem Schritt. Ein Beispiel ist in Abbildung 1 dargestellt.

Verteilung von AMD

Abb. 1

In dieser Abbildung zeigt Rot die Referenzverteilung der Inkrementwahrscheinlichkeitsdichte für einen Prozess mit 40 Schritten, bei dem die Wahrscheinlichkeit einer Umkehrung bei jedem nächsten Schritt gleich 50% ist. Hier wurde eine Stichprobe von 5000 verwendet. Das weiße Histogramm zeigt die Messwerte für 40 Schritte des AMD-Bestands (wiederum für eine Stichprobe von 5000). Die Anzahl der vertikalen Schritte und die Anzahl der Durchgänge durch den Preis in 40 Schritten wurde für 5000 Messungen berechnet; das Ergebnis wurde als Histogramm dargestellt.

Mit anderen Worten, es wurden 5000 Segmente von 40 Schritten verwendet, um zu berechnen, wie viele Schritte jedes der Segmente vertikal durchlaufen hat, und das Ergebnis wurde als Histogramm angezeigt. Wenn wir als Beispiel die AMD-Aktien (40 Schritte) nehmen, hat der Kurs 0 vertikale Schritte 390 Mal durchlaufen; für die Referenz muss der Kurs 626,85 Mal durchlaufen.

Dieses Chart zeigt, dass der Marktpreis in 40 Schritten viel seltener die 0 vertikalen Schritte passiert hat als bei einem Prozess, bei dem die Wahrscheinlichkeit einer Umkehrung bei jedem nächsten Schritt 50% beträgt. Daher hat das analysierte Chart eine Trendfortsetzungswahrscheinlichkeit von über 50%, und somit wird die Aktie wahrscheinlich den Trend fortsetzen. Mit anderen Worten, wenn der Kurs 10 Punkte überschritten hat, ist es wahrscheinlicher, dass er sich weitere 10 Punkte in die gleiche Richtung bewegt, als dass er sich umkehrt. 

vertikale Schritte
Abbildung 2.

Abbildung 2 zeigt ein Beispiel dafür, wie die Anzahl der vertikalen Schritte gezählt wurde. Hier wird berechnet, wie viele Blöcke der Preis für diese 40 Blöcke (Schritte) vertikal durchlaufen hat. In der obigen Abbildung hat der Preis 7 vertikale Schritte à 40 Schritten durchlaufen. Dann analysieren wir weitere 4999 Stichproben zu je 40 Schritten und messen deren vertikale Bewegung. Die gemessenen Ergebnisse werden als Histogramm dargestellt, in dem die X-Achse eine Amplitude und die Y-Achse die Anzahl der Amplitudenschläge anzeigt.

Analyse des gefundenen Musters

Sobald ein Muster gefunden ist, muss es analysiert werden. Nehmen Sie andere Handelssymbole und Blockgrößenskalen, um zu verstehen, ob das gefundene Muster nur für dieses bestimmte Handelsinstrument mit einer bestimmten Datei typisch ist, oder ob es auf alle Handelsinstrumente in jeder beliebigen Skala zutrifft. In diesem Beispiel habe ich 30 Währungspaare, viele Aktien, die auf dem russischen und US-amerikanischen Markt gehandelt werden, ein Dutzend der wichtigsten Kryptowährungen und Rohstoffsymbole analysiert. Für jedes Symbol wurden alle Skalen mit der Blockgröße von einem Punkt bis zu Tausenden von Punkten verwendet. Nach der Schlussfolgerung der Analyse neigen alle Handelsinstrumente in jeder Skala zu einer trendbasierten Struktur, aber der Trendcharakter schwächt sich mit zunehmender Skala ab.

Es wurden folgende Muster festgestellt: Die Märkte weisen wahrscheinlich in jeder Skala einen Trend auf, aber die Trendstärke schwächt sich in höheren Skalen ab. Das bedeutet, dass nach dem vertikalen Passieren von N Punkten eine Wahrscheinlichkeit von mehr als 50% besteht, dass sich der Preis um die gleiche Distanz in die gleiche Richtung bewegt. Der Vorteil dieses Musters besteht darin, dass es die Verwendung einer einfachen Trendstrategie für den Handel ermöglicht, bei der Sie nach jedem Aufwärtsschritt eine Kaufposition und nach jedem Abwärtsschritt eine Verkaufsposition eröffnen können. 

Danach wird der angewandte Ansatz analysiert. Vielleicht ist dies nicht das Muster, das wir gefunden haben, sondern ein Fehler in der Methode der Marktstrukturanalyse. In diesem Fall haben die Märkte keinen Trend, und wir können aus der obigen Annahme keinen Gewinn erzielen. Wir müssen mit den Grundlagen beginnen und verstehen, wie der Block, in dem wir Trends gefunden haben, aufgebaut ist. Sie können den im vorhergehenden Artikel vorgestellten Blockindikator mit der Überschrift "Was ist ein Trend und basiert die Marktstruktur auf einem Trend oder einer Seitwärtsbewegung?" verwenden. In diesem Fall wird die Preisreihe in Blöcken zu je N Punkten quantisiert ("sliced"). Ein neuer Block von N Punkten wird jedes Mal gebildet, wenn der Preis N Punkte vom vorherigen Referenzpunkt überschreitet. Beträgt die Blockgröße 10 Punkte, verschiebt sich der Preis um 10 Punkte und bildet einen weiteren Block mit Eröffnungs- und Schlusskursen. Wir warten dann, bis sich der Preis um weitere 10 Punkte in eine Richtung bewegt, und schließen einen weiteren Block, und so weiter. Dies scheint auf den ersten Blick einfach zu sein, aber Blöcke werden mit den Schlusskursen von 1-Minuten-Kerzenleuchtern gebildet - dies wird später wichtig sein.

delta

Abbildung 3.

Die weitere Analyse zeigt 2 Probleme auf:

  1. Delta zwischen dem Schlusskurs der Kerze Close und dem des Blocks. Abbildung 3 zeigt eine Situation, in der der Schlusskurs eines fallenden Blocks höher ist als der Schlusskurs einer fallenden Kerze. Das Delta zwischen dem Schlusskurs des Blocks und dem Schlusskurs der Kerze kann den gesamten Gewinn zunichte machen, den wir aus der Ausnutzung des Ideals eines Trends erzielen wollten. Der Grund dafür hängt mit unserer Absicht zusammen, einen einfachen Algorithmus zu verwenden: Eröffnen Sie Kaufpositionen nach jedem Aufwärtsblock und eröffnen Sie Verkaufspositionen nach jedem Abwärtsblock. Da Blöcke zum Schluss der Kerze gebildet werden, wird das Signal eines gebildeten Blocks erst nach dem Schließen der Kerze erzeugt. Aus diesem Grund wird die Position zu einem schlechteren Preis eröffnet. Dieses Delta kann alle Gewinne auffressen, und die erwartete Auszahlung wird Null sein.
  2. Provisionen und Spread. Vielleicht reicht der Markttrend nur aus, um den Spread und die Provisionen zu bezahlen. In diesem Fall, wenn wir Positionen nach Markt öffnen/schließen, werden die Verluste aus der Eröffnung zu einem schlechteren Preis und Provisionen größer sein als alle Gewinne, die mit diesem Muster erzielt werden können. Nun, wir können Limit-Orders an den Devisenmärkten verwenden, um Spreads zu eliminieren, aber wir müssen immer noch Provisionen zahlen. Darüber hinaus eliminieren Limit-Orders die Spreads auf dem Devisenmarkt nicht.

Es wurden also zwei Probleme bestimmt, die Sie daran hindern können, aus dem festgestellten Muster einen Gewinn zu erzielen. Die folgenden Ausführungen können zum Verständnis des Einflusses der Probleme auf den resultierenden Gewinn beitragen:

Es wäre richtig, alle oben genannten Schritte auszuführen, aber eine interessantere Lösung ist es, einen einfachen Handelsroboter zu schreiben und dies in der Praxis zu überprüfen. Zumindest wäre es interessanter, die Operationsergebnisse eines fertigen Algorithmus in diesem Artikel zu betrachten. Es kann noch andere spezifische Merkmale geben, die wir übersehen haben. Nehmen wir nun an, dass wir alles berechnet, ein positives Ergebnis erhalten und einen Handelsalgorithmus nach diesem Muster erstellen wollen. Lassen Sie uns also zum nächsten Schritt übergehen.

Entwickeln einer Hypothese, die das Vorhandensein dieses Musters erklärt

Es ist gefährlich, das gefundene Muster zu verwenden, ohne eine Hypothese zu haben, das seine Natur erklärt. Wir wissen immer noch nicht, warum das Muster existiert und ob es stabil ist. Wir wissen nicht, wann es verschwindet und wann es wieder auftaucht. Wenn man echtes Geld in den Handel investiert, muss man in der Lage sein, das Vorhandensein eines Musters zu verfolgen und zu verstehen, wann die Einlage einen längeren Zeitraum von ihrem Maximum abgezogen hat und sich bald wieder erholen wird, und wann das Muster verschwunden ist und es an der Zeit ist, den Roboter anzuhalten. Es ist genau der Moment, der einen profitablen von einem verlustreichen Roboter unterscheidet. Aus diesem Grund ist es notwendig, eine Hypothese zu entwickeln, die das Vorhandensein dieses Musters erklärt. Diese Hypothese kann weiter in eine Theorie umgewandelt und für die Anpassung der Betriebsarten des Algorithmus verwendet werden.

Das Muster existiert in allen analysierten Instrumenten und in allen Skalen, aber die Tendenz nimmt in größeren Skalen ab. Wahrscheinlich beeinflussen die beiden oben erwähnten Faktoren (Delta und Kommission) dieses Muster wirklich. Lassen Sie uns daher zwei Thesen aufstellen:

Eine kleine Anmerkung dazu: Selbst wenn wir Delta-Fehler in kleinem Maßstab eliminieren, sind die Märkte tatsächlich im Trend, aber ihr Trend reicht nur aus, um den Spread und die Provisionen auszugleichen. Entwickler von Scalping-Algorithmen machen oft Fehler, weil sie diese Tatsache nicht kennen. Sie denken: "Ich muss einen Broker mit niedrigeren Provisionen finden, und mein Scalping-Roboter wird anfangen, Gewinne zu erwirtschaften. Es wird großartige Ergebnisse zeigen, wenn ich den Spread und die Provisionen reduzieren kann." Aber das wird nicht passieren, weil der Markttrend in kleinerem Maßstab nur Spread und Provisionen abdecken kann. Wenn der Spread und die Provisionen kleiner wären, dann hätten andere Marktteilnehmer dieses Muster bereits verwendet und zerstört. Dies bezieht sich nicht auf alle Scalper - ich meine nur einfache Handelsroboter, die kein Front Running, keine Markttiefe-Volumenanalyse und keine anderen Arbeitstechniken verwenden.

Angenommen, nicht nur die analysierten, sondern auch alle anderen Märkte basieren auf Trends. Aber warum basieren alle Märkte auf Trends?

Beginnen wir mit einer einfachen Frage: Woher kommt der Gewinn im Finanzmarkthandel? Da die Teilnehmer gegeneinander handeln (auch wenn Sie OTC-Devisenhandel betreiben), verdienen Sie Geld, wenn jemand den gleichen Betrag zuzüglich der Brokerkommission verliert. Die Handelsteilnehmer kaufen und verkaufen sich gegenseitig Vermögenswerte, und jeder versucht, davon zu profitieren. Das bedeutet, dass sowohl der Käufer als auch der Verkäufer versuchen, den größtmöglichen Nutzen aus einem Geschäft zu ziehen. Gleichzeitig denkt der Käufer, dass der Kauf profitabel ist, und der Verkäufer, dass der Verkauf profitabel ist. Liegt einer von ihnen eindeutig falsch? Beide können dadurch einen Gewinn erzielen, wenn der Käufer den Vermögenswert an eine dritte Partei verkauft, aber früher oder später wird es eine Gegenpartei geben, die Geld verliert. Folglich basiert der Handel auf der Idee, dass eine der Gegenparteien bei der Bestimmung des Gewinns einen Fehler machen wird.

Wenn Sie die Preisfestsetzung auf den Devisenmärkten nicht verstehen, empfehle ich Ihnen, zuerst den Artikel mit dem Titel "Grundlagen der Börsenkursbildung am Beispiel des Terminhandelsbereichs der Moskauer Börse" zu lesen. Wenn Sie die Grundlagen kennen, wird es für Sie leichter sein, die Idee zu verstehen. Eigentlich spielt es keine Rolle, auf welchem Markt Sie handeln, an welcher Börse, Krypto oder Forex. Die Grundlagen der Preisgestaltung sind überall gleich. Die Handelsbedingungen und Analysemöglichkeiten können jedoch unterschiedlich sein.

Der Einfachheit halber betrachten wir die Begrenzungsoptionen für die Form der Preisreihen. Bei einem Preis-Chart sind zwei entgegengesetzte Szenarien möglich: ein linearer unendlicher Trend und eine Sinuskurve. Eine Sinuskurve wäre praktisch, da jeder wissen würde, wann er einen Vermögenswert kaufen und verkaufen muss. Ein linear aufsteigender Chart wäre ebenfalls praktisch: Natürlich muss man ständig kaufen, um Gewinne zu erzielen. Aber solche Chart-Formen sind unmöglich, weil es bei den Höchstständen keine Käufer und bei den Tiefstständen keine Verkäufer geben wird. Abbildung 1 zeigt ein hypothetisches Beispiel für eine Situation, in der das Preis-Chart sinusförmig ist, und eine angemessene Markttiefe.

Sinusfunktion
Abb. 4.

Wenn das Preis-Chart also sinusförmig ist, dann wird es keine Leute geben, die bereit sind, den Vermögenswert zum Tiefststand der Markttiefe zu verkaufen, weil jeder weiß, dass der Preis nicht nach unten gehen wird. Im Gegenteil, jeder wird einen solchen Vermögenswert zu seinem Mindestpreis kaufen wollen. Da es keine Personen geben wird, die bereit sind, den Vermögenswert zu verkaufen, wird es keine Geschäfte geben, und der Preis wird sich nicht auf einer solchen Kurskurve bewegen können. Der Markt wird sich auf die Suche nach einem Gleichgewichtspreis begeben, der für Käufer zum Kauf und für Verkäufer zum Verkauf geeignet ist.

Eine ähnliche Situation wird für das linear aufsteigende Chart eintreten. Da jeder weiß, dass der Preis des Vermögenswerts ständig steigt, wird ihn niemand verkaufen, und wenn niemand den Vermögenswert verkauft, kann auch niemand kaufen. Das bedeutet, dass auch ein solcher Chart nicht möglich ist. Die Käufer müssen also kaufen, und die Verkäufer müssen verkaufen, damit ein Preis-Chart entsteht. Es muss jemanden geben, der bei der Bestimmung des Nutzens einen Fehler macht. Da jedoch jeder Teilnehmer nach Gewinnmaximierung strebt und keine Fehler machen will, sollte das Chart komplexer als ein Sinus-Chart und komplexer als ein linear aufsteigendes Chart sein.

In einem effizienten Markt sollte das Preisdiagramm irgendwo in der Mitte zwischen dem linearen und dem sinusförmigen Chart liegen. Seine Struktur muss komplex genug sein, so dass der Gewinn für Käufer und Verkäufer nicht offensichtlich ist. Sinus- und lineare Charts zeichnen sich durch eine geringe Entropie aus. Die Entropie muss größer sein, um die Möglichkeit zu bieten, Geschäfte abzuschließen. Je mehr Marktteilnehmer und je "intelligenter" sie sind, desto stärker wird das Preis-Chart zu maximaler Entropie neigen.

Betrachtet man die Shannon-Entropie, dann nimmt sie bei einer gleichmäßigen Verteilung ihren maximalen Wert an. Der Marktprozess ist nicht gleichförmig, sondern ähnelt eher einem normalen Prozess. Eine Normalverteilung kann jedoch aus einer Gleichverteilung gewonnen werden und umgekehrt. Außerdem verwenden wir Blöcke mit einer festen Schrittweite. Mit anderen Worten, die maximale Entropie ist die Eigenschaft eines Prozesses, der keine Regelmäßigkeiten aufweist, bei dem die Wahrscheinlichkeit einer Richtungsänderung bei jeder nächsten Bewegung 50% beträgt. Unsere Analyse zeigt jedoch, dass die Richtungsänderungswahrscheinlichkeit für das Markt-Chart anders als 50% ist, d.h. es gibt ein Gedächtnis und die Entropie ist nicht maximal.

Der Markt wird nach maximaler Entropie streben, aber dieser Zustand wird nur erreicht, wenn es eine unendliche Anzahl von Teilnehmern gibt (sehr hohe Liquidität) oder wenn die Teilnehmer unendlich "intelligent" sind. "Intelligent" bezieht sich hier auf die Fähigkeit, komplexe Muster zu bestimmen. "Intelligentere" Teilnehmer können komplexere und weniger offensichtliche Muster erkennen. Ein unendlich "intelligenter" Teilnehmer kann absolut alle Muster erkennen und ausnutzen. Die Bedingung (entweder unendlich viele Teilnehmer oder unendlich "intelligente" Teilnehmer) wird verwendet, weil eine unendliche Anzahl von Teilnehmern unendliche Rechenfähigkeit besitzt und sie alle Muster mit Brute-Force erkennen können, auch wenn sie nicht sehr "intelligent" sind. 

Diese Hypothese erklärt, warum die Preis-Charts von Finanzinstrumenten immer komplexer werden. Zu Beginn des 20. Jahrhunderts konnte man einfach durch die Verwendung eines MA profitieren. Jetzt, da sich der Algo-Handel entwickelt, werden die Teilnehmer "intelligenter", die Muster werden komplexer, die Entropie wächst und es wird schwieriger, auf dem Markt Geld zu verdienen. Was bedeutet nun "intelligenter werden"? Sie verfügen über eine größere Rechenleistung, eine schnellere Entscheidungsfindung, die Fähigkeit, ihren Nutzen schneller und genauer zu bestimmen, und die Fähigkeit, komplexere Muster zu finden.

Aber wir haben ein recht einfaches Muster gefunden. Dies lässt sich durch einen konstanten Kapitalzufluss auf dem Markt erklären. Die Marktteilnehmer nehmen nicht alle Gewinne mit, und es zeigt sich eine Trendkomponente. Der Kapitalzufluss ist mit der Geldschöpfung verbunden. Jedes Land gibt ständig seine eigene Währung aus, wobei ein gewisses Inflationsniveau aufrechterhalten wird. Diese Geldausgabe schafft wahrscheinlich die Trendkomponente.

Aus der Hypothese, die das Muster erklärt, lassen sich folgende Schlussfolgerungen ziehen: 

Prüfung von Hypothesen

Im vorigen Abschnitt "Entwicklung einer Hypothese zur Erklärung des Vorhandenseins dieses Musters" haben wir nur eine Hypothese aufgestellt, um die Existenz eines Musters zu erklären. Die Hypothese ist nicht 100% richtig und kann Ungenauigkeiten enthalten, da sie nur ein Schritt in einem Algorithmenentwicklungsprozess ist. Dies ist ein Beispiel dafür, wie man logisches Denken entwickeln kann, während man ein Muster erklärt. Dieser Ansatz wird verwendet, um Aberglauben auf dem Markt so weit wie möglich zu vermeiden. Wenn wir zum Beispiel ein Muster hätten wie: "Wenn der RSI (Stochastik / MACD / Elliott-Wellen / Ihre Variante) in den überkauften Bereich eintritt und ein Muster bildet, dann verkaufen Sie", dann sollten Sie sich fragen: "Warum sollte das funktionieren?" und "Was sind die grundlegenden Argumente dafür, dass das funktioniert?"

Wir werden die Hypothese grob testen, ohne tief ins Detail zu gehen, während wir verstehen müssen, ob die Schlussfolgerungen mit den realen Daten korrelieren. Wir können den Trendgrad der verschiedenen Instrumente vergleichen. Nach der Hypothese sollten aktiv entwickelnde und investitionsattraktive Handelsinstrumente eine stärkere Trendhaftigkeit aufweisen als entwickelte oder als weniger investitionsattraktive Instrumente. Nach der zweiten Annahme gilt: Je mehr Teilnehmer mit einem Vermögenswert handeln, desto höher ist die Liquidität und desto weniger trendig wird er sein. Lassen Sie uns eine einfache Überprüfung dieser Annahme durchführen.

Am Ende des Artikels "Was ist ein Trend und basiert die Marktstruktur auf einem Trend oder einer Seitwärtsbewegung?" verglichen wir die Trendhaftigkeit verschiedener Vermögenswerte, darunter EURUSD, AMD, AAPL und andere. Lassen Sie uns einen ähnlichen Vergleich am Beispiel von 4 Symbolen durchführen:

EURUSD

Abb. 5a

AAPL

Abb. 5b.

SBER

Abb. 5c.

AMEZ

Abb. 5d.

Wie aus Abbildung 5 hervorgeht, hat EURUSD eine niedrigere Trendhaftigkeit = 1,068, Appl-Aktien haben eine hohe Trendhaftigkeit = 1,3, Sberbank hat eine Trendhaftigkeit von 1,168, d.h. niedriger als der von Appl, aber höher als der von EURUSD. AMEZ-Aktien haben eine Seitwärtsstruktur, und ihre Trendhaftigkeit liegt unter 1.

Daraus lässt sich folgende Schlussfolgerung ziehen: Die Annahme, dass eine hohe Investitionsattraktivität die Trendhaftigkeit erhöht und eine hohe Liquidität sowie eine hohe Teilnehmerzahl den Handelsgrad reduzieren, steht nicht im Widerspruch zu den experimentellen Daten, so dass die Hypothese in Zukunft verwendet werden kann.

Entwicklung eines Handelsalgorithmus

Lassen Sie uns einen Handelsalgorithmus für das gefundene Muster entwickeln. Das Muster ist einfach, daher wird auch der Handelsalgorithmus einfach sein. Der Handel wird auf Blöcken basieren, was bedeutet, dass die M1-Charts mit Kerzen in Blöcke mit jeweils N Punkten umgewandelt werden sollten. Der Blockbildungsalgorithmus wird in den Handelsroboter integriert werden. Der Handelsalgorithmus ergibt sich direkt aus der Formel zur Bestimmung der erwarteten Auszahlung:

m=(P(tp)*tp)-(P(sl)*sl)

wobei:

Es wird wie folgt funktionieren:

  1. Öffnen Sie eine Position, nachdem ein anderer fallender oder wachsender Block geschlossen wurde;
    • wenn der Block fiel, öffnen Sie eine Verkaufsposition;
    • wenn der Block steigend war, eröffnen Sie eine Kauf-Position;
    • Warten Sie nach der Eröffnung einer Position auf ein Signal zum Schließen.
  2. Schließen Sie die Position, wenn sich ein Block in der entgegengesetzten Richtung bildet. Wenn eine Kaufposition offen ist, warten Sie auf die Bildung eines fallenden Blocks und schließen Sie die Position. Nachdem eine Position auf einen fallenden Block geschlossen wurde, kann eine Verkaufsposition eröffnet werden. Es gibt also nur eine Position im Markt.
  3. Abbildung 3 zeigt den Fall, wenn eine Kerze und ein Block zu unterschiedlichen Preisen geschlossen werden und ein Delta gebildet wird. Dies hängt mit der Besonderheit des Blockbildungsalgorithmus zusammen. Wir brauchen also eine Preiskontrolle, um eine Eröffnung zu einem ungünstigen Preis zu vermeiden. Fügen wir noch eine weitere Bedingung hinzu: Wenn das Delta zwischen dem Schlusskurs der Kerze und dem Schlusskurs des Blocks über einem bestimmten Wert liegt, sollte eine Position nicht eröffnet werden - warten Sie, bis der Preis wieder auf den Schlusskurs des Blocks zurückgeht, und eröffnen Sie dann eine Position.
  4. Hinzufügen der Platzierung von Take Profit und Stop Loss. Sie werden benötigt, wenn sich herausstellt, dass die Größe der Kerze wesentlich größer als die Blockgröße ist. Auf diese Weise werden profitable/unprofitable Positionen nicht nur dann geschlossen, wenn der Block geschlossen wird, sondern auch bei großen Spikes;
    • Der SL-Preis wird wie folgt berechnet: Die Blockgröße (BS) wird mit einem Koeffizienten aus den Einstellungen (ksl) multipliziert; für Verkaufspositionen: Addieren Sie das Ergebnis Sl=Bclose(op)+BS*ksl zum Schlusspreis des Blocks, an dem das Positionseröffnungssignal generiert wurde (Bclose(op)). Für Kaufpositionen: subtrahieren Sie Sl=Bclose(op)-BS*ksl vom Schlusskurs des Blocks (Bclose(op));
    • TP-Preis wird wie folgt berechnet: Blockgröße (BS) wird mit einem Koeffizienten aus den Einstellungen (ktp) multipliziert; für Verkaufspositionen: Subtrahieren Sie das Ergebnis TP=Bclose(0)-BS*ktp vom Schlusspreis des letzten Blocks (Bclose(0)). Für Kauf-Positionen: Addieren Sie Tp=Bclose(0)+BS*ktp zum Schlusskurs des letzten Blocks (Bclose(0)). Im Gegensatz zum Stop Loss verwenden wir hier den Schlusskurs jedes neuen Blocks und berechnen Take Profit nach Schließung jedes neuen Blocks neu. Dies trägt dazu bei, zusätzlichen Gewinn zu erzielen, wenn Kerzen auftreten, die deutlich größer als die Blockgröße sind.
  5. Funktion der Losgrößenverwaltung. Zusätzlich zu den Standardfunktionen für die Losgrößenbestimmung fügen wir eine Funktion hinzu, die die Losgröße in Übereinstimmung mit der aktuellen Blockgröße ändert. Dies ermöglicht es, ein stabiles Risikoniveau und einen stabilen Gewinn zu erhalten, wenn die Blockgröße wächst. Lassen Sie uns das Konzept der Mindestblockgröße (Minimum BS) einführen, relativ zu der die Losgröße angepasst wird. Das Los zur Positionseröffnung ist ein Los aus den Einstellungen geteilt durch das Verhältnis der aktuellen Blockgröße zur Mindestgröße aus den Einstellungen: Los = Los(Satz)/(BS/Minimal-BS).
  6. Bestimmen der Blockgröße. Diese Funktion ist für den stabilen Betrieb des Algorithmus sehr wichtig. Es gibt mehrere mögliche Optionen:
    • feste Blockgröße, die in den Einstellungen im Preisformat angegeben ist, z.B. 0,02;
    • automatische Blockgröße, die mit der Größe der Kerzen des aktuellen Arbeitszeitraumes verknüpft wird. Die Größe der Kerzen kann anhand des ATR-Indikators ermittelt werden. Dann multiplizieren Sie den aktuellen ATR-Wert mit dem Koeffizienten, um die Blockgröße zu erhalten. Zum Beispiel wollen wir Blöcke der Grösse 5*ATR handeln. Bei einer Zunahme der Volatilität wird also die Blockgrösse wachsen und das System wird sich an die sich ändernden Marktparameter anpassen. Sie können ATR aus dem aktuellen Arbeitszeitraum oder aus einem höheren Zeitraum verwenden, wenn Sie experimentieren möchten.
  7. Erlaubnis zur Eröffnung von Kauf-/Verkaufspositionen. Fügen wir eine Funktion hinzu, die es erlaubt, Kauf- und Verkaufspositionen getrennt zu eröffnen. Dies ermöglicht eine getrennte Analyse von Kauf- und Verkaufssignalen.

Der resultierende Roboter ist unten angefügt. Dieser Roboter hat eine etwas größere Funktionsweise, aber wir werden sie in diesem Artikel nicht besprechen. 

Testen des Handelsalgorithmus

Die Funktionsweise des Algorithmus wird mit den Assets getestet, deren Verhalten wir analysiert haben. Zuvor haben wir vorhergesagt, bei welchen Vermögenswerten der Algorithmus hypothetisch profitabel sein sollte. Nun wollen wir prüfen, wie der Algorithmus auf diesen Vermögenswerten funktioniert, um die Richtigkeit der Hypothese zu überprüfen.

Lassen Sie uns mit EURUSD testen. Das Symbol weist einen schwachen Trend auf, und vielleicht reicht dies nicht aus, um Provisionen und Delta abzudecken. Die endgültige Funktionsweise des Algorithmus ist in den Abbildungen 6a und 6b dargestellt.

EURUSD-Handel 1

Abb. 6a.

EURUSD-Handel 2

Abb. 6b.

Die Tests wurden im Zeitraum vom 01.01.2018 bis zum 28.07.2020 im Zeitrahmen M1 unter Verwendung des Modus mit realen Ticks durchgeführt. Die Parameter wurden nicht optimiert, weil ich zeigen möchte, dass es keine Notwendigkeit geben kann, einen gründlich vorbereiteten Algorithmus für jedes einzelne Währungspaar zu optimieren. Wir werden die Blockgröße, die Mindestblockgröße und das Los ändern, in dem Bemühen, einen Gewinn zu erzielen, der deutlich über der Kommissionsgröße liegt.



Abbildung 7.

Bei EURUSD nahmen Spread und Delta wie erwartet den gesamten Gewinn, den wir aus der Entwicklung der Vermögenswerte hätten erzielen sollen. Infolgedessen belief sich das erwartete Ergebnis auf -$1,67 pro Handel. Die Losgröße wurde abhängig von der Blockgröße dynamisch geändert, wobei die durchschnittliche Losgröße 0,078 betrug. Versuchen wir zu verstehen, woher der Verlust kommt. Der Roboter protokolliert Informationen über den Spread. Der durchschnittliche Spread beim Öffnen und Schließen der Position beträgt 0,00008. Wir haben Swaps in Höhe von $159,76 bezahlt und 614 Positionen eröffnet. Der durchschnittliche Swap pro Position betrug also 159,76/614=$0,2602.

Wenn der durchschnittliche Spread 0,00008 und die durchschnittliche Losgröße 0,078 beträgt, entspricht 1 EURUSD-Pip mit einer Losgröße von 0,078 $0,078, und der Spread kostet also 0,078*8=$0,624. Insgesamt beläuft sich die Kommission auf $0,624+$0,2602=$1,104. Wenn wir bei jedem Handelsgeschäft eine Provision verlieren würden, würde das erwartete Ergebnis -$1,104 betragen, aber sie beträgt $1,67, was $0,566 mehr ist. Die minimale Blockgröße ist in den Einstellungen auf 0,002 festgelegt, so dass sie bei einer durchschnittlichen Losgröße von 0,078 $15,6 beträgt. Lassen Sie uns die Veränderung des negativen Saldos grob schätzen, wenn die Saldenkurve ein Random Walk wäre und die Blockgröße immer minimal wäre. Sie wird berechnet als 15,6*(614^0,5)=386,55$. Addieren wir nun die durchschnittliche Provision pro Handel multipliziert mit der Anzahl der Handel. 1.104*614+386.55=$1064.406.

Der Wert ist gleich $1064.406, was den durchschnittlichen Drawdown einer Saldenkurve bedeutet, wenn die Wahrscheinlichkeit der Positionseröffnung in die richtige Richtung 50% beträgt und für jede offene Position eine Provision gezahlt wird. In Wirklichkeit erhielten wir einen Verlust von $1027,45, was nahe bei diesem Wert liegt. Wir können daraus schließen, dass wir einen Verlust hatten, weil das erwartete Ergebnis unseres Algorithmus für EURUSD gleich Null ist. 

Lassen Sie uns die Ergebnisse für die tendendige AAPL-Aktien sehen. Das Ergebnis ist in Abbildung 8 unten dargestellt.



Abbildung 8.

Das Ergebnis ist stabil positiv, das erwartete Ergebnis liegt bei 19,33. Es handelte sich um einen Test mit einer dynamischen Losgröße (die in Übereinstimmung mit der Blockgröße festgelegt wurde), und die Blockgröße änderte sich dynamisch mit der Volatilität. Wir wollen sehen, was passiert, wenn wir die Losgröße nicht dynamisch ändern. Die durchschnittliche Losgröße in Abbildung 8 betrug 39. Lassen Sie uns die feste Losgröße von 39 verwenden und das Ergebnis in Abbildung 9 überprüfen.



Abb. 9.

Das Ergebnis hat sich nicht viel verändert, mit Ausnahme des letzten profitablen Handels und einiger erhöhter Drawdowns. Die Blockgröße bei APPL-Aktien wächst mit der Zeit, und ein größerer Block mit einer festen Losgröße kann einen größeren Gewinn ausweisen, aber die Wahrscheinlichkeit von Drawdowns kann proportional zunehmen.

Als Nächstes wollen wir sehen, was passiert, wenn nur Verkaufspositionen erlaubt sind. Die Ergebnisse sind in Abbildung 10 dargestellt.



Abb. 10.

Der Nur-Verkaufsmodus zeigt einen geringen Verlust, aber Abbildung 5b zeigt die Asymmetrie der Verteilung relativ zu Null, so dass dieses Ergebnis zu erwarten war. Als Nächstes wollen wir den Nur-Kauf-Modus überprüfen. Das Ergebnis ist in Abbildung 11 dargestellt.



Abb. 11.

Wie Sie aus Abbildung 11 ersehen können, zeigt der Nur-Kauf-Modus positive Ergebnisse, aber nicht so gut wie der Kauf- und Verkaufsmodus. Da die Aktie abwechselnd Aufwärts- und Abwärtstrendabschnitte aufweist, wird die Saldenkurve durch die Verwendung von sowohl Kauf- als auch Verkaufspositionen gleichmäßiger.

Lassen Sie uns überprüfen, wie der Algorithmus bei anderen sich aktiv entwickelnden Firmenaktien funktioniert. Beginnen wir mit AMD. Die Tests werden im Zeitraum vom 2018.06.01 bis zum 2020.07.28 durchgeführt, da der Broker ab diesem Datum eine 1-minütige Historie liefert. Dieser Test wird mit dynamischen Losgrößen mit Kauf- und Verkaufspositionen durchgeführt. Die Ergebnisse sind in Abbildung 12 dargestellt.



Abb. 12.

Bei AMD-Aktien zeigt der Algorithmus ein stabiles positives Ergebnis, das den Annahmen entspricht, die auf der Grundlage der in Abbildung 1 dargestellten Verteilung getroffen wurden. Lassen Sie uns nun ein weiteres sich aktiv entwickelndes Unternehmen, Tesla, überprüfen. Der Algorithmus ist in Abbildung 13 dargestellt.



Abb. 13.

Der Algorithmus zeigt stabile Ergebnisse bei TESLA-Aktien, da dieses Unternehmen, wie auch die vorherigen, eine hohe Investitionsattraktivität und ein großes Wachstumspotenzial aufweist.

Testen wir zum Vergleich den Algorithmus mit Aktien der Sberbank, einem der führenden russischen Unternehmen. Es wird der gleiche Testzeitraum gezeigt. Die Provisionen entsprechen denen des Maklers Otkrytie = 0,057% pro Volumen. Die Tests wurden ohne Hebelwirkung und unter Verwendung eines echten Tick-Modus durchgeführt. Das Testergebnis ist in Abbildung 14 dargestellt.



Abb. 14.

Obwohl Sberbank nicht so attraktiv ist wie die oben genannten Aktiva, liegt die Aktie aufgrund der geringen Liquidität mit einem so einfachen Algorithmus immer noch im Trend.

Alle Einstellungen und Testberichte sind unten angehängt, so dass Sie sie im Detail analysieren können.

Schlussfolgerung

Aus der Analyse des Verhaltens des erstellten Handelsalgorithmus lassen sich die folgenden Schlussfolgerungen ziehen:

Der Autor der Idee und der Entwicklung ist Maxim Romanov, der Code für den Expertenberater wird von Sergey Chalyshev entsprechend der zuvor gegebenen Aufgabenstellung geschrieben.