Diskussion zum Artikel "Universeller Expert Advisor: Handelsmodi von Strategien (Teil 1)"

 

Neuer Artikel Universeller Expert Advisor: Handelsmodi von Strategien (Teil 1) :

Jeder Entwickler von Expert Advisors, ungeachtet seiner Programmierfähigkeiten, wird mit den gleichen Aufgaben und algorithmischen Problemen konfrontiert, die für einen sicheren Handelsprozess auf diese oder jene Weise gelöst werden müssen. Dieser Beitrag beschreibt die Möglichkeiten des 'Handelsmotors' CStrategy, der die Lösung dieser Aufgaben übernehmen und dem Nutzer geeignete Mechanismen zur Beschreibung seiner Handelsidee anbieten kann.

Im Laufe der Umsetzung eines Hanldesalgorithmus stellen sich verschiedene Aufgaben. Dazu gehören sowohl die Analyse der Marktumgebung und das Erhalten von Signalen zum Eintritt, als auch das Schließen einer vorhandenen Position. Des Weiteren zählen dazu die Kontrolle über die Korrektheit von Operationen des Expert Advisors sowie eine richtige Bearbeitung von Fehlern beim Handel. Schließlich ist auch ein einfacher und bequemer Zugang zu Marktdaten und eigenen Positionen des Expert Advisors von großer Bedeutung. Diese Aufgaben werden unmittelbar im Quellcode des Experten umgesetzt.

Von der anderen Seite muss man zwischen der technischen Seite des Handelsprozesses und der eigentlichen Idee unterscheiden, die im Expert Advisor umgesetzt wird. Mit dem objektorientierten Ansatz kann man diese zwei unterschiedlichen Aufgaben trennen und einer bestimmten für alle Strategien gemeinsamen Klasse delegieren, die manchmal auch als Handelsmotor bezeichnet wird.

Dieser Beitrag eröffnet eine Artikelserie, die die Arbeit eines solchen Motors beschreibt, den man "Universeller Experte" nennen kann. Der Name vereint Klassen-Sets, mit denen man Handelsalgorithmen auf eine einfache Weise durch die Aufzählung von Bedingungen für Einstieg und Ausstieg schreiben kann. Dabei braucht man den eigenen Experten nicht mit Daten oder der Handelslogik wie Iteration von Positionen versehen — all das erledigt der Handelsmotor.

Handelsmodi einer Strategie

Häufig muss man die Handlungen von Experten beschränken. Das einfachste Beispiel — dem Experten zu verbieten, Short- oder umgekehrt Long-Trades auszuführen. MetaTrader 4 bietet einen Umschalter dieser Modi. Er befindet sich im Tab des Einstellungen-Fensters, das beim Starten des Experten erscheint:

Abb. 2. Handelsmodi in MetaTrader 4

Es können aber auch mehr Modi vorhanden sein. Darüber hinaus kann es erscheinen, dass flexiblere Werkzeuge für die Konfiguration dieser Modi benötigt werden. In einigen Experten muss man z.B. den Handel zu bestimmten Zeitpunkten vorübergehend stoppen. Nehmen wir an, dass der Handelsexperte während der pazifischen Handelszeit neue Signale zum Einstieg ignorieren muss. Das ist eine klassische Methode, den Handel des Experten während einer niedrigen Volatilität auf dem Devisenmarkt zu beschränken. Wie implementiert man diesen Handelsmodus am besten und macht ihn dabei optional? Die Handelslogik aus vier Blöcken hilft uns wieder dabei.

Autor: Vasiliy Sokolov

 

Logisch, interessant...aber ich habe schon vor langer Zeit auf unnötige Funktionen in Expert Advisors (Zeitpläne, Nachrichten und andere externe Dinge) verzichtet.

Es gibt eine schönere Lösung - es ist bequemer, den Modus des Expert Advisors über Terminal-Variablen einzustellen. In den Parametern des Expert Advisors werden mehrere Namen von Variablen angegeben, an deren Werten er sich orientiert.

 
Maxim Kuznetsov:

Logisch, interessant...aber ich habe schon vor langer Zeit auf unnötige Funktionen in Expert Advisors (Zeitpläne, Nachrichten und andere externe Dinge) verzichtet.

Es gibt eine schönere Lösung - es ist bequemer, den Modus des Expert Advisors über Terminal-Variablen einzustellen. In den Parametern des Expert Advisors sind mehrere Namen von Variablen angegeben, an deren Werten er sich orientiert.

Die Idee ist, diese Tricks in Hilfsmodulen zu verstecken. Der Benutzer gibt eine formale Beschreibung des TS ab, und die Trading Engine erledigt alles andere für ihn.

Übrigens sind die "Handelsmodi" nur eine Folge der vorgeschlagenen Organisation der EA-Logik. Wenn Sie die Handelslogik eines EA anhand von vier Aktionen beschreiben, ergeben sich die Handelsmodi von selbst. Wenn Sie lernen, wie man einen TS unter Verwendung dieser vier Aktionen schreibt, erhöht sich die Geschwindigkeit beim Schreiben eines Expert Advisors um ein Vielfaches und die Anzahl der Fehler tendiert gegen Null - das wurde vielfach getestet.

 
Vasiliy Sokolov:

Die Idee ist, diese Tricks in Hilfsmodulen zu verstecken. Der Benutzer gibt eine formale Beschreibung des TS ab, und die Handelsmaschine erledigt den Rest für ihn.

Übrigens sind die "Handelsmodi" nur eine Folge der vorgeschlagenen Organisation der EA-Logik. Wenn Sie die Handelslogik eines EA anhand von vier Aktionen beschreiben, ergeben sich die Handelsmodi von selbst. Wenn man lernt, wie man einen TS mit Hilfe dieser vier Aktionen schreibt, erhöht sich die Geschwindigkeit des EA-Schreibens um ein Vielfaches und die Anzahl der Fehler tendiert gegen Null - das ist vielfach getestet worden.

