หมวดหมู่
แพลตฟอร์ม
ระดับความยาก
เริ่มต้น
ใช้ใน
การใช้งาน MT5การประเมิน EAการออกแบบกลยุทธ์

Expert Advisor

โปรแกรมเทรดอัตโนมัติที่เขียนด้วย MQL5 ทำงานภายใน MetaTrader 5 และเปิด แก้ไข และปิดคำสั่งตามกฎที่โปรแกรมไว้โดยไม่ต้องแทรกแซงด้วยมือ

หรือ: EA, หุ่นยนต์เทรด, บอทเทรด, เทรดเดอร์อัลกอริทึม

อัปเดต

อธิบายแบบเข้าใจง่าย

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

ทำไมจึงสำคัญ

แบ็คเทสต์ ตัวเลขดรอว์ดาวน์ magic number เวลาทำงานของ VPS ทั้งหมดนี้มีอยู่ก็เพราะผู้ส่งคำสั่งคือโปรแกรม ไม่ใช่คน การรู้ว่าแพลตฟอร์มส่งอะไรให้ EA และกันอะไรไว้ คือความต่างระหว่างการอ่านผลลัพธ์ได้ถูกต้องกับการถูกผลลัพธ์นั้นทำให้ประหลาดใจ

  • มันลงมือโดยไม่ลังเล นั่นคือคุณค่าทั้งหมดและความเสี่ยงทั้งหมดของมัน ชุดกฎที่ไม่เคยพลาดสัญญาณที่ถูกต้อง ก็คือชุดกฎที่ไม่เคยสังเกตว่าวันนี้ต่างออกไปเช่นกัน
  • มันเห็นเพียงส่วนแคบ ๆ ได้แก่ ราคาของสัญลักษณ์ตัวเอง ค่าอินดิเคเตอร์ที่มันร้องขอ สถานะและยอดเงินของบัญชี ส่วนข่าว ราคาจากโบรกเกอร์อื่น และบัญชีอื่นของคุณ อยู่นอกกรอบนั้นจนกว่าโค้ดจะไปดึงมาเอง
  • มันถูกแจกจ่ายในรูปแบบที่คอมไพล์แล้ว ไฟล์ .ex5 รันได้แต่อ่านไม่ได้ ความเชื่อมั่นของผู้ซื้อจึงต้องมาจากหลักฐานการทดสอบที่เผยแพร่ ไม่ใช่จากซอร์สโค้ด
  • มันทำงานเฉพาะตอนที่เทอร์มินัลทำงานอยู่ EA บนโน้ตบุ๊กที่หลับอยู่คือ EA ที่ไม่ได้เทรด และนี่คือเหตุผลทั้งหมดของการใช้ VPS

ใน MetaTrader 5

อยู่ตรงไหนใน MT5

  • Navigator → Expert Advisors — EA ที่คอมไพล์แล้วซึ่งเทอร์มินัลมองเห็น
  • File → Open Data Folder → MQL5/Experts — ตำแหน่งที่ไฟล์ .ex5 ต้องอยู่จึงจะปรากฏในรายการ
  • แถบเครื่องมือ → Algo Trading — สวิตช์หลัก EA ที่ขึ้นหน้าเศร้าบนกราฟคือ EA ที่ถูกปุ่มนี้ปิดกั้นอยู่
  • กราฟ → คุณสมบัติ EA (F7) → Inputs / Common — พารามิเตอร์และสิทธิ์เฉพาะของแต่ละ EA
  • View → Strategy Tester (Ctrl+R) — EA ตัวเดียวกันที่รันบนข้อมูลย้อนหลัง

EA ใช้อย่างไร

  • เทอร์มินัลเรียก OnInit() หนึ่งครั้งตอนแนบเข้ากราฟ เรียก OnTick() ทุกครั้งที่มีราคาเข้ามาสำหรับสัญลักษณ์ของกราฟ และเรียก OnDeinit() ตอนถอดออก
  • งานมักเกิดบนแท่งที่ปิดแล้ว ไม่ใช่ทุก tick โดย EA เทียบเวลาเปิดของแท่งปัจจุบันกับเวลาที่มันเก็บไว้ และคืนค่าทันทีเมื่อยังไม่มีแท่งใหม่เกิดขึ้น
  • คำสั่งถูกส่งออกไปในรูปโครงสร้าง MqlTradeRequest ที่กรอกครบ หรือผ่านตัวห่อ CTrade ที่กรอกส่วนใหญ่ให้คุณ
  • แต่ละอินสแตนซ์ติด magic number ไว้กับคำสั่งของตัวเอง เพื่อดูแลเฉพาะสถานะของตัวเอง หากไม่มี EA สองตัวจะแย่งตั๋วเดียวกัน

