Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
- Visualizações:
- 1503
- Avaliação:
- Publicado:
- 2018.12.10 10:24
-
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
Autor real:
Paul Stringer
O indicador define padrões Harami e apresenta alertas, e-mails e notificações push.
As seguintes alterações foram feitas no código do indicador para implementar alertas, mensagens de email e notificações por push:
- Introduzindo novos parâmetros de entrada
input uint NumberofBar=1;//Número da barra do sinal input bool SoundON=true; //Habilitar alertas input uint NumberofAlerts=2;//Número de alertas input bool EMailON=false; //Ativar o envio do sinal input bool PushON=false; //Ativar o envio do sinal para dispositivos móveis
- Adicionado três novas funções ao final do código do indicador: BuySignal(), SellSignal() e GetStringTimeframe()
//+------------------------------------------------------------------+ //| Função de sinal de Compra | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // texto do nome do indicador para email e mensagens push double &BuyArrow[], // buffer do indicador com sinais de compra const int Rates_total, // o número atual de barras const int Prev_calculated, // o número de barras no tick anterior const double &Close[], // preço de fechamento 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); } //--- } //+------------------------------------------------------------------+ //| Função do sinal de Venda | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // texto do nome do indicador para email e mensagens push double &SellArrow[], // buffer do indicador com sinais de venda const int Rates_total, // o número atual de barras const int Prev_calculated, // o número de barras no tick anterior const double &Close[], // preço de fechamento 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); } //--- } //+------------------------------------------------------------------+ //| Obtendo o timeframe como uma string | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Adicionado um par de chamadas para as funções BuySignal() e SellSignal() após os ciclos de cálculo do indicador no bloco OnCalculate()
//--- BuySignal("Harami_Alert",BuyBuffer,rates_total,prev_calculated,close,spread); SellSignal("Harami_Alert",SellBuffer,rates_total,prev_calculated,close,spread); //---
Onde BuyBuffer e SellBuffer são os nomes dos buffers do indicador para armazenar os sinais de compra e venda. Com os valores vazios ou zero nos buffers do indicador, o EMPTY_VALUE deve ser definido.
Assume-se que a única chamada para as funções BuySignal() e SellSignal() será usada no bloco OnCalculate() do código do indicador
Originalmente este indicador foi escrito em MQL4 e foi publicado pela primeira vez no Code Base em 14.06.2016.
Fig. 1. Indicador Harami_Alert no gráfico
Fig. 2. Harami_Alert. Gerando alertas
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/22403

Indicador WPR_Histogram_Vol com a opção de seleção do timeframe, disponível nos parâmetros de entrada

O indicador coloca cores nos candles que vão além do canal TimeZonePivots

Oscilador Williams’ Percent Range exibido como um histograma colorido, usando volumes.

Três sistemas de negociação independentes usando os indicadores BrainTrend_V2, AbsolutelyNoLagLWMA e X2MACandle dentro de um único EA com a capacidade de alterar o volume de um próximo negócio, dependendo dos resultados anteriores para este sistema de negociação.