Diskussion zum Artikel "Entwicklung eines selbstanpassenden Algorithmus (Teil III): Verzicht auf Optimierung" - Seite 3

 
Die Frage ist gelöst, nur die Details sind schon weg. Wellenhandel in seiner reinsten Form. Ich denke, dass es nicht notwendig ist, diese Referenzwerte für jedes Paar im Expert Advisor selbst neu zu berechnen. Man kann einfach ein Skript erstellen, das man einfach laufen lässt, es funktioniert ein paar Tage lang und das war's, hier sind die Referenzwerte in einer Datei, und man lässt die Roboter aus der Datei lesen. Ein Jahr später berechnen Sie die Werte neu. Es ist unwahrscheinlich, dass sich diese Verteilungen über einen solchen Zeitraum hinweg ändern. Selbst wenn sie sich ändern, werden sie sich nicht wesentlich ändern und die Rentabilität nicht beeinträchtigen. Der springende Punkt ist, dass je mehr Code es gibt, desto mehr unbekannte Fehler gibt es, obwohl man es hier mag, wie man es mag. Sie sind offensichtlich bis zum Wahnsinn am Markt interessiert.)
 
Evgeniy Ilin:
.. Ich denke, dass es nicht notwendig ist, diese Referenzwerte für jedes Paar im Expert Advisor selbst neu zu berechnen. Sie können einfach ein Skript, das für ein paar Tage läuft und das ist es - hier sind die Referenzwerte in einer Datei, und lassen Sie die Roboter lesen aus der Datei. Ein Jahr später berechnen Sie neu. Es ist unwahrscheinlich, dass sich diese Verteilungen über einen solchen Zeitraum hinweg ändern. Und selbst wenn sie sich ändern, werden sie sich nicht wesentlich ändern....

Die reinen mathematischen Daten werden sich überhaupt nicht ändern. Ich schlage vor, dass wir diese Berechnungen zwischenspeichern. Ich habe eine Datei mit Berechnungen genau dieser Faktoren, Wahrscheinlichkeiten, Summen von Wahrscheinlichkeiten, berechneter durchschnittlicher Amplitude, mit Zwischenspeicherung all dieser Daten für die Zeit der Arbeit, beigefügt. Ich nehme an, dass sie auch für andere nützlich sein könnte. So ist die Berechnung dieser Werte, sogar für jeden Takt, nicht mehr anstrengend.

Aber das Bauen von Blöcken in der Vergangenheit, bei jedem neuen Balken neu, und für mehrere Blockgrößen, ist.... Je größer die Größe, desto mehr Balken müssen verarbeitet werden, um die für die Analyse erforderliche Anzahl von Blöcken dieser Größe zu erhalten.

Ich habe OHLC verwendet, um den Block zu bilden, nicht nur C. Meiner Meinung nach ist die Annahme, dass der Preis durch (O->H->L->L->C) für Abwärtsbalken und (O->L->H->H->C) für Aufwärtsbalken geht, etwas nützlicher als die Annahme, dass er nur schließt. Auf diese Weise erhöht sich natürlich die Anzahl der Berechnungen nicht wesentlich (in absoluter Zeit), aber es gibt Vorteile. Zum Beispiel wird die erforderliche Anzahl von Rückwärtsblöcken schneller eingegeben. Und beim Wechsel von M1 zu M5 ändert sich das Tippbild nur unwesentlich. Und beim Wechsel zu M15 und höher sind die Veränderungen im Vergleich zu M5 nicht vorhanden oder sogar noch geringer. Daraus ergeben sich auch Möglichkeiten zur Verbesserung der Leistung. Beim Aufbau von Forward-Blöcken macht es nicht so viel Spaß, weil man "in Bewegung" ein Bild aufbauen kann (z.B. sofort durch Ticks), und beim Neuberechnen - ein anderes. Auch hier gilt: Wenn die Forward-Blocks beim Schließen des nächsten Balkens gezeichnet werden sollen, könnte auch OHLC verwendet werden.

