Как получить ВСЕ (или несколько) исторические клины пары из Binance API в ОДНОМ запросе?

У меня есть торговый бот, который торгует несколькими парами (30-40). Он использует предыдущую 5-метровую свечу для ввода цены. Таким образом, я получаю 5-метровую историю для ВСЕХ пар последовательно. В настоящее время полный цикл занимает около 10 минут, поэтому 5-метровые свечи обновляются раз в 10 минут, что нехорошо.

Есть идеи, как ускорить процесс?


person sellthehype    schedule 21.08.2020    source источник
comment
я использую это сейчас..   -  person Negar Zamiri    schedule 04.09.2020


Ответы (2)


Я думаю, что лучшим вариантом для вас будет подключение через веб-сокет. Вы не можете получить данные kline один раз, например. 5 минут, но вы можете получить каждое изменение в свече, как вы видите на графике. Binance API обеспечивает только это, но в сочетании с подключением через веб-сокет это будет очень быстро, а не 10 минут.

После получения данных вам нужно только указать, когда свеча была закрыта, вы можете сделать это из временных меток, которые находятся в данных json ('t' и 'T'). [документация здесь ]

Вы должны установить библиотеку веб-сокетов.

pip install websockets

И вот пример кода, как это может работать.

import asyncio
import websockets


async def candle_stick_data():
    url = "wss://stream.binance.com:9443/ws/" #steam address
    first_pair = 'bnbbtc@kline_1m' #first pair
    async with websockets.connect(url+first_pair) as sock:
        pairs = '{"method": "SUBSCRIBE", "params": ["xrpbtc@kline_1m","ethbtc@kline_1m" ],  "id": 1}' #other pairs

        await sock.send(pairs)
        print(f"> {pairs}")
        while True:
            resp = await sock.recv()
            print(f"< {resp}")

asyncio.get_event_loop().run_until_complete(candle_stick_data())

Выход:

< {"e":"kline","E":1599828802835,"s":"XRPBTC","k":{"t":1599828780000,"T":1599828839999,"s":"XRPBTC","i":"1m","f":76140140,"L":76140145,"o":"0.00002346","c":"0.00002346","h":"0.00002346","l":"0.00002345","v":"700.00000000","n":6,"x":false,"q":"0.01641578","V":"78.00000000","Q":"0.00182988","B":"0"}}
< {"e":"kline","E":1599828804297,"s":"BNBBTC","k":{"t":1599828780000,"T":1599828839999,"s":"BNBBTC","i":"1m","f":87599856,"L":87599935,"o":"0.00229400","c":"0.00229610","h":"0.00229710","l":"0.00229400","v":"417.88000000","n":80,"x":false,"q":"0.95933156","V":"406.63000000","Q":"0.93351653","B":"0"}}
< {"e":"kline","E":1599828804853,"s":"ETHBTC","k":{"t":1599828780000,"T":1599828839999,"s":"ETHBTC","i":"1m","f":193235180,"L":193235214,"o":"0.03551300","c":"0.03551700","h":"0.03551800","l":"0.03551300","v":"21.52300000","n":35,"x":false,"q":"0.76437246","V":"11.53400000","Q":"0.40962829","B":"0"}}
< {"e":"kline","E":1599828806303,"s":"BNBBTC","k":{"t":1599828780000,"T":1599828839999,"s":"BNBBTC","i":"1m","f":87599856,"L":87599938,"o":"0.00229400","c":"0.00229620","h":"0.00229710","l":"0.00229400","v":"420.34000000","n":83,"x":false,"q":"0.96497998","V":"406.63000000","Q":"0.93351653","B":"0"}}
person rozumir    schedule 11.09.2020

Просто чтобы проследить за этим ответом. Вы можете видеть закрытие свечи, так как данные возврата веб-сокета для каждого тика имеют логическое свойство, если свеча закрыта или нет, то есть на 5-минутном таймфрейме, если свеча закрылась на 5-минутной отметке.

person Adam Harte    schedule 30.05.2021