Home Indicatore tecnico Post

Indicatore di Livello per MetaTrader 4: Come Ottimizzare le Tue Operazioni

Allegato
37912.zip (1.61 KB, Scarica 0 volte)

Se sei un trader e utilizzi MetaTrader 4, probabilmente hai sentito parlare dell'Indicatore di Livello. Questo strumento è fondamentale per monitorare i livelli chiave e ricevere notifiche in tempo reale. Ma come funziona esattamente?

Quando il livello trigLv specificato nelle impostazioni viene superato all'interno della deviazione, l'indicatore invia una notifica push al tuo dispositivo mobile se il parametro di notifica è attivato. Inoltre, emette un avviso se il parametro avviso è abilitato. I livelli di trigLv e deviazione sono evidenziati da linee orizzontali, il cui stile, colore e spessore possono essere personalizzati direttamente nelle impostazioni dell'indicatore.

Questa funzionalità ti permette di aggiungere più copie dell'indicatore con livelli diversi al grafico e ricevere segnali in base alle loro intersezioni. Ricorda che il livello trigLv funziona solo una volta per ogni barra; la riattivazione è possibile solo dopo l'apertura della barra successiva, evitando così attivazioni troppo frequenti ad ogni tick.

Indicatore di Livello

//+------------------------------------------------------------------+
//|                                               LevelIndicator.mq4 |
//|                                               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 strict
#property indicator_chart_window
#property indicator_plots 0

#include <ChartObjects\ChartObjectsLines.mqh>

input bool alert = true; // usa avviso
input bool notification = true; // usa notifiche push
input double trigLv = 0.0; // livello di attivazione
input int deviation = 30; // deviazione da trigLv in punti
input int lineWidth = 1; // spessore della linea
input ENUM_LINE_STYLE lineStyle = STYLE_SOLID; // stile della linea
input color lineColor = clrMediumSpringGreen; // colore della linea
input color inactivityColor = clrLightGray; // colore di inattività

CChartObjectHLine lv, dvH, dvL; 

bool equal(double _v1, double _v2, double _epsilon) { return fabs(_v1 - _v2) <= fabs(_epsilon); }

//+------------------------------------------------------------------+
//| Funzione di inizializzazione dell'indicatore personalizzato                         |
//+------------------------------------------------------------------+
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("Indicatore di Livello. Livello ", lv.Price(0), " è inattivo!");
  if (trigLv == 0.0)
    Alert("Indicatore di Livello. Imposta il parametro \"trigLv\" al valore desiderato!");
  return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason) {
  //lv.Delete();
  //dvH.Delete();
  //dvL.Delete();
}

//+------------------------------------------------------------------+
//| Funzione di iterazione dell'indicatore personalizzato                              |
//+------------------------------------------------------------------+
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[0], deviation * SymbolInfoDouble(NULL, SYMBOL_POINT))) { 
    if (time_ != time[0])
      time_ = time[0];
    else
      return rates_total;
    if (!triggered) {
      if (alert)
        Alert("Indicatore di Livello. Livello ", NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " attivato!");
      if (notification)
        SendNotification("Indicatore di Livello. Livello " + (string)NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)) + " attivato!");
    }
    triggered = true;
  }
  else
    triggered = false;
    
  return(rates_total);
}
//+------------------------------------------------------------------+

In sintesi, l'Indicatore di Livello è uno strumento utile per migliorare la tua strategia di trading, offrendoti la possibilità di essere sempre aggiornato sui movimenti del mercato. Non dimenticare di personalizzarlo secondo le tue esigenze per massimizzare i tuoi risultati!

Post correlati

Commento (0)