Inicio Indicador técnico Publicación

JBrainTrend1Stop_Alert: Tu nuevo aliado en MetaTrader 5

Archivos adjuntos
16895.zip (11.35 KB, Descargar 0 veces)

¡Hola, traders! Hoy quiero hablarles sobre el JBrainTrend1Stop, un indicador de tendencia que incorpora alertas, correos electrónicos y notificaciones push. Si buscas mejorar tu estrategia de trading, este indicador es justo lo que necesitas.

A continuación, les detallo las modificaciones que se han hecho en el código del indicador para implementar estas funcionalidades:

  1. Se han introducido nuevos parámetros de entrada:
    input uint NumeroDeBarras=1;//Número de barra para la señal
    input bool SonidoActivado=true; //Habilitar alertas
    input uint NumeroDeAlertas=2;//Número de alertas
    input bool CorreoActivado=false; //Habilitar envío de correos
    input bool NotificacionPushActivada=false; //Habilitar envío de notificaciones móviles
            
  2. Se añadieron tres nuevas funciones al final del código del indicador: BuySignal(), SellSignal() y GetStringTimeframe(). Aquí te detallo cómo funcionan:
    //+------------------------------------------------------------------+
    //| Función de señal de compra                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string NombreSeñal,      // texto del nombre del indicador para correos y mensajes
                   double &FlechaCompra[],        // buffer del indicador con señales de tendencia al alza
                   double &FlechaVenta[],       // buffer del indicador con señales de tendencia a la baja
                   const int TotalDeBarras,     // número actual de barras
                   const int AnteriorCalculado, // número de barras en el tick anterior
                   const double &Cierre[],     // precio de cierre
                   const int &Spread[])       // spread
      {
    //---
       static uint contador=0;
       if(TotalDeBarras!=AnteriorCalculado) contador=0;

       bool SeñalCompra=false;
       bool VerificarSerie=ArrayGetAsSeries(FlechaCompra);
       int indice, indice1;
       if(VerificarSerie)
         {
          indice=int(NumeroDeBarras);
          indice1=indice+1;
         }
       else
         {
          indice=TotalDeBarras-int(NumeroDeBarras)-1;
          indice1=indice-1;
         }
       if(FlechaVenta[indice1] && FlechaVenta[indice1]!=EMPTY_VALUE && FlechaCompra[indice] && FlechaCompra[indice]!=EMPTY_VALUE) SeñalCompra=true;
       if(SeñalCompra && contador<=NumeroDeAlertas)
         {
          contador++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string texto=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          VerificarSerie=ArrayGetAsSeries(Cierre);
          if(VerificarSerie) indice=int(NumeroDeBarras);
          else indice=TotalDeBarras-int(NumeroDeBarras)-1;
          double PedidoCompra=Cierre[indice];
          double PedidoVenta=Cierre[indice];
          VerificarSerie=ArrayGetAsSeries(Spread);
          if(VerificarSerie) indice=int(NumeroDeBarras);
          else indice=TotalDeBarras-int(NumeroDeBarras)-1;
          PedidoVenta+=_Point*Spread[indice];
          string sPedidoCompra=DoubleToString(PedidoCompra,_Digits);
          string sPedidoVenta=DoubleToString(PedidoVenta,_Digits);
          string sPeriodo=GetStringTimeframe(ChartPeriod());
          if(SonidoActivado) Alert("Señal de COMPRA \n PedidoCompra=",PedidoCompra,"\n PedidoVenta=",PedidoVenta,"\n hora actual=",texto,"\n Símbolo=",Symbol()," Periodo=",sPeriodo);
          if(CorreoActivado) SendMail(NombreSeñal+": Alerta de señal de COMPRA","Señal de COMPRA en PedidoCompra="+sPedidoCompra+", PedidoVenta="+sPedidoVenta+", Fecha="+texto+" Símbolo="+Symbol()+" Periodo="+sPeriodo);
          if(NotificacionPushActivada) SendNotification(NombreSeñal+": Seña de COMPRA en PedidoCompra="+sPedidoCompra+", PedidoVenta="+sPedidoVenta+", Fecha="+texto+" Símbolo="+Symbol()+" Periodo="+sPeriodo);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Función de señal de venta                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NombreSeñal,      // texto del nombre del indicador para correos y mensajes
                    double &FlechaVenta[],       // buffer del indicador con señales de tendencia a la baja
                    double &FlechaCompra[],        // buffer del indicador con señales de tendencia al alza
                    const int TotalDeBarras,     // número actual de barras
                    const int AnteriorCalculado, // número de barras en el tick anterior
                    const double &Cierre[],     // precio de cierre
                    const int &Spread[])       // spread
      {
    //---
       static uint contador=0;
       if(TotalDeBarras!=AnteriorCalculado) contador=0;

       bool SeñalVenta=false;
       bool VerificarSerie=ArrayGetAsSeries(FlechaVenta);
       int indice, indice1;
       if(VerificarSerie)
         {
          indice=int(NumeroDeBarras);
          indice1=indice+1;
         }
       else
         {
          indice=TotalDeBarras-int(NumeroDeBarras)-1;
          indice1=indice-1;
         }
       if(FlechaCompra[indice1] && FlechaCompra[indice1]!=EMPTY_VALUE && FlechaVenta[indice] && FlechaVenta[indice]!=EMPTY_VALUE) SeñalVenta=true;
       if(SeñalVenta && contador<=NumeroDeAlertas)
         {
          contador++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string texto=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          VerificarSerie=ArrayGetAsSeries(Cierre);
          if(VerificarSerie) indice=int(NumeroDeBarras);
          else indice=TotalDeBarras-int(NumeroDeBarras)-1;
          double PedidoCompra=Cierre[indice];
          double PedidoVenta=Cierre[indice];
          VerificarSerie=ArrayGetAsSeries(Spread);
          if(VerificarSerie) indice=int(NumeroDeBarras);
          else indice=TotalDeBarras-int(NumeroDeBarras)-1;
          PedidoVenta+=_Point*Spread[indice];
          string sPedidoCompra=DoubleToString(PedidoCompra,_Digits);
          string sPedidoVenta=DoubleToString(PedidoVenta,_Digits);
          string sPeriodo=GetStringTimeframe(ChartPeriod());
          if(SonidoActivado) Alert("Señal de VENTA \n PedidoCompra=",PedidoCompra,"\n PedidoVenta=",PedidoVenta,"\n hora actual=",texto,"\n Símbolo=",Symbol()," Periodo=",sPeriodo);
          if(CorreoActivado) SendMail(NombreSeñal+": Alerta de señal de VENTA","Señal de VENTA en PedidoCompra="+sPedidoCompra+", PedidoVenta="+sPedidoVenta+", Fecha="+texto+" Símbolo="+Symbol()+" Periodo="+sPeriodo);
          if(NotificacionPushActivada) SendNotification(NombreSeñal+": Señal de VENTA en PedidoCompra="+sPedidoCompra+", PedidoVenta="+sPedidoVenta+", Fecha="+texto+" Símbolo="+Symbol()+" Periodo="+sPeriodo);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Obteniendo el timeframe como string                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  3. Se añadieron un par de llamadas a las funciones BuySignal() y SellSignal() después de los ciclos de cálculo del indicador en el bloque OnCalculate():
    //---    
       BuySignal("JBrainTrend1Stop_Alert",FlechaCompra,FlechaVenta,total_de_barras,anterior_calculado,cierre,spread);
       SellSignal("JBrainTrend1Stop_Alert",FlechaVenta,FlechaCompra,total_de_barras,anterior_calculado,cierre,spread);
    //---  

Donde FlechaCompra y FlechaVenta son los nombres de los buffers del indicador para almacenar señales de tendencia al alza y a la baja (líneas de stop para largos y cortos). Si no hay una tendencia apropiada, el valor debe ser cero o EMPTY_VALUE en los buffers del indicador.

Se asume que solo se utilizará una llamada a las funciones BuySignal() y SellSignal() en el bloque OnCalculate() del código del indicador.

Asegúrate de colocar el archivo compilado del indicador JMA.mq5 en la carpeta MQL5\Indicators.

Fig.1. Indicador JBrainTrend1Stop_Alert en el gráfico

Fig.1. Indicador JBrainTrend1Stop_Alert en el gráfico

Fig.2. Indicador JBrainTrend1Stop_Alert. Generando alertas

Fig.2. Indicador JBrainTrend1Stop_Alert. Generando alertas

Publicaciones relacionadas

Comentarios (0)