更新支持压缩
This commit is contained in:
parent
1fce2735d2
commit
d0553088b1
@ -5,7 +5,7 @@
|
||||
|
||||
from OkcoinSpotAPI import OKCoinSpot
|
||||
from OkcoinFutureAPI import OKCoinFuture
|
||||
|
||||
from datetime import datetime
|
||||
#初始化apikey,secretkey,url
|
||||
apikey = 'XXXX'
|
||||
secretkey = 'XXXXX'
|
||||
@ -23,8 +23,36 @@ okcoinFuture = OKCoinFuture(okcoinRESTURL,apikey,secretkey)
|
||||
#print (u' 现货深度 ')
|
||||
#print (okcoinSpot.depth('btc_usdt'))
|
||||
|
||||
print (u' K线数据 ')
|
||||
print (okcoinSpot.kline(symbol='btc_usdt',type_='1day'))
|
||||
|
||||
print('显示最后5条日线数据:')
|
||||
klines = okcoinSpot.kline(symbol='eth_usdt', type_='1day')
|
||||
for kl in klines[-5:]:
|
||||
print('utc:{}, bjt:{} {}'.format(datetime.utcfromtimestamp(kl[0]/1e3),datetime.fromtimestamp(kl[0]/1e3),kl))
|
||||
|
||||
print('显示最后5条12小时线数据:')
|
||||
klines = okcoinSpot.kline(symbol='eth_usdt', type_='12hour')
|
||||
for kl in klines[-5:]:
|
||||
print('utc:{}, bjt:{} {}'.format(datetime.utcfromtimestamp(kl[0]/1e3),datetime.fromtimestamp(kl[0]/1e3),kl))
|
||||
|
||||
print('显示最后5条6小时线数据:')
|
||||
klines = okcoinSpot.kline(symbol='eth_usdt', type_='6hour')
|
||||
for kl in klines[-5:]:
|
||||
print('utc:{}, org:{} {}'.format(datetime.utcfromtimestamp(kl[0]/1e3),datetime.fromtimestamp(kl[0]/1e3),kl))
|
||||
|
||||
print('显示最后5条1小时线数据:')
|
||||
klines = okcoinSpot.kline(symbol='eth_usdt', type_='1hour')
|
||||
for kl in klines[-5:]:
|
||||
print('utc:{}, bjt:{} {}'.format(datetime.utcfromtimestamp(kl[0]/1e3),datetime.fromtimestamp(kl[0]/1e3),kl))
|
||||
|
||||
print('显示最后5条30分钟线数据:')
|
||||
klines = okcoinSpot.kline(symbol='eth_usdt', type_='30min')
|
||||
for kl in klines[-5:]:
|
||||
print('utc:{}, bjt:{} {}'.format(datetime.utcfromtimestamp(kl[0] / 1e3), datetime.fromtimestamp(kl[0] / 1e3), kl))
|
||||
|
||||
print('显示最后5条5分钟线数据:')
|
||||
klines = okcoinSpot.kline(symbol='eth_usdt', type_='5min')
|
||||
for kl in klines[-5:]:
|
||||
print('utc:{}, bjt:{} {}'.format(datetime.utcfromtimestamp(kl[0] / 1e3), datetime.fromtimestamp(kl[0] / 1e3), kl))
|
||||
|
||||
|
||||
#print (u' 现货历史交易信息 ')
|
||||
|
@ -101,6 +101,7 @@ class OKCoinSpot:
|
||||
return httpPost(self.__url,CANCEL_ORDER_RESOURCE,params)
|
||||
|
||||
#现货订单信息查询
|
||||
# orderId=-1,是查询未完成订单,否则查询相应订单号得订单
|
||||
def orderinfo(self,symbol,orderId):
|
||||
ORDER_INFO_RESOURCE = "/api/v1/order_info.do"
|
||||
params = {
|
||||
|
@ -15,8 +15,8 @@ import sys
|
||||
from vnpy.api.okex.okexData import SPOT_TRADE_SIZE_DICT,SPOT_REST_ERROR_DICT, FUTURES_ERROR_DICT
|
||||
|
||||
# OKEX网站
|
||||
OKEX_USD_SPOT = 'wss://real.okex.com:10441/websocket' # OKEX (币币交易)现货地址
|
||||
OKEX_USD_CONTRACT = 'wss://real.okex.com:10440/websocket/okexapi' # OKEX 期货地址
|
||||
OKEX_USD_SPOT = 'wss://real.okex.com:10441/websocket?compress=true' # OKEX (币币交易)现货地址
|
||||
OKEX_USD_CONTRACT = 'wss://real.okex.com:10440/websocket/okexapi?compress=true' # OKEX 期货地址
|
||||
|
||||
OKEX_CONTRACT_HOST = 'https://www.okex.com/api/v1/future_hold_amount.do?symbol=%s_usd&contract_type=%s' # 合约持仓查询地址
|
||||
|
||||
@ -123,6 +123,8 @@ class OkexApi(object):
|
||||
:param evt:
|
||||
:return:
|
||||
"""
|
||||
if isinstance(evt,bytes):
|
||||
evt = evt.decode('utf-8')
|
||||
data = json.loads(evt)
|
||||
return data
|
||||
|
||||
@ -168,7 +170,7 @@ class OkexApi(object):
|
||||
"""
|
||||
print(u'vnokex.onClose')
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# ----------------------------------------------------------------------
|
||||
def onOpen(self, ws):
|
||||
"""
|
||||
接口打开事件
|
||||
@ -176,7 +178,22 @@ class OkexApi(object):
|
||||
:return:
|
||||
"""
|
||||
print(u'vnokex.onOpen')
|
||||
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
def inflate(self,data):
|
||||
"""解压数据流"""
|
||||
decompress = zlib.decompressobj(
|
||||
-zlib.MAX_WBITS # see above
|
||||
)
|
||||
inflated = decompress.decompress(data)
|
||||
inflated += decompress.flush()
|
||||
|
||||
# bytes=>string
|
||||
if isinstance(inflated,bytes):
|
||||
inflated = inflated.decode('utf-8')
|
||||
|
||||
return inflated
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def generateSign(self, params):
|
||||
"""生成签名"""
|
||||
@ -493,6 +510,21 @@ class WsFuturesApi(object):
|
||||
self.ws.close()
|
||||
self.thread.join()
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
def inflate(self, data):
|
||||
"""解压数据流"""
|
||||
decompress = zlib.decompressobj(
|
||||
-zlib.MAX_WBITS # see above
|
||||
)
|
||||
inflated = decompress.decompress(data)
|
||||
inflated += decompress.flush()
|
||||
|
||||
# bytes=>string
|
||||
if isinstance(inflated, bytes):
|
||||
inflated = inflated.decode('utf-8')
|
||||
|
||||
return inflated
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
def readData(self, evt):
|
||||
"""解压缩推送收到的数据"""
|
||||
|
@ -16,6 +16,7 @@ from queue import Queue
|
||||
from threading import Thread
|
||||
from time import sleep
|
||||
import traceback
|
||||
import zlib # 新增解压功能
|
||||
|
||||
from vnpy.api.okex import WsSpotApi, WsFuturesApi, SPOT_SYMBOL_PAIRS, CONTRACT_SYMBOL, CONTRACT_TYPE, SPOT_CURRENCY
|
||||
from vnpy.api.okex.okexData import SPOT_TRADE_SIZE_DICT, SPOT_REST_ERROR_DICT, SPORT_WS_ERROR_DICT, FUTURES_ERROR_DICT
|
||||
@ -437,7 +438,8 @@ class OkexSpotApi(WsSpotApi):
|
||||
:return:
|
||||
"""
|
||||
# str => json
|
||||
ws_data = self.readData(evt)
|
||||
decmp_evt = self.inflate(evt)
|
||||
ws_data = self.readData(decmp_evt)
|
||||
|
||||
if self.gateway.log_message:
|
||||
self.gateway.writeLog(u'SpotApi.onMessage:{}'.format(ws_data))
|
||||
@ -498,7 +500,8 @@ class OkexSpotApi(WsSpotApi):
|
||||
error = VtErrorData()
|
||||
error.gatewayName = self.gatewayName
|
||||
error.errorID = 0
|
||||
error.errorMsg = str(evt)
|
||||
decom_evt = self.inflate(evt)
|
||||
error.errorMsg = str(decom_evt)
|
||||
self.gateway.onError(error)
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
@ -921,7 +924,16 @@ class OkexSpotApi(WsSpotApi):
|
||||
tick.date, tick.time,tick.datetime = self.generateDateTime(data['timestamp'])
|
||||
# print "Depth", tick.date, tick.time
|
||||
tick.tradingDay = tick.date
|
||||
|
||||
# 推送tick事件
|
||||
if tick.lastPrice == 0 and tick.askPrice1 != 0 and tick.bidPrice1 != 0:
|
||||
tick.lastPrice = (tick.askPrice1 + tick.bidPrice1) / 2
|
||||
|
||||
if tick.lastPrice == 0 or tick.askPrice1 == 0 or tick.bidPrice1 == 0:
|
||||
print('onDepth drop tick {},lastprice:{},askprice1={},bidPrice1:{}'
|
||||
.format(tick.vtSymbol, tick.lastPrice, tick.askPrice1, tick.bidPrice1))
|
||||
return
|
||||
|
||||
newtick = copy(tick)
|
||||
self.gateway.onTick(newtick)
|
||||
|
||||
@ -1558,7 +1570,9 @@ class OkexFuturesApi(WsFuturesApi):
|
||||
:return:
|
||||
"""
|
||||
# str => json
|
||||
ws_data = self.readData(evt)
|
||||
decmp_evt = self.inflate(evt)
|
||||
ws_data = self.readData(decmp_evt)
|
||||
#ws_data = self.readData(evt)
|
||||
|
||||
if self.gateway.log_message:
|
||||
self.gateway.writeLog(u'FutureApi.onMessage:{}'.format(ws_data))
|
||||
@ -1626,7 +1640,9 @@ class OkexFuturesApi(WsFuturesApi):
|
||||
"""重载WsFutureApi.onError错误Event推送"""
|
||||
error = VtErrorData()
|
||||
error.gatewayName = self.gatewayName
|
||||
error.errorMsg = str(evt)
|
||||
#error.errorMsg = str(evt)
|
||||
decom_evt = self.inflate(evt)
|
||||
error.errorMsg = str(decom_evt)
|
||||
self.gateway.onError(error)
|
||||
|
||||
# #----------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user