Beranda Indikator Teknis Postingan

Indikator Level: Memudahkan Trading Anda di MetaTrader 4

Lampiran
37912.zip (1.61 KB, Unduh 0 kali)

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_plots 0

#include <ChartObjects\ChartObjectsLines.mqh>

input bool alert = true; // aktifkan alert
input bool notification = true; // aktifkan notifikasi push
input double trigLv = 0.0; // level pengaktifan
input int deviation = 30; // deviasi dari trigLv dalam poin
input int lineWidth = 1; // ketebalan garis
input ENUM_LINE_STYLE lineStyle = STYLE_SOLID; // gaya garis
input color lineColor = clrMediumSpringGreen; // warna garis
input color inactivityColor = clrLightGray; // warna ketidakaktifan

CChartObjectHLine lv, dvH, dvL;

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

//+------------------------------------------------------------------+
//| Fungsi inisialisasi indikator kustom                         |
//+------------------------------------------------------------------+
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("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);
}

void OnDeinit(const int reason) {
  //lv.Delete();
  //dvH.Delete();
  //dvL.Delete();
}

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

    Postingan terkait

    Komentar (0)