English Русский 中文 Español 日本語 Português
preview
Die Handelstechnik RSI Deep Three Move

Die Handelstechnik RSI Deep Three Move

MetaTrader 5Handelssysteme | 18 September 2023, 09:48
453 0
Javier Santiago Gaston De Iriarte Cabrera
Javier Santiago Gaston De Iriarte Cabrera

1. Einführung

Dieser Artikel basiert auf einer neuen Reihe von Studien, die einige auf dem RSI basierende Handelstechniken vorstellen. Eine Handelstechnik ist eine Möglichkeit, einen Indikator zu verwenden. Die Studie arbeitet auf der Computersprache mql5.


2. Eine einfache Einführung in den RSI

Der RSI steht für Relative Strength Index, einen Indikator der technischen Analyse, der zur Messung der Stärke und Dynamik eines Wertpapiers, z. B. einer Aktie, einer Währung oder eines Rohstoffs, verwendet wird. Der RSI wird anhand mathematischer Formeln berechnet und in einem Chartfenster dargestellt, um den Grad der Stärke oder Schwäche eines Wertpapiers über einen bestimmten Zeitraum hinweg visuell darzustellen.

Der RSI basiert auf dem Prinzip, dass das Wertpapier bei steigenden Kursen überkauft und bei fallenden Kursen überverkauft ist. Der RSI hilft Händlern, potenzielle Trendumkehrungen oder Kurskorrekturen zu erkennen.

Bei der RSI-Berechnung wird der durchschnittliche Gewinn des Wertpapiers in einem bestimmten Zeitraum mit dem durchschnittlichen Verlust des Wertpapiers im selben Zeitraum verglichen. Die Standardversion des RSI wird dann auf einer Skala von 0 bis 100 dargestellt, wobei Werte über 70 als überkauft und Werte unter 30 als überverkauft gelten. Der RSI ist bei Händlern ein beliebter Indikator, da er frühzeitig Warnsignale für potenzielle Markttrends liefern kann. Wenn der RSI eines Wertpapiers beispielsweise kontinuierlich ansteigt und ein Niveau von über 70 erreicht, könnte dies darauf hindeuten, dass das Wertpapier überkauft ist und eine Korrektur bevorsteht. Wenn der RSI hingegen kontinuierlich fällt und einen Wert unter 30 erreicht, könnte dies darauf hindeuten, dass das Wertpapier überverkauft ist und eine Erholung bevorsteht.

Es sei darauf hingewiesen, dass der RSI nicht isoliert als alleinige Grundlage für Handelsentscheidungen verwendet werden sollte. Händler verwenden den RSI in der Regel in Verbindung mit anderen technischen Analyseinstrumenten und Marktindikatoren, um ein umfassenderes Verständnis der Marktbedingungen zu gewinnen und fundierte Handelsentscheidungen zu treffen. Im Allgemeinen wird der RSI über einen rollierenden Zeitraum von 14 Jahren berechnet.


3. Was ist der RSI? (Eine genauere Beschreibung)

3.1 Einleitung

Der Relative-Stärke-Index (RSI) ist ein technischer Indikator für die Analyse der Finanzmärkte. Er soll die aktuelle und historische Stärke oder Schwäche einer Aktie oder eines Marktes auf der Grundlage der Schlusskurse des letzten Handelszeitraums darstellen. Der Indikator sollte nicht mit der relativen Stärke verwechselt werden.

Der RSI wird als Momentum-Oszillator eingestuft und misst die Geschwindigkeit und das Ausmaß von Kursbewegungen. Das Momentum ist die Rate des Kursanstiegs oder -rückgangs. Die relative Stärke RS wird als das Verhältnis der höheren Schlusskurse zu den niedrigeren Schlusskursen angegeben. Konkret berechnet man zwei Durchschnitte der absoluten Werte der Schlusskursveränderungen, d.h. zwei Summen über die Kerzengrößen in einem Kerzenchart. Der RSI berechnet die Dynamik als das Verhältnis von höheren Schlusskursen zu den Gesamtschlusskursen: Aktien, die mehr oder stärkere positive Veränderungen erfahren haben, haben einen höheren RSI als Aktien, die mehr oder stärkere negative Veränderungen erfahren haben.

