Diskussion zum Artikel "Statistische Arbitrage durch Mean Reversion im Paarhandel: Den Markt mit Mathematik schlagen"

 

Neuer Artikel Statistische Arbitrage durch Mean Reversion im Paarhandel: Den Markt mit Mathematik schlagen :

Dieser Artikel beschreibt die Grundlagen der statistischen Arbitrage auf Portfolioebene. Sein Ziel ist es, das Verständnis der Prinzipien der statistischen Arbitrage für Leser ohne tiefgreifende mathematische Kenntnisse zu erleichtern und einen konzeptionellen Rahmen für den Ausgangspunkt vorzuschlagen. Der Artikel enthält einen funktionierenden Expert Advisor, einige Anmerkungen zu seinem einjährigen Backtest und die entsprechenden Backtest-Konfigurationseinstellungen (.ini-Datei) für die Reproduktion des Experiments.

Dieser Artikel ist keineswegs ein Versuch, den „Geheimcode“ von RenTech/Jim Simons zu reproduzieren oder, noch schlimmer, zu enthüllen. Wie bereits erwähnt, wäre dies für jeden, der nicht direkt an ihren Aktivitäten beteiligt ist, unmöglich. Es ist ein Versuch, Ihnen mein Verständnis der allgemeinen Prinzipien, die ihren Modellen zugrunde liegen, mitzuteilen. Diese Grundsätze können selbst für den bescheidensten Kleinanleger als Grundlage für sein Handelssystem dienen. Der Unterschied liegt in der Größenordnung der Ergebnisse, die proportional zum Umfang der in das System und den Betrieb investierten Ressourcen ist.

Was Sie also im Folgenden lesen werden, ist das Ergebnis von Recherchen in Büchern, Videodokumentationen und spezialisierten Internet-Communities, kombiniert mit meiner persönlichen Erfahrung aus einigen Jahren im Finanzbereich (mehr auf der Geschäftsseite als auf der Entwicklerseite). Was RenTech betreibt, ist riesig, aber was wir hier sehen werden, ist eine Miniatur, sagen wir mal, eine Actionfigur eines Superhelden, ein maßstabsgetreues Modell eines Wolkenkratzers. 

Ziel ist es, mit einer kostengünstigen, leichtgewichtigen und einfach zu entwickelnden Analysemethode beizutragen, die vom durchschnittlichen Einzelhändler getestet und verbessert werden kann, indem er nur die Tools verwendet, die bereits in der MetaTrader 5-Plattform vorhanden sind, die auf einem handelsüblichen Notebook, möglicherweise einem Low-End-Notebook, läuft. Die Methode sollte sowohl für den algorithmischen als auch für den diskretionären Händler nützlich sein. Wir beginnen mit der einfachsten Variante, die gerade ausreicht, um den Prozess zu beschreiben.

Nachdem wir die allgemeinen Konzepte hinter dem Modell verstanden haben, werden wir ein minimales Portfolio für die einfachste Form der statistischen Arbitrage erstellen, es im automatisierten Modus mit einem Expert Advisor handeln, einige Notizen zu den Ergebnissen machen und schließlich über die erforderlichen nächsten Schritte nachdenken. Ich hoffe, dass diese Erfahrung Ihnen helfen kann, mit dieser leistungsstarken Handelstechnik zu beginnen und später in der Lage zu sein, dieses Wissen zu erweitern, indem Sie andere Symbole in das Portfolio aufnehmen und andere Algorithmen als die hier beschriebenen testen, um schrittweise Ihre eigene, voll funktionsfähige StatArb-Strategie aufzubauen, die Ihren Ressourcen und Zielen entspricht.

Autor: Lopes


Autor: Jocimar Lopes

 

Ich verstehe Ihren Ansatz und Code nicht. Da Sie 5-Sekunden-Timer und Updates der Quote Array verwenden, warum verwenden Sie CopyClose für _Period zunächst? Sie können nicht vergleichen und behandeln in der gleichen Array - 5-Sekunden-Intervalle und alle Standard-Zeitrahmen (auch M1).

