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

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

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

Здравствуйте,

подскажите пожалуйста, можно ли отслеживать состояние конкретного ордера вебсокетами?

Поделиться сообщением


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

спасибо, я это подозревал)) а может быть кто нибудь из местных реализовал? помогите плз с примерчиком

Поделиться сообщением


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

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

Сначала надо отправить обычный запрос (такой же, как и другие в 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>

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

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

Поделиться сообщением


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

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

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

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

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()
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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

Поделиться сообщением


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

Для начала по дружески ключи поменяй, а то вся страна их уже увидела )))

Поделиться сообщением


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

я ожидал подобного комментария (что ответ будет не по делу) этот ключ чисто для листен, там нету прав никаких, но на всякий случай удалил его )

 

Изменено пользователем 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 эмодзи.

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

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

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


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