Diskussion zum Artikel "Universal Expert Advisor: Das Event-Modell und der Trading-Strategie Prototyp (Part 2)" - Seite 2

 

Hallo,

Ich habe versucht, Ihren Code (Agent.mq5) zu kompilieren und erhielt folgende Fehlermeldung. Build 1274

Interner Compiler-Fehler Agent.mq5 1 1

Außerdem gibt es einen kleinen Tippfehler in Zeile 388 von Dictionary.mqh

/| Returns previous object.       The current object becomes previous|
 

Auf Build 1241 wird der Code gut kompiliert, also habe ich versucht, einen Backtest durchzuführen. Es nimmt keine Trades.

Nachdem ich ein wenig gegraben habe, fand ich heraus, dass es am Füllmodus liegt. Der bei dem von mir verwendeten Broker/Symbol erlaubte Modus ist ORDER_FILLING_IOC. Ihre TradeCustom-Klasse setzt den Füllmodus standardmäßig auf ORDER_FILLING_FOK. Ich weiß nicht, wie ich diesen Füllmodus ändern kann, damit der Agent.mq5 EA den Handel aufnehmen kann. Ich könnte suchen, aber es wird mich eine Menge Zeit kosten.

Das ist das Problem mit solchen Tools, sehr ähnlich wie MQL5 Wizard EA von Metaquotes, es ist fast unbrauchbar für jeden, der nicht weiß, alle Details der Klassen. Sobald man auf ein Problem stößt, das nicht vom Autor bereitgestellt wurde, wird es zu einer echten Qual, es zu beheben oder zu ändern/hinzuzufügen. Ich sehe keinen wirklichen Unterschied zwischen Ihrer Lösung und der von Metaquotes (Assistent).

Wie auch immer, ich gratuliere Ihnen zu dieser enormen Arbeit. Es ist eine großartige Programmierarbeit.

 

Vasily, als "Leitfaden für OOP-Anwendungen im Handel" sind Ihre Arbeiten sehr informativ und nützlich, aber als "funktionierende Handelsmaschine" sind sie sehr schlecht. Ich spreche insbesondere von der Vielfalt der "Verwaltungsfunktionen".

Heute ist MT5 in Bezug auf die Zugänglichkeit und die Loyalität der Händler nahe an MT4 herangerückt (der Hedge-Handel wurde hinzugefügt). Im Laufe der Jahre hat MT4 eine ganze Reihe von Verwaltungsfunktionen im freien Zugang angesammelt:

* Teilweise Schließung von Positionen (ich meine die Kontrolle dieses Prozesses durch die Handelsmaschine);

* Vielzahl von STOP-Berechnungen;

* dynamische STOPs;

* virtuelle STOPs;

* professionelles MM (d.h. Kontrolle über die Verteilung der Mittel zwischen den Strategien). Das endgültige und vor allem nachhaltige Handelsergebnis hängt nicht vom richtigen Ein- und Ausstieg in den Markt ab (obwohl dies wichtig ist), sondern von der richtigen Investition;

* virtueller Handel;

* Aufbau eines Netzwerks. D.h. die Verknüpfung einer Reihe von Aufträgen, die durch eine einzige Logik der Losgrößenbildung für jede Position in der Reihe verbunden sind.

