Halo para trader! Kali ini kita akan membahas tentang Indikator Level yang bisa digunakan di MetaTrader 5. Indikator ini sangat berguna untuk membantu kita menerima sinyal trading yang lebih akurat.
Ketika level trigLv yang telah ditentukan dalam pengaturan terlampaui dalam batas deviation, indikator ini akan mengirimkan notifikasi push ke perangkat mobile kita jika parameter input notification diaktifkan. Selain itu, indikator ini juga akan memutar suara alert jika parameter alert diaktifkan. Level trigger trigLv dan batas deviation ditandai dengan garis horizontal, yang gaya, warna, dan ketebalannya bisa disesuaikan dalam pengaturan indikator. Desain ini memungkinkan kita untuk menambahkan beberapa salinan indikator dengan level yang berbeda pada grafik dan menerima sinyal ketika level tersebut terinterseksi.
Perlu diingat, level trigLv hanya akan berfungsi sekali dalam satu bar. Pengaktifan kembali hanya mungkin setelah bar berikutnya dibuka. Dengan cara ini, kita bisa menghindari terlalu banyak sinyal yang muncul pada setiap tick.

//+------------------------------------------------------------------+//| Level Indicator.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_plots0#include <ChartObjects\ChartObjectsLines.mqh> inputbool alert = true; // aktifkan alertinputbool notification = true; // aktifkan notifikasi pushinputdouble trigLv = 0.0; // level aktivasiinputint 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 tidak aktif 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("Level Indicator. Level ", lv.Price(0), " tidak aktif!"); if (trigLv == 0.0) Alert("Level Indicator. Atur parameter \"trigLv\" ke nilai yang diinginkan!"); 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("Level Indicator. Level ", NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " terpicu!"); if (notification) SendNotification("Level Indicator. Level " + (string)NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)) + " terpicu!"); } triggered = true; } else triggered = false; return rates_total; } //+------------------------------------------------------------------+

Komentar 0