Getting delay response from websocket 2
-
Hello,
Could you please let me know that anyone experiencing data retrieve delay from Samrt API.
Because I am facing this issue from last few days. Just giving one sample today's data for your information.
[I 250123 10:03:39 main_new:199] Ticks: {'subscription_mode': 2, 'exchange_type': 2, 'token': '126550', 'sequence_number': 6822265, 'exchange_timestamp': 1737606066000, 'last_traded_price': 2500, 'subscription_mode_val': 'QUOTE', 'last_traded_quantity': 125, 'average_traded_price': 4064, 'volume_trade_for_the_day': 432500, 'total_buy_quantity': 53000.0, 'total_sell_quantity': 43875.0, 'open_price_of_the_day': 9330, 'high_price_of_the_day': 9335, 'low_price_of_the_day': 2020, 'closed_price': 9130}
This "[I 250123 10:03:39 main_new:199]" part is our system date and time. After ticks is from Smart API return data. when I convert exchange timestamp value, I am getting "09:51:06".
I am little bit confused. I am getting 9:51:06 data at 10:03:39.
Is there any issue in Smart API today.
Please find my attached code, please le me know, is there any mistake while calling socket. I am new in algo.
========== CODE START ========
import threading
from SmartApi import SmartConnect # or from SmartApi.smartConnect import SmartConnect
import pyotp
from logzero import logger
from SmartApi.smartWebSocketV2 import SmartWebSocketV2
import pandas as pdimport time
from Technical_Analysis_new import *
from datetime import datetime
from Resource import *
import log===== Members Table START ==============
conn = create_connection("DEFAULT")
cur = conn.cursor()
cur.execute("SELECT name,access_token FROM members where status='Active'")
members_data = cur.fetchall()default_list = default_config_value_collect_new()
start_time=default_list[4]
end_time=default_list[5]
symbol_details_list = default_symbol_value_collect_new()
symbols = symbol_details_list[0]======= Angel Broking Smart API Data fetch START ===================
api_key = 'RBjhSNNt'
username = 'J000000'
pwd = '0000'
smartApi = SmartConnect(api_key)try:
token = "XXXXXXXXXXXXXXXXXXXXXXXXX"
totp = pyotp.TOTP(token).now()
except Exception as e:
logger.error("Invalid Token: The provided token is not valid.")
raise edata = smartApi.generateSession(username, pwd, totp)
if data['status'] == False:
logger.error(data)else:
authToken = data['data']['jwtToken']
refreshToken = data['data']['refreshToken']
feedToken = smartApi.getfeedToken()correlation_id = "abc123" action = 1 mode = 2
tokenlist=[]
symbols are coming from our database
token_list1 = [
{
"exchangeType": 2,
"tokens": symbols
}
]sws = SmartWebSocketV2(authToken, api_key, username, feedToken)
def on_data(wsapp, message):
for ii in symbols:
if (message['token'] == ii):
Exch_Token=message['token']
Exch_Date_Time=datetime.fromtimestamp(message['exchange_timestamp']/1000).strftime('%Y-%m-%d %H:%M:%S')
Exch_LTP=float(message['last_traded_price']/100)
current_Time=(datetime.fromtimestamp(message['exchange_timestamp']/1000).strftime('%H'))+(datetime.fromtimestamp(message['exchange_timestamp']/1000).strftime('%M'))
# inserting data into database
Data_Insert_In_DB(wsapp,current_Time,Exch_Date_Time,Exch_LTP,Exch_Token)def on_open(wsapp):
logger.info("on open")
sws.subscribe(correlation_id, mode, token_list1)def on_error(wsapp, error):
logger.error(error)def on_close(wsapp):
logger.info("Close")def close_connection():
sws.close_connection()def Data_Insert_In_DB(wsapp,current_Time,Exch_Date_Time,Exch_LTP,Exch_Token):
try:
if int(current_Time) >= int(end_time):
else:
if int(current_Time) >= start_time:
data = {'datetime_val': [Exch_Date_Time],
'close_val': [Exch_LTP],
'token': [Exch_Token]}# Create DataFrame dfdata = pd.DataFrame(data) ".......more code and execute trade here" except Exception as e: exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] log.log_message(str(exc_type) + ", " + fname + ", " + str(exc_tb.tb_lineno)) print(exc_type, fname, exc_tb.tb_lineno)
sws.on_open = on_open
sws.on_data = on_data
sws.on_error = on_error
sws.on_close = on_close
sws.Data_Insert_In_DB = Data_Insert_In_DBthreading.Thread(target=sws.connect).start()
Keep your thread alive
while True:
time.sleep(120)
========== CODE END =========