All posts

Expert Advisor (EA) คืออะไร? ทำงานอย่างไรบน MT4/MT5

ทำความเข้าใจ Expert Advisor ตั้งแต่ event loop, signal, order management, risk control ไปจนถึงความแตกต่างระหว่าง backtest และการใช้งานจริง

Expert Advisor หรือ EA คือโปรแกรมที่ทำงานอยู่ภายใน MetaTrader เพื่ออ่านข้อมูลตลาด ประมวลผลเงื่อนไข และจัดการคำสั่งตามกฎที่เขียนไว้ คำว่า “อัตโนมัติ” จึงหมายถึงการทำตามกฎได้สม่ำเสมอ ไม่ได้หมายถึงการตัดสินใจเองเหมือนคน

สรุปสาระสำคัญ

  • EA ไม่ได้มีแค่แบบเปิดออเดอร์เอง ยังมีแบบช่วยจัดการคำสั่งและแบบแจ้งเตือนอย่างเดียว
  • โครงสร้างที่ดูแลง่ายควรแยก Signal ออกจาก Execution
  • ชั้นตรวจความเสี่ยงต้องอยู่ก่อนการส่งคำสั่ง ไม่ใช่หลังจากนั้น
  • EA ทำตามกฎได้สม่ำเสมอ แต่กฎอาจไม่เหมาะกับทุกสภาพตลาด
  • ผลทดสอบย้อนหลังกับการใช้งานจริงเป็นคนละสิ่ง ต้องมี forward test ประกอบ

EA ไม่ได้แปลว่าเปิดออเดอร์อัตโนมัติอย่างเดียว

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

  • วิเคราะห์และแจ้งเตือนอย่างเดียว — ไม่แตะคำสั่งเลย แต่บอกว่าเงื่อนไขที่เฝ้าอยู่เกิดขึ้นแล้ว
  • ช่วยจัดการคำสั่ง — คำนวณขนาด ตั้ง Stop Loss และ Take Profit ทำ Trailing หรือปิดทั้งชุดตามเงื่อนไข
  • กึ่งอัตโนมัติ — คนเป็นคนกดเปิด แต่ระบบดูแลการจัดการหลังจากนั้นทั้งหมด
  • อัตโนมัติเต็มรูปแบบ — ระบบตัดสินใจเข้าและออกเองตามกฎที่กำหนด
  • ส่งข้อมูลออกภายนอก — ส่งสถานะไป Telegram หรือ API เพื่อเฝ้าดูจากที่อื่น

โครงสร้างการทำงานภายใน

ใน MQL ระบบทำงานผ่านเหตุการณ์ที่แพลตฟอร์มเรียกให้ เช่น OnInit ตอนเริ่มทำงาน OnTick ทุกครั้งที่ราคาขยับ OnTimer ตามรอบเวลาที่ตั้งไว้ และ OnTradeTransaction เมื่อมีความเปลี่ยนแปลงเกี่ยวกับคำสั่ง

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

แผนภาพอธิบาย: Expert Advisor (EA) คืออะไร? ทำงานอย่างไรบน MT4/MT5

ทำไม Signal กับ Execution ควรแยกกัน

เมื่อทุกอย่างเขียนรวมกันเป็นก้อนเดียว การแก้เงื่อนไขเข้าออกจะไปกระทบส่วนที่ส่งคำสั่งเสมอ และการทดสอบก็แยกไม่ออกว่าปัญหามาจากสัญญาณผิดหรือการส่งคำสั่งผิด

เมื่อแยกชั้นแล้ว จะได้ประโยชน์ที่ชัดเจนสามอย่าง

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

EA กับความเสี่ยง

EA ทำตามกฎได้สม่ำเสมอกว่าคน แต่ความสม่ำเสมอนั้นเป็นดาบสองคม ถ้ากฎไม่เหมาะกับสภาพตลาดที่กำลังเกิดขึ้น ระบบก็จะทำสิ่งที่ไม่เหมาะสมนั้นซ้ำ ๆ โดยไม่หยุดเอง

ตัวอย่างที่เห็นบ่อยคือระบบแบบ Grid ที่ทำงานได้ดีในตลาดแกว่ง แต่สะสมความเสี่ยงขึ้นเรื่อย ๆ เมื่อตลาดเกิดแนวโน้มยาว ดูรายละเอียดได้ในบทความ Grid Trading

ขอบเขตที่ควรมีในทุกระบบ ไม่ว่ากลยุทธ์จะเป็นแบบไหน

  • เพดานจำนวนคำสั่งที่เปิดพร้อมกัน — ทำให้ความเสี่ยงสูงสุดเป็นตัวเลขที่รู้ล่วงหน้า
  • เพดานขนาดรวม — คุมภาพรวมของพอร์ต ไม่ใช่ดูทีละคำสั่ง
  • เพดาน Drawdown — หยุดเปิดใหม่เมื่อ Equity ลดจากจุดสูงสุดเกินเกณฑ์
  • เพดานขาดทุนต่อวัน — จำกัดความเสียหายของวันที่แย่ที่สุด
  • ตัวกรอง Spread และช่วงเวลา — ลดการเปิดคำสั่งในสภาพที่ต้นทุนสูงผิดปกติ
  • ปุ่มหยุดฉุกเฉิน — สั่งหยุดได้ทันทีโดยไม่ต้องถอด EA ออกจากกราฟ

Backtest ไม่เท่ากับการใช้งานจริง

ผลการทดสอบย้อนหลังขึ้นกับสมมติฐานหลายอย่างที่มักถูกมองข้าม และสมมติฐานที่ผ่อนปรนเกินไปทำให้ผลออกมาดูดีเกินจริง

กราฟเปรียบเทียบต้นทุนสะสมของคำสั่ง 500 ครั้ง ภายใต้สมมติฐานหลวมกับสมมติฐานสมจริง
  • คุณภาพข้อมูล — ใช้ราคาทุก tick หรือประมาณจากแท่งเทียน ผลต่างกันมากในระบบที่ไวต่อราคา
  • โมเดล Spread — ใช้ค่าคงที่หรือค่าจริงที่เปลี่ยนตามเวลา
  • ค่าคอมมิชชันและ Swap — ถ้าไม่ใส่ ผลจะดีกว่าความเป็นจริงทุกครั้ง
  • Slippage — การสมมติว่าได้ราคาที่ต้องการเสมอเป็นสมมติฐานที่ผ่อนปรนมาก
  • การเลือกพารามิเตอร์ — ถ้าปรับจนพอดีกับข้อมูลชุดที่ทดสอบ ผลจะสวยแต่ใช้จริงไม่ได้

ก่อนใช้งานจริงจึงควรมี forward test บนบัญชีทดลองในสภาพตลาดปัจจุบัน และตรวจ log เพื่อดูว่าพฤติกรรมจริงตรงกับสมมติฐานหรือไม่

สรุป

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

Discussion