Diskussion zum Artikel "Universeller Expert Advisor: Benutzerstrategien und Hilfsklassen (Teil 3)"

 

Neuer Artikel Universeller Expert Advisor: Benutzerstrategien und Hilfsklassen (Teil 3) :

In diesem Artikel werden wir mit der Analyse der Algorithmen der Klasse CStrategy Trading Engine fortfahren. Der dritte Teil der Serie enthält die detaillierte Analyse von Beispielen, wie bestimmte Handelsstrategien mit diesem Ansatz entwickelt werden können. Ein besonderes Augenmerk wird auf die Hilfsalgorithmen gelegt — Ein Expert Advisor Protokollierungs-System (logging) und der Datenzugriff über gewöhnliche Indexe (Close[1], Open[0] etc.)

Sobald alle Strategien beschrieben worden sind, müssen wir die Instanzen erzeugen, sie mit den notwendigen Parametern initialisieren und sie der Trading Engine hinzufügen. Jede Strategie, die zu der Engine übergeben wird, sollte einige abrufbare Eigenschaften (Vollständige Eigenschaften) besitzen. Zu diesen Merkmalen sollten die folgenden Eigenschaften gehören:

  • Die eindeutige Kennzeichnung der Strategie (ihre magic number). Strategie-IDs müssen eindeutig sein, auch wenn sie als Instanzen derselben Klasse erstellt werden. Um eine eindeutige Nummer anzugeben, verwenden Sie die ExpertMagic() Set-Methode der Strategie.
  • Strategie Timeframe (oder die Periode). Selbst wenn eine Strategie auf mehreren Perioden in der gleichen Zeit läuft, müssen Sie noch die Timeframe angeben. Es könnte in diesem Fall zum Beispiel, die am meisten verwendete Timeframe sein Um die Periode anzugeben, verwenden Sie die Timeframe Set-Methode.
  • Strategy symbol (oder das aktuelle Finanzinstrument). Wenn eine Strategie mit mehreren Symbolen verwendet wird (eine Multi-Währungs-Strategie), müssen Sie dennoch das Arbeits-Symbol angeben. Dieses kann eines der Symbole sein, welches von der Strategie verwendet wird.
  • Strategy name. Zu den oben angegebenen Merkmalen muss jede Strategie auch noch ihren eigenen string Namen haben. Der Name des Expert-Advisors wird über die Methode ExpertName Set angegeben. Diese Eigenschaft wird gebraucht, da er für die automatische Erzeugung von Strategien aus der Datei Strategies.xml verwendet wird. Die selbe Eigenschaft wird verwendet, um die Strategie in dem Benutzer-Panel anzuzeigen, welches in dem 4. Artikel beschrieben wird.

Wenn auch nur eine dieser Merkmale nicht angegeben wird, dann verweigert die Engine das Laden des Algorithmus und gibt einen Warnhinweis zurück, in welchem der fehlende Parameter angegeben ist.

Autor: Vasiliy Sokolov

 
Ziemlich interessant. Es ist in der Tat möglich, den Entwicklungsprozess zu beschleunigen und zu vereinfachen. Sie verwenden Methoden aus der Standardbibliothek, um eine Position zu eröffnen, aber was ist mit anderen Standardklassen - Money Management, Trailing Stop. Ist es möglich, sie zu Ihrer Engine hinzuzufügen?
 
hftech:
Ziemlich interessant. Es ist in der Tat möglich, den Entwicklungsprozess zu beschleunigen und zu vereinfachen. Sie verwenden Methoden aus der Standardbibliothek, um eine Position zu eröffnen, aber was ist mit anderen Standardklassen - Money Management, Trailing Stop. Ist es möglich, sie zu Ihrer Engine hinzuzufügen?

Sie können andere Standardklassen über spezielle Adapter verwenden. Das Problem dabei ist jedoch, dass diese Klassen für MetaTrader 5 entwickelt wurden und plattformabhängig sind, während die CStrategy-Engine dies nicht ist. Der aufmerksame Leser hat wahrscheinlich schon bemerkt, dass die Engine alles absichtlich in OOP-Schichten verpackt, und das ist auch so gewollt.

Jetzt haben wir eine Superaufgabe - die Portierung von CStrategy auf MetaTrader 4. Dann wird die Strategie, die mit Hilfe der Engine geschrieben wurde, kompiliert und läuft auf beiden Plattformen zur gleichen Zeit.

