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

การตรวจจับการเริ่มต้นของแท่งเทียนใหม่ใน MetaTrader 4

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

สำหรับ ที่ปรึกษาผู้เชี่ยวชาญ (Expert Advisor หรือ EA) เมื่อมีข้อมูลใหม่เข้ามา MetaTrader จะเรียกใช้ฟังก์ชันจัดการเหตุการณ์ OnTick() โดยอัตโนมัติ แต่ไม่มีฟังก์ชันจัดการเหตุการณ์เริ่มต้นแท่งเทียนใหม่โดยตรง

เพื่อที่จะตรวจจับการเริ่มต้นแท่งเทียนใหม่ เราต้องติดตามเวลาการเปิดของแท่งเทียนล่าสุด หากเวลานั้นเปลี่ยนไป แสดงว่ามีการเริ่มต้นแท่งเทียนใหม่เกิดขึ้น และเราสามารถตอบสนองต่อเหตุการณ์นี้ได้ โค้ดตัวอย่างด้านล่างนี้สามารถใช้ได้ทั้งใน MQL4 และ MQL5 แสดงให้เห็นวิธีการหนึ่งในการตรวจจับการเริ่มต้นแท่งเทียนใหม่:

// ฟังก์ชันจัดการเหตุการณ์ของแท่งเทียน
   void OnTick()
   {
      // ตรวจสอบแท่งเทียนใหม่ (ใช้ได้ทั้ง MQL4 และ MQL5)
         static datetime dtBarCurrent  = WRONG_VALUE;
                datetime dtBarPrevious = dtBarCurrent;
                         dtBarCurrent  = iTime( _Symbol, _Period, 0 );
                bool     bNewBarEvent  = ( dtBarCurrent != dtBarPrevious );

      // ตอบสนองต่อเหตุการณ์แท่งเทียนใหม่
         if( bNewBarEvent )
         {
            // ตรวจสอบว่ามันคือแท่งเทียนแรกที่ได้รับหรือไม่
               if( dtBarPrevious == WRONG_VALUE )
               {
                  // ทำบางอย่างในแท่งเทียนแรกหรือตรงกลางของแท่งเทียน ...
               }
               else
               {
                  // ทำบางอย่างเมื่อแท่งเทียนปกติเริ่มต้น ...
               };

      // ทำบางอย่างไม่ว่าเงื่อนไขข้างต้นจะเป็นอย่างไร ...
     }
      else
     {
            // ทำบางอย่างอื่น ...
         };

      // ทำสิ่งอื่น ๆ ...
   };

ในโค้ดข้างต้น ตัวแปร static จะเก็บเวลาการเปิดของแท่งเทียน แม้ว่าเราจะกลับมาจากฟังก์ชัน OnTick() ก็ตาม ซึ่งแตกต่างจากตัวแปรปกติที่เมื่อออกจากฟังก์ชันจะไม่บันทึกข้อมูลไว้ ตัวแปรนี้ช่วยให้เราตรวจจับการเปลี่ยนแปลงในเวลาการเปิดแท่งเทียนปัจจุบันได้

นอกจากนี้ยังต้องสังเกตว่า เมื่อ EA ถูกวางลงบนกราฟเป็นครั้งแรก โค้ดข้างต้นจะตอบสนองเหมือนกับว่าแท่งเทียนเพิ่งเปิดอยู่ ซึ่งเงื่อนไขนี้ต้องมีการจัดการเป็นพิเศษหากต้องการให้สถานการณ์เป็นไปในรูปแบบที่แตกต่างออกไป

อย่าลืมว่า โค้ดทั้งหมดของฉันใน CodeBase ขณะนี้สามารถเข้าถึงได้ในแท็บ "Public Projects" ของ MetaEditor โดยใช้ชื่อ "FMIC"

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

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