Startseite Technischer Indikator Beitrag

Cycle Period – Ein wichtiger Indikator für MetaTrader 5

Anhang
562.zip (8.65 KB, Herunterladen 0 mal)

Autor:

Witold Wozniak

Der Cycle Period Indikator ist ein nützliches Tool, um die Periodizität von Preisänderungen eines Finanzinstruments zu messen. Er speichert die aktuellen Marktzykluswerte in seinem Indikatorpuffer, die aus offensichtlichen Gründen nie stabil sind. Dieser Indikator wurde entwickelt, um in Kombination mit Oszillatoren verwendet zu werden, damit diese sich an die ständig wechselnden Marktzyklen anpassen können.

Inspiriert wurde dieser Indikator durch den Artikel von John Ehlers "Using The Fisher Transform", der im November 2002 in der Zeitschrift "Technical Analysis Of Stock & Commodities" veröffentlicht wurde.

Cycle Period

Um den Cycle Period Indikator in einem anderen Indikator, wie beispielsweise dem RVI Oszillator, nutzen zu können, muss der Indikator-Handle global deklariert werden:

//---- Deklaration der Integer-Variablen für die Indikator-Handles
int CP_Handle;

Im Anschluss muss der Handle des Cycle Period Indikators im Initialisierungsblock des RVI Indikators abgerufen werden:

//---- Abruf des Cycle Period Indikator-Handles
   CP_Handle=iCustom(NULL,0,"CyclePeriod",Alpha);
   if(CP_Handle==INVALID_HANDLE)
     {
      Print("Fehler beim Abrufen des CyclePeriod Indikator-Handles");
      return(1);
     }

Jetzt haben wir die neue Alpha Variable, die der Eingabeparameter des verwendeten Indikators und der Periodenmittelwertverhältnis ist. Diese Variable muss in die Eingangsvariable des entwickelten Indikators umgewandelt werden.

//+----------------------------------------------+
//| Eingabeparameter des Indikators                  |
//+----------------------------------------------+
input double Alpha=0.07; // Glättungsverhältnis des Indikators 

Die bisherige Length Eingangsvariable muss aus der Liste der Eingabeparameter entfernt werden und stattdessen als lokale Variable innerhalb der OnCalculate() Funktion deklariert werden.

Die Größe der Arrays, die für die Glättung des Indikators verwendet werden, wird durch den Wert des Length Parameters festgelegt:

//---- Speicherverteilung für die Variablenarrays  
   ArrayResize(Count,Length);
   ArrayResize(Value1,Length);
   ArrayResize(Value2,Length);

Der Wert dieses Parameters ändert sich jetzt, daher ist es besser, die Größen dieser Arrays nicht kleiner als den angenommenen hohen Wert dieser Variablen festzulegen. Bei der Analyse der Indikatorcharts sehen wir, dass dieser Wert 100 nicht überschreitet. Daher werden die Arraygrößen den gleichen Wert haben:

//---- Speicherverteilung für die Variablenarrays  
   ArrayResize(Count,MAXPERIOD);
   ArrayResize(Value1,MAXPERIOD);
   ArrayResize(Value2,MAXPERIOD);

Im weiteren Verlauf müssen die Periodenwerte für die aktuelle Kerze im OnCalculate() Block aus dem CyclePeriod benutzerdefinierten Indikatorpuffer entnommen werden, damit sie anstelle des Wertes des ehemaligen Length Eingabeparameters verwendet werden können.

//---- Hauptberechnungsschleife des Indikators
   for(bar=first; bar<rates_total && !IsStopped(); bar++)
     {
      //---- Neu erschienene Daten in das Array kopieren
      if(CopyBuffer(CP_Handle,0,rates_total-1-bar,4,period)<=0) return(RESET);

      Length=int(MathFloor((4.0*period[0]+3.0*period[1]+2.0*period[2]+period[3])/20.0));
      if(bar<Length) Length=bar; // Glättung auf die tatsächliche Anzahl der Kerzen beschränken

In diesem Fall werden die letzten vier Werte aus dem CyclePeriod Indikatorpuffer genommen und einer linear gewichteten Glättung unterzogen, nach der der gewonnene Wert als Length Glättungsperiode verwendet wird. Schließlich muss die Zeile am Ende des Indikatorcodes geändert werden:

      if(bar<rates_total-1) Recount_ArrayZeroPos(Count,MAXPERIOD);

So haben wir den Adaptive RVI Oszillator erhalten:

RVI und Adaptive RVI Indikatoren

Verwandte Beiträge

Kommentar (0)