← Tất cả hướng dẫn
MT5 API · 5:27

Xử lý gián đoạn và giới hạn yêu cầu.

Để API khôi phục terminal, bạn quản lý ứng dụng.

Tải ví dụ Python · PY ↓

Hướng dẫn bằng văn bản

  1. 0:00

    Xử lý gián đoạn và giới hạn yêu cầu.

    Hướng dẫn này giải thích cách xử lý gián đoạn MT5 và giới hạn yêu cầu: chờ API khôi phục, đăng ký lại luồng dữ liệu và thử lại yêu cầu đọc an toàn. Chúng ta dùng phản hồi thật từ tài khoản demo.

  2. 0:18

    Kiểm tra phiên hiện có.

    Mở mt5.mrpc.pro và giữ khóa API cùng id terminal đã lưu. Phản hồi ConnectState được ghi lại cho thấy Connected; isConnected, isAlive và apiIsAlive đều là true. Terminal đang hoạt động bình thường. Trình duyệt mất kết nối hoặc một yêu cầu thất bại không có nghĩa là phải tạo terminal mới.

  3. 0:46

    Chờ cơ chế khôi phục tự động.

    MetaRPC theo dõi tình trạng terminal và tự động thử khôi phục các phiên đang hoạt động đủ điều kiện, giữ nguyên id. Ứng dụng nên tạm dừng tác vụ bị ảnh hưởng và dành thời gian cho dịch vụ, thay vì liên tục gọi Reconnect hoặc ConnectEx. Kiểm tra trạng thái theo khoảng thời gian, rồi xác minh quyền truy cập tài khoản bằng AccountSummary trước khi tiếp tục. Khôi phục cần thời gian, không hoàn tất ngay sau mọi lần gọi thất bại.

  4. 1:19

    Xử lý đúng nguyên nhân.

    Chủ động ngắt kết nối, phiên hết hạn, bị đình chỉ hoặc thông tin đăng nhập không hợp lệ đều cần cách xử lý tương ứng. Đọc nguyên nhân rồi cập nhật thông tin đăng nhập hoặc giải quyết vấn đề tài khoản. Reconnect và ConnectByToken là công cụ khôi phục chủ động, không phải vòng lặp cho mọi yêu cầu. Nếu phiên đủ điều kiện vẫn không dùng được, tiếp tục tạm dừng và gửi mã lỗi cùng thời điểm cho bộ phận hỗ trợ.

  5. 1:50

    Khôi phục WebSocket của ứng dụng.

    Kết nối terminal và WebSocket của ứng dụng là hai kết nối khác nhau. Khi đọc tài khoản đã hoạt động, đóng socket bị lỗi và mở OnSymbolTick với id đã lưu cùng khóa API. Đăng ký lại các mã giao dịch cần thiết. Tin nhắn EURUSD thật ở đây có bid, ask và dấu thời gian. Xác nhận dữ liệu mới đang đến và tránh tạo luồng trùng lặp. Luồng đang hoạt động tốt có thể giữ nguyên.

  6. 2:24

    Nhận biết phản hồi giới hạn thực tế.

    Đây là phản hồi từ chối AccountSummary thật, thu được trong phép thử chỉ đọc có giới hạn. HTTP Status Code 200 cho biết API đã trả lời. Trường error khác null chứa TERMINAL_RATE_LIMIT_EXCEEDED và thông báo rằng lời gọi chưa được thực hiện. Giới hạn quan sát được là ba trăm lời gọi không giao dịch trong mỗi phút trượt, dùng chung cho các bên gọi cùng terminal. Hãy xem giới hạn hiện tại, đừng cố định số này trong mã.

  7. 2:58

    Chờ theo thời gian máy chủ cung cấp.

    Trong phản hồi này, error.properties chứa cặp khóa và giá trị RetryAfterSeconds với giá trị 1. Chờ ít nhất một giây rồi thêm một khoảng trễ ngẫu nhiên ngắn trước khi thử đọc lại. Tạm dừng cả các worker dùng chung hạn mức terminal. Nếu lại bị từ chối, dùng thời gian chờ mới. Với HTTP Status Code 429, tuân theo tiêu đề Retry-After.

  8. 3:28

    Tiếp tục từng bước.

    Sau khi chờ, yêu cầu đọc thật thành công: HTTP Status Code 200, không có lỗi API và có dữ liệu tài khoản demo. Đừng gửi dồn toàn bộ yêu cầu đang chờ. Lưu đệm thông tin lặp lại, phối hợp tốc độ giữa các worker và dùng OnSymbolTick cho giá trực tiếp. Bị giới hạn là lý do để chờ, không phải để kết nối lại terminal.

  9. 3:58

    Giới hạn rõ ràng việc thử lại.

    Ví dụ Python đi kèm chỉ dành cho AccountSummary. Nó chỉ thử lại phản hồi giới hạn hoặc bận rõ ràng có thời gian chờ hợp lệ, thêm độ trễ ngẫu nhiên và dừng sau ba lần. Lỗi khác được trả cho bên gọi. Lưu thông tin đăng nhập trong biến môi trường. Dùng chính sách riêng có giới hạn cho gián đoạn; không áp dụng hàm đọc này cho lệnh kết nối hoặc phương thức giao dịch.

  10. 4:27

    Làm rõ kết quả giao dịch chưa chắc chắn.

    Nếu phản hồi của yêu cầu giao dịch bị mất, nhà môi giới có thể đã xử lý yêu cầu đó. Khôi phục tự động không cho biết kết quả giao dịch. Khi truy cập trở lại, kiểm tra OpenedOrders và DealsHistory. Dùng ticket lệnh và khớp lệnh nếu có, rồi đối chiếu mã, chiều, khối lượng và thời điểm. Các giao dịch tương tự có thể bị nhầm, nên giữ yêu cầu chưa rõ kết quả ở trạng thái tạm dừng thay vì tự động gửi lại.

  11. 5:01

    Kết thúc phiên đúng cách.

    Khi chủ động kết thúc phiên, dừng các đăng ký và gọi Disconnect. Luồng demo đã dừng và terminal đã ngắt kết nối; không có giao dịch nào bị thay đổi. Hãy nhớ: MetaRPC khôi phục terminal đủ điều kiện, ứng dụng khôi phục socket khi cần, chờ khi bị giới hạn và xác minh kết quả chưa rõ trước khi gửi giao dịch khác.