หน้าหลัก > บล็อก > OnTick กับ OnTimer ใน MQL5 | เลือกใช้อย่างไรในการออกแบบ EA

MQL5การพัฒนา EAMT5

OnTick กับ OnTimer ใน MQL5 | เลือกใช้อย่างไรในการออกแบบ EA

เผยแพร่: 2026-10-29เวลาอ่าน: ประมาณ 1 นาที
⏱ บทความนี้สะท้อนข้อมูล ณ วันที่เผยแพร่ ตัวเลขผลงาน EA (PF, DD, ผลตอบแทนต่อปี) เปลี่ยนแปลงตามการเทรดจริงและการตรวจสอบซ้ำ — ตรวจสอบล่าสุดได้ที่หน้า EA ดูผลงานล่าสุดของ EA →

สรุปก่อน: ตัดสินใจเมื่อมีแท่งเทียนใหม่ และงานที่ผูกกับเวลาให้ใช้ OnTimer

ขอสรุปผลก่อนเลย หาก EA ตัดสินใจซื้อขายจากกรอบเวลาที่ยาวอย่าง H1 หรือ H4 การตัดสินใจเพียงแค่ที่ "ติ๊กแรกของแท่งเทียนใหม่" ก็เพียงพอแล้ว การคำนวณเดิมซ้ำทุกครั้งที่มีติ๊กเข้ามาทำให้เปลืองซีพียูเฉย ๆ โดยที่ผลการตัดสินใจไม่เปลี่ยน ในทางกลับกัน งานที่ต้องการให้ทำงานแม้ไม่มีติ๊กเข้ามา เช่น บันทึกสถานะช่วงสุดสัปดาห์ หรือจัดการออเดอร์ตามเวลาที่กำหนด ให้ใช้ OnTimer

อย่างไรก็ตาม ว่าแบบไหนถูกต้องขึ้นอยู่กับกลยุทธ์ บทความนี้จะอธิบายความต่างของทั้งสองกลไก และประเด็นที่ผู้เลือก EA ตรวจสอบได้เอง

เปรียบเทียบโบรกเกอร์แนะนำ →

🎁 ดาวน์โหลด EA ฟรี

📧 คอร์สอีเมลฟรี (8 ฉบับ) + แพ็กอินดิเคเตอร์ MT5 13 ตัว เฉพาะสมาชิก

ทันทีที่ลงทะเบียน คุณจะได้รับลิงก์ดาวน์โหลดแพ็กเฉพาะสมาชิกที่รวมอินดิเคเตอร์ MT5 ทั้ง 13 ตัวของเรา: ไฟล์ที่คอมไพล์แล้ว (.ex5) ซอร์สโค้ด และคู่มือการติดตั้ง จากนั้นจะได้รับอีเมล 8 ฉบับเกี่ยวกับพื้นฐานการเทรดอัตโนมัติ การอ่านผลแบ็กเทสต์อย่างถูกต้อง และการเลือกโบรกเกอร์ (วันละฉบับใน 5 วันแรก แล้วในวันที่ 7, 14 และ 30 หลังลงทะเบียน) และยังได้รับแจ้งก่อนการขึ้นราคาแต่ละครั้งของเวอร์ชันที่ขายใน MQL5 Market (ราคาเปิดตัวที่ปรับขึ้นเป็นขั้นตามยอดขาย) EA ในเว็บไซต์นี้ใช้ฟรีเมื่อมีบัญชีจริงกับโบรกเกอร์พันธมิตร

* ปกป้องความเป็นส่วนตัวอย่างเคร่งครัด คุณสามารถยกเลิกการสมัครได้ตลอดเวลา

กลไก: ขับเคลื่อนด้วยติ๊ก และขับเคลื่อนด้วยเวลา

OnTick (ขับเคลื่อนด้วยติ๊ก)

OnTick จะถูกเรียกทุกครั้งที่มีราคาใหม่ (ติ๊ก) เข้ามาในสัญลักษณ์ที่ EA ทำงานอยู่ ช่วงที่ราคาผันผวนแรงอาจถูกเรียกหลายครั้งต่อวินาที ส่วนช่วงสุดสัปดาห์ที่ตลาดหยุดนิ่งจะไม่ถูกเรียกเลยสักครั้ง

มีข้อกำหนดที่ควรรู้ ติ๊กที่เข้ามาในระหว่างที่การประมวลผลของ OnTick ครั้งก่อนยังไม่เสร็จ จะไม่ถูกเข้าคิวรอ แต่จะถูกข้ามไป นั่นหมายความว่า EA ที่ประมวลผลหนักในแต่ละรอบจะพลาดติ๊กในช่วงที่ราคาเคลื่อนไหวรุนแรง

