MetaTrader5
Level Indicator: Een Handige Indicator voor MetaTrader 5
De Level Indicator is een krachtige tool voor traders die gebruik maken van MetaTrader 5. Wanneer het trigLv niveau, dat je in de instellingen kunt aangeven, wordt overschreden binnen de deviatie, ontvangt je direct een pushmelding op je mobiele apparaat, mits de optie notificatie is ingeschakeld. Daarnaast wordt er ook een alert afgespeeld als je de optie alert hebt geactiveerd. Het triggerniveau van trigLv en de deviatie worden gemarkeerd met horizontale lijnen die je kunt personaliseren qua stijl, kleur en dikte in de indicatorinstellingen. Dit maakt het mogelijk om meerdere versies van de indicator met verschillende niveaus aan je grafiek toe te voegen en signalen te ontvangen op basis van hun kruising.
Belangrijk om te weten is dat het aangegeven trigLv niveau slechts één keer per kaar werkt. Heractivering is pas mogelijk na de opening van de volgende kaar. Op deze manier voorkom je dat je te vaak triggers ontvangt bij elke tick.
//+------------------------------------------------------------------+
//| Level Indicator.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; // gebruik alert
input bool notification = true; // gebruik push notificaties
input double trigLv = 0.0; // activeringsniveau
input int deviation = 30; // afwijking van trigLv in punten
input int lineWidth = 1; // lijnbreedte
input ENUM_LINE_STYLE lineStyle = STYLE_SOLID; // lijnstijl
input color lineColor = clrMediumSpringGreen; // lijnkleur
input color inactivityColor = clrLightGray; // inactiviteitskleur
CChartObjectHLine lv, dvH, dvL;
bool equal(double _v1, double _v2, double _epsilon) { return fabs(_v1 - _v2) <= fabs(_epsilon); }
//+------------------------------------------------------------------+
//| Custom indicator initialisatie functie |
//+------------------------------------------------------------------+
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("Level Indicator. Niveau ", lv.Price(0), " is inactief!");
if (trigLv == 0.0)
Alert("Level Indicator. Stel parameter \"trigLv\" in op de gewenste waarde!");
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("Level Indicator. Niveau ", NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " geactiveerd!");
if (notification)
SendNotification("Level Indicator. Niveau " + (string)NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)) + " geactiveerd!");
}
triggered = true;
}
else
triggered = false;
return rates_total;
}
//+------------------------------------------------------------------+
2022.01.20