Diskussion zum Artikel "Universeller Expert Advisor: Ein benutzerdefiniertes Trailing Stop (Part 6)"

 

Neuer Artikel Universeller Expert Advisor: Ein benutzerdefiniertes Trailing Stop (Part 6) :

Der sechste Teil des Artikels über den universellen Expert Advisor beschreibt die Verwendung eines Trailingstops. Dieser Artikel führt sie durch die Erstellung eines Trailingstop-Moduls, welches einheitliche Regeln verwendet, sowie durch den Vorgang, wie dieses Modul der Trading Engine hinzugefügt wird, damit es automatisch Positionen verwaltet.

Die CStrategy Trading Engine hat sich seit ihrer ersten Publikation in dem ersten Teil dieser Artikel stark verändert. Wir haben neue Funktionen und Module für erweiterte Handelsmöglichkeiten hinzugefügt. Zudem sind einige Compiler Versionen mit unterschiedlichen Veränderungen seit der ersten Veröffentlichung erschienen. Einige dieser Veränderungen sind inkompatibel mit den älteren Versionen der CStrategy, was dazu geführt hat, dass wir die Trading-Engine modifizieren mussten. Diese Korrekturen und Erweiterungen für Ursachen das Auftreten von unvermeidlichen Fehlern. In diesem Abschnitt werden wir die Fehlerkorrekturen der neuesten Version der Trading Engine abdecken.

  • Es wurde dem Projekt ein Strategie-Bedienfeld hinzugefügt. Aufgrund eines Fehlers in einer vorherigen Version des Compilers, wurde das Bedienfeld in den Abschnitten 3 und 4 deaktiviert, weil es Kompatibilitätsprobleme gab. Nachdem der Compilerfehler behoben worden ist, wurde das Bedienfeld in den Teil fünf wieder hinzugefügt, aber es hat nicht einwandfrei funktioniert. In dem sechsten Teil der Trading-Engine, wurde die Funktion des Bedienfelds wieder vollständig hergestellt.
  • Das Bedienfeld besitzt aber einen Fehler: Anstelle "SellOnly" anzuzeigen, zeigt es "BuyOnly" doppelt an. Dieser Fehler wurde behoben.
  • In den vorherigen Versionen verursachte eine Veränderung des Handelsmodus auf dem Bedienfeld keine Veränderung des Handelsmodus in der Strategie. Dieser Fehler wurde in der sechsten Version behoben.
  • Es wurde ein neues Verhalten bei dem Wechsel der Modi hinzugefügt: in dem SellOnly-Mode, werden alle Buy-Positionen geschlossen und zusätzlich werden alle pending Buy-Orders, die zu der Strategie gehören, gelöscht. Dieselbe Funktionalität wurde BuyOnly hinzugefügt: alle pending Sell-Orders werden gelöscht. Wenn Sie den "Stop" Modus wählen, Werden alle Pending-Orders beider Richtungen gelöscht.

Autor: Vasiliy Sokolov

 
Jetzt funktioniert alles - einfach cool...alles auf einmal.... Vielen Dank...ich wusste, dass bis die neue Version stabil wird...es Fehler geben wird...)))))
 
Hallo. Tolle Arbeit, vielen Dank! Sagen Sie mir, haben Sie vor, in der Engine die Ansätze für den Handel an der MOEX zu implementieren, die Sie in dem Artikel https://www.mql5.com/de/articles/1683 beschreiben ? Konkret bin ich daran interessiert, die Marktliquidität zu analysieren und darauf basierend mit einer bestimmten Abweichung (max. Slippage) einzusteigen.
Как обезопасить себя и своего эксперта при торговле на Московской бирже
Как обезопасить себя и своего эксперта при торговле на Московской бирже
  • 2015.06.18
  • Vasiliy Sokolov
  • www.mql5.com
В статье подробно описываются методы работы, призванные обеспечить безопасность совершения торговых операций на биржевых и малоликвидных рынках, на примере срочной секции Московской биржи. Статья является логическим продолжением статьи "Основы биржевого ценообразования на примере срочной секции Московской биржи", в которой даны теоретические основы биржевой торговли, но носит более практический характер.
 
