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 pd

    import 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 e

    data = 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_DB

    threading.Thread(target=sws.connect).start()

    Keep your thread alive

    while True:
    time.sleep(120)
    ========== CODE END =========