今天遇到一个问题
当调用交易所的API获取深度时注意有一个参数叫做“合并深度”
举例OKEX交易所的API
这个“合并深度”参数应该很重要 对于不同类型的币种来说 如果你输入的参数不同回导致得到不同的结果
公共-获取深度数据
获取币对的深度列表。这个请求不支持分页,一个请求返回整个深度列表。
限速规则:20次/2s
HTTP请求
GET /api/spot/v3/instruments/<instrument_id>/book
签名请求示例
2019-03-20T07:48:09.130ZGET/api/spot/v3/instruments/BTC-USDT/book?size=5&depth=0.2
请求参数
参数名 类型 描述
size String [非必填]返回深度档位数量,最多返回200
depth String [非必填]按价格合并深度,例如:0.1,0.001
instrument_id String [必填]币对
返回参数
普通返回数据
参数名 类型 描述
price String 价格
size String 数量
num_orders String 组成此条深度的订单数量
timestamp String 时间戳
解释说明
按价格合并深度是指每个价格区间将仅返回一个数量,就像在该价格区间上只有一个订单。
asks : 卖方深度
bids : 买方深度
返回示例
{
"asks":[
[
"3993.2",
"0.41600068",
"1"
],
[
"3993.4",
"1.24807818",
"3"
],
[
"3993.6",
"0.03",
"1"
],
[
"3993.8",
"0.03",
"1"
]
],
"bids":[
[
"3993",
"0.15149658",
"2"
],
[
"3992.8",
"1.19046818",
"1"
],
[
"3992.6",
"0.20831389",
"1"
],
[
"3992.4",
"0.01669446",
"2"
]
],
"timestamp":"2019-03-20T03:55:37.888Z"
}
举个例子
get了一下一个近乎停盘的币种:ORS-OKB
得到数据
{
'asks':
[['0.1', '17049.9036606', '21']],
'bids':
[['0', '610865.52001146', '20']],
'timestamp':
'2019-06-23T08:48:21.858Z'
}
看第二行的最后一个值“21”
这代表在“0.1”价格内有21个订单
再来看看火币的API
火币的获取市场深度API
火币是按照报价精度分了四个级别
火币的报价精度为 小数点后两位数
EXC_name: huobi CURRENCY: btcusdt last: 10803.91
例子
curl "https://api.huobi.pro/market/depth?symbol=btcusdt&type=step2"
Response:
{
"version": 31615842081,
"ts": 1489464585407,
"bids": [
[7964, 0.0678], // [price, amount]
[7963, 0.9162],
[7961, 0.1],
[7960, 12.8898],
[7958, 1.2],
...
],
"asks": [
[7979, 0.0736],
[7980, 1.0292],
[7981, 5.5652],
[7986, 0.2416],
[7990, 1.9970],
...
]
}
需要注意的一点是
火币的depth API规定了depth只能有三个数值:
5,10,20
入果采用step0 则默认为150
depth这个参数只能为上述固定的值,如果为25,就不行 会报错
TypeError: 'NoneType' object is not subscriptable
两个交易所之间进行搬砖时这里一定要留意这个地方
这里暂定为小数点后一个精度 获取20个数据
ASK:
卖方的出价
BID:
买方的出价
针对OKEX的交易所
因为得到的depth返回数据中带着第三个参数,当前订单的数量
为保持和其他交易所统一,具体参数如下:
"asks":[
[
"3993.2",
"0.41600068",
"1"
],
现在删除这个参数,组成新的列表,代码如下:
def GetAsksBook(self,currency, size):
l_currency = ""
if self.EXCH_NAME == 'okex':
Res_Asks =[]
l_Info_depth = self.spotAPI.get_depth(currency, size, "0.001")
self.AsksBookInfo[currency] = l_Info_depth
asks = l_Info_depth["asks"]
bids = l_Info_depth["bids"]
print(l_Info_depth)
print(asks)
print(bids)
for ask in asks:
print(ask)
del ask[2]
print(ask)
Res_Asks.append(ask)
print(Res_Asks)
结果输出:
{'asks': [['0.006', '9717.23136878', '6'], ['0.007', '16747.27834767', '15']], 'bids': [['0.005', '209093.70586489', '7'], ['0.004', '288002.19333188', '13']], 'timestamp': '2019-06-23T10:06:59.562Z'}
[['0.006', '9717.23136878', '6'], ['0.007', '16747.27834767', '15']]
[['0.005', '209093.70586489', '7'], ['0.004', '288002.19333188', '13']]
['0.006', '9717.23136878', '6']
['0.006', '9717.23136878']
[['0.006', '9717.23136878']]
['0.007', '16747.27834767', '15']
['0.007', '16747.27834767']
[['0.006', '9717.23136878'], ['0.007', '16747.27834767']]