OnTimer (ขับเคลื่อนด้วยเวลา)

OnTimer จะถูกเรียกตามช่วงเวลาที่กำหนดด้วย EventSetTimer() ทำงานโดยไม่เกี่ยวกับการเคลื่อนไหวของราคา จึงถูกเรียกแม้ในช่วงที่ตลาดปิด ตัวจับเวลามีได้เพียงตัวเดียวต่อ EA หนึ่งตัว และหากการประมวลผลค้างอยู่ก็จะถูกข้ามเช่นเดียวกัน นอกจากนี้ไม่มีการรับประกันว่าจะถูกเรียกตรงตามช่วงเวลาที่ระบุเป๊ะ ๆ

หัวข้อOnTickOnTimer
สิ่งที่กระตุ้นให้ถูกเรียกราคามีการอัปเดตครบช่วงเวลาที่กำหนด
ขณะตลาดปิดไม่ถูกเรียกถูกเรียก
จำนวนครั้งที่ถูกเรียกยิ่งตลาดผันผวนยิ่งมากค่อนข้างคงที่
งานที่เหมาะตัดสินใจเข้าและออกออเดอร์การรวบรวมข้อมูลเป็นระยะ และงานที่กำหนดด้วยเวลา
ข้อควรระวังหลักประมวลผลหนักจะพลาดติ๊กทำงานแม้ไม่มีราคาใหม่เข้ามา

วิธีเขียนกลยุทธ์ความถี่ต่ำไม่ให้เปลืองซีพียู

หากเป็นกลยุทธ์ที่ตัดสินใจบนกรอบเวลา H4 ต่อให้ OnTick ถูกเรียกหลายพันครั้งในช่วง 4 ชั่วโมงที่แท่งเทียนแท่งหนึ่งยังดำเนินอยู่ ค่าของแท่งที่ปิดแล้วซึ่งใช้ตัดสินใจก็ไม่เปลี่ยน เราจึงใช้รูปแบบพื้นฐานที่ให้การประมวลผลหนักผ่านได้ "เฉพาะตอนที่แท่งเทียนเปลี่ยน" ดังนี้

datetime g_lastBar = 0;

void OnTick()
{
   datetime cur = iTime(_Symbol, PERIOD_H4, 0);
   if(cur == g_lastBar) return;   // ระหว่างแท่งเดิมไม่ต้องทำอะไร
   g_lastBar = cur;
   // ตรงนี้ใช้แท่งที่ปิดแล้ว (shift 1) ตัดสินใจ
}

อีกเรื่องที่สำคัญคือ แฮนเดิลของอินดิเคเตอร์ควรสร้างครั้งเดียวใน OnInit ไม่ควรสร้างใหม่ทุกครั้งใน OnTick และหากใช้ OnTimer ให้เรียก EventKillTimer() ใน OnDeinit เพื่อหยุดตัวจับเวลา

เมื่อใส่ EA ในหลายกราฟบน VPS ความต่างเหล่านี้จะปรากฏเป็นภาระของซีพียู แนวคิดการเลือก VPS สรุปไว้ที่ ข้อมูล VPS

สิ่งที่ผู้เลือก EA ตรวจสอบได้เอง

แม้ไม่เห็นโค้ดภายใน ก็ยังตรวจสอบประเด็นต่อไปนี้ได้ในระดับหนึ่ง

  • คำอธิบายและพารามิเตอร์: มีตัวเลือกอย่าง "ตัดสินใจเฉพาะเมื่อมีแท่งเทียนใหม่" หรือไม่
  • การใช้ซีพียูของ VPS: ถ้าถอด EA ตัวหนึ่งออกแล้วภาระลดลงชัดเจน อาจเป็นไปได้ว่า EA ตัวนั้นประมวลผลหนักทุกติ๊ก
  • ล็อกของ Expert: มีข้อความเดิมซ้ำ ๆ เรียงกันทุกติ๊กหรือไม่
  • ผลจากเทสเตอร์: ถ้าเป็น EA ที่ตัดสินใจจากราคาเปิดของแท่ง ผลระหว่าง "ราคาเปิดเท่านั้น" กับ "ทุกติ๊ก" ไม่ควรต่างกันมาก หากต่างกันมาก แสดงว่า EA ตอบสนองต่อความเคลื่อนไหวระหว่างแท่งด้วย

พื้นฐานการติดตั้งและตั้งค่า EA ดูได้ที่ วิธีตั้งค่า EA

ข้อจำกัดและข้อควรระวัง