Der RSI wird in der Regel auf einem Tageszeitrahmen mit 14 Balken von 0 bis 100 gemessen, wobei die Höchst- und Tiefstwerte bei 70 bzw. 30 liegen. Kurze oder längere Zeiträume werden für abwechselnd kürzere oder längere Prognosen verwendet. Hoch- und Tiefstände - 80 und 20 oder 90 und 10 - treten seltener auf, zeigen aber eine stärkere Dynamik an.

Der Relative Stärke Index wurde von J. Welles Wilder entwickelt und 1978 in einem Buch, New Concepts in Technical Trading Systems, sowie in der Zeitschrift Commodities (heute Modern Trader) in der Juni-Ausgabe 1978 veröffentlicht. Er hat sich zu einem der beliebtesten Oszillator-Indizes entwickelt.

Der RSI liefert Signale, die den Anlegern sagen, dass sie kaufen sollten, wenn das Wertpapier oder die Währung überverkauft ist, und verkaufen sollten, wenn es überkauft ist.

Der RSI mit den empfohlenen Parametern und seiner täglichen Optimierung wurde in Marek und Šedivá (2017) getestet und mit anderen Strategien verglichen. Die Tests wurden nach dem Zufallsprinzip in Bezug auf Zeit und Unternehmen (z. B. Apple, Exxon Mobil, IBM, Microsoft) durchgeführt und haben gezeigt, dass der RSI immer noch gute Ergebnisse liefern kann; auf längere Sicht wird er jedoch in der Regel durch die einfache Buy-and-Hold-Strategie überwunden.

3.2 Berechnung

Für jeden Handelszeitraum wird eine Aufwärtsveränderung U oder eine Abwärtsveränderung D berechnet. Aufwärtsphasen sind dadurch gekennzeichnet, dass der Schlusskurs höher ist als der vorherige Schlusskurs:

1

Umgekehrt ist eine Abwärtsphase dadurch gekennzeichnet, dass der Schlusskurs niedriger ist als der Schlusskurs des vorherigen Balkens:

2

Wenn der letzte Schlusskurs derselbe ist wie der vorherige, sind sowohl U als auch D gleich Null. Beachten Sie, dass sowohl U als auch D positive Zahlen sind.

Aus den Sequenzen von U und D werden nun Durchschnittswerte berechnet, und zwar unter Verwendung eines geglätteten oder modifizierten gleitenden Durchschnitts (SMMA oder MMA) für n Perioden, d. h. eines exponentiell geglätteten gleitenden Durchschnitts mit α = 1 / n. Es handelt sich um positiv gewichtete Mittelwerte dieser positiven Terme, die sich in Bezug auf die Partition additiv verhalten.

Wilder formulierte die Berechnung des gleitenden Durchschnitts ursprünglich wie folgt: newval = (prevval * (n - 1) + newdata) / n, was der oben erwähnten exponentiellen Glättung entspricht. Neue Daten werden also einfach durch n geteilt oder mit α multipliziert, und frühere Durchschnittswerte werden um (n - 1) / n, d. h. 1 - α geändert. Einige kommerzielle Pakete, wie AIQ, verwenden einen exponentiellen gleitenden Durchschnitt (EMA) als Durchschnitt anstelle des SMMA von Wilder. Die geglätteten gleitenden Durchschnitte sollten in geeigneter Weise mit einem einfachen gleitenden Durchschnitt unter Verwendung der ersten n Werte der Preisreihe initialisiert werden.

Das Verhältnis dieser Durchschnittswerte ist die relative Stärke oder der relative Stärkefaktor:

3

Der Relative Stärke Index wird dann in einen relativen Stärkeindex zwischen 0 und 100 umgerechnet:

4

Wenn der Durchschnitt der U-Werte gleich Null ist, sind auch RS und RSI gleich Null. Wenn der Durchschnitt der U-Werte gleich dem Durchschnitt der D-Werte ist, ist der RS gleich 1 und der RSI gleich 50. Wenn der Durchschnitt der U-Werte maximal ist, sodass der Durchschnitt der D-Werte Null ist, dann divergiert der RS-Wert gegen unendlich, während der RSI 100 beträgt.


3.3 Interpretation

3.3.1 Basiskonfiguration

