พื้นฐาน MQL5 EA — หุ่นยนต์ MetaTrader 5 ทำงานจริงอย่างไร

ตรวจสอบล่าสุด: · เนื้อหาระยะยาวที่ยังคงทันสมัย
คำเตือนความเสี่ยง · YMYL บทความนี้จัดทำขึ้นเพื่อการศึกษาเท่านั้น และไม่ถือเป็นคำแนะนำการลงทุน การซื้อขายในตลาด Forex มีความเสี่ยงสูงที่อาจสูญเสียเงินทุน — ESMA รายงานว่าบัญชีรายย่อย 74–89% ขาดทุน

Expert Advisor ที่เขียนด้วย MQL5 คือโปรแกรมขนาดเล็กที่อยู่บนกราฟภายใน MetaTrader 5 และในทุก tick มันจะตรวจสอบว่าตลาดเพิ่งสร้างเงื่อนไขที่คุณกำหนดไว้เป็นจุดเข้าหรือไม่ หากใช่ EA จะส่งคำสั่งด้วยตัวเอง โดยไม่ขออนุญาต บทความนี้อธิบายว่า EA ถูกสร้างขึ้นอย่างไรจากภายใน มันสื่อสารกับแพลตฟอร์มและกับโบรกเกอร์อย่างไร และเมื่อใดที่การรันมันจึงสมเหตุสมผลจริง นี่ไม่ใช่บทเรียนสอนเขียนโค้ด

Expert Advisor ใน MQL5 คืออะไรกันแน่

MQL5 เป็นภาษาที่ใกล้เคียงกับ C++ ซึ่งเขียนขึ้นมาเฉพาะสำหรับแพลตฟอร์ม MetaTrader 5 Expert Advisor คือโปรแกรมเดี่ยวในภาษานี้ ที่คอมไพล์เป็นไฟล์ไบนารี .ex5 และแนบเข้ากับกราฟในแบบเดียวกับที่อินดิเคเตอร์ทำ ความแตกต่างอยู่ที่สิทธิ์การทำงาน อินดิเคเตอร์เพียงวาดเส้นบนกราฟ ในขณะที่ EA ได้รับอนุญาตให้ส่งคำสั่งจริงเข้าสู่บัญชีเทรดของคุณ บรรทัดเดียวในแบบจำลองสิทธิ์ของแพลตฟอร์มนี้คือเส้นแบ่งระหว่างการแสดงผลเฉย ๆ กับการทำงานอัตโนมัติด้วยตัวเอง

แล้ว "EA" ต่างจาก "หุ่นยนต์เทรด" ทั่วไปอย่างไร ต่างกันเพียงระบบนิเวศเท่านั้น หุ่นยนต์ที่เขียนด้วย Python ก็เป็นหุ่นยนต์เช่นกัน เพียงแต่มันอยู่นอกเทอร์มินัล โดยมักเชื่อมต่อกับโบรกเกอร์ผ่าน REST API หรือ FIX ส่วน EA ตามนิยามแล้วอาศัยอยู่ภายใน MT5 สำหรับมุมมองการลงมือทดลองในเชิงปฏิบัติ ดูได้ที่หมวดการฝึกฝนและลงมือทำ ของเรา และสำหรับภาพรวมที่กว้างขึ้นของการเทรดเชิงอัลกอริทึม โปรดดูหมวดแนวคิดพื้นฐาน

EA สื่อสารกับแพลตฟอร์มอย่างไร — วงจร OnInit, OnTick, OnDeinit

Expert Advisor ทุกตัวมีจังหวะชีวิตที่กำหนดโดยสามเหตุการณ์ซึ่งแพลตฟอร์มเรียกใช้แทนมัน OnInit ทำงานเพียงครั้งเดียวเท่านั้น เมื่อ EA ถูกแนบเข้ากับกราฟหรือเมื่อเทอร์มินัลเริ่มทำงานใหม่ ในจังหวะนี้ EA จะอ่านพารามิเตอร์ที่ป้อนเข้ามา เปิด handle ไปยังอินดิเคเตอร์ที่มันใช้พึ่งพา และส่งสัญญาณว่าพร้อมรับ tick แล้ว

