Sistema comercial de tendencia Exp_ColorZerolagMomentum_X2, basado en las señales de dos indicadores
ColorZerolagMomentum. Con el primer indicador se define la dirección de la tendencia lenta según la posición de la línea principal y la línea de señal, y con el segundo indicador se determina el momento de realización de la operación, cuando tiene lugar el cruce o el contacto entre las líneas. La señal de ejecución de operaciones se forma en el momento del cierre de una barra, si se han dado dos condiciones.
Las señales de las tendencias lenta y rápida coinciden;
Ha cambiado la dirección de la tendencia rápida.
Parámetros de entrada del experto:
input string Trade="Control del comercio";
input double MM=0.1;
input MarginMode MMMode=LOT;
input uint StopLoss_=1000;
input uint TakeProfit_=2000;
input string MustTrade="Permiso para comerciar";
input int Deviation_=10;
input bool BuyPosOpen=true;
input bool SellPosOpen=true;
input string Filter="PARÁMETROS DE LA TENDENCIA LENTA";
input ENUM_TIMEFRAMES TimeFrame=PERIOD_H6;
input uint smoothing=15;
input ENUM_APPLIED_PRICE IPC=PRICE_CLOSE;
input double Factor1=0.05;
input uint Momentum_period1=8;
input double Factor2=0.10;
input uint Momentum_period2=21;
input double Factor3=0.16;
input uint Momentum_period3=34;
input double Factor4=0.26;
input int Momentum_period4=55;
input double Factor5=0.43;
input uint Momentum_period5=89;
input uint SignalBar=1;
input bool BuyPosClose=true;
input bool SellPosClose=true;
input string Input="PARÁMETROS DE ENTRADA";
input ENUM_TIMEFRAMES TimeFrame_=PERIOD_M30;
input uint smoothing_=15;
input ENUM_APPLIED_PRICE IPC_=PRICE_CLOSE;
input double Factor1_=0.05;
input uint Momentum_period1_=8;
input double Factor2_=0.10;
input uint Momentum_period2_=21;
input double Factor3_=0.16;
input uint Momentum_period3_=34;
input double Factor4_=0.26;
input int Momentum_period4_=55;
input double Factor5_=0.43;
input uint Momentum_period5_=89;
input uint SignalBar_=1;
input bool BuyPosClose_=false;
input bool SellPosClose_=false;
Las variables de flecha con texto en el código de los parámetros de entrada sirven solo para representar visualmente de forma más clara la ventana de los parámetros de entrada del experto.
Los indicadores ColorZerolagMomentum_HTF en el experto sirven solo para visualizar de forma más cómoda las tendencias en el simulador de estrategias, y no funcionan en los otros modos de trabajo.
Para que el asesor funcione correctamente, es imprescindible que los archivos compilados de los indicadores ColorZerolagMomentum.ex5 y ColorZerolagMomentum_HTF.ex5 estén en la carpeta catálogo_de_datos_del_terminal\MQL5\Indicators.
Después de la compilación, el archivo del experto Exp_ColorZerolagMomentum.ex5 contendrá los indicadores ColorZerolagMomentum.ex5 y ColorZerolagMomentum_HTF.ex5 dentro de sí como recursos, ¡por eso, en lo sucesivo no hay necesidad de que estén en la carpeta del terminal para que el experto funcione! Para ello, se ha añadido al código del experto el código correspondiente para incluir estos indicadores en un archivo ejecutable del experto.
A nivel global se han añadido como recursos los archivos ejecutables de los indicadores
#resource "\\Indicators\\ColorZerolagMomentum.ex5"
#resource "\\Indicators\\ColorZerolagMomentum_HTF.ex5"
En el bloque de la función OnInit() se han modificado las rutas de línea a los indicadores usados como recurso
InpInd_Handle=iCustom(Symbol(),TimeFrame,"::Indicators\\ColorZerolagMomentum",
smoothing,IPC,Factor1,Momentum_period1,Factor2,Momentum_period2,Factor3,Momentum_period3,Factor4,Momentum_period4,Factor5,Momentum_period5);
if(InpInd_Handle==INVALID_HANDLE)
{
Print(" No se ha logrado obtener el manejador del indicador ColorZerolagMomentum");
return(INIT_FAILED);
}
InpInd_Handle_=iCustom(Symbol(),TimeFrame_,"::Indicators\\ColorZerolagMomentum",
smoothing_,IPC_,Factor1_,Momentum_period1_,Factor2_,Momentum_period2_,Factor3_,Momentum_period3_,Factor4_,Momentum_period4_,Factor5_,Momentum_period5_);
if(InpInd_Handle_==INVALID_HANDLE)
{
Print(" No se ha logrado obtener el manejador del indicador ColorZerolagMomentum _");
return(INIT_FAILED);
}
if(MQLInfoInteger(MQL_VISUAL_MODE))
{
int Ind_Handle=iCustom(Symbol(),Period(),"::Indicators\\ColorZerolagMomentum_HTF",TimeFrame,
smoothing,IPC,Factor1,Momentum_period1,Factor2,Momentum_period2,Factor3,Momentum_period3,Factor4,Momentum_period4,Factor5,Momentum_period5);
if(Ind_Handle==INVALID_HANDLE)
{
Print(" No se ha logrado obtener el manejador del indicador ColorZerolagMomentum_HTF");
return(INIT_FAILED);
}
Ind_Handle=iCustom(Symbol(),Period(),"::Indicators\\ColorZerolagMomentum_HTF",TimeFrame_,
smoothing_,IPC_,Factor1_,Momentum_period1_,Factor2_,Momentum_period2_,Factor3_,Momentum_period3_,Factor4_,Momentum_period4_,Factor5_,Momentum_period5_);
if(Ind_Handle==INVALID_HANDLE)
{
Print(" No se ha logrado obtener el manejador del indicador ColorZerolagMomentum_HTF _");
return(INIT_FAILED);
}
}
De esta forma, el archivo ejecutable compilado del experto se puede usar en otros terminales comerciales sin indicadores, de forma independiente.
Hay que tener en cuenta que el archivo de la biblioteca TradeAlgorithms.mqh está pensado para usar expertos con brókers que propongan un spread distinto de cero y la posibilidad de establecer Stop Loss y Take Profit simultáneamente en la apertura de posición. Se pueden descargar otras variantes de esta biblioteca a través del enlace Trade Algorithms.
Con las simulaciones que se exponen más abajo se usaron los parámetros por defecto del experto. En las simulaciones no se usaron Stop Loss o Take Profit.

Fig. 1. Ejemplos de operaciones en el gráfico
Resultados de la simulación en 2015 con GBPJPY, tendencia lenta en H6, entrada con tendencia rápida en M30:

Fig. 2. Gráfico de resultados de simulación