Der RSI wird in einer Grafik über oder unter dem Kursdiagramm dargestellt. Der Indikator hat eine obere Linie, normalerweise bei 70, eine untere Linie bei 30 und eine gestrichelte Mittellinie bei 50. Wilder empfahl eine Glättungsperiode von 14 (siehe exponentielle Glättung, d. h. α = 1/14 oder N = 14).

Bild EURUSD 30m

3.3.2.  Grundsätze

Wilder stellte die These auf, dass ein Kurs, der sich sehr schnell nach oben bewegt, ab einem gewissen Punkt als überkauft gilt. Wenn der Kurs sehr schnell fällt, wird er irgendwann als überverkauft betrachtet. In jedem Fall hielt Wilder eine Reaktion oder Umkehr für unmittelbar bevorstehend.

Das Niveau des RSI ist ein Maß für die jüngste Handelsstärke der Aktie. Die Steigung des RSI ist direkt proportional zur Geschwindigkeit einer Trendänderung. Der Weg, den der RSI zurücklegt, ist proportional zum Ausmaß der Bewegung.

Wilder war der Meinung, dass Höchst- und Tiefststände angezeigt werden, wenn der RSI über 70 steigt oder unter 30 fällt. Traditionell gelten RSI-Werte über 70 als überkauft, und RSI-Werte unter 30 als überverkauft. Der Bereich zwischen 30 und 70 gilt als neutral, der Bereich um 50 ist ein Zeichen dafür, dass es keinen Trend gibt.


3.3.3. Divergenz

Wilder vertrat ferner die Ansicht, dass eine Divergenz zwischen RSI und Kursentwicklung ein sehr starkes Indiz dafür ist, dass ein Wendepunkt am Markt bevorsteht. Eine abwärts Divergenz tritt auf, wenn der Kurs einen neuen Höchststand erreicht, der RSI jedoch einen niedrigeren Höchststand erreicht und somit nicht bestätigt. Eine aufwärts Divergenz tritt auf, wenn der Kurs einen neuen Tiefstand erreicht, der RSI jedoch einen höheren Tiefstand aufweist.

3.3.4. Überkaufte und überverkaufte Bedingungen

Wilder war der Meinung, dass „falsche Bewegungen“ (failure swings) über 50 und unter 50 auf dem RSI starke Anzeichen für Marktumkehrungen sind. Nehmen wir zum Beispiel an, der RSI erreicht 76, fällt auf 72 zurück und steigt dann auf 77. Fällt er unter 72, würde Wilder dies als „failure swing“ über 70 betrachten.

Schließlich schrieb Wilder, dass Chartformationen und Bereiche der Unterstützung und des Widerstands manchmal leichter auf dem RSI-Chart als auf dem Preis-Chart zu erkennen sind. Die Mittellinie des Relative Stärke Index liegt bei 50, was häufig als Unterstützungs- und Widerstandslinie für den Indikator angesehen wird.

Liegt der Relative Stärke Index unter 50, bedeutet dies im Allgemeinen, dass die Verluste der Aktie größer sind als die Gewinne. Wenn der Relative Stärke Index über 50 liegt, bedeutet dies im Allgemeinen, dass die Gewinne größer sind als die Verluste.

3.3.5.  Aufwärtstrends und Abwärtstrends

Zusätzlich zu Wilders ursprünglichen Theorien der RSI-Interpretation hat Andrew Cardwell mehrere neue Interpretationen des RSI entwickelt, um die Bestimmung und Bestätigung des Trends zu erleichtern. Zunächst stellte Cardwell fest, dass Aufwärtstrends in der Regel zwischen RSI 40 und 80 gehandelt werden, während Abwärtstrends in der Regel zwischen RSI 60 und 20 gehandelt werden. Cardwell beobachtete, dass der RSI eine „Bereichsverschiebung“ erfährt, wenn Wertpapiere von einem Aufwärtstrend in einen Abwärtstrend wechseln und umgekehrt.

Als Nächstes stellte Cardwell eine rückläufige Divergenz fest: 1) tritt nur in Aufwärtstrends auf und 2) führt meist nur zu einer kurzen Korrektur und nicht zu einer Trendumkehr. Daher ist eine rückläufige Divergenz ein Zeichen, das einen Aufwärtstrend bestätigt. Gleichermaßen ist eine aufwärts Divergenz ein Zeichen, das einen Abwärtstrend bestätigt.

3.3.6.  Umkehr