เหตุการณ์ที่สองคือสิ่งที่สำคัญที่สุด OnTick ถูกเรียกใช้ทุกครั้งที่มีราคาใหม่เข้ามาจากโบรกเกอร์สำหรับสัญลักษณ์ที่ EA ทำงานอยู่ บนคู่เงินที่มีสภาพคล่องสูงอย่าง EUR/USD ในช่วงเซสชันลอนดอน เหตุการณ์นี้อาจเกิดขึ้นได้หลายสิบครั้งต่อวินาที ภายใน OnTick นี้เอง EA จะตัดสินใจว่าราคาปัจจุบันตรงตามเงื่อนไขเข้าหรือไม่ จุดตัดขาดทุน (Stop Loss) ควรถูกเลื่อนหรือไม่ หรือควรปิดสถานะที่เปิดอยู่หรือไม่ ตรรกะทั้งหมดของกลยุทธ์อาศัยอยู่ในฟังก์ชันเดียวนี้

เหตุการณ์ที่สามคือ OnDeinit ถูกเรียกใช้เมื่อ EA ถูกถอดออกจากกราฟ เมื่อมีการเปลี่ยนสัญลักษณ์ หรือเมื่อ MT5 ปิดตัวลง หน้าที่ของมันคือการเก็บกวาด คือการคืน handle ของอินดิเคเตอร์ การบันทึกสถานะให้คงอยู่ และการปิดไฟล์ log ผมตั้งใจข้ามตัวจัดการเสริมอย่าง OnTimer และ OnTrade ไป เพราะมันไม่เปลี่ยนหลักการ EA ทุกตัวโดยแก่นแท้แล้วคือโปรแกรมจัดการเหตุการณ์ที่ตอบสนองต่อสิ่งที่ MT5 ส่งให้

EA ส่งคำสั่งอย่างไร — คลาส CTrade

สิ่งที่สองที่ควรเข้าใจโดยไม่ต้องลงลึกถึงไวยากรณ์คือ EA สื่อสารกับโบรกเกอร์อย่างไร MT5 ไม่ยอมให้คุณ "ส่งคำสั่งซื้อ" ได้ง่าย ๆ แบบที่มนุษย์คลิกในหน้าจอ ทุกคำสั่งถูกส่งออกไปในรูปของคำขอที่มีโครงสร้าง คือ MqlTradeRequest และเซิร์ฟเวอร์จะตอบกลับมาด้วยผลลัพธ์ที่มีรหัสบอกว่าคำสั่งผ่านหรือไม่ หรือถูกปฏิเสธด้วยเหตุผลเช่น มาร์จิน (margin) ไม่เพียงพอ ระดับ stop ไม่ถูกต้อง หรือค่าเบี่ยงเบนเกินกำหนด

การเติมค่าโครงสร้างเหล่านี้ด้วยมือนั้นน่าเบื่อ MetaQuotes จึงแถมคลาสชื่อ CTrade มาในไลบรารีมาตรฐานของตน ซึ่งห่อหุ้มทุกอย่างไว้ในเมธอดที่สะดวกอย่าง Buy, Sell, PositionClose และ OrderModify กระทู้ในฟอรัมถกเถียงรายละเอียดปลีกย่อยกันไม่จบสิ้น ว่าควรใช้ Buy(volume, symbol) หรือเติมคำขอด้วยตัวเอง จะรับมือกับ requote อย่างไร จะตอบสนองต่อส่วนต่างราคาที่เกิดขึ้น (slippage) บนการทะลุแนวรวดเร็วอย่างไร สำหรับกลยุทธ์รายย่อยส่วนใหญ่ CTrade ก็เพียงพอเกินพอแล้ว

Strategy Tester หรือวิธีตรวจว่า EA ไม่ได้แค่ท่องจำอดีต

