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

การตรวจจับการเริ่มต้นของบาร์ใหม่ใน MetaTrader 5 สำหรับเทรดเดอร์

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

สำหรับ ระบบเทรด (EA) เมื่อมีการส่งคำเสนอราคาครั้งใหม่เข้ามา MetaTrader จะเรียกใช้ฟังก์ชันจัดการเหตุการณ์ OnTick() โดยอัตโนมัติ แต่ไม่มีฟังก์ชันจัดการเหตุการณ์เริ่มต้นสำหรับบาร์ใหม่ (เทียนใหม่) โดยตรง

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

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

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

            // ทำอะไรบางอย่างไม่ว่าจะอยู่ในเงื่อนไขใด ...
         }
         else
         {
            // ทำอะไรบางอย่างอื่น ...
         };

      // ทำอย่างอื่น ...
   };

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

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

โปรดทราบว่าโค้ดทั้งหมดที่เผยแพร่ใน CodeBase ขณะนี้มีให้ในแท็บ "Public Projects" ของ MetaEditor ภายใต้ชื่อ "FMIC".

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

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