本文介紹OKEX API Websocket
WebSocket API for SPOT
開始使用
WebSocket是HTML5一種新的協議(Protocol)。它實現了客戶端與服務器全雙工通信,使得數據可以快速地雙向傳播。通過一次簡單的握手就可以建立客戶端和服務器連接,服務器根據業務規則可以主動推送信息給客戶端。其優點如下:
- 客戶端和服務器進行數據傳輸時,請求頭信息比較小,大概2個字節;
- 客戶端和服務器皆可以主動地發送數據給對方;
- 不需要多次創建TCP請求和銷毀,節約寬帶和服務器的資源。
強烈建議開發者使用WebSocket API獲取市場行情和買賣深度等信息。
請求交互
幣幣交易WebSocket服務連接地址:wss://real.okex.com:10440/ws/v1
訪問時需要科學上網
發送請求
請求數據格式為:{'event':'addChannel','channel':'channelValue','parameters':{'api_key':'value1','sign':'value2'}}
其中
event: addChannel(注冊請求數據)/removeChannel(注銷請求數據)
channel: OKEx提供請求數據類型
parameters: 參數為選填參數,其中api_key為用戶申請的APIKEY,sign為簽名字符串,簽名規則參照請求說明
例如: websocket.send("{'event':'addChannel','channel':'ok_sub_spot_bch_btc_ticker' }")
websocket.send("[{'event':'addChannel','channel':'ok_sub_spot_bch_btc_ticker'},{'event':'addChannel','channel':'ok_sub_spot_bch_btc_ticker'},{'event':'addChannel','channel':'ok_sub_spot_bch_btc_ticker'}]")
,支持批量注冊
服務器響應
返回數據格式為: [{"channel":"channel","success":"","errorcode":"","data":{}}, {"channel":"channel","success":"","errorcode":1,"data":{}}]
其中
channel: 請求的數據類型
result: true成功,false失敗(用於WebSocket 交易API) data: 返回結果數據
errorcode: 錯誤碼(用於WebSocket 交易API)
推送過程說明
為保證推送的及時性及減少流量,行情數據(ticker)和委托深度(depth)這兩種數據類型只會在數據發生變化的情況下才會推送數據,交易記錄(trades)是推送從上次推送到本次推送產生的增量數據。
如何判斷連接是否斷開
OKEx通過心跳機制解決這個問題。客戶端每30秒發送一次心跳數據:{'event':'ping'},服務器會響應客戶端:{"event":"pong"}以此來表明客戶端和服務端保持正常連接。如果客戶端未接到服務端響應的心跳數據則需要客戶端重新建立連接。
API參考
幣幣行情 API
獲取OKEx幣幣行情數據
- ok_sub_spot_X_ticker 訂閱行情數據
websocket.send("{'event':'addChannel','channel':'ok_sub_spot_X_ticker'}");
X值為幣對,如ltc_btc
示例
# Request
{'event':'addChannel','channel':'ok_sub_spot_bch_btc_ticker'}
# Response
[
{
"channel": "ok_sub_spot_bch_btc_ticker",
"data": {
"high": "10000",
"vol": "185.03743858",
"last": "111",
"low": "0.00000001",
"buy": "115",
"change": "101",
"sell": "115",
"dayLow": "0.00000001",
"dayHigh": "10000",
"timestamp": 1500444626000
}
}
]
返回值說明
buy(double): 買一價
high(double): 最高價
last(double): 最新成交價
low(double): 最低價
sell(double): 賣一價
timestamp(long):時間戳
vol(double): 成交量(最近的24小時)
- ok_sub_spot_X_depth 訂閱幣幣市場深度(200增量數據返回)
websocket.send("{'event':'addChannel','channel':'ok_sub_spot_X_depth'}");
X值為幣對,如ltc_btc
示例
# Request
{'event':'addChannel','channel':'ok_sub_spot_bch_btc_depth'}
# Response
[
{
"channel": "ok_sub_spot_bch_btc_depth",
"data": {
"asks": [],
"bids": [
[
"115",
"1"
],
[
"114",
"1"
],
[
"1E-8",
"0.0008792"
]
],
"timestamp": 1504529236946
}
}
]
返回值說明
bids([string, string]):買方深度
asks([string, string]):賣方深度
timestamp(string):服務器時間戳
使用描述
第一次返回全量數據,根據接下來數據對第一次返回數據進行如下操作:刪除(量為0時);修改(價格相同量不同);增加(價格不存在)。
- ok_sub_spot_X_depth_Y 訂閱市場深度
websocket.send("{'event':'addChannel','channel':'ok_sub_spot_X_depth_Y'}");
X值為幣對,如ltc_btc
Y值為獲取深度條數,如5,10,20
示例
# Request
{'event':'addChannel','channel':'ok_sub_spot_bch_btc_depth_5'}
# Response
[
{
"channel": "ok_sub_spot_bch_btc_depth_5",
"data": {
"asks": [],
"bids": [
[
"115",
"1"
],
[
"114",
"1"
],
[
"1E-8",
"0.0008792"
]
],
"timestamp": 1504529432367
}
}
]
返回值說明
bids([string, string]):買方深度
asks([string, string]):賣方深度
timestamp(long):服務器時間戳
- ok_sub_spot_X_deals 訂閱成交記錄
websocket.send("{'event':'addChannel','channel':'ok_sub_spot_X_deals'}");
X值為幣對,如ltc_btc
示例
# Request
{'event':'addChannel','channel':'ok_sub_spot_bch_btc_deals'}
# Response
[{
"channel":"ok_sub_spot_bch_btc_deals",
"data":[["1001","2463.86","0.052","16:34:07","ask"]]
}]
返回值說明
增量數據返回
[交易序號, 價格, 成交量, 時間, 買賣類型]
[string, string, string, string, string]
- ok_sub_spot_X_kline_Y 訂閱K線數據
websocket.send("{'event':'addChannel','channel':'ok_sub_spot_X_kline_Y'}");
X值為幣對,如ltc_btc
Y值為K線時間周期,如1min, 3min, 5min, 15min, 30min, 1hour, 2hour, 4hour, 6hour, 12hour, day, 3day, week
示例
# Request
{'event':'addChannel','channel':'ok_sub_spot_bch_btc_kline_1min'}
# Response
[{
"channel":"ok_sub_spot_bch_btc_kline_1min",
"data":[
["1490337840000","995.37","996.75","995.36","996.75","9.112"],
["1490337840000","995.37","996.75","995.36","996.75","9.112"]
]
}]
返回值說明
[時間,開盤價,最高價,最低價,收盤價,成交量]
[string, string, string, string, string, string]
幣幣交易 API
獲取OKEx幣幣交易數據
- login 登錄事件(個人信息推送)
示例
# Request
{"event":"login","parameters":{"api_key":"xxx","sign":"xxx"}}
# Response
[
{
"channel": "login",
"data": {
"result": true
}
}
]
請求參數
參數名 | 描述 |
---|---|
api_key | 用戶申請的APIKEY |
sign | 請求參數的簽名 |
說明
訂閱login后還需要訂閱 ok_sub_spot_X_order 交易數據接口,和ok_sub_spot_X_balance賬戶信息接口。
- ok_sub_spot_X_order 交易數據
示例
# Response
[
{
"base": "bch",
"channel": "ok_sub_spot_bch_btc_order",
"data": {
"symbol": "bch_btc",
"tradeAmount": "1.00000000",
"createdDate": "1504530228987",
"orderId": 6191,
"completedTradeAmount": "0.00000000",
"averagePrice": "0",
"tradePrice": "0.00000000",
"tradeType": "buy",
"status": 0,
"tradeUnitPrice": "113.00000000"
},
"product": "spot",
"quote": "btc",
"type": "balance"
}
]
返回值說明
createdDate(string):創建日期
orderId(long):訂單id
tradeType(string):交易類型(buy:買入;sell:賣出;buy_market:按市價買入;sell_market:按市價賣出)
sigTradeAmount(string):單筆成交數量
sigTradePrice(string):單筆成交價格
tradeAmount(string):委托數量(市價賣代表要賣總數量;限價單代表委托數量)
tradeUnitPrice(string):委托價格(市價買單代表購買總金額; 限價單代表委托價格)
symbol(string):交易幣對,如ltc_btc
completedTradeAmount(string):已完成成交量
tradePrice(string):成交金額
averagePrice(string):平均成交價
unTrade(string):當按市場價買幣時表示剩余金額,其他情況表示此筆交易剩余買/賣幣的數量
status(int):-1已撤銷,0等待成交,1部分成交,2完全成交,4撤單處理中
請求參數
參數名 | 描述 |
---|---|
symbol | 交易幣對,如ltc_btc |
- ok_sub_spot_X_balance 賬戶信息
示例
# Response
[
{
"base": "bch",
"channel": "ok_sub_spot_bch_btc_balance",
"data": {
"info": {
"free": {
"btc": 5814.850605790395
},
"freezed": {
"btc": 7341
}
}
},
"product": "spot",
"quote": "btc",
"type": "order"
}
]
返回值說明
free:賬戶余額
freezed:賬戶凍結余額
請求參數
參數名 | 描述 |
---|---|
symbol | 交易幣對,如ltc_btc |