หน้าแรก การเทรดด้วยระบบ โพสต์

โค้ดง่าย ๆ สำหรับตรวจจับ New Bar หรือ New Candle ใน MetaTrader 5

ไฟล์แนบ
49018.zip (977 bytes, ดาวน์โหลด 0 ครั้ง)

วันนี้เรามาพูดถึงโค้ดที่ช่วยให้เราสามารถ ตรวจจับ New Bar หรือ New Candle ได้อย่างง่ายดายกันนะครับ

หลักการทำงานของโค้ดนี้ค่อนข้างเรียบง่าย โดยโค้ดจะเก็บ เวลาของ Bar/Candle ก่อนหน้า และทำการเพิ่ม 60 วินาที (ซึ่งเท่ากับ 1 นาที) เพื่อหาค่า เวลาปิดของ Bar/Candle ปัจจุบัน ครับ

เมื่อไหร่ก็ตามที่ เวลาปัจจุบัน = เวลาปิดของ Bar/Candle ปัจจุบัน นั่นหมายความว่า Bar ใหม่ได้ถูกสร้างขึ้นแล้ว

ในโค้ดนี้ เราจะใช้ตัวแปร NewBarReceived ซึ่งเป็นตัวแปรประเภท bool เพื่อหลีกเลี่ยงการเรียกใช้โค้ดนี้หลายครั้ง คือตัวโค้ดนี้จะถูกเรียกใช้เพียงครั้งเดียวต่อ Bar/Candle เท่านั้น สำหรับ Comment(); และ PlaySound("ok.wav"); เราใช้เพื่อตรวจสอบความถูกต้องของโค้ด หากไม่ต้องการก็สามารถลบออกได้

และเมื่อเวลาปัจจุบันมากกว่าเวลาปิดของ Candle ปัจจุบัน ตัวแปร NewBarReceived จะถูกรีเซ็ตกลับเป็น false เพื่อตรวจสอบการเปิด Bar ถัดไป (ดูที่คอมเมนต์ในโค้ดได้เลย)

//+------------------------------------------------------------------+
//|                                               New Bar Detect.mq5 |
//|                                                  by H A T Lakmal |
//|                                           https://t.me/Lakmal846 |
//+------------------------------------------------------------------+

bool NewBarReceived = false; // Flag สำหรับควบคุม

//+------------------------------------------------------------------+
//| ฟังก์ชันเริ่มต้น Expert                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- สร้าง Timer
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| ฟังก์ชันยุติ Expert                                   |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- ทำลาย Timer
   EventKillTimer();

  }


//+------------------------------------------------------------------+
//| ฟังก์ชัน Tick Expert                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   datetime TimePreviousBar = iTime(_Symbol,PERIOD_M1,1);
   datetime TimeCurrentClose = TimePreviousBar + 60; // เวลาปิดของ Bar ปัจจุบัน
   datetime Time_Current = TimeCurrent();

   if(Time_Current == TimeCurrentClose && NewBarReceived == false)
     {
      PlaySound("ok.wav");   // เพื่อตรวจสอบการทำงาน
      NewBarReceived = true; // อัพเดท Flag เพื่อหลีกเลี่ยงการเรียกใช้หลายครั้ง

      // โค้ดของคุณที่นี่ ----- (ทำอะไรบางอย่าง)

     }
   else
      if(Time_Current > TimeCurrentClose)
        {
         NewBarReceived = false; // รีเซ็ต Flag สำหรับเปิด Bar ถัดไป

         // โค้ดของคุณที่นี่ ----- (ทำอะไรบางอย่าง)

        }

   Comment("
" +  "
" +  "เวลาของ Bar ปัจจุบัน -: " + TimeToString(TimePreviousBar,TIME_DATE|TIME_MINUTES|TIME_SECONDS) +
           "
" + "เวลาปิดปัจจุบัน -: " +TimeToString(TimeCurrentClose,TIME_DATE|TIME_MINUTES|TIME_SECONDS) +
           "
" + "เวลาปัจจุบัน -: " + TimeToString(Time_Current,TIME_DATE|TIME_MINUTES|TIME_SECONDS) + 
           "
" +"
" + "Bar ใหม่ที่ได้รับ -: " + NewBarReceived); 
           // เพื่อตรวจสอบการคำนวณ

  }
//+------------------------------------------------------------------+
//| ฟังก์ชัน Timer                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---

  }
//+------------------------------------------------------------------+
//| ฟังก์ชัน Trade                                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
//---

  }
//+------------------------------------------------------------------+
//| ฟังก์ชัน ChartEvent                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---

  }
//+------------------------------------------------------------------+

 

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

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