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
WeightOscillator_Alert - indicador para MetaTrader 5
- Visualizações:
- 1791
- Avaliação:
- Publicado:
- 2017.02.01 08:25
- Atualizado:
- 2023.03.29 13:39
- Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
Indicador de tendência WeightOscillator 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:
- Antes de declarar as variáveis de entrada, no nível global é declarada a enumeração para as variantes dos indicadores que transitem os sinais//+----------------------------------------------------+
//| enumeração para as variantes dos indicadores que transitem os sinais |
//+----------------------------------------------------+
enum ENUM_SIGNAL_MODE
{
MODE_SIGNAL, //Sinal de ruptura
MODE_TREND //Sinais de ruptura e tendência
}; - Nos parâmetros de entrada do indicador, foram anexadas novas variáveis de entrada//---- Variáveis de entrada para alertas
input ENUM_SIGNAL_MODE SignMode=MODE_SIGNAL; //Variante de emissão de sinal
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; //Número de alertas
input bool EMailON=false; //Autorização para envio do sinal por correio eletrônico
input bool PushON=false; //Autorização para envio do sinal para o celular - 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 &ColorArray[],// colorido buffer de índice
int ColorIndex,// índice de cor no buffer de índice colorido para envio do sinal
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(ColorArray);
int index,index1;
if(SeriesTest)
{
index=int(NumberofBar);
index1=index+1;
}
else
{
index=Rates_total-int(NumberofBar)-1;
index1=index-1;
}
if(SignMode==MODE_SIGNAL)
{
if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) BuySignal=true;
}
else
{
if(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+=_Point*Spread[index];
string sAsk=DoubleToString(Ask,_Digits);
string sBid=DoubleToString(Bid,_Digits);
string sPeriod=GetStringTimeframe(ChartPeriod());
if(SignMode==MODE_SIGNAL || (SignMode==MODE_TREND && ColorArray[index1]!=ColorIndex))
{
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);
}
else
{
if(SoundON) Alert("Up Trend signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
if(EMailON) SendMail(SignalSirname+": Up Trend signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
if(PushON) SendNotification(SignalSirname+": Up Trend 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 &ColorArray[], // buffer de índice colorido
int ColorIndex, // índice de cor no buffer de índice colorido para envio de sinal
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(ColorArray);
int index,index1;
if(SeriesTest)
{
index=int(NumberofBar);
index1=index+1;
}
else
{
index=Rates_total-int(NumberofBar)-1;
index1=index-1;
}
if(SignMode==MODE_SIGNAL)
{
if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) SellSignal=true;
}
else
{
if(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+=_Point*Spread[index];
string sAsk=DoubleToString(Ask,_Digits);
string sBid=DoubleToString(Bid,_Digits);
string sPeriod=GetStringTimeframe(ChartPeriod());
if(SignMode==MODE_SIGNAL || (SignMode==MODE_TREND && ColorArray[index1]!=ColorIndex))
{
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);
}
else
{
if(SoundON) Alert("Down trend signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
if(EMailON) SendMail(SignalSirname+": Down trend signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
if(PushON) SendNotification(SignalSirname+": Down trend 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("WeightOscillator_Alert",ColorBuffer,0,rates_total,prev_calculated,close,spread);
SellSignal("WeightOscillator_Alert",ColorBuffer,4,rates_total,prev_calculated,close,spread);
//---
Onde ColorBuffer é o nome do buffer de índice colorido para o armazenamento das cores do indicador, e os valores 0 e 4 são os números - das cores no buffer - nos quais o oscilador encontra-se nas zonas de sobrevenda e sobrecompra.
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().
O indicador usa as classes da biblioteca SmoothAlgorithms.mqh (é necessário copiar e colar no <diretório_de_dados_do_terminal>\MQL5\Include); no artigo "Média de séries de preços, sem buffers adicionais para cálculos intermédios" encontra-se uma descrição detalhada.
Fig.1. Indicador WeightOscillator_Alert no gráfico
Fig.2. Indicador WeightOscillator_Alert. Envio do alerta para sinal de ruptura
Fig.3. Indicador WeightOscillator_Alert. Envio do alerta para sinal de tendência
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/17091
Indicador Fractional_Bands com possibilidade de alterar o timeframe do indicador nos parâmetros de entrada:
Chart on ChartIndicador Chart on Chart exibe o gráfico de outro símbolo no gráfico atual.
Dois canais fractais Keltnera em execução de nuvem.
eur usd m5O Expert Advisor trabalha em modo martingale com sinais do indicador iStochastic, Stochastic Oscillator.