"Ich bin sicherlich kein Meister", wie Panda zu sagen pflegte, aber das, was ich auf der Grundlage des Artikels nach mehreren Optimierungen (wobei die erste der Zwischenspeicher für statistische Berechnungen ist) auf meinen Knien gebaut habe, liefert ungefähr solche Ergebnisse:

- USDJPY M1 Währung, zu Eröffnungskursen, Blocksatz von 24 bis 40, Blockgröße von 90 Pips und weitere +10% zum vorherigen (256p max), 12 Größen insgesamt.

- Für einen Zeitraum von einem Kalendermonat dauert ein einfacher Durchlauf im Durchschnitt 2,5 Minuten, wobei der Anteil der Handelsabwicklung nur 10 % beträgt. Je strenger die Anforderungen an die Trenderkennung sind, desto seltener wird das Eröffnungssignal gefunden, desto mehr überschießt es in Richtung Erhöhung der Blockgröße und der Suchzeit. Je häufiger das Signal, desto häufiger die Fixierung von Back-Blocks und die Berechnung von nur fwd, was ach so schnell ist.

Mit dem Ergebnis eines Laufs von 2,5 Minuten für einen Monat Berechnung ist es schwierig, Nuancen zu erkennen oder einige Betriebsparameter zu optimieren, aber möglich :)

Die Idee in dem Artikel ist interessant und scheint einfach und klar zu sein. Aber, wie ein Mädchen sagte: "Ich wusste nicht, ob ich es verstanden habe...". Bei all dem geht es nicht um die Idee selbst oder ihre Bewertung, sondern nur um ihre konkrete Umsetzung (die natürlich unvollständig ist und auf meinem eigenen Verständnis beruht).


P.S. Und es begann mit Zweifeln, dass bei 24 Blöcken die durchschnittliche Wanderleistung 3,8 beträgt :)

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Типы торговых операций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Dateien:
MStat.mqh  11 kb
 
Amba404:

Die reinen Berechnungen werden sich nicht ändern. Ich schlage vor, diese Berechnungen zwischenzuspeichern. Ich habe eine Datei mit Berechnungen genau dieser Faktoren, Wahrscheinlichkeiten, Summen von Wahrscheinlichkeiten und der berechneten durchschnittlichen Amplitude angehängt, wobei all dies für die Zeit der Arbeit zwischengespeichert wird. Ich nehme an, dass sie auch für andere nützlich sein könnte. So ist die Berechnung dieser Werte, sogar für jeden Takt, nicht mehr anstrengend.

Aber das Bauen von Blöcken in der Vergangenheit, bei jedem neuen Balken neu, und für mehrere Blockgrößen, ist.... Je größer die Größe, desto mehr Balken müssen verarbeitet werden, um die für die Analyse erforderliche Anzahl von Blöcken dieser Größe zu erhalten.

Ich habe OHLC verwendet, um den Block zu bilden, nicht nur C. Meiner Meinung nach ist die Annahme, dass der Preis durch (O->H->L->L->C) für Abwärtsbalken und (O->L->H->H->C) für Aufwärtsbalken geht, etwas nützlicher als die Annahme, dass er nur schließt. Auf diese Weise erhöht sich natürlich die Anzahl der Berechnungen nicht wesentlich (in absoluter Zeit), aber es gibt Vorteile. Zum Beispiel wird die erforderliche Anzahl von Rückwärtsblöcken schneller eingegeben. Und beim Wechsel von M1 zu M5 ändert sich das Tippbild nur unwesentlich. Und beim Wechsel zu M15 und höher sind die Veränderungen im Vergleich zu M5 nicht vorhanden oder sogar noch geringer. Daraus ergeben sich auch Möglichkeiten zur Verbesserung der Leistung. Beim Aufbau von Forward-Blöcken macht es nicht so viel Spaß, weil man "in Bewegung" ein Bild aufbauen kann (z.B. sofort durch Ticks), und beim Neuberechnen - ein anderes. Auch hier gilt: Wenn die Forward-Blocks beim Schließen des nächsten Balkens gezeichnet werden sollen, könnte auch OHLC verwendet werden.