Schließlich entdeckte Cardwell die Existenz einer positiven und negativen Umkehr im RSI. Eine Umkehr ist das Gegenteil einer Divergenz. Eine positive Umkehr liegt beispielsweise vor, wenn eine Kurskorrektur im Aufwärtstrend zu einem höheren Tiefststand im Vergleich zur letzten Kurskorrektur führt, während der RSI einen niedrigeren Tiefststand im Vergleich zur vorherigen Korrektur aufweist. Eine negative Umkehr liegt vor, wenn eine Abwärtsrallye zu einem niedrigeren Hoch im Vergleich zur letzten Abwärtsrallye führt, der RSI jedoch ein höheres Hoch im Vergleich zur vorherigen Rallye aufweist.

Mit anderen Worten: Trotz einer stärkeren Dynamik, die sich im RSI durch ein höheres Hoch oder ein niedrigeres Tief zeigt, konnte der Kurs weder ein höheres Hoch noch ein niedrigeres Tief erreichen. Dies ist ein Beweis dafür, dass der Haupttrend wieder anhält. Cardwell stellte fest, dass eine positive Umkehr nur in Aufwärtstrends vorkommt, während eine negative Umkehr nur in Abwärtstrends vorkommt, und dass ihre Existenz daher den Trend bestätigt.


4. Der RSI Deep Three Move

Die Technik „Deep Three Move“ (tiefer Dreischritt) hat eine interessante Hypothese, die besagt, dass im Allgemeinen immer dann, wenn der RSI in den überverkauften oder überkauften Bereich eintritt und drei aufeinanderfolgende Bewegungen nach unten ausbildet, wobei die vierte Bewegung die Bestätigung ist (und ebenfalls tiefer sein muss), ein Signal gegeben werden kann. Die Handelsbedingungen sind wie folgt:

  • Ein Aufwärtssignal wird immer dann erkannt, wenn der RSI unter dem vorherigen RSI liegt, der wiederum unter dem vorherigen RSI liegt, wobei der letztere ebenfalls unter dem vorherigen RSI liegt. Da es im Allgemeinen mit 8-Perioden-RSIs verwendet wird, muss der RSI vor drei Perioden unter 20 und vor der vierten Periode über 20 liegen (um doppelte Signale zu vermeiden).
  • Ein Abwärtssignal wird erkannt, wenn der RSI über dem vorherigen RSI liegt, der wiederum über dem vorherigen RSI liegt, wobei letzterer ebenfalls über dem vorherigen RSI liegt. Da es im Allgemeinen mit 8-Perioden-RSIs verwendet wird, muss der RSI vor drei Perioden über 80 und vor der vierten Periode unter 80 liegen (um doppelte Signale zu vermeiden).

Ein Bild sagt mehr als tausend Worte. Die folgende Abbildung zeigt ein Aufwärtssignal, das auf dieser Technik basiert:

Technik



5. Code

//+------------------------------------------------------------------+
//|                                          RSI Deep Three Move.mq5 |
//|                              Javier S. Gastón de Iriarte Cabrera |
//|              https://https://www.mql5.com/en/users/jsgaston/news |
//+------------------------------------------------------------------+
#property copyright "Javier S. Gastón de Iriarte Cabrera"
#property link      "https:/https://www.mql5.com/en/users/jsgaston/news"
#property version   "1.01"
#property script_show_inputs
#include <GetIndicatorBuffers.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\PositionInfo.mqh>


#include <Trade\AccountInfo.mqh>
//---
CPositionInfo  m_position;                                                         // object of CPositionInfo class
CTrade         m_trade;                                                            // object of CTrade class
CSymbolInfo    m_symbol;                                                           // object of CSymbolInfo class
CAccountInfo   m_account;                                                          // object of CAccountInfo class

CTrade  trade;
CTrade  Ctrade;

input string             Expert_Title             ="RSI Deep Three Move Strategy"; // Document name

enum ENUM_LOT_TYPE
  {
   LOT_TYPE_FIX   = 0,                                                             // fix lot
   LOT_TYPE_RISK  = 1,                                                             // risk %
  };
//--- input parameters

input ENUM_LOT_TYPE        inp_lot_type               = LOT_TYPE_FIX;              // type of lot

