Diskussion zum Artikel "Automatisieren von Handelsstrategien in MQL5 (Teil 7): Aufbau eines Raster-Handel EA mit dynamischer Losgrößen-Skalierung"

 

Neuer Artikel Automatisieren von Handelsstrategien in MQL5 (Teil 7): Aufbau eines Raster-Handel EA mit dynamischer Losgrößen-Skalierung :

In diesem Artikel bauen wir einen Expert Advisor in MQL5 für einen Raster-Handel, der eine dynamische Los-Skalierung verwendet. Wir behandeln die Strategieentwicklung, die Code-Implementierung und den Backtest-Prozess. Abschließend vermitteln wir wichtige Erkenntnisse und bewährte Verfahren zur Optimierung des automatisierten Handelssystems.

Der Raster-Handel ist ein systematischer Ansatz, bei dem Kauf- und Verkaufsaufträge in vorher festgelegten Preisintervallen platziert werden, sodass Händler von Marktschwankungen profitieren können, ohne genaue Trendvorhersagen treffen zu müssen. Diese Strategie profitiert von der Marktvolatilität, indem sie innerhalb einer definierten Preisspanne kontinuierlich Handelsgeschäfte eröffnet und schließt. Um die Leistung zu verbessern, werden wir eine dynamische Losgrößenanpassung integrieren, die die Positionsgrößen auf der Grundlage von vordefinierten Bedingungen wie Kontostand, Volatilität oder früheren Handelsergebnissen anpasst. Unser Raster-Handel System wird mit den folgenden Schlüsselkomponenten arbeiten:

  • Rasterstruktur - Wir definieren die Abstände zwischen den Aufträgen.
  • Einstiegs- und Ausführungsregeln - Wir legen fest, wann wir Rastergeschäfte auf der Grundlage fester Abstände mit einer Indikatorstrategie, die den gleitenden Durchschnitt verwendet, eröffnen.
  • Dynamische Losgrößenanpassung - Wir werden einen adaptiven Mechanismus für die Losgrößenanpassung implementieren, der die Positionsgrößen auf der Grundlage der Marktbedingungen oder vordefinierter Risikoparameter anpasst.
  • Handelsmanagement - Wir werden Stop-Loss-, Take-Profit- und optionale Breakeven-Mechanismen einbauen, um das Risiko effektiv zu verwalten.
  • Ausstiegsstrategie - Wir entwickeln eine Logik zum Schließen von Positionen auf der Grundlage von Gewinnzielen, Risikolimits oder Trendumkehrungen.

Kurz und bündig: Hier ist der gesamte Strategieplan visualisiert, um das Verständnis zu erleichtern.

RASTER LAYOUT

Durch die Kombination eines strukturierten Rastersystems mit einer adaptiven Losgröße erstellen wir einen EA, der die Rendite maximiert und gleichzeitig das Risiko effektiv steuert. Als Nächstes werden wir diese Konzepte in MQL5 umsetzen.


Autor: Allan Munene Mutiiria

 
//--- Abrufen der letzten Barpreise für die Handelssignallogik
double low1  = iLow(_Symbol, _Period, 1);
double low2  = iLow(_Symbol, _Period, 2);
double high1 = iHigh(_Symbol, _Period, 1);
double high2 = iHigh(_Symbol, _Period, 2);

diese Variablen werden nicht verwendet... warum dieser Code?

 
testtestmio71 #:

diese Variablen werden nicht verwendet... warum dieser Code?

Es sind Funktionen, die wiederverwendet werden sollen.

 
Allan Munene Mutiiria #:
Sie sind Funktionen, die wiederverwendet werden können.
auf den Code ... wo Sie low1 variabile verwenden?
 
testtestmio71 #:
auf den Code ... wo Sie low1 variabile verwenden?

Was ist das Problem mit den Variablen? Irgendein Fehler? Es handelt sich um Funktionen, die überall im Code verwendet werden können.

Wenn ich es genauer erklären sollte, würde ich sagen, dass Sie die Tiefst- und Höchstpreise für den vorherigen Balken und den Balken vor + 1 erhalten.

void ExecuteInitialTrade(double ask, double bid){
   //--- KAUFSIGNAL: Tiefstwert des vorherigen Balkens über dem MA und vorheriger Balken unter dem MA
   if (iLow(_Symbol, _Period, 1) > maData[1] && iLow(_Symbol, _Period, 2) < maData[1]){
      gridSize = ask - gridSize_Spacing;     //--- Rasterauslöser unter den aktuellen Preis setzen
      TakeProfit = ask + takeProfitPts;      //--- TP für KAUFEN festlegen
      if(obj_Trade.Buy(LotSize, _Symbol, ask, 0, TakeProfit,"Initial Buy"))
         Print("Initial BUY order executed at ", ask, " with LotSize: ", LotSize);
      else
         Print("Initial BUY order failed at ", ask);
      isTradeAllowed = false;
   }
   //--- VERKAUFSSIGNAL: Höchststand des vorherigen Balkens unter MA und vorheriger Balken über MA
   else if(iHigh(_Symbol, _Period, 1) < maData[1] && iHigh(_Symbol, _Period, 2) > maData[1]){
      gridSize = bid + gridSize_Spacing;     //--- Rasterauslöser über dem aktuellen Gebot einstellen
      TakeProfit = bid - takeProfitPts;      //--- TP für SELL setzen
      if(obj_Trade.Sell(LotSize, _Symbol, bid, 0, TakeProfit,"Initial Sell"))
         Print("Initial SELL order executed at ", bid, " with LotSize: ", LotSize);
      else
         Print("Initial SELL order failed at ", bid);
      isTradeAllowed = false;
   }
}

Genauer gesagt hier. Sie können zu den Funktionen wechseln oder sie auch wieder löschen, wenn Sie sie nicht wollen. Ist das klar? Vielen Dank!

 
double low1  = iLow(_Symbol, _Period, 1);

zum Beispiel.....für das Kaufsignal haben Sie iLow und nicht Low1 variabel verwendet

if (iLow(_Symbol, _Period, 1) > maData[1] && iLow(_Symbol, _Period, 2) < maData[1]){

ist nur für meine Studie, danke!!!

 

diese vier Zeilen können kommentiert werden

// double low1  = iLow(_Symbol, _Period, 1);
// double low2  = iLow(_Symbol, _Period, 2);
// double high1 = iHigh(_Symbol, _Period, 1);
// double high2 = iHigh(_Symbol, _Period, 2);
 
testtestmio71 #:

diese vier Zeilen können kommentiert werden

Sicher. Ist jetzt alles in Ordnung?

 

ist ok.....best EA .

Die 4 Zeilen sind verwirrend für einen Neuling

 
testtestmio71 #:

ist ok.....beste EA .

Die 4 Zeilen sind verwirrend für einen Neuling

Okay