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:
- 2125
- Avaliação:
- Publicado:
- 2017.01.09 11:23
-
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
Autor real:
Ramdass - Conversion only
Indicador de sinal semáforo BykovTrend com emissão de alertas, envio de e-mails e mensagens push para seu smartphone.
Para alertas, envio de e-mails e mensagens push para seu smartphone, no código do indicador foram feitas as seguintes alterações:
- Nos parâmetros de entrada do indicador, foram anexadas novas variáveis de entrada
input uint NumberofBar=1;//Número da barra para emissão do sinal input bool SoundON=true; //Autorização do alerta input uint NumberofAlerts=2;//Quantidade de alertas input bool EMailON=false; //Autorização para enviar o sinal via e-mail input bool PushON=false; //Autorização para enviar o sinal para o telefone
- Foram adicionadas três novas funções, isto é, BuySignal(), SellSignal() e GetStringTimeframe() no final do código do indicador
//+------------------------------------------------------------------+ //| Buy signal function | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // texto do nome do indicador para sinais push e de e-mail double &BuyArrow[], // buffer indicador com sinais de compra const int Rates_total, // número atual de barras const int Prev_calculated, // 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]; 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 do nome do indicador para sinais push e de e-mail double &SellArrow[], // buffer indicador com sinais de compra const int Rates_total, // número atual de barras const int Prev_calculated, // 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]; 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); } //--- } //+------------------------------------------------------------------+ //| Obtenção do timeframe como uma cadeia de caracteres | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- No bloco OnCalculate(), após os ciclos de cálculo do indicador, é adicionado um par de casos para as funções BuySignal() e SellSignal()
//--- BuySignal("BykovTrendAlert",BuyBuffer,rates_total,prev_calculated,close,spread); SellSignal("BykovTrendAlert",SellBuffer,rates_total,prev_calculated,close,spread); //---
Onde BuyBuffer e SellBuffer são os nomes de indicador dos buffers para armazenar sinais para compra e venda. Nos buffers de indicador, como valores vazios, devem haver zeros ou EMPTY_VALUE.
Supõe-se que no código do indicador, no bloco OnCalculate(), vai ser utilizado para um único tratamento das funções BuySignal() e SellSignal().
Este indicador foi implementado pela primeira vez na MQL4 e publicado no Code Base a 28.09.2007.
Fig.1. Indicador BykovTrendAlert no gráfico
Fig.2. Indicador BykovTrendAlert. Emissão do alerta
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/16458

Três pivot no mesmo gráfico com a possibilidade de alterar seus timeframes.

Outra variante do ZigZag de Roche.

Analisador de tendência em função da diferença entre dois osciladores RSI cujos períodos são diferentes.

Indicador ColorX2MA com emissão de alertas, envio de e-mails e mensagens push para seu smartphone.