"Ich bin sicherlich kein Meister", wie Panda zu sagen pflegte, aber das, was ich auf der Grundlage des Artikels nach mehreren Optimierungen (wobei die erste der Zwischenspeicher für statistische Berechnungen ist) auf meinen Knien gebaut habe, liefert ungefähr solche Ergebnisse:

- USDJPY M1 Währung, zu Eröffnungskursen, Blocksatz von 24 bis 40, Blockgröße von 90 Pips und weitere +10% zum vorherigen (256p max), 12 Größen insgesamt.

- Für einen Zeitraum von einem Kalendermonat dauert ein einfacher Durchlauf im Durchschnitt 2,5 Minuten, wobei der Anteil der Handelsabwicklung nur 10 % beträgt. Je strenger die Anforderungen an die Trenderkennung sind, desto seltener wird das Eröffnungssignal gefunden, desto mehr überschießt es in Richtung Erhöhung der Blockgröße und der Suchzeit. Je häufiger das Signal, desto häufiger die Fixierung von Back-Blocks und die Berechnung von nur fwd, was ach so schnell ist.

Mit dem Ergebnis eines Laufs von 2,5 Minuten für einen Monat Berechnung ist es schwierig, Nuancen zu erkennen oder einige Betriebsparameter zu optimieren, aber möglich :)

Die Idee in dem Artikel ist interessant und scheint einfach und klar zu sein. Aber, wie ein Mädchen sagte: "Ich wusste nicht, ob ich es verstanden habe...". Bei all dem geht es nicht um die Idee selbst oder ihre Bewertung, sondern nur um ihre konkrete Umsetzung (die natürlich unvollständig ist und auf meinem eigenen Verständnis beruht).


P.S. Und es begann mit Zweifeln, dass bei 24 Blöcken die durchschnittliche Wanderleistung 3,8 beträgt :)

Ja, meine Berechnungen werden zur Laufzeit zwischengespeichert. Die Tests sind sehr lang... Ich war dabei, die Tests für den nächsten Artikel vorzubereiten, vor dem neuen Jahr habe ich die Tests zum Testen gebracht. Der Tester ist single-threaded, also habe ich die Tests in Abschnitte von 2 Jahren (28 Währungspaare) unterteilt und 5 Terminals geladen. All dies wurde 14 Tage lang getestet und dann ging mein Router kaputt, ich begann, das Internet per Kabel direkt zu verbinden und ich bekam den Fehler send error 10054 in allen Testern.... Der nächste Artikel kommt also nicht so bald... Übrigens, wer weiß, was der Fehler send error 10054 ist und wie man ihn in Zukunft vermeiden kann?

Es ist noch nicht alles im Artikel beschrieben, fast alles ist in den ToR beschrieben, aber auch dort ist nicht alles beschrieben)). Jetzt mache ich eine viel bessere Version.

Übrigens, wie sind die Zweifel an der Abbildung 3.8 verschwunden)?

Fürs Erste werde ich die Ergebnisse für 1,5 Jahre vom 25.06.2010 bis 27.02.2012 vorlegen. Dies ist ohne Optimierung für 28 Instrumente gleichzeitig. Die Parameter für alle Instrumente sind die gleichen


 
Maxim Romanov:

Übrigens, wer weiß, was ist der Fehler senden Fehler 10054 und wie man es in Zukunft zu vermeiden?

Wie durch die Art und Weise Zweifel über die Zahl 3,8 verschwunden)?

Zweifel sind verschwunden, Mathe.

