Technischer Indikator

Level Indicator für MetaTrader 5: So optimierst du deine Handelsstrategie
MetaTrader5
Level Indicator für MetaTrader 5: So optimierst du deine Handelsstrategie

Der Level Indicator ist ein hilfreiches Tool für Trader, die ihre Handelsstrategien verfeinern möchten. Wenn der in den Einstellungen festgelegte Triggerebene (trigLv) innerhalb der Abweichung überschritten wird, erhältst du eine Push-Benachrichtigung auf dein mobiles Gerät, vorausgesetzt, der Parameter Benachrichtigung ist aktiviert. Zusätzlich kannst du einen Alarm aktivieren, um sofort informiert zu werden, wenn die Bedingungen erfüllt sind. Die Trigger- und Abweichungsgrenzen werden durch horizontale Linien auf dem Chart angezeigt, deren Stil, Farbe und Dicke du in den Einstellungen anpassen kannst. Diese Funktionalität ermöglicht es dir, mehrere Kopien des Indikators mit unterschiedlichen Ebenen auf dem Chart zu platzieren und Signale aus deren Schnittpunkten zu erhalten. Wichtig zu beachten ist, dass die Triggerebene trigLv nur einmal pro Kerze aktiv wird. Eine erneute Aktivierung ist erst nach dem Öffnen der nächsten Kerze möglich. So wird vermieden, dass zu viele Trigger bei jedem Tick ausgelöst werden. //+------------------------------------------------------------------+ //|                                              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; // Alarm aktivieren input bool notification = true; // Push-Benachrichtigungen aktivieren input double trigLv = 0.0; // Trigger-Level input int deviation = 30; // Abweichung vom trigLv in Punkten input int lineWidth = 1; // Linienbreite input ENUM_LINE_STYLE lineStyle = STYLE_SOLID; // Linienstil input color lineColor = clrMediumSpringGreen; // Linienfarbe input color inactivityColor = clrLightGray; // Inaktivitätsfarbe CChartObjectHLine lv, dvH, dvL; bool equal(double _v1, double _v2, double _epsilon) { return fabs(_v1 - _v2) <= fabs(_epsilon); } //+------------------------------------------------------------------+ //| Eingabefunktion für den benutzerdefinierten Indikator                         | //+------------------------------------------------------------------+ 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. Level ", lv.Price(0), " ist inaktiv!");  if (trigLv == 0.0)    Alert("Level Indicator. Setze den Parameter 'trigLv' auf den gewünschten Wert!");  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. Level ", NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " ausgelöst!");      if (notification)        SendNotification("Level Indicator. Level " + (string)NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)) + " ausgelöst!");    }    triggered = true;  }  else    triggered = false;  return rates_total;} //+------------------------------------------------------------------+

2022.01.20
Erste Vorherige 15 16 17 18 19 20 21 22 23 24 25 Nächste Letzte