Nach dem anfänglichen CopyClose haben Sie ein Array von Kursen in der Reihenfolge der veraltetsten (0-ten) bis zu den neuesten (n-1-ten) Elementen.

Dann aktualisieren Sie (per Timer) das Array, indem Sie das letzte (jüngste) Element entfernen und einen einzelnen neuen Close-Wert beim 0-ten Index einfügen (wo das veraltetste Element gespeichert ist).

Sie haben das Array der Notierungen bei neuen Bar-Formationen nie verschoben, d.h. Ihre Arrays sind in 5-Sekunden-Intervallen, aber einer der Modi vergleicht diese Werte mit MAs über _Period. Das ist wieder eine große Inkonsistenz.

Auch wenn Sie Bars schließlich verwenden werden (Ihre Absichten sind unklar, so weit), stellen Sie sicher, dass Sie Bars von verschiedenen Symbolen durch Zeitstempel synchronisieren.

 
Stanislav Korotky verwenden Sie CopyClose für _Period zunächst? Sie können nicht vergleichen und behandeln in der gleichen Array - 5-Sekunden-Intervalle und alle standard-Zeitrahmen (auch M1).

Nach dem anfänglichen CopyClose haben Sie ein Array von Kursen in der Reihenfolge der veraltetsten (0-ten) bis zu den neuesten (n-1-ten) Elementen.

Dann aktualisieren Sie (per Timer) das Array, indem Sie das letzte (jüngste) Element entfernen und einen einzelnen neuen Close-Wert beim 0-ten Index einfügen (wo das veraltetste Element gespeichert ist).

Sie haben das Array der Kurse bei neuen Bar-Formationen nie verschoben, d.h. Ihre Arrays sind in 5-Sekunden-Intervallen, aber einer der Modi vergleicht diese Werte mit MAs über _Period. Das ist wieder eine große Unstimmigkeit.

Auch wenn Sie Bars schließlich verwenden werden (Ihre Absichten sind unklar, so weit), stellen Sie sicher, dass Sie Bars von verschiedenen Symbolen durch Zeitstempel synchronisieren.

Danke, dass Sie sich die Zeit genommen haben, den Code zu überprüfen.

Die 5-Sekunden-Intervalle sind an dieser Stelle willkürlich. Es könnte auch 1 Sekunde oder 10 Sekunden sein. Die Idee ist, ein anfängliches Fenster zu haben, um die mittlere Streuung und eventuell andere Statistiken für den von den CountQuotes abgedeckten Zeitraum zu berechnen. Dann wird ein gleitendes Fenster in Abständen von X Sekunden aktualisiert, unabhängig vom Zeitrahmen.

Sie haben Recht mit den Balken: Ich interessiere mich nicht für sie oder dafür, sie zu synchronisieren, weil sie in diesem speziellen Fall irrelevant zu sein scheinen. Fast alle Trades dauern ein paar Sekunden und werden innerhalb des Balkens eröffnet und geschlossen.

Abgesehen davon, was halten Sie von diesem Ansatz? Ist er jetzt klarer? Sehen Sie irgendeinen kritischen Fehler, der zu falschen Berechnungen führen oder die Leistung beeinträchtigen könnte, oder ähnliches?

Ich weiß Ihren Kommentar wirklich zu schätzen und freue mich auf weitere. Dieser Code wird sich hier, in der Öffentlichkeit, weiterentwickeln, und Sie haben mir bereits einen Denkanstoß gegeben :)

Ich wünsche Ihnen ein schönes Wochenende.

 

Liebe Freunde, mir ist ein Fehler unterlaufen, als ich die Konfigurationsdatei des Testers (*.ini settings) hochgeladen habe. Offensichtlich sollte der Backtest mit NULL TP/SL laufen, d.h. die Positionen sollten geschlossen werden, wenn der Spread "zum Mittelwert zurückkehrt", nicht durch Stop-Loss oder Take-Profit.