Die Tatsache, dass Handelsmodi erscheinen, ist unbestreitbar. Aber es ist besser, diese Modi von außen zu setzen, im Allgemeinen mit externen Mitteln. Auf diese Weise "verlässt" der EA unnötigen Code, egal wie man es betrachtet, und er frisst Ressourcen (Rechenleistung, Entwicklung, Support usw.). Aber anstelle eines EA erhält man eine Art "Einkaufszentrum", in dem man mehrere Eulen mit einer Fernbedienung steuern kann.
 
Maxim Kuznetsov:
Es ist unbestreitbar, dass es Handelsformen gibt. Aber es ist besser, diese Modi von außen, durch externe Mittel zu setzen. Auf diese Weise "verlässt" der EA unnötigen Code, egal wie man es betrachtet, und er frisst Ressourcen (Rechenleistung, Entwicklung, Support usw.). Aber anstelle eines EA erhält man eine Art "Einkaufszentrum", in dem man mehrere Eulen mit einer Fernbedienung steuern kann.

Nun, im Allgemeinen werden sie von außen eingestellt. Sie können z.B. eine visuelle Form von Handelsmodi erstellen. Dies ist sogar unter Win32 möglich. Es ist auch möglich, Handelsmodi als Parameter zu setzen. Die Engine selbst verfügt über keine Handelsmodi. Dadurch wird das erreicht, worüber Sie schreiben: Unabhängigkeit der Strategie von Add-ons und Erweiterungen - Sie können sie verwenden oder nicht, sie sind einfach geschrieben und beschrieben und können bei Bedarf verwendet werden.

 
Ich fand die Idee recht interessant und werde sie weiter lesen. Danke für den Artikel.
 
Maxim Kuznetsov:
Es ist unbestreitbar, dass es Handelsformen gibt. Aber es ist besser, diese Modi von außen, durch externe Mittel zu setzen. Auf diese Weise "verlässt" der EA unnötigen Code, egal wie man es betrachtet, und er frisst Ressourcen (Rechenleistung, Entwicklung, Support usw.). Aber anstelle eines EAs erhalten Sie eine Art "Handelskomplex", bei dem Sie mehrere Eulen mit einer Fernbedienung steuern können.

Wie kommen Sie darauf, dass das besser ist? Ihr Ansatz ist ekelhaft! Erzählen Sie mir mehr darüber, wie realistisch Sie sind und dass Sie keinen Tester benutzen.

Du bekommst viele Funktionen, die das Ergebnis der Arbeit des EAs bestimmen, aber nicht im Tester überprüft werden können.

Alles, was die Arbeit des EAs verändert, sollte über das EA-Eigenschaftenfenster geregelt werden.

 

Toller Artikel, wo ist die Fortsetzung? Beeilen Sie sich und übersetzen Sie ihn!


 

Ich habe gerade angefangen, es zu verstehen. Ich möchte eine Beschreibung der XML-Strategie - was gibt es wo. Und zumindest eine XML-Datei. IMHO fehlt sie im Archiv.

Ich danke Ihnen.

 
Yuriy Asaulenko:

Ich habe gerade angefangen, es zu verstehen. Ich möchte eine Beschreibung der XML-Strategie - was gibt es wo. Und zumindest eine XML-Datei. IMHO fehlt sie im Archiv.

Vielen Dank dafür.

Beispiel für die XML-Serialisierung von Strategien:

<Global>
        <Strategies>
                <Strategy Name="MovingAverage" Magic="100" Timeframe="PERIOD_M1" Symbol="Si">
                        <TradeStateStart> Stop</TradeStateStart>
                        <Params>
                                <FastMA> 1</FastMA>
                                <SlowMA> 3</SlowMA>
                                <Shift> 0</Shift>
                                <Method> MODE_SMA</Method>
                                <AppliedPrice> PRICE_CLOSE</AppliedPrice>
                        </Params>
                </Strategy>
                <Strategy Name="MovingAverage" Magic="101" Timeframe="PERIOD_M5" Symbol="SBRF">
                        <TradeStateStart> BuyOnly</TradeStateStart>
                        <Params>
                                <FastMA> 15</FastMA>
                                <SlowMA> 21</SlowMA>
                                <Shift> 0</Shift>
                                <Method> MODE_SMA</Method>
                                <AppliedPrice> PRICE_CLOSE</AppliedPrice>
                        </Params>
                </Strategy>
                <Strategy Name="BollingerBands" Magic="102" Timeframe="PERIOD_M15" Symbol="GAZR">
                        <TradeStateStart> BuyAndSell</TradeStateStart>
                        <Params>
                                <Period> 30</Period>
                                <StdDev> 1.5</StdDev>
                        </Params>
                </Strategy>
                <Strategy Name="BollingerBands" Magic="103" Timeframe="PERIOD_M30" Symbol="ED">
                        <TradeStateStart> BuyAndSell</TradeStateStart>
                        <Params>
                                <Period> 20</Period>
                                <StdDev> 2.0</StdDev>
                        </Params>
                </Strategy>
        </Strategies>
</Global>

Das Thema der Strategie-Serialisierung wird in den folgenden Teilen behandelt. Dieses Beispiel ist dort vorhanden.

 

Hallo,

Der Quellcode des Artikels lässt sich nicht kompilieren.
Der zurückgegebene Fehler lautet:

cannot cast 'DoubleValue' to 'ULongValue' Dictionary.mqh 210 14

     lValue=(ULongValue)dValue;


Vielen Dank für Ihre Hilfe,
Pierre8r