# MXCPERP OPEN-API接口模块
##基本信息:
url: https:contract.mxc.com 、 https:contract.mxc.io 、 https:contract.mxc.ai
## 通用响应数据结构:
```json
{
"success": true,
"code": 0,
"data":
{
"symbol":"BTC_USD",
"fairPrice":8000,
"timestamp":1111111111
}
}
```
or
```json
{
"success": false,
"code":500,
"message": "系统内部错误!"
}
```
## 请求格式:
相应API接受GET,POST或DELETE类型的请求,post请求的Content-Type为:application/json.参数以json格式发送(参数命名规则为驼峰命名),get请求以requestParam形式发送(参数命名规则为'_'隔开)
鉴权方式:
1.对于公共接口,不需要签名
2.对于私有接口,需要在header中传入ApiKey、Request-Time、Signature、Revc-Window(可选)参数,Signature为签名字符串,签名规则如下:
1)签名时需要先获得请求参数字符串,无参时为"";对于get请求,按字典序拼接业务参数以&间隔,
并最终获得签名目标串(在批量操作的API中,若参数值中有逗号等特殊符号,这些符号在签名时需要做URL encode),
对于post请求,签名参数为json字符串;
2)获得参数字符串后,再拼接签名目标串,规则为:accessKey+时间戳+获取到的参数字符串
3)要求使用HMAC SHA256算法对目标串进行签名,并最终将签名作为参数携带到header中
4)参与签名的业务参数为null时,不参与签名,对于path参数,也不参与签名;注意get请求将参数拼接至url上时,如果参数为null,
后台解析时,会解析成"",固当get请求,某参数为null时,不要传该参数,或者签名时,将该参数的值设置为"",否则会出现验签失败!
5)请求时将签名时用到的req_time的值放入header的Request-Time参数中,获得的签名字符串放入header的Signature参数中,将APIKEY的Access Key放在header的ApiKey参数中,其余业务参数按正常传递即可
时间安全:
所有签名接口均需要传入header参数Request-Time,即以毫秒表示的时间戳字符串,服务端接收到请求后会验证请求发出的时间
范围。若接受请求时,收到的req_time小于服务端时间10秒(默认值)以上(该时间窗口值可以通过发送可选header参数
Revc-Window来自定义,其最大值为60,不推荐使用30秒以上的recv_window),或大于服务端时间2秒以上,则认为该请求无效
java示例:
/**
* 获取get请求参数字符串
*
* @param param get/delete请求参数map
* @return
*/
public static String getRequestParamString(Map<String, String> param) {
if (MapUtils.isEmpty(param)) {
return "";
}
StringBuilder sb = new StringBuilder(1024);
SortedMap<String, String> map = new TreeMap<>(param);
for (Map.Entry<String, String> entry : map.entrySet()) {
String key = entry.getKey();
String value = StringUtils.isBlank(entry.getValue()) ? "" : entry.getValue();
sb.append(key).append('=').append(urlEncode(value)).append('&');
}
sb.deleteCharAt(sb.length() - 1);
return sb.toString();
}
public static String urlEncode(String s) {
try {
return URLEncoder.encode(s, "UTF-8").replaceAll("\\+", "%20");
} catch (UnsupportedEncodingException e) {
throw new IllegalArgumentException("UTF-8 encoding not supported!");
}
}
/**签名*/
public static String sign(SignVo signVo) {
if (signVo.getRequestParam() == null) {
signVo.setRequestParam("");
}
String str = signVo.getAccessKey() + signVo.getReqTime() + signVo.getRequestParam();
return actualSignature(str, signVo.getSecretKey());
}
public static String actualSignature(String inputStr, String key) {
Mac hmacSha256;
try {
hmacSha256 = Mac.getInstance("HmacSHA256");
SecretKeySpec secKey =
new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
hmacSha256.init(secKey);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("No such algorithm: " + e.getMessage());
} catch (InvalidKeyException e) {
throw new RuntimeException("Invalid key: " + e.getMessage());
}
byte[] hash = hmacSha256.doFinal(inputStr.getBytes(StandardCharsets.UTF_8));
return Hex.encodeHexString(hash);
}
@Getter
@Setter
public static class SignVo {
private String reqTime;
private String accessKey;
private String secretKey;
private String requestParam; //get请求参数根据字典顺序排序,使用&拼接字符串,post为json字符串
}
## 创建API key
用户可以在MXC站点个人中心,创建API key,其包括两个部分,Access keyAPI的访问秘钥,Secret key对应的秘钥,用于签名计算及验证
***
## 合约行情接口(公共)
***
获取服务器时间:GET api/v1/contract/ping
获取合约信息:GET api/v1/contract/detail
获取合约支持划转的币种:GET api/v1/contract/support_currencies
获取合约深度信息:GET api/v1/contract/depth/{symbol}
获取合约深度信息:GET api/v1/contract/depth_commits/{symbol}/{limit}
获取合约指数价格:GET api/v1/contract/index_price/{symbol}
获取合约合理价格:GET api/v1/contract/fair_price/{symbol}
获取合约资金费率:GET api/v1/contract/funding_rate/{symbol}
获取合约K线数据: GET api/v1/contract/kline/{symbol}
获取指数价格K线数据: GET api/v1/contract/kline/index_price/{symbol}
获取合理价格K线数据: GET api/v1/contract/kline/fair_price/{symbol}
获取合约成交数据: GET api/v1/contract/deals/{symbol}
获取合约ticker数据: GET api/v1/contract/ticker
获取合约风险基金余额: GET api/v1/contract/risk_reverse/{symbol}
获取合约风险基金余额历史: GET api/v1/contract/risk_reverse/history
获取合约资金费率历史: GET api/v1/contract/funding_rate/history
***
+ ### 获取服务器时间
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/contract/ping**
- ##### 请求参数: 无
- ##### 响应参数 :
示例:
```json
{
"success": true,
"data":111111111
}
```
***
+ ### 获取合约信息
+ ##### 限速规则: 1次/5秒
+ ##### method:
+ **GET api/v1/contract/detail**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | false | 合约名 |
- ##### 响应参数 :
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| symbol | string | 合约名 |
| displayName | string | 展示名 |
| displayNameEn | string | 英文展示名 |
| positionOpenType | int | 开仓类型,1:逐仓,2:全仓,3:全仓,逐仓都支持 |
| baseCoin | string | 标的货币 如 BTC |
| quoteCoin | string | 标价货币 如 USDT |
| settleCoin | string | 结算货币 如 USDT|
| contractSize | decimal | 合约面值 |
| minLeverage | int | 杠杆倍数下限 |
| maxLeverage | int | 杠杆倍数上限 |
| priceScale | int | 价格精度 |
| volScale | int | 数量精度 |
| amountScale | int | 金额精度 |
| priceUnit | int | 价格的最小步进单位 |
| volUnit | int | 数量的最小步进单位 |
| minVol | decimal | 订单张数下限|
| maxVol | decimal | 订单张数上限 |
| bidLimitPriceRate | decimal | 卖单价格限制比率 |
| askLimitPriceRate | decimal | 买单价格限制比率 |
| takerFeeRate | decimal | 买单费率 |
| makerFeeRate | decimal | 卖单费率 |
| maintenanceMarginRate | decimal | 维持保证金率 |
| initialMarginRate | decimal | 初始保证金率 |
| riskBaseVol | decimal | 基本张数 |
| riskIncrVol | decimal | 递增张数 |
| riskIncrMmr | decimal | 维持保证金率递增量 |
| riskIncrImr | decimal | 初始保证金率递增量 |
| riskLevelLimit | int | 风险限额档位数 |
| priceCoefficientVariation | decimal | 合理价格偏离指数价格系数 |
| indexOrigin | List<String> | 指数来源 |
| state | int | 状态,0:启用,1:交割,2:交割完成,3:下线,4: 暂停|
***
+ ### 获取可划转币种
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/contract/support_currencies**
- ##### 请求参数: 无
- ##### 响应参数 :
示例:
```json
{
"success": true,
"data":["USDT","BTC","ETH"]
}
```
***
+ ### 获取合约深度信息
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/contract/depth/{symbol}**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| asks | List<Numeric[]> |卖方深度 |
| bids | List<Numeric[]> | 买方深度 |
| version | long | 版本号 |
备注: [411.8, 10, 1] 411.8为价格,10为此价格的合约张数,1为订单数量
返回示例:
```json
{
"asks":[
[
3968.5,
121
],
[
3968.6,
160,
4
]
],
"bids":[
[
3968.4,
179,
4
],
[
3968,
914,
3
]
],
"version":1
}
```
***
+ ### 获取合约最近N条深度信息快照
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/contract/depth_commits/{symbol}/{limit}**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名 |
| limit | int | true | 条数 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| asks | List<Numeric[]> |卖方深度 |
| bids | List<Numeric[]> | 买方深度 |
| version | long | 版本号 |
***
+ ### 获取合约指数价格
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/contract/index_price/{symbol}**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| symbol | string | 交易对 |
| indexPrice | decimal | 指数价格 |
| timestamp | long | 系统时间戳 |
***
+ ### 获取合约合理价格
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/contract/fair_price/{symbol}**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| symbol | string| 合约名 |
| fairPrice | decimal | 合理价格 |
| timestamp | long | 系统时间戳 |
***
+ ### 获取合约资金费率
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/contract/funding_rate/{symbol}**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| symbol | string | 合约名 |
| fundingRate | decimal | 资金费率 |
| maxFundingRate | decimal | 资金费率上限 |
| minFundingRate | decimal | 资金费率下限 |
| collectCycle | int | 收取周期 |
| nextSettleTime | long | 下次收取时间 |
| timestamp | long | 系统时间戳 |
***
+ ### 获取k线数据
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/contract/kline/{symbol}**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名 |
| interval | string | true | 间隔: Min1、Min5、Min15、Min30、Min60、Hour4、Hour8、Day1、Week1、Month1 |
| start | long | true | 开始时间戳 |
| end | long | true | 结束时间戳 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| open | double[] | 开盘价 |
| close | double[] | 收盘价 |
| high | double[] | 最高价 |
| low | double[] | 最低价 |
| vol | double[] | 成交量 |
| time | long[] | 时间窗口 |
***
+ ### 获取指数价格k线数据
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/contract/kline/index_price/{symbol}**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名 |
| interval | string | true | 间隔: Min1、Min5、Min15、Min30、Min60、Hour4、Hour8、Day1、Week1、Month1 |
| start | long | true | 开始时间戳 |
| end | long | true | 结束时间戳 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| open | double[] | 开盘价 |
| close | double[] | 收盘价 |
| high | double[] | 最高价 |
| low | double[] | 最低价 |
| vol | double[] | 成交量 |
| time | long[] | 时间窗口 |
***
+ ### 获取合理价格k线数据
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/contract/kline/fair_price/{symbol}**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名 |
| interval | string | true | 间隔: Min1、Min5、Min15、Min30、Min60、Hour4、Hour8、Day1、Week1、Month1 |
| start | long | true | 开始时间戳 |
| end | long | true | 结束时间戳 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| open | double[] | 开盘价 |
| close | double[] | 收盘价 |
| high | double[] | 最高价 |
| low | double[] | 最低价 |
| vol | double[] | 成交量 |
| time | long[] | 时间窗口 |
***
+ ### 获取成交数据
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/contract/deals/{symbol}**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名 |
| limit | int | false | 结果集数量,最大为100,不填默认返回100条 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| p | decimal | 成交价 |
| v | decimal | 数量 |
| T | int | 成交方向,1:买,2:卖 |
| O | int | 是否是开仓,1:是,2:否,当O为1的时候, vol是新增的持仓量 |
| M | int | 是否为自成交,1:是,2:否 |
| t | long | 成交时间|
***
+ ### 获取合约ticker数据
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/contract/ticker**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | false | 合约名 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| symbol | string | 合约名 |
| lastPrice | decimal | 最新价 |
| bid1 | decimal | 买一价 |
| ask1 | decimal | 卖一价 |
| volume24 | decimal | 24小时成交量,按张数统计 |
| holdVol| decimal | 总持仓量 |
| lower24Price | decimal | 24小时最低价 |
| high24Price | decimal | 24小时内最高价 |
| riseFallRate | decimal | 涨跌幅 |
| riseFallValue | decimal | 涨跌额 |
| indexPrice | decimal | 指数价格 |
| fairPrice | decimal | 合理价 |
| fundingRate | decimal | 资金费率 |
| timestamp | long | 成交时间 |
***
+ ### 获取合约风险基金余额
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/contract/risk_reverse/{symbol}**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| symbol | string | 合约名 |
| currency | string | 结算货币 |
| available | decimal | 余额 |
***
+ ### 获取合约风险基金余额历史
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/contract/risk_reverse/history**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名 |
| page_num | int | true | 当前页数,默认为1 |
| page_size | int | true | 每页大小,默认20,最大100 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| pageSize | int | 页面大小 |
| totalCount | int | 总条数 |
| totalPage | int | 总页数 |
| currentPage | int | 当前页 |
| resultList | list | 数据结果集 |
| symbol | string | 合约名 |
| currency | string | 结算货币 |
| available | decimal | 余额 |
| snapshotTime | long | 快照时间 |
***
+ ### 获取合约资金费率历史
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/contract/funding_rate/history**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名 |
| page_num | int | true | 当前页数,默认为1 |
| page_size | int | true | 每页大小,默认20,最大100 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| pageSize | int | 页面大小 |
| totalCount | int | 总条数 |
| totalPage | int | 总页数 |
| currentPage | int | 当前页 |
| resultList | list | 数据结果集 |
| symbol | string | 合约名 |
| fundingRate | decimal | 资金费率 |
| settleTime | long | 结算时间 |
***
## 私有接口
***
获取用户所有资产信息:GET api/v1/private/account/assets
获取用户资产信息:GET api/v1/private/account/asset/{currency}
获取用户资产划转记录:GET api/v1/private/account/transfer_record
获取用户历史持仓:GET api/v1/private/position/history_positions
获取用户当前持仓:GET api/v1/private/position/open_positions
获取资金费用明细:GET api/v1/private/position/funding_records
获取用户当前活跃订单:GET api/v1/private/order/open_orders/{symbol}
获取用户所有历史订单:GET api/v1/private/order/history_orders
通过外部订单号获取单个订单:GET api/v1/private/order/external/{symbol}/{external_oid}
通过订单号获取单个订单:GET api/v1/private/order/get/{order_id}
获取订单成交明细:GET api/v1/private/order/deal_details/{order_id}
获取风险限额: GET api/v1/private/account/risk_limit
修改持仓保证金:POST api/v1/private/position/change_margin
修改持仓杠杆倍数:POST api/v1/private/position/change_leverage
下单:POST api/v1/private/order/submit
批量下单:POST api/v1/private/order/submit_batch
取消订单:POST api/v1/private/order/cancel
取消所有订单:POST api/v1/private/order/cancel_all
修改风险等级: POST api/v1/private/account/change_risk_level
***
+ ### 获取用户所有资产信息
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/private/account/assets**
- ##### 请求参数: 无
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| currency | string | 币种 |
| positionMargin | decimal | 仓位保证金 |
| frozenBalance | decimal | 冻结余额 |
| availableBalance | decimal | 当前可用余额 |
| cashBalance | decimal | 可提现余额 |
***
+ ### 获取用户单个币种资产信息
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/private/account/asset/{currency}**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| currency | string | true | 币种 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| currency | string | 币种 |
| positionMargin | decimal | 仓位保证金 |
| frozenBalance | decimal | 冻结余额 |
| availableBalance | decimal | 当前可用余额 |
| cashBalance | decimal | 可提现余额 |
***
+ ### 获取用户资产划转记录
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/private/account/transfer_record**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| currency | string | false | 币种 |
| state | string | false | 状态:WAIT 、SUCCESS 、FAILED |
| type | string | false | 类型:IN 、OUT |
| page_num | int | true | 当前页数,默认为1 |
| page_size | int | true | 每页大小,默认20,最大100 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| pageSize | int | 页面大小 |
| totalCount | int | 总条数 |
| totalPage | int | 总页数 |
| currentPage | int | 当前页 |
| resultList | list | 数据结果集 |
| id | long | id |
| txid | string | 流水号 |
| currency | string | 币种 |
| amount | decimal | 转账金额 |
| type | string | 类型:IN 、OUT |
| state | string | 状态:WAIT 、SUCCESS 、FAILED |
| createTime | long | 创建时间 |
| updateTime | long | 修改时间 |
***
+ ### 获取用户当前持仓
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/private/position/open_positions**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | false | 合约名|
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| positionId | long | 持仓id |
| symbol | string | 合约名 |
| holdVol | decimal | 持仓数量 |
| positionType | int | 仓位类型, 1多 2空 |
| openType | int | 开仓类型, 1逐仓 2全仓 |
| state | int | 仓位状态,1持仓中2系统代持3已平仓 |
| frozenVol | decimal | 冻结量 |
| closeVol | decimal | 平仓量 |
| holdAvgPrice | decimal | 持仓均价 |
| closeAvgPrice | decimal | 平仓均价 |
| openAvgPrice | decimal | 开仓均价 |
| liquidatePrice | decimal | 逐仓时的爆仓价 |
| oim | decimal | 原始初始保证金 |
| adlLevel | int | adl减仓等级,取值为 1-5,为空时需等待刷新 |
| im | decimal | 初始保证金, 逐仓时可以加减此项以调节爆仓价 |
| holdFee | decimal | 资金费, 正数表示得到,负数表示支出 |
| realised | decimal | 已实现盈亏 |
| createTime | date | 创建时间 |
| updateTime | date | 修改时间 |
***
+ ### 获取用户历史持仓信息
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/private/position/history_positions**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | false | 合约名|
| type | int | false | 仓位类型, 1多 2空|
| page_num | int | true | 当前页数,默认为1 |
| page_size | int | true | 每页大小,默认20,最大100 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| pageSize | int | 页面大小 |
| totalCount | int | 总条数 |
| totalPage | int | 总页数 |
| currentPage | int | 当前页 |
| resultList | list | 数据结果集 |
| positionId | long | 持仓id |
| symbol | string | 合约名 |
| holdVol | decimal | 持仓数量 |
| positionType | int | 仓位类型, 1多 2空 |
| openType | int | 开仓类型, 1逐仓 2全仓 |
| state | int | 仓位状态,1持仓中2系统代持3已平仓 |
| frozenVol | decimal | 冻结量 |
| closeVol | decimal | 平仓量 |
| holdAvgPrice | decimal | 持仓均价 |
| closeAvgPrice | decimal | 平仓均价 |
| openAvgPrice | decimal | 开仓均价 |
| liquidatePrice | decimal | 逐仓时的爆仓价 |
| oim | decimal | 原始初始保证金 |
| im | decimal | 初始保证金, 逐仓时可以加减此项以调节爆仓价 |
| holdFee | decimal | 资金费, 正数表示得到,负数表示支出 |
| realised | decimal | 已实现盈亏 |
| createTime | date | 创建时间 |
| updateTime | date | 修改时间 |
***
+ ### 获取用户资金费用明细
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/private/position/funding_records**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | false | 合约名|
| position_id | int | false | 仓位id|
| page_num | int | true | 当前页数,默认为1 |
| page_size | int | true | 每页大小,默认20,最大100 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| pageSize | int | 页面大小 |
| totalCount | int | 总条数 |
| totalPage | int | 总页数 |
| currentPage | int | 当前页 |
| resultList | list | 数据结果集 |
| id | long | id |
| positionId | long | 持仓id |
| positionType | string | LONG:多仓,SHORT:空仓 |
| positionValue | decimal | 仓位价值 |
| funding | decimal | 费用 |
| rate | decimal | 资金费率 |
| settleTime | date | 清算时间 |
***
+ ### 根据外部id查询订单
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/private/order/externa/{symbol}//{external_oid}**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名|
| external_oid | string | true | 外部订单号|
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| orderId | long | 页面大小 |
| symbol | string | 合约名 |
| positionId | long | 持仓id |
| price | decimal | 委托价格 |
| vol | decimal | 委托数量 |
| leverage | long | 杠杆倍数 |
| side | int | 订单方向 1开多,2平空,3开空,4平多 |
| category | int | 订单类别:1限价委托,2强平代管委托,3代管平仓委托,4ADL减仓 |
| dealAvgPrice | decimal | 成交均价 |
| dealVol | decimal | 成交数量 |
| orderMargin | decimal | 委托保证金 |
| takerFee | decimal | 买单手续费 |
| makerFee | decimal | 卖单手续费 |
| profit | decimal | 平仓盈亏 |
| feeCurrency | string | 收费币种 |
| openType | int | 开仓类型,1逐仓,2全仓 |
| state | int | 订单状态,1:待报,2未完成,3已完成,4已撤销,5无效 |
| externalOid | string | 外部订单号 |
| createTime | date | 创建时间 |
| updateTime | date | 修改时间 |
***
+ ### 根据订单id查询订单
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/private/order/get/{order_id}**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| order_id | string | true | 订单号|
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| orderId | long | 页面大小 |
| symbol | string | 合约名 |
| positionId | long | 持仓id |
| price | decimal | 委托价格 |
| vol | decimal | 委托数量 |
| leverage | long | 杠杆倍数 |
| side | int | 订单方向 1开多,2平空,3开空,4平多 |
| category | int | 订单类别:1限价委托,2强平代管委托,3代管平仓委托,4ADL减仓 |
| dealAvgPrice | decimal | 成交均价 |
| dealVol | decimal | 成交数量 |
| orderMargin | decimal | 委托保证金 |
| takerFee | decimal | 买单手续费 |
| makerFee | decimal | 卖单手续费 |
| profit | decimal | 平仓盈亏 |
| feeCurrency | string | 收费币种 |
| openType | int | 开仓类型,1逐仓,2全仓 |
| state | int | 订单状态,1:待报,2未完成,3已完成,4已撤销,5无效 |
| externalOid | string | 外部订单号 |
| createTime | date | 创建时间 |
| updateTime | date | 修改时间 |
***
+ ### 获取用户当前未结束订单
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/private/order/open_orders/{symbol}**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | false | 合约名,不传返回所有|
| page_num | int | true | 当前页数,默认为1 |
| page_size | int | true | 每页大小,默认20,最大100 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| pageSize | int | 页面大小 |
| totalCount | int | 总条数 |
| totalPage | int | 总页数 |
| currentPage | int | 当前页 |
| resultList | list | 数据结果集 |
| orderId | long | 页面大小 |
| symbol | string | 合约名 |
| positionId | long | 持仓id |
| price | decimal | 委托价格 |
| vol | decimal | 委托数量 |
| leverage | long | 杠杆倍数 |
| side | int | 订单方向 1开多,2平空,3开空,4平多 |
| category | int | 订单类别:1限价委托,2强平代管委托,4ADL减仓 |
| orderType | int | 1:限价单,2:Post Only只做Maker,3:立即成交或立即取消,4:全部成交或者全部取消| |
| dealAvgPrice | decimal | 成交均价 |
| dealVol | decimal | 成交数量 |
| orderMargin | decimal | 委托保证金 |
| usedMargin | decimal | 已经使用的保证金 |
| takerFee | decimal | 买单手续费 |
| makerFee | decimal | 卖单手续费 |
| profit | decimal | 平仓盈亏 |
| feeCurrency | string | 收费币种 |
| openType | int | 开仓类型,1逐仓,2全仓 |
| state | int | 订单状态,1:待报,2未完成,3已完成,4已撤销,5无效 |
| errorCode | int | 错误code,0:正常,1:参数错误,2:账户余额不足,3:仓位不存在,4:仓位可用持仓不足,5:多仓时, 委托价小于了强平价,空仓时, 委托价大于了强平价,6:开多时, 强平价大于了合理价,开空时, 强平价小于了合理价 ,7:超过风险限额限制|
| externalOid | string | 外部订单号 |
| createTime | date | 创建时间 |
| updateTime | date | 修改时间 |
***
+ ### 获取用户所有历史订单
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/private/order/history_orders**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | false | 合约名|
| states | string | false | 订单状态,1:待报,2未完成,3已完成,4已撤销,5无效;多个用 ',' 隔开|
| category | int | false | 订单类别,1:限价委托,2:强平代管委托,4:ADL减仓|
| page_num | int | true | 当前页数,默认为1 |
| page_size | int | true | 每页大小,默认20,最大100 |
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| pageSize | int | 页面大小 |
| totalCount | int | 总条数 |
| totalPage | int | 总页数 |
| currentPage | int | 当前页 |
| resultList | list | 数据结果集 |
| orderId | long | 页面大小 |
| symbol | string | 合约名 |
| positionId | long | 持仓id |
| price | decimal | 委托价格 |
| vol | decimal | 委托数量 |
| leverage | long | 杠杆倍数 |
| side | int | 订单方向 1开多,2平空,3开空,4平多 |
| category | int | 订单类别:1限价委托,2强平代管委托,4ADL减仓 |
| orderType | int | 1:限价单,2:Post Only只做Maker,3:立即成交或立即取消,4:全部成交或者全部取消| |
| dealAvgPrice | decimal | 成交均价 |
| dealVol | decimal | 成交数量 |
| orderMargin | decimal | 委托保证金 |
| usedMargin | decimal | 已经使用的保证金 |
| takerFee | decimal | 买单手续费 |
| makerFee | decimal | 卖单手续费 |
| profit | decimal | 平仓盈亏 |
| feeCurrency | string | 收费币种 |
| openType | int | 开仓类型,1逐仓,2全仓 |
| state | int | 订单状态,1:待报,2未完成,3已完成,4已撤销,5无效 |
| errorCode | int | 错误code,0:正常,1:参数错误,2:账户余额不足,3:仓位不存在,4:仓位可用持仓不足,5:多仓时, 委托价小于了强平价,空仓时, 委托价大于了强平价,6:开多时, 强平价大于了合理价,开空时, 强平价小于了合理价 |
| externalOid | string | 外部订单号 |
| createTime | date | 创建时间 |
| updateTime | date | 修改时间 |
***
+ ### 获取订单成交明细
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/private/order/deal_details/{order_id}**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| order_id | long | true | 订单id|
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| symbol | string | 合约名 |
| side | int | 订单方向 1开多,2平空,3开空,4平多 |
| vol | decimal | 成交数量|
| price | decimal | 成交价格 |
| fee | decimal | 手续费 |
| feeCurrency | string | 收费币种 |
| timestamp | long | 修改时间 |
***
+ ### 获取风险限额
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **GET api/v1/private/account/risk_limit**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | false | 合约名,不传返回所有|
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| symbol | string | 合约名 |
| positionType | int | 持仓类型 1:多仓,2:空仓|
| level | int | 当前风险等级 |
| maxVol | decimal | 最大可持仓数量 |
| maxLeverage | int | 最大杠杆倍数 |
| mmr | decimal | 维持保证金率 |
| imr | decimal | 初始保证金率 |
***
+ ### 增加或减少仓位保证金
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **POST api/v1/private/position/change_margin**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| positionId | long | true | 仓位id|
| amount | decimal | true | 金额|
| type | string | true | 类型,ADD:增加,SUB:减少|
- ##### 响应参数: 公共参数,success: true成功,false失败
***
+ ### 修改杠杆倍数
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **POST api/v1/private/position/change_leverage**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| positionId | long | true | 仓位id|
| leverage | int | true | 杠杆倍数|
- ##### 响应参数: 公共参数,success: true成功,false失败
***
+ ### 下单
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **POST api/v1/private/order/submit**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名|
| price | decimal | true | 价格|
| vol | decimal | true | 数量|
| leverage | int | false | 杠杆倍数,开仓的时候杠杆倍数必须传入|
| side | int | true | 订单方向 1开多,2平空,3开空,4平多|
| type | int | true | 订单类型,1:限价单,2:Post Only只做Maker,3:立即成交或立即取消,4:全部成交或者全部取消,5:市价单|
| openType | int | true | 开仓类型,1:逐仓,2:全仓|
| externalOid | string | false | 外部订单号|
- ##### 响应参数: 成功时,success =true,data值为订单id,success =false,失败data=null
***
+ ### 批量下单
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **POST api/v1/private/order/submit_batch**
- ##### 请求参数(最大50条):
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名|
| price | decimal | true | 价格|
| vol | decimal | true | 数量|
| leverage | int | false | 杠杆倍数,开仓的时候杠杆倍数必须传入|
| side | int | true | 订单方向 1开多,2平空,3开空,4平多|
| type | int | true | 订单类型,1:限价单,2:Post Only只做Maker,3:立即成交或立即取消,4:全部成交或者全部取消,5:市价单|
| openType | int | true | 开仓类型,1:逐仓,2:全仓|
| externalOid | string | false | 外部订单号,如果已存在,返回已存在的订单id|
参数示例:
```json
[{
"symbol": "BTC_USD",
"price": 8800,
"vol": 100,
"leverage": 20,
"side": 1,
"type": 1,
"openType": 1,
"externalOid": "order1"
},
{
"symbol": "BTC_USD",
"price": 500,
"vol": 100,
"leverage": 50,
"side": 3,
"type": 1,
"openType": 1,
"externalOid": "order2"
}]
```
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| externalOid | string | 外部订单号 |
| orderId | long | 订单id,失败时为null |
| errorMsg | string | 错误信息,失败时不为空|
| errorCode | int | 错误code,默认为0|
***
+ ### 取消订单
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **POST api/v1/private/order/cancel**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| 无 | List<Long> | true | 订单id列表,最大50条|
参数示例:[1,2,3]
- ##### 响应参数: - ##### 响应参数: 公共参数,success: true成功,false失败
***
+ ### 取消某合约下所有订单
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **POST api/v1/private/order/cancel_all**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | false| 合约名,传入symbol只取消该合约下的订单,不传取消所有合约下的订单|
- ##### 响应参数: - ##### 响应参数: 公共参数,success: true成功,false失败
***
+ ### 修改风险等级
+ ##### 限速规则: 20次/2秒
+ ##### method:
+ **POST api/v1/private/account/change_risk_level**
- ##### 请求参数:
| 参数名 | 类型 | 是否必填 | 说明 |
| ------------ | ------------ | ------------ | ------------ |
| symbol | string | true | 合约名|
| level | int | true | 等级|
| positionType | int | true | 1:多仓,2:空仓|
- ##### 响应参数: - ##### 响应参数: 公共参数,success: true成功,false失败
***
- #### 错误码:
| code | 描述 |
| ------------ | ------------ |
| 0 | 操作成功 |
| 9999 | 公共异常 |
| 500 | 内部错误 |
| 501 | 系统繁忙 |
| 401 | 未授权 |
| 402 | api_key过期 |
| 406 | 访问ip不在白名单 |
| 506 | 未知的请求来源 |
| 510 | 请求过于频繁 |
| 511 | 接口禁止访问 |
| 513 | 请求无效(针对open api 请求时间>服务器时间2秒或者<服务器时间10秒以上) |
| 600 | 参数错误 |
| 601 | 数据解析错误 |
| 602 | 验签失败 |
| 603 | 重复请求 |
| 1000 | 账户不存在 |
| 1001 | 合约不存在 |
| 1002 | 合约未启用 |
| 1003 | 风险限额等级错误 |
| 1004 | 金额错误 |
| 2001 | 订单方向错误 |
| 2002 | 开仓类型错误 |
| 2003 | 买单价格过高 |
| 2005 | 余额不足 |
| 2006 | 杠杆倍数错误 |
| 2007 | 订单价格错误 |
| 2008 | 可平数量不足 |
| 2009 | 仓位不存在或已平仓 |
| 2011 | 订单数量错误 |
| 2013 | 取消订单数量超过最大限制 |
| 2014 | 批量下单数量超限 |
| 2015 | 价格或者数量精度错误 |
| 2016 | 计划委托超过最大委托数量 |
| 2018 | 超过最大可减保证金 |
| 2019 | 存在开仓活跃委托`` |
| 2021 | 下单杠杆倍数和已有仓位杠杆倍数不一致 |
| 2022 | 持仓类型错误 |
| 2023 | 存在大于新档位最大杠杆倍数的持仓 |
| 2024 | 存在大于新档位最大杠杆倍数的订单 |
| 2025 | 当前持仓数量大于新档位最大允许数量 |
| 2026 | 全仓不支持修改杠杆 |
| 2027 | 同一方向全仓和逐仓只能存在一个 |
| 3001 | 计划委托价格类型错误 |
| 3002 | 计划委托触发类型错误 |
| 3003 | 执行周期错误 |
| 3004 | 触发价格错误 |
| 4001 | 不支持的币种 |
***
# WEBSOCKET模块
## 基本信息:
原生ws连接地址: wss://contract.mxc.ai/ws 、 wss://contract.mxc.com/ws 、 wss://contract.mxc.io/ws
## 数据交互命令详解:
订阅/取消订阅数据命令列表(除个人相关命令列表之外,其余都不需要做ws认证),服务端返回:
{"channel":"pong","data":1587453241453},1分钟以内未收到客户端ping,将断开该客户端连接,建议10~20秒发送一次ping
### 公共模块:
***
####tickers:
+ ##### 订阅:
```json
{"method":"sub.tickers","param":{}}
```
如需返回明文(后面订阅一样):
```json
{"method":"sub.tickers","param":{},"gzip": false}
```
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| symbol | string | 合约名 |
| lastPrice | decimal | 最新价 |
| volume24 | decimal | 24小时成交量,按张数统计 |
| riseFallRate | decimal | 涨跌幅 |
| fairPrice | decimal | 合理价 |
示例:
```json
{"channel":"push.tickers",
"data":[
{"fairPrice":183.01,"lastPrice":183,"riseFallRate":-0.0708,"symbol":"BSV_USDT","volume24":200},
{"fairPrice":220.22,"lastPrice":220.4,"riseFallRate":-0.0686,"symbol":"BCH_USDT","volume24":200}
]}
```
+ ##### 取消订阅:
```json
{"method":"unsub.tickers","param":{}}
```
***
#### 单个ticker:
+ ##### 订阅:
```json
{"method":"sub.ticker","param":{"symbol":"BTC_USDT"}}
```
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| symbol | string | 合约名 |
| lastPrice | decimal | 最新价 |
| bid1 | decimal | 买一价 |
| ask1 | decimal | 卖一价 |
| volume24 | decimal | 24小时成交量,按张数统计 |
| holdVol| decimal | 总持仓量 |
| lower24Price | decimal | 24小时最低价 |
| high24Price | decimal | 24小时内最高价 |
| riseFallRate | decimal | 涨跌幅 |
| riseFallValue | decimal | 涨跌额 |
| indexPrice | decimal | 指数价格 |
| fairPrice | decimal | 合理价 |
| fundingRate | decimal | 资金费率 |
| timestamp | long | 成交时间 |
示例:
```json
{"channel":"push.ticker",
"data":{"ask1":6866.5,"bid1":6865,"contractId":1,"fairPrice":6867.4,
"fundingRate":0.0008,"high24Price":7223.5,"indexPrice":6861.6,
"lastPrice":6865.5,"lower24Price":6756,"maxBidPrice":7073.42,
"minAskPrice":6661.37,"riseFallRate":-0.0424,
"riseFallValue":-304.5,"symbol":"BTC_USDT",
"timestamp":1587442022003,"holdVol":2284742,"volume24":164586129},
"symbol":"BTC_USDT"
}
```
+ ##### 取消订阅:
```json
{"method":"unsub.ticker","param":{"symbol":"BTC_USDT"}}
```
***
#### 成交:
+ ##### 订阅:
```json
{"method":"sub.deal","param":{"symbol":"BTC_USDT"}}
```
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| p | decimal | 成交价 |
| v | decimal | 数量 |
| T | int | 成交方向,1:买,2:卖 |
| O | int | 是否是开仓,1:是,2:否,当O为1的时候, vol是新增的持仓量 |
| M | int | 是否为自成交,1:是,2:否 |
| t | long | 成交时间|
示例:
```json
{"channel":"push.deal",
"data":{"M":1,"O":1,"T":1,"p":6866.5,"t":1587442049632,"v":2096},
"symbol":"BTC_USDT"
}
```
+ ##### 取消订阅:
```json
{"method":"unsub.deal","param":{"symbol":"BTC_USDT"}}
```
***
#### 深度:
+ ##### 订阅:
```json
{"method":"sub.depth","param":{"symbol":"BTC_USDT"}}
```
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| asks | List<Numeric[]> |卖方深度 |
| bids | List<Numeric[]> | 买方深度 |
| version | long | 版本号 |
备注: [411.8, 10, 1] 411.8为价格,10为此价格的合约张数,1为订单数量
示例:
```json
{"channel":"push.depth",
"data":{"asks":[[6859.5,3251,1]],"bids":[],"version":96801927},
"symbol":"BTC_USDT"
}
```
+ ##### 取消订阅:
```json
{"method":"unsub.depth","param":{"symbol":"BTC_USDT"}}
```
***
#### K线:
+ ##### 订阅:
```json
{"method":"sub.kline","param":{"symbol":"BTC_USDT","interval":"Min60"}}
```
interval可选参数: Min1、Min5、Min15、Min30、Min60、Hour4、Hour8、Day1、Week1、Month1
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| symbol | string | 合约名 |
| a | decimal | 总成交金额 |
| c | decimal | 收盘价 |
| interval | string | 间隔: Min1、Min5、Min15、Min30、Min60、Hour4、Hour8、Day1、Week1、Month1 |
| l | decimal | 最低价 |
| o | decimal | 开盘价 |
| q | decimal | 总成交量 |
| h | decimal | 最高价 |
| t | long | 交易时间,单位:秒(s),为窗口的开始时间(windowStart) |
示例:
```json
{"channel":"push.kline",
"data":{"a":233.740269343644737245,"c":6885,"h":6910.5,
"interval":"Min60","l":6885,"o":6894.5,
"q":1611754,"symbol":"BTC_USDT","t":1587448800},
"symbol":"BTC_USDT"
}
```
+ ##### 取消订阅:
```json
{"method":"unsub.kline","param":{"symbol":"BTC_USDT"}}
```
***
#### 资金费率:
+ ##### 订阅:
```json
{"method":"sub.funding.rate","param":{"symbol":"BTC_USDT"}}
```
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| symbol | string | 合约名 |
| fundingRate | decimal | 资金费率 |
| nextSettleTime | long | 下一次结算时间 |
示例:
```json
{"channel":"push.funding.rate",
"data":{"rate":0.001,"symbol":"BTC_USDT"},
"symbol":"BTC_USDT"
}
```
+ ##### 取消订阅:
```json
{"method":"unsub.funding.rate","param":{"symbol":"BTC_USDT"}}
```
***
#### 指数价格:
+ ##### 订阅:
正向及方向合约都使用同一个symbol,例如BTC_USD反向合约,订阅指数价格时,使用BTC_USDT
```json
{"method":"sub.index.price","param":{"symbol":"BTC_USDT"}}
```
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| symbol | string | 合约名 |
| price | decimal | 价格 |
示例:
```json
{"channel":"push.index.price",
"data":{"price":0.001,"symbol":"BTC_USDT"},
"symbol":"BTC_USDT"
}
```
+ ##### 取消订阅:
```json
{"method":"unsub.index.price","param":{"symbol":"BTC_USDT"}}
```
***
#### 合理价格:
+ ##### 订阅:
```json
{"method":"sub.fair.price","param":{"symbol":"BTC_USDT"}}
```
- ##### 响应参数:
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| symbol | string | 合约名 |
| price | decimal | 价格 |
示例:
```json
{"channel":"push.fair.price",
"data":{"price":0.001,"symbol":"BTC_USDT"},
"symbol":"BTC_USDT"
}
```
+ ##### 取消订阅:
```json
{"method":"unsub.fair.price","param":{"symbol":"BTC_USDT"}}
```
***
### 私有模块:
- #### 登录认证
```json
{
"method":"login",
"param":{
"apiKey":"apiKey", // openapi需要传此参数,参数构造方式参照openapi文档
"reqTime":"reqTime", // openapi需要传此参数,参数构造方式参照openapi文档
"signature":"signature" // openapi需要传此参数,参数构造方式参照openapi文档
}
}
```
#### 响应参数: 成功: 无,失败:返回对应错误信息,channel = rs.error
- ##### 订单(channel = push.personal.order)
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| orderId | long | 页面大小 |
| symbol | string | 合约名 |
| positionId | long | 持仓id |
| price | decimal | 委托价格 |
| vol | decimal | 委托数量 |
| leverage | long | 杠杆倍数 |
| side | int | 订单方向 1开多,2平空,3开空,4平多 |
| category | int | 订单类别:1限价委托,2强平代管委托,4ADL减仓 |
| orderType | int | 1:限价单,2:Post Only只做Maker,3:立即成交或立即取消,4:全部成交或者全部取消| |
| dealAvgPrice | decimal | 成交均价 |
| dealVol | decimal | 成交数量 |
| orderMargin | decimal | 委托保证金 |
| usedMargin | decimal | 已经使用的保证金 |
| takerFee | decimal | 买单手续费 |
| makerFee | decimal | 卖单手续费 |
| profit | decimal | 平仓盈亏 |
| feeCurrency | string | 收费币种 |
| openType | int | 开仓类型,1逐仓,2全仓 |
| state | int | 订单状态,1:待报,2未完成,3已完Fee成,4已撤销,5无效 |
| errorCode | int | 错误code,0:正常,1:参数错误,2:账户余额不足,3:仓位不存在,4:仓位可用持仓不足,5:多仓时, 委托价小于了强平价,空仓时, 委托价大于了强平价,6:开多时, 强平价大于了合理价,开空时, 强平价小于了合理价 ,7:超过风险限额限制|
| externalOid | string | 外部订单号 |
| createTime | date | 创建时间 |
| updateTime | date | 修改时间 |
- ##### 资产(channel = push.personal.asset)
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| currency | string | 币种 |
| positionMargin | decimal | 仓位保证金 |
| frozenBalance | decimal | 冻结余额 |
| availableBalance | decimal | 当前可用余额 |
| cashBalance | decimal | 可提现余额 |
- ##### 仓位(channel = push.personal.position)
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| positionId | long | 持仓id |
| symbol | string | 合约名 |
| holdVol | decimal | 持仓数量 |
| positionType | int | 仓位类型, 1多 2空 |
| openType | int | 开仓类型, 1逐仓 2全仓 |
| state | int | 仓位状态,1持仓中2系统代持3已平仓 |
| frozenVol | decimal | 冻结量 |
| closeVol | decimal | 平仓量 |
| holdAvgPrice | decimal | 持仓均价 |
| closeAvgPrice | decimal | 平仓均价 |
| openAvgPrice | decimal | 开仓均价 |
| liquidatePrice | decimal | 逐仓时的爆仓价 |
| oim | decimal | 原始初始保证金 |
| adlLevel | int | adl减仓等级,取值为 1-5,为空时需等待刷新 |
| im | decimal | 初始保证金, 逐仓时可以加减此项以调节爆仓价 |
| holdFee | decimal | 资金费, 正数表示得到,负数表示支出 |
| realised | decimal | 已实现盈亏 |
| createTime | date | 创建时间 |
| updateTime | date | 修改时间 |
- ##### 风险限额(channel = push.personal.risk.limit)
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| symbol | string | 合约名 |
| positionType | int | 持仓类型 1:多仓,2:空仓|
| level | int | 当前风险等级 |
| maxVol | decimal | 最大可持仓数量 |
| maxLeverage | int | 最大杠杆倍数 |
| mmr | decimal | 维持保证金率 |
| imr | decimal | 初始保证金率 |
- ##### adl自动减仓等级(channel = push.personal.adl.level)
| 参数名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| adlLevel| int | 当前adl等级 :1-5|
| positionId | long | 仓位id |
- ##### 如何维护深度信息
#### 如何维护深度信息:
1.通过接口 https://www.mxc.com/api/v1/contract/depth/BTC_USDT获取全量深度信息,保存当前version
2.订阅ws深度信息,收到更新后,如果收到的数据version>当前version,同一个价位,后收到的更新覆盖前面的。
3.通过接口 https://www.mxc.com/api/v1/contract/depth/depth_commits/BTC_USDT/1000获取最新1000条深度快照
4.将目前缓存的深度信息中同一价格,version<步骤3获取到的快照中的version的数据丢弃
5.将深度快照中的内容更新至本地缓存,并从ws接收到的event开始继续更新
5.每一个新event的version应该恰好等于上一个event的version+1,否则可能出现了丢包,如出现丢包或者获取到的
event的version不连续,请从步骤3重新进行初始化。
6.每一个event中的挂单量代表这个价格目前的挂单量绝对值,而不是相对变化。
7.如果某个价格对应的挂单量为0,表示该价位的挂单已经撤单或者被吃,应该移除这个价位。