input double               inp_lot_fix                = 0.01;                      // fix lot
input double               inp_lot_risk               = 0.01;
input bool     InpPrintLog          = false;                                       // Print log
ulong                    Expert_MagicNumber       =11777;            
bool                     Expert_EveryTick         =false;            
input ENUM_TIMEFRAMES my_timeframe=PERIOD_CURRENT;                                 // Timeframe

input ENUM_APPLIED_PRICE   Inp_RSI_applied_price = PRICE_CLOSE;                    // RSI: type of price
input int InpPeriodRSI=8;                                                          // Period of the signal for the RSI inside custom
int    handle_iCustom;


input int ptsl = 5000;                                                             // points for stoploss
input int pttp = 5000;                                                             // points for takeprofit
string Orden;
double sl2;
double tp2;

Dies ist ein komplizierter Code, der in der Sprache MQL5 geschrieben wurde. Es handelt sich um eine Handelsstrategie, die den Relative Strength Index (RSI) verwendet, um potenzielle Handelsmöglichkeiten zu identifizieren. Der Code umfasst die Verwendung verschiedener Klassen wie CPositionInfo, CTrade, CSymbolInfo und CAccountInfo. Dazu gehört auch die Verwendung verschiedener Eingabeparameter wie die Art der Losgröße, die fixe Losgröße, der Risikoprozentsatz, der Expertentitel, die magische Zahl, der Zeitrahmen, die RSI-Mittelungsperiode, die Art des Preises und die Punkte für Stop Loss und Take Profit. Der Code umfasst auch die Verwendung von Variablen wie handle_iRSI2, handle_iCustom, Orden, sl und tp. Der Zweck dieses Codes ist es, potenzielle Handelsmöglichkeiten auf der Grundlage des RSI-Indikators zu identifizieren.

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   handle_iCustom=iCustom(_Symbol,my_timeframe,"\\Indicators\\Examples\\RSI",InpPeriodRSI);

   if(handle_iCustom==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code
      PrintFormat("Failed to create handle of the iCustom indicator for the symbol %s/%s, error code %d",
                  _Symbol,
                  EnumToString(my_timeframe),
                  GetLastError());
      //--- the indicator is stopped early
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }

Dieser Code ist Teil einer Experteninitialisierungsfunktion in der Sprache MQL5. Er wird das Handle für den iCustom Indikator für ein bestimmtes Symbol und einen bestimmten Zeitrahmen erstellt. Er erstellt auch Handles für den iRSI-Indikator mit den angegebenen Parametern. Wenn das Handle für den iCustom-Indikator nicht erstellt werden kann, wird eine Fehlermeldung ausgegeben und der Indikator angehalten. Wenn der Handle erfolgreich erstellt wurde, ist die Initialisierung erfolgreich.

void OnTick()
  {
   MqlTick tick;
   double last_price = tick.ask;
   SymbolInfoTick(_Symbol,tick);
   int total = PositionsTotal();
//---
// Retrieve the current value
   MqlTradeResult  result;
   MqlRates rates[];
//---
   double array_rsi[];
   ArraySetAsSeries(array_rsi,true);
   int start_pos=0,count=5;
   if(!iGetArray(handle_iCustom,0,start_pos,count,array_rsi))
      return;
   string text="";
   for(int i=0; i<count; i++)
      text=text+IntegerToString(i)+": "+DoubleToString(array_rsi[i],Digits()+1)+"\n";
//---
   Comment(text);
     {
      if(array_rsi[0] < array_rsi[1] && array_rsi[1] < array_rsi[2] && array_rsi[2] < array_rsi[3] && array_rsi[3] < 20.0 && array_rsi[4] > 20.0)
        {
         Print("Open Order Buy");
         Alert(" Buying");
         Orden="Buy";
         sl=NormalizeDouble(tick.ask - ptsl*_Point,_Digits);
         tp=NormalizeDouble(tick.bid + pttp*_Point,_Digits);
         trade.PositionOpen(_Symbol,ORDER_TYPE_BUY,get_lot(tick.bid),tick.bid,sl,tp,"Buy");
         return;
        }
     }
     {
      if(array_rsi[0] > array_rsi[1] && array_rsi[1] > array_rsi[2] && array_rsi[2]  > array_rsi[3] && array_rsi[3] > 80.0 && array_rsi[4] < 80.0)
        {
         Print("Open Order Sell");
         Alert(" Selling");
         Orden="Sell";
         sl=NormalizeDouble(tick.bid + ptsl*_Point,_Digits);
         tp=NormalizeDouble(tick.ask - pttp*_Point,_Digits);
         trade.PositionOpen(_Symbol,ORDER_TYPE_SELL,get_lot(tick.ask),tick.ask,sl,tp,"Sell");
         return;
        }
     }
   if(total>0)
     {
      if(Orden=="Sell" && array_rsi2[0]<20.0)
        {
         trade.PositionClose(_Symbol,5);
         Print("cerró sell");
         return;
        }
      if(Orden=="Buy" && array_rsi2[0]>80.0)
        {
         trade.PositionClose(_Symbol,5);
         Print("cerró buy");
         return;
        }
     }
  }
