Models
Các interface TypeScript và message streaming trong Node.js SDK
Các model là TypeScript interface (riêng Token và OTPResponse là class). Import từ package chính.
Cấu trúc Module
@ssi.developer/ssi-sdk
├── Auth, Data, Trading, Stream (client classes)
├── Config (cấu hình)
├── models/
│ ├── auth → Token, OTPResponse
│ ├── account → Account
│ ├── marketData → OHLCData, MarketIndexes, MarketIndexSummary, SecuritiesInfo, SecuritiesSummary, MasterData,
│ │ CorporateAction
│ ├── trading → PlaceOrderResponse, ModifyOrderResponse, CancelOrderResponse, MaxBuySellResponse,
│ │ BatchPlaceOrderItem, BatchCancelOrderItem, BatchOrderResponse, BatchOrderResult
│ ├── portfolio → EquityAccountBalance, DerivativeAccountBalance, EquityPosition, DerivativePosition,
│ │ AllDerivativePosition, Order
│ ├── streaming → DataMessage, TradingMessage, HeartbeatMessage, IndexTickMessage, IntervalMessage,
│ │ IndexSummaryMessage, FCOOrderUpdateMessage, ...
│ └── fco → FCOInfo, FCOParams, FCOListResponse, FCOOrder, FCOOrderBookResponse, FCOPlaceResponse,
│ FCOCancelResponse, FCOStatusHistoryItem
├── enums/ → OrderSide, OrderType, Board, Timeframe, FCOType, FCOOperator, FCOStatus, ...
├── exceptions → SSIError, APIError, AuthenticationError, ...
└── Trading WebSocket
→ asyncTradingWs, tradingWs, TradingWSClient, TradingWSService, MUTATING_METHODS,
TradingWSResponse, FcoParamsKind, FcoListOptions, OrderBookQueryCác nhóm theo tính năng, đều trỏ về API Services là nơi mô tả cách dùng:
- Batch Orders:
BatchPlaceOrderItem,BatchCancelOrderItem,BatchOrderResponse,BatchOrderResult. - Real-time Index Data:
IndexTickMessage,IntervalMessage,IndexSummaryMessage. - Trading WebSocket:
TradingWSResponse,FcoParamsKind,FcoListOptionsvàOrderBookQuery.
Xác thực
Token
| Field | Kiểu | Mô tả |
|---|---|---|
accessToken | string | Access token |
tokenType | string | Loại token (mặc định "Bearer") |
expiresAt | number | Thời điểm access token hết hạn, epoch giây (0 = không rõ, coi như đã hết hạn) |
refreshToken | string | Refresh token |
refreshExpiresAt | number | Thời điểm refresh token hết hạn, epoch giây. Trước đây tên là refreshTokenExpiresAt |
Ngoài field, Token còn có:
| Thành viên | Kiểu | Mô tả |
|---|---|---|
effectiveExpiresAt | number (getter) | Mốc epoch giây sau đó bộ token không dùng được nếu không có OTP mới: lấy mốc sớm hơn trong hai mốc hết hạn, bỏ qua mốc không rõ. 0 khi cả hai đều không rõ |
canRefresh | boolean (getter) | Có refresh token và nó chưa (sắp) hết hạn. Nếu không rõ hạn của refresh token thì vẫn trả true, server sẽ từ chối nếu token đã chết |
toDict() | Record<string, unknown> | Giá trị gốc của token (dùng khi bạn thật sự cần lưu lại) |
toString(), console.log và JSON.stringify của Token đều che accessToken và refreshToken. Chỉ toDict() trả giá trị thật, vì vậy đừng log kết quả của nó.
OTPResponse
Kết quả của requestOtpTyped() (xem Client Classes). OTPResponse cũng là class và che transactionId khi JSON.stringify.
| Field | Kiểu | Mô tả |
|---|---|---|
message | string | Thông báo của server ("" nếu không có) |
transactionId | string? | Chỉ có với Smart OTP (duyệt qua push). OTP gửi qua SMS/e-mail chỉ có message |
Tài khoản
Account
| Field | Kiểu | Mô tả |
|---|---|---|
accountNo | string | Số tài khoản |
accountType | AccountType | string | number | undefined | Loại tài khoản. Là AccountType nếu SDK nhận ra, giữ nguyên giá trị thô nếu không nhận ra, undefined nếu server không gửi |
Dữ liệu thị trường
OHLCData
| Field | Kiểu | Mô tả |
|---|---|---|
symbol | string | Mã chứng khoán |
tradingDate | string | Ngày giao dịch |
openPrice | number | Giá mở |
highPrice | number | Giá cao |
lowPrice | number | Giá thấp |
closePrice | number | Giá đóng |
volume | number | Khối lượng |
value | number | Giá trị giao dịch |
MarketIndexes
| Field | Kiểu | Mô tả |
|---|---|---|
index | string | Mã chỉ số |
indexName | string | Tên chỉ số |
board | Board | string | undefined | Sàn. Là Board nếu SDK nhận ra, giữ chuỗi thô nếu không nhận ra |
boardRaw | string? | Giá trị sàn đúng như server gửi |
MarketIndexSummary
| Field | Kiểu | Mô tả |
|---|---|---|
tradingDate | string | Ngày giao dịch |
indexValue | number | Giá trị chỉ số |
indexChange | number | Thay đổi |
indexChangePercent | number | Thay đổi (%) |
totalTrade | number | Tổng khối lượng giao dịch |
totalTradeValue | number | Tổng giá trị giao dịch |
totalAdvanceStock | number | Số CP tăng |
totalDeclineStock | number | Số CP giảm |
totalSteadyStock | number | Số CP không đổi |
totalMatch | number | Tổng khối lượng khớp |
totalMatchValue | number | Tổng giá trị khớp |
totalDeal | number | Tổng khối lượng thoả thuận |
totalDealValue | number | Tổng giá trị thoả thuận |
totalCeilingStock | number | Số CP trần |
totalFloorStock | number | Số CP sàn |
totalPropBuy | number | Tổng KL mua tự doanh |
totalPropBuyValue | number | Tổng GT mua tự doanh |
totalPropSell | number | Tổng KL bán tự doanh |
totalPropSellValue | number | Tổng GT bán tự doanh |
totalBuyForeign | number? | KL mua nước ngoài |
totalBuyForeignValue | number? | GT mua nước ngoài |
totalSellForeign | number? | KL bán nước ngoài |
totalSellForeignValue | number? | GT bán nước ngoài |
netPurchasesForeignVolume | number? | KL mua ròng nước ngoài |
netPurchasesForeignValue | number? | GT mua ròng nước ngoài |
Các field nước ngoài là undefined khi server không gửi.
SecuritiesInfo
Field số mà server bỏ trống hoặc không gửi là undefined (không phải 0). Chuỗi rỗng cũng thành undefined.
| Field | Kiểu | Mô tả |
|---|---|---|
symbol | string | Mã chứng khoán |
board | Board | string? | Sàn |
index | string? | Chỉ số |
symbolNameVi | string? | Tên tiếng Việt |
symbolNameEn | string? | Tên tiếng Anh |
lotSize | number? | Lô giao dịch |
listedShares | number? | Số CP niêm yết |
icbCode | string? | Mã ICB |
icbName | string? | Tên ICB |
maturityDate | string? | Ngày đáo hạn |
firstTradingDate | string? | Ngày GD đầu tiên |
lastTradingDate | string? | Ngày GD cuối cùng |
cwUnderlyingSymbol | string? | Mã CK cơ sở CW |
cwExercisePrice | number? | Giá thực hiện CW |
cwExecutionRatio | number? | Tỷ lệ thực hiện CW |
iIndex | number? | Chỉ số I |
iNav | number? | Giá trị iNAV |
openInterest | number? | Khối lượng mở (OI) |
settlementPrice | number? | Giá thanh toán |
stockType | string? | Mã loại chứng khoán |
SecuritiesSummary
| Field | Kiểu | Mô tả |
|---|---|---|
symbol | string | Mã chứng khoán |
tradingDate | string | Ngày giao dịch |
priceChange | number | Thay đổi giá |
priceChangePercent | number | Thay đổi giá (%) |
openPrice | number | Giá mở |
highPrice | number | Giá cao |
lowPrice | number | Giá thấp |
closePrice | number | Giá đóng |
totalMatch | number | Tổng khối lượng khớp |
totalMatchValue | number | Tổng giá trị khớp |
averagePrice | number | Giá trung bình |
totalBuy | number | Tổng KL mua |
totalTradeBuy | number | Tổng GT mua |
totalSell | number | Tổng KL bán |
totalTradeSell | number | Tổng GT bán |
totalForeignBuy | number | KL mua nước ngoài |
totalForeignBuyValue | number | GT mua nước ngoài |
totalForeignSell | number | KL bán nước ngoài |
totalForeignSellValue | number | GT bán nước ngoài |
remainForeignRoom | number | Room nước ngoài còn lại |
totalForeignRoom | number | Tổng room nước ngoài |
totalDeal | number | Tổng KL thoả thuận |
totalDealValue | number | Tổng GT thoả thuận |
openInterest | number | Khối lượng mở (OI) |
settlementPrice | number | Giá thanh toán |
ceiling / floor / refPrice | number? | Giá trần / sàn / tham chiếu. securitiesSummary không gửi các field này nên luôn là undefined: dùng getMasterData() (xem MasterData) |
MasterData
Giá trần, sàn và tham chiếu của một mã, lấy từ getMasterData() (xem API Services, mục 3.6).
| Field | Kiểu | Mô tả |
|---|---|---|
board | Board | string? | Sàn |
symbol | string | Mã chứng khoán |
tradingDate | string | Ngày giao dịch |
ceiling | number | Giá trần |
floor | number | Giá sàn |
refPrice | number | Giá tham chiếu |
CorporateAction
Một sự kiện quyền (cổ tức, cổ phiếu thưởng, phát hành thêm...) của một mã, lấy từ getCorporateActions() và getCorporateActionsHistorical() (xem API Services, mục 3.7). Mọi field đều là string đúng như server trả: ngày giữ dạng text YYYY/MM/DD, ratio không được parse vì ý nghĩa phụ thuộc loại sự kiện. Field server để trống (ví dụ sự kiện mới công bố chưa có ngày giao dịch không hưởng quyền hoặc tỷ lệ) là "".
| Field | Kiểu | Mô tả |
|---|---|---|
symbol | string | Mã chứng khoán |
eventTitle | string | Tiêu đề sự kiện |
exrightDate | string | Ngày giao dịch không hưởng quyền |
recordDate | string | Ngày đăng ký cuối cùng |
issueDate | string | Ngày thực hiện |
exchange | string | Mã sàn, ví dụ "HOSE" |
ratio | string | Tỷ lệ sự kiện dạng text, ví dụ "0.9388" |
Danh mục
EquityAccountBalance
| Field | Kiểu | Mô tả |
|---|---|---|
accountNo | string | Số tài khoản |
accountBalance | number | Số dư tài khoản |
totalDebt | number | Tổng nợ |
interestLoan | number | Lãi vay |
overdueFeeLoan | number | Phí quá hạn |
withdrawable | number | Tiền rút được |
onHoldCash | number | Tiền giữ |
sellUnmatched | number | Bán chưa khớp |
sellT0 | number | Tiền bán T+0 |
sellT1 | number | Tiền bán T+1 |
sellT2 | number | Tiền bán T+2 |
buyUnmatched | number | Mua chưa khớp |
buyT0 | number | Tiền mua T+0 |
buyT1 | number | Tiền mua T+1 |
buyT2 | number | Tiền mua T+2 |
advanceCashT0 | number | Ứng trước T+0 |
advanceCashT1 | number | Ứng trước T+1 |
holdSubscription | number | Giữ đăng ký mua |
dividend | number | Cổ tức |
DerivativeAccountBalance
| Field | Kiểu | Mô tả |
|---|---|---|
accountNo | string | Số tài khoản |
accountBalance | number | Số dư tài khoản |
fee | number | Phí |
commission | number | Hoa hồng |
interest | number | Lãi |
extInterest | number | Lãi mở rộng |
loan | number | Khoản vay |
deliveryAmount | number | Giá trị giao hàng |
floatingPl | number | Lãi/lỗ chưa thực hiện |
tradingPl | number | Lãi/lỗ giao dịch |
totalPl | number | Tổng lãi/lỗ |
withdrawable | number | Có thể rút |
cashSsi | number | Tiền tại SSI |
validNonCashSsi | number | Tài sản phi tiền mặt hợp lệ tại SSI |
withdrawableSsi | number | Có thể rút tại SSI |
cashVsdc | number | Tiền tại VSDC |
validNonCashVsdc | number | Tài sản phi tiền mặt hợp lệ tại VSDC |
withdrawableVsdc | number | Có thể rút tại VSDC |
cashWithdrawableSsi và cashWithdrawableVsdc vẫn đọc được nhưng deprecated: dùng withdrawableSsi và withdrawableVsdc.
EquityPosition
| Field | Kiểu | Mô tả |
|---|---|---|
accountNo | string | Số tài khoản |
symbol | string | Mã chứng khoán |
quantity | number | Tổng khối lượng |
sellableQuantity | number | Khối lượng bán được |
costPrice | number | Giá vốn |
buyingQuantity | number | Khối lượng đang mua |
sellingQuantity | number | Khối lượng đang bán |
mortgageQuantity | number | Khối lượng cầm cố |
blockQuantity | number | Khối lượng phong toả |
dividendQuantity | number | Khối lượng cổ tức |
boughtQuantity | number | Khối lượng đã mua |
soldQuantity | number | Khối lượng đã bán |
t1SellQuantity | number | Khối lượng bán T+1 |
t2SellQuantity | number | Khối lượng bán T+2 |
t1BuyQuantity | number | Khối lượng mua T+1 |
t2BuyQuantity | number | Khối lượng mua T+2 |
restrictedQuantity | number | Khối lượng hạn chế |
DerivativePosition
| Field | Kiểu | Mô tả |
|---|---|---|
accountNo | string | Số tài khoản |
symbol | string | Mã hợp đồng |
long / short / net | number | Vị thế Long / Short / Net (net có thể âm) |
bidAvgPrice / askAvgPrice | number | Giá TB mua / bán |
floatingPl / tradingPl | number | Lãi/lỗ |
tradePrice | number | Giá giao dịch |
AllDerivativePosition
Vị thế phái sinh của một tài khoản, tách vị thế đang mở và đã đóng. Nằm trong Position.derivative; Position.equity là danh sách EquityPosition[]. Cả hai là undefined khi tài khoản không có phần đó (xem cách các method positions trả undefined ở API Services).
| Field | Kiểu | Mô tả |
|---|---|---|
openPositions | DerivativePosition[] | Vị thế đang mở |
closedPositions | DerivativePosition[] | Vị thế đã đóng |
accountNo | string | Số tài khoản |
Order
| Field | Kiểu | Mô tả |
|---|---|---|
accountNo | string | Số tài khoản |
clientRequestId | string | Client request ID (tối đa 20 ký tự) |
orderId | string | Order ID |
symbol | string | Mã chứng khoán |
side | OrderSide | string | undefined | Mua/Bán. Giữ chuỗi thô nếu SDK không nhận ra |
orderType | OrderType | string | undefined | Loại lệnh |
price | number | OrderType | string | Giá đặt. Lệnh giá thị trường là một từ như "ATO" |
avgPrice | number | Giá khớp TB |
quantity | number | Khối lượng đặt |
osQuantity | number? | Khối lượng chờ. Sổ lệnh REST không gửi field này nên ở đó là undefined |
filledQuantity | number | Khối lượng khớp |
cancelQuantity | number | Khối lượng huỷ |
status | OrderStatus | string | undefined | Trạng thái lệnh |
inputTime / modifyTime | string | Thời gian đặt / sửa (yyyy/MM/dd HH:mm:ss) |
message | string | Thông báo của server (với lệnh bị từ chối là lý do) |
Response giao dịch
PlaceOrderResponse
orderId, clientRequestId, status
ModifyOrderResponse
clientModifyId, orderId, clientRequestId, status
CancelOrderResponse
clientCancelId, orderId, clientRequestId, status
MaxBuySellResponse
| Field | Kiểu | Mô tả |
|---|---|---|
accountNo | string | Số tài khoản |
symbol | string | Mã chứng khoán (viết hoa) |
maxBuyQuantity | number | Khối lượng mua tối đa |
maxSellQuantity | number | Khối lượng bán tối đa |
marginRatio | string? | Tỷ lệ margin, giữ nguyên chuỗi server gửi |
purchasingPower | number? | Sức mua |
Tài khoản phái sinh chỉ nhận hai khối lượng. Với tài khoản đó marginRatio và purchasingPower là undefined, không phải 0. purchasePower (chuỗi, "" khi không có) vẫn đọc được nhưng deprecated: dùng purchasingPower.
Lệnh hàng loạt (Batch Orders)
Kiểu dữ liệu của placeBatchOrders và cancelBatchOrders. Cách dùng, chữ ký, idempotency và retry nằm ở API Services, mục 5.6. Giới hạn số lệnh mỗi lô xem Cấu hình và lỗi xem Xử lý lỗi.
BatchPlaceOrderItem
Một lệnh của placeBatchOrders, cùng tham số với placeOrder.
| Field | Kiểu | Mô tả |
|---|---|---|
accountNo | string | Số tài khoản |
symbol | string | Mã chứng khoán |
side | OrderSide | Mua/Bán |
quantity | number | Khối lượng |
price | PriceLike | null? | Giá (number hoặc chuỗi thập phân). Có thể bỏ qua với loại lệnh giá thị trường (ATO/ATC/MP...) |
orderType | OrderType | Loại lệnh |
clientRequestId | string? | Khóa chống trùng, tối đa 20 ký tự. SDK tự sinh nếu bỏ qua |
BatchCancelOrderItem
Một lệnh của cancelBatchOrders: accountNo kèm đúng một trong hai id.
| Field | Kiểu | Mô tả |
|---|---|---|
accountNo | string | Số tài khoản |
orderId | string? | Order ID cần hủy |
clientRequestId | string? | Client request ID của lệnh cần hủy |
BatchOrderResponse
| Field | Kiểu | Mô tả |
|---|---|---|
batchRequestId | string | Id của lô (SDK tự sinh) |
results | BatchOrderResult[] | Kết quả từng lệnh, đúng thứ tự request. Thiếu hoặc không phải mảng thì là danh sách rỗng |
BatchOrderResult
| Field | Kiểu | Mô tả |
|---|---|---|
clientRequestId | string | Client request ID của lệnh |
orderId | string | Order ID ("" nếu không có) |
status | OrderStatus | string | Trạng thái lệnh |
success | boolean | Lệnh này có được nhận hay không |
errorCode | string | Mã lỗi ("" nếu không có) |
errorMessage | string | Thông báo lỗi ("" nếu không có) |
clientCancelId | string | Id hủy ("" nếu không có) |
Chưa xác nhận
Hành vi thật của response khi một phần lệnh trong lô lỗi chưa được xác nhận từ mã nguồn. Theo mô tả trong SDK, server chấp nhận hoặc từ chối cả lô, nhưng response luôn có một BatchOrderResult cho mỗi lệnh. Hãy duyệt results và kiểm tra success, errorCode, errorMessage của từng lệnh thay vì coi cả lô là thành công. Giới hạn số lệnh cũng chưa thống nhất (SDK mặc định 20, tài liệu API reference nêu tối đa 50): xem Cấu hình.
Lệnh điều kiện (FCO)
FCOPlaceResponse
Kết quả đặt lệnh điều kiện — fcoId
FCOCancelResponse
Kết quả huỷ lệnh điều kiện — fcoId
FCOListResponse
Danh sách lệnh điều kiện (phân trang).
| Field | Kiểu | Mô tả |
|---|---|---|
pageIndex | number | Trang hiện tại |
pageSize | number | Kích thước trang |
itemsCount | number | Tổng số bản ghi |
pagesCount | number | Tổng số trang |
fcoList | FCOInfo[] | Danh sách lệnh FCO |
FCOInfo
Thông tin chi tiết một lệnh điều kiện.
| Field | Kiểu | Mô tả |
|---|---|---|
fcoId | string | Mã lệnh FCO |
clientId | string | Username / Client ID |
accountNo | string | Số tài khoản |
quantity | number | Khối lượng đặt |
price | string | Giá đặt, hoặc một từ như "MP" với lệnh giá thị trường |
priceSlip | number? | Độ trượt giá |
symbol | string | Mã chứng khoán |
type | FCOType? | Loại lệnh điều kiện |
orderType | OrderType | string? | Loại lệnh được đẩy vào sổ khi điều kiện kích hoạt |
fromDate | string | Ngày bắt đầu hiệu lực |
toDate | string | Ngày kết thúc hiệu lực |
matchedQuantity | number | Khối lượng đã khớp |
isPlaceOrder | boolean | Đã đẩy lệnh vào sổ hay chưa |
status | FCOStatus? | Trạng thái lệnh FCO |
detail | string | Chi tiết trạng thái |
params | FCOParams? | Tham số kích hoạt lệnh FCO |
FCOParams
Tham số kích hoạt của lệnh điều kiện.
| Field | Kiểu | Mô tả |
|---|---|---|
stopPrice | number? | Giá dừng / giá kích hoạt |
side | OrderSide? | Chiều lệnh (Mua/Bán) |
activePrice | number? | Giá kích hoạt (Trailing Stop) |
trailingAmount | number? | Khoảng bám sát (Trailing Amount) |
tpActivePrice | number? | Giá kích hoạt chốt lời (Take Profit) |
slActivePrice | number? | Giá kích hoạt cắt lỗ (Stop Loss) |
tpPrice | string? | Giá chốt lời |
slPrice | string? | Giá cắt lỗ |
tpSlip | number? | Trượt giá chốt lời |
slSlip | number? | Trượt giá cắt lỗ |
operator | FCOOperator? | Toán tử so sánh kích hoạt |
FCOOrderBookResponse
Nhật ký khớp lệnh FCO (phân trang).
| Field | Kiểu | Mô tả |
|---|---|---|
pageIndex | number | Trang hiện tại |
pageSize | number | Kích thước trang |
itemsCount | number | Tổng số bản ghi |
pagesCount | number | Tổng số trang |
orderBook | FCOOrder[] | Danh sách nhật ký lệnh FCO |
FCOOrder
Nhật ký giao dịch / thực thi của lệnh FCO.
| Field | Kiểu | Mô tả |
|---|---|---|
fcoId | string | Mã lệnh FCO gốc |
accountNo | string | Số tài khoản |
quantity | number | Khối lượng |
price | string | Giá đặt |
symbol | string | Mã chứng khoán |
side | OrderSide? | Chiều lệnh |
orderType | OrderType? | Loại lệnh con |
isMainOrder | boolean | Là lệnh chính |
isAttachedOrder | boolean | Là lệnh kèm theo |
createdTime / updatedTime | string | Thời gian tạo / cập nhật |
uniqueId | string | ID duy nhất |
orderId | string | Mã lệnh trên sàn |
matchedQuantity | number | Khối lượng đã khớp |
osQuantity | number | Khối lượng chờ khớp |
avgPrice | number | Giá khớp trung bình |
status | OrderStatus? | Trạng thái lệnh con |
detail | string | Chi tiết |
FCOStatusHistoryItem
Một lần chuyển trạng thái của lệnh FCO, trả về bởi getFcoStatusHistory(fcoId) (xem API Services, mục 5.5). Nhận danh sách rỗng khi server trả 204.
| Field | Kiểu | Mô tả |
|---|---|---|
state | string | Trạng thái |
time | string | Thời điểm chuyển trạng thái |
code | string? | Mã (nếu server gửi) |
detail | string | Chi tiết |
Message Streaming
DataMessage
Dữ liệu thị trường nhận qua callback onData. DataMessage là union của các kiểu sau (frame có topic mà SDK chưa có model sẽ đến dưới dạng object thô):
TradeMessage— khớp lệnh của một mã (type: 'trade')IndexTickMessage— tick của chính chỉ số (xem bên dưới)IntervalMessage— nến 1 phút / 5 phút (xem bên dưới)QuoteMessage— mua/bán (type: 'quote')ForeignRoomMessage— room ngoại (type: 'room')MarketFlagMessage— cờ phiên thị trường (ATO, LO, ATC...), topicmarket.flagIndexSummaryMessage— tổng hợp chỉ số (xem bên dưới)MarketDataMessage— giá trần / sàn / tham chiếu của một mã, topicmarket.<symbol>MarketStatusMessage— trạng thái thị trường (market,status,tradingDate)PutMessage— thoả thuận (type: 'put')OddLotMessage— lô lẻ (type: 'oddlot')
TradingMessage
Sự kiện giao dịch nhận qua callback onTrading. TradingMessage là union của:
OrderStatusMessage— cập nhật trạng thái lệnh thường (type: 'orderEvent')OrderMatchMessage— sự kiện khớp lệnh (type: 'orderMatchEvent')PortfolioMessage— thay đổi danh mục, chỉ tài khoản phái sinh (type: 'clientPortfolioEvent')FCOOrderUpdateMessage— cập nhật trạng thái lệnh điều kiện FCO (eventType: 'fcoEvent')
Event type không biết sẽ đến dưới dạng object thô.
FCOOrderUpdateMessage
Cập nhật trạng thái lệnh điều kiện FCO (streaming, nhận qua onTrading). Message này không có type: 'fcoOrderEvent': nhận diện bằng eventType (ví dụ "fcoEvent") hoặc bằng fcoId.
| Field | Kiểu | Mô tả |
|---|---|---|
fcoId | string | Mã lệnh FCO |
processStatus | FCOStatus? | Trạng thái xử lý lệnh FCO (INIT, WAIT, WC, TER, ...) |
matchedQuantity | number | Khối lượng đã khớp |
isPlaceOrder | boolean | Đã đẩy lệnh vào sổ hay chưa |
symbol | string | Mã chứng khoán |
quantity | number | Khối lượng đặt |
price | string | Giá đặt |
accountNo | string | Số tài khoản |
updatedTime | string | Thời gian cập nhật |
status | string | Mã trạng thái |
message | string | Thông báo chi tiết / lý do kích hoạt, ngắt kết nối |
username | string | Username đặt lệnh |
eventType | string | Loại sự kiện (ví dụ "fcoEvent") |
type | FCOType | string? | Loại lệnh điều kiện (GTD, STOP, ...) |
HeartbeatMessage
method, channel, status, message
ConnectionEvent
Sự kiện kết nối truyền vào onConnection của Stream (xem API Services, mục 6.8). Import từ package chính.
| Field | Kiểu | Mô tả |
|---|---|---|
state | 'connected' | 'reconnected' | 'disconnected' | 'failed' | Trạng thái kết nối |
reconnectCount | number | Số lần đã reconnect |
error | Error? | Lỗi kèm theo (nếu có) |
Dữ liệu chỉ số real-time
Kiểu dữ liệu của các topic chỉ số (trade.index.<code> và indexsummary.<code>). Cách subscribe, quy tắc mã chỉ số và interval nằm ở API Services, mục 6.7. Các kiểu này đến qua onData (riêng IndexSummaryMessage còn nhận được bằng onIndexSummary).
IndexTickMessage
Tick của chính chỉ số (không phải cổ phiếu thành phần), từ subscribeIndexTrade.
Ý nghĩa field chưa được xác nhận
Server chỉ gửi tên viết tắt. Tên field của SDK bám theo chữ viết tắt, nhưng ý nghĩa được suy ra từ chữ viết tắt, chưa xác nhận trên frame thật. Nếu cần chắc chắn, đối chiếu với raw (object data nguyên bản) trước khi dùng cho logic quan trọng.
| Field | Kiểu | Key gốc | Mô tả (suy ra từ chữ viết tắt) |
|---|---|---|---|
type | DataType | Loại message ('trade') | |
symbol | string | s | Mã chỉ số, ví dụ "VN30" |
board | string | b | Sàn |
status | string | ss | Trạng thái |
tradingTime | string | t | Thời gian giao dịch |
value | number? | v | Giá trị chỉ số |
change | number? | c | Thay đổi |
changePercent | number? | cr | Thay đổi (%) |
advances | number? | adv | Số mã tăng |
declines | number? | dec | Số mã giảm |
noChange | number? | nc | Số mã không đổi |
ceilings | number? | ce | Số mã trần |
floors | number? | fl | Số mã sàn |
totalMatchValue | number? | tmv | Tổng giá trị khớp |
totalMatchQuantity | number? | tmq | Tổng khối lượng khớp |
totalPutValue | number? | tvp | Tổng giá trị thoả thuận |
totalPutQuantity | number? | tqp | Tổng khối lượng thoả thuận |
totalQuantity | number? | tq | Tổng khối lượng |
totalValue | number? | tv | Tổng giá trị |
raw | Record<string, unknown> | Object data của frame, giữ nguyên |
Field số là undefined (không phải 0) khi server không gửi. Trong các kiểu DataMessage, chỉ IndexTickMessage có field raw, nên 'raw' in msg là cách nhận diện đơn giản (xem ví dụ ở mục 6.7).
IntervalMessage
Nến 1 phút / 5 phút, nhận khi subscribe có interval là 1m hoặc 5m.
| Field | Kiểu | Key gốc | Mô tả |
|---|---|---|---|
type | DataType | Loại message ('trade') | |
intervalTime | string | st | Thời điểm bắt đầu của nến |
tradingTime | string | t | Thời gian giao dịch |
symbol | string | s | Mã chứng khoán hoặc mã chỉ số |
open | number | o | Giá mở |
high | number | h | Giá cao |
low | number | l | Giá thấp |
close | number | c | Giá đóng |
volume | number | v | Khối lượng |
IndexSummaryMessage
Bản tổng hợp của một chỉ số, từ indexsummary.<code>.
| Field | Kiểu | Mô tả |
|---|---|---|
index | string | Mã chỉ số lấy từ topic, viết hoa ("" nếu không rõ) |
data | Record<string, unknown> | Payload server gửi, giữ nguyên |
Tài liệu public của API không liệt kê field của payload này, nên SDK không đoán và không có field kiểu sẵn. Đọc giá trị bằng indexSummaryGet(message, keys, defaultValue?): hàm trả giá trị của key đầu tiên trong keys có mặt trong message.data, hoặc defaultValue nếu không có key nào.
import { indexSummaryGet } from '@ssi.developer/ssi-sdk';
s.onIndexSummary = (msg) => {
// 'someField' là ví dụ: thay bằng key bạn thấy trong msg.data
const value = indexSummaryGet<number>(msg, ['someField'], 0);
console.log(`${msg.index}: ${value}`);
};Trading WebSocket
Các kiểu dưới đây import từ package chính @ssi.developer/ssi-sdk. Cách dùng xem API Services, mục 7.
TradingWSResponse
Kết quả của mỗi lệnh gửi qua Trading WebSocket.
| Field | Kiểu | Mô tả |
|---|---|---|
id | string | Id của request |
method | string | Tên command |
status | number | Status của response (mặc định 200 nếu frame không có) |
result | unknown | Nội dung kết quả, giữ nguyên như server gửi |
rateLimit | Record<string, unknown> | Thông tin rate limit server gửi kèm ({} nếu không có) |
receivedTime | number? | Thời điểm server nhận, nếu frame có |
Frame lỗi không trả TradingWSResponse mà ném TradingWSError (xem Xử lý lỗi).
FcoParamsKind, FcoListOptions, OrderBookQuery
Kiểu tham số của các command FCO và sổ lệnh trên Trading WebSocket.
| Kiểu | Mô tả |
|---|---|
FcoParamsKind | Union có kind để chọn loại FCO: 'gtd', 'stop', 'trailingStop', 'oco', 'bullBear', kèm params tương ứng |
FcoListOptions | Bộ lọc danh sách FCO, field đều tùy chọn: fcoId, type, processStatus, symbol, side, fromDate, toDate, pageIndex, pageSize |
OrderBookQuery | Bộ lọc sổ lệnh, field đều tùy chọn: fromDate, toDate, symbol, orderStatus, pageIndex, pageSize |