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:
- 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
- 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); } //--- } //+------------------------------------------------------------------+
- 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.2. El indicador iMFISignAlert. Generando alertas.
Publicaciones relacionadas
- ID Lite Info MA: Tu Nuevo Aliado en MetaTrader 5
- Basket Viewer: Estadísticas para Grupos de Pares Largos y Cortos en MetaTrader 5
- Volatilidad Estocástica: Indicador en Gráficos para MetaTrader 5
- Niveles Históricos Fuertes: Herramienta Clave para Traders de MetaTrader 5
- Alertas de Señales con el Indicador Iin_MA para MetaTrader 5