Phụ lục tham khảo

Luồng trạng thái của lệnh

Mô tả chi tiết các trạng thái của lệnh trong hệ thống FastConnect và luồng chuyển đổi giữa các trạng thái.

Luồng trạng thái của lệnh

Tổng quan

Mỗi lệnh giao dịch qua FastConnect API sẽ trải qua các trạng thái khác nhau trong vòng đời của nó. Tài liệu này mô tả ý nghĩa từng trạng thái và luồng chuyển đổi giữa chúng.

Sơ đồ trạng thái

Sơ đồ luồng trạng thái lệnh FastConnect

Bảng trạng thái

#FC StatusTên đầy đủMô tả
1PDPendingTrạng thái ghi nhận — lệnh cơ sở đã được tiếp nhận vào hệ thống.
2RSReady to SendLệnh sẵn sàng gửi lên sở giao dịch.
3SDSent to ExchangeLệnh đã được gửi lên sở giao dịch (áp dụng cho lệnh phiên).
4QUQueue in ExchangeLệnh đang chờ khớp tại sở giao dịch.
5WAWaiting ApprovalLệnh đang chờ phê duyệt.
6FFFully FilledLệnh đã khớp toàn bộ khối lượng. Trạng thái kết thúc.
7PFPartially FilledLệnh đã khớp một phần khối lượng, phần còn lại tiếp tục chờ khớp.
8FFPCFully Filled Partially CancelledLệnh đã khớp một phần, phần còn lại bị hủy. Trạng thái kết thúc.
9WMWaiting ModifyLệnh đang chờ sửa đổi (giá hoặc khối lượng).
10WCWaiting CancelLệnh đang chờ hủy.
11CLCancelledLệnh đã hủy thành công. Trạng thái kết thúc.
12RJRejectedLệnh bị từ chối (không đủ điều kiện, sai tham số...). Trạng thái kết thúc.
13EXExpiredLệnh hết hiệu lực hoặc bị sở từ chối. Trạng thái kết thúc.
14IAVPreSessionOrderLệnh trước phiên (lệnh PS) — đặt trước giờ giao dịch, chờ gửi khi phiên mở.
15SOIPreSessionStopOrderLệnh dừng trước phiên — lệnh stop đặt trước giờ giao dịch.
16PASWaitingApprovalStopOrderLệnh dừng đang chờ phê duyệt.

Luồng chuyển đổi chi tiết

Đặt lệnh mới

  1. Khi consumer gửi request đặt lệnh, hệ thống ghi nhận lệnh với trạng thái:
    • PD (Pending) cho lệnh cơ sở
    • IAV (PreSessionOrder) cho lệnh trước phiên
  2. Lệnh chuyển sang RS (Ready to Send) khi sẵn sàng gửi lên sở.
  3. Nếu không đủ điều kiện (thiếu ký quỹ, sai tham số, vi phạm room...) → RJ (Rejected).
  4. Lệnh được gửi lên sở → SD (Sent to Exchange), sau đó xếp hàng chờ khớp → QU (Queue in Exchange).

Khớp lệnh

  • Khớp toàn bộ khối lượng → FF (Fully Filled). Kết thúc.
  • Khớp một phần → PF (Partially Filled). Phần còn lại tiếp tục chờ khớp.

Sửa lệnh

  • Từ trạng thái QU hoặc PF, consumer có thể gửi yêu cầu sửa lệnh.
  • Lệnh chuyển sang WM (Waiting Modify).
  • Khi sửa thành công, lệnh quay về trạng thái trước đó (QU hoặc PF) với thông tin đã cập nhật.

Hủy lệnh

  • Từ trạng thái QU: hủy lệnh → WC (Waiting Cancel) → CL (Cancelled). Kết thúc.
  • Từ trạng thái PF: hủy phần còn lại → WC → FFPC (Fully Filled Partially Cancelled). Kết thúc.

Hết hiệu lực

  • Lệnh tại sở bị reject → EX (Expired). Kết thúc.
  • Lệnh khớp một phần (PF) hết thời gian hiệu lực → FFPC. Kết thúc.

Các trạng thái kết thúc (End State)

Trạng tháiÝ nghĩa
FFLệnh khớp hết — giao dịch hoàn tất.
FFPCLệnh khớp một phần, phần còn lại bị hủy hoặc hết hiệu lực.
CLLệnh đã hủy toàn bộ.
RJLệnh bị từ chối ngay từ đầu.
EXLệnh hết hiệu lực hoặc bị sở từ chối.

subscribe/unsubscribeWS

Đăng ký/hủy đăng ký nhận thông báo order/portfolio trên cùng kết nối — **bắt buộc** để nhận trạng thái lệnh thật sau khi `order.place`/`order.amend`/`order.cancel` đã phản hồi `PD` (xem mục "Đặt/sửa/hủy lệnh: xác nhận nhanh, kết quả đến sau" ở đầu tài liệu). Message này không cần chữ ký và không mang `id`. API này **chỉ hỗ trợ channel `TRADING`**, gồm 2 loại topic: - `order.{accountNo}` — thông báo khớp lệnh, khớp một phần. - `portfolio.{accountNo}` — thông báo thay đổi tài sản/danh mục, **chỉ áp dụng cho tài khoản phái sinh (đuôi 8)**. Cấu trúc dữ liệu thông báo giống với channel `TRADING` của FastConnect WebSocket API (dữ liệu thị trường) — xem chi tiết field tại [Sub/Unsub Trading Data](/docs/api-reference/subscribeUnsubscribeTradingData). **Lưu ý:** mỗi topic phải chỉ định `accountNo` cụ thể — **không hỗ trợ wildcard `*`**, và tài khoản đó phải thuộc quyền sở hữu của API Key đang dùng (không thể đăng ký nhận dữ liệu của tài khoản khách hàng khác). **Subscribe sample:** ```json { "method": "SUBSCRIBE", "channel": "TRADING", "topics": ["order.0901351", "portfolio.1231996"] } ``` **Ack:** ```json { "method": "SUBSCRIBE", "channel": "TRADING", "status": "ok", "message": "Subscribed to 2 topic(s)" } ``` Nếu `status: "error"`, `message` mô tả lý do (topic sai cú pháp, thiếu quyền, hoặc tài khoản không thuộc quyền sở hữu). **Ví dụ thông báo** (`order.{accountNo}`): ```json { "channel": "TRADING", "topic": "order.0901351", "data": { "eventType": "orderEvent", "clientRequestId": "req-0001", "orderId": "ORD123456", "orderStatus": "FF", "...": "..." } } ```

Tham khảo đặt lệnh điều kiện

Hướng dẫn chi tiết về cách đặt lệnh điều kiện (FCO) qua FastConnect API, bao gồm các loại lệnh, tham số và ví dụ.

Trên trang này