import hashlib
import json
import time
import zlib
import websocket
from basesite.backend.strategy import BreakStrategy
from basesite.utils.okexutils.okex import OkEx
class OkexWebSocket(websocket.WebSocketApp):
url = "wss://real.okex.com:10440/ws/v1"
def __init__(self, ok, break_strategy):
self.ok = ok
self.break_strategy = break_strategy
super(OkexWebSocket, self).__init__(self.url, on_open=self.on_open, on_message=self.on_message,
on_error=self.on_error, on_close=self.on_close)
def buildMySign(self, params, secretKey):
sign = ''
for key in sorted(params.keys()):
sign += key + '=' + str(params[key]) + '&'
return hashlib.md5((sign + 'secret_key=' + secretKey).encode("utf-8")).hexdigest().upper()
def on_open(self):
symbol_name = self.ok.symbol.split("_")[0]
# subscribe okcoin.com future this_week ticker
self.send("{'event':'addChannel','channel':'ok_sub_futureusd_" + symbol_name + "_ticker_" + self.ok.contract_type + "'}")
def on_message(self, evt):
data = self.inflate(bytes(evt)) # data decompress
data = json.loads(data)
price_data = data[0]["data"]
if "last" in price_data:
last_price = float(price_data["last"])
print(last_price)
print(self.ok)
print(self.break_strategy)
self.break_strategy.buy_and_sell(self.ok, last_price)
def inflate(self, data):
decompress = zlib.decompressobj(
-zlib.MAX_WBITS # see above
)
inflated = decompress.decompress(data)
inflated += decompress.flush()
return inflated
def on_error(self, evt):
print(evt)
self.close()
def on_close(self):
print('DISCONNECT')
self.close()
# 重启websocket
# self.run_forever()
# run_websocket(self.ok, self.break_strategy)
def run_websocket(ok, break_strategy):
from manage import app
app_ctx = app.app_context()
app_ctx.push()
websocket.enableTrace(True)
ws = OkexWebSocket(ok, break_strategy)
ws.run_forever(ping_interval=20)
if __name__ == '__main__':
symbol = "xrp_usd"
contract_type = "next_week"
ktype = "5min"
loss_point = -0.005
profit_dict = {
"0.015": 1,
"0.01": 0.7,
"0.005": 0.2
}
buy_amount = 10
strategy = "sar_break"
ok = OkEx()
ok.symbol = symbol
ok.contract_type = contract_type
ok.ktype = ktype
ok.loss_point = loss_point
ok.profit_dict = profit_dict
ok.buy_amount = buy_amount
ok.strategy = strategy
break_strategy = BreakStrategy()
run_websocket(ok, break_strategy)
OKEX WebsocketApi v1 SDK Python实现
最新推荐文章于 2023-07-18 08:25:44 发布