iCustom

Rend le handle de l'indicateur indiqué d'utilisateur.

int  iCustom(
   string           symbol,     // nom du symbole
   ENUM_TIMEFRAMES  period,     // période
   string           name        // dossier/le nom de_l'indicateur d'utilisateur
   ...                          // liste des paramètres d'entrée de l'indicateur
   );

Paramètres

symbol

[in]  Le nom symbolique de l'instrument dont les données devraient être utilisées pour calculer l'indicateur. NULL signifie le symbole actuel.

period

[in]  La valeur de la période peut être une des valeurs de l'énumération ENUM_TIMEFRAMES, 0 signifit le temps trame courant.

name

[in]  Le nom de l'indicateur d'utilisateur contenant le chemin relativement le directoire radical des indicateurs (MQL5/Indicators/). Si l'indicateur se trouve au sous-répertoire, par exemple, dans MQL5/Indicators/Examples, son nom doit être spécifié comme — "Examples\\le nom_de l'indicateur" (l'indication de l'inverse double slash au lieu de slash simple comme le délimiteur).

...

[in] les paramètres input de l'indicateur d'utilisateur divisés par les virgules. Le type et l'héritage des paramètres doit correspondre. Si les paramètres ne sont pas indiqués, on utilise les valeurs par défaut.

La valeur rendue

Rend le handle de l'indicateur technique indiqué, en cas de l'échec rend INVALID_HANDLE.

Note

L'indicateur d'utilisateur doit être compilé (le fichier avec l'extension EX5) et se trouver dans le directoire MQL5/Indicators du terminal de client ou le sous-répertoire inclus.

Les indicateurs nécessaires au test sont définis automatiquement de l'appel des fonctions, iCustom(), si le paramètre correspondant est spécifié par la ligne constante. Pour les autres cas (l'utilisation de la fonction IndicatorCreate() ou l'utilisation de la ligne non constante dans le paramètre qui spécifie le nom de l'indicateur) la propriété donnée #property tester_indicator est nécessaire:

#property tester_indicator "indicator_name.ex5"

Si dans l'indicateur on utilise la première forme de l'appel, au lancement de l'indicateur d'utilisateur sur l'onglet "Parameters" on peut indiquer supplémentairement sur quelles données il sera calculé. Si le paramètre "Apply to" n'est pas choisi évidemment, par défaut le calcul est produit selon les valeurs "Close".

Le choix de la série temporelle pour le calcul de l'indicateur

A l'appel de l'indicateur d'utilisateur du programme mql5 le paramètre Applied_Price ou le handle d'un autre indicateur doit être transmis le dernier après toutes les variables d'entrée prévues par l'indicateur d'utilisateur.

Voir aussi

Propriétés des programmes, Accès aux séries temporelles et les données des indicateurs, IndicatorCreate(), IndicatorRelease()

Exemple:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input int MA_Period=21;
input int MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMA;
//--- indicator buffers
double         Label1Buffer[];
//--- handle de l'indicateur d'utilisateur Custom Moving Average.mq5
int MA_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   ResetLastError();
   MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",
                     MA_Period,
                     MA_Shift,
                     MA_Method,
                     PRICE_CLOSE // calculons selon les prix de la clôture
                     );
   Print("MA_handle = ",MA_handle,"  error = ",GetLastError());
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- copions les valeurs de l'indicateur Custom Moving Average à notre tampon d'indicateur
   int copy=CopyBuffer(MA_handle,0,0,rates_total,Label1Buffer);
   Print("copy = ",copy,"    rates_total = ",rates_total);
//--- si la tentative est ratée - signalez-le
   if(copy<=0)
      Print("La tentative ratée de recevoir les valeurs de l'indicateur  Custom Moving Average");
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+