Zugriff auf shifted Indikatorwerte im EA

 

Hallo zusammen,

ich arbeite mich seit einigen Monaten in MQL 5 ein und habe auch schon ein paar Handelsstrategien in lauffähige EA umsetzen können. So richtig profitabel war bislang allerdings noch keine... :)

Jetzt möchte ich gerade eine Handelsstrategie umsetzen, die auf dem Alligator Indikator, Awesome Oscillator und Fractals basiert (siehe Video). Dafür müsste ich meines Erachtens im EA mit den um 8, 5 und 3 Perioden verschobenen Indikatortwerten des Alligators arbeiten, weiß aber nicht wie ich Zugriff auf solche verschobenen Werte bekomme, da ich mit CopyBuffer keine Negativwerte kopieren kann.

Falls jemand einen Rat für einen interessierten Anfänger in MQL5 hat, wäre ich sehr dankbar. Hier die ersten Anfänge des Codes:


//+------------------------------------------------------------------+
//|                                                 18_Alligator.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"


//+------------------------------------------------------------------+
//| Funtionsweise                                                    |
//+------------------------------------------------------------------+

/*

erforderliche Indikatoren:
   Bill Williams:
      1.) Alligator
      2.) Awesome Indocator
      3.) Fractals

Buy Positionen:

   1.) alle Linien sind aufwaerts gerichtet und in der richtigen Reihenfolge
   2.) Histogramm (Awesome Indicator) steigt von Nahe Null an und ist gruen
   3.) Einstiegssignal, wenn der Preis ueber das letzte Aufwaerts Fractal steigt 
       und ueber allen Alligator Linien liegt
   4.) initialer StopLoss wir unter das letzte Abwaerts Fractal gesetzt
   5.) StopLoss wird anhand der roten Linie (Teeth(8)) auf Break Even gesetzt
   6.) Position wird geschlossen, wenn Preis unter der roten Linie schließt
   
Sell Positionen:

   1.) alle Linien sind abwaerts gerichtet und in der richtigen Reihenfolge
   2.) Histogramm (Awesome Indicator) faellt von Nahe Null an und ist rot
   3.) Einstiegssignal, wenn der Preis unter das letzte Abwaerts Fractal faellt
       und unter allen Alligator Linien liegt
   4.) initialer StopLoss wir auf das letzte Aufwaerts Fractal gesetzt
   5.) StopLoss wird anhand der roten Linie (Teeth(8)) auf Break Even gesetzt
   6.) Position wird geschlossen, wenn Preis ueber der roten Linie schließt

*/

//+------------------------------------------------------------------+
//| Includefunktionen                                                |
//+------------------------------------------------------------------+
// Importiere Trade.mqh
#include<Trade\Trade.mqh>

// Erstelle eine Instanz von CTrade
CTrade trade;

//+------------------------------------------------------------------+
//| Eingaben und Variablen                                           |
//+------------------------------------------------------------------+

string signal;

//+------------------------------------------------------------------+
//| OnTick Funktion                                                  |
//+------------------------------------------------------------------+

void OnTick()
  {

//+------------------------------------------------------------------+
// Prüfe auf neue Kerze                                              |
//+------------------------------------------------------------------+  

   MqlRates PriceInformation[];
   ArraySetAsSeries(PriceInformation, true);
   int Preisdaten=CopyRates(_Symbol,_Period,0,4,PriceInformation);
   ArraySetAsSeries(PriceInformation,true);
      static int candleCounter;
      bool newCandle=false;
      static datetime timeStampLastCheck;
      datetime timeStampCurrentCandle;
      timeStampCurrentCandle=PriceInformation[0].time;
      if (timeStampCurrentCandle!=timeStampLastCheck)
         {
         timeStampLastCheck=timeStampCurrentCandle;
         candleCounter=candleCounter+1;
         newCandle=true;
         }
      else newCandle=false;
if (newCandle==true)

   {
//+------------------------------------------------------------------+
// 1. Trendpruefung Grosswetterlage (ggf. ergaenzen)                 |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
// 2. Initialisiere die Indikatoren                                  |
//+------------------------------------------------------------------+

   // Definiere Variablen
   double   AlligatorJawsArray[],
            AlligatorTeethArray[],
            AlligatorLipsArray[],
            AOArray[],
            FractalsArray[];
   
   int AlligatorHandler = iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
   int AOHandler = iAO(_Symbol,_Period);
   int FractalsHandler = iFractals(_Symbol,_Period);
   
   // Sortiere die Arrays von der aktuellen Kerze an abwaerts
   ArraySetAsSeries(AlligatorJawsArray,true);
   ArraySetAsSeries(AlligatorTeethArray,true);
   ArraySetAsSeries(AlligatorLipsArray,true);
   ArraySetAsSeries(AOArray,true);
   ArraySetAsSeries(FractalsArray,true);
   
   
   // Defined EA, one line, current candle, 3 candles, store result
   CopyBuffer(AlligatorHandler,0,-8,30,AlligatorJawsArray);
   CopyBuffer(AlligatorHandler,1,-5,30,AlligatorTeethArray);
   CopyBuffer(AlligatorHandler,2,-3,30,AlligatorLipsArray);
   CopyBuffer(AOHandler,0,0,3,AOArray);
   CopyBuffer(FractalsHandler,0,0,3,FractalsArray);


//+------------------------------------------------------------------+
// 3. Prüfe auf Einstiegssignale                                     |
//+------------------------------------------------------------------+

// Buy Signal

if (AlligatorJawsArray[-13]>AlligatorJawsArray[-12])

   signal=="buy";



//+------------------------------------------------------------------+
// 4. Oeffne Positionen                                              |
//+------------------------------------------------------------------+



//+------------------------------------------------------------------+
// 5. Pruefe Break Even Stop                                         |
//+------------------------------------------------------------------+



//+------------------------------------------------------------------+
// 6. Schliesse Positionen                                           |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
// 7. Chartausgabe                                                   |
//+------------------------------------------------------------------+

Comment(
         "Alligator Jaws (13): ", AlligatorJawsArray[1], "\n",
         "Alligator Teeth (8): ", AlligatorTeethArray[1], "\n",
         "Alligator Lips (5): ", AlligatorLipsArray[1], "\n",
         "Awesome Oscillator: ", AOArray[1], "\n",
         "Fractals: ", FractalsArray[1], "\n"
         );


   } // Ende der neue Kerze Funktion   
  } // Ende der OnTick Funktion
