API 参考¶
常见概念 ¶
交易量、价格、订单类型和有效期
交易量¶
交易量以美分(0.0000001 手的单位)指定。
| 手数 | 交易量(美分) |
|---|---|
| 0.01 | 100,000 |
| 0.1 | 1,000,000 |
| 1.0 | 10,000,000 |
价格¶
价格值以点子表示。 转换方式:display_price = pipette_value / 10^pipDigits
对于 EURUSD(5 位数字),点子值 112345 = 1.12345。
订单类型¶
| 类型 | 描述 | 必填字段 |
|---|---|---|
MARKET | 以当前价格立即执行 | symbolId、tradeSide、volume |
LIMIT | 以限价或更优价格执行 | + limitPrice |
STOP | 当市场达到止损价时触发 | + stopPrice |
MARKET_RANGE | 在价格范围内执行 | + baseSlippagePrice |
STOP_LIMIT | 在止损价触发的限价单 | + stopPrice、limitPrice |
有效期¶
| 策略 | 描述 |
|---|---|
GOOD_TILL_CANCEL | 订单保持活跃状态,直到成交或取消 |
GOOD_TILL_DATE | 订单在指定的 expirationTimestamp 到期 |
IMMEDIATE_OR_CANCEL | 立即成交可用部分,取消其余部分 |
账户信息 ¶
GET /v1/balance Get account balance
返回账户余额、净值和可用保证金。
无参数。
200 成功响应
{
"balance": 10000.00,
"equity": 10250.75,
"freeMargin": 9800.50,
"balanceVersion": 42,
"moneyDigits": 2,
"depositAssetId": 1
}
| 字段 | 类型 | 描述 |
|---|---|---|
balance | double | 以存款货币计的账户余额 |
equity | double | 余额 + 浮动盈亏 |
freeMargin | double | 可用于新交易的保证金 |
balanceVersion | int64 | 余额版本计数器 |
moneyDigits | int32 | 货币值的小数位数 |
depositAssetId | int64 | 存款货币资产 ID |
GET /v1/symbols 获取可用交易品种
返回账户上所有可供交易的交易品种。
无参数。
200 Symbol 对象数组
[
{
"symbolId": 1,
"symbolName": "EURUSD",
"enabled": true,
"baseAssetId": 2,
"quoteAssetId": 1,
"description": "Euro vs US Dollar"
}
]
Symbol
| 字段 | 类型 | 描述 |
|---|---|---|
symbolId | int64 | 交易品种 ID(用于其他 API 调用) |
symbolName | string | 交易品种名称(例如,"EURUSD") |
enabled | boolean | 该交易品种是否可交易 |
baseAssetId | int64 | 基础资产 ID |
quoteAssetId | int64 | 报价资产 ID |
description | string | 可读描述 |
GET /v1/assets 获取可用资产
返回可用资产(货币)。
无参数。
200 Asset 对象数组
[
{
"assetId": 1,
"name": "USD",
"displayName": "US Dollar"
}
]
Asset
| 字段 | 类型 | 描述 |
|---|---|---|
assetId | int64 | 资产 ID |
name | string | 资产代码(例如,"USD") |
displayName | string | 显示名称 |
市场数据 ¶
GET /v1/prices 获取现货价格
返回指定交易品种的当前买入/卖出价格。 这是一个快照 – API 不支持流式传输。
| 名称 | 位于 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
symbolId | query | int64[] | 逗号分隔的交易品种 ID |
200 SpotPrice 对象数组
[
{
"symbolId": 1,
"bid": 112340,
"ask": 112355,
"high": 112890,
"low": 111950,
"sessionClose": 112100,
"timestamp": 1700000000000
}
]
SpotPrice
| 字段 | 类型 | 描述 |
|---|---|---|
symbolId | int64 | 符号 ID |
bid | int64 | 最佳买入价格(点子) |
ask | int64 | 最佳卖出价格(点子) |
high | int64 | 交易时段最高价(点子) |
low | int64 | 交易时段最低价(点子) |
sessionClose | int64 | 上一交易时段收盘价(点子) |
timestamp | int64 | 报价时间戳(纪元毫秒) |
GET /v1/trendbars 获取历史 OHLCV 数据
返回交易品种的历史烛台图(OHLCV)数据。
| 名称 | 位于 | 类型 | 必填 | 默认 | 描述 |
|---|---|---|---|---|---|
symbolId | query | int64 | – | 符号 ID | |
period | query | string | – | K线周期 | |
fromTimestamp | query | string | – | 开始时间 (ISO-8601) | |
toTimestamp | query | string | – | 结束时间 (ISO-8601) | |
count | query | int32 | 100 | 返回的最大K线数量 |
可用周期
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 Trendbar 对象数组
[
{
"timestamp": 1700000000000,
"open": 112340.0,
"high": 112890.0,
"low": 111950.0,
"close": 112500.0,
"volume": 4521
}
]
Trendbar
| 字段 | 类型 | 描述 |
|---|---|---|
timestamp | int64 | K线开盘时间 (纪元毫秒) |
open | double | 开盘价 (点值) |
high | double | 最高价 (点值) |
low | double | 最低价 (点值) |
close | double | 收盘价 (点值) |
volume | int64 | 跳动量 |
订单 ¶
POST /v1/orders 下新订单
下新的交易订单。 返回 ExecutionResponse。
无路径或查询参数。
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
symbolId | int64 | 交易的交易品种 | |
orderType | string | MARKET, LIMIT, STOP, MARKET_RANGE, STOP_LIMIT | |
tradeSide | string | BUY 或 SELL | |
volume | int64 | 以分为单位的交易量 | |
limitPrice | double | 限价 – LIMIT、STOP_LIMIT 必填 | |
stopPrice | double | 止损触发价 – STOP、STOP_LIMIT 必填 | |
stopLoss | double | 止损价格 | |
takeProfit | double | 止盈价格 | |
comment | string | 自由文本备注 (最多 256 个字符) | |
label | string | 机器人标签 (最多 100 个字符) | |
timeInForce | string | GOOD_TILL_CANCEL, GOOD_TILL_DATE, IMMEDIATE_OR_CANCEL | |
baseSlippagePrice | double | 滑点基准价 – MARKET_RANGE 必填 | |
slippageInPoints | int32 | 最大滑点(点数) | |
expirationTimestamp | int64 | 到期时间戳 (纪元毫秒) – 用于 GOOD_TILL_DATE |
{
"symbolId": 1,
"orderType": "MARKET",
"tradeSide": "BUY",
"volume": 10000000,
"stopLoss": 112000,
"takeProfit": 113000
}
200 ExecutionResponse – 订单已接受或已成交
400 INVALID_REQUEST 或 TRADING_BAD_VOLUME
422 NOT_ENOUGH_MONEY
409 MARKET_CLOSED
{
"orderId": 12345,
"positionId": 67890,
"executionType": "ORDER_FILLED",
"order": { "..." : "..." },
"position": { "..." : "..." },
"deal": { "..." : "..." }
}
GET /v1/orders 获取挂单
返回所有挂单(未成交订单)。
无参数。
200 挂单 Order 对象数组
PUT /v1/orders/{orderId} 修改挂单
修改现有挂单。 返回 ExecutionResponse。
| 名称 | 位于 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
orderId | path | int64 | 要修改的订单 |
以下字段的任意子集。
| 字段 | 类型 | 描述 |
|---|---|---|
volume | int64 | 新交易量(美分) |
limitPrice | double | 新限价 |
stopPrice | double | 新止损价 |
stopLoss | double | 新止损价 |
takeProfit | double | 新止盈价 |
expirationTimestamp | int64 | 新到期时间戳 (纪元毫秒) |
200 ExecutionResponse 带 ORDER_REPLACED
404 未找到订单
DELETE /v1/orders/{orderId} 取消挂单
取消挂单。 返回 ExecutionResponse。
| 名称 | 位于 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
orderId | path | int64 | 要取消的订单 |
200 ExecutionResponse 带 ORDER_CANCELLED
404 未找到订单
GET /v1/orders/history 获取订单历史
返回时间范围内的历史订单。
| 名称 | 位于 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
fromTimestamp | query | string | 开始时间 (ISO-8601) | |
toTimestamp | query | string | 结束时间 (ISO-8601) |
200 OrderListResponse
| 字段 | 类型 | 描述 |
|---|---|---|
orders | Order[] | 历史订单数组 |
hasMore | boolean | 是否有其他页面可用 |
持仓 ¶
GET /v1/positions 获取未平仓头寸
返回所有未平仓头寸和挂单。
无参数。
200 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
}
]
头寸
| 字段 | 类型 | 描述 |
|---|---|---|
positionId | int64 | 头寸 ID |
symbolId | int64 | 符号 ID |
tradeSide | string | BUY 或 SELL |
volume | int64 | 以分为单位的交易量 |
entryPrice | double | VWAP 入场价格 |
stopLoss | double | 止损价格 |
takeProfit | double | 止盈价格 |
unrealizedPnl | double | 浮动盈亏 |
commission | double | 已收取的佣金 |
swap | double | 掉期金额 |
GET /v1/positions/{positionId} 获取头寸明细
返回头寸及其相关订单和成交。
| 名称 | 位于 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
positionId | path | int64 | 头寸 ID |
200 PositionDetailResponse
| 字段 | 类型 | 描述 |
|---|---|---|
position | Position | Position 对象 |
orders | Order[] | 相关订单 |
deals | Deal[] | 相关成交 |
PUT /v1/positions/{positionId} 修改头寸止损/止盈
更新未平仓头寸的止损和/或止盈。 返回 ExecutionResponse。
| 名称 | 位于 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
positionId | path | int64 | 头寸 ID |
| 字段 | 类型 | 描述 |
|---|---|---|
stopLoss | double | 新止损价格(null 表示移除) |
takeProfit | double | 新止盈价格(null 表示移除) |
trailingStopLoss | boolean | 启用移动止损 |
{
"stopLoss": 111500,
"takeProfit": 113500,
"trailingStopLoss": false
}
POST /v1/positions/{positionId}/close 平仓头寸
全部或部分平仓未平仓头寸。 使用小于头寸完整交易量的值进行部分平仓。 返回 ExecutionResponse。
| 名称 | 位于 | 类型 | 必填 | 描述 |
|---|---|---|---|---|
positionId | path | int64 | 头寸 ID |
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
volume | int64 | 要平仓的交易量(以美分为单位) |
{
"volume": 10000000
}
422 NOT_ENOUGH_MONEY – 部分平仓的保证金不足
交易 ¶
GET /v1/deals 获取成交历史
返回时间范围内已执行的成交。
| 名称 | 位于 | 类型 | 必填 | 默认 | 描述 |
|---|---|---|---|---|---|
fromTimestamp | query | string | – | 开始时间 (ISO-8601) | |
toTimestamp | query | string | – | 结束时间 (ISO-8601) | |
maxRows | query | int32 | 50 | 返回的最大成交数 |
200 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
| 字段 | 类型 | 描述 |
|---|---|---|
dealId | int64 | 交易 ID |
orderId | int64 | 触发此成交的订单 |
positionId | int64 | 头寸 ID |
symbolId | int64 | 符号 ID |
tradeSide | string | BUY 或 SELL |
volume | int64 | 请求的交易量(以美分为单位) |
filledVolume | int64 | 已成交交易量(以美分为单位) |
executionPrice | double | 执行价格 |
executionTimestamp | int64 | 执行时间(纪元毫秒) |
dealStatus | string | 状态 – 见下方值 |
commission | double | 已收取的佣金 |
dealStatus 值
| 价值 | 含义 |
|---|---|
FILLED | 订单完全成交 |
PARTIALLY_FILLED | 订单已部分成交 |
REJECTED | 被交易服务器拒绝 |
INTERNALLY_REJECTED | 在到达服务器之前被内部拒绝 |
ERROR | 执行期间发生错误 |
MISSED | 订单错过(例如,市场跳空) |
架构 { #execution-response-schema } ¶
ExecutionResponse ¶
所有订单下单、修改和取消操作都返回此对象。
| 字段 | 类型 | 描述 |
|---|---|---|
orderId | int64 | 受影响的订单 ID |
positionId | int64 | 受影响头寸 ID |
executionType | string | 结果类型 – 见下方值 |
order | Order | 订单详情(如适用) |
position | Position | 持仓详情(如适用) |
deal | Deal | 交易详情(如适用) |
executionType 值
| 价值 | 含义 |
|---|---|
ORDER_ACCEPTED | 挂单已接受 |
ORDER_FILLED | 订单完全成交 |
ORDER_REPLACED | 订单已修改 |
ORDER_CANCELLED | 订单已取消 |
ORDER_EXPIRED | 订单已到期 |
ORDER_REJECTED | 订单被拒绝 |
ORDER_CANCEL_REJECTED | 取消请求被拒绝 |
ORDER_PARTIAL_FILL | 订单已部分成交 |
SWAP | 持仓掉期已应用 |
DEPOSIT | 账户入金 |
WITHDRAW | 账户出金 |
BONUS_DEPOSIT_WITHDRAW | 赠金入金或出金 |
速率限制 ¶
网关在多个级别强制执行速率限制。
| 级别 | 描述 |
|---|---|
| 每个 IP | 限制来自单个 IP 地址的总请求数 |
| 每个用户 | 限制单个令牌所有账户的总请求数 |
| 每个账户 | 限制针对单个交易账户的请求数 |
超出速率限制
当超出速率限制时,API 返回 429 Too Many Requests 并带有 Retry-After 标头。
错误处理 ¶
当请求失败时,API 返回 JSON 错误响应。
{
"error": {
"code": "NOT_ENOUGH_MONEY",
"message": "Insufficient free margin for this order",
"httpStatus": 422,
"retryAfter": null
}
}
错误代码 ¶
| 代码 | HTTP | 描述 |
|---|---|---|
INVALID_REQUEST | 400 | 无效或缺失的请求参数 |
UNAUTHORIZED | 401 | 无效、过期或缺失的令牌 |
TRADING_BAD_VOLUME | 400 | 交易量无效(低于最小值或超过持仓) |
NOT_ENOUGH_MONEY | 422 | 可用保证金不足 |
SYMBOL_NOT_FOUND | 404 | 品种 ID 不存在 |
MARKET_CLOSED | 409 | 该品种的市场当前已关闭 |
MAINTENANCE | 503 | 交易服务器处于维护模式 |
TIMEOUT | 504 | 交易服务器未及时响应 |
GATEWAY_RATE_LIMIT | 429 | 超出速率限制 – 见 Retry-After 标头 |
速率限制处理
当您收到 429 响应时,Retry-After 标头和 retryAfter 字段指示您在发送下一个请求之前需要等待的秒数。