Descargar MetaTrader 5

iCustom

Devuelve el manejador del indicador personalizado especificado.

int  iCustom(
   string           symbol,     // nombre del símbolo
   ENUM_TIMEFRAMES  period,     // período
   string           name        // carpeta/nombre_de_indicador personalizado
   ...                          // lista de parámetros de entrada del indicador
   );

Parámetros

symbol

[in]  Símbolo del instrumento financiero cuyos datos serán usados para calcular el indicador. NULL significa el símbolo actual.

period

[in]  Valor del período puede ser uno de los valores de la enumeración ENUM_TIMEFRAMES, 0 significa el timeframe actual.

name

[in]  Nombre del indicador personalizado que contiene la ruta respecto al directorio raíz de indicadores (MQL5/Indicators/). Si un indicador se encuentra en un subdirectorio, por ejemplo, en MQL5/Indicators/Examples, entonces su nombre ha de ser como sigue — "Examples\\nombre_de_indicador" (es obligatorio el uso de dos barras inversas en vez de una como un separador).

...

[in] input-parámetros del indicador personalizado están separados por comas. El tipo y el orden de seguimiento de parámetros deben corresponder. Si los parámetros no están especificados, entonces se usarán los valores por defecto.

Valor devuelto

Devuelve el manejador del indicador técnico especificado, en caso del fallo devuelve INVALID_HANDLE.

Nota

Un indicador personalizado tiene que estar compilado (un archivo con la extensión EX5) y debe estar ubicado en el directorio MQL5/Indicators del terminal de cliente o en una de sus subcarpetas.

Los indicadores que requieren verificaciones se definen automáticamente desde la llamada a la función iCustom(), si el parámetro correspondiente es fijado por una cadena constante. Para los demás casos (uso de función IndicatorCreate() o uso de una cadena no constante en el parámetro que asigna el nombre del indicador) esta propiedad #property tester_indicator es necesaria:

#property tester_indicator "indicator_name.ex5"

Si en el indicador se usa la forma de llamada, entonces al iniciar el indicador personalizado en la pestaña "Parameters" podemos especificar adicionalmente los datos a base de los cuales va a ser calculado. Si el parámetro "Apply to" no está elegido explícitamente, por defecto el cálculo se realiza a base de los valores "Close".

Selección de una serie temporal para calcular un indicador

Cuando un indicador personalizado se llama desde el programa mql5, el parámetro Applied_Price o un manejador de otro indicador debe ser pasado el último después de todos los parámetros de entrada previstos por el indicador personalizado.

Véase también

Propiedades de programas, Acceso a las series temporales y a los datos de indicadores, IndicatorCreate(), IndicatorRelease()

Ejemplo:

#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[];
//--- manejador del indicador personalizado 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 // calculamos según los precios de cierre
                     );
   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[])
  {
//--- vamos a copiar los valores del indicador Custom Moving Average a nuestro búfer de indicadores
   int copy=CopyBuffer(MA_handle,0,0,rates_total,Label1Buffer);
   Print("copy = ",copy,"    rates_total = ",rates_total);
//--- si el intento es fallido, avisemos de ello
   if(copy<=0)
      Print("Fallo al obtener los valores del indicador Custom Moving Average");
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


Actualizado: 2015.12.03