* lässt viel zu wünschen übrig und die Implementierung der Ausnahmebehandlung bei der Ausführung von Handelsaufträgen (Requotes, Fehler #130 [MT4], STOPLEVEL, FREEZELEVEL, usw., usw.).

Es stellt sich die Frage: "Werden Sie Ihre Engine im freien Zugang weiterentwickeln?".

 
Гога:

Vasily, als "Leitfaden für OOP-Anwendungen im Handel" sind Ihre Arbeiten sehr informativ und nützlich, aber als "funktionierende Handelsmaschine" sind sie sehr schlecht. Ich spreche insbesondere von der Vielfalt der "Verwaltungsfunktionen".

Heute ist MT5 in Bezug auf die Zugänglichkeit und die Loyalität der Händler nahe an MT4 herangerückt (der Hedge-Handel wurde hinzugefügt). Im Laufe der Jahre hat MT4 eine ganze Reihe von Verwaltungsfunktionen im freien Zugang angesammelt:

* Teilweise Schließung von Positionen (ich meine die Kontrolle dieses Prozesses durch die Handelsmaschine);

* Vielzahl von STOP-Berechnungen;

* dynamische STOPs;

* virtuelle STOPs;

* professionelles MM (d.h. Kontrolle über die Verteilung der Mittel zwischen den Strategien). Das endgültige und vor allem nachhaltige Handelsergebnis hängt nicht vom richtigen Ein- und Ausstieg in den Markt ab (obwohl dies wichtig ist), sondern von der richtigen Investition;

* virtueller Handel;

* Aufbau eines Netzwerks. D.h. die Verknüpfung einer Reihe von Aufträgen, die durch eine einzige Logik der Losgrößenbildung für jede Position in der Reihe verbunden sind.

* lässt viel zu wünschen übrig und die Umsetzung der Ausnahmebehandlung bei der Ausführung von Handelsaufträgen (Requotes, Fehler #130 [MT4], STOPLEVEL, FREEZELEVEL, usw., usw.).

Es stellt sich die Frage: "Werden Sie Ihre Engine frei weiterentwickeln?".

Ja, die Entwicklung der Engine ist weiterhin geplant. Und sie wird immer frei bleiben.

Was den Rest dessen angeht, was Sie aufgezählt haben - schreiben Sie Ihre Stopps, MM und "Verwaltungsfunktionen" innerhalb von CStrategy. Niemand verbietet das.

Es gab schon immer eine Fehlerkontrolle - verwenden Sie die CTrade-Klasse und ihre Antworten zur Fehlerkontrolle.

 
Vasiliy Sokolov:

Ja, es ist geplant, die Entwicklung des Motors fortzusetzen. Und sie wird immer kostenlos bleiben.

Was den Rest dessen, was Sie aufgelistet haben, betrifft - schreiben Sie Ihre Haltestellen, MM und "Verwaltungsfunktionen" innerhalb von CStrategy. Niemand verbietet das.

Fehlerkontrolle gab es schon immer - verwenden Sie die CTrade-Klasse und ihre Antworten zur Fehlerkontrolle.

Ein einfacher Benutzer muss sich keine Gedanken über Fehler machen, die vom Handelsserver zurückgegeben werden. Die Trading-Engine sollte sicherstellen, dass unter allen Umständen (außer außerhalb der Arbeitszeiten) ein Handelsauftrag (Eröffnung, Schließung, Änderung) korrekt generiert und dann ausgeführt wird. Oder verlange ich zu viel von der Trading Engine?

P.S. Was ist im nächsten Artikel zu erwarten (welche Funktionen)?

 
Гога:

Ein normaler Benutzer muss sich keine Gedanken über die vom Handelsserver zurückgegebenen Fehler machen. Die Trading Engine sollte sicherstellen, dass unter allen Umständen (außer außerhalb der Geschäftszeiten) ein Handelsauftrag (Öffnen, Schließen, Ändern) korrekt generiert und dann ausgeführt wird. Oder verlange ich zu viel von der Trading Engine?

Was sollte die Handelsmaschine Ihrer Meinung nach tun, wenn der SL des Eröffnungsauftrags zu nahe am Eröffnungskurs liegt?

  • den Handel nicht eröffnen;
  • den Stop auf den zulässigen Mindestabstand anpassen und den Handel eröffnen (und wenn es Nachrichten gibt und der Stop-Leverage 50 vierstellige Punkte beträgt, auch?);
  • den Stop wie im vorherigen Punkt anpassen, das Lot proportional anpassen (so dass das Risiko gleich bleibt) und das Geschäft eröffnen. Wenn das Lot kleiner als das minimal zulässige Lot wird:
    • brechen Sie den Einstieg ab, um nicht gegen das Risikomanagement zu verstoßen,
    • mit dem Mindest-Lot einsteigen.
  • Passen Sie den Stop-Loss und alle schwebenden Aufträge an, die sich auf demselben Niveau befinden (falls es sich um ein Raster handelt);
  • Stop-Loss und Take-Profit proportional anpassen;
  • ...
Ist Ihnen klar, dass Sie je nach Strategie unterschiedliche Optionen verwenden müssen?

Ja, Sie können eine elementare Anpassung an den Mindestabstand vornehmen (als Option), aber es gibt kein absolut universelles Rezept.

 
Гога:

Ein normaler Benutzer muss sich keine Gedanken über die vom Handelsserver zurückgegebenen Fehler machen. Die Trading Engine sollte sicherstellen, dass unter allen Umständen (außer außerhalb der Geschäftszeiten) ein Handelsauftrag (Öffnen, Schließen, Ändern) korrekt generiert und dann ausgeführt wird. Oder verlange ich zu viel von der Trading Engine?

P.S. Was sollte ich im nächsten Artikel erwarten (welche Funktionen)?

Die Aufgabe der Trading-Engine besteht darin, eine komfortable Umgebung für die Strategie bereitzustellen sowie die Integrität und Konsistenz der dargestellten Daten zu gewährleisten. Die Trading Engine hat keine weiteren Aufgaben. Sie sollte aber auf keinen Fall für die Strategie selbst "handeln". Wenn also die Strategie einen Fehler gemacht hat, wird die Engine ihre Fehler nicht korrigieren, da sie sonst eine Baisse begünstigen würde. Es sollte alles getan werden, um den Fehler zu verhindern. Wenn er aber doch passiert ist, macht es keinen Sinn, die Handelslogik des Expert Advisors im Handumdrehen zu ändern. Sie sollten sich einfach hinsetzen und den Strategiecode korrigieren. Es gibt keine andere Möglichkeit.

Ein Beispiel aus der Praxis. Wenn Sie in CStrategy einen beliebigen Preis abfragen, zum Beispiel so:

double ask = Ask();

Sie erhalten garantiert einen bereits normalisierten Instrumentenpreis, der direkt in Handelsaufträgen verwendet werden kann. Dasselbe kann man nicht sagen, wenn Sie eine Systemabfrage verwenden. D.h. CStrategy tut alles, um technische Fehler zu vermeiden, die z.B. bei nicht normalisierten Kursen auftreten. Allerdings nimmt es dem Benutzer diese Arbeit nicht ab. Und wenn Sie diesen Preis durch einen schwebenden Auftrag ersetzen, funktioniert er möglicherweise nicht.

 
Andrey Khatimlianskii:

Was sollte die Trading Engine Ihrer Meinung nach tun, wenn bei der Eröffnung eines Geschäfts der SL zu nahe am Eröffnungskurs liegt?

  • den Handel nicht eröffnen;
  • den Stop auf den zulässigen Mindestabstand einstellen und den Handel eröffnen (und wenn es Nachrichten gibt und der Stop-Leverage 50 vierstellige Punkte beträgt, auch?);
  • den Stop wie im vorherigen Punkt anpassen, das Lot proportional anpassen (so dass das Risiko gleich bleibt) und das Geschäft eröffnen. Wenn das Lot kleiner als das minimal zulässige Lot wird:
    • brechen Sie den Einstieg ab, um nicht gegen das Risikomanagement zu verstoßen,
    • mit dem Mindest-Lot einsteigen.
  • Passen Sie den Stop-Loss und alle schwebenden Aufträge an, die sich auf demselben Niveau befinden (falls es sich um ein Raster handelt);
  • Stop-Loss und Take-Profit proportional anpassen;
  • ...
Ist Ihnen klar, dass Sie je nach Strategie unterschiedliche Optionen verwenden müssen?

Ja, Sie können eine elementare Anpassung des Mindestabstands vornehmen (als Option), aber es gibt kein absolut universelles Rezept.

Andrew, es gibt keinen Grund, es kompliziert zu machen - die richtige Antwort lautet: "Passen Sie den Stopp auf den zulässigen Mindestabstand an und eröffnen Sie den Handel (und wenn die Nachrichten und der Stopp 50 vierstellige Punkte erreicht haben - auch?)". Ein zu kleiner STOP sollte praktisch (ohne Modifikation) funktionieren. Und der Handel sollte auf das empfangene Signal hin eröffnet werden. Im Falle der Vernetzung sind zusätzliche Regeln für die STOP-Bildung vorgeschrieben.
 
Vasiliy Sokolov:

Die Aufgabe der Trading-Engine besteht darin, eine komfortable Umgebung für die Strategie bereitzustellen sowie die Integrität und Konsistenz der dargestellten Daten zu gewährleisten. Die Trading Engine hat keine weiteren Aufgaben. Sie sollte aber auf keinen Fall für die Strategie selbst "handeln". Wenn also die Strategie einen Fehler gemacht hat, wird die Engine ihre Fehler nicht korrigieren, da sie sonst eine Baisse begünstigen würde. Es sollte alles getan werden, um den Fehler zu verhindern. Wenn er aber doch passiert ist, macht es keinen Sinn, die Handelslogik des Expert Advisors im Handumdrehen zu ändern. Sie sollten sich einfach hinsetzen und den Strategiecode korrigieren. Es gibt keine andere Möglichkeit.

Ein Beispiel aus der Praxis. Wenn Sie in CStrategy einen beliebigen Preis abfragen, zum Beispiel so:

Sie erhalten garantiert einen bereits normalisierten Instrumentenpreis, der direkt in Handelsaufträgen verwendet werden kann. Dasselbe kann man nicht sagen, wenn Sie eine Systemabfrage verwenden. D.h. CStrategy tut alles, um technische Fehler zu vermeiden, die z.B. bei nicht normalisierten Kursen auftreten. Allerdings nimmt es dem Benutzer diese Arbeit nicht ab. Und wenn Sie diesen Preis durch einen schwebenden Auftrag ersetzen, funktioniert er möglicherweise nicht.

Es ist müßig, hier zu argumentieren. Dies ist ein rein persönlicher Ansatz. Aber ich erlaube mir nicht, solche Meldungen im Protokoll zu erhalten:

2016.07.01 11:04:26.866 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.07.01 10:10:30.908 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.07.01 08:18:19.129 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.07.01 07:59:48.209 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.07.01 06:29:19.308 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.07.01 04:59:36.505 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.07.01 03:13:03.656 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.07.01 02:59:55.757 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.06.30 17:59:56.557 ImpulseExpert (EURUSD,H1)       CTrade::OrderSend: modify position #1451923  EURUSD (sl: 0.00000, tp: 0.00000) [no changes]
Die Engine sollte sich darum kümmern.
 
Гога:

Es hat keinen Sinn, hier zu argumentieren. Das ist ein rein persönlicher Ansatz. Aber ich erlaube mir nicht, solche Meldungen im Log zu erhalten:

Das ist etwas, um das sich die Maschine kümmern sollte.
Um was "darum"? Dies ist eine Informationsmeldung, die zu den Systemmeldungen gehört, die Sie aus irgendeinem Grund gelöscht haben.