Tài liệu tham khảo API¶
Các khái niệm chung ¶
Khối lượng, giá, loại lệnh và thời gian hiệu lực
Khối lượng¶
Khối lượng được chỉ định bằng cent (đơn vị 0,0000001 lô).
| Lô | Khối lượng (cent) |
|---|---|
| 0.01 | 100,000 |
| 0.1 | 1,000,000 |
| 1.0 | 10,000,000 |
Giá¶
Giá trị giá được tính bằng pipette. Để chuyển đổi: display_price = pipette_value / 10^pipDigits
Đối với EURUSD (5 chữ số), giá trị pipette là 112345 = 1.12345.
Loại lệnh¶
| Loại | Mô tả | Trường bắt buộc |
|---|---|---|
MARKET | Thực hiện ngay lập tức ở giá hiện tại | symbolId, tradeSide, volume |
LIMIT | Thực hiện ở giá giới hạn hoặc tốt hơn | + limitPrice |
STOP | Kích hoạt khi thị trường đạt giá dừng | + stopPrice |
MARKET_RANGE | Thực hiện trong phạm vi giá | + baseSlippagePrice |
STOP_LIMIT | Lệnh giới hạn được kích hoạt ở giá dừng | + stopPrice, limitPrice |
Thời gian hiệu lực¶
| Chính sách | Mô tả |
|---|---|
GOOD_TILL_CANCEL | Lệnh vẫn hoạt động cho đến khi được khớp hoặc hủy |
GOOD_TILL_DATE | Lệnh hết hạn tại expirationTimestamp đã chỉ định |
IMMEDIATE_OR_CANCEL | Khớp những gì có sẵn ngay lập tức, hủy phần còn lại |
Thông tin tài khoản ¶
GET /v1/balance Get account balance
Trả về số dư tài khoản, vốn tức thời và dư ký quỹ.
Không có tham số.
200 Phản hồi thành công
{
"balance": 10000.00,
"equity": 10250.75,
"freeMargin": 9800.50,
"balanceVersion": 42,
"moneyDigits": 2,
"depositAssetId": 1
}
| Trường | Loại | Mô tả |
|---|---|---|
balance | double | Số dư tài khoản bằng đơn vị tiền tệ nạp |
equity | double | Số dư + lãi/lỗ chưa thực hiện |
freeMargin | double | Ký quỹ khả dụng cho giao dịch mới |
balanceVersion | int64 | Bộ đếm phiên bản số dư |
moneyDigits | int32 | Số chữ số thập phân cho giá trị tiền tệ |
depositAssetId | int64 | ID tài sản tiền tệ nạp |
GET /v1/symbols Lấy các mã giao dịch khả dụng
Trả về tất cả các mã giao dịch có sẵn để giao dịch trên tài khoản.
Không có tham số.
200 Mảng các đối tượng Symbol
[
{
"symbolId": 1,
"symbolName": "EURUSD",
"enabled": true,
"baseAssetId": 2,
"quoteAssetId": 1,
"description": "Euro vs US Dollar"
}
]
Symbol
| Trường | Loại | Mô tả |
|---|---|---|
symbolId | int64 | ID mã giao dịch (được sử dụng trong các lệnh gọi API khác) |
symbolName | string | Tên mã giao dịch (ví dụ: "EURUSD") |
enabled | boolean | Mã giao dịch có thể giao dịch hay không |
baseAssetId | int64 | ID tài sản cơ sở |
quoteAssetId | int64 | ID tài sản định giá |
description | string | Mô tả dễ đọc |
GET /v1/assets Lấy các tài sản khả dụng
Trả về các tài sản có sẵn (tiền tệ).
Không có tham số.
200 Mảng các đối tượng Asset
[
{
"assetId": 1,
"name": "USD",
"displayName": "US Dollar"
}
]
Asset
| Trường | Loại | Mô tả |
|---|---|---|
assetId | int64 | ID tài sản |
name | string | Mã tài sản (ví dụ: "USD") |
displayName | string | Tên hiển thị |
Dữ liệu thị trường ¶
GET /v1/prices Lấy giá giao ngay
Trả về giá bid/ask hiện tại cho các mã giao dịch đã chỉ định. Đây là ảnh chụp nhanh – API không hỗ trợ truyền trực tuyến.
| Tên | Nằm trong | Loại | Bắt buộc | Mô tả |
|---|---|---|---|---|
symbolId | query | int64[] | ID mã giao dịch được phân tách bằng dấu phẩy |
200 Mảng các đối tượng SpotPrice
[
{
"symbolId": 1,
"bid": 112340,
"ask": 112355,
"high": 112890,
"low": 111950,
"sessionClose": 112100,
"timestamp": 1700000000000
}
]
SpotPrice
| Trường | Loại | Mô tả |
|---|---|---|
symbolId | int64 | ID ký hiệu |
bid | int64 | Giá bid tốt nhất (pipette) |
ask | int64 | Giá ask tốt nhất (pipette) |
high | int64 | Mức cao nhất trong phiên (pipette) |
low | int64 | Mức thấp nhất trong phiên (pipette) |
sessionClose | int64 | Giá đóng cửa phiên trước (pipette) |
timestamp | int64 | Dấu thời gian báo giá (epoch ms) |
GET /v1/trendbars Lấy dữ liệu OHLCV lịch sử
Trả về dữ liệu nến (OHLCV) lịch sử cho một mã giao dịch.
| Tên | Nằm trong | Loại | Bắt buộc | Mặc định | Mô tả |
|---|---|---|---|---|---|
symbolId | query | int64 | – | ID ký hiệu | |
period | query | string | – | Giai đoạn nến | |
fromTimestamp | query | string | – | Thời gian bắt đầu (ISO-8601) | |
toTimestamp | query | string | – | Thời gian kết thúc (ISO-8601) | |
count | query | int32 | 100 | Số thanh tối đa để trả về |
Các khoảng thời gian khả dụng
M_1 M_2 M_3 M_4 M_5 M_10 M_15 M_30 H_1 H_2 H_3 H_4 H_6 H_8 H_12 D_1 W_1 MN_1
200 Mảng các đối tượng Trendbar
[
{
"timestamp": 1700000000000,
"open": 112340.0,
"high": 112890.0,
"low": 111950.0,
"close": 112500.0,
"volume": 4521
}
]
Trendbar
| Trường | Loại | Mô tả |
|---|---|---|
timestamp | int64 | Thời gian mở thanh (epoch ms) |
open | double | Giá mở cửa (pipettes) |
high | double | Giá cao nhất (pipettes) |
low | double | Giá thấp nhất (pipettes) |
close | double | Giá đóng cửa (pipettes) |
volume | int64 | Khối iượng tick |
Lệnh ¶
POST /v1/orders Đặt lệnh mới
Đặt một lệnh giao dịch mới. Trả về một ExecutionResponse.
Không có tham số đường dẫn hoặc truy vấn.
| Trường | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
symbolId | int64 | Ký hiệu để giao dịch | |
orderType | string | MARKET, LIMIT, STOP, MARKET_RANGE, STOP_LIMIT | |
tradeSide | string | BUY hoặc SELL | |
volume | int64 | Khối lượng tính bằng xu | |
limitPrice | double | Giá giới hạn – bắt buộc đối với LIMIT, STOP_LIMIT | |
stopPrice | double | Giá kích hoạt dừng – bắt buộc đối với STOP, STOP_LIMIT | |
stopLoss | double | Giá cắt lỗ | |
takeProfit | double | Giá chốt lời | |
comment | string | Bình luận văn bản tự do (tối đa 256 ký tự) | |
label | string | Nhãn bot (tối đa 100 ký tự) | |
timeInForce | string | GOOD_TILL_CANCEL, GOOD_TILL_DATE, IMMEDIATE_OR_CANCEL | |
baseSlippagePrice | double | Giá cơ sở cho trượt giá – bắt buộc đối với MARKET_RANGE | |
slippageInPoints | int32 | Trượt giá tối đa tính theo điểm | |
expirationTimestamp | int64 | Dấu thời gian hết hạn (epoch ms) – đối với GOOD_TILL_DATE |
{
"symbolId": 1,
"orderType": "MARKET",
"tradeSide": "BUY",
"volume": 10000000,
"stopLoss": 112000,
"takeProfit": 113000
}
200 ExecutionResponse – lệnh được chấp nhận hoặc đã khớp
400 INVALID_REQUEST hoặc TRADING_BAD_VOLUME
422 NOT_ENOUGH_MONEY
409 MARKET_CLOSED
{
"orderId": 12345,
"positionId": 67890,
"executionType": "ORDER_FILLED",
"order": { "..." : "..." },
"position": { "..." : "..." },
"deal": { "..." : "..." }
}
GET /v1/orders Lấy các lệnh chờ
Trả về tất cả các lệnh chờ (chưa khớp).
Không có tham số.
200 Mảng các đối tượng lệnh chờ
PUT /v1/orders/{orderId} Sửa đổi lệnh chờ
Sửa đổi một lệnh chờ hiện có. Trả về một ExecutionResponse.
| Tên | Nằm trong | Loại | Bắt buộc | Mô tả |
|---|---|---|---|---|
orderId | path | int64 | Lệnh cần sửa đổi |
Bất kỳ tập hợp con nào của các trường sau.
| Trường | Loại | Mô tả |
|---|---|---|
volume | int64 | Khối lượng mới tính theo cent |
limitPrice | double | Giá giới hạn mới |
stopPrice | double | Giá dừng mới |
stopLoss | double | Giá cắt lỗ mới |
takeProfit | double | Giá chốt lời mới |
expirationTimestamp | int64 | Dấu thời gian hết hạn mới (epoch ms) |
200 ExecutionResponse với ORDER_REPLACED
404 Không tìm thấy lệnh
DELETE /v1/orders/{orderId} Hủy lệnh chờ
Hủy một lệnh chờ. Trả về một ExecutionResponse.
| Tên | Nằm trong | Loại | Bắt buộc | Mô tả |
|---|---|---|---|---|
orderId | path | int64 | Lệnh cần hủy |
200 ExecutionResponse với ORDER_CANCELLED
404 Không tìm thấy lệnh
GET /v1/orders/history Lấy lịch sử lệnh
Trả về các lệnh lịch sử trong một khoảng thời gian.
| Tên | Nằm trong | Loại | Bắt buộc | Mô tả |
|---|---|---|---|---|
fromTimestamp | query | string | Thời gian bắt đầu (ISO-8601) | |
toTimestamp | query | string | Thời gian kết thúc (ISO-8601) |
200 OrderListResponse
| Trường | Loại | Mô tả |
|---|---|---|
orders | Order[] | Mảng các lệnh lịch sử |
hasMore | boolean | Có các trang bổ sung khả dụng hay không |
Vị thế ¶
GET /v1/positions Lấy các vị thế đang mở
Trả về tất cả các vị thế đang mở và lệnh chờ.
Không có tham số.
200 Mảng các đối tượng Position
[
{
"positionId": 67890,
"symbolId": 1,
"tradeSide": "BUY",
"volume": 10000000,
"entryPrice": 112345.0,
"stopLoss": 112000.0,
"takeProfit": 113000.0,
"unrealizedPnl": 155.25,
"commission": -7.00,
"swap": -1.20
}
]
Vị thế
| Trường | Loại | Mô tả |
|---|---|---|
positionId | int64 | ID vị thế |
symbolId | int64 | ID ký hiệu |
tradeSide | string | BUY hoặc SELL |
volume | int64 | Khối lượng tính bằng xu |
entryPrice | double | Giá vào lệnh VWAP |
stopLoss | double | Giá cắt lỗ |
takeProfit | double | Giá chốt lời |
unrealizedPnl | double | Lãi/lỗ thả nổi |
commission | double | Hoa hồng đã tính |
swap | double | Số tiền phí qua đêm |
GET /v1/positions/{positionId} Lấy chi tiết vị thế
Trả về một vị thế cùng với các lệnh và giao dịch liên quan.
| Tên | Nằm trong | Loại | Bắt buộc | Mô tả |
|---|---|---|---|---|
positionId | path | int64 | ID vị thế |
200 PositionDetailResponse
| Trường | Loại | Mô tả |
|---|---|---|
position | Position | Đối tượng vị thế |
orders | Order[] | Các lệnh liên quan |
deals | Deal[] | Các giao dịch liên quan |
PUT /v1/positions/{positionId} Sửa đổi cắt lỗ/chốt lời của vị thế
Cập nhật cắt lỗ và/hoặc chốt lời cho một vị thế đang mở. Trả về một ExecutionResponse.
| Tên | Nằm trong | Loại | Bắt buộc | Mô tả |
|---|---|---|---|---|
positionId | path | int64 | ID vị thế |
| Trường | Loại | Mô tả |
|---|---|---|
stopLoss | double | Giá cắt lỗ mới (null để xóa) |
takeProfit | double | Giá chốt lời mới (null để xóa) |
trailingStopLoss | boolean | Bật cắt lỗ di động |
{
"stopLoss": 111500,
"takeProfit": 113500,
"trailingStopLoss": false
}
POST /v1/positions/{positionId}/close Đóng một vị thế
Đóng một vị thế đang mở hoàn toàn hoặc một phần. Sử dụng giá trị nhỏ hơn khối lượng đầy đủ của vị thế để đóng một phần. Trả về một ExecutionResponse.
| Tên | Nằm trong | Loại | Bắt buộc | Mô tả |
|---|---|---|---|---|
positionId | path | int64 | ID vị thế |
| Trường | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
volume | int64 | Khối lượng cần đóng tính bằng cent |
{
"volume": 10000000
}
422 NOT_ENOUGH_MONEY – ký quỹ không đủ để đóng một phần
Giao dịch ¶
GET /v1/deals Lấy lịch sử giao dịch
Trả về các giao dịch đã thực hiện trong một khoảng thời gian.
| Tên | Nằm trong | Loại | Bắt buộc | Mặc định | Mô tả |
|---|---|---|---|---|---|
fromTimestamp | query | string | – | Thời gian bắt đầu (ISO-8601) | |
toTimestamp | query | string | – | Thời gian kết thúc (ISO-8601) | |
maxRows | query | int32 | 50 | Số giao dịch tối đa cần trả về |
200 Mảng các đối tượng Deal
[
{
"dealId": 11111,
"orderId": 12345,
"positionId": 67890,
"symbolId": 1,
"tradeSide": "BUY",
"volume": 10000000,
"filledVolume": 10000000,
"executionPrice": 112345.0,
"executionTimestamp": 1700000000000,
"dealStatus": "FILLED",
"commission": -7.00
}
]
Deal
| Trường | Loại | Mô tả |
|---|---|---|
dealId | int64 | ID giao dịch |
orderId | int64 | Lệnh đã kích hoạt giao dịch này |
positionId | int64 | ID vị thế |
symbolId | int64 | ID ký hiệu |
tradeSide | string | BUY hoặc SELL |
volume | int64 | Khối lượng yêu cầu tính bằng cent |
filledVolume | int64 | Khối lượng đã khớp tính bằng cent |
executionPrice | double | Giá thực hiện |
executionTimestamp | int64 | Thời gian thực hiện (epoch ms) |
dealStatus | string | Trạng thái – xem các giá trị bên dưới |
commission | double | Hoa hồng đã tính |
Giá trị dealStatus
| Giá trị | Ý nghĩa |
|---|---|
FILLED | Lệnh đã được khớp hoàn toàn |
PARTIALLY_FILLED | Lệnh khớp một phần |
REJECTED | Bị từ chối bởi máy chủ giao dịch |
INTERNALLY_REJECTED | Bị từ chối nội bộ trước khi đến máy chủ |
ERROR | Đã xảy ra lỗi trong quá trình thực hiện |
MISSED | Lệnh bị bỏ lỡ (ví dụ: khoảng trống trong thị trường) |
Schemas { #execution-response-schema } ¶
ExecutionResponse ¶
Tất cả các thao tác đặt lệnh, sửa đổi và hủy lệnh đều trả về đối tượng này.
| Trường | Loại | Mô tả |
|---|---|---|
orderId | int64 | ID lệnh bị ảnh hưởng |
positionId | int64 | ID vị thế bị ảnh hưởng |
executionType | string | Loại kết quả – xem các giá trị bên dưới |
order | Order | Chi tiết lệnh (nếu có) |
position | Position | Chi tiết vị thế (nếu có) |
deal | Deal | Chi tiết giao dịch (nếu có) |
Giá trị executionType
| Giá trị | Ý nghĩa |
|---|---|
ORDER_ACCEPTED | Lệnh chờ đã được chấp nhận |
ORDER_FILLED | Lệnh đã được khớp hoàn toàn |
ORDER_REPLACED | Lệnh đã được sửa đổi |
ORDER_CANCELLED | Lệnh đã hủy |
ORDER_EXPIRED | Lệnh đã hết hạn |
ORDER_REJECTED | Lệnh bị từ chối |
ORDER_CANCEL_REJECTED | Yêu cầu hủy bị từ chối |
ORDER_PARTIAL_FILL | Lệnh khớp một phần |
SWAP | Hoán đổi vị thế đã được áp dụng |
DEPOSIT | Nạp tiền vào tài khoản |
WITHDRAW | Rút tiền khỏi tài khoản |
BONUS_DEPOSIT_WITHDRAW | Nạp hoặc rút tiền thưởng |
Giới hạn tốc độ ¶
Cổng thông tin thực thi giới hạn tốc độ ở nhiều cấp độ.
| Mức | Mô tả |
|---|---|
| Mỗi IP | Giới hạn tổng số yêu cầu từ một địa chỉ IP duy nhất |
| Mỗi người dùng | Giới hạn tổng số yêu cầu trên tất cả các tài khoản cho một token duy nhất |
| Mỗi tài khoản | Giới hạn các yêu cầu nhắm đến một tài khoản giao dịch duy nhất |
Vượt quá giới hạn tốc độ
Khi vượt quá giới hạn tốc độ, API trả về 429 Too Many Requests với tiêu đề Retry-After.
Xử lý lỗi ¶
Khi một yêu cầu thất bại, API trả về phản hồi lỗi JSON.
{
"error": {
"code": "NOT_ENOUGH_MONEY",
"message": "Insufficient free margin for this order",
"httpStatus": 422,
"retryAfter": null
}
}
Mã lỗi ¶
| Mã | HTTP | Mô tả |
|---|---|---|
INVALID_REQUEST | 400 | Tham số yêu cầu không hợp lệ hoặc bị thiếu |
UNAUTHORIZED | 401 | Token không hợp lệ, hết hạn hoặc bị thiếu |
TRADING_BAD_VOLUME | 400 | Khối lượng không hợp lệ (dưới mức tối thiểu hoặc vượt quá vị thế) |
NOT_ENOUGH_MONEY | 422 | Dư ký quỹ không đủ |
SYMBOL_NOT_FOUND | 404 | ID mã giao dịch không tồn tại |
MARKET_CLOSED | 409 | Thị trường cho mã giao dịch hiện đang đóng cửa |
MAINTENANCE | 503 | Máy chủ giao dịch đang trong chế độ bảo trì |
TIMEOUT | 504 | Máy chủ giao dịch không phản hồi kịp thời |
GATEWAY_RATE_LIMIT | 429 | Vượt quá giới hạn tốc độ – xem tiêu đề Retry-After |
Xử lý giới hạn tốc độ
Khi bạn nhận được phản hồi 429, tiêu đề Retry-After và trường retryAfter cho biết bạn phải đợi bao nhiêu giây trước khi gửi yêu cầu tiếp theo.