Pon "Me gusta" y sigue las noticias
Deje un enlace a él, ¡qué los demás también lo valoren!
Evalúe su trabajo en el terminal MetaTrader 5
iWPRSignAlert - indicador para MetaTrader 5
- Visualizaciones:
- 807
- Ranking:
- Publicado:
- 2016.12.09 17:02
- ¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa
Indicador de señal de semáforo de flechas que usa la salida de las zonas de sobrecompra y sobreventa del oscilador Williams’ Percent Range clásico, con alertas, envío de mensajes de correo y notificaciones push al smartphone.
Para el envío de alertas, mensajes de correo y mensajes push al smarphone, se han realizado los siguientes cambios en el código del indicador:
- En los parámetros de entrada del indicador se han escrito nuevas variables de entrada
input uint NumberofBar=1;//Número de la barra para la alerta input bool SoundON=true; //Permiso para la alerta input uint NumberofAlerts=2;//Número de alertas input bool EMailON=false; //Permiso para enviar una señal por correo input bool PushON=false; //Permiso para enviar una señal al móvil
- Se han añadido tres nuevas funciones BuySignal(), SellSignal() y GetStringTimeframe() al final del código del indicador
//+------------------------------------------------------------------+ //| Buy signal function | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // texto del nombre del indicador para las señales de correo y push double &BuyArrow[], // búfer de indicador con las señales para la compra const int Rates_total, // número actual de barras const int Prev_calculated, // número de barras en el tick anterior const double &Close[], // precio de cierre const int &Spread[]) // spread { //--- static uint counter=0; if(Rates_total!=Prev_calculated) counter=0; bool BuySignal=false; bool SeriesTest=ArrayGetAsSeries(BuyArrow); int index; if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[index]!=EMPTY_VALUE) BuySignal=true; if(BuySignal && counter<=NumberofAlerts) { counter++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SeriesTest=ArrayGetAsSeries(Close); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; double Ask=Close[index]; double Bid=Close[index]; SeriesTest=ArrayGetAsSeries(Spread); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; Bid+=Spread[index]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(SoundON) Alert("BUY signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod); if(EMailON) SendMail(SignalSirname+": BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification(SignalSirname+": BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Sell signal function | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // texto del nombre del indicador para las señales de correo y push double &SellArrow[], // búfer de indicador con las señales para la venta const int Rates_total, // número actual de barras const int Prev_calculated, // número de barras en el tick anterior const double &Close[], // precio de cierre const int &Spread[]) // spread { //--- static uint counter=0; if(Rates_total!=Prev_calculated) counter=0; bool SellSignal=false; bool SeriesTest=ArrayGetAsSeries(SellArrow); int index; if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; if(NormalizeDouble(SellArrow[index],_Digits) && SellArrow[index]!=EMPTY_VALUE) SellSignal=true; if(SellSignal && counter<=NumberofAlerts) { counter++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SeriesTest=ArrayGetAsSeries(Close); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; double Ask=Close[index]; double Bid=Close[index]; SeriesTest=ArrayGetAsSeries(Spread); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; Bid+=Spread[index]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(SoundON) Alert("SELL signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod); if(EMailON) SendMail(SignalSirname+": SELL signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification(SignalSirname+": SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Obteniendo el marco temporal en forma de línea | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- En el bloque OnCalculate(), después de los ciclos de cálculo del indicador, se han añadido un par de llamadas de las funciones BuySignal() y SellSignal()
BuySignal("iWPRSign",BuyBuffer,rates_total,prev_calculated,close,spread); SellSignal("iWPRSign",SellBuffer,rates_total,prev_calculated,close,spread);
Donde BuyBuffer y SellBuffer son los nombres de los búferes de indicador para guardar las señales de compra y venta. En los búferes de indicador, como valores vacíos deberán existir o bien ceros o bien EMPTY_VALUE.
Se supone que en el código del indicador, en el bloque OnCalculate(), se usará solo una llamada a las funciones BuySignal() y SellSignal().
Fig. 1. Indicador iWPRSignAlert en el gráfico
Fig.2. Indicador iWPRSignAlert. Envío de la alerta
Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/15837
La idea de este indicador de media móvil consiste en conceder a la barra con mayor volumen el mayor peso en la promediación.
FDI_HTFIndicador FDI con posibilidad de cambiar el marco temporal del indicador en los parámetros de entrada.
Indicador de señal de semáforo de flechas que usa la salida de las zonas de sobrecompra y sobreventa del oscilador DeMark clásico, con alertas, envío de mensajes de correo y notificaciones push al smartphone.
iRSISignAlertIndicador de señal de semáforo de flechas que usa la salida de las zonas de sobrecompra y sobreventa del oscilador Relative Strength Index clásico, con alertas, envío de mensajes de correo y notificaciones push al smartphone.