แปลงไฟล์ .mq4 ให้ใช้บน MetaTrader 5
มีโปรแกรมเป็นไฟล์ .mq4 แต่เทอร์มินัลเป็น MetaTrader 5 จะเปลี่ยนนามสกุลไฟล์ หรือก๊อปโค้ดไปวางใน MetaEditor ก็ใช้ไม่ได้ บทความนี้อธิบายว่าทำไม การแปลงจริงๆ ต้องทำอะไร และต้องตรวจอะไรก่อนเอาไปใช้กับบัญชี
ทำไมคอมไพล์ตรงๆ ไม่ได้
ไฟล์ .mq4 เขียนด้วยภาษารุ่นก่อนของตระกูล MetaTrader ส่วน MQL5 หน้าตาคล้ายกัน ไวยากรณ์แบบภาษา C เหมือนกัน มี OnInit กับ OnDeinit เหมือนกัน แต่ส่วนที่สำคัญที่สุดกับโปรแกรมเทรดถูกออกแบบใหม่หมด
- ออร์เดอร์ โพซิชัน และดีล เป็นคนละอย่างกัน ในภาษารุ่นก่อน ไม้ที่เปิดอยู่คือ "ออร์เดอร์" ที่วนหาด้วย OrderSelect แต่ใน MQL5 ไม้ที่เปิดอยู่คือโพซิชัน คำสั่งที่เปิดมันคือออร์เดอร์ และการจับคู่ราคาแต่ละครั้งคือดีล โค้ดที่นับ แก้ หรือปิดไม้ ต้องเขียนใหม่ ไม่ใช่แค่เปลี่ยนชื่อฟังก์ชัน
- Indicator คืนค่าเป็น handle ไม่ใช่ตัวเลข iMA แบบเก่าคืนตัวเลขมาเลย แต่ใน MQL5 iMA สร้าง Indicator ครั้งเดียวแล้วคืน handle ค่าจริงต้องอ่านด้วย CopyBuffer ซึ่งล้มได้ และต้องตรวจทุกครั้ง
- ส่งคำสั่งเทรดเป็นคำขอกับผลลัพธ์ MQL5 ใส่ข้อมูลลงโครงสร้างคำขอแล้วอ่านรหัสผลกลับมา โปรแกรมส่วนใหญ่ใช้คลาส CTrade มาตรฐาน วิธีจัดการ error จึงเปลี่ยนตามไปด้วย
- บัญชีเป็นแบบ netting หรือ hedging ก็ได้ บนบัญชี netting ไม้ใหม่ในคู่เดิมจะไปเปลี่ยนโพซิชันเดิม ไม่ได้เปิดไม้ที่สอง ตรรกะที่คิดว่ามีหลายไม้แยกกันในคู่เดียว ต้องรู้ว่ารันอยู่บนบัญชีแบบไหน
- อ่านราคาและเวลาคนละแบบ อาร์เรย์สำเร็จรูปอย่าง Close[] และ Time[] ไม่มีแล้ว โปรแกรมต้องก๊อปข้อมูลที่ต้องใช้มาเอง
เพราะแบบนี้ ตัวแปลงอัตโนมัติจึงมักได้โค้ดที่คอมไพล์ไม่ผ่าน หรือคอมไพล์ผ่านแต่ทำงานไม่เหมือนเดิม ไวยากรณ์แปลได้ แต่พฤติกรรมไม่ได้แปลตามมาด้วย
แปลงเงื่อนไข ไม่ใช่แปลงทีละบรรทัด
วิธีที่ปลอดภัยกว่าคือมองไฟล์ .mq4 เป็นคำอธิบายเงื่อนไข เขียนเงื่อนไขเหล่านั้นออกมาเป็นคำพูดธรรมดา แล้วสร้างโปรแกรม MetaTrader 5 จากสิ่งที่เขียนไว้ การแปลทีละบรรทัดพาความแปลกของโค้ดเก่ามาทั้งหมด ส่วนการเขียนใหม่จากเงื่อนไขพามาเฉพาะสิ่งที่คุณเลือกเก็บไว้
ก่อนเริ่มเขียน ตอบคำถามเหล่านี้เกี่ยวกับโปรแกรมเดิมให้ได้
- เปิดไม้ตอนไหนกันแน่ ครั้งเดียวตอนแท่งเทียนใหม่เริ่ม หรือทุกครั้งที่ราคาขยับ
- SL กับ TP อยู่ที่ไหน ส่งไปพร้อมออร์เดอร์ หรือโปรแกรมเฝ้าไว้แล้วปิดเอง ระดับที่เก็บไว้แค่ในโปรแกรมไม่ได้กันอะไรเลยตอนที่เทอร์มินัลปิดอยู่
- ถ้ามีไม้เปิดค้างอยู่ตอนโปรแกรมเริ่มใหม่ มันทำอะไรกับไม้นั้น
- มี input อะไรบ้าง และค่า 0 ของแต่ละตัวแปลว่าอะไร
- อ่านไทม์เฟรมอื่น คู่เงินอื่น หรือไฟล์ Indicator ของคนอื่นหรือเปล่า
ตรวจโปรแกรมที่แปลงแล้ว ก่อนเชื่อมัน
- input ครบเหมือนเดิม ชื่อเดิม ค่าเริ่มต้นเดิม
- ทดสอบย้อนหลังทั้งตัวเก่าและตัวใหม่ในช่วงเดียวกัน แล้วเทียบกันทีละไม้ ไม่ใช่ดูแค่ผลรวม ถ้าเข้าไม้คนละเวลาบนแท่งเทียนเดียวกัน แปลว่ามีเงื่อนไขที่ถูกอ่านต่างไป
- SL กับ TP ต้องเห็นบนโพซิชันในเทอร์มินัล ไม่ใช่มีแค่ในข้อความของโปรแกรม
- ปิดแล้วเปิดเทอร์มินัลใหม่ตอนมีไม้ค้างอยู่ โปรแกรมต้องรู้จักไม้นั้น ไม่เปิดไม้ที่สองซ้ำ
- แท็บ Experts กับ Journal ต้องเงียบตอนทำงานปกติ โปรแกรมที่พิมพ์ข้อความทุกครั้งที่ราคาขยับ จะกลบข้อความเดียวที่คุณต้องเห็น
uBotDesign ทำแบบนี้
แนบไฟล์ .mq4 ในแชทบนแอป ผู้ช่วยอ่านไฟล์แล้วเขียนกลับมาเป็นภาษาของคุณว่าเข้าใจเงื่อนไขแต่ละข้อว่าอย่างไร คุณแก้ตรงที่มันเข้าใจผิดได้ สรุปเงื่อนไขที่เขียนไว้คือสิ่งที่คุณตกลง จากนั้นโรงงานเขียนโปรแกรม MetaTrader 5 จากสรุปนั้น คอมไพล์ ตรวจกับทุกเงื่อนไข และทดสอบกับราคาย้อนหลังก่อนวางไฟล์บนชั้นของคุณ ไฟล์ Indicator ที่เป็น .mq4 ก็อ่านแบบเดียวกัน แล้วสร้างเป็น Indicator ของ MetaTrader 5
คุยกับผู้ช่วยไม่เสียอะไร ราคาการสร้างแสดงให้เห็นก่อนกดยืนยันทุกครั้ง