Inicio Indicador técnico Publicación

iMFISignAlert: Un Indicador Esencial para MetaTrader 5

Archivos adjuntos
15843.zip (3.11 KB, Descargar 0 veces)

Te presento iMFISignAlert, un indicador de señales con flechas que se basa en el clásico oscilador Money Flow Index. Este indicador no solo deja claro cuándo estamos en zonas de sobrecompra o sobreventa, sino que también incluye alertas que envían correos electrónicos y notificaciones push a tus dispositivos móviles.

Para implementar las alertas, se han realizado algunos cambios en el código del indicador. Aquí te detallo las novedades:

  1. Se introdujeron nuevos parámetros de entrada:
    input uint NúmeroDeBarra=1;// Número de barra para la señal
    input bool SonidoActivado=true; // Habilitar alertas
    input uint NúmeroDeAlertas=2;// Número de alertas
    input bool CorreoActivado=false; // Habilitar envío de señales por correo
    input bool NotificaciónPushActivada=false; // Habilitar envío de señales a dispositivos móviles
    
  2. Se añadieron tres nuevas funciones al final del código del indicador: BuySignal(), SellSignal() y GetStringTimeframe(). Aquí tienes un ejemplo del funcionamiento de BuySignal:
    //+------------------------------------------------------------------+
    //| Función de señal de compra |
    //+------------------------------------------------------------------+
    void BuySignal(string NombreIndicador,      // Texto del nombre del indicador para mensajes de correo y push
                   double &FlechaCompra[],        // Buffer del indicador con señales de compra
                   const int TotalBarras,     // Número actual de barras
                   const int Prev_calculado, // Número de barras en la tick anterior
                   const double &Cierre[],     // Precio de cierre
                   const int &Spread[])       // spread
      {
    //---
       static uint contador=0;
       if(TotalBarras!=Prev_calculado) contador=0;
    
       bool SeñalCompra=false;
       bool PruebaSerie=ArrayGetAsSeries(FlechaCompra);
       int índice;
       if(PruebaSerie) índice=int(NúmeroDeBarra);
       else índice=TotalBarras-int(NúmeroDeBarra)-1;
       if(NormalizeDouble(FlechaCompra[índice],_Digits) && FlechaCompra[índice]!=EMPTY_VALUE) SeñalCompra=true;
       if(SeñalCompra && contador<=NúmeroDeAlertas)
         {
          contador++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string texto=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          PruebaSerie=ArrayGetAsSeries(Cierre);
          if(PruebaSerie) índice=int(NúmeroDeBarra);
          else índice=TotalBarras-int(NúmeroDeBarra)-1;
          double Pedir=Cierre[índice];
          double Ofertar=Cierre[índice];
          PruebaSerie=ArrayGetAsSeries(Spread);
          if(PruebaSerie) índice=int(NúmeroDeBarra);
          else índice=TotalBarras-int(NúmeroDeBarra)-1;
          Ofertar+=Spread[índice];
          string sPedir=DoubleToString(Pedir,_Digits);
          string sOfertar=DoubleToString(Ofertar,_Digits);
          string sPeriodo=GetStringTimeframe(ChartPeriod());
          if(SonidoActivado) Alert("Señal de COMPRA 
     Pedir=",Pedir,"
     Ofertar=",Ofertar,"
     currtime=",texto,"
     Símbolo=",Symbol()," Periodo=",sPeriodo);
          if(CorreoActivado) SendMail(NombreIndicador+": alerta de señal de COMPRA","Señal de COMPRA en Pedir="+sPedir+", Ofertar="+sOfertar+", Fecha="+texto+" Símbolo="+Symbol()+" Periodo="+sPeriodo);
          if(NotificaciónPushActivada) SendNotification(NombreIndicador+": Señal de COMPRA en Pedir="+sPedir+", Ofertar="+sOfertar+", Fecha="+texto+" Símbolo="+Symbol()+" Periodo="+sPeriodo);
         }
    //---
      }
    //+------------------------------------------------------------------+
        
  3. Se añadieron llamadas a las funciones BuySignal() y SellSignal() al final de los ciclos de cálculo del indicador en el bloque OnCalculate():
    BuySignal("iWPRSign",FlechaCompra,total_barras,prev_calculado,cierre,spread);
        SellSignal("iWPRSign",FlechaVenta,total_barras,prev_calculado,cierre,spread);
    

Donde FlechaCompra y FlechaVenta son los nombres de los buffers del indicador para almacenar las señales de compra y venta. Es importante que los valores vacíos en los buffers sean definidos como ceros o EMPTY_VALUE.

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

Fig.1. El indicador iMFISignAlert en el gráfico

Fig.1. El indicador iMFISignAlert en el gráfico

Fig.2. El indicador iMFISignAlert. Generando alertas.

Fig.2. El indicador iMFISignAlert. Generando alertas.

Publicaciones relacionadas

Comentarios (0)