Перейти к публикации
Форум ботоводов

Отслеживать состояние ордера вебсокетами


Рекомендованные сообщения

Я делал на голанге, но общий принцип одинаков:

Сначала надо отправить обычный запрос (такой же, как и другие в binance_api, с заголовком ) на 

/api/v3/userDataStream

https://github.com/binance-exchange/binance-official-api-docs/blob/master/user-data-stream.md

 

Он вам даст ключ (строку)

С этой строкой надо подлючиться через сокеты на  wss://stream.binance.com:9443/ws/<listenKey>

Потом он начнет спамить всё про изменения баланса и про создание/изменение статусов всех ордеров. Остается только фильтровать..

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

Ссылка на сообщение
Поделиться на других сайтах
  • 3 weeks later...

Спасибо, все получилось! 

Подскажите пожалуйста еще как грамотно пересоздавать коннект раз в сутки

можно на базе вашего примера

import json
import websocket

def on_message(ws, message):
    obj = json.loads(message)
    print(obj['s'], obj['p'])

def on_error(ws, error):
    print(error)

def on_close(ws):
    print("### closed ###")

def on_open(ws):
    print("### connected ###")

if __name__ == "__main__":
    ws = websocket.WebSocketApp("wss://stream.binance.com:9443/ws/ltcbtc@aggTrade/ethbtc@aggTrade",
                              on_message = on_message,
                              on_error = on_error,
                              on_close = on_close)
    ws.on_open = on_open
    ws.run_forever()
Ссылка на сообщение
Поделиться на других сайтах

у меня так работает:

local_time = int(time.time())
restart_time = local_time + 82800  # 23 часа (82800 сек)

def on_message(ws, message):
    global restart_time
    if 'e' in socket_data:
    .......
    if 's' in socket_data:
    .........

    local_time = int(time.time())
    if local_time > restart_time:
            print("время рестарта")
            time.sleep(30)
            local_time = int(time.time())
            restart_time = local_time + 82800
            
def on_error(ws, error):
    print(error)
def on_close(ws):
    print("### closed ###")
def on_open(ws):
    print("### connected ###")

if __name__ == "__main__":
    ws = websocket.WebSocketApp(
        "wss:.............
        on_message=on_message,
        on_error=on_error,
        on_close=on_close)
    ws.on_open = on_open
    while True:
        try:
            ws.run_forever()
        except:
            pass

Ссылка на сообщение
Поделиться на других сайтах

у меня каждый стрим в отдельном потоке

пока не понимаю как перезапускать стримы в этом случае. я конечно тот еще мамкинпрограммист. Помогите плз кто знает

 ws = websocket.WebSocketApp(
        "wss:.............
        on_message=on_message,
        on_error=on_error,
        on_close=on_close)
    ws.on_open = on_open

threads.append(threading.Thread(target=ws.run_forever, args=(None, {"cert_reqs": ssl.CERT_NONE},)))

    for thread in threads:
        thread.start()
    for thread in threads:
        thread.join()
 

Ссылка на сообщение
Поделиться на других сайтах
  • 5 months later...
10.11.2019 в 13:25, admin сказал:

Я делал на голанге, но общий принцип одинаков:

Сначала надо отправить обычный запрос (такой же, как и другие в binance_api, с заголовком ) на 


/api/v3/userDataStream

https://github.com/binance-exchange/binance-official-api-docs/blob/master/user-data-stream.md

 

Он вам даст ключ (строку)

С этой строкой надо подлючиться через сокеты на  wss://stream.binance.com:9443/ws/<listenKey>

Потом он начнет спамить всё про изменения баланса и про создание/изменение статусов всех ордеров. Остается только фильтровать..

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

 я вставил в binance_api.py строки

 'createListen':     {'url': 'api/v3/userDataStream', 'method': 'POST', 'private': True},

'marginCreateListen': {'url': 'sapi/v1/userDataStream', 'method': 'POST', 'private':True},

код такой

import websocket
import json
import time
from binance_api import Binance

bot = Binance(
    API_KEY='qytrs784TNgahAQS6Ly0fR4QxQtj******************PA8zteq',
    API_SECRET='Yyf39taCznHNxygDXRwX_____________________-JQBLYNUkyzNC4'
)
LK = bot.marginCreateListen()
print (LK)
LKK=LK['listenKey']
print (LKK)

def on_message(ws, message):
    print(message)
    print( json.dumps( json.loads(message), indent=3, separators=(',',': ') ) )

def on_error(ws, error):
    print(error)

def on_close(ws):
    print("### closed ###")

def on_open(ws):
    print("### connected ###")
    
if 1==1: # это я так цикл засобачил, не знаю как правильно, подскажите
    #ws = websocket.WebSocketApp("wss://stream.binance.com:9443/stream?streams=LKKK",
    ws = websocket.WebSocketApp("wss://stream.binance.com:9443/ws/LKK",
                              on_message = on_message,
                              on_error = on_error,
                              on_close = on_close)
    print(LKK)
ws.on_open = on_open
ws.run_forever()
 Нихрена не спамит, я ордера открывал-закрывал, что не так????

Изменено пользователем Astra
Ссылка на сообщение
Поделиться на других сайтах

дело было в синтаксисе этой строки, а также еще в нюансах отправки запроса с заголовком при создании листенкей 

09.05.2020 в 01:21, Astra сказал:

ws = websocket.WebSocketApp("wss://stream.binance.com:9443/ws/LKK",

 

Изменено пользователем Astra
Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...