P.S. In der Tat verwendet die Engine nicht die Standard-Handelsklasse CTrade, sondern öffnet Positionen mit Hilfe eines bestimmten CTradeControl, das CTrade sehr ähnelt und sogar davon erbt, aber nicht CTrade ist. In Zukunft wird es helfen, es auf MT4 zu portieren, was CStrategy wirklich plattformunabhängig machen wird.

 
Vasiliy Sokolov:

Sie können auch andere Standardklassen über spezielle Adapter verwenden. Die Schwierigkeit dabei ist jedoch, dass diese Klassen für MetaTrader 5 entwickelt wurden und plattformabhängig sind, während die CStrategy-Engine dies nicht ist. Der aufmerksame Leser hat wahrscheinlich schon bemerkt, dass die Engine alles absichtlich in OOP-Schichten verpackt, und das ist auch so gewollt.

Jetzt haben wir eine Superaufgabe - die Portierung von CStrategy auf MetaTrader 4. Dann wird die Strategie, die mit Hilfe der Engine geschrieben wurde, kompiliert und läuft auf beiden Plattformen zur gleichen Zeit.

P.S. In der Tat verwendet die Engine nicht die Standard-Handelsklasse CTrade, sondern öffnet Positionen mit Hilfe eines bestimmten CTradeControl, das CTrade sehr ähnelt und sogar davon erbt, aber nicht CTrade ist. In Zukunft wird es helfen, es auf MT4 zu portieren und CStrategy wirklich plattformunabhängig zu machen.

Sie sagen, in der Zukunft, wie werden die Updates erfolgen? Werden Sie regelmäßig neue Versionen der Bibliotheken bereitstellen? Wie sicher können Sie sein, dass sich der heutige Code nicht ändert, sonst laden Sie eine neue Version herunter und etwas fällt in den aktuellen Entwicklungen weg.


Sie können andere Standardklassen über spezielle Adapter verwenden.

Es wäre interessant, über ein Beispiel eines solchen Adapters zu lesen.

P.S. Tatsächlich verwendet die Engine nicht die Standard-Handelsklasse CTrade, sondern öffnet Positionen mit Hilfe eines CTradeControl, das CTrade sehr ähnelt und sogar davon erbt, es aber nicht ist. In Zukunft wird es helfen, es auf MT4 zu portieren, was CStrategy wirklich plattformunabhängig machen wird.

Ja, ich sehe ähnliche CTrade-Methoden in CTradeCustom, aber die Standardbibliotheken werden weiterhin verwendet:

#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\HistoryOrderInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\DealInfo.mqh>
 

Was die Plattformunabhängigkeit angeht, so ist das Konzept sicherlich interessant, aber wer braucht sie wirklich in der Praxis. Meiner Meinung nach hat jeder seine Wahl schon längst getroffen. MT5 ist vor allem für diejenigen interessant, die an Börsen arbeiten. MT4 ist perfekt für Forex und CFD. Wer am Forex arbeitet, arbeitet in der Regel nicht an der Börse und umgekehrt. Wer muss eine Strategie schreiben und sie auf beiden Plattformen umsetzen? Nur Roboterverkäufer. Aber das ist meine private Meinung, vielleicht liege ich ja falsch.

Als jemand, der ausschließlich auf MT5 arbeitet, wäre ich an einer Erweiterung der Funktionalität desselben CTradeControl interessiert. Zum Beispiel, um eine Position nur durch Limit-Orders zu eröffnen und interessante Ansätze zu verwenden, die z.B. die aktuelle Volatilität und Angebot/Nachfrage im Stack berücksichtigen.

 
hftech:

Sie sagen, in der Zukunft, aber wie werden die Updates passieren? Werden Sie regelmäßig neue Versionen von Bibliotheken veröffentlichen? Wie können Sie sicher sein, dass sich der heutige Code nicht ändert, oder dass Sie eine neue Version herunterladen und etwas in den aktuellen Entwicklungen verloren geht.

Es gibt leider keine Garantien. Wenn es notwendig ist, eine Änderung vorzunehmen, die die Einfachheit/Zuverlässigkeit/Infrastruktur der Engine erheblich verbessert, wird eine solche Änderung vorgenommen, zumindest in den ersten Phasen der Entwicklung der Codebasis.

