หน้าแรก ตัวชี้วัดทางเทคนิค โพสต์

ตัวบ่งชี้ระดับ (Level Indicator) สำหรับ MetaTrader 4

ไฟล์แนบ
37912.zip (1.61 KB, ดาวน์โหลด 0 ครั้ง)

สวัสดีครับเพื่อนๆ นักเทรดทุกคน วันนี้เรามาคุยกันเรื่องตัวบ่งชี้ระดับ (Level Indicator) ที่สามารถใช้ใน MetaTrader 4 กันนะครับ ตัวบ่งชี้นี้จะช่วยให้เราสามารถติดตามระดับราคาที่เราสนใจได้อย่างง่ายดาย

เมื่อระดับtrigLv ที่กำหนดในการตั้งค่า ถูกข้ามผ่านภายในdeviation ตัวบ่งชี้นี้จะส่งการแจ้งเตือนไปยังอุปกรณ์มือถือของเรา ถ้าหากเราตั้งค่าการแจ้งเตือนnotification ไว้เป็นเปิด และจะมีเสียงเตือนถ้าหากเราตั้งค่าการแจ้งเตือนalert ไว้เป็นเปิดเช่นกัน โดยระดับการทำงานtrigLv และขอบเขตของdeviation จะถูกเน้นด้วยเส้นขนาน ซึ่งสามารถตั้งค่าสไตล์ สี และความหนาได้ตามต้องการในการตั้งค่าของตัวบ่งชี้

เราสามารถเพิ่มตัวบ่งชี้แบบหลายอันที่มีระดับต่างๆ ลงในกราฟได้ และรับสัญญาณจากการตัดกันของระดับต่างๆ เหล่านี้

ระดับtrigLv จะทำงานเพียงครั้งเดียวต่อแท่งเทียนหนึ่งแท่ง และจะสามารถทำงานต่อได้อีกครั้งหลังจากเปิดแท่งเทียนถัดไป เพื่อป้องกันการกระตุ้นที่เกิดขึ้นบ่อยเกินไปในแต่ละทิก

ตัวบ่งชี้ระดับ

//+------------------------------------------------------------------+
//|                                               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; // ใช้เสียงเตือน
input bool notification = true; // ใช้การแจ้งเตือน
input double trigLv = 0.0; // ระดับการทำงาน
input int deviation = 30; // การเบี่ยงเบนจาก trigLv ในจุด
input int lineWidth = 1; // ความหนาของเส้น
input ENUM_LINE_STYLE lineStyle = STYLE_SOLID; // สไตล์เส้น
input color lineColor = clrMediumSpringGreen; // สีของเส้น
input color inactivityColor = clrLightGray; // สีขณะไม่มีการทำงาน

CChartObjectHLine lv, dvH, dvL; 

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

//+------------------------------------------------------------------+
//| ฟังก์ชันเริ่มต้นตัวบ่งชี้                         |
//+------------------------------------------------------------------+
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("Level Indicator. Level ", lv.Price(0), " is inactive!");
  if (trigLv == 0.0)
    Alert("Level Indicator. Set parameter \"trigLv\" to the desired value!");
  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[0], deviation * SymbolInfoDouble(NULL, SYMBOL_POINT))) { 
    if (time_ != time[0])
      time_ = time[0];
    else
      return rates_total;
    if (!triggered) {
      if (alert)
        Alert("Level Indicator. Level ", NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " triggered!");
      if (notification)
        SendNotification("Level Indicator. Level " + (string)NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)) + " triggered!");
    }
    triggered = true;
  }
  else
    triggered = false;
    
  return(rates_total);
}
//+------------------------------------------------------------------+

    โพสต์ที่เกี่ยวข้อง

    ความคิดเห็น (0)