ขอเขียนด้านที่ไม่เป็นผลดีไว้ด้วย

  • ไม่ได้ดูความเสี่ยงระหว่างแท่ง: หากจำกัดการตัดสินใจไว้ที่แท่งใหม่ จะไม่ตอบสนองต่อความผันผวนฉับพลันระหว่างแท่ง การตัดขาดทุนต้องออกแบบให้ป้องกันด้วยคำสั่งหยุด (stop) ที่แนบกับออเดอร์ มิฉะนั้นอาจยอมรับความเสียหายที่ไม่คาดคิดได้
  • ความล่าช้าของแท่งใหม่: แม้แท่งใหม่เกิดขึ้นแล้ว การประมวลผลก็ไม่ทำงานจนกว่าติ๊กแรกของแท่งนั้นจะเข้ามา ในสัญลักษณ์หรือช่วงเวลาที่ราคาเคลื่อนไหวน้อย การตัดสินใจอาจช้ากว่าจุดเริ่มต้นของแท่ง
  • OnTimer มักต่างระหว่างเทสเตอร์กับการทำงานจริง: ในเทสเตอร์ ตัวจับเวลาถูกเรียกตามเวลาจำลอง จึงไม่แน่ว่าจะมีช่วงห่างเท่ากับบัญชีจริง
  • ประมวลผลเบาก็ไม่ได้ทำให้ผลงานดีขึ้น: การลดภาระซีพียูไม่ได้ทำให้ชนะง่ายขึ้น คุณภาพของกลยุทธ์เป็นอีกเรื่องหนึ่ง

กับ EA กรอบ H4 ที่เทรดไม่บ่อย เช่น ETHEREUM EA ความต่างด้านการออกแบบเหล่านี้จะยิ่งมองเห็นได้ยาก อย่างไรก็ตาม สิ่งที่ตรวจสอบจากภายนอกได้นั้นมีขอบเขตจำกัด สิ่งที่เรายืนยันได้อย่างหนักแน่นมีเพียงโค้ดที่เราเขียนเอง

สรุป

  • OnTick ถูกเรียกเมื่อมีราคาเข้ามา ส่วน OnTimer ถูกเรียกตามช่วงเวลาที่กำหนด
  • อีเวนต์ที่เข้ามาระหว่างประมวลผลจะไม่เข้าคิว แต่ถูกข้ามไป การประมวลผลหนักจึงนำไปสู่การพลาดอีเวนต์
  • กลยุทธ์ความถี่ต่ำที่ตัดสินใจเฉพาะ "เมื่อมีแท่งเทียนใหม่" จะไม่เปลืองซีพียู
  • งานที่ต้องการให้ทำงานแม้ช่วงที่ไม่มีติ๊ก ให้ใช้ OnTimer
  • การรับมือความเสี่ยงระหว่างแท่งทำด้วยคำสั่งหยุด การประมวลผลเบาไม่ได้ทำให้ผลงานดีขึ้น
  • เคล็ดลับอื่น ๆ สรุปไว้ที่ ความรู้เกี่ยวกับ EA และ MT5

📧 คอร์สอีเมลฟรี (8 ฉบับ) + แพ็กอินดิเคเตอร์ MT5 13 ตัว เฉพาะสมาชิก

ทันทีที่ลงทะเบียน คุณจะได้รับลิงก์ดาวน์โหลดแพ็กเฉพาะสมาชิกที่รวมอินดิเคเตอร์ MT5 ทั้ง 13 ตัวของเรา: ไฟล์ที่คอมไพล์แล้ว (.ex5) ซอร์สโค้ด และคู่มือการติดตั้ง จากนั้นจะได้รับอีเมล 8 ฉบับเกี่ยวกับพื้นฐานการเทรดอัตโนมัติ การอ่านผลแบ็กเทสต์อย่างถูกต้อง และการเลือกโบรกเกอร์ (วันละฉบับใน 5 วันแรก แล้วในวันที่ 7, 14 และ 30 หลังลงทะเบียน) และยังได้รับแจ้งก่อนการขึ้นราคาแต่ละครั้งของเวอร์ชันที่ขายใน MQL5 Market (ราคาเปิดตัวที่ปรับขึ้นเป็นขั้นตามยอดขาย) EA ในเว็บไซต์นี้ใช้ฟรีเมื่อมีบัญชีจริงกับโบรกเกอร์พันธมิตร

* ปกป้องความเป็นส่วนตัวอย่างเคร่งครัด คุณสามารถยกเลิกการสมัครได้ตลอดเวลา

มีคำถามเกี่ยวกับ EA หรือ Forex ไหม?

คุณสามารถตั้งคำถามได้ที่ฟอรัมเทรดของ Nattzy (สมัครฟรี) ไม่จำเป็นต้องเกี่ยวกับบทความนี้ก็ได้ เช่น การตั้งค่า EA หรือการเลือกโบรกเกอร์

ถามที่ Nattzy ↗

ความคิดเห็นและคำถาม