Strategy Tester ที่ติดตั้งมาในตัว MT5 เป็นเครื่องมือที่จริงจังกว่ารุ่นพี่ใน MT4 มาก มันป้อน tick ในอดีต (ที่สร้างขึ้นจากแท่งราคาหรือเป็น tick จริงจากเซิร์ฟเวอร์ของ MetaQuotes) ให้แก่ EA รันการประมวลผลหลายพันรอบบนชุดพารามิเตอร์ต่าง ๆ และสร้างรายงานพร้อมเส้นโค้งทุน การลดลงของเงินทุน (drawdown) และ profit factor

ปัญหาคือเครื่องมือเดียวกันที่ตั้งใจให้ตรวจสอบงานของคุณ กลับมีแนวโน้มกลายเป็นโรงงานผลิตภาพลวงตา การปรับพารามิเตอร์ให้เหมาะที่สุดทั่วทั้งประวัติข้อมูลมักให้เส้นโค้งที่เรียบราวกับเส้นด้าย และเส้นโค้งนั้นแทบทุกครั้งจะพังทลายเมื่อ EA เจอเงินจริง ปรากฏการณ์นี้มีชื่อเรียกว่า curve fitting และมันเป็นความแน่นอนทางคณิตศาสตร์ ไม่ใช่โชคร้าย วิธีรับมือคือการแบ่งข้อมูลเป็นช่วงสำหรับปรับค่า (in-sample) และช่วงสำหรับตรวจสอบ (out-of-sample) ที่คุณรัน EA โดยไม่ปรับพารามิเตอร์อีก และในอุดมคติให้ใช้ walk-forward analysis ทับลงไปอีกชั้น สำหรับวิธีการที่ลงมือทำได้จริง โปรดดูหมวดการบริหารความเสี่ยง

"กลยุทธ์ที่ทำกำไรได้บนข้อมูลในอดีต ไม่จำเป็นต้องทำกำไรได้ในอนาคต ข้อมูลในอดีตเป็นเพียงตัวอย่างเล็ก ๆ ของจักรวาลแห่งสภาวะตลาดที่เป็นไปได้ทั้งหมด และการปรับพารามิเตอร์ให้เข้ากับตัวอย่างนั้นก็เป็นอย่างที่ฟังดูทุกประการ คือการดัดให้พอดีกับตัวอย่าง" — Ernest P. Chan, 2013

เมื่อใด EA จึงช่วยได้จริง และเมื่อใดที่มันทำร้าย

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

EA ทำได้แย่ในทุกที่ที่ต้องใช้วิจารณญาณ การเทรดในจังหวะประกาศตัวเลข Non-Farm Payrolls การตัดสินว่าราคาที่กำลังเคลื่อนไหวอยู่เป็นการเปลี่ยนแนวโน้มที่แท้จริงหรือเป็นเพียงสัญญาณรบกวนชั่วคราว การตีความบริบทภูมิรัฐศาสตร์ สิ่งเหล่านี้ส่วนใหญ่ตัดสิทธิ์ EA ออกไป สถิติจากการสำรวจของฟอรัม MQL5 อิสระนั้นโหดร้าย คือ EA ส่วนใหญ่อย่างชัดเจนใน Marketplace แม้จะมีกราฟ backtest ที่ดูเงางาม กลับขาดทุนในการเทรดจริงภายในปีแรก นี่ไม่ใช่เจตนาไม่ดีของผู้ขาย เพราะ backtest ที่สวยงามนั้นทำได้ราคาถูก ส่วนความได้เปรียบที่แท้จริงนั้นหายาก

คุ้มหรือไม่ที่จะเขียน EA ของคุณเอง

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

