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