ค่าตั้งทั่วไป

ค่าตั้ง ค่าที่ใช้ทั่วไป หมายเหตุ
Algo Trading (เทอร์มินัล) เปิดใช้งาน ปิดอยู่หลังติดตั้ง จะยังไม่มีอะไรเทรดจนกว่าจะเปิด
อนุญาต Algo Trading (รายตัว EA, F7 → Common) เปิดใช้งาน เป็นสิทธิ์แยกต่างหากจากสวิตช์ระดับเทอร์มินัล
อนุญาต WebRequest สำหรับ URL ที่ระบุ ปิด เว้นแต่ EA จำเป็นต้องใช้ เฉพาะ EA ที่ดึงข้อมูลภายนอกเท่านั้นที่ต้องใช้ ให้อนุญาตทีละ URL อย่าอนุญาตแบบเหมารวม
ไทม์เฟรมของกราฟ ไทม์เฟรมที่ EA ถูกออกแบบมา กลยุทธ์ M15 บนกราฟ H1 คือคนละกลยุทธ์ เพราะ OnTick ทำงานทุก tick แต่ตรรกะแท่งเทียนอ่านคาบเวลาของกราฟ
MagicNumber ไม่ซ้ำกันในแต่ละอินสแตนซ์ที่รันอยู่ ไม่ใช่ต่อสินค้า สองกราฟที่รัน EA ตัวเดียวกันต้องใช้สองค่า

ปัญหาการใช้งานที่พบบ่อย

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

ฟังก์ชัน MT5 ที่เกี่ยวข้อง

OnInit() / OnDeinit()
ถูกเรียกหนึ่งครั้งตอนแนบและหนึ่งครั้งตอนถอดออก เป็นที่สำหรับตรวจสอบค่าอินพุตและสร้าง handle
OnTick()
ถูกเรียกทุกครั้งที่มีราคาเข้ามาสำหรับสัญลักษณ์ของกราฟ เป็นจุดเข้าทำงานหลัก
OnTimer()
ถูกเรียกตามช่วงเวลาคงที่ที่ตั้งด้วย EventSetTimer() สำหรับงานที่ไม่ควรขึ้นกับว่ามี tick เข้ามาหรือไม่
OrderSend(request, result)
การเรียกเพียงหนึ่งเดียวที่ส่งทุกการดำเนินการเทรด โดยโครงสร้างคำขอเป็นตัวกำหนดว่าเป็นชนิดใด
CTrade (Trade/Trade.mqh)
ตัวห่อจากไลบรารีมาตรฐานที่ EA ส่วนใหญ่ใช้แทนการกรอก MqlTradeRequest เอง

ตัวอย่าง

EA แทบทุกตัว ย่อลงเหลือเพียงลำดับที่แพลตฟอร์มเรียกใช้ ไม่มีส่วนใดเป็นกลยุทธ์ นี่คือกรอบที่กลยุทธ์เข้าไปนั่งอยู่ข้างใน

1. OnInit()
หนึ่งครั้ง ตอนแนบเข้ากราฟ
ตรวจสอบค่าอินพุต สร้าง handle ของอินดิเคเตอร์ ตั้งค่า magic number
2. OnTick()
ทุกครั้งที่มีราคาเข้ามา
คืนค่าทันทีตราบใดที่ยังไม่มีแท่งใหม่ จากนั้นจึงประเมินกฎ
3. OrderSend()
เมื่อกฎถูกกระตุ้น
หนึ่ง MqlTradeRequest ที่กรอกครบต่อหนึ่งการดำเนินการ ไม่ว่าจะเปิด แก้ไข หรือปิด
4. OnDeinit()
หนึ่งครั้ง ตอนถอดออก
คืน handle ขั้นตอนนี้ไม่ปิดสถานะที่เปิดอยู่ มันยังคงอยู่ต่อไป

การถอด EA ออกจากกราฟไม่ได้ปิดสิ่งที่มันเปิดไว้ สถานะยังคงอยู่ และไม่มีอะไรดูแลมันอีกต่อไป

การคำนวณ if (iTime(_Symbol, PERIOD_CURRENT, 0) == lastBarTime) return;