เหตุผลที่สองคือเรื่องปฏิบัติ EA ทำงานตลอดยี่สิบสี่ชั่วโมง ห้าวันต่อสัปดาห์ แต่จะเป็นเช่นนั้นได้ก็ต่อเมื่อเครื่องที่มันอาศัยอยู่ก็ทำงานตลอดเช่นกัน คอมพิวเตอร์ตั้งโต๊ะที่บ้านซึ่งไฟฟ้าขึ้นอยู่กับสายเพียงเส้นเดียวนั้นไม่เพียงพอ ด้วยเหตุนี้ VPS จึงมีบทบาทแยกต่างหาก โดย EA ตัวเดียวกันอาจให้ผลลัพธ์ที่แตกต่างกันอย่างเห็นได้ชัด ขึ้นอยู่กับ latency ระหว่างเซิร์ฟเวอร์ของโบรกเกอร์กับเครื่องที่ EA ทำงานอยู่

ขั้นตอนถัดไป — สิ่งที่ควรทำในวันพรุ่งนี้

  1. ดาวน์โหลด MetaTrader 5 จากเว็บไซต์ของโบรกเกอร์ เปิดบัญชีทดลอง (demo account) แล้วไปที่แท็บ Strategy Tester โหลด EA ตัวอย่างที่ติดตั้งมาในตัว (Moving Average หรือ MACD Sample) บน EUR/USD H1 รันหนึ่งรอบ แล้วอ่านรายงานที่ได้อย่างละเอียดเพื่อดูว่าตัวชี้วัดพื้นฐาน คือเส้นโค้งทุน การลดลงของเงินทุน และ profit factor มีหน้าตาอย่างไรในทางปฏิบัติ
  2. เปิดเอกสารทางการของ MQL5 ที่ mql5.com/en/docs แล้วอ่านเพียงสามบท คือ OnInit, OnTick และคลาส CTrade อย่าเพิ่งพยายามเขียนอะไรในตอนนี้ เป้าหมายคือการเห็นว่าเอกสารถูกจัดระเบียบอย่างไร และจะหาตัวอย่างที่ใช้งานได้จริงได้ที่ไหนเมื่อคุณต้องการในภายหลัง
  3. เขียนกลยุทธ์ของคุณออกมาเป็นกฎเชิงตรรกะในรูปแบบ "ถ้า X และ Y แล้วเข้าสถานะ Long พร้อมตั้ง stop ที่ระดับ Z" หากหลังจากผ่านไปหนึ่งชั่วโมง กฎยังคงมีวลีอย่าง "ขึ้นอยู่กับบริบท" หรือ "ตามสัญชาตญาณ" คุณก็มีกลยุทธ์ที่ใช้ดุลยพินิจซึ่งการทำให้อัตโนมัติจะไม่ช่วยอะไร ให้กลับไปทบทวนกรอบรายการตรวจสอบ setup ก่อนที่จะเขียนโค้ดใด ๆ
  4. หากกฎออกมาชัดเจนไม่กำกวม ให้วางตารางการเรียนรู้ คือ ราว ๆ สามเดือนสำหรับพื้นฐาน MQL5 จากเอกสารของ MetaQuotes บวกกับโปรเจกต์เสริมระยะหนึ่งสัปดาห์เพื่อสร้าง EA ที่ง่ายที่สุดเท่าที่จะเป็นไปได้บนพื้นฐานของการตัดกันของเส้นค่าเฉลี่ยเคลื่อนที่ โปรเจกต์เดียวนั้นสอนคุณได้มากกว่าหุ่นยนต์ซื้อมาสิบตัว
  5. ก่อนรันอะไรบนเงินจริง จงให้คำมั่นว่าจะทำ forward test บนบัญชีทดลองด้วยราคาปัจจุบันอย่างน้อยหนึ่งเดือน backtest ไม่อาจแทนที่ forward test ได้ เพราะ forward test เปิดเผย latency ของการดำเนินคำสั่งจากโบรกเกอร์ ซึ่งเป็นสิ่งที่ backtest มองไม่เห็น
Jarosław Wasiński
เกี่ยวกับผู้เขียน

Jarosław Wasiński

บรรณาธิการบริหาร MyBank.pl · นักวิเคราะห์การเงินและตลาด