und 10054 ist angeblich ein Netzwerkprotokollfehler, der auf den Verlust der Netzwerkverbindung zurückzuführen ist. Die Tatsache, dass das Gerät wieder eingesteckt war, spielte dabei keine Rolle. Das Problem tritt in der Regel bei vielen Programmen auf, wenn man die Verbindung zur Netzwerkkarte abbricht (oder den Router ausschaltet). In diesem Fall (vor allem, wenn die IP von dhcp empfangen wird), beginnt Windows zu denken, dass es kein funktionierendes Netzwerkgerät mehr hat, so dass die Netzwerkdienste durcheinander geraten. Gleichzeitig werden Programme, die lokal über Netzwerkverbindungen laufen, z. B. an ihre lokale Adresse 127.0.0.1, ebenfalls gestört.

Folgendes hat mir geholfen: Ich habe ein virtuelles Netzwerkgerät (Loopback, man kann es googeln) erstellt, ihm eine IP-Adresse wie 127.0.1.1 zugewiesen, den Namen meines PCs und diese Adresse in hosts eingetragen. Es stellt sich heraus, dass es immer ein aktives Netzwerkgerät im System gibt, der PC ist für sich selbst über den Namen und diese Adresse erreichbar, Netzwerkdienste starten, Programme, die mit sich selbst über tcp/ip kommunizieren - auch.

Nun, ich deaktiviere auch immer ipv6.


Auch das ist mir schon lange nicht mehr aufgefallen, entweder bin ich immer verbunden, oder es hat sich irgendwo etwas geändert ...
 
Amba404:

Die Zweifel sind weg, Mathe.

und 10054 ist vermutlich ein Netzwerkprotokollfehler aufgrund eines Verlustes der Netzwerkverbindung. Die Tatsache, dass das Gerät wieder eingesteckt war, spielte dabei keine Rolle. Das Problem taucht bei vielen Programmen auf, wenn man die Verbindung zur Netzwerkkarte abbricht (oder den Router abklemmt). In diesem Fall (vor allem, wenn die IP von dhcp empfangen wird), beginnt Windows zu denken, dass es kein funktionierendes Netzwerkgerät mehr hat, so dass die Netzwerkdienste durcheinander geraten. Gleichzeitig werden Programme, die lokal über Netzwerkverbindungen laufen, z. B. an ihre lokale Adresse 127.0.0.1, ebenfalls gestört.

Folgendes hat mir geholfen: Ich habe ein virtuelles Netzwerkgerät (Loopback, man kann es googeln) erstellt, ihm eine IP-Adresse wie 127.0.1.1 zugewiesen, den Namen meines PCs und diese Adresse in hosts eingetragen. Es stellt sich heraus, dass es immer ein aktives Netzwerkgerät im System gibt, der PC ist für sich selbst über den Namen und diese Adresse erreichbar, Netzwerkdienste starten, Programme, die mit sich selbst über tcp/ip kommunizieren - auch.

Nun, ich deaktiviere auch immer ipv6.


Nochmal, das ist mir schon lange nicht mehr aufgefallen, entweder bin ich immer verbunden oder es hat sich irgendwo etwas geändert ...

ah, danke ... Ich denke, ich habe es, ich habe versehentlich die Netzwerkkarte getrennt, ich denke, das ist, wo der Windup Panik bekam und der Tester aufhörte. Danke!

 

Bitte fügen Sie das Beispiel MT5 EA für uns zu folgen, Ihre Ideen und testen Sie Ihre Theorie.

 
Jacob James:

Bitte fügen Sie das Beispiel MT5 EA für uns zu folgen, Ihre Ideen und testen Sie Ihre Theorie.

Der Algorithmus ist nicht öffentlich zugänglich, aber im nächsten Artikel werde ich zeigen, wie er am Beispiel von Backtests funktioniert.

 

Grüße.

Einige Gedanken und ihre Ergebnisse. Ein bisschen lang.

