Preiskonstanten

Technische Indikatoren brauchen für ihre Berechnungen die Angaben von Preiswerten und/oder Volumenwerten, auf denen sie gerechnet werden.  Es gibt 7 vorbestimmte Identifikatoren der Enumeration  ENUM_APPLIED_PRICE, für Andeutung der notwendigen Preigrundlage der Berechnungen.

ENUM_APPLIED_PRICE

Identifikator

Beschreibung

PRICE_CLOSE

Eroeffnungspreis

PRICE_OPEN

Eroeffnungspreis

PRICE_HIGH

Maximaler Preis für die Periode

PRICE_LOW

Minimaler Preis für die Periode

PRICE_MEDIAN

Medianpreis, (high+low)/2

PRICE_TYPICAL

Typischer Preis, (high+low+close)/3

PRICE_WEIGHTED

Durchschnittlich gewogener Preis, (high+low+close+close)/4

Wenn das Volumen in Berechnungen verwendet wird, muss man einen der zwei Werte der Enumeration  ENUM_APPLIED_VOLUME angeben .

ENUM_APPLIED_VOLUME

Identifikator

Beschreibung

VOLUME_TICK

Tickvolumen

VOLUME_REAL

Handelsvolumen

Der technische Indikator iStochastic() hat zwei Varianten für seine Berechnung :

  • entweder nur die Preise Close;
  • oder Preise High und Low.

für Auswahl der notwendigen Variante der Berechnung muss einen der Werte der Enumeration ENUM_STO_PRICE angegeben werden.

ENUM_STO_PRICE

Identifikator

Beschreibung

STO_LOWHIGH

Berechnung ist nach den Preisen Low/High

STO_CLOSECLOSE

Berechnung ist nach den Preisen Close/Close

Wenn ein technischer Indikator für seine Berechnungen Preisdaten verwendet, deren Typ durch die Enumeration ENUM_APPLIED_PRICE festgelegt wird, kann als Eingabepreisreihe handle jedes Indikators (der ins Terminal eingebaut wird oder vom Benutzer geschrieben wird) angegeben werden. In diesem Fall werden für Berechnungen Werte des Nullpuffers des Indikators verwendet werden.  Das ermöglicht die Werte eines Indikators mittels der Werte eines anderen Indikators leicht zu erzeugen. Handle eines Benutzerindikators wird durch Aufruf der Funktion iCustom() erzeugt.

Beispiel:

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- input parameters
input int      RSIperiod=14;         // Periode für die Berechnung von RSI
input int      Smooth=8;             // Glaettungsperiode RSI
input ENUM_MA_METHOD meth=MODE_SMMA// Glaettungsverfahren
//---- plot RSI
#property indicator_label1  "RSI"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//---- plot RSI_Smoothed
#property indicator_label2  "RSI_Smoothed"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrNavy
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- indicator buffers
double         RSIBuffer[];          // hier werden wir die Werte RSI aufbewahren
double         RSI_SmoothedBuffer[]; //hier haben wir Glaettungwerte RSI 
int            RSIhandle;            // Handle für Indikator RSI
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,RSIBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,RSI_SmoothedBuffer,INDICATOR_DATA);
   IndicatorSetString(INDICATOR_SHORTNAME,"iRSI");
   IndicatorSetInteger(INDICATOR_DIGITS,2);
//--- 
   RSIhandle=iRSI(NULL,0,RSIperiod,PRICE_CLOSE);
//---
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[]
                 )
 
  {
//--- stellen wir Wert des letzten Fehlers auf Null  
   ResetLastError();
//--- bekommen wir Daten des Indikators RSI im Feld RSIBuffer[]
   int copied=CopyBuffer(RSIhandle,0,0,rates_total,RSIBuffer);
   if(copied<=0)
     {
      Print("Kopiren des Indikatorwertes Fehler RSI. Error = ",
            GetLastError(),",  copied =",copied);
      return(0);
     }
//---  using values of RSI erzeugen wir Indikator der Mittelwerte mit Verwendung der RSI Werte   
   int RSI_MA_handle=iMA(NULL,0,Smooth,0,meth,RSIhandle);
   copied=CopyBuffer(RSI_MA_handle,0,0,rates_total,RSI_SmoothedBuffer);
   if(copied<=0)
     {
      Print("Kopieren des gerichteten Feldes Fehler RSI. Error = ",
            GetLastError(),",  copied =",copied);
      return(0);
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }