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

Magic number

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

หรือ: magic ของ EA, หมายเลข magic ของคำสั่ง, MAGIC

อัปเดต · ตรวจทาน

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

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

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

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

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

ใน MetaTrader 5

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

  • กราฟ → คุณสมบัติ EA (F7) → Inputs — อินพุต MagicNumber ของตัว EA เอง
  • Strategy Tester → Inputs — อินพุตตัวเดียวกันตอนทดสอบ
  • โค้ด MQL5: MqlTradeRequest.magic ตอนส่ง และ POSITION_MAGIC / ORDER_MAGIC / DEAL_MAGIC ตอนอ่านกลับ

EA ใช้อย่างไร

  • ตั้งครั้งเดียวตอนเริ่ม — CTrade::SetExpertMagicNumber(MagicNumber) — จากนั้นทุกคำสั่งที่ EA ส่งจะมีป้ายนี้ติดไป
  • กรองทุกรอบ ลูปสถานะจะข้ามตั๋วที่ POSITION_MAGIC ไม่ใช่ของตัวเอง ก่อนจะแก้ไข เลื่อนสต็อป หรือปิดอะไรก็ตาม
  • กรองประวัติด้วยวิธีเดียวกัน เพื่อให้สถิติรายตัวคำนวณจากดีลของ EA ตัวนั้นเท่านั้น
  • EA ทุกตัวที่ Builder ของ mt5depot สร้างขึ้นจะมาพร้อมอินพุต MagicNumber ที่ค่าถูกอนุมานจากกลยุทธ์ ทำให้ EA ที่สร้างต่างกันสองตัวไม่ชนกันตั้งแต่แกะกล่อง

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

ค่าตั้ง ค่าที่ใช้ทั่วไป หมายเหตุ
ไม้ที่เทรดมือ 0 ค่าเริ่มต้นของเทอร์มินัล EA ไม่ควรไปจัดการ magic 0 เด็ดขาด
EA หนึ่งตัว สินค้าหนึ่งตัว จำนวนเต็มไม่ซ้ำอะไรก็ได้ อะไรที่จำง่ายก็ใช้ได้ — 20260807, 1001
EA ตัวเดียวกันบนหลายสินค้า หนึ่งค่าต่อหนึ่งกราฟ ไม่อย่างนั้นตัวที่รัน EURUSD จะไปปิดสถานะของตัวที่รัน GBPUSD
EA พอร์ตที่รันหลายกลยุทธ์ หนึ่งค่าต่อหนึ่งขา แต่ละขาต้องมีป้ายของตัวเองจึงจะถูกเลื่อนสต็อปและปิดได้อย่างอิสระ

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

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

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

CTrade::SetExpertMagicNumber()
กำหนดป้ายที่ทุกคำสั่งถัดไปของอินสแตนซ์นี้จะติดไป
PositionGetInteger(POSITION_MAGIC)
อ่านป้ายจากสถานะที่เปิดอยู่
OrderGetInteger(ORDER_MAGIC)
อ่านจากคำสั่งที่รออยู่
HistoryDealGetInteger(ticket, DEAL_MAGIC)
อ่านจากดีลที่ปิดแล้ว และนี่คือวิธีแยกประวัติรายตัว EA

ตัวอย่าง

EA สามตัวบนบัญชีเดียว แต่ละตัวประทับหมายเลขของตัวเอง ดังนั้นแม้ทั้งสามจะเห็นครบทั้งหกสถานะ แต่ลูปสถานะของแต่ละตัวก็แตะเฉพาะแถวของตัวเอง

หนึ่งเทอร์มินัล หนึ่งบัญชี สามเจ้าของ — สิ่งเดียวที่แยกพวกเขาออกจากกันคือป้ายนี้
EA ตามเทรนด์บน EURUSD
20260101
EA กลับสู่ค่าเฉลี่ยบน USDJPY
20260102
ไม้ที่คุณเทรดมือ
0
ไม่มี EA ตัวไหนอ้างสิทธิ์ป้ายนี้ จึงไม่มีอะไรอัตโนมัติมาปิดมัน

การคำนวณ if (PositionGetInteger(POSITION_MAGIC) != MagicNumber) continue;