Es gibt zwei Ansätze zur Analyse von Blockabweichungen: Das Diagramm ist eine zufällige Bewegung - wir verwenden statistische Funktionen (über Faktoren usw.) oder das Diagramm ist eine überhaupt nicht zufällige Bewegung - wir verwenden statistische Daten über vergangene Bewegungen. Wenn Sie die Entstehung des Blockcharts schon lange verfolgen, haben Sie wahrscheinlich bemerkt, dass der Chart vom Ausgangspunkt der Konstruktion abhängt. Wenn wir den Chart bei jeder Kerzeneröffnung erstellen, erhalten wir bei Kerze N einen etwas anderen Chart als bei N+1. Es gibt also zwei Möglichkeiten, statistische Daten über vergangene Blöcke zu generieren: ebenfalls bei jeder Kerzeneröffnung oder periodisch, z.B. einmal pro (Stunde/Tag/Woche), aber gleichzeitig sollte der Chart der Blöcke vom gleichen Nullpunkt aus gezeichnet werden. Der Ansatz mit Neuberechnung aller Daten bei jedem Balken ist möglich, aber sehr langsam.

Ich verzweifelte mit dieser Option, um etwas im Tester aufzunehmen/zu testen, und ich testete alle Vermutungen oder optimalen Parameter in der Demo, online, und kontrollierte die Ergebnisse auch online mit dem Equity/Balance-Chart. Ich muss sagen, dass in diesen kurzen Zeiträumen (der letzte vom 21.01. bis zum aktuellen Zeitpunkt) der Algorithmus (so wie ich ihn verstanden und implementiert habe) ziemlich stabil ist. Ich habe übrigens nicht bei jedem Balken bei einem Signal eröffnet, sondern bei einem neuen Signal (d.h. es gab ein Kaufsignal bei H-Block 150p, ich habe gekauft, der nächste wurde bei Buy H=165 eröffnet, und zwar wenn es ins Negative geht. Da bei positiver Entwicklung das Ungleichgewicht in der Wanderung abnimmt, bzw. und das Signal verschwindet), Nur ein Demokonto von 8, mit sehr aggressiven Einstellungen, mit einem Guthaben von $ 1000 und Hebelwirkung 1:1000 verwendet 48 Währungspaare, Metalle, 2 Öl, ohne Kontrolle der Absicherung auf Währungen ("hedge") ging zum Stopout - wenn Sie USDJPY kaufen, können Sie nicht kaufen USDCAD, aber Sie können EURUSD, etc. auf den gesamten Satz von Symbolen zu kaufen, hat der Artikel), auf den Deal zugewiesen $ 10, viel adaptive, hängt von der Größe des Blocks, Ausfahrt nur auf den kumulierten Gewinn auf die Summe der Transaktionen auf das Symbol oder auf die Summe der Gewinne auf alle offenen Symbole.

Stabil, ja, aber die Drawdowns sind beträchtlich. Wenn wir "in die falsche Richtung" gegangen sind und die Position weiter ausbauen, weil wir im Minus sind, ist das verständlich. Aber weniger aggressive Einstellungen haben die anderen Konten nicht getötet, ja.

Zurück zu der Art und Weise der Berechnung der Blöcke. Ich verwende jetzt die folgende Variante. Wir nehmen einen Referenzpunkt - den Schlusskurs des vergangenen Freitags. Davon ausgehend bilden wir (1 Mal!) in der Vergangenheit Sätze von Blöcken mit Höhen wie im Artikel (*1.1). Ich habe (iATR(sy, PERIOD_M1, 1440) X 5) vom Anfangspunkt als Anfangshöhe genommen. Wir bilden sofort Sätze mit der Länge StepMax+MAX_STAT (z. B. 48+1000) und berechnen die Verteilung der Laufhäufigkeiten usw. für jede Länge in Blöcken (z. B. von 24 bis 48). Bei jedem neuen Balken vervollständigen wir dann die Forward-Sets, suchen nach einem Signal für jedes H im Bereich der Längen (z. B. [24;48] Blöcke), orientieren uns an den zuvor berechneten Statistiken, wählen ein geeignetes aus, treffen die Entscheidung, ein neues zu eröffnen, ein altes zu schließen/zu aktualisieren, usw.... Dieser Ansatz führt zu einer erheblichen Steigerung der Berechnungsgeschwindigkeit und unterscheidet sich meines Erachtens nicht wesentlich von dem im Artikel vorgeschlagenen Ansatz (Berechnung "von Grund auf" bei jedem Takt). Zugleich ergeben sich einige zusätzliche Möglichkeiten. Insbesondere, wenn sich die Niveaus im Laufe der Woche nicht ändern, können Sie bei einem Signal für H=180p (zum Beispiel) eine Reihe von Orders in der erwarteten Bewegungsrichtung platzieren....

