【เบื้องหลังการพัฒนา】หลังจากอัปเดต MT5 แล้ว "คำสั่งผ่านแต่ EA มีปัญหา" ?—ก่อนอื่นควรสงสัยเรื่อง Build ปัญหาและวิธีกู้คืนที่ฉันใช้กับ “วิธีหยาบๆ”
ครั้งนี้จะเขียนถึงปัญหาที่พบจริงระหว่างพัฒนา MT5 ซึ่งเป็นเรื่องที่ค่อนข้างยุ่งยากเล็กน้อย
วันหนึ่ง EA ที่เคยทำงานปกติกลับทำงานผิดปกติอย่างกระทันหัน
คำสั่งที่สั่งซื้อยังยืนยันการทำรายการได้ตามปกติ
อย่างไรก็ตามด้าน EA ตรวจพบว่า "คำสั่งล้มเหลว"
มีเสียงเตือนข้อผิดพลาดหรือเสียง timeout ดังขึ้น
การประมวลผลหลังคำสั่งไม่ถูกดำเนินการ
ปรากฏการณ์นี้เกิดขึ้น
ในกรณีของชุด Trade Toolbox ของ SmartOrderEA เมื่อสั่งซื้อสำเร็จแล้ว ขั้นตอนแผงควบคุมหรือเสียงที่บอกความสำเร็จจะทำงานไม่ได้
ดูเผินๆ เหมือนว่าปัญหามาจากโปรแกรม EA
อย่างไรก็ตามเมื่อค้นหาดูพบว่ามีสาเหตุที่ไม่คาดคิดซ่อนอยู่
1.“คำสั่งสำเร็จ” แต่ถูกตีความว่า “ล้มเหลว”
ก่อนอื่นตรวจสอบบันทึกผู้เชี่ยวชาญ (Expert Log)
จากนั้นมีบันทึกดังนี้
CTrade::OrderSend: market buy 0.01 USDJPY sl: 158.716 [unknown retcode 0]
注文失敗 | Error=4756 | Retcode=0 | Comment=Doneสิ่งที่น่าสนใจคือ
Comment=Done
ดูเหมือนว่าการสั่งซื้อได้เสร็จสิ้นแล้ว แต่ Retcode ที่ได้จาก EA คือ
0.
เพราะเหตุนี้ EA จึงตีความว่าคำสั่งล้มเหลวและไม่ดำเนินการส่วนถัดไป
นั่นหมายถึง
คำสั่งมีสถานะเกิดขึ้นจริง แต่ EA ได้รับแจ้งว่าเป็น “ล้มเหลว”
ซึ่งเป็นสถานการณ์ที่ยากจะตีความ
2.คิดว่าเป็น MT5 ตัวโปรแกรมเท่านั้นไม่ใช่โค้ด
ในขั้นตอนนี้แน่นอนว่าเช็คโค้ด EA ก่อน
อย่างไรก็ตามครั้งนี้ไม่ได้มีการเปลี่ยนแปลงโค้ด
เมื่อเปรียบเทียบกับสภาพแวดล้อมที่ทำงานได้ปกติ ยังพบว่า Build ของ MT5 แตกต่างกัน
สภาพแวดล้อมที่ทำงานได้ปกติคือBuild 6090.
ในทางกลับกันสภาพแวดล้อมที่เกิดข้อผิดพลาดคือBuild 6116.
ดังนั้นจึงสงสัยถึงผลกระทบของการอัปเดต MT5 ตัวโปรแกรมเอง
Build ของ MT5 สามารถตรวจสอบได้จาก
Help → Version Information
ในกรณีนี้ ความต่างของ Build และปรากฏการณ์ “Done แต่ Retcode=0” ซ้อนทับกัน จึงสันนิษฐานว่าอาจมีปัญหาที่การประมวลผล return code ของ MT5
3.วิธีที่ใช้ “วิธีสุดขั้ว”
เมื่อคิดว่าสาเหตุอยู่ที่ MT5 ตัวโปรแกรม ขั้นต่อไปคือ
“จะย้อนกลับได้อย่างไรในทันที?”
มีวิธีรอการอัปเดตเวอร์ชันปรับปรุง
แต่ในสภาพแวดล้อมที่ใช้งานจริงไม่อยากให้ EA ทำงานผิดพลาด
สิ่งที่ผมทำคือ
สำรอง MT5 ที่ใช้งานได้ปกติอย่าง MT5terminal64.exeไว้และย้ายไปยังสภาพแวดล้อมที่มีปัญหา
นั่นเอง
วิธีที่ค่อนข้างหยาบคาย (หัวเราะ).
ไม่ใช่ขั้นตอนเยียวยาทางการ แต่ในการทดสอบครั้งนี้วิธีนี้ได้ผล
ขั้นตอนที่ผมทำ
ปิด MT5 ทั้งหมด
เปิดโฟลเดอร์ติดตั้ง MT5 ที่ทำงานได้ปกติ
terminal64.exeสำรองไว้นำ terminal64.exe ของ MT5 ที่เกิดปัญหาหมุนเวียนมาแทนกัน
terminal64.exeรีสตาร์ท MT5
ด้วยวิธีนี้สภาพแวดล้อม MT5 ที่ความสามารถทำงานได้ปกติกลับมาและพฤติกรรมของ EA ก็ฟื้นคืน
แน่นอนว่าการเปลี่ยนไฟล์ MT5 โดยตรงไม่ใช่วิธีที่ทำบ่อยและเป็นการเลี่ยงที่ผมทำเท่านั้นเพื่ออธิบายให้ทราบ
4.จากประสบการณ์นี้เห็นความสำคัญของ “การรักษาสภาพแวดล้อมที่ถูกต้อง”
สิ่งที่รู้สึกชัดเจนจากเหตุการณ์นี้คือ
ความสำคัญของการรักษาสภาพแวดล้อมที่ทำงานได้ดีไว้
เมื่อ MT5 ถูกอัปเดต
“EA ที่ทำงานอยู่ก่อนหน้าพบว่าทำงานผิดปกติ”
“การแสดงของอินดิเคเตอร์ผิดปกติ”
“พฤติกรรมต่างจากเดิม”
หากเหตุการณ์เหล่านี้เกิดขึ้น ไม่ควรแก้โค้ดทันทีควร
“ตรวจสอบ Build ของ MT5 ว่าเปลี่ยนไปหรือไม่”
เป็นรายการตรวจสอบอันดับแรก
เพียงแค่ทำเช่นนี้ก็ช่วยแยกสาเหตุได้ง่ายขึ้น
แน่นอนว่าไม่ใช่ทุกปัญหาจะเกิดจาก Build อัปเดต
“หลังอัปเดตแล้วทันทีรันแล้วผิดปกติ”
หากเป็นกรณีนี้คุ้มค่าที่จะตรวจสอบ Build ก่อน
สรุป
ในกรณีนี้แต่เดิมคิดว่าโค้ด EA น่าจะเป็นสาเหตุ
อย่างไรก็ตาม
โค้ดไม่ถูกแก้ไข
↓
เปรียบเทียบกับสภาพแวดล้อมที่ถูกต้อง
↓
Build ของ MT5 ต่างกัน
↓
ในบันทึกมีความขัดแย้งว่า Done แต่ Retcode=0
เมื่อดูลำดับขั้นตอนดังกล่าวก็สามารถแยกสาเหตุได้
เมื่อพูดถึงข้อผิดพลาดของโปรแกรม มักจะสงสัยโค้ดเท่านั้น
แต่ในกรณีที่ใช้งานบน MT4/MT5 เครื่องมือที่ทำงานได้จริงสภาพแวดล้อมการรันเองก็เป็นสิ่งที่ควรตรวจสอบด้วยเช่นกัน
หากหลังจากอัปเดต MT5 EA หรืออินดิเคเตอร์ทำงานผิดปกติ ให้
ตรวจสอบ Build ก่อนเป็นขั้นแรก
การจำไว้เป็นแนวทางจะช่วยลดการแก้โค้ดโดยไม่จำเป็น
Trade Toolbox ซีรีส์ สามารถดูเพิ่มเติมได้ที่นี่
Trade Toolbox ซีรีส์มีเวอร์ชันฟรี ลองใช้งาน และแบบเสียค่าบริการ
ถ้ามีสิ่งที่สนใจก็ลองทดสอบในสภาพแวดล้อมจริงก่อน
รายการสินค้าของ Trade Toolbox ซีรีส์ คลิกที่นี่
Trade_Toolbox_SmartOrder_Pro_EA คลิกที่นี่
Trade_Toolbox_OCO_EA คลิกที่นี่
และผู้ที่ใช้งานจริงจะบอกต่อ
“ที่ตรงนี้สะดวกมาก”
“ตรงนี้ปรับปรุงได้”
“ใช้งอย่างไรถึงเป็นแบบนี้”
หากคุณช่วยรีวิวด้วยความคิดเห็นตรงไปตรงมา จะดีมาก
ไม่ใช่แค่คะแนนดีเท่านั้น ความคิดเห็นจากผู้ใช้งานจริงจะเป็นข้อมูลอ้างอิงสำหรับการพัฒนาต่อไป
ขอบคุณที่อ่านจนจบ