ผลลัพธ์ EA แต่ละตัวจัดการเฉพาะสถานะที่ตัวเองเปิด

ตัวเลขเพื่อประกอบคำอธิบาย ไม่ใช่สถิติของ EA ที่วางจำหน่าย

ใช้อย่างไร

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

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

ตัวค่าเองไม่มีความหมายอะไรกับ MetaTrader — จำนวนเต็มอะไรก็ได้ สิ่งเดียวที่สำคัญคือมันต้องไม่ซ้ำกับสิ่งอื่นที่รันอยู่บนบัญชีนั้น

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

คิดว่า magic number มีผลต่อการจับคู่คำสั่ง

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

ใช้ magic number เดียวสำหรับ EA ตัวหนึ่งบนหลายกราฟ

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

เปลี่ยนมันเพื่อ «รีเซ็ต» EA ที่ทำงานผิดปกติ

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

คิดว่า magic number แยกรายงานบัญชีให้

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

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

สิ่งที่ป้ายกำกับไม่ได้ซื้อมาให้ นับจากชั้นวางนี้

จาก EA 14 ตัวที่เผยแพร่ที่นี่ค่า
รายการที่มีอินพุต MagicNumber10
รายการที่ต้องแก้ค่านั้นตอนติดตั้ง0
รายการที่ขอให้รันในที่ซึ่งไม่มีอะไรอื่นเทรดสินค้านั้น8
ในจำนวนนั้น รายการที่ยังมีอินพุต MagicNumber อยู่ดี6
สินค้าที่ถูกมากกว่าหนึ่งรายการจับจอง7 จาก 15
คู่ EA ที่ใช้บัญชีเดียวกันไม่ได้15 จาก 91

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

ดังนั้นคำถามเรื่องจับคู่จึงเป็นคำถามเรื่องสินค้า และตอบได้ก่อนซื้อ USD/JPY ถูกสี่รายการจับจองพร้อมกัน — Iridescence, Kestrel Hover, Lanternfish และ Tessera — จึงไม่มีคู่ไหนในกลุ่มนี้ที่ควรอยู่ด้วยกัน ตอนนี้ EUR/GBP มีสองรายการ คือ Ballast และ Thunderhead มีเพียง Orrery, Peregrine และ Zerqon เท่านั้นที่ไม่ทับซ้อนกับใคร ตรงที่สองตัวทับซ้อนกันจริง การแยกบัญชีจะแก้สิ่งที่ป้ายกำกับแก้ไม่ได้ เพราะจากนั้น EA แต่ละตัวจะนับกองที่มีเฉพาะไม้ของตัวเอง ระเบียบวิธีของเราบันทึกทุกการรันที่เผยแพร่แยกตามสินค้า ซึ่งก็คือการแยกแยะแบบเดียวกันเมื่อมองจากฝั่งการวัด

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

ควรใช้ magic number เลขอะไร
จำนวนเต็มใดก็ได้ที่ยังไม่ถูกใช้บนบัญชีนั้น และต้องไม่ใช่ 0 — ค่านั้นเป็นของไม้ที่เทรดมือ ค่าที่อยู่ในรูปวันที่อย่าง 20260807 ติดตามง่ายเมื่อมีหลายอินสแตนซ์กำลังรัน
EA สองตัวใช้ magic number เดียวกันได้ไหม
ในทางเทคนิคได้ และนั่นคือสาเหตุที่พบบ่อยของการขาดทุนที่หาต้นตอยาก แต่ละอินสแตนซ์จะปฏิบัติกับสถานะของอีกตัวเหมือนเป็นของตัวเอง และอาจปิดหรือเลื่อนสต็อปในจังหวะที่ผิด ให้ค่าเฉพาะของตัวเองแก่ทุกอินสแตนซ์ที่กำลังรัน
magic number สำคัญใน Strategy Tester ไหม
สำหรับการทดสอบ EA ตัวเดียวไม่สำคัญ เพราะในบัญชีทดสอบไม่มีอะไรอื่นเทรดอยู่ มันจะสำคัญทันทีที่มี EA มากกว่าหนึ่งตัวรันบนบัญชีจริงหรือบัญชีทดลองเดียวกัน