Weiter. Dieser Ansatz ermöglichte es, keine reine Statistik zu verwenden, sondern spezifische Verteilungen und Erwartungen für ein bestimmtes Symbol und eine bestimmte Blockgröße zu messen. Dadurch wurden die Ergebnisse im Vergleich zum "reinen Wandern" leicht verbessert. Gleichzeitig sammelten wir Daten über die Länge der Wanderung modulo (auch in statfunctions verwendete ich die Länge der Bewegung modulo, und es ist verständlich, dass der Random Walk im Allgemeinen symmetrisch um Null ist). Ich sollte gesondert anmerken, dass der Stichprobenumfang von 1000 Einheiten eher bedingt als "statistisch zuverlässig" bezeichnet werden kann, aber darum geht es nicht.

Nun, dann habe ich versucht, die Verteilung der Kilometerlängen in Blöcken unter Berücksichtigung ihres Vorzeichens (aufwärts oder abwärts) zu erfassen. Und die Ergebnisse wurden noch schlechter. Unerwartet.

Ich überprüfte den Symbolsatz "28 Majors" und die Sätze für die einzelnen Majors (*AUD* usw.). Dies ist bereits in MT5. Ich überprüfte verschiedene Perioden, Parameter der Blockkonstruktion, verschiedene Nuancen von Input-Output....

Die allgemeine Schlussfolgerung (nach den verfügbaren Ergebnissen) ist, dass die Effizienz des Systems abnimmt, wenn die Richtung der Länge der Bewegungen in Blöcken berücksichtigt wird. Wenn jemand das erklären kann, würde ich gerne wissen, was und wie. Wenn jemand ähnliche Erfahrungen gemacht hat, aber das gegenteilige Ergebnis erzielt hat, bin ich gerne bereit, darüber zu diskutieren und zu vergleichen.

 
Amba404:

Grüße.

Einige Gedanken und ihre Ergebnisse. Es ist ein bisschen lang.

Es gibt zwei Ansätze zur Analyse von Blockabweichungen: Das Diagramm ist eine zufällige Bewegung - wir verwenden statistische Funktionen (über Faktoren usw.) oder das Diagramm ist eine überhaupt nicht zufällige Bewegung - wir verwenden statistische Daten über vergangene Bewegungen. Wenn Sie die Entstehung des Blockcharts schon lange verfolgen, haben Sie wahrscheinlich bemerkt, dass der Chart vom Ausgangspunkt der Konstruktion abhängt. Wenn wir den Chart bei jeder Kerzeneröffnung erstellen, erhalten wir bei Kerze N einen etwas anderen Chart als bei N+1. Es gibt also zwei Möglichkeiten, statistische Daten über vergangene Blöcke zu generieren: ebenfalls bei jeder Kerzeneröffnung oder periodisch, z.B. einmal pro (Stunde/Tag/Woche), aber gleichzeitig sollte der Chart der Blöcke vom gleichen Nullpunkt aus gezeichnet werden. Der Ansatz mit der Neuberechnung von allem und jedem bei jedem Balken ist möglich, aber sehr langsam.