Um den in diesem Artikel beschriebenen Backtest korrekt zu reproduzieren, verwenden Sie bitte die hier angehängte Konfigurationsdatei.

Ich entschuldige mich für alle Unannehmlichkeiten, die Ihnen durch diesen Fehler entstanden sind.

 

Vielen Dank für das Teilen, ich war den ganzen Tag damit beschäftigt, an Ihrem Material zu arbeiten, sehr interessant. Einige Optimierungen hier und da... oh, und ein paar Filter hinzugefügt.

Einige Charts für die letzten 3 Monate

EURUSD


XAUUSD

Sie leisten großartige Arbeit, Prost!

 
Eric Ruvalcaba #:

Vielen Dank für das Teilen, ich war den ganzen Tag damit beschäftigt, an Ihrem Material zu arbeiten, sehr interessant. Einige Optimierungen hier und da... oh und ein paar Filter hinzugefügt.

Einige Diagramme für die letzten 3 Monate

EURUSD


XAUUSD

Sie leisten großartige Arbeit, Prost!

Ich bin froh, dass Sie es überprüfen, Eric.

Nur eine Sache sollte man beachten: Seien Sie vorsichtig, wenn Sie mit einem echten Konto arbeiten. Ausrutscher und große Spieler, die Ihre Aufträge vorwegnehmen, können zu Verlusten führen.

Viel Glück und viel Spaß beim Handeln!

 
Jocimar Lopes #:

Ich freue mich, dass Sie es überprüfen, Eric.

Nur eine Sache ist zu beachten: Seien Sie vorsichtig, wenn Sie mit einem echten Konto arbeiten. Schlupf und große Spieler Frontrunning Ihre Aufträge können zu Verlusten führen.

Viel Glück und viel Spaß beim Handeln!

Danke für die Warnung, Sie haben Recht, ich werde es erst einmal testen und bei Bedarf Anpassungen vornehmen.

Ich bin ein großer Fan Ihrer Arbeit.

 

Hallo. Sehr interessanter Artikel. Ich habe versucht, die Ergebnisse zu replizieren, aber nichts passiert. Was fehlt mir? Ich habe die Dateien pairs-trading.mq5 und PairsTradingFunctions.mqh hochgeladen .

Vielen Dank

 

XXXUSD = XXXEUR * EURUSD.

XXX = XAU, AUD, ....

 
Jocimar Lopes #:

Die 5-Sekunden-Intervalle sind an dieser Stelle willkürlich. Es könnte auch 1 Sekunde oder 10 Sekunden sein. Die Idee ist, ein anfängliches Fenster zu haben, um die mittlere Streuung und eventuell andere Statistiken für den von den CountQuotes abgedeckten Zeitraum zu berechnen. Dann wird ein gleitendes Fenster in X-Sekunden-Intervallen aktualisiert, unabhängig vom Zeitrahmen.

Sie haben Recht mit den Balken: Ich interessiere mich nicht für sie oder dafür, sie zu synchronisieren, weil sie in diesem speziellen Fall irrelevant zu sein scheinen. Fast alle Trades dauern ein paar Sekunden und werden innerhalb des Balkens eröffnet und geschlossen.

Abgesehen davon, was halten Sie von diesem Ansatz? Ist er jetzt klarer? Sehen Sie irgendeinen kritischen Fehler, der zu falschen Berechnungen führen oder die Leistung beeinträchtigen könnte, oder ähnliches?

Dann ist der ganze Modus mit iMA falsch, weil er an Balken gebunden ist. Sie müssen den MA anhand von 5-Sekunden-Samples manuell berechnen.

 
Stanislav Korotky #:

Dann ist der gesamte Modus mit iMA falsch, weil er an Balken gebunden ist. Sie müssen die MA durch 5-Sekunden-Samples manuell berechnen.

Wie