Constantes des Prix

Les indicateurs techniques ont besoin des prix et/ou des volumes pour effectuer les différents calculs. Il existe 7 identifiants prédéfinis dans l'énumération ENUM_APPLIED_PRICE, utilisés pour spécifier le prix désiré pour les calculs.

ENUM_APPLIED_PRICE

Identifiant

Description

PRICE_CLOSE

Prix de clôture (close)

PRICE_OPEN

Prix d'ouverture (open)

PRICE_HIGH

Le prix maximum pour la période

PRICE_LOW

Le prix minimum pour la période

PRICE_MEDIAN

Prix médian, (high + low)/2

PRICE_TYPICAL

Prix typique, (high + low + close)/3

PRICE_WEIGHTED

Prix moyen, (high + low + close + close)/4

Si le volume est utilisé pour les calculs, il est nécessaire de spécifier l'une des deux valeurs de l'énumération ENUM_APPLIED_VOLUME.

ENUM_APPLIED_VOLUME

Identifiant

Description

VOLUME_TICK

Volume des ticks

VOLUME_REAL

Volume des trades

L'indicateur technique iStochastic() peut être calculé de deux façons en utilisant :

  • soit seulement les prix de Clôture (Close) ;
  • ou les prix High et Low.

Pour sélectionner une variante nécessaire pour le calcul, spécifiez l'une des deux valeurs de l'énumération ENUM_STO_PRICE.

ENUM_STO_PRICE

Identifiant

Description

STO_LOWHIGH

Le calcul est basé sur les prix Low/High

STO_CLOSECLOSE

Le calcul est basé sur les prix Close/Close

Si un indicateur technique utilise les prix, dont le type est défini par ENUM_APPLIED_PRICE, pour les calculs alors le handle de n'importe quel indicateur (intégré du terminal ou écrit par l'utilisateur) peut être utilisé comme série de prix d'entrée. DAns ce cas, les valeurs du buffer zéro de l'indicateur sera utilisé pour les calculs. Cela simplifie la construction des valeurs d'un indicateur en utilisation les valeurs d'un autre indicateur. Le handle d'un indicateur personnalisé est créé en appelant la fonction iCustom().

Exemple :

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- paramètres d'entrée
input int      RSIperiod=14;         // Période pour le calcul du RSI
input int      Smooth=8;             // Période de lissage du RSI
input ENUM_MA_METHOD meth=MODE_SMMA// Méthode de lissage
//---- dessine le RSI
#property indicator_label1  "RSI"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//---- dessine le RSI lissé
#property indicator_label2  "RSI_Smoothed"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrNavy
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- buffers de l'indicateur
double         RSIBuffer[];          // Ici seront stockées les valeurs du RSI
double         RSI_SmoothedBuffer[]; // Ici seront stockées les valeurs lissées du RSI
int            RSIhandle;            // Handle du indicateur RSI
//+----------------------------------------------------------------------------------------------------+
//| Fonction d'initialisation d'un indicateur personnalisé                                             |
//+----------------------------------------------------------------------------------------------------+
void OnInit()
  {
//--- mapping des buffers de l'indicateur
   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);
//---
  }
//+----------------------------------------------------------------------------------------------------+
//| Fonction d'itération de l'indicateur personnalisé                                                  |
//+----------------------------------------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[]
                 )
 
  {
//---  Réinitialise la valeur de la dernière erreur
   ResetLastError();
//--- Récupère les données de l'indicateur RSI dans le tableau RSIBuffer []
   int copied=CopyBuffer(RSIhandle,0,0,rates_total,RSIBuffer);
   if(copied<=0)
     {
      Print("Impossible de copier les valeurs de l'indicateur RSI. Erreur = ",
            GetLastError(),",  copiés =",copied);
      return(0);
     }
//--- Crée les valeurs moyennées de l'indicateur en utilisant les valeurs du RSI
   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("Impossible de copier l'indicateur lissé du RSI. Erreur = ",
            GetLastError(),",  copiés =",copied);
      return(0);
     }
//--- retourne la valeur de prev_calculated pour l'appel suivant
   return(rates_total);
  }