Ich verzweifelte mit dieser Option, um etwas im Tester aufzunehmen/zu testen, und ich testete alle Vermutungen oder optimalen Parameter in der Demo, online, wobei ich die Ergebnisse auch online mit dem Equity/Balance-Chart kontrollierte. Ich muss sagen, dass in diesen kurzen Zeiträumen (der letzte vom 21.01. bis zum aktuellen Zeitpunkt) der Algorithmus (so wie ich ihn verstanden und implementiert habe) ziemlich stabil ist. Ich habe übrigens nicht bei jedem Balken bei einem Signal eröffnet, sondern bei einem neuen Signal (d.h. es gab ein Kaufsignal bei H-Block 150p, ich habe gekauft, der nächste wurde bei Buy H=165 eröffnet, und zwar wenn es ins Negative geht. Da bei positiver Entwicklung das Ungleichgewicht in der Wanderung abnimmt, bzw. und das Signal verschwindet), Nur ein Demokonto von 8, mit sehr aggressiven Einstellungen, mit einem Guthaben von $ 1000 und Hebelwirkung 1:1000 verwendet 48 Währungspaare, Metalle, 2 Öl, ohne Kontrolle der Absicherung auf Währungen ("hedge") ging zum Stopout - wenn Sie USDJPY kaufen, können Sie nicht kaufen, USDCAD, aber Sie können EURUSD, etc. auf den gesamten Satz von Symbolen zu kaufen, hat der Artikel), auf den Deal zugewiesen $10, viel adaptive, hängt von der Größe des Blocks, Ausfahrt nur auf den kumulierten Gewinn auf die Summe der Transaktionen auf das Symbol oder auf die Summe des Gewinns auf alle offenen Symbole.

Stabil, ja, aber die Drawdowns sind beträchtlich. Wenn wir "in die falsche Richtung" gegangen sind und die Position weiter ausbauen, weil wir im Minus sind, ist das verständlich. Aber weniger aggressive Einstellungen haben die anderen Konten nicht getötet, ja.

Zurück zu der Art und Weise der Berechnung der Blöcke. Ich verwende jetzt die folgende Variante. Wir nehmen einen Referenzpunkt - den Schlusskurs des vergangenen Freitags. Davon ausgehend bilden wir (1 Mal!) in der Vergangenheit Sätze von Blöcken mit Höhen wie im Artikel (*1.1). Ich habe (iATR(sy, PERIOD_M1, 1440) X 5) vom Anfangspunkt als Anfangshöhe genommen. Wir bilden sofort Sätze mit der Länge StepMax+MAX_STAT (z. B. 48+1000) und berechnen die Verteilung der Laufhäufigkeiten usw. für jede Länge in Blöcken (z. B. von 24 bis 48). Bei jedem neuen Balken vervollständigen wir dann die Forward-Sets, suchen nach einem Signal für jedes H im Bereich der Längen (z. B. [24;48] Blöcke), orientieren uns an den zuvor berechneten Statistiken, wählen ein geeignetes aus, treffen die Entscheidung, ein neues zu eröffnen, ein altes zu schließen/zu aktualisieren, usw.... Dieser Ansatz führt zu einer erheblichen Steigerung der Berechnungsgeschwindigkeit und unterscheidet sich meines Erachtens nicht wesentlich von dem im Artikel vorgeschlagenen Ansatz (Berechnung "von Grund auf" bei jedem Takt). Zugleich ergeben sich einige zusätzliche Möglichkeiten. Insbesondere, wenn sich die Niveaus während der Woche nicht ändern, können Sie bei einem Signal für H=180p (zum Beispiel) eine Reihe von Aufträgen in der erwarteten Bewegungsrichtung platzieren....

Weiter. Dieser Ansatz ermöglichte es, keine reine Statistik zu verwenden, sondern spezifische Verteilungen und Erwartungen für ein bestimmtes Symbol und eine bestimmte Blockgröße zu messen. Dadurch wurden die Ergebnisse im Vergleich zum "reinen Wandern" leicht verbessert. Gleichzeitig sammelten wir Daten über die Länge der Wanderung modulo (auch in statfunctions habe ich die Länge der Bewegung modulo verwendet, und es ist verständlich, dass der Random Walk im Allgemeinen symmetrisch um Null ist). Ich möchte gesondert anmerken, dass der Stichprobenumfang von 1000 Einheiten eher bedingt als "statistisch zuverlässig" bezeichnet werden kann, aber das ist nicht der Punkt.

