เทรดอัตโนมัติ: EA สคริปต์ MQL, cBot และ VPS
ระบบอัตโนมัติย้ายงานซ้ำไปให้โปรแกรม แต่ความรับผิดชอบพฤติกรรมยังอยู่กับคุณ Expert Advisor หรือ cBot ต้องมีสภาพแวดล้อมรันที่กำหนดชัด เช่น เทอร์มินัล VPS หรือคลาวด์ เราอธิบายความต่าง การวินิจฉัยข้อผิดพลาด และวิธีปกป้องบัญชีหลังขาดการเชื่อมต่อหรือรีสตาร์ต รวมทั้งค่าโฮสติ้ง ความล่าช้าดำเนินคำสั่ง และสิ่งที่ต้องตรวจก่อนให้โปรแกรมทำงานบนบัญชีที่ใช้ มาร์จิน.

- หุ่นยนต์ทำงานในสภาพแวดล้อมที่คุณต้องดูแล EA แบบดั้งเดิมใน MetaTrader คำนวณในเทอร์มินัลและส่งคำขอไปเซิร์ฟเวอร์โบรกเกอร์ ปิดเทอร์มินัลคือตรรกะหยุด ยกเว้นสิ่งที่โบรกเกอร์เก็บไว้ฝั่งตน
- อินดิเคเตอร์ สคริปต์ EA และ cBot มีสิทธิ์ต่างกัน อินดิเคเตอร์ใน MetaTrader ไม่เข้าถึงฟังก์ชันซื้อขาย สคริปต์มีจุดเริ่มเดียวคือ
OnStart()และจบพร้อมฟังก์ชันนั้น ส่วน EA ทำงานต่อเนื่อง สิ่งเหล่านี้ไม่ใช่คำพ้อง - MQL4 กับ MQL5 ต่างกันที่แบบจำลองคำสั่งและสถานะ ไม่ใช่ “ระดับความซับซ้อน” ทั้งคู่รองรับการเขียนเชิงวัตถุ การย้ายคือเขียนชั้นซื้อขายใหม่ ไม่ใช่คอมไพล์ใหม่
- cTrader Algo เขียนด้วย C# และ Python ได้ และ cBot รันในเครื่องหรือคลาวด์ได้ แบบคลาวด์ไม่ต้องเปิดแอปผู้ใช้ไว้ ข้อจำกัดขึ้นกับประเภทบัญชีและโบรกเกอร์ [ณ 2026-08-22]
- SL/TP มาตรฐานกับ trailing stop ทำงานคนละที่ และ trailing stop ยังขึ้นกับแพลตฟอร์ม ระดับ SL/TP ที่แนบสถานะเก็บบนเซิร์ฟเวอร์โบรกเกอร์ Trailing stop ใน MetaTrader 4 และ 5 คำนวณในเทอร์มินัล เมื่อปิด ระดับหยุดเลื่อน แต่การแก้ไขล่าสุดที่ส่งยังอยู่บนเซิร์ฟเวอร์ ส่วน cTrader ต่างกัน ผู้พัฒนาอธิบายว่าการป้องกันสถานะยังทำงานแม้ปิดแอป [22] [ณ 2026-08-22]
- VPS ซื้อความต่อเนื่อง ไม่ใช่ความได้เปรียบ ไม่แก้กลยุทธ์ ไม่กำจัด slippage และไม่ป้องกันความขัดข้องฝั่งโบรกเกอร์
- Ping ไม่ใช่เวลาดำเนินคำสั่ง ความล่าช้ามีหลายช่วงและต้องวัดแยกกัน
- Kill switch ขีดจำกัด และบันทึกคือมาตรฐานขั้นต่ำ หุ่นยนต์ที่ไม่มีขีดจำกัดขาดทุนแข็งตัว จำกัดสถานะ หรือบันทึกการตัดสินใจตรวจสอบย้อนหลังไม่ได้ และกลไกที่ปิดสถานะเองต้องทดสอบ dry-run บนบัญชีทดลองโดยไม่ส่งอะไรไปเซิร์ฟเวอร์ก่อน
1. หุ่นยนต์รันจริงที่ใด – EA เทอร์มินัล และเซิร์ฟเวอร์โบรกเกอร์
ความเข้าใจผิดซ้ำในอัตโนมัติรายย่อยคือ “หุ่นยนต์ฉันเทรดที่โบรกเกอร์” ไม่ใช่เช่นนั้น Expert Advisor ใน MetaTrader เป็นโปรแกรมคอมไพล์ที่รันในโปรเซสเทอร์มินัล เทอร์มินัลรับกระแสราคาจากเซิร์ฟเวอร์ เรียกโค้ดตามเหตุการณ์ แล้วส่งคำขอซื้อขายที่เตรียมเสร็จ โบรกเกอร์ตรวจและดำเนินการหรือปฏิเสธ ทุกสิ่งที่หุ่นยนต์ “รู้” และ “จำ” อยู่ฝั่งสภาพแวดล้อมรัน
ห่วงโซ่ที่ควรจำเมื่อวิเคราะห์ความขัดข้องคือ:
โค้ด EA → เทอร์มินัล (สภาพแวดล้อมรัน) → เซิร์ฟเวอร์โบรกเกอร์ → ตรวจคำสั่ง → ดำเนินการหรือปฏิเสธ → ตอบกลับ → บันทึกและสภาพ EA
แต่ละข้อเสียเองได้และเสียต่างแบบ ตรรกะผิดอยู่ข้อแรก ปิดเทอร์มินัลหยุดตรรกะในเครื่องกับคำขอใหม่ แต่โบรกเกอร์ยังดูแลคำสั่งที่เก็บไว้ คำสั่งถูกปฏิเสธเป็นปัญหาข้อที่สี่ แม้ปรากฏว่า “EA ไม่เปิดสถานะ” โครงสร้างจริงของโบรกเกอร์และผู้ให้โฮสต์ซับซ้อนกว่านี้มาก ห่วงโซ่นี้เป็นแบบจำลองใช้งาน ไม่ใช่แผนผังเครือข่าย
เหตุการณ์ที่โค้ดตอบสนอง บน MT4 และ MT5 โปรแกรมซื้อขายขับเคลื่อนด้วยเหตุการณ์ OnInit() ทำงานตอนเริ่ม ควรตรวจพารามิเตอร์นำเข้าและเตรียมสภาพที่นี่ OnTick() ถูกเรียกเมื่อมีราคาถัดไปของตราสารที่ติดหุ่นยนต์ไว้ OnDeinit() ทำงานเมื่อเอาโปรแกรมออกจากกราฟ เปลี่ยนพารามิเตอร์ หรือปิดเทอร์มินัล OnTimer() สำหรับงานเป็นรอบ และ OnChartEvent() สำหรับปฏิสัมพันธ์กราฟมีทั้งสองภาษา เอกสาร MQL4 ระบุทั้งคู่พร้อมรูปแบบฟังก์ชันครบ เช่นเดียวกับ OnInit(), OnTick() และ OnDeinit() [10]ความต่างอยู่ชั้นซื้อขาย MT5 เพิ่มเหตุการณ์ที่ MQL4 ไม่มีเลย คือ OnTrade() และ OnTradeTransaction() เพื่อตอบสนองต่อสภาพบัญชีเปลี่ยน [14]อีกส่วนที่อยู่นอกชั้นซื้อขาย MT5 ยังมี OnBookEvent() เป็นเหตุการณ์ข้อมูลตลาดที่เอกสารอธิบายว่ารับการเปลี่ยนความลึกตลาดหรือสมุดคำสั่ง [14]ทำงานเฉพาะที่มีความลึกตลาดให้ใช้ การมีสมุดคำสั่งขึ้นกับตราสารและโบรกเกอร์ ซึ่งบัญชี forex รายย่อยมักไม่มี นี่ไม่ใช่คอร์สเขียนโปรแกรม แต่เป็นขั้นต่ำให้รู้ว่าเมื่อไรโค้ดมีโอกาสลงมือ
ผลทางปฏิบัติที่ไม่สะดวกคือ: OnTick() ไม่ใช่นาฬิกา จำนวนการเรียกขึ้นกับราคาที่เข้ามาและการประมวลผลคิว ใน MQL5 จะไม่เพิ่ม NewTick ใหม่หากมีเหตุการณ์นั้นในคิวหรือกำลังประมวลผล[25]โบรกเกอร์สองรายในคู่เดียวกันอาจส่งจำนวน tick ต่างชัด เพราะกรองกระแสและใช้แหล่งสภาพคล่องต่างกัน ตรรกะที่สมมติว่าความถี่ “ค่อนข้างคงที่” จริง ๆ ขึ้นกับโบรกเกอร์และประเภทบัญชี และย้ายข้ามรายได้แย่กว่าที่โค้ดเหมือนกันทำให้คิด
อะไรยังอยู่เมื่อเทอร์มินัลดับ
ความแตกต่างนี้ช่วยรักษาบัญชี และเป็นจุดที่คำลัดผิดว่า “MT4 ทุกอย่างอยู่ฝั่งไคลเอนต์” กลับมาซ้ำ
ระดับ Stop Loss และ Take Profit ที่แนบกับสถานะหรือคำสั่งรอเก็บบนเซิร์ฟเวอร์โบรกเกอร์และทำงานไม่ว่าเทอร์มินัลเปิดหรือไม่ Trailing stop ในหน้าจอ MetaTrader กลับตรงข้าม คำนวณในเครื่องตามราคาที่เข้ามาและหยุดเลื่อนทันทีที่ปิดแพลตฟอร์ม ใช้ทั้ง MT4 และ MT5 แต่ยืนยันคนละแหล่ง คู่มือ MetaTrader 4 อธิบายว่าทำงานในเทอร์มินัลไคลเอนต์ ไม่ใช่เซิร์ฟเวอร์ และหยุดเมื่อปิดเทอร์มินัล [8]ส่วนคู่มือ MetaTrader 5 ย้ำว่ารันในแพลตฟอร์ม ไม่ใช่เซิร์ฟเวอร์เหมือน Stop Loss [11]ต้องชี้แจงสองข้อไม่เช่นนั้นจะผิด ข้อแรก ปิดแล้วหยุดเลื่อนแต่ไม่ยกเลิกการแก้ล่าสุดที่ส่งสำเร็จ ซึ่งยังอยู่เซิร์ฟเวอร์และปกป้องต่อ ข้อที่สอง ห้ามขยายคำอธิบายนี้ทุกแพลตฟอร์ม cTrader สร้างต่างกัน คู่มือระบุว่า “การป้องกันทั้งหมดทำงานข้ามแอป cTrader และยังมีผลหลังเซสชันสิ้นสุด” [22]หน้าคำอธิบาย Trade Watch ระบุชัดว่า “Trailing stop loss ทำงานแม้แอป cTrader ปิดหรือขาดการเชื่อมต่อ” [23]เงื่อนไขจึงคงอยู่นอกแอปผู้ใช้และไม่ต้องเปิดแอป ชื่อเดียวกันแต่สองรูปแบบทำงาน จึงไม่ควรนำความเคยชินข้ามแพลตฟอร์ม ขอบเขตคำสั่งเซิร์ฟเวอร์กับฟังก์ชันในเครื่องอยู่ใน บทความ 11.4 [ณ 2026-08-22; ตรวจขอบเขตฟังก์ชันที่โบรกเกอร์ของคุณมีจากเอกสารของเขา].
แบบที่สามอันตรายและพบซ้ำในโค้ดสมัครเล่น คือ stop loss “เสมือน” ที่อยู่เพียงในตัวแปร EA โบรกเกอร์ไม่เห็น stop นี้ หากโปรเซสเทอร์มินัลตาย สถานะไร้การป้องกันนอกเหนือกลไกระดับบัญชี ก่อนบอกว่ามี stop loss ให้ตรวจในหน้าสถานะว่าระดับอยู่ฝั่งเซิร์ฟเวอร์ ไม่ใช่แค่กราฟหรือบันทึกหุ่นยนต์ ระดับที่ยอมรับและระยะขั้นต่ำ SL/TP ขึ้นกับข้อกำหนดตราสารของแต่ละโบรกเกอร์ โค้ดเดียวกันจึงอาจรับในบัญชีหนึ่งและปฏิเสธอีกบัญชี
อัตโนมัติเต็มและบางส่วน
หุ่นยนต์ไม่ต้องตัดสินใจเข้าก็มีประโยชน์ อัตโนมัติบางส่วน เช่น ย้าย stop ไปคุ้มทุน จัดการขนาดสถานะ ปิดบางปริมาณตามระดับ ครอบคลุมงานที่ทำมือไม่สม่ำเสมอ โค้ดสั้น ขอบเขตผิดพลาดเล็ก และวินิจฉัยง่ายกว่า อัตโนมัติเต็มจากสัญญาณถึงดำเนินการเป็นโครงการที่มีความรับผิดชอบคนละระดับ
แต่ทั้งคู่ต้องมีเงื่อนไขเดียวกัน คืออธิบายกฎไม่กำกวม หากเข้า ออก และความเสี่ยงต้องตัดสิน “คุณภาพ” รูปแบบ คุณไม่มีระบบให้อัตโนมัติ แต่มีความเห็นตลาด ระบบอัตโนมัติทำตามข้อกำหนดที่ผิดได้สม่ำเสมอเท่าข้อกำหนดดี เพียงเร็วกว่าและไม่พัก กฎมีค่าคาดหวังบวกหรือไม่เป็นเรื่องของ เนื้อหาความได้เปรียบและค่าคาดหวังที่นี่เราดูเพียงวิธีรันข้อกำหนดเช่นนั้นอย่างปลอดภัย
- Knight Capital, 1 สิงหาคม 2012 ข้อผิดพลาดนำซอฟต์แวร์ขึ้นใช้ทำให้คำสั่งผิดถล่มในหลายสิบนาทีและขาดทุนระดับหลายร้อยล้านดอลลาร์ มีบันทึกในกระบวนการ SEC ปี 2013 [9]ขนาดเทียบ EA รายย่อยไม่ได้ แต่ประเภทเสี่ยงเหมือนกัน ไม่ใช่กลยุทธ์เสีย แต่เป็นขั้นตอนนำใช้และไม่มีตัวหยุด
- SNB, 15 มกราคม 2015 หลังธนาคารกลางสวิสยกเลิกเพดาน EUR/CHF อัตราเคลื่อนกระโดด เอกสารที่อ้างไม่ระบุว่าสภาพสุดขั้วอยู่นานเท่าไร และเราก็ไม่ตัดสิน สิ่งที่ระบุคือผลต่อบัญชี ในการวิเคราะห์ก่อนมาตรการแทรกแซงผลิตภัณฑ์ EU, ESMA บันทึกว่าหลังเหตุฟรังก์ นักลงทุนบางรายมีหนี้ยอดลบหลายหมื่นยูโร มากกว่าเงินฝากกับผู้ให้ CFD หลายเท่า [13]จากมุมเครื่องมือสำคัญข้อเดียว ระบบที่เพิ่มสถานะขาดทุนหรือส่งคำสั่งถูกปฏิเสธซ้ำในจังหวะนั้นกำลังทำร้ายบัญชี การคุ้มครองยอดติดลบลูกค้ารายย่อย EU มีผลภายหลัง เป็นหัวข้อกฎระเบียบ ไม่ใช่ที่นี่
- เหตุการณ์ flash และเหตุที่ไม่เล่าเหตุหนึ่งแบบนาทีต่อนาที การเคลื่อนรุนแรงของเยน 3 มกราคม 2019 ถูกอธิบายต่างกันและขัดกันในแหล่งรอง เราไม่พบเอกสารลงวันที่ที่ยืนยันลำดับละเอียดเช่นนั้น เหลือสิ่งที่สถาบันบันทึกและสำคัญสุดกับอัตโนมัติ รายงาน Markets Committee ของ Bank for International Settlements เรื่องอัลกอริทึมดำเนินคำสั่ง FX (ตุลาคม 2020) ระบุว่าการวิเคราะห์ flash FX ล่าสุดมักชี้การรวมปัจจัย เช่น “คำสั่ง stop-loss กระจุกตัว หรือพนักงานประสบการณ์น้อยทำงานนอกเขตเวลาหลักของสกุลเงิน” [20]ส่วนท้ายหมายถึงบุคลากรฝั่งตลาด ไม่ใช่ตราสารทำงานนอกเขตตน เราไม่ขยายความ สำหรับระบบอัตโนมัติพอทราบสิ่งที่รายงานโยงตรง คือคำสั่งป้องกันกระจุกระดับเดียวและเวลานอกเขตหลักของสกุลนั้น ฟิลเตอร์สเปรดที่ปรับจากเวลาปกติจะไม่หมายถึงอย่างเดิม และตรรกะลองซ้ำคำขอถูกปฏิเสธเริ่มทำร้ายบัญชี หากอยากประเมินว่าช่วงหนึ่งจะกระทบระบบคุณอย่างไร ใช้ tick ของโบรกเกอร์ตัวเองวันนั้นทดสอบกลยุทธ์ คำเล่าคนอื่นไม่บอกบัญชีคุณ
2. อินดิเคเตอร์ สคริปต์ EA และ cBot – เครื่องมือสี่ประเภทต่างกัน
คำถาม “หาสคริปต์ที่เทรดแทน” เจอบ่อยและมักหมายต่างจากที่พูด สคริปต์ MetaTrader ใช้ฟังก์ชันซื้อขายและส่งหลายการกระทำในครั้งเดียวได้ จึงไม่ขัดแย้งที่มี “สคริปต์เทรด” ความขัดอยู่ที่สคริปต์มีจุดเข้าเดียวคือ OnStart()และจบพร้อมฟังก์ชัน จึงไม่มีสิ่งเฝ้าตลาดเป็นสัปดาห์ โปรแกรม MetaTrader สามประเภทต่างด้านวงจรชีวิตและขอบเขตสิทธิ์ ส่วน cTrader แบ่งอีกแบบ
| คุณลักษณะ | Expert Advisor | สคริปต์ | อินดิเคเตอร์กำหนดเอง |
|---|---|---|---|
| วงจรชีวิต | ต่อเนื่อง รันจนเอาออกจากกราฟ | ครั้งเดียว ทำงานแล้วจบ | ต่อเนื่อง คำนวณใหม่ตามข้อมูลกราฟ |
| ส่งคำสั่งได้หรือไม่ | ได้ | ได้ รวมหลายการกระทำในการรันเดียว | เข้าฟังก์ชันซื้อขายไม่ได้ |
| เหตุการณ์หลัก | OnTick() | OnStart() | OnCalculate() |
| วาดบนกราฟ | ทำได้แต่ไม่ใช่หน้าที่หลัก | ไม่ใช่งานทั่วไป | หน้าที่หลัก |
| งานที่พบบ่อย | เทรดอัตโนมัติ จัดการสถานะ | งานเป็นชุด เช่น ปิดสถานะ ตั้งระดับ | ออสซิลเลเตอร์ โซน แผงหลายกรอบเวลา |
| จำนวนต่อกราฟ | หนึ่ง | ครั้งละหนึ่ง | หลายตัวพร้อมกัน |
แยกสิทธิ์เป็นข้อดี แต่รับรองแคบกว่าที่มักกล่าว อินดิเคเตอร์ใช้ฟังก์ชันซื้อขายไม่ได้จึงไม่ส่งคำสั่งเอง กล่าวได้เพียงเท่านี้ ไม่ได้แปลว่ามันผิดแล้วไม่เป็นอันตราย หาก EA อ่านบัฟเฟอร์แล้วตัดสินใจ ค่าที่คำนวณผิดกลายเป็นเทรดผิดที่ EA ส่ง อย่างไรก็ตาม โครงสร้างที่สะอาดยังเหมือนเดิม อินดิเคเตอร์คำนวณแล้วเปิดผลในบัฟเฟอร์ EA อ่านแล้วตัดสินใจซื้อขาย วิเคราะห์แยกจากดำเนินการและทดสอบแต่ละชั้นได้ หากทดสอบเนื้อหาบัฟเฟอร์ด้วย ไม่ใช่แค่ตรรกะ EA
cTrader แบ่งต่างและเทียบหนึ่งต่อหนึ่งไม่ได้ EA เทียบได้กับ cBot ส่วนอินดิเคเตอร์คืออินดิเคเตอร์ ไม่มีหมวด “สคริปต์” แยก งานครั้งเดียวใช้ cBot ทำในเมธอดเริ่มแล้วหยุดตนเอง
สามข้อผิดที่เสียเวลา:
- คาดให้อินดิเคเตอร์เทรด อินดิเคเตอร์ MetaTrader ไม่มีสิทธิ์ฟังก์ชันซื้อขาย ผลิตภัณฑ์ที่โฆษณาว่า “อินดิเคเตอร์เทรดเอง” จึงไม่ใช่อินดิเคเตอร์หรือมีอีกโปรแกรมรันเบื้องหลัง ซึ่งโค้ดนั้นรับผิดชอบคำสั่งคุณ
- ใช้ EA เมื่องานสคริปต์ก็พอ ปิดทุกสถานะในการรันเดียวเป็นงานสคริปต์ EA บนกราฟจะยังอยู่ ตอบราคาต่อไป และต้องมีคนดู
- รวมก้อนเดียวแทนแบ่งโมดูล โปรแกรมที่รันห้ากลยุทธ์ เฝ้าความเสี่ยงบัญชี วาดกราฟ และส่งแจ้งพร้อมกันวินิจฉัยยากกว่า แยกแต่ละกลยุทธ์กับผู้กำกับความเสี่ยงช่วยให้ปิดเป็นส่วนได้
ก่อนเขียนหุ่นยนต์ ให้เขียนสคริปต์ข้อมูล ไม่ใช่เพราะแบบฝึกเริ่มต้น แต่เพราะโปรแกรมที่จงใจไม่มีการเรียกซื้อขายเลยช่วยตรวจว่าอ่านสัญลักษณ์ ราคา ต้นทุน และเงินที่มีได้ถูก หากอ่านผิด หุ่นยนต์จะตั้งทุกการตัดสินใจบนข้อมูลผิดนั้น
ต่อไปไม่ใช่โปรแกรมให้คอมไพล์ เป็นโครงสร้างลำดับตรวจและชื่อฟังก์ชัน MQL4 ให้ใช้ในงานของตน อย่าวางแล้วรันเป็นไฟล์สำเร็จ ยังไม่ผ่านคอมไพล์หรือทดสอบบัญชีโบรกเกอร์ คอมไพล์ตรวจไวยากรณ์ แต่ไม่ยืนยันค่าที่อ่าน สิทธิ์ หรือพฤติกรรมในสภาพแวดล้อมที่เลือก เก็บลำดับไว้ เขียนให้สมบูรณ์ และตรวจผลในบัญชีทดลอง บันทึกการทดสอบนั้นทำให้ประเมินพฤติกรรมโปรแกรมได้
โครงสร้างคร่าว ๆ - ตรวจสภาพแวดล้อมก่อนเขียนหุ่นยนต์
แนวทางสำหรับ MQL4 ไม่ใช่โค้ดครบที่คอมไพล์ได้
จุดเข้า: OnStart() - ทำครั้งเดียว จบพร้อมฟังก์ชัน
1. symbol := Symbol()
อย่าฝังชื่อ เพราะอักษรท้ายโบรกเกอร์ทำให้ชื่อเปลี่ยน
2. bid, ask := MarketInfo(symbol, MODE_BID / MODE_ASK)
point := MarketInfo(symbol, MODE_POINT)
spread := if point > 0 then (ask - bid) / point
มิฉะนั้น: ยังยืนยันค่าที่อ่านไม่ได้
point เป็นศูนย์คืออ่านข้อกำหนดล้มเหลว ไม่ใช่ spread ศูนย์
สองกรณีนี้ต้องลงบันทึกต่างกัน
3. lotMin := MarketInfo(symbol, MODE_MINLOT)
lotStep := MarketInfo(symbol, MODE_LOTSTEP)
คุณสมบัติตราสารของโบรกเกอร์ ไม่ใช่ค่าคงที่ภาษา
4. ลงบันทึก: symbol, bid, spread, lotMin, lotStep,
OrdersTotal(), AccountFreeMargin()
5. tradePossible := IsTradeAllowed()
ป้ายบันทึก: ซื้อขายได้ในขณะนี้
ไม่ใช่: อนุญาตอัตโนมัติ ดูย่อหน้าถัดไป
สิ่งที่ไม่มีและห้ามมีในโครงนี้:
ไม่มีการเรียก OrderSend, OrderClose หรือ OrderModify
สามสิ่งจากโครงนี้กลับมาในหุ่นยนต์ทุกตัวที่เขียนต่อ ได้แก่ อ่านชื่อสัญลักษณ์จากสภาพแวดล้อมแทนฝังชื่อ อ่านขั้นปริมาณจากข้อกำหนด และตรวจชัดว่าขณะนี้เทรดได้หรือไม่ ข้อสุดท้ายต้องแก้ความเข้าใจลัดที่นิยม IsTradeAllowed() ไม่ได้ตอบแค่ยินยอมอัตโนมัติ เอกสาร MQL4 อธิบายว่าตรวจว่า “Expert Advisor ได้รับอนุญาตให้เทรดและบริบทซื้อขายไม่ถูกใช้อยู่” [15]ดังนั้นผล false อาจหมายถึงไม่มีสิทธิ์หรือบริบทกำลังยุ่ง ซึ่งเป็นชั่วคราวแล้วหายเอง บันทึกผลฟังก์ชันและเหตุที่ตรวจเพิ่มแยกกัน ไม่เช่นนั้นวินิจฉัย “ปิดซื้อขาย” ทั้งที่ไม่ได้ปิด หมวดความขัดข้องจริงจะกลับมาที่ค่าที่อ่านทั้งสามนี้
3. MQL4 กับ MQL5 – สองสภาพแวดล้อม ไม่ใช่สองรุ่นของสิ่งเดียว
คำว่า “MQL5 คือ MQL4 ที่มีฟังก์ชันมากกว่า” ผิดตรงจุดสำคัญในทางปฏิบัติ คือแบบจำลองคำสั่งกับสถานะ ควรลบความเชื่ออีกข้อทันทีว่า MQL4 เป็นภาษาเชิงกระบวนการล้วน เพราะเอกสาร MetaQuotes อธิบายคลาส การสืบทอด ฟังก์ชันเสมือน และเทมเพลต [1]ความต่างจึงไม่ใช่กระบวนทัศน์ แต่เป็นส่วนต่อซื้อขาย วิธีอ่านอินดิเคเตอร์ และวิธีแทนความเสี่ยงที่เปิดอยู่
ชั้นซื้อขาย ใน MQL4 ฟังก์ชันเดียวคือ OrderSend()เปิดสถานะ ส่วน OrderSelect() เปลี่ยนบริบทไปตัวถัดไปในรายการที่คำสั่งรอและสถานะเปิดอยู่ด้วยกัน MQL5 แยกคำสั่ง สถานะ และธุรกรรมอดีต ส่งคำขอโดยเติมโครงสร้างและตรวจโครงสร้างตอบกลับที่มีรหัสเซิร์ฟเวอร์ คลาสไลบรารีมาตรฐานอย่าง CTrade เป็นตัวห่อสะดวกของกลไกนี้ ไม่ใช่โหมดแยก [2].
ชั้นข้อมูล MQL4 เรียกอินดิเคเตอร์แล้วคืนค่าของแท่งที่ระบุ ส่วน MQL5 คืน handle ซึ่งสร้างครั้งเดียว ปกติใน OnInit() และใช้ฟังก์ชันคัดลอกบัฟเฟอร์ดึงค่าไปอาร์เรย์ แปลโค้ดตรงตัวอาจสร้าง handle ใหม่ทุก tick แทนใช้ตัวเดิม คอมไพเลอร์ไม่แจ้ง เพราะผิดที่ตำแหน่งสร้าง ไม่ใช่ไวยากรณ์ เป็นกับดักย้ายระบบคลาสสิกเพราะไม่แสดงทันที
| เกณฑ์ | MQL4 (MetaTrader 4) | MQL5 (MetaTrader 5) |
|---|---|---|
| เขียนเชิงวัตถุ | รองรับ | รองรับ |
| แบบจำลองซื้อขาย | รายการคำสั่งกับสถานะรวมกัน | แยกคำสั่ง สถานะ และธุรกรรม |
| ส่งคำขอ | เรียกครั้งเดียวพร้อมพารามิเตอร์ | โครงสร้างคำขอและคำตอบที่มีรหัสผล |
| อ่านอินดิเคเตอร์ | คืนค่าโดยตรง | สร้าง handle ครั้งเดียว คัดลอกค่าจากบัฟเฟอร์ |
| บันทึกความเสี่ยง | หลายสถานะแยกกันในสัญลักษณ์เดียว | Netting หรือ hedging ตามที่โบรกเกอร์กำหนดบัญชี |
| กรอบเวลามาตรฐาน | 9 | 21 |
| ตัวทดสอบกลยุทธ์ | สัญลักษณ์เดียว | หลายสกุลเงิน forward test แบบสร้าง tick ต่างกัน จำลองความล่าช้า |
| สถานะผลิตภัณฑ์ [ณ 2026-08-22] | ซื้อไลเซนส์ใหม่ไม่ได้ หน้า MetaQuotes สำหรับโบรกเกอร์ระบุว่า “ไลเซนส์แพลตฟอร์ม MetaTrader 4 ไม่พร้อมให้ซื้อแล้ว” [19]ข่าวอุตสาหกรรมรายงานหยุดขายเมื่อ 12 มกราคม 2018 [12]แต่ยังบำรุงรักษาเทคนิค ทะเบียนรุ่นผู้พัฒนามี build 1460 วันที่ 5 มีนาคม 2026 (“ปรับปรุงความปลอดภัยสำคัญ แก้บั๊ก และเพิ่มเสถียรภาพ”) และ build 1470 วันที่ 12 มีนาคม 2026 (“ปรับคำแปลส่วนติดต่อ แก้บั๊ก และเพิ่มเสถียรภาพ”) [21] ส่วน build 1490 วันที่ 2 ตุลาคม 2026 เพิ่มการแก้ไขและปรับจัดการ SL/TP บัญชี FIFO[21]นี่คือดูแลแพลตฟอร์มเดิม ไม่ใช่กลับมาพัฒนาเชิงแนวคิด เรายังไม่พบคำประกาศลงวันที่ที่กำหนดระยะและขอบเขตสนับสนุนของเดิม จึงอย่าตั้งเส้นตายล่วงหน้า | พัฒนาต่อเนื่อง ผู้พัฒนาประกาศว่า “การปรับปรุงเชิงแนวคิดต่อไปจะออกให้แพลตฟอร์มหลายสินทรัพย์นี้เท่านั้น” [19] |
แถวรูปแบบบันทึกต้องขยายเพราะทำให้เสียแบบคาดไม่ถึง Netting คือหนึ่งสถานะสุทธิต่อตราสาร ส่งคำสั่งตรงข้ามไม่ได้เปิดที่สอง แต่ลดหรือกลับด้านของเดิม หุ่นยนต์ย้ายจาก MT4 ที่สมมติหลายสถานะอิสระในสัญลักษณ์เดียวจะเริ่มปิดจุดเข้าของตน โบรกเกอร์กำหนดโหมด จึงไม่ใช่ “ค่าเริ่มต้น MT5” แต่เป็นคุณสมบัติบัญชีที่ต้องตรวจก่อนใช้ และควรอ่านจากโค้ด
เมื่อไรย้ายจึงมีเหตุผล เมื่อของเดิมจำกัดงานจริง เช่น ต้องทดสอบหลายสกุลเงิน forward ใน tester โมเดล tick แม่นขึ้น หรือตราสารที่โบรกเกอร์ไม่มีบน MT4 แค่ “ใหม่กว่า” ไม่ใช่เหตุผล เพราะเขียนชั้นซื้อขายกับอ่านอินดิเคเตอร์ใหม่ทำให้เกิดบั๊กชุดใหม่ในโค้ดที่เคยทำงาน ระยะเวลาขึ้นกับขนาดระบบ ไม่มีตัวเลขที่ให้ได้อย่างตรงไปตรงมา หากย้าย ให้เทียบรายธุรกรรม ไม่ใช่ยอดรวม ยอดตรงแต่รายการต่างคือสองตรรกะบังเอิญให้ผลคล้าย
MT5 มีเพิ่มประสิทธิภาพแบบกระจายที่เสียเงินในเครือข่าย MetaQuotes แต่กำลังมากหมายถึงทดสอบชุดพารามิเตอร์มาก และเพิ่มเสี่ยงฟิตอดีตโดยตรง วิธีแบ่งข้อมูล ต้นทุน และจำนวนแบบทดลองเป็นเรื่องของ บทความบัญชีทดลอง backtesting และ forward testing ซึ่งอธิบายครบที่นั่น
4. cTrader Algo – C#, Python การรันในเครื่องและคลาวด์
ส่วนนี้เสี่ยงเล่าผลิตภัณฑ์เก่ามากสุด เพราะแหล่งเก่าเรียก cAlgo หรือ cTrader Automate และบอกว่าใช้ C# กับรันในเครื่องเท่านั้น ทั้งสองข้อไม่จริงแล้ว
ตามเอกสารทางการ Spotware ชื่อสภาพแวดล้อมคือ cTrader Algo รองรับสร้างอัลกอริทึมด้วยสองภาษา C# และ Python [3]cBot รันในเครื่องหรือคลาวด์ได้ เอกสารคลาวด์ระบุชัดว่ารันในสภาพแวดล้อมแยกที่ cTrader ให้ และแอปผู้ใช้ทั้ง Windows, Mac, มือถือหรือเว็บไม่ต้องเปิดหรือเชื่อมอินเทอร์เน็ตค้าง [4]นี่เปลี่ยนการคำนวณโฮสติ้งทั้งชุดที่กล่าวต่อไป
ขีดจำกัดคลาวด์ ณ 2026-08-22 เอกสารระบุว่าบัญชีจริงรันพร้อมกันได้ถึงสิบอินสแตนซ์ต่อเนื่อง บัญชีทดลองหนึ่งอินสแตนซ์ที่หยุดเองอย่างช้าสุดหลังเจ็ดวัน รวมทั้งระบุว่ากฎอาจต่างตามโบรกเกอร์ และ cBot ที่ใช้แพ็กเกจภายนอกทำงานคลาวด์ได้เมื่อผ่านเงื่อนไขเพิ่ม [4]ถือจำนวนนี้เป็นสถานะผลิตภัณฑ์วันเผยแพร่ และตรวจใหม่ก่อนใช้เป็นฐานสถาปัตยกรรม
โครงสร้าง cBot โปรแกรมสืบทอดคลาสฐานหุ่นยนต์ เมธอดเริ่มตรงกับการตั้งต้นใน MQL การรับราคาถัดไปตรงกับ OnTick()และเมธอดหยุดตรงกับเลิกการทำงาน ความต่างที่ใช้จริงคือรองรับเหตุการณ์แท่งปิดในตัว MetaTrader ต้องตรวจเองโดยเทียบเวลาเปิดแท่งปัจจุบันกับที่จำไว้
Open API ไม่ใช่ REST ควรเขียนให้ชัดเพราะแหล่งรองมักว่า “cTrader มี REST API” เอกสาร Spotware อธิบาย Open API แลกข้อมูลผ่านออบเจ็กต์ JSON หรือ Google Protocol Buffers [5]FIX API เป็นอีกบริการ สิทธิ์ ความพร้อม และเงื่อนไขเชื่อมขึ้นกับโบรกเกอร์ จึงอ่านเอกสารผู้ให้รายจริงก่อนวางแผน ไม่ใช่คำอธิบายแพลตฟอร์มทั่วไป
| เกณฑ์เลือกสภาพแวดล้อม | MetaTrader (MQL4 / MQL5) | cTrader Algo |
|---|---|---|
| ภาษา | MQL4 หรือ MQL5 | C# หรือ Python |
| ตัวแก้ไขและเครื่องมือ | MetaEditor ในแพลตฟอร์ม | ตัวแก้ไขในแอป ใช้ IDE ภายนอกได้ |
| แพ็กเกจภายนอก | ไม่มีตัวจัดการแพ็กเกจ เชื่อมผ่านไลบรารีระบบ | มีให้ และคลาวด์ใช้ได้เมื่อผ่านเงื่อนไขบริการ |
| รันโดยไม่มีคอมตนเอง | โฮสติ้งแพลตฟอร์มหรือ VPS ที่รันเทอร์มินัล | cBot คลาวด์หรือ VPS |
| ส่วนต่อโปรแกรมนอกแพลตฟอร์ม | Python เชื่อมเทอร์มินัล โซลูชันเขียนเอง | Open API (JSON หรือ Protobuf), FIX API แยกต่างหาก |
| ปริมาณโค้ดสำเร็จ | มีจำนวนมาก คุณภาพแตกต่างกันมาก | น้อยกว่าอย่างชัดเจน |
| ความพร้อมใช้ | ขึ้นกับที่โบรกเกอร์ให้ | ขึ้นกับที่โบรกเกอร์ให้ |
เลือกสภาพแวดล้อมไม่ใช่เลือก “แพลตฟอร์มดีกว่า” หากโบรกเกอร์ให้แห่งเดียวก็เลือกแล้ว หากให้ทั้งคู่ ใช้เกณฑ์ปฏิบัติว่าอะไรที่คุณเขียนและรักษาโค้ดซึ่งเข้าใจพฤติกรรมได้ และอยากแก้ความต่อเนื่องอย่างไร ภาษาเองไม่สร้างความได้เปรียบ แต่เปลี่ยนค่าดูแลและจำนวนความผิดระหว่างทาง
Webhook เป็นสะพานสู่ระบบอื่น
เส้นทางที่สองไม่ผ่านโค้ดรันในแพลตฟอร์ม เหตุการณ์ภายนอก เช่น alert ของแพลตฟอร์มกราฟ ส่ง HTTP ไปที่อยู่ตกลง แล้วแอปกลางจึงเปลี่ยนเป็นเรียก API โบรกเกอร์ ห่วงโซ่จึงเป็น เหตุการณ์ → webhook → แอปกลาง → API โบรกเกอร์ → ตรวจสอบ → คำสั่ง → เซิร์ฟเวอร์ตอบWebhook รับผิดเพียงส่งคำขอ การถึงไม่ใช่การดำเนินการ รับได้ถูกไม่บอกว่าปริมาณตรงข้อกำหนด มี free margin หรือเซิร์ฟเวอร์รับคำสั่ง แต่ละตัวกลางเพิ่มความหน่วงและรูปแบบเสียเอง รวมส่งคำขอเดิมซ้ำหลังเชื่อมใหม่ ควรป้องกันที่อยู่ แต่รู้ที่อยู่ต้องไม่ใช้แทนสิทธิ์ ตัวกลางต้องตรวจผู้ส่ง ความสดคำขอ และรหัสเฉพาะ การตั้งแจ้งฝั่งกราฟเป็นเรื่องของ อีกบทความที่นี่สำคัญเพียงว่าสะพานอยู่ตรงไหนของห่วงโซ่และไม่รับประกันอะไร
5. สิทธิ์ คอมไพล์ บันทึก และการระบุสถานะของตน
“หุ่นยนต์ไม่เทรด” เป็นรายงานทั่วไปในอัตโนมัติรายย่อยและอาจไม่เกี่ยวตรรกะ ก่อนดีบักจุดเข้า ตรวจสี่อย่าง คอมไพล์แล้วหรือไม่ ติดกราฟถูกหรือไม่ อนุญาตอัตโนมัติทุกระดับหรือไม่ และบันทึกอะไรจริง
คอมไพล์และที่เก็บไฟล์
ซอร์สใน MetaEditor มีนามสกุลข้อความ แต่ไฟล์ที่ติดกราฟเป็นตัวคอมไพล์ ต้องอยู่โฟลเดอร์ข้อมูลในหมวดย่อยตามชนิด มิฉะนั้นแพลตฟอร์มไม่เห็น เปิดโฟลเดอร์ข้อมูลจากเมนู อย่าสมมติว่าคือโฟลเดอร์ติดตั้งเพราะมักไม่ใช่ คัดลอกแล้วรีเฟรชรายการใน navigator อ่านคำเตือนคอมไพเลอร์ เพราะแปลงชนิดโดยนัยในโค้ดซื้อขายอาจทำให้ปริมาณตัดเป็นศูนย์
การยินยอมอัตโนมัติสามระดับ
ไม่ได้มีสวิตช์เดียว ระดับแรกคือทั้งแพลตฟอร์ม ปุ่มอัลกอริทึมบนแถบเครื่องมือ ระดับสองคือคุณสมบัติโปรแกรมตอนติดกราฟ ระดับสามอยู่นอกมือคือบัญชี โบรกเกอร์อาจห้ามอัตโนมัติบางประเภทหรือห้ามซื้อขายเลย เช่น บัญชีอ่านอย่างเดียว หากไม่ตรวจ หุ่นยนต์รายงานแค่คำสั่งล้มเหลวไม่ชี้สาเหตุ
ถัดไปเป็นโครงอีกแบบไม่ใช่ไฟล์ให้คอมไพล์ คราวนี้ MQL5 แสดงลำดับตรวจสิทธิ์และปรับปริมาณ แต่ไม่ใช่การใช้งานที่ยืนยันแล้ว คอมไพล์อย่างเดียวไม่บอกพฤติกรรมบัญชี ต้องตรวจคำตอบเทอร์มินัล คุณสมบัติสัญลักษณ์ และสิทธิ์ขณะเชื่อมโบรกเกอร์แยก บทความนี้ไม่เสนอผลทดสอบนั้น ใช้เป็นฐานตรวจเอง ไม่ใช่โมดูลเทรดสำเร็จ และไม่มีการเรียกส่งคำสั่ง
โครงสร้างคร่าว ๆ - ตรวจสิทธิ์และปรับปริมาณ
แนวทางสำหรับ MQL5 ไม่ใช่โค้ดครบที่คอมไพล์ได้
A. เทรดได้หรือไม่ - อ่านสี่ค่า แต่ละค่ามีบันทึกของตน
TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)
false -> ปิดอัลกอริทึมในแพลตฟอร์ม
MQLInfoInteger(MQL_TRADE_ALLOWED)
false -> ปิดซื้อขายในคุณสมบัติโปรแกรม
AccountInfoInteger(ACCOUNT_TRADE_ALLOWED)
false -> บัญชีบล็อกซื้อขาย
AccountInfoInteger(ACCOUNT_TRADE_EXPERT)
false -> โบรกเกอร์ไม่อนุญาตอัตโนมัติที่นี่
ซื้อขายได้ต่อเมื่อทั้งสี่เป็น true
ต้องบันทึกว่าตัวใดไม่ผ่าน ไม่เช่นนั้นวินิจฉัยจบแค่
"หุ่นยนต์ไม่เทรด"
B. ปรับปริมาณให้ตรงโครงขั้น
อินพุต: symbol, vol
เอาต์พุต: จำนวนเท่าขั้น หรือ 0.0 หมายถึง "อย่าส่ง"
B1. if not MathIsValidNumber(vol) or vol <= 0.0
-> บันทึกผิดพลาดและคืน 0.0
การเปรียบเทียบทั่วไปไม่กัน NaN อย่างแน่นอน
ตรวจว่าค่าจำกัดชัดก่อนคำนวณ ไม่เช่นนั้นผลยังผิดได้
B2. อ่านข้อกำหนดด้วยรุ่นคืนสถานะ:
SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN, vmin)
SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX, vmax)
SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP, vstep)
ค่าใด false หรือ vstep <= 0.0
-> บันทึก _LastError และคืน 0.0
รุ่นคืนเพียงตัวเลขเงียบเมื่อผิด และคืนศูนย์
ซึ่งแยกจากศูนย์จริงไม่ได้
B3. TOL := 1e-8 คลาดเคลื่อนหารฐานสอง
steps := MathFloor(vol / vstep + TOL)
result := NormalizeDouble(steps * vstep, 8)
เงื่อนไขผลที่ฟังก์ชันสัญญา มีเพียงนี้:
ผลเป็นจำนวนเต็มเท่าของขั้น
ผลเกินอินพุตไม่มากกว่า
TOL * vstep
ไม่ได้รับรองว่าผลจะไม่มีวันเกินอินพุต
B4. if result > vmax
-> result := NormalizeDouble(MathFloor(vmax / vstep + TOL) * vstep, 8)
if result < vmin
-> return 0.0
ลำดับสำคัญ ตรวจขั้นต่ำสูงสุดเฉพาะค่าที่เข้าโครงขั้นแล้ว
ฟังก์ชันที่สองดูเล็กแต่รับผิดชอบการถูกปฏิเสธทั้งประเภท ขั้นปริมาณ ค่าต่ำสุดและสูงสุดเป็นคุณสมบัติตราสารของโบรกเกอร์และต่างระหว่างบัญชี ขนาดที่คำนวณจากความเสี่ยงแทบไม่ลงขั้นพอดี เซิร์ฟเวอร์จะปฏิเสธปริมาณผิด ไม่ปัดให้
รายละเอียดสองข้อควรอธิบาย เพราะเป็นประเภทเดียวกับคำเตือนคอมไพเลอร์ คือโค้ดทำงานแต่ผลเปลี่ยนเงียบ ๆ ข้อแรก ปริมาณได้จากนับจำนวนขั้นเต็มแล้วคูณกลับ ไม่ใช่ปัดจำนวนทศนิยมตายตัว ปัดสองตำแหน่งทำให้ 0.003 เป็นศูนย์บนตราสารขั้น 0.001 ที่พบในบัญชีเซนต์และ CFD บางสัญญา หาจำนวนตำแหน่งด้วยลอการิทึมก็พังหากขั้นไม่ใช่กำลังสิบ เช่น ขั้น 0.25 ปริมาณ 1.75 ถูกปัดเป็น 1.8 ซึ่งไม่ใช่จำนวนเท่าของขั้นและถูกปฏิเสธเหมือนไม่ได้ปรับเลย ข้อที่สอง การหารทศนิยมลอยตัวอาจต่ำกว่าจำนวนเต็มเล็กน้อย หากไม่มีค่าชดเชย การปัดลงเสียหนึ่งขั้นเงียบ ๆ เช่น 0.3 หาร 0.1 ต่ำกว่าสาม ทำให้เข้าสถานะเล็กกว่าที่คำนวณความเสี่ยง จึงตรวจขั้นต่ำและสูงสุดท้ายสุดบนค่าที่เข้าโครงขั้นแล้ว เพราะปัดลงอาจหลุดขั้นต่ำที่เคยผ่าน และตัดสูงสุดก็ต้องอยู่โครงเดียวกัน
แต่ค่าชดเชยมีอีกด้านที่ต้องบอกชัด ไม่รับรองเกินฟังก์ชัน เนื่องจากบวกก่อนปัดลง ผลอาจเกินค่าป้อนเล็กน้อย ปริมาณ 0.2999999995 กับขั้น 0.1 จะคืน 0.3 มากกว่าป้อนห้าส่วนในหมื่นล้านล็อต สำหรับขั้นในตัวอย่างความต่างเล็กจนละได้ แต่ต้องประกาศตรงว่า ผลเป็นจำนวนเท่าขั้นและเกินป้อนไม่เกินความคลาดเคลื่อนที่ยอมรับ นี่เป็นขอบเขตเลือกตั้งใจ เพราะถ้าไม่ทำ โค้ดเดียวกันเสียหนึ่งขั้นเต็มที่ 0.3 ยังต้องกันสองเรื่องแยกซึ่งลืมง่าย คือค่าป้อนที่ไม่เป็นจำนวนจำกัดซึ่งเปรียบเทียบธรรมดากันไม่แน่นอน และการอ่านข้อกำหนดล้มเหลว โครงจึงใช้ MathIsValidNumber() กับอินพุต และใช้ SymbolInfoDouble() รุ่นคืนสถานะแทนคืนตัวเลขอย่างเดียว เพราะรุ่นหลังคืนศูนย์เมื่อผิดซึ่งแยกจากศูนย์จริงไม่ได้
บันทึก – ร่องรอยพื้นฐานวินิจฉัยหลังเสีย
แพลตฟอร์มมีบันทึกแยกและการแยกมีประโยชน์ แท็บบันทึกโปรแกรมเก็บสิ่งที่โค้ดพิมพ์กับข้อความเริ่มและเอาออก บันทึกแพลตฟอร์มเก็บเหตุโครงสร้าง เช่น ล็อกอิน ตัดต่อเครือข่าย คำขอส่งและคำตอบเซิร์ฟเวอร์ ตัวทดสอบมีของตน สำเนาเขียนลงไฟล์ในโฟลเดอร์ข้อมูลจึงอยู่หลังรีสตาร์ต และเพราะมีสำเนานี้จึงสร้างลำดับเหตุขัดข้องกลางคืนกลับได้
ขั้นต่ำที่หุ่นยนต์ควรบันทึกเอง ได้แก่เวลาตัดสินใจพร้อมราคาและสเปรด พารามิเตอร์ที่ส่ง รหัสตอบเซิร์ฟเวอร์ ราคาดำเนินจริง การแก้ระดับทุกครั้ง และการกระตุ้นป้องกันทุกครั้ง หากไม่มีราคาและรหัสตอบ จะแยกตรรกะผิดกับโบรกเกอร์ปฏิเสธไม่ได้ ทั้งที่ต่างปัญหา
ควรตั้งความต่างนี้ก่อนเพราะกลับมาในหมวดเสีย บันทึกเป็นหลักฐานวินิจฉัยพื้นฐานว่าทำและเห็นอะไรขณะนั้น แต่ไม่ใช่แหล่งตัดสินการดำเนินคำสั่ง แหล่งนั้นคือสภาพบัญชีกับประวัติธุรกรรมบนเซิร์ฟเวอร์ ความต่างเลิกเป็นทฤษฎีเมื่อจำเป็น เครือข่ายขาดอาจทำให้ล็อกจบที่ส่งผิดพลาด ขณะที่เซิร์ฟเวอร์ทำธุรกรรมแล้ว หากขัดกัน ฝั่งเซิร์ฟเวอร์ตัดสิน
ระบุสถานะของตน
หุ่นยนต์ต้องตอบได้ว่า “สถานะนี้ของฉันหรือไม่” บัญชีอาจมีทั้งเปิดมือ หุ่นยนต์อื่น และกลยุทธ์เดียวกันบนอีกสัญลักษณ์ ใช้รหัสตัวเลขที่แนบตอนส่ง ใน MetaTrader ทั้งสองเรียก magic number และช่อง comment กฎง่ายคือทุกลูปสถานะกรองทั้งรหัสและสัญลักษณ์ ไม่ใช้สัญลักษณ์อย่างเดียว
ละตัวกรองแล้วเจ็บ หุ่นยนต์อาจปิดสถานะมือ สองตัวรหัสเดียวกันแก้ระดับกันเอง บัญชี netting ยากกว่าเพราะสถานะสุทธิไม่มีเจ้าของรายเดียว จึงต้องบันทึกส่วนความเสี่ยงที่จัดให้ตน และสร้างกลับหลังรีสตาร์ตจากประวัติ ไม่ใช่สภาพปัจจุบัน
6. รายการความขัดข้องจริง – จากเชื่อมต่อใหม่ถึงข้อกำหนดสัญลักษณ์เปลี่ยน
บางปัญหาเป็นเรื่องสภาพแวดล้อมรันไม่ใช่กฎกลยุทธ์ Backtest ปกติไม่จำลองทุกสถานการณ์ บางอย่างต้องทดสอบเสียแยก รายการนี้ไม่ใช่เรื่องพิสดาร แต่เป็นสิ่งต้องพร้อมเมื่อรันหลายเดือน
| ปัญหา | อาการ | ป้องกันในโค้ดหรือขั้นตอน |
|---|---|---|
| เชื่อมใหม่หลังสายขาด | ความจำยังอยู่ แต่คำขอที่ส่งก่อนขาดยังไม่รู้ผลว่าไปถึงและทำแล้วหรือไม่ | หลังคำขอไม่ยืนยันทุกครั้ง ให้อ่านสถานะและประวัติปัจจุบันโดยกรองรหัสตนก่อนลองใหม่ |
| คำสั่งซ้ำ | สองสถานะเหมือนกันเปิดห่างไม่กี่วินาที | ตรวจความเสี่ยงเดิมก่อนส่ง ล็อกเวลา และรหัสถาวรต่อหนึ่งการตัดสินใจ ไม่ใช่ magic number อย่างเดียว |
| ราคาเก่า | ตัดสินบนราคาเมื่อสิบกว่าวินาทีก่อน เซิร์ฟเวอร์ปฏิเสธ | ตรวจเวลาราคาล่าสุดก่อนตัดสิน ยอมงดแทนลองซ้ำไม่ดู |
| สัญลักษณ์หรืออักษรท้ายผิด | ไม่เห็นตราสารหรือทำงานกับคนละตัว | อ่านสัญลักษณ์จากกราฟ ตรวจพร้อมใช้ใน OnInit() |
| ขั้นปริมาณไม่ตรง | ปฏิเสธเพราะปริมาณผิด | ปรับตามขั้น ตรวจขั้นต่ำและสูงสุด |
| ไม่จัดการรหัสตอบ | ถือคำสั่งถูกปฏิเสธว่าทำแล้วและนับสถานะที่ไม่มี | ตรวจทุกผล บันทึกรหัส และจำกัดจำนวนลองซ้ำ |
| รีสตาร์ตหรือตั้งต้นโปรแกรมใหม่ | ตรงนี้ความจำจึงหาย ตัวนับขาดทุนรายวันเริ่มใหม่ ยอดสูงสุดเริ่มใหม่ ระดับที่เฝ้าในโค้ดหยุดเฝ้า | เก็บสภาพถาวรและสร้างใหม่ตอนเริ่มจากสถานะกับประวัติ ไม่ใช่ตัวแปร ระดับสำคัญอยู่เซิร์ฟเวอร์ |
| ข้อกำหนดตราสารเปลี่ยน | ระยะขั้นต่ำ ขั้นปริมาณ หรือเวลาซื้อขายเปลี่ยน | อ่านตอนตั้งต้นและเป็นรอบ แทนค่าคงที่ฝังโค้ด |
| เปลี่ยนนาฬิกาและเวลาเซิร์ฟเวอร์ | ตัวกรองเลื่อนหนึ่งชั่วโมงหลังเปลี่ยนเวลา | ใช้เวลาเซิร์ฟเวอร์ แปลงเขตเวลาชัด และทดสอบจุดเปลี่ยนนาฬิกา |
| อัปเดตแพลตฟอร์มหรือระบบ | รีสตาร์ตกลางช่วง กราฟกับโปรแกรมกลับตามโปรไฟล์แต่ตั้งต้นใหม่ และอัตโนมัติอาจไม่เปิดหลังเริ่ม [24] | อัปเดตนอกเวลาซื้อขาย คืนชุดกราฟอัตโนมัติ และตรวจแยกหลังรีสตาร์ตว่าเปิดอัตโนมัติหรือไม่ |
| ดิสก์เต็มหรือโปรเซสล้ม | เขียนบันทึกหยุด โปรแกรมจบไร้ร่องรอย | หมุนไฟล์บันทึก ตรวจทรัพยากรและโปรเซสพร้อมแจ้ง |
สถานการณ์ให้จำลองเอง: คำสั่งซ้ำหลังเชื่อมใหม่
อธิบายแยกเพราะกดครั้งเดียวให้เกิดตามต้องการไม่ได้ กองบรรณาธิการไม่ได้จำลองเหตุนี้ ข้อความต่อไปจึงไม่มีผลวัดหรือบันทึกสภาพแวดล้อมที่วัด มีเพียงกลไกและคำแนะนำตรวจเอง
เงื่อนไข หุ่นยนต์พบจุดเข้าและส่งขอเปิด ขณะรอคำตอบสายขาด คำสั่งถึงและทำแล้ว แต่คำตอบไม่กลับเทอร์มินัล หุ่นยนต์บันทึกผิดพลาดและสรุปว่าไม่มีสถานะ
ผลที่คาด หากกลับมาแล้วเงื่อนไขยังจริง จะส่งใหม่ บัญชี hedging มีสองแทนหนึ่งและเสี่ยงจริงสองเท่า บัญชี netting บันทึกต่างแต่ความเสี่ยงเพิ่ม สถานะสุทธิโตแต่หุ่นยนต์ยังเห็นว่าเข้าเดียว นี่เป็นข้ออนุมานจากกลไก ไม่ใช่ค่าที่อ่านจากการทดลองแล้ว
ตรวจเองอย่างไร ปิดการ์ดเครือข่าย “หลังส่งพอดี” ไม่ใช่ขั้นตอนแต่สุ่ม เพราะควบคุมไม่ได้ว่าคำขอถึงหรือยัง หากไม่ถึงคุณจำลองอีกกรณีคือส่งล้มเหลวธรรมดา บัญชีทดลองใช้กฎ firewall หรือเครื่องมือวินิจฉัยตัดอย่างควบคุมได้ แต่ยืนยันว่าส่งไม่พิสูจน์การดำเนิน กรณีนี้เกิดก็ต่อเมื่อประวัติเซิร์ฟเวอร์ยืนยันทำแล้วแต่เทอร์มินัลไม่รับคำตอบ ตัวทดสอบไม่จำลองจึงต้องลองมือและต้องบันทึก จดทุกข้อข้างล่าง ขาดข้อใดผลตัดสินไม่ได้และเทียบครั้งที่สองไม่ได้:
- แพลตฟอร์ม เวอร์ชันเทอร์มินัล และ build อ่านหน้าข้อมูล ไม่ใช่จำ
- โบรกเกอร์ หมายเลขบัญชีทดลอง เซิร์ฟเวอร์ที่เชื่อม และประเภท hedging หรือ netting เพราะผลขึ้นกับมัน
- สัญลักษณ์พร้อมอักษรท้ายครบ ปริมาณคำขอ และโหมดดำเนินของตราสาร
- วันเวลาทดลองตามเซิร์ฟเวอร์ ไม่ใช่เวลาท้องถิ่น
- วิธีตัดและจังหวะที่มีผลเทียบการส่ง เป็นพารามิเตอร์เดียวที่ตัดสินว่าเป็นกรณีนี้หรืออีกแบบ
- ผล คือบันทึกหุ่นยนต์เต็มเทียบประวัติฝั่งเซิร์ฟเวอร์ ประวัติชี้ว่าถึงหรือไม่ บันทึกเทอร์มินัลไม่พอเพราะความไม่รู้ของมันคือสิ่งศึกษา
- จำนวนครั้งลองและกี่ครั้งได้ผลเดียวกัน ครั้งเดียวไม่พิสูจน์อะไร
อีกเรื่องต้องแก้เพราะมักถูกยกเป็นสูตร magic number ระบุกลยุทธ์ ไม่ใช่เจตนาคำสั่งหนึ่ง คำขอสองครั้งจากหุ่นยนต์เดียวมีเลขเดียว จึงไม่ตอบว่า “คำสั่งนี้ส่งแล้วหรือยัง” ต้องมีรหัสถาวรต่อหนึ่งการตัดสินใจ ให้และจดก่อนส่ง เก็บนอกความจำโปรเซส จึงแยก “ไม่ได้ส่ง” กับ “ส่งแล้วไม่รู้ผล” เมื่อตรวจสภาพได้ Comment เป็นที่ส่งติดคำสั่งตามธรรมชาติ แต่อาจถูกตัดหรือเขียนทับโดยเซิร์ฟเวอร์ ให้ถือเป็นเบาะแสแล้วตัดสินจากบันทึกตนเทียบประวัติ
การป้องกัน กฎง่ายและไม่สะดวก สภาพบัญชีคือแหล่งจริง ไม่ใช่ความจำหุ่นยนต์ หลังคำขอล้มเหลวหรือไม่ยืนยัน ก่อนลองใหม่ต้องอ่านสถานะปัจจุบันกับธุรกรรมล่าสุด กรองรหัสตนดูว่ามีคำสั่งแล้วหรือไม่ ล็อกเวลาระหว่างส่งบนสัญลักษณ์เดียวเป็นของเพิ่มราคาถูก แต่ไม่พอเอง
หลักเดียวกันปิดอุบัติเหตุอีกแบบ คือหุ่นยนต์ไม่ตรวจความเสี่ยงเดิมแล้วส่งทุกครั้งที่เรียกในตลาดเร็ว เกิดคำสั่งถล่มและอาจถูกโบรกเกอร์จำกัดเซิร์ฟเวอร์ ตรวจสภาพก่อนส่งและจำกัดจำนวนต่อเวลาเป็นสองเงื่อนไขที่ขาดไม่ได้ก่อนออกจากเดโม
7. ความต่อเนื่อง: คอมพิวเตอร์ VPS โฮสติ้งแพลตฟอร์ม และคำนวณต้นทุน
อัตโนมัติ MetaTrader แบบดั้งเดิมต้องเปิดเทอร์มินัล นี่เป็นเหตุเดียวที่คุยโฮสติ้ง ไม่ใช่เร็วหรือ “มืออาชีพ” แต่โปรเซสปิดไม่คำนวณ ข้อยกเว้นคือ cTrader Algo คลาวด์ cBot ที่ผ่านเงื่อนไขอาจไม่ต้องมี VPS ภายนอก คำขยายสำคัญเพราะระบบเดียวกันรันในเครื่องได้ แล้วคำถามโฮสติ้งกลับมาครบ ขีดจำกัดอินสแตนซ์ขึ้นกับบัญชีและโบรกเกอร์ ส่วนแพ็กเกจภายนอกต้องผ่านเงื่อนไขเพิ่ม
คอมพิวเตอร์บ้านนำอะไรเข้ามา ไฟดับ รีสตาร์ตหลังอัปเดต สายผู้ให้เน็ตเสีย ระบบค้าง ทุกเหตุหยุดสภาพแวดล้อมและตรรกะทั้งหมด แต่ไม่หยุด SL/TP บนเซิร์ฟเวอร์ นี่คือขอบเขตที่ต้องรู้เพื่อประเมินสิ่งที่เสียจริงระหว่างล่ม
VPS ไม่ทำอะไร ไม่ปรับกลยุทธ์ ไม่ลบ slippage หรือการปฏิเสธ ไม่ป้องกันโบรกเกอร์เสียหรือสายถึงผู้ให้สภาพคล่องขาด ไม่รับประกันต่อเนื่อง ตัวเลขพร้อมใช้เป็นคำมั่นสัญญา ไม่ใช่กฎฟิสิกส์ คุณซื้อเพียงเอาฮาร์ดแวร์และเน็ตของตนออกจากเหตุล้มเหลว