ผลลัพธ์ EA ที่ทำงานเมื่อแท่งปิด และไม่สนใจ tick นับพันระหว่างการตัดสินใจสองครั้ง

ใช้อย่างไร

การตัดสิน EA ที่คุณไม่ได้เขียนเองเป็นเรื่องของหลักฐาน ไฟล์ที่คอมไพล์แล้วไม่บอกอะไรคุณเลย ด้านล่างคือสิ่งที่ควรขอ

  • ถามว่าแบ็คเทสต์ใช้ข้อมูลอะไรและจำลองอย่างไร tick จริงและตัวเลขคุณภาพการจำลองมีความหมาย ส่วนกราฟทุนที่ไม่มีคำอธิบายกำกับนั้นไม่มี
  • ถามจำนวนคำสั่งและช่วงเวลาที่ทดสอบ EA ค่ามัธยฐานที่เผยแพร่ที่นี่ปิดคำสั่งไป 362 รายการตลอดหลายปี ส่วนสี่สิบคำสั่งในสี่เดือนเป็นเพียงเรื่องเล่า
  • ตรวจว่ากลยุทธ์ปล่อยให้ไม้ที่ขาดทุนค้างไว้หรือไม่ การถัวเฉลี่ยขาลงและการแก้ไม้แบบกริดสร้างกราฟที่สวยงามจนกว่าจะเจอตะกร้าที่ไม่ฟื้น และไม่มีอัตราส่วนใดจากคำสั่งที่ปิดแล้วเตือนคุณได้
  • ทดลองรันบนบัญชีเดโมของโบรกเกอร์คุณเองก่อนใส่เงินจริง โมเดลการส่งคำสั่ง สเปรด ขนาดสัญญา และการตั้งชื่อสัญลักษณ์ ล้วนต่างกันและล้วนเปลี่ยนผลลัพธ์
  • ให้ magic number เฉพาะตัวกับทุกอินสแตนซ์ และจดไว้ว่าตัวไหนคือตัวไหนก่อนที่จะรันเกินสองตัว

EA ทุกตัวที่ระบุไว้ที่นี่เผยแพร่ช่วงเวลาที่ทดสอบ แหล่งข้อมูล คุณภาพการจำลอง และบัญชีคำสั่งทั้งหมด หลักฐานเหล่านี้จึงตรวจสอบได้เองแทนที่จะต้องไปร้องขอ

ความเข้าใจผิดที่พบบ่อย

ปฏิบัติกับ EA เหมือนเป็นเทรดเดอร์ที่มีวิจารณญาณ

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

คิดว่าผลแบ็คเทสต์จะย้ายมาที่บัญชีของคุณได้ทั้งดุ้น

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

ถอด EA ออกเพื่อหยุดมัน แล้วคิดว่าคำสั่งหยุดตามไปด้วย

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

รัน EA หลายตัวในบัญชีเดียวโดยไม่แยกจากกัน

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

รายละเอียดเพิ่มเติม

บันทึกจริงของ EA หน้าตาเป็นอย่างไร

คำนิยามอธิบายกลไก ส่วนบันทึกอธิบายประสบการณ์ EA ทั้งสิบสี่ตัวที่เผยแพร่ที่นี่แนบรายการคำสั่งที่ปิดแล้วทั้งหมด — 9,702 คำสั่งนับตั้งแต่ปี 2019

จาก EA 14 ตัวที่เผยแพร่ค่า
คำสั่งที่ปิดแล้ว9,702
คำสั่งต่อ EA (มัธยฐาน)362 ตั้งแต่ 108 ถึง 4,725
Profit factor (มัธยฐาน)1.39 ตั้งแต่ 1.27 ถึง 1.52
ช่วงขาดทุนติดต่อกันแย่ที่สุด (มัธยฐาน)6 คำสั่ง แย่ที่สุด 14
ช่วงยาวที่สุดที่ไม่ทำจุดสูงสุดใหม่ของทุน (มัธยฐาน)423 วัน แย่ที่สุด 775
การรันบัญชีจริงที่ตรวจสอบแล้ว0

Expert Advisor ทำกำไรได้จริงหรือไม่ ไล่ดูบันทึกนั้นทีละตัว และEA เทียบกับการเทรดด้วยมือ เล่นคำสั่งชุดเดิมซ้ำภายใต้กฎหยุดเทรดที่คนใช้จริง

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

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