Nun, dann habe ich versucht, die Verteilung der Kilometerlängen in Blöcken unter Berücksichtigung ihres Vorzeichens (aufwärts oder abwärts) zu erfassen. Und die Ergebnisse wurden noch schlechter. Unerwartet.

Ich habe den Symbolsatz "28 Majors" und die Sätze für die einzelnen Majors (*AUD*, usw.) überprüft. Dies ist bereits in MT5. Ich überprüfte verschiedene Perioden, Parameter der Blockkonstruktion, verschiedene Nuancen von Input-Output.....

Die allgemeine Schlussfolgerung (nach den verfügbaren Ergebnissen) ist, dass die Effizienz des Systems abnimmt, wenn die Richtung der Länge der Bewegungen in Blöcken berücksichtigt wird. Wenn jemand das erklären kann, würde ich gerne wissen, was und wie. Wenn jemand ähnliche Erfahrungen gemacht hat, aber das gegenteilige Ergebnis erzielt hat, bin ich gerne bereit, darüber zu diskutieren und zu vergleichen.

Ja, der Chart hängt vom Ausgangspunkt der Konstruktion ab, dies geschieht absichtlich aus zwei Gründen, damit der Algorithmus, trotz der Fehler der Preisrundung mit Hilfe von Blöcken, besser die maximale Skala findet und der zweite Grund, um eine Anpassung an die Geschichte zu vermeiden. Wenn sich das Diagramm je nach Ausgangspunkt ändert, kann man die Qualität des Algorithmus selbst besser beurteilen.

Im Tester habe ich getestet und werde im nächsten Artikel viele Tests zeigen, wie es funktioniert. In der Demo ist es lang und nicht informativ. Für einen 1-Jahres-Test mit 28 Währungspaaren benötige ich 15 Tage (Ryzen 3700). So wie es beschrieben ist, sind die Renditen nicht großartig, aber es besteht Backtests sehr beständig. Ich bin gerade dabei, den Algorithmus zu verbessern.

Es gibt eine Besonderheit bei den statistischen Merkmalen des Tools. Sie können erfasst werden, und der Prozentsatz der Outperformance kann auf ihrer Grundlage angepasst werden, aber es ist notwendig, große Stichprobenwerte zu verwenden, um den Charakter des Instruments als Ganzes zu bewerten. Lokale Abweichungen können zwar erfasst werden, aber für andere Zwecke. Bei meinen Tests haben sich getrennte Übergewichtungsparameter für Long- und Short-Positionen bei Aktien bewährt, d.h. wenn die Asymmetrie berücksichtigt wird, wird es besser, ich werde dies auch im nächsten Artikel kurz aufzeigen.

Auch die anfängliche Blockgröße sollte an die aktuelle Marktsituation angepasst werden. Ursprünglich habe ich das über die Volatilität gemacht, aber jetzt überarbeite ich es, um die Marktbesonderheiten zu berücksichtigen.

Aber die Idee ist, zuerst einen grundlegenden Algorithmus zu erstellen und ihn dann mit Statistiken zu belegen. Statistiken können nicht einfach so gemessen werden, wir müssen berücksichtigen, dass wir statistische Merkmale in einem großen Fenster messen, und wenn sie vom Random Walk abweichen, werden sie in der Zukunft dazu tendieren, wir müssen also im Voraus suboptimale Parameter verwenden. Ich habe nicht über die Theorie geschrieben, weil ich sie nicht bewiesen habe, und ich schreibe nicht gerne über Dinge, die nicht bewiesen sind.

Im Allgemeinen ist der Algorithmus ein Knüppel, und in diesem Stadium ist es nicht seine Aufgabe, etwas abzulassen und zu verdienen.

 

Großartige Arbeit,


vielen Dank!