本文介绍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币币行情数据

  1. 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小时)
  1. 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时);修改(价格相同量不同);增加(价格不存在)。

  1. 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):服务器时间戳
  1. 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]
  1. 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币币交易数据

  1. 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账户信息接口。

  1. 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
  1. 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

OKEX API(Websocket)的更多相关文章

  1. 币安Binance API Websocket

    本文介绍币安Binance API Websocket General WSS information The base endpoint is: wss://stream.binance.com:9 ...

  2. 火币Huobi API Websocket

    本文介绍火币Huobi API Websocket WebSocket API简介 WebSocket协议是基于TCP的一种新的网络协议.它实现了客户端与服务器之间在单个 tcp 连接上的全双工通信, ...

  3. OKEX API

    本文介绍OKEX API Rest 开始使用 REST,即Representational State Transfer的缩写,是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方 ...

  4. 在线聊天室的实现(1)--websocket协议和javascript版的api

    前言: 大家刚学socket编程的时候, 往往以聊天室作为学习DEMO, 实现简单且上手容易. 该Demo被不同语言实现和演绎, 网上相关资料亦不胜枚举. 以至于很多技术书籍在讲解网络相关的编程时, ...

  5. php+swoole+websocket

    //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = new swoole_websocket_server("0.0.0.0", 9502); // ...

  6. WebSocket 学习(三)--用nodejs搭建服务器

    前面已经学习了WebSocket API,包括事件.方法和属性.详情:WebSocket(二)--API  WebSocket是基于事件驱动,支持全双工通信.下面通过三个简单例子体验一下. 简单开始 ...

  7. webSocket详解

    WebSocket 实战http://www.ibm.com/developerworks/cn/java/j-lo-WebSocket/index.html 转自IBMdeveloperWorks ...

  8. 认识HTML5的WebSocket

    在HTML5规范中,我最喜欢的Web技术就是正迅速变得流行的WebSocket API.WebSocket提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术.这个新的API提供了一个方法 ...

  9. HTML 5 websocket

    在HTML5规范中,我最喜欢的Web技术就是正迅速变得流行的WebSocket API.WebSocket提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术.这个新的API提供了一个方法 ...

随机推荐

  1. php-fpm 配置进程池

    什么是 php-fpm :php 是作为一个独立服务存在的,这个服务叫做 php-fpm什么是 php-fpm pool :也就是 php-fpm 的进程池,这个进程池中运行了多个子进程,用来并发处理 ...

  2. Qt生成ui文件对应的.h和.cpp文件

    在VS中,可以通过CMake设定QT5_WRAP_UI来编译a.ui到ui_a.h, 要想快速生成a.h和a.cpp,经过尝试,必须使用Qt Creator,否则就手写.

  3. Pycharm按装

    1.python 官方 2.下载完成后点击exe 安装 3.按装完成后在cmd中输入 python 1.如果显示python版本 那么就安装成功 2.如果出现"python"不是外 ...

  4. thinkjs中修改默认主键

    报错信息: { Error: ER_BAD_FIELD_ERROR: Unknown column 'a_role.id' in 'field list' 还原场景: a_role这张表没有自增的id ...

  5. Tomcat的目录结构和配置文件详解

    本文转载: https://www.zybuluo.com/1234567890/note/515235 参考帖子: Tomcat(一):基础配置详解 Tomcat服务器中配置多个域名,访问不同的we ...

  6. 【Linux】 centos 7 启用端口

    网上的大部分资料都是用iptables防火墙的,但是阿里云的centos 7默认防火墙是firewall.最为简单的方法其实就是关闭我们的防火墙: 1  查看下防火墙的状态: systemctl st ...

  7. 给Repeater控件里添加序号的5种方法

    Repeater是我们经常用的一个显示数据集的数据控件,经常我们希望在数据前显示数据的序号,那么我们该怎么为Repeater控件添加序号呢?下面编辑为大家介绍几种常用的为Repeater控件添加序号的 ...

  8. php curl-class post

    use \Curl\Curl; $curl = new Curl();$curl->setHeader('Content-Type', 'application/json');$curl-> ...

  9. linux的shell后门尝试以及Cython转成C代码编译

    零.背景 最近研究了一下之前的反弹shell的python代码块,写了一点代码尝试在LInux下绑定和反弹shell(正反向),看了一些代码,基本是两种思路.1.本地shell的输入输出通过管道与so ...

  10. Sass预定义一些常用的样式

    一.编写sass文件时, 目录不能有中文, 如: E:\\CPC手机, 会报错exception while processing events: incompatible character enc ...