Join our fan page
Deje un enlace a él, ¡qué los demás también lo valoren!
Evalúe su trabajo en el terminal MetaTrader 5
BalanceOfPower_Histogram_Alert - indicador para MetaTrader 5
- Visualizaciones:
- 914
- Ranking:
- Publicado:
- 2016.10.18 16:12
- Actualizado:
- 2023.03.27 14:23
Autor real:
RoboFx
Indicador Balance of Power (BOP) en forma de histograma de color de la fuerza y dirección de la tendencia activa con alertas, envío de mensajes de correo y mensajes push al smartphone. El histograma se colorea de acuerdo con los valores de los parámetros de los niveles de sobrecompra y sobreventa y de la dirección del movimiento del histograma.
Para las alertas y el envío de mensajes de correo y notificaciones push al smartphone, en el código del indicador se han hecho los siguientes cambios:
- En los parámetros de entrada del indicador se han escrito nuevas variables de entrada
//---- Parámetros de entrada para las alertas input uint NumberofBar=1; //Número de la barra para enviar la señal input bool SoundON=true; //Permiso de 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 por correo y push double &ColorArray[],// búfer del índice de color int ColorIndex,// índice de color en el búfer del índice de color para el envío de la señal 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(ColorArray); int index,index1; if(SeriesTest) { index=int(NumberofBar); index1=index+1; } else { index=Rates_total-int(NumberofBar)-1; index1=index-1; } if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) 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 señales push y por correo double &ColorArray[], // búfer del índice de color int ColorIndex, // índice de color en el búfer del índice de color para el envío de la señal 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(ColorArray); int index,index1; if(SeriesTest) { index=int(NumberofBar); index1=index+1; } else { index=Rates_total-int(NumberofBar)-1; index1=index-1; } if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) 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); } //--- } //+------------------------------------------------------------------+ //| Obtener 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 a las funciones BuySignal() y SellSignal()
//--- BuySignal("BalanceOfPower_Histogram_Alert",ColorIndBuffer,0,rates_total,prev_calculated,close,spread); SellSignal("BalanceOfPower_Histogram_Alert",ColorIndBuffer,7,rates_total,prev_calculated,close,spread); //---
Donde ColorIndBuffer es el nombre del búfer del índice de color para guardar el color de la vela en forma de índice.
Se presupone que en el código del indicador, en el bloque OnCalculate() se usará solo una llamada a las funciones BuySignal() y SellSignal().
El indicador usa las clases de la biblioteca SmoothAlgorithms.mqh (hay que copiar en el catálogo_de_datos_del_terminal\MQL5\Include), se puede encontrar información más detallada del funcionamiento en el artículo "Promediación de series de precio para cálculos intermedios sin usar buffers adicionales".
Este indicador se implementó por primera vez en MQL5 y fue publicado en Code Base 07.02.2013.
Imágenes:
Fig. 1. Indicador BalanceOfPower_Histogram_Alert en el gráfico
Fig.2. Indicador BalanceOfPower_Histogram_Alert. Envío de la alerta
Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/16403
Indicador ColorJSatl_Digit con posibilidad de cambiar el marco temporal del indicador en los parámetros de entrada.
si_q_asi_HTFIndicador si_q_asi con posibilidad de cambiar el marco temporal del indicador en los parámetros de entrada.
Indicador ColorJFatl_Digit con alertas, envío de mensajes de correo y mensajes push al smartphone.
Exp_ColorJSatl_DigitEl experto Exp_ColorJSatl_Digit está construido sobre la base del cambio de color del indicador ColorJSatl_Digit.