MetaTrader5
Indicador de Nível para MetaTrader 5: Como Utilizar Eficazmente
O Indicador de Nível é uma ferramenta muito útil para traders que utilizam o MetaTrader 5. Quando o nível trigLv, definido nas configurações, é cruzado dentro da devição, o indicador envia uma notificação por push para o seu dispositivo móvel, caso o parâmetro de entrada notificação esteja ativado. Além disso, ele também toca um alerta se o parâmetro alert estiver habilitado. Os limites do nível gatilho trigLv e da devição são destacados com linhas horizontais, cujo estilo, cor e espessura podem ser ajustados nas configurações do indicador. Isso permite que você adicione várias cópias do indicador com diferentes níveis ao gráfico e receba sinais conforme suas interseções. Vale ressaltar que o nível trigLv é acionado apenas uma vez por barra. A reativação só é possível após a abertura da próxima barra, evitando assim gatilhos excessivos a cada tick. //+------------------------------------------------------------------+
//| Indicador de Nível.mq5 |
//| Copyright 2022, © Cyberdev |
//| https://www.mql5.com/en/users/cyberdev/seller |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, © Cyberdev"
#property link "https://www.mql5.com/en/users/cyberdev/seller"
#property version "1.00"
#property indicator_chart_window
#property indicator_plots 0
#include <ChartObjects\ChartObjectsLines.mqh>
input bool alert = true; // usar alerta
input bool notification = true; // usar notificações por push
input double trigLv = 0.0; // nível de ativação
input int deviation = 30; // desvio de trigLv em pontos
input int lineWidth = 1; // largura da linha
input ENUM_LINE_STYLE lineStyle = STYLE_SOLID; // estilo da linha
input color lineColor = clrMediumSpringGreen; // cor da linha
input color inactivityColor = clrLightGray; // cor de inatividade
CChartObjectHLine lv, dvH, dvL;
bool equal(double _v1, double _v2, double _epsilon) { return fabs(_v1 - _v2) <= fabs(_epsilon); }
//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado |
//+------------------------------------------------------------------+
int OnInit() {
string name;
double dv;
color color_;
name = "alert.lv-";
dv = deviation * SymbolInfoDouble(NULL, SYMBOL_POINT);
color_ = (alert || notification) ? lineColor : inactivityColor;
for (int n = 0; n <= INT_MAX && !IsStopped(); n++) {
if (ObjectFind(0, name + (string)n) != 0) {
if (!lv.Create(0, name + (string)n, 0, trigLv))
return INIT_FAILED;
lv.Width(lineWidth);
lv.Style(lineStyle);
lv.Color(color_);
dvH.Create(0, "alert.dvH-" + (string)n, 0, trigLv + dv);
dvH.Width(1);
dvH.Style(STYLE_DOT);
dvH.Color(color_);
dvL.Create(0, "alert.dvL-" + (string)n, 0, trigLv - dv);
dvL.Width(1);
dvL.Style(STYLE_DOT);
dvL.Color(color_);
break;
}
}
if (!alert && !notification)
Print("Indicador de Nível. Nível ", lv.Price(0), " está inativo!");
if (trigLv == 0.0)
Alert("Indicador de Nível. Defina o parâmetro \"trigLv\" para o valor desejado!");
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason) {
//lv.Delete();
//dvH.Delete();
//dvL.Delete();
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[]
) {
static bool triggered = false;
static datetime time_ = 0;
if (!alert && !notification)
return rates_total;
if (equal(lv.Price(0), close[rates_total - 1], deviation * SymbolInfoDouble(NULL, SYMBOL_POINT))) {
if (time_ != time[rates_total - 1])
time_ = time[rates_total - 1];
else
return rates_total;
if (!triggered) {
if (alert)
Alert("Indicador de Nível. Nível ", NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " ativado!");
if (notification)
SendNotification("Indicador de Nível. Nível " + (string)NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)) + " ativado!");
}
triggered = true;
}
else
triggered = false;
return rates_total;
}
//+------------------------------------------------------------------+
2022.01.20