สองผลิตภัณฑ์ต่างกันในชื่อเดียว
คำว่า “VPS” ใช้กับสองวิธีที่ดูแลต่างกันสิ้นเชิง
เซิร์ฟเวอร์เสมือนพร้อมระบบปฏิบัติการเต็ม เช่าเหมือนคอมปกติในศูนย์ข้อมูล เข้า remote desktop ลงแพลตฟอร์มเอง ดูอัปเดต autostart การเฝ้าระบบและสำรองเอง มีอิสระเต็มที่จะรันหลายแพลตฟอร์ม สคริปต์กำกับ หรือเครื่องมือวินิจฉัย และรับผิดชอบดูแลเต็มรวมความปลอดภัยรีโมต
โฮสติ้งในแพลตฟอร์ม ต่างออกไป MetaTrader VPS เริ่มจากในแพลตฟอร์มและย้ายสภาพแวดล้อมด้วยคำสั่งเดียว โฮสต์ระบบอัตโนมัติที่รันกับการสมัครคัดลอกสัญญาณ ไม่ต้องดูแล Windows หรือเข้า remote desktop [6]ความง่ายมีราคา ลงซอฟต์แวร์ใดก็ไม่ได้และใช้ทรัพยากรตามกรอบ
คำนวณต้นทุนโครงสร้างด้วยตัวอย่างชัด
ใช้ราคาข้างต้นเพื่อให้ตรวจสอบได้ ไม่ใช่แค่ภาพสมมติ จ่ายปีต้นทุน 12 × 10 USD = 120 USD ต่อปีจ่ายเดือน 12 × 15 USD = 180 USD ต่อปี.
| ขนาดบัญชี | 120 USD ต่อปี | 180 USD ต่อปี |
|---|---|---|
| 2,000 USD | 6.00% | 9.00% |
| 10,000 USD | 1.20% | 1.80% |
| 25,000 USD | 0.48% | 0.72% |
จำกัดข้อสรุปที่ตัวอย่าง บัญชีราว 2,000 USD จ่ายโฮสติ้งอย่างเดียวหลายเปอร์เซ็นต์ทุนต่อปีก่อนสเปรดและคอมมิชชัน แข่งกับผลคาดหวังสมจริง บัญชีใหญ่สิบเท่าบริการเดียวกินสัดส่วนหนึ่งในสิบ ไม่ได้แปลว่า VPS “คุ้ม” หรือ “ไม่คุ้ม” สำหรับคนอื่น แค่ต้องคำนวณเทียบทุนตนไม่ใช่ราคาหน้าเว็บ
เลือกข้อกำหนดและนำใช้
หุ่นยนต์ซื้อขายอย่างเดียวใช้ไม่มาก ภาระมาจาก optimize ใน tester ซึ่งทำที่อื่นได้ คำเตือนก่อนตารางสำคัญกว่าเนื้อหา ตัวเลขเป็นตัวอย่าง ไม่ใช่ผลวัดบทความหรือข้อกำหนดผู้พัฒนา มีไว้บอกสิ่งต้องตรวจ วัดเองโดยรันเป้าหมายเดโมหลายวัน อ่านจุดสูงสุดหน่วยความจำกับ CPU ของโปรเซสจาก task manager แล้วค่อยเลือกเครื่อง
| พารามิเตอร์ | จุดเริ่ม | หมายเหตุ |
|---|---|---|
| หน่วยความจำ | 2 GB ต่อแพลตฟอร์มที่มีกราฟไม่กี่ใบ | อินดิเคเตอร์ตนกับประวัติยาวเพิ่มการใช้ ต้องวัดเอง |
| หน่วยประมวลผล | 1–2 คอร์สำหรับเทรดอย่างเดียว | คอร์มากสำคัญกับ optimize ไม่ใช่รันระบบ |
| ดิสก์ | SSD พร้อมพื้นที่เผื่อบันทึกกับประวัติ | บันทึกโต ต้องหมุนไฟล์ |
| ระบบ | ตรงความต้องการแพลตฟอร์ม | ชั้นเข้ากันได้บน Linux ต้องตรวจเวอร์ชัน OS, Wine แพลตฟอร์ม และส่วนเสริมที่เลือก ผู้พัฒนามีวิธีติดตั้ง |
| ตำแหน่ง | ใกล้ศูนย์ข้อมูลเซิร์ฟเวอร์โบรกเกอร์ | ถามที่ตั้งเซิร์ฟเวอร์บัญชีก่อนเลือก |
| พร้อมใช้งาน | ตามสัญญา | 99.5% กับ 99.9% เทียบหยุดราว 44 และ 9 ชั่วโมงในปี 365 วัน |
ตลาดผู้ให้แบ่งสามหมวด ต่างไม่ใช่ราคาแต่ผู้รับต้นทุนดูแล โฮสต์โบรกเกอร์อาจให้เงื่อนไขพิเศษตามกิจกรรม สะดวกแต่ผูกกับรายเดียว ผู้เชี่ยวชาญเทรดวางเครื่องในศูนย์ที่โบรกเกอร์ FX ใช้ คลาวด์ทั่วไปให้คุณตั้งทั้งหมด ผมจงใจไม่ให้ชื่อบริษัท เพราะที่ตั้ง เงื่อนไขและการมีบริการเปลี่ยนเร็วกว่าบทความ และรายชื่อในเนื้อหาศึกษากลายเป็นคำแนะนำง่าย
เช็กลิสต์ติดตั้งโฮสติ้ง:
- รันทุกอย่างในเดโม ไม่กำหนดวันตายตัว แต่จนผ่านสามเหตุ บังคับรีสตาร์ต ขาดแล้วกลับเชื่อม และตลาดปิดเปิดสุดสัปดาห์ แล้วจึงเปลี่ยนบัญชี
- ตั้งอัปเดตนอกเวลาซื้อขายและตรวจหลังบังคับรีสตาร์ต
- ตั้งเปิดแพลตฟอร์มอัตโนมัติและคืนกราฟพร้อมโปรแกรม
- ตรวจแยกว่าหลังรีสตาร์ตเปิดอัตโนมัติอีกหรือไม่ โปรแกรมเปิดไม่รับรอง
- เฝ้าเครื่องและแยกเฝ้าโปรเซสแบบอิสระ ping อย่างเดียวไม่จับแอปค้าง
- ปิดดับจอกับสลีป ตั้งหมุนล็อก และเฝ้าพื้นที่ดิสก์
- ป้องกันรีโมตด้วยรหัสผ่านแข็งแรงเฉพาะและหลายปัจจัยหากมี จำกัดที่อยู่ถ้าได้
- สำรองเทมเพลตกับพารามิเตอร์ อย่าเก็บข้อมูลเข้าบัญชีใน config หรือโน้ต ใช้ตัวจัดการรหัสผ่าน
- วางขั้นตอนเมื่อเสียเครื่อง จะคืนค่าจากไหนและนานเท่าไร
ข้อสุดท้ายถูกข้ามบ่อย โฮสต์ไม่เป็นตัวป้องกันจนรู้เวลาสร้างคืนหลังสูญเสีย และเคยทดสอบในเวลาสงบ
8. ความล่าช้า – วัดอะไรกันแน่และผลวัดไม่บอกอะไร
“Ping 2 ms” ไม่ได้แปลว่า “คำสั่งดำเนินใน 2 ms” ควรอ่านสองครั้งเพราะการขายโครงสร้างเทรดมักพรางความต่างนี้ ห่วงโซ่มีหลายช่วง ต้องใช้เครื่องมือและความแม่นยำต่างกันวัดแยก
| ช่วง | ครอบคลุม | วิธีวัด |
|---|---|---|
| Ping เครือข่าย | แพ็กเก็ตไปกลับถึงโฮสต์ | เครื่องมือระบบ บอกเครือข่ายไม่ใช่แอป |
| เทอร์มินัล – เซิร์ฟเวอร์โบรกเกอร์ | เวลาไปกลับระดับโพรโทคอลแพลตฟอร์ม | ตัวชี้การเชื่อมต่อในแพลตฟอร์ม รวมชั้นแอปแล้ว |
| ส่งและรับคำขอ | จากเรียกฟังก์ชันถึงคำตอบเซิร์ฟเวอร์ | เวลาในบันทึกหุ่นยนต์ |
| ที่สังเกตได้ตลอดเส้นทาง | จากเรียกฟังก์ชันส่งฝั่งคุณถึงเห็นธุรกรรมในประวัติ รวมส่งสองทางและประมวลผลฝั่งโบรกเกอร์ | จับไปกลับด้วยตัวนับละเอียดในเครื่อง จดเวลาเทรดจากประวัติเซิร์ฟเวอร์แยก แยกเวลาดำเนินภายในไม่ได้หากไม่มี telemetry ของโบรกเกอร์ |
| ความช้าข้อมูลตลาด | อายุราคาที่ใช้ตัดสินใจ | เวลาราคาล่าสุดที่อ่านจากโค้ดขณะตัดสิน |
คำอ้างผู้โฮสต์เกือบทั้งหมดหมายถึงช่วงแรกหรือสอง เมื่อ MetaQuotes ระบุ MetaTrader VPS ถึง 96% ของเซิร์ฟเวอร์โบรกเกอร์ต่ำกว่า 10 ms [6]นั่นอธิบายช่วงเครือข่าย ไม่สรุปเวลาที่โบรกเกอร์ทำธุรกรรมจริง เพราะขึ้นกับนโยบายดำเนิน สภาพคล่องที่มี และภาระขณะนั้น
ผลวัดเดียวที่เกี่ยวบัญชีคุณ มาจากข้อมูลตน จดสามเวลากับสองราคา ได้แก่จังหวะตัดสินพร้อมราคาที่เห็น จังหวะส่ง และเวลาและราคาดำเนินที่อ่านคำตอบเซิร์ฟเวอร์ หลังมีชุดเทรดนานพอจะได้การกระจาย ไม่ใช่เลขเดียวหน้าเว็บ ดูการกระจายไม่ใช่เฉลี่ย เพราะบางรายการช้าตอนข่าวหรือสภาพคล่องบางมีน้ำหนักกว่ามัธยฐานช่วงสงบ
ข้อควรระวังหนึ่งกำหนดว่าการวัดมีความหมายหรือไม่ สองเวลาแรกมาจากนาฬิกาเครื่องคุณ ส่วนเวลาในประวัติมาจากเซิร์ฟเวอร์ หักกันคือผสมสองนาฬิกาและเพิ่ม offset ไม่ทราบที่ซ่อนในผล จึงวัดไปกลับในเครื่องด้วยตัวนับละเอียดตัวเดียว จากเรียกส่งถึงรับตอบ จดเวลาเทรดฝั่งเซิร์ฟเวอร์เป็นอีกปริมาณ ไม่ใช่อีกปลายช่วงเดียวกัน หากไม่มี telemetry จะไม่รู้เวลาภายในโบรกเกอร์ วัดทั้งก้อนแล้วเทียบข้ามช่วงได้ แต่แยกเป็นขั้นไม่ได้
ความไวของตรรกะเองใช้ตัวทดสอบ MetaTrader 5 ที่จำลองความล่าช้าและโมเดล tick ต่างกัน รวม tick จริงจากโบรกเกอร์ได้ [7]ไม่ใช่วัดการเชื่อมต่อคุณ แต่ตรวจว่ากลยุทธ์รอดเงื่อนไขแย่ลงหรือไม่ วิธีเต็มอยู่ใน บทความทดสอบกลยุทธ์.
เมื่อไรจึงสำคัญ
คำตอบมาจากคำนวณไม่ใช่ความเชื่อ ต้นทุนคงเดิมกินสัดส่วนมากเมื่อเทรดเฉลี่ยเล็กลง ต่อไปเป็นตัวอย่างสมมติต้นทุนรวม 2.0 pipsจากสเปรด คอมมิชชันแปลง pips และ slippage ทั่วไป ต้นทุนจริงอ่านข้อกำหนดและเทรดตน ความล่าช้าไม่อยู่ในผลรวมและไม่ควรอยู่ เพราะเป็นพารามิเตอร์วิธีดำเนิน ไม่ใช่ต้นทุน pips ตารางจึงไม่วัดหรือให้ข้อยุติเกี่ยวกับมัน
| เป้าหมายเทรด | สัดส่วนต้นทุน | ความหมาย |
|---|---|---|
| 5 pips | 40% | ต้นทุนเทรดครองผล กินสองในห้าของเป้าแล้ว |
| 10 pips | 20% | การดำเนินยังสำคัญ ต้องวัดข้อมูลตน |
| 20 pips | 10% | ผลชัดแต่ไม่ชี้ขาด |
| 50 pips | 4% | ต้นทุนต่อครั้งเลิกเป็นปัจจัยชี้ขาด |
ระบบเป้าหลายสิบ pips ควรตรวจว่าความหน่วงกระทบจริงก่อนจ่ายลด หากเป้าไม่กี่ pips ความหน่วงและ slippage เป็นปัญหากลยุทธ์ ไม่ใช่โฮสต์ ไม่มีเซิร์ฟเวอร์แก้ให้
พารามิเตอร์ป้องกันเงื่อนไขดำเนินแย่
สองกลไกต้องอยู่โค้ด ข้อแรกฟิลเตอร์สเปรด เปรียบเทียบก่อนทุกการตัดสิน หากเกินให้ระงับเปิด กำหนดเป็นเท่าของสเปรดปกติของตราสารในเวลาที่เทรด ไม่ฝังคงที่ เพราะเกณฑ์เดียวไม่เหมาะกับอีกสัญลักษณ์และโบรกเกอร์
ข้อสองมักถูกเรียกว่าเพดานราคาครอบจักรวาล ซึ่งไม่ใช่ ส่วนเบี่ยงเบนราคาสูงสุดตอนส่งอยู่ในโหมดเดียว คู่มือ MetaTrader 4 สรุปว่า “ใช้ส่วนเบี่ยงเบนตอนส่งเฉพาะโหมด instant execution” [18]หน้าเดียวอธิบายการทำงานตรงข้ามคำว่า “ป้องกัน slippage” คือ “ถ้าเบี่ยงเบนต่ำกว่าหรือเท่าที่กำหนด จะทำที่ราคาใหม่โดยไม่แจ้งเพิ่ม มิฉะนั้นโบรกเกอร์ส่งราคาใหม่ที่ทำได้กลับ” [18]ราคาที่เปลี่ยนในกรอบจึงทำที่ราคาใหม่ไม่แจ้ง ส่วน requote หรือราคาใหม่ให้ยืนยันเกิดเมื่อเกินเท่านั้น โหมด market ไม่มีช่องนี้ คู่มือ MetaTrader 5 อธิบายสำหรับ Instant Execution แต่ Market Execution ตรงข้ามว่า “โบรกเกอร์ตัดสินราคาดำเนินโดยไม่ปรึกษาเพิ่มกับผู้เทรด” และ “ส่งในโหมดนี้คือยินยอมล่วงหน้าให้ทำราคานั้น” [11]ราคาจึงเป็นโบรกเกอร์กำหนด ส่งคือยินยอมก่อน และแบบฟอร์มมี Fill Policy แทน deviation
โบรกเกอร์กำหนดโหมดแยกแต่ละสัญลักษณ์ คำถามแรกไม่ใช่ “ใส่เท่าไร” แต่ “ใช้กับตราสารฉันหรือไม่” ซึ่งดูข้อกำหนด หากใช้ได้ คุณเลือกระหว่างสองต้นทุน แคบหมายถึง requote บ่อยและไม่สำเร็จครั้งแรก กว้างหมายถึง requote น้อยแต่ทำราคาต่างจากตอนตัดสินมากขึ้น จึงเป็นส่วนกลยุทธ์ ไม่ใช่ค่าเทคนิค หากใช้ไม่ได้เหลือเพียงจดส่วนต่างราคาตัดสินกับดำเนินจริง ซึ่งควรจดทั้งสองกรณี
กลไกที่สามง่ายสุดคือเวลาที่ไม่เปิดใหม่ rollover และข่าวสำคัญเป็นเวลาสเปรดกว้างสภาพคล่องบาง บล็อกเข้าใช้ไม่กี่บรรทัด แต่ต้องนับเวลาเซิร์ฟเวอร์ไม่ใช่เครื่อง และทดสอบขอบเปลี่ยนนาฬิกา
9. Kill switch ขีดจำกัด และมาตรฐานขั้นต่ำก่อนใช้งาน
หุ่นยนต์ไม่มีตัวหยุดมีโอกาสขาดทุนไร้ขีดจำกัดภายในมาร์จินที่มี ไม่ใช่เขียนแย่ แต่ไม่มีเงื่อนไขหยุด Kill switch ไม่ใช่ของเพิ่ม เป็นเงื่อนไขให้เรียกว่าระบบจัดการ ไม่ใช่โปรแกรมปล่อยเอง
ขีดจำกัดที่อัตโนมัติบนบัญชีจริงทุกตัวควรมี:
- จำกัด drawdown ของ equity เมื่อหลุดจากยอดสูงสุดเกินเกณฑ์ ปิดสถานะตน อ่านบัญชียืนยันว่าไม่เหลือ แล้วจึงหยุด หากเหลือต้องทำงานต่อและเตือน ขนาดเกณฑ์มาจากแผนความเสี่ยงที่ใช้ วิธีกำหนดอยู่ในเนื้อหาความเสี่ยงที่นี่สำคัญว่ามีในโค้ดและตรวจก่อนตรรกะกลยุทธ์
- ขาดทุนรายวัน รีเซ็ตตามเวลาเซิร์ฟเวอร์ที่กำหนด สร้างคืนหลังเริ่มใหม่จากประวัติ ไม่เก็บแค่ความจำ
- จำกัดจำนวนสถานะ เพดานแข็งไม่ขึ้นตรรกะเข้า
- จำกัดขนาดหนึ่งสถานะ ใช้เพดานครอบผลของ การคำนวณขนาดสถานะเพื่อไม่ให้คำนวณผิดกลายเป็นคำสั่งปริมาณเกินสัดส่วน
- ฟิลเตอร์สเปรด และส่วนเบี่ยงเบนราคาสูงสุดหากโหมดตราสารมี ทั้งคู่อธิบายก่อนหน้า
- ฟิลเตอร์เวลา ช่วงที่ไม่เปิดใหม่
- ตอบปัญหาการเชื่อมต่อ พบสายขาดหรือราคาเก่าให้หยุดเปิด แต่ไม่ปิดของเดิมมั่ว เพราะปิดจากราคาเก่าอาจแย่กว่ารอ
ลำดับสำคัญ ตรวจปลอดภัยต้นตัวรับเหตุการณ์ก่อนตรรกะเข้า หากผิดห้ามเปิดหรือเพิ่มความเสี่ยง ทำได้เพียงปิดของตนและบันทึก กลับมาทำต้องตัดสินใจโดยมนุษย์ ห้ามกลับเองหลังรอเวลา
เงื่อนไขหยุด: equity ปัจจุบัน < equity สูงสุด × (1 − drawdown ที่ยอมรับ) → บันทึก → ปิดของตน → นับความเสี่ยงตนใหม่ → เอาโปรแกรมออกต่อเมื่อสถานะศูนย์และข้อผิดพลาดปิดศูนย์ → ไม่เช่นนั้นเตือนและทำงานต่อ
นี่เป็นโครงสุดท้ายและตัวเดียวที่แตะฟังก์ชันปิด จึงมีสองด่านในค่าเริ่มต้น ไม่ใช่คอมเมนต์ ข้อแรกเปิด dry-run เป็นค่าเริ่ม ไม่ส่งการกระทำ แค่จดว่าจะปิดอะไร ข้อสองอ่านประเภทบัญชีก่อนราคาแรก และบัญชีไม่ใช่เดโมจะไม่เริ่มจนผู้อ่านตั้งยืนยันแยกชัด MQL4 อ่านผ่าน AccountInfoInteger(ACCOUNT_TRADE_MODE)โดยเอกสารแยกบัญชีทดลอง แข่งขัน และจริง [16]ข้อความเตือนในคอมเมนต์ไม่ใช่ตัวป้องกัน ค่าเริ่มที่ต้องตั้งใจเปลี่ยนให้เกิดงานต่างหากที่ป้องกัน
โครงสร้างคร่าว ๆ - kill switch จาก equity drawdown
แนวทางสำหรับ MQL4 ไม่ใช่โค้ดครบที่คอมไพล์ได้
ค่าป้อน - สองค่าแรกตัดสินความปลอดภัย
DryRun := TRUE ค่าเริ่ม
ไม่ส่งการกระทำ บันทึกเพียงสิ่งที่จะปิด ได้แก่หมายเลข
ปริมาณ และราคาอ้างอิง ต้องเปลี่ยนค่านี้ด้วยมือ
จึงปิดจริงได้
LiveAccountConsent := FALSE ค่าเริ่ม
หากไม่มีค่านี้ ปฏิเสธเริ่มบนบัญชีที่ไม่ใช่เดโม
การยินยอมนี้ต้องไม่เกิดโดยบังเอิญ
MagicNumber - รหัสสถานะของตน
MaxDrawdownPct - ยอดลดที่ยอมจาก equity สูงสุด
MaxDeviation - ใช้ได้โหมดเดียว
ดูย่อหน้าใต้โครง
เริ่ม - OnInit()
mode := AccountInfoInteger(ACCOUNT_TRADE_MODE)
if mode != ACCOUNT_TRADE_MODE_DEMO
and not LiveAccountConsent:
บันทึก: ไม่ใช่เดโม ไม่มีคำยินยอม
จบตั้งต้นด้วยผิดพลาด (INIT_FAILED) เท่านั้น
peak := AccountEquity()
stopped := FALSE
lastAlert := 0 เวลาการแจ้งเตือนล่าสุด
ทุก tick - OnTick()
if stopped:
remaining := CountOwnPositions()
if remaining > 0
and TimeCurrent() - lastAlert >= 3600:
บันทึก: หยุด, remaining
แจ้งมนุษย์
lastAlert := TimeCurrent()
จบการประมวลผล tick นี้
ไม่ลองปิดใหม่เอง ครั้งต่อไปคนตัดสินและทำมือ
equity := AccountEquity()
if equity > peak: peak := equity
threshold := peak * (1 - MaxDrawdownPct / 100)
if equity >= threshold:
แขนงว่าง โครงเฝ้าเกณฑ์เท่านั้น ไม่มีตรรกะเข้าเลย
มิฉะนั้น:
stopped := TRUE
บันทึก: equity, threshold, peak, timestamp
errors := CloseOwnPositions()
remaining := CountOwnPositions()
if remaining == 0 and errors == 0 and not DryRun:
ExpertRemove() เอาออกหลังสำเร็จเท่านั้น
มิฉะนั้น:
บันทึก: errors, remaining
แจ้งมนุษย์
lastAlert := TimeCurrent()
ห้ามเอาออก ยังทำงาน ไม่เปิดใหม่ แจ้งซ้ำและรอคน
ปิด - CloseOwnPositions() คืนจำนวนผิดพลาด
errors := 0
for i from OrdersTotal() - 1 down to 0:
if not OrderSelect(i, SELECT_BY_POS, MODE_TRADES):
errors := errors + 1
บันทึก: สถานะ i, GetLastError()
ไปตัวถัดไป อย่าเงียบตรงนี้
if OrderType() > OP_SELL: skip
คำสั่งรอแยกต่างหาก
if OrderMagicNumber() != MagicNumber
or OrderSymbol() != Symbol(): skip
ไม่แตะของอื่นและเปิดมือ
RefreshRates()
price := MarketInfo(OrderSymbol(),
MODE_BID for OP_BUY, MODE_ASK for OP_SELL)
if price <= 0:
errors := errors + 1
บันทึก: ไม่มีราคา, GetLastError()
ไปตัวถัดไป
ticket := OrderTicket()
volume := OrderLots()
if DryRun:
บันทึก: จะปิด order, volume, price
ไปตัวถัดไป ไม่ส่งอะไรไปเซิร์ฟเวอร์
if not OrderClose(ticket, volume, price, MaxDeviation):
errors := errors + 1
บันทึก: หมายเลขคำสั่ง, GetLastError()
return errors
ยืนยัน - CountOwnPositions()
เดินรายการอีกครั้ง คืนจำนวนสถานะที่มี MagicNumber ตน
ในสัญลักษณ์นี้ ข้ามคำสั่งรอแบบลูปด้านบน นี่อ่านสภาพบัญชี
ไม่ใช่ความจำโปรแกรม และเป็นสิ่งเดียวที่ตัดสินว่าจบได้หรือไม่
สิ่งที่โครงนี้ไม่ทำ สำคัญเท่าสิ่งที่ทำ ไม่ลบคำสั่งรอ ไม่รองรับปิดบางส่วน ไม่ทนรีสตาร์ต เพราะ flag หยุดกับยอด equity อยู่ความจำ เริ่มใหม่ก็นับใหม่ และไม่ลองปิดซ้ำ นี่คือเลือก ไม่ใช่ช่องขาด หลังปิดล้มเหลวเข้าหยุดค้าง ไม่เปิดใหม่ อ่านจำนวนทุก tick และตราบมีเหลือจะจดและเตือนบ่อยสุดชั่วโมงละครั้ง ครั้งปิดถัดไปมนุษย์ทำมือจากเทอร์มินัลหรือแอป พฤติกรรมนี้ครบแล้ว ไม่ได้รอเติมการลองซ้ำอัตโนมัติ แต่ข้อหนึ่งแข็ง ค่อยเอาโปรแกรมออกหลังนับเองใหม่แล้วไม่เหลือและไม่มีข้อผิดพลาดปิด ลำดับสำคัญเพราะลบตัวเองโดยไม่ดูความล้มเหลวจะทิ้งความเสี่ยงและล็อกโดยไม่มีผู้พยายามปิด ดังนั้นหากผิดหรือเหลือ ต้องยังทำงานและเตือน
สิ่งหนึ่งดูเหมือนแนวปฏิบัติดีแต่ไม่ใช่ RefreshRates() คืนค่าบูลีน แต่ถือว่า false คือข้อผิดพลาดจะผิดเอง เอกสาร MQL4 ระบุ true เมื่อรีเฟรช แล้วอธิบายทันทีว่า “เหตุเดียวที่รีเฟรชไม่ได้คือข้อมูลนั้นเป็นข้อมูลปัจจุบันของเทอร์มินัลแล้ว” [17]False จึงแปลว่าปัจจุบันอยู่แล้ว สิ่งต้องตรวจคือราคาที่อ่านหลังรีเฟรชเป็นบวกหรือไม่ ศูนย์คืออ่านข้อกำหนดล้มเหลวหรือไม่มีราคา ส่งปิดที่ศูนย์ก็ถูกปฏิเสธ
เหลือพารามิเตอร์ deviation ซึ่งคำเตือนสำคัญกว่าค่า MaxDeviation ไม่ใช่เพดานราคาทุกโหมด ใช้ Instant Execution เท่านั้น ในกรอบคือทำราคาใหม่ไม่แจ้ง เกินจึงส่งราคาใหม่ให้ยืนยัน กลไกและข้อความอ้างอยู่ใน ส่วนความล่าช้าและกว้างขึ้นใน บทความแพลตฟอร์มที่นี่สำคัญผลข้อเดียว ค่าราวสาม point หรือ 0.3 pips บัญชีห้าหลักถูกลอกจากตัวอย่างโดยไม่คิด เป็นค่าเข้าตอนสงบไม่ใช่ออกฉุกเฉิน ฉุกเฉินคือช่วงสเปรดกว้างและ slippage สูง เกณฑ์แคบทำให้เซิร์ฟเวอร์ส่งราคาใหม่แทนทำ และโปรแกรมไม่จัด requote เหลือสถานะเปิดกับบันทึกผิด ค่าทางออกฉุกเฉินจึงต้องหลวมกว่าเข้าอย่างชัด แต่ต้องเรียกตามจริงว่าไม่ใช่เพิ่มป้องกัน เป็นยินยอมก่อนให้ปิดแย่กว่าราคาตัดสินเพื่อเพิ่มโอกาสคำขอผ่าน คุณเลือกราคาแย่หรือเปิดความเสี่ยง ไม่ใช่ปลอดภัยกับเสี่ยง หาก Market Execution ไม่มีช่องนี้ โบรกเกอร์กำหนดราคา ส่งคือยอมก่อน และเหลือจดส่วนต่างปิดกับตัดสิน
ความไม่สมมาตรที่สองไม่ขึ้นโหมดแต่เป็นขอบเขต เกณฑ์คำนวณจาก AccountEquity()คือ equity ทั้งบัญชี แต่ปิดเฉพาะสัญลักษณ์ปัจจุบัน ระบบเดียวบนสามกราฟจะปิดแค่ตัวที่ tick มาตอนเกิน อีกอินสแตนซ์ยังนับยอดตน เมื่อหลายกราฟต้องแยกผู้ดูความเสี่ยงทั้งบัญชีเป็นโปรแกรมต่าง แต่ละช่องว่างเป็นการออกแบบที่ต้องตัดสินใจก่อนแตะเงินจริง
สามชั้นป้องกัน
ไม่มีชั้นเดียวพอเพราะเสียคนละสถานการณ์
- โค้ดหุ่นยนต์ ขีดจำกัดที่กล่าว ทำงานเฉพาะโปรแกรมรัน
- เซิร์ฟเวอร์โบรกเกอร์ SL/TP ของสถานะ margin call และปิด stop-out ทำงานไม่พึ่งเครื่องคุณ จึงควรมีระดับฝั่งนี้ทุกสถานะ ไม่ใช่แค่ตัวแปร
- มนุษย์ แจ้งโทรศัพท์เรื่องเปิด ปิด หยุด และผิดพลาด พร้อมเคยทดสอบปิดมือจากแอปโบรกเกอร์ ชั้นสุดท้ายเมื่อสองแรกเสีย
การพึ่งกันชัด ระดับเซิร์ฟเวอร์ไม่หยุดขาดทุนย่อยต่อเนื่องที่แต่ละรายการอยู่แผนแต่รวมแล้วสูบทุน นั่นเป็นหน้าที่ drawdown ในโค้ด แต่โค้ดไม่ช่วยหากเครื่องดับ ตอนนั้นเหลือฝั่งโบรกเกอร์ แจ้งเตือนที่ไม่มีสองชั้นแรกเพียงรายงานความเสียหายกำลังไป
กลไกป้องกันก็ต้องทดสอบ
ตัวป้องกันที่ไม่เคยกระตุ้นเป็นข้อสมมติ ไม่ใช่การป้องกัน ทดสอบเดโมสองช่วงเพราะช่วงแรกถามความถูกได้ถูกกว่า เปิด dry-run ตั้งเกณฑ์ต่ำให้ผ่านในชั่วโมง มันไม่ส่งแต่จดว่าถือสถานะใดเป็นตนและจะทำอะไร หากไม่ตรง ซึ่งอาจเกิดครั้งแรกเมื่อกรองรหัสหรือสัญลักษณ์กว้างไป ก็รู้โดยไม่ปิด ช่วงสองทำหลังรายการตรงเท่านั้น ปิด dry-run แล้วซ้ำ ตรวจสามเรื่องแยก ปิดเฉพาะตนหรือไม่ ลงบันทึกหรือไม่ และหยุดหลังยืนยันไม่เหลือหรือไม่ ทดสอบสายขาดแยกโดยปิดไม่กี่นาทีแล้วดูหลังกลับว่าปรับสภาพตามประวัติหรือเริ่มใหม่เปิดสถานะที่สอง
มาตรฐานขั้นต่ำก่อนใช้ คือโปรแกรมคอมไพล์มีขีดจำกัด ตรวจสิทธิ์ครบสามชั้น จดการตัดสินลงไฟล์ รันเดโมในสภาพเป้าหมายผ่านบังคับรีสตาร์ต สายขาด และสุดสัปดาห์ แล้วเฉพาะเมื่อแผนเสี่ยงอนุญาตจึงใช้บัญชีจริงปริมาณต่ำสุดก่อนคิดเพิ่ม จำนวนเทรดและผลที่ให้ไปขั้นถัดเป็น อีกหัวข้อว่าด้วยยืนยันกลยุทธ์ ที่นี่เป็นเพียงพร้อมด้านปฏิบัติการ
ระบบสำเร็จจากภายนอก
ขอกล่าวถึงสินค้าตลาดซอฟต์แวร์เพราะเกี่ยวความปลอดภัย ไฟล์ขายคอมไพล์แล้ว อ่านตรรกะไม่ได้ จึงตรวจไม่ได้ว่ามี drawdown limit มี stop ฝั่งเซิร์ฟเวอร์ หรือเพิ่มปริมาณหลังขาดทุนต่อเนื่องหรือไม่ ประเมินกลยุทธ์ต้องใช้เครื่องมือหมวดทดสอบ แต่สำหรับบทความนี้กฎง่ายกว่า ระบบที่คุณคาดพฤติกรรมตอนเสียไม่ได้ก็กำกับอย่างปลอดภัยไม่ได้ ไม่ว่าเส้นผลตอบแทนโฆษณาจะเป็นอย่างไร
เขียนหุ่นยนต์มักง่ายสุด รักษายากกว่า ต้องดูล็อกรายสัปดาห์หาการปฏิเสธและเวลาประหลาด ตรวจ drawdown ตรงสมมติหรือไม่ และตอบตรงว่าตลาดยังคล้ายตอนทดสอบหรือไม่ อัตโนมัติย้ายการดำเนินไปโค้ดและลบบางข้อผิดมนุษย์ แต่ไม่ย้ายรับผิดชอบ ยังอยู่คุณพร้อมหน้าที่หยุดทัน
คำถามที่พบบ่อย – อัตโนมัติ EA, MQL และโฮสติ้ง
Expert Advisor ของฉันรันจริงที่ใด?
อะไรหยุดเมื่อปิดเทอร์มินัล?
โค้ด MT4 รันบน MT5 ได้หรือไม่?
cBot ต้องเปิดแอป cTrader ไว้หรือไม่?
ฉันต้องมี VPS หรือไม่?
Ping ต่ำหมายถึงทำคำสั่งเร็วหรือไม่?
ทดสอบ kill switch โดยไม่เสี่ยงเงินอย่างไร?
แหล่งข้อมูลและเอกสารอ้างอิง
เอกสารผู้พัฒนาอธิบายสถานะ ณ วันตรวจ 2026-08-22 เวอร์ชัน ขีดจำกัด และราคาเปลี่ยนได้ ควรตรวจต้นทางก่อนตัดสินใจ
- MetaQuotes Software Corp., “อ้างอิง MQL4 – การเขียนเชิงวัตถุ” ยืนยันคลาส การสืบทอด ฟังก์ชันเสมือน และเทมเพลต docs.mql4.com/basis/oop
- MetaQuotes Software Corp., “อ้างอิง MQL5” ฟังก์ชันซื้อขาย โครงสร้างคำขอกับคำตอบ ไลบรารีมาตรฐาน และจัดการ handle อินดิเคเตอร์ mql5.com/en/docs
- Spotware Systems, “cTrader Algo” เอกสารทางการสภาพอัตโนมัติ รองรับ C# และ Python help.ctrader.com/ctrader-algo
- Spotware Systems, “cTrader Algo – คุณสมบัติคลาวด์” รัน cBot ไม่ขึ้นแอปผู้ใช้ ขีดจำกัดอินสแตนซ์จริงและเดโม และกฎขึ้นกับโบรกเกอร์ help.ctrader.com/ctrader-algo/documentation/cloud-features
- Spotware Systems, “cTrader Open API” แลกข้อมูลผ่าน JSON หรือ Google Protocol Buffers help.ctrader.com/open-api
- MetaQuotes Software Corp., “MetaTrader VPS” โฮสต์เริ่มจากแพลตฟอร์ม ย้ายสภาพแวดล้อม ข้อกำหนดเครือข่ายและราคาที่ประกาศ เป็นข้อมูลผู้พัฒนา mql5.com/en/vps
- MetaQuotes Software Corp., “MetaTrader 5 – ตัวทดสอบกลยุทธ์” โมเดลสร้าง tick, tick จริงโบรกเกอร์ จำลองความล่าช้า หลายสกุลเงินและ forward metatrader5.com/en/terminal/help/algotrading/testing
- MetaQuotes Software Corp., “คู่มือ MetaTrader 4 – Trailing Stop” ทำงานในไคลเอนต์ ต่างจาก SL/TP ที่ดูแลบนเซิร์ฟเวอร์ metatrader4.com/en/trading-platform/help/positions/trailing
- สำนักงาน SEC สหรัฐฯ, “SEC กล่าวหา Knight Capital ละเมิด Market Access Rule” ข่าว 2013-222 วันที่ 16 ตุลาคม 2013 และกระบวนการปกครองเลข 34-70694 อธิบายเหตุ 1 สิงหาคม 2012 และกลไกควบคุมที่ขาด sec.gov/newsroom/press-releases/2013-222
- MetaQuotes Software Corp., “อ้างอิง MQL4 – รับเหตุการณ์” รายการฟังก์ชันและรูปแบบครบ รวม
OnTimer()และOnChartEvent(). docs.mql4.com/basis/function/events - MetaQuotes Software Corp., “คู่มือ MetaTrader 5 – ทำธุรกรรม” trailing stop รันไคลเอนต์ไม่ใช่เซิร์ฟเวอร์เหมือน Stop Loss หน้าเดียวมี Deviation ใน Instant Execution (“ส่วนต่างราคาทำคำสั่งกับราคาที่ระบุซึ่งผู้เทรดยอม”) และ Market Execution (“โบรกเกอร์ตัดสินราคาโดยไม่ปรึกษาเพิ่ม” และ “ส่งโหมดนี้หมายถึงยินยอมล่วงหน้าให้ทำราคานี้”) รวม Fill Policy ตรวจ 2026-08-22 metatrader5.com/en/terminal/help/trading/performing_deals
- Finance Magnates, “MetaQuotes เลิกขาย MT4”, 12 มกราคม 2018 ข่าวอุตสาหกรรมหยุดขายไลเซนส์แก่ลูกค้าใหม่ แหล่งรองใช้เฉพาะวันเหตุ สถานะปัจจุบันใช้คำผู้พัฒนาใน [19] financemagnates.com
- European Securities and Markets Authority, “วิเคราะห์แทรกแซงผลิตภัณฑ์ – มาตรการ CFD”, ESMA50-162-215, 1 มิถุนายน 2018 บันทึกยอดติดลบรายย่อยหลังเหตุฟรังก์สวิส 15 มกราคม 2015 esma.europa.eu
- MetaQuotes Software Corp., “อ้างอิง MQL5 – ตัวรับเหตุการณ์” รายการฟังก์ชันซึ่งรวม
OnTrade(),OnTradeTransaction()และOnBookEvent()ซึ่งอธิบายว่ารับการเปลี่ยนความลึกตลาด mql5.com/en/docs/event_handlers - MetaQuotes Software Corp., “อ้างอิง MQL4 – IsTradeAllowed” คำอธิบาย “ตรวจว่า Expert Advisor มีสิทธิ์เทรดและบริบทซื้อขายไม่ยุ่ง” ตรวจ 2026-08-22 docs.mql4.com/check/istradeallowed
- MetaQuotes Software Corp., “อ้างอิง MQL4 – AccountInfoInteger” อ่าน
ACCOUNT_TRADE_MODEโดยแยกACCOUNT_TRADE_MODE_DEMO,ACCOUNT_TRADE_MODE_CONTESTและบัญชีจริง ตรวจ 2026-08-22 docs.mql4.com/account/accountinfointeger - MetaQuotes Software Corp., “อ้างอิง MQL4 – RefreshRates” คืน “True หากอัปเดต ไม่เช่นนั้น false” พร้อมข้อว่า “เหตุเดียวที่อัปเดตไม่ได้คือเป็นข้อมูลปัจจุบันของเทอร์มินัลอยู่แล้ว” ตรวจ 2026-08-22 docs.mql4.com/series/refreshrates
- MetaQuotes Software Corp., “คู่มือ MetaTrader 4 – เปิดสถานะ” ขอบเขต deviation “ใช้เฉพาะ instant execution” และทำงานว่า “หากต่ำกว่าหรือเท่าค่าที่ระบุ จะทำราคาใหม่ไม่แจ้งเพิ่ม มิฉะนั้นคืนราคาใหม่ที่ทำได้” ตรวจ 2026-08-22 metatrader4.com/…/positions_open
- MetaQuotes Software Corp., “MetaTrader 4 สำหรับโบรกเกอร์” คำบนเว็บตน “ซื้อไลเซนส์ MetaTrader 4 ไม่ได้แล้ว เรามุ่งพัฒนา MetaTrader 5 และการปรับปรุงเชิงแนวคิดต่อไปจะออกให้หลายสินทรัพย์นี้เท่านั้น” ตรวจ 2026-08-22 metatrader4.com/en/brokers
- Bank for International Settlements, Markets Committee, “อัลกอริทึมดำเนินคำสั่ง FX และการทำงานตลาด” รายงานกลุ่มที่ Andréa M Maechler เป็นประธาน ตุลาคม 2020 หน้า 35 (หน้าไฟล์ PDF 41) กล่าวถึง flash ว่า “การวิเคราะห์ล่าสุดมักพบปัจจัยร่วม เช่น stop-loss กระจุกตัว หรือพนักงานประสบการณ์น้อยนอกเขตเวลาหลักสกุลเงิน ที่มีส่วนทำให้เกิด” หมายเหตุศัพท์ EA ในรายงานคือ execution algorithm ไม่ใช่ Expert Advisor bis.org/publ/mktc13.pdf
- MetaQuotes Software Corp., “บันทึกรุ่น MetaTrader 4” ทะเบียน MT4 มี build 1460 วันที่ 5 มีนาคม 2026 (“ปรับความปลอดภัยสำคัญ แก้บั๊ก และเสถียรภาพ”) และ build 1470 วันที่ 12 มีนาคม 2026 (“ปรับคำแปลส่วนติดต่อ แก้บั๊ก และเสถียรภาพ”) ตรวจ 2026-08-22 metatrader4.com/en/releasenotes
- Spotware Systems, “การป้องกันใน cTrader” ครอบคลุม trailing stop loss และจุดคุ้มทุน “ทำงานข้ามแอปและยังมีผลหลังเซสชันจบ” ตรวจ 2026-08-22 help.ctrader.com/ctrader-web/trading/protections
- Spotware Systems, “คู่มือ cTrader – Trade Watch” ขอบเขตว่า “Trailing stop loss ยังทำแม้แอปปิดหรือขาดการเชื่อมต่อ” ตรวจ 2026-08-22 help.ctrader.com/ctrader/interface/trade-watch
- MetaQuotes Software Corp., “คู่มือ MetaTrader 5 – เทมเพลตและโปรไฟล์” “เทมเพลตพร้อม Expert Advisors ที่ทำงานบันทึกในโปรไฟล์ด้วย” และ “เปิดโปรไฟล์แล้วแต่ละกราฟพร้อมค่าทั้งหมดอยู่ที่เดิมเมื่อบันทึก” ตรวจ 2026-08-22 metatrader5.com/…/templates_profiles
- เอกสาร MetaQuotes: OnTick / NewTickคิวเหตุการณ์และเงื่อนไขที่ไม่เพิ่ม NewTick ใหม่ เข้าถึง 2026-10-08