テクニカル指標

レベルインジケーター - MetaTrader 5向けの便利なツール
MetaTrader5
レベルインジケーター - MetaTrader 5向けの便利なツール

MetaTrader 5のレベルインジケーターは、設定で指定されたtrigLvレベルがdeviationの範囲内をクロスした際に、モバイルデバイスにプッシュ通知を送信します。これは、入力パラメータnotificationが有効である場合に行われ、さらに入力パラメータalertが有効であればアラートも鳴ります。 設定されたtrigLvレベルとdeviationの制限は、横線で表示されます。そのスタイル、色、太さはインジケーター設定で調整可能です。このデザインにより、異なるレベルのインジケーターを複数チャートに追加し、交差した結果としてシグナルを受け取ることができます。 指定されたtrigLvレベルは、1つのバーで1回のみ機能します。再発動は次のバーがオープンした後のみ可能です。このようにして、各ティックでの過剰なトリガーを排除することができました。 //+------------------------------------------------------------------+ //|                                              レベルインジケーター.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; // アラートを使用 input bool notification = true; // プッシュ通知を使用 input double trigLv = 0.0; // 発動レベル input int deviation = 30; // trigLvからの乖離(ポイント単位) input int lineWidth = 1; // 線の太さ input ENUM_LINE_STYLE lineStyle = STYLE_SOLID; // 線のスタイル input color lineColor = clrMediumSpringGreen; // 線の色 input color inactivityColor = clrLightGray; // 非アクティブ時の色 CChartObjectHLine lv, dvH, dvL; bool equal(double _v1, double _v2, double _epsilon) { return fabs(_v1 - _v2) <= fabs(_epsilon); } //+------------------------------------------------------------------+ //| カスタムインジケーター初期化関数                         | //+------------------------------------------------------------------+ 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("レベルインジケーター。レベル ", lv.Price(0), " は非アクティブです!");   if (trigLv == 0.0)     Alert("レベルインジケーター。パラメータ"trigLv"を望ましい値に設定してください!");   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("レベルインジケーター。レベル ", NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " がトリガーされました!");       if (notification)         SendNotification("レベルインジケーター。レベル " + (string)NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)) + " がトリガーされました!");     }     triggered = true;   }   else     triggered = false;      return rates_total; } //+------------------------------------------------------------------+

2022.01.20
最初 前へ 15 16 17 18 19 20 21 22 23 24 25 次へ 最後