แก้ Unsupported filling mode (MT5 10030)
สารบัญ
- 10030 (TRADE_RETCODE_INVALID_FILL) คืออะไร
- วิธีจับคู่คำสั่ง (type_filling) ทั้ง 4 แบบ
- ทำไมถึงกลายเป็น "ไม่ถูกต้อง" — SYMBOL_FILLING_MODE
- ทำไมถึงเกิดขึ้น "วันที่เปลี่ยนโบรกเกอร์"
- ความสัมพันธ์กับโหมดการดำเนินการ (SYMBOL_TRADE_EXEMODE)
- วิธีตรวจสอบเบื้องต้นใน 30 วินาที
- ① ดูวิธีจับคู่คำสั่งที่โบรกเกอร์อนุญาตสำหรับสัญลักษณ์นั้น (หน้าจอ MT5)
- ② ตรวจสอบพารามิเตอร์อินพุตของ EA
- ③ ตรวจสอบด้วยโค้ด (สำหรับนักพัฒนา)
- วิธีแก้ปัญหาถาวร — โค้ด MQL5 ที่เลือกโหมดอัตโนมัติจากแฟล็กที่ได้รับอนุญาต
- ฟังก์ชันเลือกโหมดอัตโนมัติ
- วิธีใช้งานกับ OrderSend
- กรณีที่ใช้ CTrade
- ข้อควรระวังเมื่อใช้คำสั่ง Limit (BOC)
- ข้อควรระวังเกี่ยวกับโบรกเกอร์ (ตรวจสอบซ้ำเมื่อย้าย)
- รายการตรวจสอบตามลำดับความสำคัญ
- สรุป
- คำถามที่พบบ่อย (FAQ)
- ถาม: EA ที่ใช้งานได้ปกติเมื่อวาน พอเปลี่ยนโบรกเกอร์แล้วเกิด 10030 จนส่งออเดอร์ไม่ได้เลย EA เสียหรือไม่?
- ถาม: ควรใช้ FOK หรือ IOC ดี?
- ถาม: ไม่เกิด 10030 ตอนทดสอบย้อนหลัง แต่เกิดขึ้นในบัญชีจริง เพราะอะไร?
- ถาม: โบรกเกอร์เดียวกัน แต่บางสัญลักษณ์เกิด 10030 บางสัญลักษณ์ไม่เกิด เพราะอะไร?
- ถาม: แก้โค้ด EA ไม่ได้ (มีแค่ไฟล์ .ex5) ควรทำอย่างไร?
แก้ปัญหา Unsupported filling mode (ข้อผิดพลาด MT5 10030) แบบเบ็ดเสร็จ
EA ที่เมื่อวานยังทำงานปกติกับโบรกเกอร์เดิม พอย้ายไปบัญชีใหม่กลับขึ้น Unsupported filling mode หรือ OrderSend error 10030 เต็มแท็บ Expert จน ส่งออเดอร์ไม่ได้แม้แต่รายการเดียว — นี่คือปัญหาคลาสสิกที่พบบ่อยที่สุดเมื่อย้ายโบรกเกอร์ในการใช้งาน EA บน MT5 ไม่ใช่เพราะ EA พังหรือบัญชีมีปัญหา แต่เป็นเพราะ รูปแบบการส่งคำสั่ง "วิธีจับคู่คำสั่ง (filling mode)" ที่ EA กำหนดไว้ ไม่ได้รับอนุญาตสำหรับสัญลักษณ์นั้นในโบรกเกอร์ใหม่ เท่านั้นเอง
บทความนี้เขียนขึ้นสำหรับทั้งผู้ใช้ EA บน MT5 และผู้พัฒนา EA ด้วย MQL5 โดยรวบรวมทุกอย่างเกี่ยวกับ TRADE_RETCODE_INVALID_FILL (10030) ไว้ในที่เดียว ตั้งแต่ ความหมายที่แท้จริง ความหมายของ FOK/IOC/RETURN วิธีตรวจสอบใน 30 วินาที ไปจนถึงวิธีแก้ปัญหาถาวรในโค้ด สำหรับรายการข้อผิดพลาดทั้งหมด สามารถดูได้ที่ คู่มือรวมวิธีแก้ปัญหารหัสข้อผิดพลาด MQL5 / MT5
บทความนี้อ้างอิงจาก MT5 (build ชุด 4xxx) ณ เดือนกรกฎาคม 2026 ชื่อหน้าจอและคำอธิบายอาจแตกต่างกันเล็กน้อยตามโบรกเกอร์และเวอร์ชัน build
10030 (TRADE_RETCODE_INVALID_FILL) คืออะไร
ผลลัพธ์ของ OrderSend() จะถูกส่งกลับมาใน MqlTradeResult.retcode โดยค่า 10030 = TRADE_RETCODE_INVALID_FILL ที่ปรากฏขึ้นคือ การปฏิเสธจากฝั่งเซิร์ฟเวอร์ ที่แจ้งว่า "type_filling (วิธีจับคู่คำสั่ง) ที่ระบุมาในคำขอ ไม่ได้รับอนุญาตสำหรับสัญลักษณ์นี้"
ความหมาย: ประเภทการจับคู่คำสั่ง (filling type) ที่ระบุไม่รองรับ
ค่าคงที่ : TRADE_RETCODE_INVALID_FILL
ค่า : 10030
ข้อความ : Unsupported filling mode / Invalid order filling type
// ตัวอย่าง log ที่พบได้ทั่วไป
2026.07.07 09:15:32.441 EA_NAME EURUSD,M15: OrderSend error 10030
2026.07.07 09:15:32.441 EA_NAME EURUSD,M15: failed market buy 0.10 EURUSD [Unsupported filling mode]
ประเด็นสำคัญคือ เรื่องนี้ไม่เกี่ยวข้องกับเงินทุน ล็อต หรือราคาใดๆ ทั้งสิ้น 10030 เป็นปัญหาที่เกิดจากฟิลด์ MqlTradeRequest.type_filling เพียงจุดเดียวเท่านั้น เมื่อแก้ตรงนี้ คำสั่งเดิมจะสามารถส่งผ่านได้ทันที
วิธีจับคู่คำสั่ง (type_filling) ทั้ง 4 แบบ
ใน MQL5 ประเภท ENUM_ORDER_TYPE_FILLING มีค่าอยู่ 4 แบบ
| ค่าคงที่ | ชื่อเรียกทั่วไป | ความหมาย |
|---|---|---|
ORDER_FILLING_FOK | Fill or Kill | ดำเนินการเฉพาะเมื่อสามารถจับคู่ได้ เต็มจำนวน เท่านั้น หากส่งคำสั่ง 1 ล็อตแต่มีสภาพคล่องรองรับได้เพียง 0.7 ล็อต จะยกเลิกทั้งคำสั่ง |
ORDER_FILLING_IOC | Immediate or Cancel | ดำเนินการทันที เท่าที่จับคู่ได้ ส่วนที่เหลือ จะถูกยกเลิก เช่น จับคู่ได้ 0.7 ล็อต ส่วนอีก 0.3 ล็อตจะหายไป |
ORDER_FILLING_RETURN | Return | ดำเนินการในส่วนที่จับคู่ได้ ส่วนที่เหลือ จะถูกวางเป็นคำสั่งค้างในตลาด (รอจับคู่เพิ่มภายหลัง) ใช้ในการดำเนินการแบบตลาดหลักทรัพย์ |
ORDER_FILLING_BOC | Book or Cancel | รับคำสั่งเฉพาะกรณีที่ เข้าไปรออยู่ในบุ๊ก (แบบ passive) เท่านั้น หากราคาที่ระบุจะทำให้จับคู่ได้ทันทีจะถูกปฏิเสธ ใช้ได้เฉพาะคำสั่ง limit/stop-limit เท่านั้น (เพิ่มเข้ามาใน build รุ่นใหม่ๆ) |
สำหรับ EA เทรด Forex ทั่วไป ที่ใช้จริงมีแทบจะแค่ FOK หรือ IOC เท่านั้น ส่วน RETURN จะมีความหมายในการดำเนินการแบบตลาดหลักทรัพย์ (Exchange execution) เช่น หุ้นหรือฟิวเจอร์ส และ BOC เป็นการใช้งานเฉพาะทางสำหรับต้องการบังคับให้เป็นคำสั่งแบบ maker เท่านั้น
ทำไมถึงกลายเป็น "ไม่ถูกต้อง" — SYMBOL_FILLING_MODE
วิธีจับคู่คำสั่งแบบใดที่จะได้รับอนุญาต ขึ้นอยู่กับ แฟล็กที่โบรกเกอร์กำหนดไว้สำหรับแต่ละสัญลักษณ์ (SYMBOL_FILLING_MODE) ซึ่งสามารถอ่านค่าได้จาก MQL5 ดังนี้
long flags = SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);
// ถ้ามีแฟล็ก SYMBOL_FILLING_FOK จะใช้ FOK ได้
// ถ้ามีแฟล็ก SYMBOL_FILLING_IOC จะใช้ IOC ได้
SYMBOL_FILLING_MODE เป็นบิตแฟล็กที่บอก สถานะการอนุญาตของ FOK และ IOC (หากอนุญาตทั้งคู่ จะมีแฟล็กทั้งสองตัวติดขึ้น) ส่วน RETURN ไม่ได้รวมอยู่ในแฟล็กนี้ แต่ขึ้นอยู่กับโหมดการดำเนินการของสัญลักษณ์ (อธิบายด้านล่าง)
สรุปแล้วโครงสร้างของปัญหา 10030 นั้นเรียบง่ายมาก
type_filling ที่ EA ส่งมา ∉ วิธีจับคู่คำสั่งที่ได้รับอนุญาตสำหรับสัญลักษณ์นั้น → 10030
เท่านี้เอง
ทำไมถึงเกิดขึ้น "วันที่เปลี่ยนโบรกเกอร์"
เหตุผลที่ 10030 ถูกเรียกว่าเป็น "ข้อผิดพลาดคลาสสิกของการย้ายโบรกเกอร์" มีดังนี้
- วิธีจับคู่คำสั่งที่ได้รับอนุญาตแตกต่างกันไปตามโบรกเกอร์และตามสัญลักษณ์ โบรกเกอร์บางแห่งอนุญาตเฉพาะ FOK สำหรับสัญลักษณ์ Forex บางแห่งอนุญาตเฉพาะ IOC และบางแห่งอนุญาตทั้งสองแบบ แม้แต่ในโบรกเกอร์เดียวกัน การตั้งค่าของ Forex กับ CFD หรือหุ้นก็มักจะต่างกันด้วย
- EA จำนวนมากเขียน type_filling แบบตายตัว (hardcode) ตัวอย่างเช่น EA ที่เขียนว่า
request.type_filling = ORDER_FILLING_FOK;จะทำงานได้ตลอดหลายปีบนโบรกเกอร์ A ที่อนุญาต FOK เพราะทำงานได้บนสภาพแวดล้อมของผู้พัฒนา จึงไม่ถูกมองว่าเป็นบั๊กและถูกเผยแพร่ออกไป - หากโบรกเกอร์ B ที่ย้ายไปไม่อนุญาต FOK ออเดอร์แรกก็จะล้มเหลวทั้งหมดทันที และมักไม่ปรากฏในการทดสอบย้อนหลัง (พฤติกรรมของ Strategy Tester มักผ่อนปรนกว่าเซิร์ฟเวอร์จริง) ทำให้ปัญหาปรากฏชัดเจนเฉพาะ "วันที่ย้ายไปใช้บัญชีจริง" เท่านั้น
กล่าวอีกนัยหนึ่ง 10030 ไม่ใช่บั๊กของ EA แต่เป็นการเปิดเผยว่า EA มีการตั้งสมมติฐานผูกติดกับสภาพแวดล้อมเดิม มองในมุมกลับกัน หากแก้ให้ EA อ่านแฟล็กที่อนุญาตของสัญลักษณ์แล้วเลือกวิธีจับคู่คำสั่งแบบไดนามิก ก็จะกลายเป็น EA ที่ทำงานได้กับทุกโบรกเกอร์ (ดูโค้ดด้านล่าง)
ความสัมพันธ์กับโหมดการดำเนินการ (SYMBOL_TRADE_EXEMODE)
นอกจากวิธีจับคู่คำสั่งแล้ว แต่ละสัญลักษณ์ยังมี โหมดการดำเนินการ (execution mode) ซึ่งมีผลต่อว่าวิธีจับคู่คำสั่งแบบใดจะมีความหมาย
| โหมดการดำเนินการ | ค่าคงที่ | ตัวอย่างทั่วไป | แนวโน้มของวิธีจับคู่คำสั่ง |
|---|---|---|---|
| Instant | SYMBOL_TRADE_EXECUTION_INSTANT | Forex บางส่วน (มักพบในระบบ DD) | ดำเนินการที่ราคาที่ระบุ อยู่ในโลกของ FOK/IOC และ requote |
| Market | SYMBOL_TRADE_EXECUTION_MARKET | Forex/CFD ส่วนใหญ่ (ระบบ NDD) | ดำเนินการแบบ market FOK หรือ IOC (ขึ้นอยู่กับการตั้งค่าโบรกเกอร์) |
| Exchange | SYMBOL_TRADE_EXECUTION_EXCHANGE | หุ้น ฟิวเจอร์ส | ดำเนินการผ่านบุ๊กคำสั่ง โดยทั่วไปใช้ RETURN |
| Request | SYMBOL_TRADE_EXECUTION_REQUEST | ระบบเก่า | ดำเนินการแบบ request (ปัจจุบันพบน้อย) |
การผสมผสานที่ได้รับอนุญาตอย่างเคร่งครัดนั้นขึ้นอยู่กับการตั้งค่าเซิร์ฟเวอร์ของแต่ละโบรกเกอร์ แต่ในทางปฏิบัติ จำง่ายๆ ว่า "Forex/CFD ที่เป็น Market execution ใช้ FOK หรือ IOC ส่วนแบบตลาดหลักทรัพย์ใช้ RETURN" ก็เพียงพอแล้ว โหมดการดำเนินการสามารถตรวจสอบได้ด้วย SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE) เช่นกัน
วิธีตรวจสอบเบื้องต้นใน 30 วินาที
① ดูวิธีจับคู่คำสั่งที่โบรกเกอร์อนุญาตสำหรับสัญลักษณ์นั้น (หน้าจอ MT5)
เปิด หน้าต่างแสดงราคา (Market Watch) → คลิกขวาที่สัญลักษณ์ → Specification (รายละเอียดสัญลักษณ์) แล้วดูแถว "Filling" (การจับคู่คำสั่ง) ซึ่งจะแสดงเป็น Fill or Kill / Immediate or Cancel หรือทั้งสองแบบ หาก EA ส่งวิธีที่ไม่ปรากฏในนี้ ก็เกิด 10030 แน่นอน
② ตรวจสอบพารามิเตอร์อินพุตของ EA
EA ที่ออกแบบมาดีมักมีอินพุตชื่อ FillingType หรือ Filling Mode หากมี เพียงแค่เปลี่ยนค่าให้ตรงกับวิธีที่ได้รับอนุญาตตามที่ตรวจสอบในข้อ ① ก็แก้ปัญหาได้ทันที (ไม่ต้องแก้โค้ด)
③ ตรวจสอบด้วยโค้ด (สำหรับนักพัฒนา)
long flags = SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);
PrintFormat("%s filling: FOK=%s IOC=%s exemode=%d",
_Symbol,
((flags & SYMBOL_FILLING_FOK) != 0) ? "yes" : "no",
((flags & SYMBOL_FILLING_IOC) != 0) ? "yes" : "no",
(int)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE));
รันโค้ดนี้เป็นสคริปต์ก็จะได้ผลลัพธ์แสดงสถานะการอนุญาตจริงของโบรกเกอร์และสัญลักษณ์นั้นในบรรทัดเดียว
วิธีแก้ปัญหาถาวร — โค้ด MQL5 ที่เลือกโหมดอัตโนมัติจากแฟล็กที่ได้รับอนุญาต
วิธีแก้ 10030 ที่ถูกต้องไม่ใช่ "ปรับด้วยมือทุกครั้งที่ย้ายโบรกเกอร์" แต่คือ ให้ EA อ่านแฟล็กที่อนุญาตของสัญลักษณ์แล้วเลือกโหมดโดยอัตโนมัติ ต่อไปนี้คือโค้ดมาตรฐานที่นำไปใช้ได้ทันที
ฟังก์ชันเลือกโหมดอัตโนมัติ
// คืนค่าวิธีจับคู่คำสั่งที่ได้รับอนุญาตจริงสำหรับสัญลักษณ์นั้น
// ลำดับความสำคัญ: FOK → IOC → RETURN (สำรองสำหรับแบบตลาดหลักทรัพย์)
ENUM_ORDER_TYPE_FILLING GetFillingMode(const string symbol)
{
long flags = SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE);
if((flags & SYMBOL_FILLING_FOK) != 0)
return ORDER_FILLING_FOK; // ดำเนินการเฉพาะเมื่อจับคู่ได้เต็มจำนวน (ไม่มีการจับคู่บางส่วน)
if((flags & SYMBOL_FILLING_IOC) != 0)
return ORDER_FILLING_IOC; // ดำเนินการเท่าที่จับคู่ได้ ส่วนที่เหลือยกเลิก
return ORDER_FILLING_RETURN; // ไม่มีแฟล็ก = แบบตลาดหลักทรัพย์เป็นต้น ให้ส่งด้วย RETURN
}
วิธีใช้งานกับ OrderSend
MqlTradeRequest req; MqlTradeResult res;
ZeroMemory(req); ZeroMemory(res);
req.action = TRADE_ACTION_DEAL;
req.symbol = _Symbol;
req.volume = lots;
req.type = ORDER_TYPE_BUY;
req.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
req.deviation = 20;
req.magic = MagicNumber;
req.type_filling = GetFillingMode(_Symbol); // ← ไม่เขียนตายตัว (hardcode)
if(!OrderSend(req, res) || res.retcode != TRADE_RETCODE_DONE)
{
if(res.retcode == TRADE_RETCODE_INVALID_FILL) // 10030
PrintFormat("Unsupported filling mode: sent=%d, allowed flags=%d",
(int)req.type_filling,
(int)SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE));
else
PrintFormat("OrderSend failed: retcode=%d", res.retcode);
}
ด้วยวิธีนี้ EA ตัวเดียวกันจะทำงานได้ทั้งบนโบรกเกอร์ที่รองรับเฉพาะ FOK และเฉพาะ IOC โดยไม่ต้องแก้ไขทุกครั้งที่ย้ายโบรกเกอร์
กรณีที่ใช้ CTrade
ไลบรารีมาตรฐาน CTrade มีฟังก์ชัน SetTypeFillingBySymbol() ที่ตั้งค่าวิธีจับคู่คำสั่งโดยอัตโนมัติจากแฟล็กที่อนุญาตของสัญลักษณ์
#include <Trade/Trade.mqh>
CTrade trade;
int OnInit()
{
trade.SetExpertMagicNumber(MagicNumber);
trade.SetTypeFillingBySymbol(_Symbol); // อ่านแฟล็กที่อนุญาตแล้วตั้งค่าอัตโนมัติ
return INIT_SUCCEEDED;
}
EA ที่เขียนแบบเก่าอย่าง trade.SetTypeFilling(ORDER_FILLING_FOK); (กำหนดตายตัว) ซึ่งเป็นสาเหตุของ 10030 สามารถแก้ได้เพียงเปลี่ยนมาใช้บรรทัดนี้บรรทัดเดียว หากต้องการกำหนดเองก็สามารถส่งผลลัพธ์จาก GetFillingMode() ที่กล่าวไปข้างต้นให้กับ SetTypeFilling() ได้ผลลัพธ์เดียวกัน
ข้อควรระวังเมื่อใช้คำสั่ง Limit (BOC)
ORDER_FILLING_BOC (Book or Cancel) ใช้ได้ เฉพาะคำสั่ง limit และ stop-limit เท่านั้น หากระบุราคาที่จะทำให้จับคู่ได้ทันทีจะถูกปฏิเสธ การนำไปใช้กับคำสั่ง market ถือเป็นความผิดพลาด ดังนั้น EA ประเภท market ไม่จำเป็นต้องใส่ BOC เป็นตัวเลือก
ข้อควรระวังเกี่ยวกับโบรกเกอร์ (ตรวจสอบซ้ำเมื่อย้าย)
- การตั้งค่าวิธีจับคู่คำสั่งที่อนุญาตนั้น ไม่เพียงแตกต่างกันไปตามแต่ละโบรกเกอร์เท่านั้น แต่ยังแตกต่างกันไปตามแต่ละสัญลักษณ์ (กลุ่มสินค้า) แม้ในโบรกเกอร์เดียวกัน เช่น Forex อาจใช้ IOC ได้ แต่หุ้น CFD อาจใช้ได้เฉพาะ RETURN เป็นเรื่องปกติ
- การเปลี่ยนประเภทบัญชีหรือเซิร์ฟเวอร์ก็อาจทำให้การตั้งค่าเปลี่ยนไปได้เช่นกัน ไม่ใช่แค่การย้ายโบรกเกอร์เท่านั้น แม้แต่การย้ายเซิร์ฟเวอร์ การเปลี่ยนประเภทบัญชี หรือการปรับปรุงข้อกำหนดของสัญลักษณ์ภายในโบรกเกอร์เดียวกัน ก็อาจทำให้ 10030 ปรากฏขึ้นอย่างกะทันหันได้
- ดังนั้น เป็นกฎการปฏิบัติงานที่ควรทำเป็นนิสัย คือ "เมื่อบัญชี เซิร์ฟเวอร์ หรือสัญลักษณ์อย่างใดอย่างหนึ่งเปลี่ยนแปลง ให้ตรวจสอบวิธีจับคู่คำสั่งอีกครั้งที่หน้าจอ Specification (หรือด้วยสคริปต์)" หาก EA มีโค้ดเลือกโหมดอัตโนมัติอยู่แล้ว ก็ไม่จำเป็นต้องตรวจสอบด้วยตนเองอีกต่อไป
ข้อมูลเฉพาะของโบรกเกอร์ เช่น "สัญลักษณ์นี้อนุญาตเฉพาะ FOK" นั้นอาจล้าสมัยได้เมื่อมีการเปลี่ยนแปลงการตั้งค่าเซิร์ฟเวอร์ บทความนี้จึงไม่ขอระบุรายละเอียดเจาะจง กรุณาตรวจสอบข้อกำหนดของสัญลักษณ์ในบัญชีของตนเองเสมอ
รายการตรวจสอบตามลำดับความสำคัญ
| ลำดับความสำคัญ | สิ่งที่ต้องตรวจสอบ | วิธีแก้ไข |
|---|---|---|
| 🚨 ก่อนอื่น | ช่อง "Filling" ในข้อกำหนดสัญลักษณ์ตรงกับที่ EA กำหนดหรือไม่ | ปรับให้ตรงกับวิธีที่ได้รับอนุญาต |
| 🚨 ก่อนอื่น | EA มีอินพุต FillingType หรือไม่ | เปลี่ยนค่าอินพุตอย่างเดียวก็แก้ได้ (ไม่ต้องแก้โค้ด) |
| ⚠️ ถัดไป | ในโค้ด EA มีการเขียน type_filling แบบตายตัวหรือไม่ | เปลี่ยนเป็น GetFillingMode() / SetTypeFillingBySymbol() |
| ⚠️ ถัดไป | มีการย้ายโบรกเกอร์ เปลี่ยนเซิร์ฟเวอร์ หรือเปลี่ยนประเภทบัญชีหรือไม่ | หลังเปลี่ยนแปลงต้องตรวจสอบข้อกำหนดใหม่เสมอ |
| ✅ ตรวจสอบ | ความแตกต่างของโหมดการดำเนินการ (Instant/Market/Exchange) | สัญลักษณ์แบบตลาดหลักทรัพย์ใช้ RETURN เป็นหลัก |
| 🛠 พัฒนา | มีการจัดการ 10030 แยกตาม retcode หรือไม่ | บันทึกวิธีที่ส่งไปและแฟล็กที่อนุญาตลง log |
สรุป
Unsupported filling mode(10030 / TRADE_RETCODE_INVALID_FILL) คือการปฏิเสธจากเซิร์ฟเวอร์เมื่อtype_fillingของคำสั่ง (FOK / IOC / RETURN / BOC) ไม่ได้รับอนุญาตสำหรับสัญลักษณ์นั้น ไม่เกี่ยวข้องกับเงินทุนหรือล็อตแต่อย่างใด- เนื่องจากวิธีที่ได้รับอนุญาตนั้น แตกต่างกันไปตามโบรกเกอร์และตามสัญลักษณ์ EA ที่เขียน type_filling แบบตายตัวจึงมักเกิด 10030 พร้อมกันทั้งหมดในวันที่ย้ายโบรกเกอร์ นี่คือรูปแบบทั่วไปของข้อผิดพลาดนี้
- สำหรับผู้ใช้งาน สามารถแก้ได้ทันทีด้วย "ดูช่อง Filling ในข้อกำหนดสัญลักษณ์ → เปลี่ยนอินพุตของ EA" ส่วนผู้พัฒนาสามารถ แก้ปัญหาถาวร ได้ด้วยการอ่านแฟล็กจาก
SymbolInfoInteger(SYMBOL_FILLING_MODE)แล้วเลือกโหมดอัตโนมัติ (หรือใช้CTrade::SetTypeFillingBySymbol())
สำหรับรหัสข้อผิดพลาดทั้งหมด สามารถดูได้ที่ คู่มือรวมวิธีแก้ปัญหารหัสข้อผิดพลาด MQL5 / MT5 EA ที่ FXEA365 เผยแพร่นั้นมีการเลือกวิธีจับคู่คำสั่งอัตโนมัติในตัว จึงทำงานได้ไม่ว่าจะใช้โบรกเกอร์ใด (ดูรายชื่อ EA ทั้งหมด)
คำถามที่พบบ่อย (FAQ)
ถาม: EA ที่ใช้งานได้ปกติเมื่อวาน พอเปลี่ยนโบรกเกอร์แล้วเกิด 10030 จนส่งออเดอร์ไม่ได้เลย EA เสียหรือไม่?
ไม่ได้เสียหาย เพียงแค่วิธีจับคู่คำสั่งที่ EA กำหนดไว้ (เช่น FOK) ไม่ได้รับอนุญาตจากโบรกเกอร์ใหม่สำหรับสัญลักษณ์นั้นเท่านั้น ให้ตรวจสอบช่อง "Filling" ในข้อกำหนดสัญลักษณ์ แล้วปรับอินพุตของ EA (เช่น FillingType) ให้ตรงกัน หรือแก้โค้ดให้เลือกโหมดอัตโนมัติ ก็จะกลับมาใช้งานได้ตามปกติ
ถาม: ควรใช้ FOK หรือ IOC ดี?
หากสัญลักษณ์นั้นได้รับอนุญาตทั้งสองแบบ ความแตกต่างจะปรากฏเมื่อ "สภาพคล่องไม่เพียงพอ" เท่านั้น FOK จะยกเลิกทั้งคำสั่งหากไม่สามารถจับคู่ได้เต็มจำนวน (จึงไม่มีโพซิชันค้างครึ่งๆ กลางๆ) ส่วน IOC จะถือเฉพาะส่วนที่จับคู่ได้ (อาจเกิดการจับคู่บางส่วน) สำหรับขนาดล็อตของการเทรด Forex ส่วนบุคคล ปัญหาสภาพคล่องไม่เพียงพอนั้นเกิดขึ้นได้ยาก จึงแทบไม่มีความแตกต่างในทางปฏิบัติ การเลือก FOK เป็นอันดับแรกแบบในโค้ดเลือกโหมดอัตโนมัติจึงไม่มีปัญหาแต่อย่างใด
ถาม: ไม่เกิด 10030 ตอนทดสอบย้อนหลัง แต่เกิดขึ้นในบัญชีจริง เพราะอะไร?
การประมวลผลการจับคู่คำสั่งของ Strategy Tester ไม่ได้จำลองการตั้งค่าของเซิร์ฟเวอร์จริงได้ครบถ้วน ทำให้ปัญหาความไม่ตรงกันของ type_filling อาจไม่ปรากฏในการทดสอบ เมื่อเริ่มใช้งานครั้งแรกในบัญชีจริงหรือบัญชีทดลอง ให้ตรวจสอบกับช่อง Filling ในข้อกำหนดสัญลักษณ์ก่อนเป็นอันดับแรก
ถาม: โบรกเกอร์เดียวกัน แต่บางสัญลักษณ์เกิด 10030 บางสัญลักษณ์ไม่เกิด เพราะอะไร?
เป็นพฤติกรรมปกติ (ที่เป็นไปได้) เนื่องจากการอนุญาตวิธีจับคู่คำสั่งเป็นการตั้งค่าระดับสัญลักษณ์ จึงแตกต่างกันไปตามกลุ่มสินค้า เช่น คู่เงิน Forex อาจใช้ IOC ได้ ในขณะที่หุ้น CFD อาจใช้ได้เฉพาะ RETURN EA ที่เทรดหลายสัญลักษณ์ควรอ่านค่า SYMBOL_FILLING_MODE แยกตามแต่ละสัญลักษณ์เสมอ
ถาม: แก้โค้ด EA ไม่ได้ (มีแค่ไฟล์ .ex5) ควรทำอย่างไร?
ให้ตรวจสอบก่อนว่าพารามิเตอร์อินพุตของ EA มีรายการประเภท FillingType หรือไม่ หากไม่มี แสดงว่า EA ตัวนั้นไม่สามารถใช้งานได้กับสัญลักษณ์นั้นบนโบรกเกอร์ปัจจุบัน ควรติดต่อผู้พัฒนาให้แก้ไข หรือใช้งานบนโบรกเกอร์/ประเภทบัญชีที่อนุญาตวิธีจับคู่คำสั่งตามที่ EA กำหนดไว้แทน
บทความที่เกี่ยวข้อง
📧 แจ้งเตือนก่อนขึ้นราคา + คอร์สอีเมลฟรี 5 วัน
EA ทั้งหมดจำหน่ายในราคาเปิดตัวและจะปรับขึ้นเป็นขั้นตามยอดขาย รับการแจ้งเตือนก่อนการขึ้นราคาแต่ละครั้ง พร้อมอีเมลรายวันเกี่ยวกับการเทรดอัตโนมัติ การอ่านแบ็กเทสต์ และการเลือกโบรกเกอร์
* ปกป้องความเป็นส่วนตัวอย่างเคร่งครัด คุณสามารถยกเลิกการสมัครได้ตลอดเวลา