Indikator Level: Memudahkan Perdagangan Anda di MetaTrader 4

Mike 2022.01.21 03:40 12 0 0
Lampiran

Halo para trader! Kali ini kita nak bincangkan tentang Indikator Level yang sangat berguna untuk platform MetaTrader 4. Indikator ini berfungsi dengan cara yang sangat mudah; apabila trigLv yang ditetapkan dalam tetapan 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. Garis horizontal yang menunjukkan tahap trigLv dan deviation juga boleh disesuaikan dengan tetapan warna, gaya dan ketebalan dalam indikator.

Dengan reka bentuk ini, anda boleh menambah beberapa salinan indikator dengan tahap yang berbeza pada carta dan menerima isyarat berdasarkan persilangan mereka. Anda tidak perlu risau, kerana tahap trigLv ini hanya akan berfungsi sekali pada satu bar. Pengaktifan semula hanya boleh berlaku selepas pembukaan bar seterusnya, jadi anda tak perlu risau tentang terlalu banyak isyarat yang sering muncul.

Indikator Level

//+------------------------------------------------------------------+//|                                               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_plots0#include <ChartObjects\ChartObjectsLines.mqh>

inputbool alert = true; // gunakan amaraninputbool notification = true; // gunakan notifikasi pushinputdouble trigLv = 0.0; // tahap pengaktifaninputint deviation = 30; // deviasi dari trigLv dalam poininputint lineWidth = 1; // ketebalan 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 inisialisasi 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();
}

//+------------------------------------------------------------------+//| Fungsi pengiraan indikator khusus                              |//+------------------------------------------------------------------+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[0], deviation * SymbolInfoDouble(NULL, SYMBOL_POINT))) { 
    if (time_ != time[0])
      time_ = time[0];
    else
      return rates_total;
    if (!triggered) {
      if (alert)
        Alert("Indikator Level. Level ", NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " terpicu!");
      if (notification)
        SendNotification("Indikator Level. Level " + (string)NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)) + " terpicu!");
    }
    triggered = true;
  }
  else
    triggered = false;
    
  return(rates_total);
}
//+------------------------------------------------------------------+
    Senarai
    Komen 0