igorbel:
Hallo. Tolle Arbeit, vielen Dank! Sagen Sie mir, planen Sie, in der Engine die Ansätze für den Handel an der MOEX zu implementieren, die Sie in dem Artikel https://www.mql5.com/de/articles/1683 beschreiben ? Ich interessiere mich besonders für die Analyse der Marktliquidität und die darauf basierende Eingabe mit einer bestimmten Abweichung (max. Slippage).
Der Vorschlag ist interessant. Schauen wir mal.
 
//+------------------------------------------------------------------+
//| Schließt die aktuelle Marktposition durch Setzen des Schlusskurses.
//| Kommentar gleich Kommentar|
//+------------------------------------------------------------------+
bool CPosition::CloseAtMarket(string comment="")
  {
   if(!IsActive())
      return false;
   m_trade.PositionModify(m_id, 0.0, 0.0);
   ENUM_ACCOUNT_MARGIN_MODE mode=(ENUM_ACCOUNT_MARGIN_MODE)AccountInfoInteger(ACCOUNT_MARGIN_MODE);
   if(mode != ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)
      return m_trade.PositionClose(m_symbol);
   return m_trade.PositionClose(m_id);
  }

Können Sie mir sagen, warum m_trade.PositionModify(m_id, 0.0, 0.0) in dieser Funktion? Ich habe Invalid Stops Fehler im Protokoll wegen dieser Operation.

 
igorbel:

Können Sie mir sagen, warum m_trade.PositionModify(m_id, 0.0, 0.0) in dieser Funktion? Ich habe wegen dieses Vorgangs ungültige Stopps im Protokoll.

Das sind Rudimente der alten Version. Danke für den Hinweis, ich werde es beheben.
 

Ich habe nichts geändert, aber beim Kompilieren eines der nachgestellten Module, einschließlich der Basisklasse, erhalte ich Fehler:

'CTrailing' - declaration without type  PositionMT5.mqh 48      4
'Trailing' - undeclared identifier      PositionMT5.mqh 73      20
'Trailing' - object pointer expected    PositionMT5.mqh 73      20
'Trailing' - object pointer expected    PositionMT5.mqh 74      14
 
bool CTrailingClassic::Modify(void)
  {

   if(CheckPointer(m_position)==POINTER_INVALID)
     {
      string text="Invalid position for current trailing-stop. Set position with 'SetPosition' method";
      CMessage *msg=new CMessage(MESSAGE_WARNING,__FUNCTION__,text);
      Log.AddMessage(msg);
      return false;
     }
   if(m_diff_extremum<=0.0)
     {
      string text="Set points trailing-stop with 'SetDiffExtremum' method";
      CMessage *msg=new CMessage(MESSAGE_WARNING,__FUNCTION__,text);
      Log.AddMessage(msg);
      return false;
     }
   double extremum=FindExtremum(m_position);
   if(extremum == 0.0)return false;
   double n_sl = 0.0;
   if(m_position.Direction()==POSITION_TYPE_BUY)
      n_sl=extremum-m_diff_extremum;
   else
      n_sl=extremum+m_diff_extremum;
   if(n_sl!=m_position.StopLossValue())
      return m_position.StopLossValue(n_sl);
   return false;
  }

Es kann nicht schaden, zu prüfen, ob der neue Sl unter dem aktuellen Preis für eine Long-Position und über dem aktuellen Preis für eine Short-Position liegt.

 

Hallo. Vielen Dank für den Artikel.

Wie kann ich die Losgröße für jeden Handel einstellen? Ich sehe, dass es nur ein Lot kauft.


Vielen Dank im Voraus

 

Dear Mr Sokolov,

Very interesting article, but unfortunately I couldn't instal a single one of your codes without  tons of compiller errors. I tried all 9 parts but in vain.

Hence my question: Is there a specific approach to install your code?

Thank You

 
Brevity is the soul of wit.
Acceptance, understanding, correct interpretation, there are hardly any more. Unfortunately