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
Harami_Alert - indicador para MetaTrader 5
- Visualizaciones:
- 642
- Ranking:
- Publicado:
- 2018.10.26 12:47
- ¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa
Autor real:
Paul Stringer
Indicador para determinar los patrones Harami, con el envío de alertas, mensajes de correo y notificaciones Push a su teléfono inteligente.
En el código del indicador, han sido hechas las siguientes modificaciones para las alertas, mensajes de correo y Push al smartphone:
- Han sido añadidas nuevas variables de entrada a los parámetros de entrada del indicador:
input uint NumberofBar=1;//Número de la barra para enviar la señal input bool SoundON=true; //Permiso de la alerta input uint NumberofAlerts=2; // Número de alertas input bool EMailON=false;// Permiso para enviar señales por email input bool PushON=false; // Permiso para enviar la alerta al móvil
- Han sido añadidas 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 emails y señales Push double &BuyArrow[], // búfer de indicador con señales de compra const int Rates_total, // número actual de las 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]*_Point; 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 emails y señales Push double &SellArrow[], // búfer de indicador con señales de compra const int Rates_total, // número actual de las barras const int Prev_calculated, // número de las barras en el tick anterior const double &Close[], // precio del 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]*_Point; 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 timeframe como cadena | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- En el bloque OnCalculate() después del cálculo del indicador, ha sido insertada la llamada a las funciones BuySignal() y SellSignal()
//--- BuySignal("Harami_Alert",BuyBuffer,rates_total,prev_calculated,close,spread); SellSignal("Harami_Alert",SellBuffer,rates_total,prev_calculated,close,spread); //---
Donde BuyBuffer y SellBuffer son nombres de los búferes de indicador para almacenar las señales de compra y de venta. En los búferes de indicador, como valores vacíos, tienen que figurar ceros o EMPTY_VALUE.
Se supone que en el código del indicador, en el bloque OnCalculate() va a usarse sólo una llamada a las funciones BuySignal() y SellSignal().
Por primera vez, este indicador fue implementado en MQL4 y publicado en Code Base 14.06.2016.
Fig. 1. Indicador Harami_Alert en el gráfico
Fig. 2. Indicador Harami_Alert. Envío de alertas
Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/22403
El indicador WPR_Histogram_Vol tiene la posibilidad de cambiar el timeframe del indicador en los parámetros de entrada.
TimeZonePivotsOpenSystemEl indicador colorea las velas que salen fuera de las bandas del canal TimeZonePivots
Oscilador Williams’ Percent Range en forma del histograma de color con el uso de volúmenes.
Exp_BrainTrend2_AbsolutelyNoLagLwma_X2MACandle_MMRecTres sistemas comerciales independientes con el uso de los indicadores BrainTrend_V2, AbsolutelyNoLagLWMA y X2MACandle en el mismo EA, con posibilidad de cambiar el tamaño de la próxima transacción dependiendo de los resultados de las transacciones anteriores para este sistema comercial.