Indikator Level untuk MetaTrader 5: Panduan Lengkap

Mike 2022.01.20 22:55 17 0 0
Lampiran

Hai semua trader! Hari ini kita akan membincangkan tentang Indikator Level yang sangat berguna untuk platform MetaTrader 5. Indikator ini membantu kita untuk memantau tahap tertentu dalam carta dan memberi isyarat apabila tahap tersebut dilanggar.

Apabila tahap yang ditetapkan dalam parameter trigLv dilanggar dalam jarak deviation, indikator ini akan menghantar notifikasi push ke peranti mudah alih anda jika parameter notification diaktifkan. Selain itu, ia juga akan memainkan amaran jika parameter alert diaktifkan. Tahap trigLv serta had deviation akan ditandakan dengan garis mendatar, dan anda boleh mengubah gaya, warna, dan ketebalan garis tersebut dalam tetapan indikator. Ini membolehkan anda menambah beberapa salinan indikator dengan tahap yang berbeza pada carta dan menerima isyarat hasil daripada persimpangan tersebut.

Perlu diingat bahawa tahap trigLv ini hanya berfungsi sekali dalam satu bar. Pengaktifan semula hanya boleh dilakukan selepas pembukaan bar seterusnya. Dengan cara ini, kita dapat mengelakkan terlalu banyak pemicu pada setiap tick.

Berikut adalah gambar rajah indikator level:

Indikator Level

//+------------------------------------------------------------------+//|                                              Indikator Level.mq5 |//|                                       Hak Cipta 2022, © Cyberdev |//|                                              https://www.mql5.com/en/users/cyberdev/seller |//+------------------------------------------------------------------+#property copyright"Hak Cipta 2022, © Cyberdev"#property link      "https://www.mql5.com/en/users/cyberdev/seller"#property version   "1.00"#property indicator_chart_window#property indicator_plots0#include <ChartObjects\ChartObjectsLines.mqh>

inputbool alert = true; // gunakan amaraninputbool notification = true; // gunakan notifikasi pushinputdouble trigLv = 0.0; // tahap pengaktifaninputint deviation = 30; // penyimpangan dari trigLv dalam titikinputint lineWidth = 1; // lebar garisinputENUM_LINE_STYLE lineStyle = STYLE_SOLID; // gaya garisinputcolor lineColor = clrMediumSpringGreen; // warna garisinputcolor inactivityColor = clrLightGray; // warna ketidakaktifan

CChartObjectHLine lv, dvH, dvL; 

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

//+------------------------------------------------------------------+//| Fungsi pengaktifan indikator khusus                         |//+------------------------------------------------------------------+intOnInit() {
  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))
        returnINIT_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("Indikator Level. Level ", lv.Price(0), " tidak aktif!");
  if (trigLv == 0.0)
    Alert("Indikator Level. Tetapkan parameter \"trigLv\" kepada nilai yang diingini!");
  return(INIT_SUCCEEDED);
}

voidOnDeinit(constint reason) {
  //lv.Delete();
  //dvH.Delete();
  //dvL.Delete();
}

intOnCalculate(constint rates_total,
                 constint prev_calculated,
                 constdatetime &time[],
                 constdouble &open[],
                 constdouble &high[],
                 constdouble &low[],
                 constdouble &close[],
                 constlong &tick_volume[],
                 constlong &volume[],
                 constint &spread[]
) {
  staticbool triggered = false;
  staticdatetime 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("Indikator Level. Level ", NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " telah dicetuskan!");
      if (notification)
        SendNotification("Indikator Level. Level " + (string)NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)) + " telah dicetuskan!");
    }
    triggered = true;
  }
  else
    triggered = false;
  
  return rates_total;
}

//+------------------------------------------------------------------+
    Senarai
    Komen 0