Inicio Indicador técnico Publicación

BrainTrend2SigAlert: Potencia tu Trading con Alertas en MetaTrader 5

Archivos adjuntos
16695.zip (4.09 KB, Descargar 0 veces)

BrainTrend2Sig es un indicador de señales de semáforo que incluye alertas, correos electrónicos y notificaciones push para optimizar tu experiencia de trading.

Se han realizado los siguientes cambios en el código del indicador para implementar las alertas, los correos electrónicos y las notificaciones push:

  1. Se han introducido nuevos parámetros de entrada:
    input uint NumeroDeBarras=1;//Número de barras para la señal
    input bool SonidoActivado=true; //Activar alertas
    input uint NumeroDeAlertas=2;//Número de alertas
    input bool CorreoActivado=false; //Activar envío de señales por correo
    input bool PushActivado=false; //Activar envío de señales a dispositivos móviles
    
  2. Se han agregado tres nuevas funciones al final del código del indicador: BuySignal(), SellSignal() y GetStringTimeframe():
    //+------------------------------------------------------------------+
    //| Función de señal de compra                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string NombreSeñal,      // texto del nombre del indicador para correos y mensajes push
                   double &FlechaCompra[],        // buffer del indicador con señales de compra
                   const int TotalBarras,     // el número actual de barras
                   const int AnteriorCalculado, // el número de barras en el tick anterior
                   const double &Cierre[],     // precio de cierre
                   const int &Spread[])       // spread
      {
    //---
       static uint contador=0;
       if(TotalBarras!=AnteriorCalculado) contador=0;
    
       bool SeñalCompra=false;
       bool PruebaSerie=ArrayGetAsSeries(FlechaCompra);
       int indice;
       if(PruebaSerie) indice=int(NumeroDeBarras);
       else indice=TotalBarras-int(NumeroDeBarras)-1;
       if(NormalizeDouble(FlechaCompra[indice],_Digits) && 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);
          PruebaSerie=ArrayGetAsSeries(Cierre);
          if(PruebaSerie) indice=int(NumeroDeBarras);
          else indice=TotalBarras-int(NumeroDeBarras)-1;
          double Pregunta=Cierre[indice];
          double Oferta=Cierre[indice];
          PruebaSerie=ArrayGetAsSeries(Spread);
          if(PruebaSerie) indice=int(NumeroDeBarras);
          else indice=TotalBarras-int(NumeroDeBarras)-1;
          Oferta+=Spread[indice];
          string sPregunta=DoubleToString(Pregunta,_Digits);
          string sOferta=DoubleToString(Oferta,_Digits);
          string sPeriodo=GetStringTimeframe(ChartPeriod());
          if(SonidoActivado) Alert("Señal de COMPRA \n Pregunta=",Pregunta,"\n Oferta=",Oferta,"\n horacorriente=",texto,"\n Símbolo=",Symbol()," Período=",sPeriodo);
          if(CorreoActivado) SendMail(NombreSeñal+": alerta de señal de COMPRA","Señal de COMPRA en Pregunta="+sPregunta+", Oferta="+sOferta+", Fecha="+texto+" Símbolo="+Symbol()+" Período="+sPeriodo);
          if(PushActivado) SendNotification(NombreSeñal+": Señal de COMPRA en Pregunta="+sPregunta+", Oferta="+sOferta+", Fecha="+texto+" Símbolo="+Symbol()+" Período="+sPeriodo);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Función de señal de venta                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NombreSeñal,      // texto del nombre del indicador para correos y mensajes push
                    double &FlechaVenta[],       // buffer del indicador con señales de venta
                    const int TotalBarras,     // el número actual de barras
                    const int AnteriorCalculado, // el número de barras en el tick anterior
                    const double &Cierre[],     // precio de cierre
                    const int &Spread[])       // spread
      {
    //---
       static uint contador=0;
       if(TotalBarras!=AnteriorCalculado) contador=0;
    
       bool SeñalVenta=false;
       bool PruebaSerie=ArrayGetAsSeries(FlechaVenta);
       int indice;
       if(PruebaSerie) indice=int(NumeroDeBarras);
       else indice=TotalBarras-int(NumeroDeBarras)-1;
       if(NormalizeDouble(FlechaVenta[indice],_Digits) && 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);
          PruebaSerie=ArrayGetAsSeries(Cierre);
          if(PruebaSerie) indice=int(NumeroDeBarras);
          else indice=TotalBarras-int(NumeroDeBarras)-1;
          double Pregunta=Cierre[indice];
          double Oferta=Cierre[indice];
          PruebaSerie=ArrayGetAsSeries(Spread);
          if(PruebaSerie) indice=int(NumeroDeBarras);
          else indice=TotalBarras-int(NumeroDeBarras)-1;
          Oferta+=Spread[indice];
          string sPregunta=DoubleToString(Pregunta,_Digits);
          string sOferta=DoubleToString(Oferta,_Digits);
          string sPeriodo=GetStringTimeframe(ChartPeriod());
          if(SonidoActivado) Alert("Señal de VENTA \n Pregunta=",Pregunta,"\n Oferta=",Oferta,"\n horacorriente=",texto,"\n Símbolo=",Symbol()," Período=",sPeriodo);
          if(CorreoActivado) SendMail(NombreSeñal+": alerta de señal de VENTA","Señal de VENTA en Pregunta="+sPregunta+", Oferta="+sOferta+", Fecha="+texto+" Símbolo="+Symbol()+" Período="+sPeriodo);
          if(PushActivado) SendNotification(NombreSeñal+": Señal de VENTA en Pregunta="+sPregunta+", Oferta="+sOferta+", Fecha="+texto+" Símbolo="+Symbol()+" Período="+sPeriodo);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Obtener el período como cadena                              |
    //+------------------------------------------------------------------+
    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("BrainTrend2SigAlert",FlechaCompra,total_barras,anterior_calculado,cierre,spread);
    SellSignal("BrainTrend2SigAlert",FlechaVenta,total_barras,anterior_calculado,cierre,spread);
    //---

Donde FlechaCompra y FlechaVenta son los nombres de los buffers del indicador para almacenar las señales de compra y venta. En los buffers del indicador, deben establecerse ceros o EMPTY_VALUE como valores vacíos.

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

Fig.1. Indicador BrainTrend2SigAlert en el gráfico

Fig.1. Indicador BrainTrend2SigAlert en el gráfico

Fig.2. Indicador BrainTrend2SigAlert. Generando alertas

Fig.2. Indicador BrainTrend2SigAlert. Generando alertas

Publicaciones relacionadas

Comentarios (0)