Sie sollten sich jedoch keine großen Sorgen über diese potenziellen Änderungen machen, denn erstens werden sie höchstwahrscheinlich in der internen Struktur der Engine vorgenommen, und die Benutzer werden diese Änderungen nicht spüren. Zweitens sind die angegebenen Algorithmen durch jahrelange Praxis und auf anderen Plattformen getestet. Sie funktionieren wirklich. Und bis jetzt habe ich noch nichts Besseres erfunden, und ich habe mehr als ein paar ausprobiert: Modelle, die auf endlichen Automaten und anderen Vorlagen basieren, wie die von Wealth-Lab angebotene.

Was neue Versionen angeht - wir werden sehen. Es gibt noch ein paar weitere Aspekte, die noch nicht abgedeckt sind (Plattformunabhängigkeit und Arbeit mit ausstehenden Aufträgen). Ich werde Kräfte finden, um die Engine fertigzustellen, - dann wird es eine neue erweiterte Version geben, und die entsprechende Dokumentation für diese Funktionen in Form von Artikeln.

 
hftech:

Was die Plattformunabhängigkeit angeht, so ist das Konzept sicherlich interessant, aber wer braucht sie wirklich in der Praxis. Meiner Meinung nach hat jeder seine Wahl schon längst getroffen. MT5 ist vor allem für diejenigen interessant, die an Börsen arbeiten. MT4 ist perfekt für Forex und CFD. Wer am Forex arbeitet, arbeitet in der Regel nicht an der Börse und umgekehrt. Wer muss eine Strategie schreiben und sie auf beiden Plattformen umsetzen? Nur Roboterverkäufer. Aber das ist meine private Meinung, vielleicht liege ich ja falsch.

Als jemand, der ausschließlich auf MT5 arbeitet, wäre ich an einer Erweiterung der Funktionalität desselben CTradeControl interessiert. Zum Beispiel, um eine Position nur durch Limit-Orders zu eröffnen und mit interessanten Ansätzen, die zum Beispiel die aktuelle Volatilität und Angebot/Nachfrage im Stack berücksichtigen.

Viele müssen in der Praxis mit zwei Plattformen gleichzeitig arbeiten. Zum Beispiel testen sie auf MT4 mit ihren eigenen Daten und handeln auf MT5 (bis MT5 seine eigenen Datenfeeds hat, wird sich die Situation nicht ändern). Und hier ist es sehr wichtig, die gleiche Algorithmus-Implementierung für beide Plattformen gleichzeitig zu haben. Andernfalls sind unangenehme Überraschungen möglich.

Auch für Anbieter und Freiberufler ist es sehr bequem, für zwei Plattformen gleichzeitig zu schreiben, ohne sich um die berühmt-berüchtigte Inkompatibilität sorgen zu müssen. Übrigens ist es falsch, sie in den Hintergrund zu drängen. Freiberufler schreiben eine sehr große Menge an Code und sind sehr beschäftigt. Sie haben keine Zeit, um verschiedene Konzepte und Engines zu entwickeln. Deshalb ist es wichtig, ihnen ein Werkzeug an die Hand zu geben und es klar zu beschreiben. Für viele Menschen, auch solche, die nicht mit dem Programmieren vertraut sind, wird es das Leben viel einfacher machen und helfen, die TOR (in den Regeln der Engine) klarer zu formulieren.

 
Vasiliy Sokolov:

Viele müssen in der Praxis mit zwei Plattformen gleichzeitig arbeiten. Zum Beispiel testen sie auf MT4 mit ihren eigenen Daten, und auf MT5 handeln sie (bis MT5 seine eigenen Datenfeeds hat, wird sich die Situation nicht ändern). Und hier ist es sehr wichtig, die gleiche Algorithmus-Implementierung für beide Plattformen gleichzeitig zu haben. Andernfalls sind unangenehme Überraschungen möglich.

Auch für Anbieter und Freiberufler ist es sehr bequem, für zwei Plattformen gleichzeitig zu schreiben, ohne sich um die berühmt-berüchtigte Inkompatibilität sorgen zu müssen. Übrigens ist es falsch, sie in den Hintergrund zu drängen. Freiberufler schreiben eine sehr große Menge an Code und sind sehr beschäftigt. Sie haben keine Zeit, um verschiedene Konzepte und Engines zu entwickeln. Deshalb ist es wichtig, ihnen ein Werkzeug an die Hand zu geben und es klar zu beschreiben. Für viele Menschen, auch wenn sie nicht mit dem Programmieren vertraut sind, wird es das Leben viel einfacher machen und helfen, die TOR klarer zu formulieren (in den Regeln der Engine).