นักวิเคราะห์และผู้ปฏิบัติงานอิสระที่มีประสบการณ์กว่า 20 ปีในภาคการเงิน ผู้ก่อตั้งและบรรณาธิการบริหารของ MyBank.pl ที่ดำเนินงานมาตั้งแต่ปี 2004 วิเคราะห์ปัจจัยพื้นฐานตลาดอัตราแลกเปลี่ยนและมหภาคตั้งแต่ปี 2007 เขียนจากมุมมองตลาดโลก การเทรด Forex แบบ leverage มีความเสี่ยงสูง อยู่ภายใต้การกำกับดูแลของ ก.ล.ต. ในประเทศไทย

แหล่งอ้างอิงและบรรณานุกรม

  1. MetaQuotes MQL5 Reference — OnTick event handler · oficjalna dokumentacja zdarzenia wywoływanego na każdą kwotację www.mql5.com ↗
  2. MetaQuotes MQL5 Standard Library — CTrade class · klasa biblioteki standardowej do składania zleceń przez EA www.mql5.com ↗
  3. MetaQuotes MetaTrader 5 — Strategy Tester documentation · narzędzie do backtestowania i optymalizacji EA www.metatrader5.com ↗

คำถามที่พบบ่อย

EA ใน MQL5 ต่างจาก "หุ่นยนต์" ใน Python อย่างไร

ในแง่ตรรกะ ทั้งสองไม่ต่างกันเลย ทั้งคู่สรุปลงเหลือเป็นลูปที่ตรวจสอบสภาวะตลาดเป็นระยะแล้วส่งคำสั่ง ความต่างอยู่ที่ระบบนิเวศ EA ใน MQL5 เป็นลูกของ MetaTrader คือแนบกับกราฟ ดึงอินดิเคเตอร์ในตัวมาใช้ และใช้ Strategy Tester ส่วนหุ่นยนต์ Python อาศัยอยู่นอกเทอร์มินัลและเชื่อมต่อกับโบรกเกอร์จากภายนอก มักผ่าน REST API หรือโปรโตคอล FIX EA ชนะหากกลยุทธ์ของคุณพึ่งพาอินดิเคเตอร์ของ MT5 และคุณต้องการ tester ในตัว ส่วน Python ชนะหากคุณต้องการใช้ไลบรารีการเรียนรู้ของเครื่อง สถิติ หรือผสานข้อมูลจากหลายแหล่ง

ผมจำเป็นต้องเขียนโปรแกรมเป็นไหมถึงจะรัน EA ได้

ถ้าเพียงจะรัน EA ของคนอื่น ไม่จำเป็น คุณแค่ลากไฟล์ .ex5 ลงบนกราฟ ตั้งพารามิเตอร์ แล้วเปิด AutoTrading ความยากเริ่มต้นหลังจากนั้น คือ หากไม่รู้ MQL5 คุณจะไม่สามารถตรวจสอบได้ว่าหุ่นยนต์ทำอะไรอยู่จริงข้างใน มันตอบสนองต่อ slippage อย่างไร หรือมันแอบใช้วิธี Martingale หรือไม่ ผู้ขาย EA บน MQL5 Market มักซ่อนพารามิเตอร์ที่สำคัญที่สุดจากผู้ใช้ หากไม่มีความสามารถในการเปิดดูโค้ดต้นฉบับ (และ EA เชิงพาณิชย์ส่วนใหญ่เป็นแบบปิด) คุณก็ถูกตัดสินให้ต้องเชื่ออย่างหลับหูหลับตา ด้วยเหตุนี้ผมจึงแนะนำให้ลงทุนเรียนรู้พื้นฐานของภาษา การอ่านเอกสารเพียงไม่กี่สัปดาห์ก็เพียงพอที่จะเข้าใจสิ่งที่คุณกำลังอ่าน

ทำไม Strategy Tester ถึงแสดงผลลัพธ์ยอดเยี่ยมแต่การเทรดจริงกลับขาดทุน

