Indikator Level: Memudahkan Trading Anda di MetaTrader 4

Mike 2022.01.21 03:40 15 0 0
Lampiran

Halo trader! Kali ini kita akan membahas tentang Indikator Level yang bisa digunakan di MetaTrader 4. Indikator ini sangat berguna dalam membantu kita mengambil keputusan trading yang lebih baik.

Ketika level trigLv yang telah ditentukan dalam pengaturan terlintas dalam batas deviation, indikator ini akan mengirimkan notifikasi push ke perangkat mobile Anda jika parameter notification diaktifkan. Selain itu, indikator ini juga akan memutar suara peringatan jika parameter alert diaktifkan. Level trigLv dan batas deviation ditandai dengan garis horizontal, yang gaya, warna, dan ketebalannya bisa diatur dalam pengaturan indikator. Desain ini memungkinkan Anda untuk menambahkan beberapa salinan indikator dengan level yang berbeda ke dalam grafik dan menerima sinyal saat mereka berpotongan.

Perlu diingat, level trigLv hanya akan bekerja sekali pada satu bar. Pengaktifan ulang hanya mungkin setelah bar berikutnya dibuka. Ini membantu menghindari terjadinya sinyal yang terlalu sering pada setiap tick.

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; // aktifkan alertinputbool notification = true; // aktifkan notifikasi pushinputdouble trigLv = 0.0; // level 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 kustom                         |//+------------------------------------------------------------------+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. Setel parameter \"trigLv\" ke nilai yang diinginkan!");
  return(INIT_SUCCEEDED);
}

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

//+------------------------------------------------------------------+//| Fungsi iterasi indikator kustom                              |//+------------------------------------------------------------------+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);
}
//+------------------------------------------------------------------+
    Daftar
    Komentar 0