OKEX WebsocketApi v1 SDK Python实现

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)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值