Danke für die Artikel, tolle Idee! Wir warten schon auf die Fortsetzung.

Ich denke, Sie werden bald zusätzliche Shell-Klassen für die Portierung von Cstrategy auf mt4 schreiben und eine einfache Zeile wie Trade.Buy(MM.GetLotFixed(), ExpertSymbol(), "");

wird auf beiden Plattformen gleichermaßen kompiliert.

Aber bis jetzt stellt sich heraus, dass der universelle Expert Advisor nur in der Kompilierungsphase plattformunabhängig ist?

1) Wird es möglich sein, die gleiche Positionseröffnung im mt4-Tester und im mt5-Real/Demokonto zu erreichen? Lassen Sie es mit der Verwendung Ihrer Daten in mt4 und natürlich Ihrer Engine sein. OHLC zwischen dem Tester und dem realen Konto kann unterschiedlich sein, so dass die Indikatoren Lesungen unterschiedlich sein wird, und daher die Verfügbarkeit von Trades.

2) Sie müssen auch über die Divergenz der Konzepte der Aufträge und Transaktionen zwischen den Plattformen zu denken. D.h. hier ist es notwendig, die Möglichkeit auszuschließen, multidirektionale Positionen in mt4 zu eröffnen und sich dabei an die Logik von mt5 zu halten.

Wie werden Sie diese beiden Probleme lösen? Oder kann der Endbenutzer selbst damit umgehen?)

Vielen Dank

 
Arnold Bobrinskiy:

2) Wir müssen auch über die Divergenz der Konzepte der Aufträge und Trades zwischen den Plattformen denken. D.h. es ist notwendig, die Möglichkeit der Eröffnung von multidirektionalen Positionen in mt4 auszuschließen, indem man sich an die Logik von mt5 hält.

Die zweite Frage kann ich sofort beantworten: Die Engine hat keine Einschränkungen bei der Eröffnung von multidirektionalen Positionen. Im Gegenteil, sie wurde ursprünglich geschrieben, um multidirektionale Positionen zu verwalten. Das heißt, alles wird in MT4 nicht weniger Standard sein als in MT5.
 
Vasiliy Sokolov:
Die zweite Frage kann ich sofort beantworten: Die Engine hat keine Einschränkungen bei der Eröffnung von multidirektionalen Positionen. Im Gegenteil, sie wurde ursprünglich geschrieben, um multidirektionale Positionen zu verwalten. D.h. alles wird im MT4 nicht weniger Standard sein als im MT5.
Aber wie wird dann der Expert Advisor die Logik auf die gleiche Weise wiederholen? In mt5 wird z.B. eine Kaufposition mit 0,2 Lot eröffnet, nach dem Befehl sell 0,2 soll die Position geschlossen werden. In mt4 gibt es in diesem Fall 2 multidirektionale Positionen, während es in mt5 keine offenen Positionen mehr geben wird.
 
Arnold Bobrinskiy:
Wie wiederholt der Expert Advisor dann die Logik auf dieselbe Weise? Zum Beispiel wird in mt5 eine Kaufposition mit 0,2 Lot eröffnet, nach dem Befehl sell 0,2 soll die Position geschlossen werden. In mt4 gibt es in diesem Fall 2 multidirektionale Positionen, während es in mt5 keine offenen Positionen mehr geben wird.

Im MT5 hat der Expert Advisor nur eine einzige Position zu verwalten. In MT4 erhält der Expert Advisor mehrere Positionen nacheinander. Wenn Sie im MT5 eine Konvertierungsoperation durchführen, ohne die aktuelle Position zu prüfen (kaufen, wenn es eine Verkaufsposition gibt, und verkaufen, wenn es eine Kaufposition gibt), wird die Position geschlossen, und beim nächsten Aufruf ruft der Expert Advisor das Modul zur Positionsverwaltung einfach nicht auf.

Die Top-Down-Kompatibilität ist ebenfalls offensichtlich: Expert Advisors, die für MT5 geschrieben wurden und nur eine Position in einer Richtung handeln, funktionieren normal in MT4. Expert Advisors, die im MT4 mehrere Positionen gleichzeitig handeln, können die gleiche Logik im MT5 nicht umsetzen. Wenn aber eine Position nur in eine Richtung gehandelt wird, sollte es im MT5 keine Probleme geben.