介绍
欢迎使用Coinstore开发者文档,此文档是Coinstore API的唯一官方文档。
本文档提供了相关API的使用方法介绍。
RESTful API包含了资产,订单及行情等接口。
Websocket则提供了行情相关的接口及推送服务。
Coinstore API提供的服务会在此持续更新,请大家及时关注。
快速开始
接入准备
如需使用API,请先登录网页端,通过【用户中心】-【API管理】创建一个API key,再据此文档详情进行开发和交易。
您可以点击 'https://www.coinstore.com/#/user/bindAuth/ManagementAPI' 创建 API Key。
每个用户可创建5组API Key,每组API key可以绑定5个不同的IP地址。API key一旦绑定了IP地址,则只能从绑定的IP地址使用该API key调用API接口。出于安全考虑,强烈建议您为API key绑定相应的IP地址。
创建成功后请务必记住以下信息:
API Key
API 访问密钥Secret Key
签名认证加密所使用的密钥
接口类型
Coinstore为用户提供两种接口,您可根据自己的使用场景和偏好来选择适合的方式进行查询行情、交易。
REST API
REST,即Representational State Transfer的缩写,是一种流行的互联网传输架构。它具有结构清晰、符合标准、易于理解、扩展方便的,正得到越来越多网站的采用。其优点如右:
- 在RESTful架构中,每一个URL代表一种资源;
- 客户端和服务器之间,传递这种资源的某种表现层;
- 客户端通过四个HTTP指令,对服务器端资源进行操作,实现“表现层状态转化”。
交易或资产等一次性操作,建议开发者使用REST API进行操作
WebSocket API
WebSocket是HTML5一种新的协议(Protocol)。它实现了客户端与服务器全双工通信,通过一次简单的握手就可以建立客户端和服务器连接,服务器可以根据业务规则主动推送信息给客户端。
市场行情和买卖深度等信息,建议开发者使用WebSocket API进行获取。
接口鉴权
以上两种接口均包含公共接口和私有接口两种类型。
公共接口可用于获取基础信息和行情数据。公共接口无需认证即可调用。
私有接口可用于交易管理。每个私有请求必须使用您的API Key进行签名验证。
接入URLs
REST API
https://futures.coinstore.com/api
WebSocket
wss://ws-futures.coinstore.com/socket.io/?EIO=3&transport=websocket
为保证API服务的稳定性,建议使用日本AWS云服务器进行访问。如使用中国大陆境内的客户端服务器,连接的稳定性将难以保证。
签名认证
签名说明
API 请求在通过 internet 传输的过程中极有可能被篡改,为了确保请求未被更改,除公共接口(基础信息,行情数据)外的私有接口均必须使用您的 API Key 做签名认证,以校验参数或参数值在传输途中是否发生了更改。
签名算法
使用HmacSHA256哈希函数作为签名函数
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
签名步骤
1、签名有效字符串为请求参数和请求体
注意:请求参数和请求体不进行任何排序或者去除空格,直接拼接成字符串作为payload ``` 实例1:GET请求查询字符串 ?symbol=aaaa88&size=10 String payload = “symbol=aaaa88&size=10”;
实例2 :Post请求体 {"symbol":"aaaa88","side":"SELL","ordType":"LIMIT","ordPrice":2,"ordQty":1,"timestamp":1627384801051} String payload = “{"symbol":"aaaa88","side":"SELL","ordType":"LIMIT","ordPrice":2,"ordQty":1, "timestamp":1627384801051}”;
实例3:混合请求 ?symbol=aaaa88&size=10 {"symbol":"aaaa88","side":"SELL","ordType":"LIMIT","ordPrice":2,"ordQty":1,"timestamp":1627384801051} String payload = “symbol=aaaa88&size=10{"symbol":"aaaa88","side":"SELL","ordType":"LIMIT","ordPrice":2,"ordQty":1, "timestamp":1627384801051}”; ``` 2、使用签名函数对时间戳获得哈希值
注意: X-CS-EXPIRES为13位时间戳,需要除以30000获取一个类时间戳,对其进行签名函数计算,获得函数值作为第三步的秘钥
String time = String.valueOf(X-CS-EXPIRES / 30_000); hmacSha256.init(new SecretKeySpec(Secret_Key.getBytes(), "HmacSHA256")); byte[] hash = hmacSha256.doFinal(time.getBytes()); String key = Hex.toHexString(hash);
3、使用签名函数对签名有效字符串获得哈希值
hmacSha256.reset();
hmacSha256.init(new SecretKeySpec(key.getBytes(), "HmacSHA256"));
hash = hmacSha256.doFinal(payload.getBytes());
String sign= Hex.toHexString(hash);
API接入说明
请求格式
所有的API请求都是restful,目前只有两种方法:GET和POST。 - GET请求:所有的参数都在路径参数里 - POST请求: 路径里可以设置参数,参数可以以JSON格式发送在请求主体(body)里,没有参数的需要传{}
一个合法的请求由以下几部分组成: - 方法请求地址:即访问服务器地址futures.coinstore.com,比如https://futures.coinstore.com/api/trade/order/place - 必须和可选参数。 - X-CS-APIKEY: 即用户申请的API Key。 - X-CS-EXPIRES:您发出请求的时间戳。如:1629291143107。 - X-CS-SIGN:签名计算得出的字符串,用于确保签名有效和未被篡改。
注意:X-CS-APIKEY ,X-CS-EXPIRES ,X-CS-SIGN 三个参数都在请求头中,另外需要设置'Content-Type':'application/json'。
返回格式
所有的接口返回都是JSON格式。在JSON的第一层有3个字段code,msg和data。前两个字段表示请求状态和描述,实际的业务数据在data字段里。
{
"code": "0",
"msg": "suc",
"data": // per API response data in nested JSON object
}
以下是一个返回格式的样例:
字段 | 数据类型 | 描述 |
---|---|---|
code | int | 0:成功,其他失败 |
msg | string | 状态或错误描述 |
data | object | 业务数据 |
错误信息
HTTP状态码
HTTP常见的错误码如下: - 400 Bad Request – Invalid request forma 请求格式无效
401 signature failed – Invalid API Key 无效的API Key
404 service not found 没有找到请求
429 too many visits 请求太频繁被系统限流
500 internal server error – 服务器内部错误
业务状态码
如果失败,response msg 带有错误描述信息, 对应的状态码描述如下:
状态码 | 说明 | 备注 |
---|---|---|
0 | 成功 | code=0 成功, code >0 失败 |
基础信息
币种币对信息
获取币种币对信息
HTTP请求:
- GET /api/configs/public
响应
{
"data": {
"contracts": [
{
"contractId": 100300034,
"currencyId": 30,
"name": "BTCUSDT",
"displayName": "BTC/USDT",
"baseAsset": "BTC",
"quoteAsset": "USDT",
"marginAsset": "USDT",
"tickSize": 0.5,
"priceScale": 1,
"maxOrderSize": 20000,
"minOrderSize": 1,
"takerFeeRate": 0.0006,
"makerFeeRate": 0.00025,
"contractSize": 0.001,
"minMaintRate": 0.003,
"fundingInterval": 3,
"tags": "",
"weight": 0,
"riskLimits": [
{
"maxSize": 40000,
"maintRate": 0.005,
"leverage": 100
},
{
"maxSize": 80000,
"maintRate": 0.01,
"leverage": 50
},
{
"maxSize": 100000,
"maintRate": 0.025,
"leverage": 20
},
{
"maxSize": 500000,
"maintRate": 0.05,
"leverage": 10
},
{
"maxSize": 1000000,
"maintRate": 0.12,
"leverage": 5
},
{
"maxSize": 2000000,
"maintRate": 0.15,
"leverage": 5
},
{
"maxSize": 5000000,
"maintRate": 0.15,
"leverage": 4
},
{
"maxSize": 99999999,
"maintRate": 0.25,
"leverage": 2
}
]
}
],
"currencies": [
{
"currencyId": 30,
"name": "USDT",
"disableTransferIn": 0,
"disableTransferOut": 0
}
],
"version": 3
},
"code": 0
}
请求参数
code | type | required | comment |
---|---|---|---|
响应数据
code | type | comment |
---|---|---|
code | int | 0:成功,其他失败 |
msg | String | 错误信息 |
data | Object | 业务数据 |
- currencies | List <Currency> | 币种列表 |
- contracts | List <Contract> | 币对列表 |
- version | Long | 版本号 |
Currency
code | type | comment |
---|---|---|
currencyId | int | 币种id |
name | String | 币种名称 |
disableTransferIn | boolean | 是否可以划转至合约 默认false 能划转 |
disableTransferOut | boolean | 是否可以划转至现货 默认false 能划转 |
Contract
code | type | comment |
---|---|---|
contractId | int | 合约id |
currencyId | int | 保证金货币id |
name | String | 合约名称 BTCUSDT |
displayName | String | 合约显示名称 BTC/USDT |
baseAsset | String | 商品货币名称 BTC |
quoteAsset | String | 计价货币名称 USDT |
marginAsset | String | 保证金货币名称 USDT |
tickSize | BigDecimal | 最小报价单位 |
priceScale | int | 价格精度 |
maxOrderSize | int | 单笔下单最大张数,默认0,无限制 |
minOrderSize | int | 单笔下单最小张数,默认0,无限制 |
takerFeeRate | BigDecimal | Taker手续费率 |
makerFeeRate | BigDecimal | Maker手续费率 |
contractSize | BigDecimal | 合约单位 |
minMaintRate | BigDecimal | 最小维持保证金率 |
fundingInterval | int | 互换频率 单位 秒 |
weight | int | 排序权重 倒叙 |
tags | String[] | 标签 mock, hot, new, ... |
riskLimits | RiskLimit[] | 风险限额 |
RiskLimit
code | type | comment |
---|---|---|
maxSize | long | 风险限额张数 |
maintRate | BigDecimal | 维持保证金率 |
leverage | int | 杠杆倍数 |
账户相关
资产余额
获取用户资产余额
HTTP请求:
- POST /api/future/queryAvail
响应
{
"code": 0,
"msg": "success",
"data": [
{
"currencyId": 28,
"totalBalance": "997901.568361825",
"available": "997901.568361825",
"frozenForTrade": "0",
"initMargin": "0",
"frozenInitMargin": "0",
"closeProfitLoss": "-121.3079",
"dailyProfitLoss": "0",
"unRealizedProfit": "0",
"accountEquity": "997901.568361825",
"leverLevel": "0",
"toBtc": "0",
"accountId": 100023,
"accountType": 1,
"contractId": null,
"accountEquityBigDecimal": 997901.568361825,
"availableBigDecimal": 997901.568361825
}
]
}
请求参数
code | type | required | comment |
---|---|---|---|
响应数据
code | type | comment |
---|---|---|
code | int | 0:成功,其他失败 |
msg | String | 错误信息 |
data | Object [] | 业务数据 |
- currencyId | string | 保证金id |
- totalBalance | string | 总资产 |
- available | string | 可用资产 |
- frozenForTrade | string | 委托冻结资产 |
- initMargin | string | 已占用保证金 |
- frozenInitMargin | string | 委托冻结保证金 |
- closeProfitLoss | string | 已实现盈亏 |
- dailyProfitLoss | string | 当日已实现盈亏 |
- closeProfitLoss | string | 已实现盈亏 |
- unRealizedProfit | string | 未实现盈亏 |
- accountEquity | string | 净资产 |
- leverLevel | string | 整体杠杆水平 |
- unRealizedProfit | string | 未实现盈亏 |
- toBtc | string | btc资产价值 |
- accountId | string | 账户id |
- accountType | string | 账户类型 1 主账户 |
仓位相关
仓位查询
查询用户合约仓位
HTTP请求:
- GET /api/future/queryPosi
响应
{
"code": 0,
"msg": "success",
"data": [
{
"lastPrice": "3140.3",
"markPrice": "3140.2",
"initMarginRate": "0.01",
"posiQty": "-1",
"contractId": 100300027,
"marginType": 1,
"accountId": 100023,
"accountType": 1,
"available": "12.09855181610000241",
"openAmt": "3.12765",
"initMargin": "0.03315309",
"posiStatus": 1,
"closeProfitLoss": "0",
"maintainMarginRate": "0.005",
"frozenCloseQty": "0",
"frozenOpenQty": "0",
"contractUnit": "0.001",
"openPrice": "3127.65",
"unRealizedProfit": "-0.01255",
"liquidationPrice": "15256.27",
"forwardCross": true,
"crossMargin": true,
"extraMargin": "0"
}
]
}
请求参数
code | type | required | comment |
---|---|---|---|
响应数据
code | type | comment |
---|---|---|
code | int | 0:成功,其他失败 |
msg | String | 错误信息 |
data | Object [] | 业务数据 |
- currencyId | string | 保证金id |
- posiQty | string | 持仓量,大于0多头,小于0空头 |
- openAmt | string | 开仓金额 |
- initMargin | string | 初始保证金 |
- posiStatus | string | 1正常,2等待强平 |
- marginType | string | 保证金类型,1全仓2逐仓 |
- closeProfitLoss | string | 已实现盈亏 |
- initMarginRate | string | 初始保证率 |
- maintainMarginRate | string | 维持保证金 |
- frozenCloseQty | string | 平仓委托冻结量 |
- frozenOpenQty | string | 开仓委托冻结量 |
- extraMargin | string | 额外保证金 deprecated |
- contractUnit | string | 合约单位 |
- openPrice | string | 开仓均价 |
- unRealizedProfit | string | 未实现盈亏 |
- liquidationPrice | string | 预估强评价 |
- lastPrice | string | 最新成交价 |
- markPrice | string | 标记价格 * 持仓数量 * 合约面值 |
- accountId | string | 账户id |
- accountType | string | 账户类型 1 主账户 |
调整保证金
HTTP请求:
- POST /api/future/adjustMargin
响应
{
"code": 0,
"msg": "success",
请求体
code | type | required | comment |
---|---|---|---|
contractId | int | Y | 交易对ID |
margin | int | Y | 保证金额(>0 : 增加保证金,<0 :减少保证金) |
响应数据
code | type | comment |
---|---|---|
code | int | 0:成功,其他失败 |
msg | String | 错误信息 |
data | Object [] | 业务数据 |
调整杠杆倍数
HTTP请求:
- POST /api/configs/adjustPositionConfig
响应
{
"code": 0,
"msg": "success",
请求体
code | type | required | comment |
---|---|---|---|
contractId | int | Y | 交易对ID |
leverage | int | Y | 杠杆倍数, 0为自动模式 逐仓 不能为0 |
isolated | boolean | Y | 保证金类型 默认 false全仓 true逐仓 |
响应数据
code | type | comment |
---|---|---|
code | int | 0:成功,其他失败 |
msg | String | 错误信息 |
data | Object [] | 业务数据 |
订单相关
创建订单
创建订单
HTTP请求:
- POST /api/trade/order/place
请求参数
code | type | required | comment |
---|---|---|---|
accountType | int | N | 账号类型 |
clientOrderId | string | N | 客户端委托ID,如果不传使用uuid |
contractId | int | Y | 合约ID |
marginRate | string | Y | 保证金率,marginRate=1/leverage 范围:0-1 |
leverage | int | Y | 保证金倍数 |
marginType | int | Y | 保证金类型,全仓1,逐仓2 |
orderSubType | int | Y | 0(默认值),1(被动委托),2(最近价触发条件委托),3(指数触发条件委托),4(标记价触发条件委托) |
orderType | int | Y | 委托类型,1(限价),3(市价) |
positionEffect | int | Y | 开平标志,开仓1,平仓2 平仓单必须传2 |
price | string | N | 委托价格,order_type等于3(市价)时非必填 |
quantity | string | Y | 委托数量 |
side | int | Y | 买1,卖-1 |
stopPrice | string | optional | 止损价格,order_type等于3(市价)时非必填 //条件单时 |
响应
{
"code": 0,
"msg": "success",
"data": "1712040078475777"
}
响应数据
code | type | comment |
---|---|---|
code | int | 0:成功,其他失败 |
msg | string | 错误信息 |
data | string | 订单id |
获取当前订单
获取当前订单
HTTP请求:
- GET /api/trade/order/active
响应
{
"code": 0,
"msg": "success",
"data": [
{
"side": 1,
"initMarginRate": "0.01",
"contractId": 100280034,
"marginType": 2,
"orderQty": "1",
"orderPrice": "1",
"stopPrice": "0",
"orderType": 1,
"orderSubType": 0,
"positionEffect": 1,
"accountId": 100023,
"orderId": "1712035767779585",
"timeInForce": 1,
"accountType": 1,
"contractUnit": "0.001",
"applId": 2,
"clOrderId": "c07fb0395d304590ac9277b71741aeaf",
"orderTime": 1632724540258000,
"orderStatus": 2,
"matchQty": "0",
"matchAmt": "0",
"cancelQty": "0",
"matchTime": 0,
"feeRate": "0.00025",
"avgPrice": "0",
"fcOrderId": "",
"stopCondition": 0,
"minimalQuantity": null
}
]
}
请求参数
code | type | required | comment |
---|---|---|---|
响应数据
code | type | comment |
---|---|---|
code | int | 0 |
msg | string | |
data | list | |
- accountType | int | 账号类型 |
- clientOrderId | string | 客户端委托ID,如果不传使用uuid |
- contractId | int | 合约ID |
- initMarginRate | string | 保证金率,全仓时>0,逐仓时>0 |
- marginType | int | 保证金类型,全仓1,逐仓2 |
- minimalQuantity | string | 最新成交数量,order_type等于3(市价)时非必填//前端不传 |
- orderSubType | int | 0(默认值),1(被动委托),2(最近价触发条件委托),3(指数触发条件委托),4(标记价触发条件委托) |
- orderType | int | 委托类型,1(限价),3(市价) |
- positionEffect | int | 开平标志,开仓1,平仓2 |
- orderPrice | string | 委托价格,order_type等于3(市价)时非必填 |
- orderQty | string | 委托数量 |
- side | int | 买1,卖-1 |
- stopCondition | int | 止损,order_type等于3(市价)时非必填;值域:1(止盈,未启用),2(止损,未启用),3(只减仓,未启用) //前端不传 |
- stopPrice | string | 止损价格,order_type等于3(市价)时非必填 //条件单时 |
- symbol | string | 合约名称 |
获取当前订单V2
获取当前订单 V2 版本
新接口的 API域名地址 https://futures.coinstore.com
调用支持ApiKey
HTTP请求:
- GET /api/v2/trade/order/active
响应
{
"code": 0,
"msg": "success",
"data": [
{
"orderStatus": 2,
"avgPrice": "0",
"matchQty": "0",
"matchAmt": "0",
"accountType": 1,
"orderPrice": "100",
"timeInForce": 1,
"orderType": 1,
"clOrderId": "1626933997000",
"positionEffect": 1,
"marginType": 2,
"stopCondition": 0,
"orderSubType": 0,
"marginLeverage": 10,
"orderQty": "5000",
"remainQty": "5000",
"orderTime": 1626933997312000,
"stopPrice": "0",
"initMarginRate": "0.1",
"side": 1,
"orderId": "1705963943362561",
"contractId": 2902104,
"accountId": 29475591730
}
]
}
请求参数
code | type | required | comment |
---|---|---|---|
contractId | int | N | 合约id |
ordId | int | N | 委托ID |
clOrdId | String | N | 客户端委托ID |
响应数据
code | type | comment |
---|---|---|
code | int | 0 |
msg | string | |
data | list | |
- accountType | int | 账户类型 1:user 2:system 3:bonus 4:follow |
- contractId | int | 合约ID |
- orderId | long | 委托ID |
- clOrderId | string | 客户端委托ID |
- orderStatus | int | 委托状态 0:未申报 1:正在申报 2:已申报未成交 3:部分成交 4: 全部成交 5:部分撤单 6: 全部撤单 7:撤单中 8:失效 |
- timeInForce | int | 成交限制类型:1:GTC, 2:IOC, 3:FOK |
- initMarginRate | string | 保证金率 |
- marginLeverage | int | 保证金倍数 |
- marginType | int | 保证金类型,全仓1,逐仓2 |
- orderType | int | 委托类型 1:LIMIT 2:条件单限价 3:MARKET 4:条件单市价 |
- orderSubType | int | 0(默认值),1(被动委托),2(最近价触发条件委托),3(指数触发条件委托),4(标记价触发条件委托) |
- positionEffect | int | 开平标志,开仓1,平仓2 |
- orderPrice | string | 委托价格:委托价格,order_type等于3(市价)时非必填 |
- orderQty | string | 委托数量 |
- side | int | 方向 1:做多 -1:做空 |
- stopCondition | int | 止损,order_type等于3(市价)时非必填;值域:1(止盈,未启用),2(止损,未启用),3(只减仓,未启用) //前端不传 |
- stopPrice | string | 止损价格,order_type等于3(市价)时非必填 //条件单时 |
- matchQty | string | 累积成交数量 |
- matchAmt | string | 累积成交金额 |
- avgPrice | String | 成交均价 |
- remainQty | int | 剩余数量 |
- orderTime | long | 委托时间 |
获取订单信息V2
获取订单信息 V2 版本
新接口的 API域名地址 https://futures.coinstore.com
调用支持ApiKey
HTTP请求:
- GET /api/v2/trade/order/orderInfo
响应
{
"code": 0,
"msg": "success",
"data": [
{
"accountType": 1,
"contractId": 100100001,
"orderId": 1736859343912961,
"clOrderId": "ZznkeIhHR4yEHmAUF0J6wA#1018",
"orderStatus": 6,
"timeInForce": 1,
"marginLeverage": 0,
"marginType": 1,
"orderType": 3,
"positionEffect": 1,
"orderPrice": "0",
"orderQty": "7134",
"side": 1,
"stopCondition": "0",
"stopPrice": "0",
"matchQty": "0",
"matchAmt": "0",
"avgPrice": "0",
"remainQty": "0",
"profitAndLoss": "0",
"fee": "0",
"feeCurrencyName": "USDT",
"orderUpdateTime": 1656398147046,
"orderTime": 1656398147046
}
]
}
请求参数
code | type | required | comment |
---|---|---|---|
ordId | int | N | 委托ID |
clOrdId | String | N | 客户端委托ID |
响应数据
code | type | comment |
---|---|---|
code | int | 0 |
msg | string | |
data | list | |
- accountType | int | 账户类型 1:user 2:system 3:bonus 4:follow |
- contractId | int | 合约ID |
- orderId | long | 委托ID |
- clOrderId | string | 客户端委托ID |
- orderStatus | int | 委托状态 0:未申报 1:正在申报 2:已申报未成交 3:部分成交 4: 全部成交 5:部分撤单 6: 全部撤单 7:撤单中 8:失效 |
- timeInForce | int | 成交限制类型:1:GTC, 2:IOC, 3:FOK |
- marginLeverage | int | 保证金倍数 |
- marginType | int | 保证金类型,全仓1,逐仓2 |
- orderType | int | 委托类型 1:LIMIT 2:条件单限价 3:MARKET 4:条件单市价 |
- positionEffect | int | 开平标志,开仓1,平仓2 |
- orderPrice | string | 委托价格:委托价格,order_type等于3(市价)时非必填 |
- orderQty | string | 委托数量 |
- side | int | 方向 1:做多 -1:做空 |
- stopCondition | string | 止损,order_type等于3(市价)时非必填;值域:1(止盈,未启用),2(止损,未启用),3(只减仓,未启用) //前端不传 |
- stopPrice | string | 止损价格,order_type等于3(市价)时非必填 //条件单时 |
- matchQty | string | 累积成交数量 |
- matchAmt | string | 累积成交金额 |
- avgPrice | String | 成交均价 |
- remainQty | string | 剩余数量 |
- profitAndLoss | String | 盈亏 |
- fee | String | 累计手续费 |
- feeCurrencyName | String | 交易手续费币种 |
- orderUpdateTime | long | 订单状态更新时间:若未成交,则系统返回“订单创建时间”;若已成交,则系统返回最近一笔成交的时间 |
- orderTime | long | 委托时间 |
取消委托单
取消委托单
HTTP请求:
- POST /api/trade/order/cancel
请求参数
code | type | required | comment |
---|---|---|---|
contractId | int | Y | 合约号 |
originalOrderId | long | Y | 原始委托号sb |
响应
{
"code": 0,
"msg": "success",
"data": "cancel order success"
}
响应数据
code | type | comment |
---|---|---|
code | int | 0:成功,其他失败 |
msg | string | 错误信息 |
data | string | 返回数据 |
一键撤单
HTTP请求:
- POST /api/trade/order/cancelAll
请求参数
code | type | required | comment |
---|---|---|---|
contractId | int | N | 不传撤销所有币对订单 |
响应
{
"code": 0,
"msg": "success",
"data": "cancel all order success"
}
响应数据
code | type | comment |
---|---|---|
code | int | 0:成功,其他失败 |
msg | string | 错误信息 |
data | string | 返回数据 |
批量下单
批量下单
HTTP请求:
- POST /api/trade/order/placeBatch
请求参数
code | type | required | comment |
---|---|---|---|
orders | list | Y | |
- clientOrderId | string | N | 客户端委托ID,如果不传使用uuid |
- contractId | int | Y | 合约ID |
- initRate | string | Y | 保证金率,保证金率=1/leverage |
- marginType | int | Y | 保证金类型,全仓1,逐仓2 |
- orderSubType | int | Y | 0(默认值),1(被动委托) |
- orderType | int | Y | 委托类型,1(限价),3(市价) |
- positionEffect | int | Y | 开平标志,开仓1,平仓2 平仓单必须传2 |
- orderPrice | string | N | 委托价格,order_type等于3(市价)时非必填 |
- orderQty | string | Y | 委托数量 |
- side | int | Y | 买1,卖-1 |
body
json {"orders":[{ "contractId": 100280034, "side": 1, "orderType": 1, "orderPrice": "1", "orderQty": "1", "positionEffect": 1, "marginType": 1, "initRate": 0, "orderSubType": 0 },{ "contractId": 100280034, "side": 1, "orderType": 1, "orderPrice": "1", "orderQty": "1", "positionEffect": 1, "marginType": 1, "initRate": 0, "orderSubType": 0 }]}
响应
{
"code": 0,
"msg": "success",
"data": {
"reject": [],
"succ": [
[
"91642986-bccd-4980-9946-326c509f9715",
"1712125158883589"
],
[
"eb83d3b4-dd6a-4699-be1c-8a5403a8a884",
"1712125158883590"
]
]
}
}
响应数据
code | type | comment |
---|---|---|
code | int | 0:成功,其他失败 |
msg | string | 错误信息 |
data | Object | 返回数据 |
- reject | Object[] | 失败订单 [客户端委托ID,错误code] |
- succ | Object[] | 成功订单 [客户端委托ID,订单id] |
根据订单id批量进行撤单
根据订单id批量进行撤单
HTTP请求:
- POST /api/trade/orders/del
请求参数
code | type | required | comment |
---|---|---|---|
cancels | list | Y | |
- originalOrderId | string | Y | 客户端委托ID,如果不传使用uuid |
- contractId | int | Y | 合约ID |
body
json {"cancels":[{ "contractId": 100280034, "originalOrderId": 1712125303587721 },{ "contractId": 100280034, "originalOrderId": 1712125303587722 } ]}
响应
{
"code": 0,
"msg": "success",
"data": {
"reject": [
[
"",
"1019",
"1712125303587721"
],
[
"",
"1019",
"1712125303587722"
]
],
"succ": [
[
"",
"1712125303587722"
],
[
"",
"1712125303587721"
]
]
}
}
响应数据
code | type | comment |
---|---|---|
code | string | 正常返回信息 |
msg | string | 错误信息 |
data | Object | |
-succ | Object[] | 成功的订单id集合 [客户端委托ID,订单id] |
-reject | Object[] | 失败的订单id集合 [客户端委托ID,错误code,订单id] |
获取用户全部成交V2
获取全部成交记录 V2 版本
新接口的 API域名地址 https://futures.coinstore.com
调用支持ApiKey
HTTP请求:
- GET /api/v2/trade/order/queryHisMatch
响应
{
"code" : 0,
"data" : [ {
"accountId": 3431,
"contractId": 100300144,
"orderId": 1762426675003393,
"clOrdId": "c819f4d2282f486d9ed4711327d6381e",
"matchId": 10763,
"tradeId": 2177,
"execSize": 6,
"matchAmt": -0.672000000000000000,
"avgPrice": 112.000000000000000000,
"orderStatus": 4,
"orderRole": "MAKER",
"remainingSize": 0,
"pnl": 0.0,
"fee": 0.000168,
"matchTime": 1680781089260
} ],
"msg" : "string"
}
请求参数
code | type | required | comment |
---|---|---|---|
contractId | int | N | 合约id |
ordId | int | N | 委托ID |
pageNum | string | N | 页数,如果不传参,则默认返回 1 页 |
pageSize | string | N | 每页数量,默认20 |
side | string | N | 方向 -1做空 1做多 |
响应数据
code | type | comment |
---|---|---|
code | int | 0 |
msg | string | |
data | object | |
- accountId | int | 账户id |
- contractId | long | 交易对ID、合约号 |
- orderId | Long | 委托ID |
- clOrdId | string | 客户端委托ID |
- matchId | Long | 撮合ID |
- tradeId | Long | 成交ID |
- execSize | int | 成交数量 |
- matchAmt | Double | 成交金额 |
- avgPrice | Double | 成交均价 |
- orderStatus | int | 委托状态 0:未申报 1:正在申报 2:已申报未成交 3:部分成交 4: 全部成交 5:部分撤单 6: 全部撤单 7:撤单中 8:失效 |
- orderRole | string | 角色:Taker,Maker |
- remainingSize | int | 剩余数量 |
- pnl | Double | 盈亏 |
- fee | Double | 累积手续费 |
- matchTime | Long | 成交时间 |
用户强减记录
获取全部成交记录
HTTP请求:
- GET /api/future/queryFlOrders
响应
{
"data": {
"list": [
{
"timestamp": 1624882627001000,
"accountType": 1,
"userId": 100023,
"contractId": 100280034,
"uuid": "1703812925489153",
"applId": 2,
"side": -1,
"bankruptcyPrice": 0,
"closeQty": 799,
"filledCurrency": 27509.410200000000000000,
"filledQuantity": 799,
"canceledQuantity": 0,
"orderStatus": 4,
"feeRatio": null,
"marginType": 1,
"bonusAccountType": null,
"lossUserId": 100023,
"profitUserId": null,
"execId": null,
"lossMarginType": 1,
"profitMarginType": null,
"closePrice": 34429.800000000000000000,
"closeAmt": 34429.800000000000000000,
"lossSubsidy": null,
"profitSubsidy": null,
"takerSide": -1
}
]
},
"code": 0
}
请求参数
code | type | required | comment |
---|---|---|---|
contractId | int | N | 合约id |
endTime | string | N | 结束时间 |
startTime | string | N | 开始时间 |
pageNum | string | N | 页数 |
pageSize | string | N | 每页数量 |
side | string | N | 方向 -1上一页 1下一页 |
响应数据
code | type | comment |
---|---|---|
code | int | 0 |
msg | string | |
data | object | |
- applId | int | 期货ID,2 |
- timestamp | Long | 委托时间 |
- contractId | Long | 交易对ID、合约号 |
- userId | Long | 用户ID |
- uuid | String | 委托编号 |
- side | int | 买卖方向 |
- closeQty | int | 委托量 |
- closePrice | Double | 委托量 |
- closeAmt | Double | 委托量 |
- filledCurrency | Double | 成交金额 |
- filledQuantity | int | 成交量 |
- canceledQuantity | int | 撤单数量 |
- orderStatus | int | 委托状态 4 成交 |
- feeRatio | Double | 手续费 |
- marginType | int | 保证金类型 |
- lossUserId | int | 强减用户(亏损方) |
- profitUserId | int | 被强减用户(盈利方) |
- execId | int | 成交编号 |
- lossMarginType | int | 强减用户(亏损方)保证金类型 |
- profitMarginType | int | 被强减用户(盈利方)保证金类型 |
用户强平记录
获取全部成交记录
HTTP请求:
- GET /api/future/queryFcOrders
响应
{
"data": {
"list": [
{
"timestamp": 1625043178024000,
"accountType": 1,
"userId": 100023,
"contractId": 100280034,
"uuid": "1703981275414529",
"applId": 2,
"side": -1,
"bankruptcyPrice": 0,
"closeQty": 1,
"filledCurrency": 35.108000000000000000,
"filledQuantity": 1,
"canceledQuantity": 0,
"orderStatus": 4,
"feeRatio": null,
"marginType": 2,
"bonusAccountType": null,
"lossUserId": 100023,
"profitUserId": null,
"execId": null,
"lossMarginType": 2,
"profitMarginType": null,
"closePrice": 34789.200000000000000000,
"closeAmt": 34789.200000000000000000,
"lossSubsidy": null,
"profitSubsidy": null,
"takerSide": -1
}
]
},
"code": 0
}
请求参数
code | type | required | comment |
---|---|---|---|
contractId | int | N | 合约id |
endTime | string | N | 结束时间 |
startTime | string | N | 开始时间 |
pageNum | string | N | 页数 |
pageSize | string | N | 每页数量 |
side | string | N | 方向 -1上一页 1下一页 |
响应数据
code | type | comment |
---|---|---|
code | int | 0 |
msg | string | |
data | object | |
- applId | int | 期货ID,2 |
- timestamp | Long | 委托时间 |
- contractId | Long | 交易对ID、合约号 |
- userId | Long | 用户ID |
- uuid | String | 委托编号 |
- side | int | 买卖方向 |
- closeQty | int | 委托量 |
- closePrice | Double | 委托量 |
- closeAmt | Double | 委托量 |
- filledCurrency | Double | 成交金额 |
- filledQuantity | int | 成交量 |
- canceledQuantity | int | 撤单数量 |
- orderStatus | int | 委托状态 4 成交 |
- feeRatio | Double | 手续费 |
- marginType | int | 保证金类型 |
- lossUserId | int | 强减用户(亏损方) |
- profitUserId | int | 被强减用户(盈利方) |
- execId | int | 成交编号 |
- lossMarginType | int | 强减用户(亏损方)保证金类型 |
- profitMarginType | int | 被强减用户(盈利方)保证金类型 |
行情相关
获取历史K线
HTTP请求:
- GET /v1/futureQuot/queryCandlestick
注意:返回结果是按时间正序
响应
{
"success": true,
"data": {
"lines": [
[
1632794100000,
"43762",
"43762",
"43762",
"43762",
"0"
]
],
"contractId": 100280034
}
}
请求参数
code | type | required | comment |
---|---|---|---|
contractId | int | Y | 合约id |
range | string | Y | K线类型 1Min : 60000 3Min : 180000 5Min : 300000 15Min : 900000 30Min : 1800000 1Hour : 3600000 2Hour : 7200000 4Hour : 14400000 6Hour : 21600000 12Hour : 43200000 1Day : 86400000 1Week : 604800000 |
end | string | N | 截止时间 默认当前时间,传第一条记录的时间,可以实现滚动翻页 |
limit | string | N | 查询记录条数 默认 1440 |
响应数据:
code | type | comment |
---|---|---|
code | int | 0:成功,其他失败 |
msg | string | 错误信息 |
data | object | |
├─lines | List[] | [时间戳,开仓价,最高价格,最低价格,收盘价,成交张数] |
查询行情快照
HTTP请求:
- GET /v1/futureQuot/querySnapshot
响应
{
"contractId": 100100000,
"result": {
"bids": [
[
"50999",
"112"
]
],
"asks": [
[
"51001",
"67"
]
],
"fr": "0.000033",
"mp": "56673.9",
"cid": 100100000,
"ph": "51001",
"tv": "116",
"tt": "5916.096",
"pl": "50999",
"ip": "56673.8",
"pfr": "0.000033",
"pcr": "0.00003922",
"lp": "51001"
}
}
请求参数
code | type | required | comment |
---|---|---|---|
contractId | int | Y | 合约id |
响应数据:
code | type | comment |
---|---|---|
code | int | 0:成功,其他失败 |
msg | string | 错误信息 |
data | object | |
├─cid | Long | 交易对id |
├─ip | Double | 指数价 |
├─mp | Double | 标记价 |
├─lp | Double | 最新价 |
├─tv | Long | 24小时成交量 |
├─tt | Long | 24小时成交额 |
├─ph | Double | 24小时最高价 |
├─pl | Double | 24小时最低价 |
├─pcr | Double | 24小时涨跌幅率 |
├─fr | Double | 资金费率 |
├─pfr | Double | 预测资金费率 |
├─bids | List | 买盘 [价格,张数] |
├─asks | List | 买盘 [价格,张数] |
获取最新成交
HTTP请求:
- GET /v1/futureQuot/queryTickTrade
注意:返回结果是按时间正序
响应
{
"success": true,
"data": {
"trades": [
[
1631779278982000,
"51000",
"1",
1
],
[
1631779329355000,
"50000",
"1",
-1
]
]
}
}
请求参数
code | type | required | comment |
---|---|---|---|
contractId | int | Y | 合约id |
响应数据:
code | type | comment |
---|---|---|
code | int | 0:成功,其他失败 |
msg | string | 错误信息 |
data | object | |
├─trades | List[] | [时间戳,成交价,成交张数,成交方向(1多 -1空)] |
Websocket行情数据
简介
接入URL
wss://ws-futures.coinstore.com/socket.io/?EIO=3&transport=websocket
鉴权
注:signature: 签名方式同restful
[
"auth",
{
"header": {
"type": 1001
},
"body": {
"apiKey": "AccessKey",
"expires": "expires",
"signature": "signature"
}
}
]
订阅
根据是否需要鉴权之后来进行业务topic的订阅,下面式是订阅的标准格式,在相关ws接口说明里有详细的说明
[
"subscribe",
{
"header": {
"type": 1003
},
"body": {
"topics": [
{
"topic": "indicator",
"params": {
"symbols": [
{
"symbol": 0
}
]
}
},
{
"topic": "future_snapshot_depth",
"params": {
"symbols": [
{
"symbol": 0
}
]
}
},
{
"topic": "future_tick",
"params": {
"symbols": [
{
"symbol": 0
}
]
}
},
{
"topic": "match"
},
{
"topic": "future_kline",
"params": {
"symbols": [
{
"symbol": 0,
"ranges": [
"60000"
]
}
]
}
}
]
}
}
]
订阅 Topic 列表
topic | 类型 | 描述 | 需要验签 |
---|---|---|---|
future_tick | SUB | 获取逐笔成交 | 否 |
future_kline | SUB | 获取K线 | 否 |
future_snapshot_depth | SUB | 获取行情快照买卖档位 | 否 |
indicator | SUB | 获取行情数据 | 否 |
match | SUB | 获取当前委托、持仓、资产 | 是 |
获取K线
订阅topic: future_kline
数据格式中的symbol值为:合约ID
ranges的取值范围:
- 1Min = 60000
- 5Min = 300000
- 15Min = 900000
- 30Min = 1800000
- 1Hour = 3600000
- 4Hour = 14400000
- 12Hour = 43200000
- 1Day = 86400000
- 1Week = 604800000
消息订阅格式如下所示:
{
"header": {
"type": 1003
},
"body": {
"topics": [
{
"topic": "future_kline",
"params": {
"symbols": [
{
"symbol": 100,
"ranges": [
"60000"
]
}
]
}
}
]
}
}
返回结构
code | type | comment |
---|---|---|
contractId | long | 合约ID |
range | String | 范围 |
lines | object [] | [ [${时间戳}, ${开市价格}, ${最高价格}, ${最低价格}, ${闭市价格}, ${成交量}] ] |
获取逐笔成交
订阅topic: future_tick
数据格式中的symbol值为:合约ID
消息订阅格式如下所示:
{
"header": {
"type": 1003
},
"body": {
"topics": [
{
"topic": "future_tick",
"params": {
"symbols": [
{
"symbol": 100
}
]
}
}
]
}
}
返回结构
code | type | comment |
---|---|---|
contractId | long | 合约ID |
trades | object [] | [ [${时间戳}, ${成交价格}, ${成交数量}, ${方向(1 多; 2 空)}] ] ] |
获取行情快照买卖档位
订阅topic: future_snapshot_depth
数据格式中的symbol值为:合约ID
消息订阅格式如下所示:
{
"header": {
"type": 1003
},
"body": {
"topics": [
{
"topic": "future_snapshot_depth",
"params": {
"symbols": [
{
"symbol": 100
}
]
}
}
]
}
}
返回结构
code | type | comment |
---|---|---|
contractId | long | 合约ID |
bids | object [] | 买档位数据列表 [ [${价格}, ${数量}] ] ] |
asks | object [] | 卖档位数据列表 [ [${价格}, ${数量}] ] ] |
获取行情快照基础数据
订阅topic: indicator
数据格式中的symbol值为:合约ID
消息订阅格式如下所示:
{
"header": {
"type": 1003
},
"body": {
"topics": [
{
"topic": "indicator",
"params": {
"symbols": [
{
"symbol": 100
}
]
}
}
]
}
}
返回结构
code | type | comment |
---|---|---|
indicators | List |
交易对行情 |
markets | List |
行情概况 |
account | List |
私有数据 |
注意:未登录时 accounts为null 注意:订阅时 params.symbols 为空,则 indicators 为 null 注意:topic默认频率 1s, markets 默认频率 3s,即每3秒有2次推送消息 markets 为null
Indicator
code | type | comment |
---|---|---|
cid | Long | 交易对id |
ip | BigDecimal | 指数价 |
mp | BigDecimal | 标记价 |
lp | BigDecimal | 最新价 |
tv | Long | 24小时成交量 |
tt | Long | 24小时成交额 |
ph | BigDecimal | 24小时最高价 |
pl | BigDecimal | 24小时最低价 |
pcr | BigDecimal | 24小时涨跌幅率 |
fr | BigDecimal | 资金费率 |
pfr | BigDecimal | 预测资金费率 |
Market
code | type | comment |
---|---|---|
cid | Long | 交易对id |
lp | BigDecimal | 最新价 |
pcr | BigDecimal | 24小时涨跌幅率 |
tv | Long | 24小时成交量 |
tt | Long | 24小时成交额 |
Account
code | type | comment |
---|---|---|
aid | Long | 账号id 主账号或者子账号 |
at | int | 账号类型 1 主账号 10 体验金账号 |
assets | List |
资产信息 |
posis | List |
仓位信息 |
Asset
code | type | comment |
---|---|---|
cid | Long | 币种ID |
avail | BigDecimal | 可用余额 |
upnl | BigDecimal | 全仓未实现盈亏 |
Posi
code | type | comment |
---|---|---|
pid | Long | 仓位ID |
flp | BigDecimal | 强平价格 |
upnl | BigDecimal | 未实现盈亏 |
adl | int | ADL等级 |
mp | BigDecimal | 标记价 |
注意:pid为 3012推送仓位的id
获取私有数据
订阅topic: match
消息订阅格式如下所示:
{
"header": {
"type": 1003
},
"body": {
"topics": [
{
"topic": "match"
}
]
}
}
返回结构
资产
code | type | comment |
---|---|---|
messageType | int | 消息类型 3002 |
accountId | long | 用户ID |
currencyId | long | 币种ID |
totalBalance | double | 总资产 |
available | double | 可用资产 |
frozenInitMargin | double | 委托冻结保证金 |
initMargin | double | 已占用保证金 |
closeProfitLoss | double | 已实现盈亏 |
持仓
code | type | comment |
---|---|---|
messageType | int | 消息类型 3012 |
accountId | long | 用户ID |
posis | object[] | 持仓列表 |
├─contractId | long | 合约ID |
├─marginType | int | 保证金类型,1全仓2逐仓 |
├─initMarginRate | String | 初始保证率 |
├─maintainMarginRate | String | 维持保证金 |
├─initMargin | String | 初始保证金 |
├─extraMargin | String | 额外保证金 |
├─openAmt | String | 开仓金额 |
├─openPrice | String | 开仓均价 |
├─posiQty | String | 持仓量,大于0多头,小于0空头 |
├─contractUnit | String | 合约单位 |
├─closeProfitLoss | String | 已实现盈亏 |
├─liquidationPrice | double | 预估强平价 |
├─unRealizedProfit | double | 未实现盈亏 |
持仓配置
code | type | comment |
---|---|---|
messageType | int | 消息类型 3022 |
accountId | long | 用户ID |
positionConfgs | object[] | 持仓配置列表 |
├─contractId | long | 合约ID |
├─leverage | int | 杠杆倍数, 0为自动模式 |
├─isolated | boolean | 保证金类型 默认 false全仓 true逐仓 |
当前委托
code | type | comment |
---|---|---|
messageType | int | 消息类型 3004 |
accountId | long | 用户ID |
contractId | long | 合约ID |
orderId | string | 委托号 |
clientOrderId | string | 客户订单编号 |
price | string | 委托价格 |
quantity | string | 委托数量 |
leftQuantity | string | 剩余数量 |
side | number | 买卖方向(1:买,-1:卖) |
placeTimestamp | number | 委托时间 |
matchAmt | string | 成交金额 |
matchQty | string | 成交张数 |
orderType | number | 合约委托类型(1:限价,3:市价) |
positionEffect | number | 开平标志(1:开仓,2:平仓) |
marginType | number | 保证金类型(1、全仓,2:逐仓) |
initMarginRate | string | 初始保证金率 |
fcOrderId | string | 强平委托号,空时为强平委托 |
markPrice | string | 标记价格 |
feeRate | string | 手续费率 |
contractUnit | string | 合约单位 |
orderStatus | int | 委托状态 0-未申报,1-正在申报,2-已申报未成交,3-部分成交,4-全部成交,5-部分撤单,6-全部撤单,7-撤单中,8-失效,11-缓存高于条件的委托,12-缓存低于条件的委托 |
错误码
错误码:
Code | Comment |
---|---|
signature-failed 401 | 主账号冻结子账号登录权限 |
signature-failed 401 | 子账号被删除 |
signature-failed 401 | Api key 错误 |
unauthorized 1401 | 请求ip不在IP白名单中 |
unauthorized 1401 | 签名失败 |
unauthorized 1401 | 用户登录 Token 失效 |
signature error 3005 | 签名生成错误 |
symbol not found 3011 | 该币对没有上线 |
trade-limit 3013 | 您暂时不具备合约交易资质,如有疑问请咨询客服,给您造成不便敬请谅解。 |
user-trade-limit 3014 | 当前子账号暂时不具备合约交易资质 |
user-part-trade-limit 3015 | 当前子账号已被限制交易当前合约币对 |
duplicate-order 3111 | 重复订单 |
sub-user-operator-business-error 6001 | 子账号不允许参与该业务 |