Indicador técnico

Indicador de Nível para MetaTrader 5: Como Utilizar Eficazmente
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
Primeiro Anterior 15 16 17 18 19 20 21 22 23 24 25 Próximo Último