Dieses Stück Code ist die Tick-Funktion eines Experten in der Sprache MQL5. Er wird verwendet, um Positionen auf dem Markt zu eröffnen und zu schließen. Zunächst wird der aktuelle Wert des Symbols abgerufen und in der Tick-Variablen MqlTick gespeichert. Anschließend wird die Gesamtzahl der Positionen ermittelt und in der Variablen „total“ gespeichert. Anschließend werden die RSI-Werte von der iCustom-Funktion abgerufen und in den Variablen array_rsi und gespeichert. Dann wird geprüft, ob die RSI-Werte unter 20 für einen Verkaufsauftrag und über 80 für einen Kaufauftrag liegen, und wenn ja, wird die Position mit den entsprechenden Parametern eröffnet. Schließlich wird geprüft, ob die RSI-Werte die Schwelle von 20 oder 80 überschritten haben, und wenn ja, wird die Position geschlossen.
bool iGetArray(const int handle,const int buffer,const int start_pos,
               const int count,double &arr_buffer[])
  {
   bool result=true;
   if(!ArrayIsDynamic(arr_buffer))
     {
      //if(InpPrintLog)
      PrintFormat("ERROR! EA: %s, FUNCTION: %s, this a no dynamic array!",__FILE__,__FUNCTION__);
      return(false);
     }
   ArrayFree(arr_buffer);
//--- reset error code
   ResetLastError();
//--- fill a part of the iBands array with values from the indicator buffer
   int copied=CopyBuffer(handle,buffer,start_pos,count,arr_buffer);
   if(copied!=count)
     {
      //--- if the copying fails, tell the error code
      //if(InpPrintLog)
      PrintFormat("ERROR! EA: %s, FUNCTION: %s, amount to copy: %d, copied: %d, error code %d",
                  __FILE__,__FUNCTION__,count,copied,GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated
      return(false);
     }
   return(result);
  }

Dieser Code wird verwendet, um Werte aus einem Indikatorpuffer in ein Array zu kopieren. Die Funktion benötigt fünf Parameter: ein Handle zum Indikator, den Indikatorpuffer, die Startposition im Puffer, die Anzahl der zu kopierenden Werte und ein Array zum Speichern der Werte. Dann wird geprüft, ob das Array dynamisch ist, und wenn ja, wird der Fehlercode zurückgesetzt und die Werte aus dem Puffer in das Array kopiert. Wenn der Kopiervorgang fehlschlägt, wird eine Fehlermeldung ausgegeben und false zurückgegeben. Andernfalls wird true zurückgegeben.

double get_lot(double price)
  {
   if(inp_lot_type==LOT_TYPE_FIX)
      return(normalize_lot(inp_lot_fix));
   double one_lot_margin;
   if(!OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1.0,price,one_lot_margin))
      return(inp_lot_fix);
   return(normalize_lot((AccountInfoDouble(ACCOUNT_BALANCE)*(inp_lot_risk/100))/ one_lot_margin));
  }
double normalize_lot(double lt)
  {
   double lot_step = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
   lt = MathFloor(lt / lot_step) * lot_step;
   double lot_minimum = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   lt = MathMax(lt, lot_minimum);
   return(lt);
  }

