DEV Community

Cover image for Pybit v5 how to subscribe to websocket topics
Kyle Foo
Kyle Foo

Posted on β€’ Edited on

1

Pybit v5 how to subscribe to websocket topics

Well, in one of my previous post, I talked about Pybit's v2 API, and we are now at v5!

Quite some breaking updates we are expecting especially the parameters' format change for most APIs, basically it is changed from under_score to snakeCase. Upgrading it would make life easier down the road since the v5 documentations that are being maintained are much readable and informed. And of course, good amount of improvements come with it. See change log

Below is an example of using Pybit API to subscribe to account's order stream, so that we can trigger callback handler base on its socket events:

from pybit.unified_trading import HTTP
from pybit.unified_trading import WebSocket

api_key = os.environ.get("BYBIT_API_KEY")
api_secret = os.environ.get("BYBIT_API_SECRET")

class AlgoOrderStream:
    def __init__(self, trading_pair):
        self.trading_pair = trading_pair
        self.session = HTTP(testnet=True, api_key=api_key, api_secret=api_secret)
        print("Initialized ORDER_WEBSOCKET_STREAM")

    # callback handler when socket event triggers
    def handle_order_stream(self, message):
        data = message["data"]
        print(data)
        # You can see the changed order data here and perform action, below is just a example action
        # If Long position filled, place a conditional Short order
        if data[0]['side'] == 'Buy' and data[0]['orderStatus'] == 'Filled' :
            self.session.place_order(
                category="linear",
                symbol=self.trading_pair,
                side="Sell",
                orderType="Market",
                qty=0.01, # quantity
                triggerDirection=1, #triggered when market price rises to triggerPrice
                triggerPrice="YourPriceTarget",
                triggerBy="LastPrice",
                positionIdx=0,
                stopLoss="CutLossPrice",
                slTriggerBy="LastPrice",
            )

class AlgoBot:
    def __init__(self, trading_pair):
        self.trading_pair = trading_pair
        # initialize websocket instance and point to private topic -> your order stream
        self.ws = WebSocket(
            testnet=True,
            channel_type="private",
            api_key=api_key,
            api_secret=api_secret,
            trace_logging=True,
            restart_on_error=True
        )

    def start():
        orderStream = AlgoOrderStream(trading_pair=self.trading_pair)
        self.ws.order_stream(
            callback=orderStream.handle_order_stream
        )
Enter fullscreen mode Exit fullscreen mode
algoBot = AlgoBot(trading_pair="BTCUSDT")
algoBot.start()

Enter fullscreen mode Exit fullscreen mode

** Notice that the callback will only fire when there's updates to your order stream, do trigger order change manually for testing purpose.

Do your career a big favor. Join DEV. (The website you're on right now)

It takes one minute, it's free, and is worth it for your career.

Get started

Community matters

Top comments (2)

Collapse
 
mrshoja profile image
karen & kavan β€’

Hi there, I have a question about my below code that related to your post.
I wanna create order on Bybit Future but i got error. help me please

from pybit.unified_trading import HTTP
session = HTTP(
testnet=True,
api_key=api_key,
api_secret=api_secret,
)

print(session.place_order(
category="linear",
symbol="BTCUSDT",
side="Buy",
orderType="market",
qty="0.001",
timeInForce="GTC",
reduceOnly=False,
))

Error:
param_str = str(timestamp) + api_key + str(recv_window) + payload
TypeError: can only concatenate str (not "tuple") to str

Collapse
 
kylefoo profile image
Kyle Foo β€’ β€’ Edited

@mrshoja According to v5 source code, i think your code fails here:
github.com/bybit-exchange/pybit/bl...

is your api_key in string format? or it might be the payload

might wanna trace from this place_order call: github.com/bybit-exchange/pybit/bl...

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

πŸ‘‹ Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay