Stock Data handling from stock broker websocket in python in streamlit

After connecting to stock brokers server via api we have option to open a data stream via web-socket.
The web-socket pushes data from broker side which gets appended to a variables defined in python.

Is there any way to continue this data-stream in background or at the entry page of Streamlit application , I would like to use the live data received from web-socket into various applications across different pages by querying the python variable where data is getting the flow from web-socket.

Tried starting web-socket on the entry page of my streamlit application, till I remain on the entry page live data is available but the moment i switch to another page the data stream stops.

Any suggestions how to go about.

message variable gets the data stream when specified token is subscribed to web-socket. I have tried pushing this into a session state variable ltpfeed.
When ltpfeed is called from session state at new page in streamlit we do not get any data.

Web-socket related code given below

from time import sleep
from datetime import date
feed_opened = False

All these feed would be for the specified token subscribed to web-socket

ltpfeed={} # last traded price feed

socket_opened=False

orderfeed={} # Order related feed

oifeed={} # open interest feed

def setupsocket(mode,api):
from time import sleep
from datetime import date
import streamlit as st

""" mode:str feed or order"""
feed_opened=False
ltpfeed={}
orderfeed={}


def event_handler_feed_update(message):
    #print(message)
    if (('lp' in message) & ('tk' in message)):
    #timest=datetime.date.frontimestamp(int(tick_data['ft'])).isoformat
        # filter data from feed as per requirement
        ltpfeed[message['tk']]= {'lpt':float(message['lp'])}
        if "zltpfeed" not in st.session_state:    
                st.session_state.zltpfeed=ltpfeed
    #return(ltpfeed)
def event_handler_order_update(tick_data):
    #print(f"Order[update] {tick_data}")
    orderfeed[tick_data['24050300293968']]={'status':tick_data['status']}
    
def open_callback():
    global feed_opened
    feed_opened = True    
    


if mode=='feed' :
    if feed_opened==False:
       api.start_websocket(socket_open_callback=open_callback)  
    api.start_websocket( subscribe_callback=event_handler_feed_update)
elif mode=='order':
    if feed_opened==False:
       api.start_websocket(socket_open_callback=open_callback)
    api.start_websocket( order_update_callback=event_handler_order_update)

while(feed_opened==False):
    pass
return True

Any suggestions welcome.

Pradeep

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.