เพราะ Strategy Tester เป็นเครื่องมือสำหรับการปรับค่าให้เหมาะที่สุด ไม่ใช่เครื่องมือทำนาย หากคุณกวาดข้อมูลในอดีตทั้งหมดเพื่อหาพารามิเตอร์ที่ให้เส้นโค้งทุนดีที่สุด คุณแทบจะแน่นอนว่าจะพบชุดที่ให้ผลลัพธ์ยอดเยี่ยม แต่เฉพาะบนตัวอย่างชุดนั้นเท่านั้น ปรากฏการณ์นี้เรียกว่า curve fitting และมันเป็นความแน่นอนทางคณิตศาสตร์ วิธีแก้คือการแบ่งข้อมูลเป็นช่วง in-sample สำหรับการปรับค่า (เช่น 2018–2022) และช่วง out-of-sample สำหรับการตรวจสอบ (เช่น 2023–2024) ซึ่งคุณรัน EA โดยไม่ปรับพารามิเตอร์เพิ่มอีก เฉพาะผลลัพธ์ที่สอดคล้องกันในช่วงตรวจสอบเท่านั้นที่ทำให้น่าเชื่อได้ว่าคุณไม่ได้กำลังมองสิ่งที่เป็นเพียงผลลวง ส่วน walk-forward analysis ไปไกลกว่านั้นอีกขั้น คือมันเลื่อนหน้าต่างการฝึกและการทดสอบไปตลอดทั้งประวัติข้อมูล

การรัน EA จำเป็นต้องมี VPS จริงหรือ

สำหรับกลยุทธ์ที่ตอบสนองในเสี้ยววินาที จำเป็น ไม่มีข้อโต้แย้ง สแกลเปอร์ที่ EA ยิงคำสั่งหลายสิบรายการต่อวันจะเสียความได้เปรียบทุกครั้งที่การเชื่อมต่อที่บ้านสะดุดหรือคอมพิวเตอร์เข้าสู่โหมดพักเครื่อง VPS ที่วางไว้ในศูนย์ข้อมูลเดียวกันกับเซิร์ฟเวอร์ของโบรกเกอร์สามารถลด latency จากราวห้าสิบมิลลิวินาทีเหลือเพียงไม่กี่มิลลิวินาที สำหรับกลยุทธ์แบบถือสถานะที่ทำหนึ่งรายการต่อสัปดาห์ VPS เป็นความสะดวกสบาย ไม่ใช่ข้อบังคับ คอมพิวเตอร์ตั้งโต๊ะที่บ้านพร้อม UPS (เครื่องสำรองไฟ) ก็เพียงพอ ค่าใช้จ่ายจากผู้ให้บริการที่เชี่ยวชาญ MT ในปัจจุบันอยู่ในระดับ 15 ถึง 50 EUR ต่อเดือน โบรกเกอร์บางรายเสนอ VPS ฟรีเมื่อเกินเกณฑ์เงินฝากหรือปริมาณการเทรดที่กำหนด ทั้งนี้ในประเทศไทย การซื้อขายหลักทรัพย์และตราสารอนุพันธ์อยู่ภายใต้การกำกับดูแลของสำนักงาน ก.ล.ต. (SEC Thailand) ขณะที่ธุรกรรมอัตราแลกเปลี่ยนอยู่ภายใต้ธนาคารแห่งประเทศไทย (ธปท.) การเทรด Forex/CFD ผ่านโบรกเกอร์ต่างประเทศสำหรับนักลงทุนรายย่อยถือเป็นพื้นที่สีเทาทางกฎหมาย latency ที่ต่ำไม่มีความหมายเลยหากเงินของคุณไม่ได้รับการคุ้มครองตามกฎหมาย จึงควรตรวจสอบสถานะการกำกับดูแลของโบรกเกอร์ให้รอบคอบก่อนฝากเงินใด ๆ

เจาะลึกเพิ่มเติม · คู่มือฉบับสมบูรณ์