Diskussion zum Artikel "Entwicklung eines Expertenberaters für mehrere Währungen (Teil 2): Übergang zu virtuellen Positionen von Handelsstrategien"
Ich habe ihn noch nicht zu Ende gelesen. Die Eingaben sind ein gutes Beispiel.
1.
input string symbol_ = "EURGBP"; // Handelsinstrument (Symbol) input ENUM_TIMEFRAMES timeframe_ = PERIOD_H1; // Zeitplan Zeitraum input group "=== Parameter des Eröffnungssignals" input int signalPeriod_ = 13; // Anzahl der Kerzen für die Volumenmittelung input double signalDeviation_ = 0.3; // Relative Abweichung vom Durchschnitt bei der Eröffnung des ersten Auftrags input double signaAddlDeviation_ = 1.0; // Relative Abweichung vom Durchschnitt für die Eröffnung des zweiten und der folgenden Aufträge input group "=== Ausstehende Auftragsparameter." input int openDistance_ = 0; // Abstand vom Preis zum schwebenden Auftrag input double stopLevel_ = 10500; // Stop Loss (in Punkten) input double takeLevel_ = 465; // Gewinnmitnahme (in Pips) input int ordersExpiration_ = 1000; // Verfallszeit der schwebenden Aufträge (in Minuten) input group "=== Kapitalverwaltungsoptionen" input int maxCountOfOrders_ = 3; // Max. Anzahl der gleichzeitig geöffneten Aufträge
int OnInit() { expert = new CAdvisor(new CVolumeReceiver(magic_)); expert.Add(new CSimpleVolumesStrategy( symbol_, timeframe_, fixedLot_, signalPeriod_, signalDeviation_, signaAddlDeviation_, openDistance_, stopLevel_, takeLevel_, ordersExpiration_, maxCountOfOrders_) ); // Hinzufügen einer Instanz der Strategie return(INIT_SUCCEEDED); }
class CSimpleVolumesStrategy : public CStrategy { private: //--- Parameter des Öffnungssignals int m_signalPeriod; // Anzahl der Kerzen für die Volumenmittelung double m_signalDeviation; // Relative Abweichung vom Durchschnitt bei der Eröffnung des ersten Auftrags double m_signaAddlDeviation; // Relative Abweichung vom Durchschnitt für die Eröffnung des zweiten und der folgenden Aufträge //--- Parameter der schwebenden Aufträge int m_openDistance; // Abstand vom Preis zum schwebenden Auftrag double m_stopLevel; // Stop Loss (in Punkten) double m_takeLevel; // Gewinnmitnahme (in Pips) int m_ordersExpiration; // Verfallszeit der schwebenden Aufträge (in Minuten) //--- Parameter für die Kapitalverwaltung int m_maxCountOfOrders; // Max. Anzahl der gleichzeitig geöffneten Aufträge
4.
public: //--- Öffentliche Methoden CSimpleVolumesStrategy( string p_symbol, ENUM_TIMEFRAMES p_timeframe, double p_fixedLot, int p_signalPeriod, double p_signalDeviation, double p_signaAddlDeviation, int p_openDistance, double p_stopLevel, double p_takeLevel, int p_ordersExpiration, int p_maxCountOfOrders );
5-6.
//+------------------------------------------------------------------+ //| Konstruktor| //+------------------------------------------------------------------+ CSimpleVolumesStrategy::CSimpleVolumesStrategy( string p_symbol, ENUM_TIMEFRAMES p_timeframe, double p_fixedLot, int p_signalPeriod, double p_signalDeviation, double p_signaAddlDeviation, int p_openDistance, double p_stopLevel, double p_takeLevel, int p_ordersExpiration, int p_maxCountOfOrders) : // Initialisierungsliste CStrategy(p_symbol, p_timeframe, p_fixedLot), // Aufruf des Konstruktors der Basisklasse m_signalPeriod(p_signalPeriod), m_signalDeviation(p_signalDeviation), m_signaAddlDeviation(p_signaAddlDeviation), m_openDistance(p_openDistance), m_stopLevel(p_stopLevel), m_takeLevel(p_takeLevel), m_ordersExpiration(p_ordersExpiration), m_maxCountOfOrders(p_maxCountOfOrders) { ArrayResize(m_orders, m_maxCountOfOrders); // Laden Sie den Indikator, um Tick-Volumen zu erhalten iVolumesHandle = iVolumes(m_symbol, m_timeframe, VOLUME_TICK); // Einstellen der Größe des Array-Empfängers von Tick-Volumes und der erforderlichen Adressierung ArrayResize(volumes, m_signalPeriod); ArraySetAsSeries(volumes, true); }
Jeder Eingabeparameter muss fünf- oder sechsmal vorgeschrieben werden.
Lesen Sie den Artikel. Dank an den Autor, gute Sondierung, in welche Richtungen wir uns bewegen können.
Eine aussagekräftige Beobachtung, nach der es keinen Sinn hat, Kritik zu üben, sondern direkt zum konstruktiven Teil übergehen sollte - zum Vorschlagen.
In dem Artikel wird das Konzept des virtuellen Handels erörtert, gefolgt von einer einseitigen Synchronisierung des virtuellen Handels mit dem realen Handel. Als Beispiel für den Tester ist er gut geeignet. Aber nur als Beispiel.
In der Praxis wird ein solches TS-Portfolio aus EX5 erstellt (kostenlos für den Tester) - laufen lassen, tst-Dateien der einzelnen Läufe erhalten, daraus einen gemeinsamen Einzellauf mit beliebigen MM-Regeln erstellen.
Für Tester brauchen Sie Geschwindigkeit. Versuchen Sie abzuschätzen, wie sehr sich die Geschwindigkeit der Optimierung für die Variante mit und ohne Virtualisierung verändert.
Das Konzept selbst ist gut für den realen Handel. Aber für den Synchronisierer müssen Sie die Geschichte des virtuellen Handels aufbewahren. Da gibt es eine Menge Dinge. Eine ernste Sache, um es milde auszudrücken.
Architektonisch wäre die Virtualisierung vom TS losgelöst. Ich habe nur die aktuelle Quelle der Virtualisierung 350 Kb. Und es wird wachsen.
Gehen Sie vorsichtig an die Wahl der Handels-API für den virtuellen Handel heran. Wählen Sie aus den verfügbaren. Es ist logisch, der API den Vorzug zu geben, auf der es so einfach wie möglich ist, den TS zu programmieren. Ich verstehe nicht wirklich die gängige Praxis aller Handelsplattformen, ihr eigenes Fahrrad zu erfinden - die Trading-API. Es mit OOP-Elementen "out of the box" auszustatten, usw. In diesem Sinne ist MQ einen guten Weg gegangen - alle APIs ohne OOP.
Bevor ich solche Artikel lese, schaue ich mir immer die Testergebnisse an. Zumindest im Testgerät. Als ich 19% Gewinn für 5 Jahre sah, fühlte ich mich leicht und glücklich! Das ist viel mehr als der Autor von 75 Artikeln über neuronale Netze! ))
Aber jetzt ist es klar, wie man garantiert Geld auf dem Forex zu machen. Ich pflegte zu denken, nur zu lehren, Trottel auf Elliot Wellen, aber es stellt sich heraus, es ist immer noch ein großer Weg )).
Lesen Sie den Artikel. Vielen Dank an den Autor, guter Einblick in die Richtungen zu gehen.
Vielen Dank für Ihr Interesse und Ihre konstruktiven Kommentare. Ich versuche, sie zu berücksichtigen und sie so weit wie möglich zu nutzen. Ich werde später ausführlicher antworten, im Moment habe ich keine Zeit.
Aber jetzt ist es klar, wie man garantiert Geld auf dem Forex verdienen kann. Ich pflegte zu denken, nur zu lehren, Trottel auf Elliot Wellen, aber es stellt sich heraus, es ist immer noch ein großer Weg )).
Ich kann nicht widerstehen, hier zu bemerken, dass 19% der Gewinne für fünf Jahre auf den Test wurden durch eine konstante Menge in den Bedingungen der Drawdown weniger als $ 1000, das heißt 1% gemacht. Wenn Sie sich auf einen maximalen Drawdown von sogar 10 % konzentrieren und ein variables Los verwenden, sehen die Ergebnisse noch interessanter aus.
//+------------------------------------------------------------------+ //|SimpleVolumesExpertSingle.mq5 | //|Urheberrecht 2024, Yuriy Bykov | //| https://www.mql5.com/de/users/antekov | //+------------------------------------------------------------------+ #property copyright "Copyright 2024, Yuriy Bykov" #property link "https://www.mql5.com/de/articles/14107" #property description "Die Expert Advisor Pending Order in dem Moment, in dem das Tick-Volumen der Kerze das durchschnittliche Volumen übersteigt". #property description "in Richtung der aktuellen Kerze". #property description "Wenn die Aufträge noch nicht zu Positionen geworden sind, werden sie bei Ablauf gelöscht. #property description "Offene Positionen werden nur bei SL oder TP geschlossen." #include "Advisor.mqh" #include "SimpleVolumesStartegy.mqh"
Ein Tippfehler.
In der Praxis wird ein solches Portfolio von TS aus EX5 erstellt (kostenlos vom Markt für den Tester) - laufen lassen, tst-Dateien von einzelnen Pässen erhalten, aus ihnen einen gemeinsamen einzelnen Lauf mit beliebigen MM-Regeln machen.
Ich habe diese Option noch nicht in Betracht gezogen, ich werde im Hinterkopf behalten, dass es auch möglich ist. Wenn es mir jedoch gelingt, einen guten Satz vorgefertigter Expert Advisors auf dem Markt zu finden, wie kann ich sie dann zusammen verwenden? Lasse ich einfach den gesamten Satz mit den ausgewählten MM-Parametern laufen?
Für den Tester brauchen Sie Geschwindigkeit. Versuchen Sie abzuschätzen, wie stark sich die Geschwindigkeit der Optimierung bei der Variante mit und ohne Virtualisierung ändert.
Ich werde es versuchen, aber es scheint, dass der Gewinn spürbar wird, wenn die Anzahl der gleichzeitig laufenden Strategien Dutzende oder Hunderte von Instanzen beträgt.
Ich habe mir vorgenommen, die Verwendung Ihrer virtuellen Bibliothek zur Beschleunigung von Tests genauer zu beschreiben, bin aber noch nicht dazu gekommen. Der Hauptgrund dafür ist, dass ich an die MT5-Handelsfunktionen gewöhnt bin. Als ich meine Expert Advisors von MT4 auf MT5 umstellen musste, gab es viele Unannehmlichkeiten, und ich habe erst später von Virtual erfahren.
Jetzt überlege ich, eine Child-Klasse von CReceiver zu erstellen, die die Virtual-Umgebung nutzt.

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Entwicklung eines Expertenberaters für mehrere Währungen (Teil 2): Übergang zu virtuellen Positionen von Handelsstrategien :
Lassen Sie uns mit der Entwicklung eines Multiwährungs-EAs mit mehreren parallel arbeitenden Strategien fortfahren. Versuchen wir, die gesamte mit der Eröffnung von Marktpositionen verbundene Arbeit von der Strategieebene auf die Ebene des EA zu verlagern, der die Strategien verwaltet. Die Strategien selbst werden nur virtuell gehandelt, ohne Marktpositionen zu eröffnen.
Im letzten Artikel haben wir mit der Entwicklung eines Multiwährungs-EAs begonnen, der gleichzeitig mit verschiedenen Handelsstrategien arbeitet. In der ersten Phase gab es nur zwei verschiedene Strategien. Sie stellten die Umsetzung derselben Handelsidee dar und arbeiteten mit demselben Handelsinstrument (Symbol) und Chart-Zeitrahmen (Periode). Sie unterschieden sich nur in den numerischen Werten der Parameter voneinander.
Außerdem haben wir die optimale Größe der offenen Positionen auf der Grundlage des gewünschten maximalen Drawdown-Niveaus (10 % der Einlage) bestimmt. Wir haben dies für jede Strategie separat getan. Als wir die beiden Strategien miteinander kombinierten, mussten wir die Größe der eröffneten Positionen reduzieren, um das vorgegebene Drawdown-Niveau zu halten. Bei zwei Strategien war der Rückgang gering. Was aber, wenn wir Dutzende oder Hunderte von Strategieinstanzen kombinieren wollen? Es kann durchaus vorkommen, dass wir bei einigen Strategien die Positionsgröße auf einen Wert reduzieren müssen, der unter der vom Broker erlaubten Mindestgröße für offene Positionen liegt. In diesem Fall sind diese Strategien einfach nicht in der Lage, am Handel teilzunehmen. Wie können wir sie zum Funktionieren bringen?
Zu diesem Zweck nehmen wir den Strategien das Recht, selbstständig Positionen zu eröffnen und schwebende Aufträge zu erteilen. Die Strategien müssen nur noch virtuell handeln, d. h. sich merken, auf welchen Niveaus Positionen einer bestimmten Größe eröffnet werden sollten, und auf Anfrage melden, welches Volumen jetzt eröffnet werden sollte. Wir eröffnen echte Marktpositionen erst, nachdem wir alle Strategien geprüft und das erforderliche Gesamtvolumen berechnet haben, wobei wir die Skalierung berücksichtigen, um einen bestimmten Drawdown aufrechtzuerhalten.
Uns geht es jetzt nur darum, die Eignung dieses Ansatzes zu prüfen, nicht aber die Effizienz seiner Umsetzung. Daher werden wir im Rahmen dieses Artikels versuchen, zumindest eine funktionierende Implementierung dieses Ansatzes zu entwickeln, die uns später dabei helfen wird, einen aus architektonischer Sicht schöneren Ansatz zu entwickeln, da wir bereits wissen, wie wir Fehler vermeiden können.
Autor: Yuriy Bykov