🔴 100% High Accuracy FRACTALS & ALLIGATOR Trading Strategy | BEST Multiple Moving Average Indicator
🔴 100% High Accuracy FRACTALS & ALLIGATOR Trading Strategy | BEST Multiple Moving Average Indicator
  • 2021.04.30
  • www.youtube.com
Alligator is not the only indicator created by Bill Williams. Nonetheless, it’s famous among traders all around the world.The popularity is based on simplici...
 

Wenn ein Indikator seine Werte um zB. 8 Balken in die Zukunft schiebt, dann müsste der aktuelle Balken den Wert von vor 8 Balken (oder vielleicht 7 wegen der Null) haben.

Beim Alligator ist das doch leicht auf dem Chart zu überprüfen sind es doch drei einfache MA, die man zusätzlich starten kann.

 
Carl Schreiber #:

Wenn ein Indikator seine Werte um zB. 8 Balken in die Zukunft schiebt, dann müsste der aktuelle Balken den Wert von vor 8 Balken (oder vielleicht 7 wegen der Null) haben.

Beim Alligator ist das doch leicht auf dem Chart zu überprüfen sind es doch drei einfache MA, die man zusätzlich starten kann.

Hallo Carl,

vielen Dank für Deine Antwort.

Ja, richtig. Wenn ich mir den Wert von Kerze 1 geben lasse, bekomme ich aufgrund der Verschiebung von z.B. 8 Perioden den Wert von vor 8 Balken. Ich möchte aber mit dem tatsächlich echten aktuellen Wert  (also dem um 8 Perioden in die Zukunft verschobenen) rechnen und nicht mit von vor 8 Perioden. Dafür müsste ich aber einen negativen Wert aus dem Array auslesen und das verbietet mir das Programm. Deswegen bin ich auf der Suche nach einer Lösung wie ich den in die Zukunft verschobenen Wert auslesen kann. 

 
Elmar_Keil #:

Hallo Carl,

vielen Dank für Deine Antwort.

Ja, richtig. Wenn ich mir den Wert von Kerze 1 geben lasse, bekomme ich aufgrund der Verschiebung von z.B. 8 Perioden den Wert von vor 8 Balken. Ich möchte aber mit dem tatsächlich echten aktuellen Wert  (also dem um 8 Perioden in die Zukunft verschobenen) rechnen und nicht mit von vor 8 Perioden. Dafür müsste ich aber einen negativen Wert aus dem Array auslesen und das verbietet mir das Programm. Deswegen bin ich auf der Suche nach einer Lösung wie ich den in die Zukunft verschobenen Wert auslesen kann. 

Öffne einen extra MA ohne zu verschieben.
 
Elmar_Keil #:

Hallo Carl,

vielen Dank für Deine Antwort.

Ja, richtig. Wenn ich mir den Wert von Kerze 1 geben lasse, bekomme ich aufgrund der Verschiebung von z.B. 8 Perioden den Wert von vor 8 Balken. Ich möchte aber mit dem tatsächlich echten aktuellen Wert  (also dem um 8 Perioden in die Zukunft verschobenen) rechnen und nicht mit von vor 8 Perioden. Dafür müsste ich aber einen negativen Wert aus dem Array auslesen und das verbietet mir das Programm. Deswegen bin ich auf der Suche nach einer Lösung wie ich den in die Zukunft verschobenen Wert auslesen kann. 

es gibt keinen Zukunftswert für Indikatoren. Indikatoren sind vergangenheitsbasierend.

Wie Carl sagt, es wird nur die Linie in die Zukunft geschoben. Der Wert ist der von damals.

wenn du einen Shift von 8 in die Zukunft hast, dann ist der wert der dir 8 Bars in die Zukunft angezeigt werden der wert von jetzt. Das ist nur eine darstellungsoption

 
Vielen Dank für eure Antworten. Ich habe den EA jetzt mit nicht verschobenen Werten rechnen lassen. War etwas fummelig, aber jetzt läuft es. Danke euch!