Dieser Code wird verwendet, um die Losgröße für einen Handel zu berechnen. Die erste Funktion, get_lot(), nimmt den Preis des Geschäfts als Argument auf und prüft den Losgrößentyp (fest oder risikobasiert). Ist der Losgrößentyp als fest eingegeben, wird die Funktion normalize_lot() aufgerufen, um die Losgröße zu normalisieren. Wenn der Losgrößentyp risikobasiert ist, wird die Funktion OrderCalcMargin() verwendet, um die für den Handel erforderliche Marge zu berechnen, und die Funktion AccountInfoDouble() wird verwendet, um den Kontostand zu ermitteln. Die Losgröße wird dann berechnet, indem der Kontostand durch die Marge dividiert und mit dem Risikoprozentsatz multipliziert wird. Die Funktion normalize_lot() wird dann aufgerufen, um die Losgröße zu normalisieren. Die Funktion normalize_lot() nimmt die Losgröße als Argument und berechnet die Schrittweite und Mindestlosgröße für das Symbol. Die Losgröße wird dann auf die nächst gültige Schrittweite abgerundet, und gegebenenfalls wird die Mindestlosgröße angewendet.


6. Ergebnisse

Für EURUSD, 30 min Perioden, und 900 Punkte für sl (denken Sie daran, 8 Perioden für RSI zu verwenden) für 2023 vom ersten Januar bis Ende Juni.

Grafik

Daten



7. Schlussfolgerung

Natürlich sind nicht alle Techniken perfekt. Insbesondere in Trendphasen kann es zu einigen Fehlsignalen kommen. Wie Sie vielleicht auch feststellen, funktioniert die Technik bei starken Trends nicht wie erwartet.

Die Strategie muss optimiert werden, um auf den Märkten angewandt werden zu können, aber die Idee ist, eine Mean-Reversion-Denkweise für die Marktanalyse zu präsentieren.

Dies sind die profitablen Ergebnisse für alle Symbole meines Brokers in einem Cent-Konto, mit einem Zeitraum von 30 Minuten über 2023 bis Ende Juni.

Optimierung


Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/12846

Beigefügte Dateien |
Alles, was Sie über die MQL5-Programmstruktur wissen müssen Alles, was Sie über die MQL5-Programmstruktur wissen müssen
Jedes Programm in jeder Programmiersprache hat eine bestimmte Struktur. In diesem Artikel lernen Sie wesentliche Teile der MQL5-Programmstruktur kennen, indem Sie die Programmiergrundlagen jedes Teils der MQL5-Programmstruktur verstehen, die bei der Erstellung unseres MQL5-Handelssystems oder -Handelswerkzeugs, das im MetaTrader 5 ausführbar ist, sehr hilfreich sein können.
Entwicklung eines Replay-Systems — Marktsimulation (Teil 05): Hinzufügen einer Vorschau Entwicklung eines Replay-Systems — Marktsimulation (Teil 05): Hinzufügen einer Vorschau
Es ist uns gelungen, einen Weg zu finden, das Replay-System (Marktwiederholungssystem) auf realistische und zugängliche Weise umzusetzen. Lassen Sie uns nun unser Projekt fortsetzen und Daten hinzufügen, um das Wiedergabeverhalten zu verbessern.
Neuronale Netze leicht gemacht (Teil 37): Sparse Attention (Verringerte Aufmerksamkeit) Neuronale Netze leicht gemacht (Teil 37): Sparse Attention (Verringerte Aufmerksamkeit)
Im vorigen Artikel haben wir relationale Modelle erörtert, die in ihrer Architektur Aufmerksamkeitsmechanismen verwenden. Eines der besonderen Merkmale dieser Modelle ist die intensive Nutzung von Computerressourcen. In diesem Artikel wird einer der Mechanismen zur Verringerung der Anzahl von Rechenoperationen innerhalb des Self-Attention-Blocks betrachtet. Dadurch wird die allgemeine Leistung des Modells erhöht.
DoEasy. Steuerung (Teil 32): Horizontale ScrollBar, Scrollen mit dem Mausrad DoEasy. Steuerung (Teil 32): Horizontale ScrollBar, Scrollen mit dem Mausrad
In diesem Artikel werden wir die Entwicklung der Funktionalität des horizontalen Rollbalkenobjekts abschließen. Wir werden auch die Möglichkeit schaffen, den Inhalt des Containers durch Bewegen des Schiebereglers und Drehen des Mausrades zu scrollen, sowie Ergänzungen zur Bibliothek vornehmen, die die neue Auftragsausführungspolitik und die neuen Laufzeitfehlercodes in MQL5 berücksichtigen.