← วิดีโอทั้งหมด
MT5 API · 5:40

รับมือการเชื่อมต่อสะดุดและขีดจำกัดคำขอ

ให้ API กู้คืนเทอร์มินัล และควบคุมแอปของคุณ

ดาวน์โหลดตัวอย่าง Python · PY ↓

คำแนะนำทีละขั้นตอน

  1. 0:00

    รับมือการเชื่อมต่อสะดุดและขีดจำกัดคำขอ

    บทเรียนนี้อธิบายวิธีรับมือการเชื่อมต่อ MT5 สะดุดและขีดจำกัดคำขอ โดยรอให้ API กู้คืน กลับมารับข้อมูลสตรีม และลองอ่านข้อมูลใหม่อย่างปลอดภัย เราใช้ผลตอบกลับจริงจากบัญชีทดลอง

  2. 0:18

    ตรวจสอบเซสชันเดิมก่อน

    เปิด mt5.mrpc.pro เก็บคีย์ API และ id ของเทอร์มินัลไว้ ผลตอบกลับ ConnectState ที่บันทึกไว้แสดง Connected และค่า isConnected, isAlive รวมถึง apiIsAlive เป็น true ทั้งหมด เทอร์มินัลทำงานปกติ การเชื่อมต่อเบราว์เซอร์หลุดหรือคำขอหนึ่งครั้งล้มเหลว ไม่ได้แปลว่าต้องสร้างเทอร์มินัลใหม่

  3. 0:48

    ปล่อยให้ระบบกู้คืนอัตโนมัติทำงาน

    MetaRPC ตรวจสอบสถานะเทอร์มินัลและพยายามกู้คืนเซสชันที่ยังใช้งานและเข้าเงื่อนไขโดยอัตโนมัติ โดยคง id เดิม แอปควรพักงานที่ได้รับผลกระทบและให้เวลาบริการ แทนการเรียก Reconnect หรือ ConnectEx ซ้ำ ๆ ตรวจสอบสถานะเป็นระยะ แล้วใช้ AccountSummary ยืนยันว่าเข้าถึงบัญชีได้ก่อนทำงานต่อ การกู้คืนต้องใช้เวลา ไม่ได้เสร็จทันทีหลังคำขอผิดพลาดทุกครั้ง

  4. 1:20

    แก้ไขตามสาเหตุ

    การตัดการเชื่อมต่อโดยตั้งใจ เซสชันหมดอายุ การระงับบริการ หรือข้อมูลเข้าสู่ระบบไม่ถูกต้อง ต้องแก้ไขตามกรณี อ่านสาเหตุแล้วปรับข้อมูลเข้าสู่ระบบหรือแก้ปัญหาบัญชี Reconnect และ ConnectByToken เป็นเครื่องมือกู้คืนที่เรียกโดยตั้งใจ ไม่ใช่วงรอบลองใหม่สำหรับทุกคำขอ หากเซสชันที่เข้าเงื่อนไขยังใช้ไม่ได้ ให้พักงานต่อและแจ้งรหัสข้อผิดพลาดกับเวลาแก่ฝ่ายสนับสนุน

  5. 1:53

    เชื่อมต่อ WebSocket ของแอปอีกครั้ง

    การเชื่อมต่อเทอร์มินัลกับ WebSocket ของแอปเป็นคนละส่วน เมื่ออ่านบัญชีได้อีกครั้ง ให้ปิดซ็อกเก็ตที่เสียแล้วเปิด OnSymbolTick ด้วย id เดิมและคีย์ API สมัครรับข้อมูลสัญลักษณ์ที่ต้องการใหม่ ข้อความ EURUSD จริงนี้มี bid, ask และเวลา ตรวจสอบว่ามีข้อมูลใหม่เข้ามา และอย่าเปิดสตรีมซ้ำ สตรีมเดิมที่ทำงานปกติเปิดต่อได้

  6. 2:24

    รู้จักผลตอบกลับเมื่อเกินขีดจำกัด

    นี่คือผลปฏิเสธ AccountSummary จริงจากการทดสอบอ่านข้อมูลแบบจำกัดจำนวน HTTP Status Code 200 หมายถึง API ส่งผลตอบกลับแล้ว ช่อง error ไม่ใช่ null และมี TERMINAL_RATE_LIMIT_EXCEEDED พร้อมข้อความว่าคำสั่งไม่ได้ถูกดำเนินการ ขีดจำกัดที่พบคือการเรียกที่ไม่ใช่การซื้อขายสามร้อยครั้งในช่วงเวลาย้อนหลังหนึ่งนาที โดยทุกผู้เรียกของเทอร์มินัลใช้ร่วมกัน ตรวจขีดจำกัดปัจจุบันแทนการกำหนดตัวเลขนี้ตายตัวในโค้ด

  7. 3:01

    รอตามเวลาที่เซิร์ฟเวอร์แจ้ง

    ในผลตอบกลับนี้ error.properties มีคู่คีย์และค่าชื่อ RetryAfterSeconds ซึ่งมีค่า 1 รออย่างน้อยหนึ่งวินาที แล้วเพิ่มเวลาหน่วงสุ่มเล็กน้อยก่อนลองอ่านใหม่ พักเวิร์กเกอร์อื่นที่ใช้โควตาเทอร์มินัลเดียวกันด้วย หากถูกปฏิเสธอีก ให้ใช้เวลารอค่าใหม่ สำหรับ HTTP Status Code 429 ให้ทำตามเฮดเดอร์ Retry-After

  8. 3:31

    ค่อย ๆ กลับมาส่งคำขอ

    หลังรอ การอ่านจริงสำเร็จอีกครั้ง โดยได้ HTTP Status Code 200 ไม่มีข้อผิดพลาด API และมีข้อมูลบัญชีทดลอง อย่าส่งคำขออ่านที่ค้างทั้งหมดพร้อมกัน เก็บข้อมูลที่ใช้ซ้ำในแคช ประสานความถี่ของเวิร์กเกอร์ และใช้ OnSymbolTick สำหรับราคาสด การเกินขีดจำกัดเป็นเหตุให้รอ ไม่ใช่ให้เชื่อมต่อเทอร์มินัลใหม่

  9. 4:01

    กำหนดการลองใหม่ให้ชัดเจนและมีขอบเขต

    ตัวอย่าง Python ใช้กับ AccountSummary เท่านั้น โดยลองใหม่เฉพาะผลตอบกลับที่ระบุว่าถูกจำกัดหรือไม่ว่างและมีเวลารอที่ถูกต้อง เพิ่มเวลาหน่วงสุ่มและหยุดหลังสามครั้ง ข้อผิดพลาดอื่นส่งกลับไปยังผู้เรียก เก็บข้อมูลลับในตัวแปรสภาพแวดล้อม สำหรับการเชื่อมต่อสะดุด ให้มีนโยบายแยกที่มีขอบเขต อย่านำฟังก์ชันอ่านนี้ไปครอบคำสั่งเชื่อมต่อหรือคำสั่งซื้อขาย

  10. 4:35

    ตรวจผลการซื้อขายที่ยังไม่แน่ชัดก่อน

    หากผลตอบกลับของคำขอซื้อขายสูญหาย โบรกเกอร์อาจดำเนินการไปแล้ว การกู้คืนอัตโนมัติไม่ได้บอกผลการซื้อขายนั้น เมื่อเข้าถึงได้อีกครั้ง ให้ตรวจ OpenedOrders และ DealsHistory ใช้หมายเลขอ้างอิงคำสั่งและดีลถ้ามี แล้วเทียบสัญลักษณ์ ทิศทาง ปริมาณ และเวลา รายการคล้ายกันอาจแยกไม่ออก จึงควรพักคำขอที่ยังไม่ทราบผล แทนการส่งซ้ำอัตโนมัติ

  11. 5:08

    จบเซสชันอย่างถูกต้อง

    เมื่อตั้งใจจบเซสชัน ให้หยุดการสมัครรับข้อมูลแล้วเรียก Disconnect สตรีมทดลองหยุดแล้วและเทอร์มินัลถูกตัดการเชื่อมต่อ โดยไม่ได้เปลี่ยนแปลงการซื้อขายใด ๆ จำไว้ว่า MetaRPC กู้คืนเทอร์มินัลที่เข้าเงื่อนไข แอปกู้คืนซ็อกเก็ตเมื่อจำเป็น รอเมื่อถูกจำกัด และตรวจผลที่ไม่แน่ชัดก่อนส่งการซื้อขายใหม่