WebSocket API
WebSocket是HTML5一种新的协议(Protocol)。它实现了客户端与服务器全双工通信,使得数据可以快速地双向传播。通过一次简单的握手就可以建立客户端和服务器连接,服务器根据业务规则可以主动推送信息给客户端。其优点如下:
- 客户端和服务器进行数据传输时,请求头信息比较小,大概2个字节。
- 客户端和服务器皆可以主动地发送数据给对方。
- 不需要多次创建TCP请求和销毁,节约宽带和服务器的资源。
原生ws连接地址
- wss://contract.mexc.com/edge
数据交互命令详解
发送ping消息
{
"method": "ping"
}
服务端返回
{
"channel": "pong",
"data": 1587453241453
}
订阅/取消订阅数据命令列表(除个人相关命令列表之外,其余都不需要做ws认证)
1分钟以内未收到客户端ping,将断开该客户端连接,建议10~20秒发送一次ping
订阅过滤
取消默认推送示例
{
"subscribe": false,
"method": "login",
"param": {
"apiKey": "mxU1TzSmRDW1o5AsE",
"signature": "8c957a757ea31672eca05cb652d26bab7f46a41364adb714dda5475264aff120",
"reqTime": "1611038237237"
}
}
只要资产
{
"method":"personal.filter",
"param":{
"filters":[
{
"filter":"asset"
}
]
}
}
只要ADL等级
{
"method":"personal.filter",
"param":{
"filters":[
{
"filter":"adl.level"
}
]
}
}
只要所有的成交单
{
"method":"personal.filter",
"param":{
"filters":[
{
"filter":"order.deal",
"rules":[]
}
]
}
}
或者
{
"method":"personal.filter",
"param":{
"filters":[
{
"filter":"order.deal"
}
]
}
}
只要单个合约的成交单
{
"method":"personal.filter",
"param":{
"filters":[
{
"filter":"order.deal",
"rules":[
"BTC_USDT"
]
}
]
}
}
混合使用
{
"method":"personal.filter",
"param":{
"filters":[
{
"filter":"order",
"rules":[
"BTC_USDT"
]
},
{
"filter":"order.deal",
"rules":[
"EOS_USDT",
"ETH_USDT",
"BTC_USDT"
]
},
{
"filter":"position",
"rules":[
"EOS_USDT",
"BTC_USDT"
]
},
{
"filter":"asset"
}
]
}
}
登录之后会推送所有私有数据:order订单、order.deal成交单、position持仓、plan.order计划委托单、stop.order止盈止损单、stop.planorder止盈止损计划委托单、risk.limit风险限额、adl.level ADL等级、asset资产
1、如果要取消默认推送,登录时新加参数: "subscribe":false,默认为true;
2、登录之后通过发送 personal.filter 事件来过滤自己需要的数据,如果想要恢复推送所有数据,可发送: {"method":"personal.filter"} 或者 {"method":"personal.filter","param":{"filters":[]}}
3、filter可用key:order、order.deal、position、plan.order、stop.order、stop.planorder、risk.limit、adl.level、asset 固定值,不可更改,若有错误会提示
其中asset和adl.level不支持过滤单个币种或者单个合约,其他均可以过滤单个合约
后面发送的filter事件会覆盖前面的
公共频道
Tickers
订阅
{
"method": "sub.tickers",
"param": {}
}
如需返回明文(后面订阅一样):
{
"method": "sub.tickers",
"param": {},
"gzip": false
}
取消订阅
{
"method": "unsub.tickers",
"param": {}
}
数据示例
{"channel":"push.tickers",
"data":[
{"fairPrice":183.01,
"lastPrice":183,
"riseFallRate":-0.0708,
"symbol":"BSV_USDT",
"volume24":200,
"maxBidPrice":7073.42,
"minAskPrice":6661.37},
{"fairPrice":220.22,
"lastPrice":220.4,
"riseFallRate":-0.0686,
"symbol":"BCH_USDT",
"volume24":200,
"maxBidPrice":7073.42,
"minAskPrice":6661.37}
]}
获取平台全部永续合约的最新成交价、买一价、卖一价和24交易量,无需用户登录,订阅后1秒发送一次。
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| symbol | string | 合约名 |
| timestamp | long | 成交时间 |
| lastPrice | decimal | 最新价 |
| volume24 | decimal | 24小时成交量,按张数统计 |
| amount24 | decimal | 24小时成交额,按金额统计 |
| riseFallRate | decimal | 涨跌幅 |
| fairPrice | decimal | 合理价 |
| indexPrice | decimal | 指数价 |
| maxBidPrice | decimal | 最大买入价格 |
| minAskPrice | decimal | 最低卖出价格 |
| lower24Price | decimal | 24小时最低价 |
| high24Price | decimal | 24小时最高价 |
获取单个ticker
订阅
{
"method":"sub.ticker",
"param":{
"symbol":"BTC_USDT"
}
}
取消订阅
{
"method":"unsub.ticker",
"param":{
"symbol":"BTC_USDT"
}
}
数据示例
{"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"
}
获取某个合约的最新成交价、买一价、卖一价和24交易量,无需用户登录,有成交数据就推送,订阅后1秒发送一次。
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| symbol | string | 合约名 |
| timestamp | long | 成交时间 |
| lastPrice | decimal | 最新价 |
| bid1 | decimal | 买一价 |
| ask1 | decimal | 卖一价 |
| holdVol | decimal | 总持仓量 |
| fundingRate | decimal | 资金费率 |
| riseFallRate | decimal | 涨跌幅 |
| riseFallValue | decimal | 涨跌额 |
| volume24 | decimal | 24小时成交量,按张数统计 |
| amount24 | decimal | 24小时成交额,按金额统计 |
| fairPrice | decimal | 合理价 |
| indexPrice | decimal | 指数价 |
| maxBidPrice | decimal | 最大买入价格 |
| minAskPrice | decimal | 最低卖出价格 |
| lower24Price | decimal | 24小时最低价 |
| high24Price | decimal | 24小时最高价 |
成交
订阅
{
"method":"sub.deal",
"param":{
"symbol":"BTC_USDT"
}
}
取消订阅
{
"method":"unsub.deal",
"param":{
"symbol":"BTC_USDT"
}
}
数据示例
{
"symbol": "BTC_USDT",
"data": [{
"p": 115309.8,
"v": 55,
"T": 2,
"O": 3,
"M": 1,
"t": 1755487578276
}, {
"p": 115309.8,
"v": 11,
"T": 1,
"O": 3,
"M": 1,
"t": 1755487578275
}],
"channel": "push.deal",
"ts": 1755487578276
}
获取最近的成交数据,无需用户登录,有成交数据就推送。 成交数据订阅,默认启用合并,如不需启用,订阅时请将compress设置为false。
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| p | decimal | 成交价 |
| v | decimal | 数量 |
| T | int | 成交方向,1:买,2:卖 |
| O | int | 是否是开仓,1:新增仓位,2:减少仓位,3:仓位不变。当O为1的时候, vol是新增的持仓量 |
| M | int | 是否为自成交,1:是,2:否 |
| t | long | 成交时间 |
深度
订阅
{
"method":"sub.depth",
"param":{
"symbol":"BTC_USDT"
}
}
取消订阅
{
"method":"unsub.depth",
"param":{
"symbol":"BTC_USDT"
}
}
数据示例
{
"channel":"push.depth",
"data":{
"asks":[
[
6859.5,
3251,
1
]
],
"bids":[
],
"version":96801927
},
"symbol":"BTC_USDT",
"ts":1587442022003
}
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| asks | List<Numeric[]> | 卖方深度 |
| bids | List<Numeric[]> | 买方深度 |
| version | long | 版本号 |
| 备注: [411.8, 10, 1] 411.8为价格,10为此价格的合约张数,1为订单数量 |
深度-指定最小金额单位:
订阅
{"method":"sub.depth.step","param":{"symbol":"BTC_USDT","step":"10"}}
备注: 10表示以10为金额的最小比例单位,如100010,100020,100030 拆分深度数据
取消订阅
{"method":"unsub.depth.step","param":{"symbol":"BTC_USDT","step":"10"}}
数据示例
{
"channel": "push.depth.step",
"data": {
"askMarketLevelPrice": 111089.4,
"asks": [[111090, 398676, 26], [111100, 410175, 8]],
"bidMarketLevelPrice": 111085.5,
"bids": [[111080, 461204, 35], [111070, 386809, 3]],
"ct": 1760950364388,
"version": 27883254360
},
"symbol": "BTC_USDT"
}
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| asks | List<Numeric[]> | 卖方深度 |
| bids | List<Numeric[]> | 买方深度 |
| askMarketLevelPrice | decimal | 愿意卖出的最高价 |
| bidMarketLevelPrice | decimal | 愿意买入的最高价 |
| version | long | 版本号 |
备注: [111090,398676,26] 111090为价格,398676为此价格的合约张数,26为订单数量
K线数据
订阅
{
"method":"sub.kline",
"param":{
"symbol":"BTC_USDT",
"interval":"Min60"
},
"gzip":false
}
取消订阅
{
"method":"unsub.kline",
"param":{
"symbol":"BTC_USDT"
}
}
数据示例
{"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"
}
获取合约的K线数据,有更新就推送。
interval可选参数: Min1、Min5、Min15、Min30、Min60、Hour4、Hour8、Day1、Week1、Month1
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| symbol | string | 合约名 |
| interval | string | 间隔: Min1、Min5、Min15、Min30、Min60、Hour4、Hour8、Day1、Week1、Month1 |
| a | decimal | 总成交金额 |
| q | decimal | 总成交量 |
| o | decimal | 开盘价 |
| c | decimal | 收盘价 |
| h | decimal | 最高价 |
| l | decimal | 最低价 |
| v | decimal | 总成交量 |
| ro | decimal | 真实开盘价 |
| rc | decimal | 真实收盘价 |
| rh | decimal | 真实最高价 |
| rl | decimal | 真实最低价 |
| t | long | 交易时间,单位:秒(s),为窗口的开始时间(windowStart) |
资金费率
订阅
{
"method":"sub.funding.rate",
"param":{
"symbol":"BTC_USDT"
}
,"gzip":false
}
取消订阅
{
"method":"unsub.funding.rate",
"param":{
"symbol":"BTC_USDT"
}
}
数据示例
{
"channel":"push.funding.rate",
"data":{
"rate":0.001,
"symbol":"BTC_USDT"
},
"symbol":"BTC_USDT",
"ts":1587442022003
}
获取合约资金费率,有更新就推送。
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| symbol | string | 合约名 |
| fundingRate | decimal | 资金费率 |
| nextSettleTime | long | 下一次结算时间 |
指数价格
订阅
正向及方向合约都使用同一个symbol,例如BTC_USD反向合约,订阅指数价格时,使用BTC_USDT
{
"method":"sub.index.price",
"param":{
"symbol":"BTC_USDT"
}
,"gzip":false
}
取消订阅
{
"method":"unsub.index.price",
"param":{
"symbol":"BTC_USDT"
}
}
数据示例
{
"channel":"push.index.price",
"data":{
"price":0.001,
"symbol":"BTC_USDT"
},
"symbol":"BTC_USDT",
"ts":1587442022003
}
获取指数价格,指数价格有变化时就会推送一次数据。
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| symbol | string | 合约名 |
| price | decimal | 价格 |
合理价格
订阅
{
"method":"sub.fair.price",
"param":{
"symbol":"BTC_USDT"
}
,"gzip":false
}
取消订阅
{
"method":"unsub.fair.price",
"param":{
"symbol":"BTC_USDT"
}
}
数据示例
{
"channel":"push.fair.price",
"data":{
"price":0.001,
"symbol":"BTC_USDT"
},
"symbol":"BTC_USDT",
"ts":1587442022003
}
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| symbol | string | 合约名 |
| price | decimal | 价格 |
合约数据
订阅
{"method":"sub.contract"}
取消订阅
{"method":"unsub.contract"}
数据示例
{
"channel": "push.contract",
"data": {
"amountScale": 4,
"askLimitPriceRate": 0.2,
"baseCoin": "CLO",
"baseCoinName": "CLO",
"bidLimitPriceRate": 0.2,
"conceptPlate": [],
"conceptPlateId": [],
"contractSize": 10,
"depthStepList": ["0.0001", "0.001", "0.01", "0.1"],
"displayName": "CLO_USDT永续",
"displayNameEn": "CLO_USDT PERPETUAL",
"feeRateMode": "NORMAL",
"futureType": 1,
"indexOrigin": ["MEXC_FUTURE", "MEXC", "KUCOIN"],
"initialMarginRate": 0.02,
"isHidden": false,
"isHot": false,
"isNew": false,
"liquidationFeeRate": 0.0002,
"limitMaxVol": 9000,
"maintenanceMarginRate": 0.01,
"makerFeeRate": 0,
"maxLeverage": 50,
"maxNumOrders": [200, 50],
"maxVol": 9000,
"minLeverage": 1,
"minVol": 1,
"openingCountdownOption": 1,
"openingTime": 1760440200000,
"positionOpenType": 3,
"priceCoefficientVariation": 0.4,
"priceScale": 4,
"priceUnit": 0.0001,
"quoteCoin": "USDT",
"quoteCoinName": "USDT",
"riskBaseVol": 9000,
"riskIncrImr": 0.005,
"riskIncrMmr": 0.005,
"riskIncrVol": 9000,
"riskLevelLimit": 1,
"riskLimitMode": "INCREASE",
"riskLimitType": "BY_VOLUME",
"riskLongShortSwitch": 0,
"settleCoin": "USDT",
"state": 0,
"symbol": "CLO_USDT",
"takerFeeRate": 0.0002,
"triggerProtect": 0.1,
"volScale": 0,
"volUnit": 1
},
"symbol": "CLO_USDT",
"ts": 1760942212002
}
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| symbol | string | 合约名,如BTC_USDT |
| displayName | string | 展示合约名,如BTC_USDT永续 |
| displayNameEn | string | 展示合约英文名,如BTC_USDT PERPETUAL |
| positionOpenType | int | 开仓模式,1 表示全仓和逐仓; 2表示全仓;3表示逐仓 |
| baseCoin | string | 标的货币 如 BTC |
| quoteCoin | string | 标价货币 如 USDT |
| baseCoinName | string | 标的货币名称 |
| quoteCoinName | string | 标价货币名称 |
| futureType | int | 1 PERPETUAL ,2 DAILY |
| settleCoin | string | 结算货币 如 USDT |
| contractSize | decimal | 合约面值 |
| minLeverage | int | 杠杆倍数下限 |
| maxLeverage | int | 杠杆倍数上限 |
| priceScale | int | 价格小数位数 |
| volScale | int | 交易量小数位数 |
| amountScale | int | 交易金额小数位数 |
| priceUnit | decimal | 价格的最小步进单位 |
| volUnit | decimal | 交易量的最小步进单位 |
| minVol | decimal | 订单张数下限 |
| maxVol | decimal | 订单张数上限 |
| limitMaxVol | decimal | 限价订单张数最大值 |
| bidLimitPriceRate | decimal | 合约下单价格限制-卖家 |
| askLimitPriceRate | decimal | 合约下单价格限制-买家 |
| takerFeeRate | decimal | taker 费用 |
| makerFeeRate | decimal | maker 费用 |
| maintenanceMarginRate | decimal | 维持保证金率 |
| initialMarginRate | decimal | 初始保证金率 |
| riskBaseVol | decimal | 基本张数 |
| riskIncrVol | decimal | 递增张数 |
| riskIncrMmr | decimal | 维持保证金率递增量 |
| riskIncrImr | decimal | 初始保证金率递增量 |
| riskLevelLimit | decimal | 风险限额档位数 |
| priceCoefficientVariation | decimal | 合理价格偏离指数价格系数 |
| state | int | 0:启用、1:交割、2:交割完成、3:下线、4:暂停 |
| isNew | boolean | 是否是新合约 |
| isHot | boolean | 是否是热门合约 |
| isHidden | boolean | 是否是隐藏合约 |
| triggerProtect | decimal | 价差保护阈值 |
| riskLongShortSwitch | int | 多空风险限额是否独立,0:关闭;1:启动 |
| riskBaseVolLong | decimal | 多方向订单基本张数 |
| riskIncrVolLong | decimal | 多方向订单递增张数 |
| riskBaseVolShort | decimal | 空方向订单基本张数 |
| riskIncrVolShort | decimal | 空方向订单递增张数 |
| openingCountdownOption | int | 开盘倒计时选项 1-显示开盘时间和倒计时, 2-仅显示开盘时间, 3-不显示开盘时间和倒计时 |
| openingTime | long | 开盘时间 时间戳 |
| liquidationFeeRate | decimal | 强平手续费率 |
| tieredDealAmount | decimal | 交易金额 |
| tieredEffectiveDay | int | 有效天数 |
| tieredExcludeZeroFee | boolean | false:不排除,true:排除;是否排除0费率交易额 |
| tieredAppointContract | boolean | 是否指定合约;false:不指定;true:指定 |
| tieredExcludeContractId | boolean | 是否包含合约; false:不包含,true:包含 |
事件合约
订阅
{"method":"sub.event.contract"}
取消订阅
{"method":"unsub.event.contract"}
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| contractId | string | 合约id |
| symbol | string | 合约名,如BTC_USDT |
| baseCoin | string | 标的货币,如BTC |
| quoteCoin | string | 标价货币,如USDT |
| baseCoinName | string | 标的货币名称 |
| quoteCoinName | string | 标价货币名称 |
| settleCoin | string | 结算货币 |
| baseCoinIconUrl | string | 标的货币 |
| baseCoinName | string | 标的货币图标配置 |
| investMinAmount | decimal | 最小投入金额 |
| investMaxAmount | decimal | 最大投入金额 |
| amountScale | int | 下单数量精度 |
| payRateScale | int | 支付率精度 |
| indexPriceScale | int | 指数价格精度 |
| availableScale | int | 可用精度精度 |
私有频道
签名方式:
api_key和req_time拼接,将得到的参数字符串用HMAC SHA256进行加密。api_key和sec_key分别为申请api时的ACCESS KEY 和SECRET KEY。
签名字符串
"mx0aBYs33eIilxBW5C1657186536762"
登录认证
示例
{"channel":"rs.login",
"data":"success",
"ts":"1587442022003"
}
{
"method":"login",
"param":{
"token":"token", // web和app需要传token进行完成认证
"apiKey":"apiKey", // openapi需要传此参数,参数构造方式参照openapi文档
"reqTime":"reqTime", // openapi需要传此参数,参数构造方式参照openapi文档
"signature":"signature" // openapi需要传此参数,参数构造方式参照openapi文档
}
}
响应参数:
成功: 无,失败:返回对应错误信息,channel = rs.error
登录成功(channel = rs.login)
订单
数据示例
{
"channel":"push.personal.order",
"data":{
"category":1,
"createTime":1610005069976,
"dealAvgPrice":0.731,
"dealVol":1,
"errorCode":0,
"externalOid":"_m_95bc2b72d3784bce8f9efecbdef9fe35",
"feeCurrency":"USDT",
"leverage":0,
"makerFee":0,
"openType":1,
"orderId":"102067003631907840",
"orderMargin":0,
"orderType":5,
"positionId":1397818,
"price":0.707,
"profit":-0.0005,
"remainVol":0,
"side":4,
"state":3,
"symbol":"CRV_USDT",
"takerFee":0.00004386,
"updateTime":1610005069983,
"usedMargin":0,
"version":2,
"vol":1
},
"ts":1610005069989
}
请求参数: channel = push.personal.order
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| orderId | long | 订单ID |
| symbol | string | 合约名 |
| positionId | long | 持仓id |
| price | decimal | 委托价格 |
| vol | decimal | 委托数量 |
| leverage | long | 杠杆倍数 |
| side | int | 订单方向 1开多,2平空,3开空,4平多 |
| category | int | 订单类别:1限价委托,2强平代管委托,3代管平仓委托,4ADL减仓 |
| orderType | int | 1:限价单,2:Post Only只做Maker,3:立即成交或立即取消,4:全部成交或者全部取消,5:市价单,6:市价转限价单 |
| 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 | |
| externalOid | string | 外部订单号 |
| createTime | long | 创建时间 |
| updateTime | long | 修改时间 |
| remainVol | decimal | 剩余数量 |
| positionMode | int | 持仓模式 |
| reduceOnly | boolean | 只减仓 |
| bboTypeNum | int | 限价订单类型-BBO类型订单 |
| makerFeeRate | decimal | maker手续费率 |
| takerFeeRate | decimal | taker手续费率 |
资产
数据示例
{
"channel":"push.personal.asset",
"data":{
"availableBalance":0.7514236,
"bonus":0,
"currency":"USDT",
"frozenBalance":0,
"positionMargin":0
},
"ts":1610005070083
}
请求参数: channel = push.personal.asset
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| currency | string | 币种 |
| positionMargin | decimal | 仓位保证金 |
| frozenBalance | decimal | 冻结余额 |
| availableBalance | decimal | 当前可用余额 |
| bonus | decimal | 体验金 |
仓位
数据示例
{
"channel":"push.personal.position",
"data":{
"autoAddIm":false,
"closeAvgPrice":0.731,
"closeVol":1,
"frozenVol":0,
"holdAvgPrice":0.736,
"holdFee":0,
"holdVol":0,
"im":0,
"leverage":15,
"liquidatePrice":0,
"oim":0,
"openAvgPrice":0.736,
"openType":1,
"positionId":1397818,
"positionType":1,
"realised":-0.0005,
"state":3,
"symbol":"CRV_USDT"
},
"ts":1610005070157
}
请求参数: 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 | 持仓均价 |
| holdAvgPriceFullyScale | string | 全精度持仓均价 |
| closeAvgPrice | decimal | 平仓均价 |
| openAvgPrice | decimal | 开仓均价 |
| openAvgPriceFullyScale | string | 全精度开仓均价 |
| liquidatePrice | decimal | 逐仓时的爆仓价 |
| oim | decimal | 原始初始保证金 |
| adlLevel | int | adl减仓等级 |
| im | decimal | 初始保证金, 逐仓时可以加减此项以调节爆仓价 |
| holdFee | decimal | 资金费, 正数表示得到,负数表示支出 |
| realised | decimal | 已实现盈亏 |
| leverage | int | 杠杆倍数 |
| autoAddIm | boolean | 是否自动追加保证金 |
| pnl | decimal | 浮动盈亏 |
| marginRatio | decimal | 保证金率 |
| newOpenAvgPrice | decimal | 开仓均价 |
| newCloseAvgPrice | decimal | 平仓均价 |
| closeProfitLoss | decimal | 平仓盈亏 |
| fee | decimal | 手续费 |
| deductFeeList | array | 抵扣信息 |
| makerFeeRate | decimal | maker手续费率 |
| takerFeeRate | decimal | taker手续费率 |
| createTime | long | 创建时间 |
| updateTime | long | 修改时间 |
| version | long | 版本号 |
抵扣信息
请求参数: 无
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| currency | string | 抵扣币种 |
| deductFee | decimal | 抵扣币种手续费 |
| convertSettleFee | decimal | 折算成结算币种手续费 |
计划委托订单
请求参数: channel = push.personal.plan.order
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | long | 订单id |
| symbol | string | 合约名 |
| leverage | int | 杠杆倍数 |
| side | int | 订单方向 1开多,2平空,3开空,4平多 |
| triggerPrice | decimal | 触发价 |
| price | decimal | 执行价格 |
| vol | decimal | 下单数量 |
| openType | int | 开仓类型,1:逐仓,2:全仓 |
| triggerType | int | 触发类型,1:大于等于,2:小于等于 |
| state | int | 状态,1:未触发,2:已取消,3:已执行,4:已失效,5:执行失败 |
| executeCycle | int | 执行周期,单位:小时 |
| trend | int | 触发价格类型,1:最新价,2:合理价,3:指数价 |
| errorCode | int | 执行失败时错误码,0:正常 |
| orderId | long | 订单id,执行成功时返回 |
| orderType | int | 订单类型,1:限价单,2:Post Only只做Maker,3:立即成交或立即取消,4:全部成交或者全部取消,5:市价单 |
| marketOrderLevel | int | 市价订单的自定义档位 |
| positionMode | int | 用户设置持仓类型 默认0:历史订单无记录 2:单向 1:双向 |
| lossTrend | int | 止损参考价格类型 1 最新价 2合理价 3 指数价 |
| profitTrend | int | 止盈参考价格类型 1 最新价 2合理价 3 指数价 |
| stopLossPrice | decimal | 止损价 |
| takeProfitPrice | decimal | 止盈价 |
| reduceOnly | boolean | 只减仓 |
| createTime | long | 创建时间 |
| updateTime | long | 修改时间 |
风险限额
请求参数: channel = push.personal.risk.limit
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| symbol | string | 合约名 |
| positionType | int | 持仓类型 1:多仓,2:空仓 |
| riskSource | int | 风险限制来源 0:其它 1:爆仓服务 |
| level | int | 当前风险等级 |
| maxVol | decimal | 最大可持仓数量 |
| maxLeverage | int | 最大杠杆倍数 |
| mmr | decimal | 维持保证金率 |
| imr | decimal | 初始保证金率 |
| leverage | int | 当前杠杆倍数 |
| openType | int | 保证金模式,默认逐仓 |
| limitBySys | boolean | 限额标识 |
| maxVolView | decimal | 用于前端滑动杠杆计算最大风险限额,不依赖杠杆倍数 |
止盈止损委托
请求参数: channel = push.personal.stop.planorder
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | long | 主键id |
| orderId | long | 订单ID |
| symbol | string | 合约名 |
| positionId | long | 仓位ID |
| lossTrend | int | 止损参考价格类型 |
| profitTrend | int | 止盈参考价格类型 |
| stopLossPrice | decimal | 止损价 |
| takeProfitPrice | decimal | 止盈价 |
| state | int | 状态 |
| triggerSide | int | 触发方向,1:止盈,2:止损 |
| positionType | int | 仓位类型 |
| vol | decimal | 委托数量 |
| takeProfitVol | decimal | 止盈数量 |
| stopLossVol | decimal | 止损数量 |
| realityVol | decimal | 实际下单数量 |
| placeOrderId | long | 实际下单订单id |
| version | int | 版本号 |
| isFinished | int | 是否完成 |
| profitLossVolType | string | 止盈止损数量类型(SAME: 数量相同;SEPARATE:数量不同) |
| volType | int | 数量类型1、分批止盈止损2、仓位止盈止损 |
| takeProfitReverse | int | 止盈反手:1是2否 |
| stopLossReverse | int | 止损反手:1是2否 |
| closeTryTimes | int | 平仓重试次数 |
| reverseTryTimes | int | 反手重试次数 |
| reverseErrorCode | int | 反手开仓失败原因默认值0 |
| stopLossType | int | 止损类型 0-市价止损 1-限价止损 |
| stopLossOrderPrice | decimal | 限价止损 委托价格 |
| createTime | long | 创建时间 |
| updateTime | long | 更新时间 |
跟踪委托
请求参数: channel = push.personal.track.order
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | long | 主键id |
| symbol | string | 合约名 |
| leverage | int | 杠杆倍数 |
| side | int | 订单方向(1 开多 2平空 3开空 4平多) |
| vol | decimal | 委托数量 |
| openType | int | 持仓类型(1 逐仓 2 全仓) |
| trend | int | 参考价格(1 最新价 2合理价 3 指数价) |
| activePrice | decimal | 激活价格 |
| markPrice | decimal | 对标价格(激活后的最高价或者最低价) |
| backType | int | 价格回调类型(1回调百分比 2回调跨度值) |
| backValue | decimal | 回调值 |
| triggerPrice | decimal | 触发价格(随对标价格更新而更新) |
| triggerType | int | 触发类型 |
| orderId | long | 触发成功后的委托单id |
| errorCode | int | 触发失败的错误码 |
| state | int | 当前跟踪委托单状态(0未激活 1 已激活 2 执行成功 3 执行失败 4 已取消) |
| positionMode | int | 用户设置持仓类型 |
| reduceOnly | boolean | 只减仓 |
| createTime | long | 创建时间 |
| updateTime | long | 更新时间 |
止盈止损价格
请求参数: channel = push.personal.stop.order
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| symbol | string | 合约名 |
| orderId | long | 订单ID |
| lossTrend | int | 止损参考价格类型 |
| profitTrend | int | 止盈参考价格类型 |
| stopLossPrice | decimal | 止损价 |
| takeProfitPrice | decimal | 止盈价 |
成交明细
请求参数: channel = push.personal.order.deal
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | long | 成交ID |
| symbol | string | 合约名 |
| side | int | 订单方向:1开多,2平空,3开空,4平多 |
| vol | decimal | 数量 |
| price | decimal | 价格 |
| feeCurrency | string | 手续费币种 |
| fee | decimal | 单边产生的手续费, 正数表示用户付出, 负数表示用户获得 |
| timestamp | long | 成交时间 |
| profit | decimal | 盈亏 |
| isTaker | boolean | 是否为taker |
| category | int | 订单类别 |
| orderId | long | 订单ID |
| isSelf | boolean | 是否为自成交 |
| externalOid | string | 外部订单号 |
| positionMode | int | 持仓模式 |
| reduceOnly | boolean | 只减仓 |
| opponentUid | long | 对手方uid |
追单失败
请求参数: channel = push.personal.order.chase
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| ec | int | 错误码 |
| s | string | 合约名 |
强平风险变更
请求参数: channel = push.personal.liquidate.risk
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| symbol | string | 合约名 |
| positionId | long | 仓位ID |
| liquidatePrice | decimal | 强平价 |
| marginRatio | decimal | 保证金率 |
| adlLevel | int | adl等级 |
杠杆模式变更
请求参数: channel = push.personal.leverage.mode
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| lm | int | 杠杆模式 |
持仓模式变更
请求参数: channel = push.personal.position.mode
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| positionMode | int | 持仓模式 |
全平仓失败
请求参数: channel = push.personal.position.closeall.fail
响应参数:
无数据体,仅推送频道消息
反手仓位
请求参数: channel = push.personal.reverse.position
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| contractId | int | 合约ID |
| positionId | long | 仓位ID |
| state | int | 状态 |
| errorCode | int | 错误码 |
体验金通知
请求参数: channel = push.personal.bonus
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| c | string | 币种 |
| b | decimal | 体验金金额 |
| be | long | 体验金过期时间 |
| g | boolean | 是否发放体验金 |
| ret | long | 最近一笔到期时间 |
| rea | decimal | 最近一笔到期金额 |
用户通知-强平预警/强平通知
请求参数: channel = push.personal.generic.notify
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| type | int | 通知类型 1-强平通知 |
| param | object | 通知参数 |
通知参数(type为强平相关时)
| 参数名 | 类型 | 说明 |
|---|---|---|
| notifyType | int | 通知类型:1-强平通知, 2-强平预警 |
| openType | int | 开仓类型:1-逐仓, 2-全仓 |
| dn | string | 显示名称 |
| dne | string | 显示名称(英文) |
| multiAssets | boolean | 是否开启联保模式 |
| marginRate | decimal | 保证金率 |
事件合约仓位
请求参数: channel = push.personal.event.contract.position
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| positionId | long | 仓位id |
| symbol | string | 合约名 |
| side | string | 方向 |
| payRate | decimal | 奖金支付率 |
| amount | decimal | 下单金额 |
| openPrice | decimal | 开仓价格 |
| closePrice | decimal | 平仓价格 |
| rewardAmount | decimal | 奖励金额 |
| rewardAmountUsdt | decimal | 奖励金额折U |
| state | string | 状态 |
| closeResult | string | 平仓结果 |
| createTime | long | 创建时间 |
| closeTime | long | 平仓时间 |
| pnlAmount | decimal | 总盈亏 |
如何维护深度信息
例如订阅成交信息
{"method":"sub.deal",
"param":{
"symbol":"BTC_USDT"
}
}
订阅成功响应
{"channel":"rs.sub.deal",
"data":"success",
"ts":"1587442022003"
}
订阅失败响应
{"channel":"rs.error",
"data":"合约不存在!",
"ts":"1587442022003"
}
仓位模式
数据示例
{
"channel":"push.personal.position.mode",
"data":{
positionMode: 1
},
"ts":1610005070157
}
请求参数: channel = push.personal.position.mode
响应参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| positionMode | int | 仓位模式,1:双向,2:单向 |
如何维护增量深度信息:
- 通过接口 https://contract.mexc.com/api/v1/contract/depth/BTC_USDT获取全量深度信息,保存当前version
- 订阅ws深度信息,收到更新后,如果收到的数据
version>当前version,同一个价位,后收到的更新覆盖前面的。 - 通过接口 https://contract.mexc.com/api/v1/contract/depth_commits/BTC_USDT/1000获取最新1000条深度快照
- 将目前缓存的深度信息中同一价格,
version<步骤3获取到的快照中的version的数据丢弃 - 将深度快照中的内容更新至本地缓存,并从ws接收到的event开始继续更新
- 每一个新event的version应该恰好等于上一个event的version+1,否则可能出现了丢包,如出现丢包或者获取到的event的version不连续,请从步骤3重新进行初始化。
- 每一个event中的挂单量代表这个价格目前的挂单量绝对值,而不是相对变化。
- 如果某个价格对应的挂单量为0,表示该价位的挂单已经撤单或者被吃,应该移除这个价位。
订阅类事件,订阅成功响应:
channel 为 rs. + 订阅的method, data为 "success"