รับมือการเชื่อมต่อสะดุดและขีดจำกัดคำขอ
ให้ API กู้คืนเทอร์มินัล และควบคุมแอปของคุณ
ดาวน์โหลดตัวอย่าง Python · PY ↓
คำแนะนำทีละขั้นตอน
- 0:00
รับมือการเชื่อมต่อสะดุดและขีดจำกัดคำขอ
บทเรียนนี้อธิบายวิธีรับมือการเชื่อมต่อ MT5 สะดุดและขีดจำกัดคำขอ โดยรอให้ API กู้คืน กลับมารับข้อมูลสตรีม และลองอ่านข้อมูลใหม่อย่างปลอดภัย เราใช้ผลตอบกลับจริงจากบัญชีทดลอง
- 0:18
ตรวจสอบเซสชันเดิมก่อน
เปิด mt5.mrpc.pro เก็บคีย์ API และ id ของเทอร์มินัลไว้ ผลตอบกลับ ConnectState ที่บันทึกไว้แสดง Connected และค่า isConnected, isAlive รวมถึง apiIsAlive เป็น true ทั้งหมด เทอร์มินัลทำงานปกติ การเชื่อมต่อเบราว์เซอร์หลุดหรือคำขอหนึ่งครั้งล้มเหลว ไม่ได้แปลว่าต้องสร้างเทอร์มินัลใหม่
- 0:48
ปล่อยให้ระบบกู้คืนอัตโนมัติทำงาน
MetaRPC ตรวจสอบสถานะเทอร์มินัลและพยายามกู้คืนเซสชันที่ยังใช้งานและเข้าเงื่อนไขโดยอัตโนมัติ โดยคง id เดิม แอปควรพักงานที่ได้รับผลกระทบและให้เวลาบริการ แทนการเรียก Reconnect หรือ ConnectEx ซ้ำ ๆ ตรวจสอบสถานะเป็นระยะ แล้วใช้ AccountSummary ยืนยันว่าเข้าถึงบัญชีได้ก่อนทำงานต่อ การกู้คืนต้องใช้เวลา ไม่ได้เสร็จทันทีหลังคำขอผิดพลาดทุกครั้ง
- 1:20
แก้ไขตามสาเหตุ
การตัดการเชื่อมต่อโดยตั้งใจ เซสชันหมดอายุ การระงับบริการ หรือข้อมูลเข้าสู่ระบบไม่ถูกต้อง ต้องแก้ไขตามกรณี อ่านสาเหตุแล้วปรับข้อมูลเข้าสู่ระบบหรือแก้ปัญหาบัญชี Reconnect และ ConnectByToken เป็นเครื่องมือกู้คืนที่เรียกโดยตั้งใจ ไม่ใช่วงรอบลองใหม่สำหรับทุกคำขอ หากเซสชันที่เข้าเงื่อนไขยังใช้ไม่ได้ ให้พักงานต่อและแจ้งรหัสข้อผิดพลาดกับเวลาแก่ฝ่ายสนับสนุน
- 1:53
เชื่อมต่อ WebSocket ของแอปอีกครั้ง
การเชื่อมต่อเทอร์มินัลกับ WebSocket ของแอปเป็นคนละส่วน เมื่ออ่านบัญชีได้อีกครั้ง ให้ปิดซ็อกเก็ตที่เสียแล้วเปิด OnSymbolTick ด้วย id เดิมและคีย์ API สมัครรับข้อมูลสัญลักษณ์ที่ต้องการใหม่ ข้อความ EURUSD จริงนี้มี bid, ask และเวลา ตรวจสอบว่ามีข้อมูลใหม่เข้ามา และอย่าเปิดสตรีมซ้ำ สตรีมเดิมที่ทำงานปกติเปิดต่อได้
- 2:24
รู้จักผลตอบกลับเมื่อเกินขีดจำกัด
นี่คือผลปฏิเสธ AccountSummary จริงจากการทดสอบอ่านข้อมูลแบบจำกัดจำนวน HTTP Status Code 200 หมายถึง API ส่งผลตอบกลับแล้ว ช่อง error ไม่ใช่ null และมี TERMINAL_RATE_LIMIT_EXCEEDED พร้อมข้อความว่าคำสั่งไม่ได้ถูกดำเนินการ ขีดจำกัดที่พบคือการเรียกที่ไม่ใช่การซื้อขายสามร้อยครั้งในช่วงเวลาย้อนหลังหนึ่งนาที โดยทุกผู้เรียกของเทอร์มินัลใช้ร่วมกัน ตรวจขีดจำกัดปัจจุบันแทนการกำหนดตัวเลขนี้ตายตัวในโค้ด
- 3:01
รอตามเวลาที่เซิร์ฟเวอร์แจ้ง
ในผลตอบกลับนี้ error.properties มีคู่คีย์และค่าชื่อ RetryAfterSeconds ซึ่งมีค่า 1 รออย่างน้อยหนึ่งวินาที แล้วเพิ่มเวลาหน่วงสุ่มเล็กน้อยก่อนลองอ่านใหม่ พักเวิร์กเกอร์อื่นที่ใช้โควตาเทอร์มินัลเดียวกันด้วย หากถูกปฏิเสธอีก ให้ใช้เวลารอค่าใหม่ สำหรับ HTTP Status Code 429 ให้ทำตามเฮดเดอร์ Retry-After
- 3:31
ค่อย ๆ กลับมาส่งคำขอ
หลังรอ การอ่านจริงสำเร็จอีกครั้ง โดยได้ HTTP Status Code 200 ไม่มีข้อผิดพลาด API และมีข้อมูลบัญชีทดลอง อย่าส่งคำขออ่านที่ค้างทั้งหมดพร้อมกัน เก็บข้อมูลที่ใช้ซ้ำในแคช ประสานความถี่ของเวิร์กเกอร์ และใช้ OnSymbolTick สำหรับราคาสด การเกินขีดจำกัดเป็นเหตุให้รอ ไม่ใช่ให้เชื่อมต่อเทอร์มินัลใหม่
- 4:01
กำหนดการลองใหม่ให้ชัดเจนและมีขอบเขต
ตัวอย่าง Python ใช้กับ AccountSummary เท่านั้น โดยลองใหม่เฉพาะผลตอบกลับที่ระบุว่าถูกจำกัดหรือไม่ว่างและมีเวลารอที่ถูกต้อง เพิ่มเวลาหน่วงสุ่มและหยุดหลังสามครั้ง ข้อผิดพลาดอื่นส่งกลับไปยังผู้เรียก เก็บข้อมูลลับในตัวแปรสภาพแวดล้อม สำหรับการเชื่อมต่อสะดุด ให้มีนโยบายแยกที่มีขอบเขต อย่านำฟังก์ชันอ่านนี้ไปครอบคำสั่งเชื่อมต่อหรือคำสั่งซื้อขาย
- 4:35
ตรวจผลการซื้อขายที่ยังไม่แน่ชัดก่อน
หากผลตอบกลับของคำขอซื้อขายสูญหาย โบรกเกอร์อาจดำเนินการไปแล้ว การกู้คืนอัตโนมัติไม่ได้บอกผลการซื้อขายนั้น เมื่อเข้าถึงได้อีกครั้ง ให้ตรวจ OpenedOrders และ DealsHistory ใช้หมายเลขอ้างอิงคำสั่งและดีลถ้ามี แล้วเทียบสัญลักษณ์ ทิศทาง ปริมาณ และเวลา รายการคล้ายกันอาจแยกไม่ออก จึงควรพักคำขอที่ยังไม่ทราบผล แทนการส่งซ้ำอัตโนมัติ
- 5:08
จบเซสชันอย่างถูกต้อง
เมื่อตั้งใจจบเซสชัน ให้หยุดการสมัครรับข้อมูลแล้วเรียก Disconnect สตรีมทดลองหยุดแล้วและเทอร์มินัลถูกตัดการเชื่อมต่อ โดยไม่ได้เปลี่ยนแปลงการซื้อขายใด ๆ จำไว้ว่า MetaRPC กู้คืนเทอร์มินัลที่เข้าเงื่อนไข แอปกู้คืนซ็อกเก็ตเมื่อจำเป็น รอเมื่อถูกจำกัด และตรวจผลที่ไม่แน่ชัดก่อนส่งการซื้อขายใหม่