Indikator Teknikal

Indikator Level untuk MetaTrader 5: Panduan Lengkap
MetaTrader5
Indikator Level untuk MetaTrader 5: Panduan Lengkap

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.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_plots 0 #include <ChartObjects\ChartObjectsLines.mqh> input bool alert = true; // gunakan amaran input bool notification = true; // gunakan notifikasi push input double trigLv = 0.0; // tahap pengaktifan input int deviation = 30; // penyimpangan dari trigLv dalam titik input int lineWidth = 1; // lebar 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 pengaktifan indikator khusus                         | //+------------------------------------------------------------------+ 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. Tetapkan parameter \"trigLv\" kepada nilai yang diingini!");   return(INIT_SUCCEEDED); } void OnDeinit(const int reason) {   //lv.Delete();   //dvH.Delete();   //dvL.Delete(); } 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[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; } //+------------------------------------------------------------------+

2022.01.20
Pertama Sebelumnya 15 16 17 18 19 20 21 22 23 24 25 Seterusnya Terakhir