from SmartApi import SmartConnect
from SmartApi.smartWebSocketV2 import SmartWebSocketV2
import threading
import pyotp,time
import pandas as pd
from datetime import datetime
import numpy as np
import requests
import websocket
from logzero import logger
from time import localtime,strftime
#websocket required connection varibale
action = 1
mode = 3
token_list = [
{
"exchangeType": 1,
"tokens": ["26009"]
}
]
tick = {}
df = pd.DataFrame()
sws = SmartWebSocketV2(AUTH_TOKEN, api_key, username, feedToken,max_retry_attempt=2, retry_strategy=0, retry_delay=10, retry_duration=30)
def on_data(wsapp, message):
# logger.info("Ticks: {}".format(message))
tick['timestamp'] = datetime.fromtimestamp(message['exchange_timestamp']/1000)
tick['ltp'] = round(float(message['last_traded_price'])/100,2)
# print(tick)
try:
global df
# df_the_dict = pd.DataFrame([tick])
df = pd.concat([df, pd.DataFrame([tick])], ignore_index=True)
currentTime = time.strftime("%Y-%m-%d %H:%M:%S", localtime())
# print(df.tail())
except Exception as e:
print('Error in parsing json : ',e)
# close_connection()
def on_control_message(wsapp, message):
logger.info(f"Control Message: {message}")
# ltp = message[0]['last_traded_price']
# print(ltp)
def on_open(wsapp):
logger.info("on open")
some_error_condition = False
if some_error_condition:
error_message = "Simulated error"
if hasattr(wsapp, 'on_error'):
wsapp.on_error("Custom Error Type", error_message)
else:
sws.subscribe(correlation_id, mode, token_list)
# sws.unsubscribe(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()
# Assign the callbacks.
sws.on_open = on_open
sws.on_data = on_data
sws.on_error = on_error
sws.on_close = on_close
sws.on_control_message = on_control_message
threading.Thread(target = sws.connect).start()
ORB_timeFrame =60
def createOHLC():
try:
start = time.time()
global df
copydf = df.copy(deep=True).drop_duplicates()
df = pd.DataFrame() ![alt text](```
image url
```)
getOHLC_df(copydf)
interval = ORB_timeFrame - (time.time() - start)
print(f"Next check will start after {interval} sec : {datetime.now()}")
threading.Timer(interval, createOHLC).start()
except Exception as e:
print(e)
def getOHLC_df(df):
df_final = pd.DataFrame()
try:
data ={}
data['timestamp'] = df['timestamp'].iloc[0]
data['open']= df['ltp'].iloc[0]
data['low']= df['ltp'].min()
data['high']= df['ltp'].max()
data['close']= df['ltp'].iloc[-1]
df_final = pd.concat([df_final, pd.DataFrame([data])], ignore_index=True)
print(df_final)
except Exception as e:
print(e)
while True:
ns =datetime.now()
interval = ORB_timeFrame - ns.second
print("start in ", interval)
time.sleep(interval)
createOHLC()
`![out put.png](/assets/uploads/files/1708411901588-out-put.png)
J
jdanidhar
@jdanidhar
1
Reputation
1
Posts
1
Profile views
0
Followers
0
Following
Best posts made by jdanidhar
-
geting only one time ohcl data without error after time stamp error
Latest posts made by jdanidhar
-
geting only one time ohcl data without error after time stamp error
from SmartApi import SmartConnect from SmartApi.smartWebSocketV2 import SmartWebSocketV2 import threading import pyotp,time import pandas as pd from datetime import datetime import numpy as np import requests import websocket from logzero import logger from time import localtime,strftime #websocket required connection varibale action = 1 mode = 3 token_list = [ { "exchangeType": 1, "tokens": ["26009"] } ] tick = {} df = pd.DataFrame() sws = SmartWebSocketV2(AUTH_TOKEN, api_key, username, feedToken,max_retry_attempt=2, retry_strategy=0, retry_delay=10, retry_duration=30) def on_data(wsapp, message): # logger.info("Ticks: {}".format(message)) tick['timestamp'] = datetime.fromtimestamp(message['exchange_timestamp']/1000) tick['ltp'] = round(float(message['last_traded_price'])/100,2) # print(tick) try: global df # df_the_dict = pd.DataFrame([tick]) df = pd.concat([df, pd.DataFrame([tick])], ignore_index=True) currentTime = time.strftime("%Y-%m-%d %H:%M:%S", localtime()) # print(df.tail()) except Exception as e: print('Error in parsing json : ',e) # close_connection() def on_control_message(wsapp, message): logger.info(f"Control Message: {message}") # ltp = message[0]['last_traded_price'] # print(ltp) def on_open(wsapp): logger.info("on open") some_error_condition = False if some_error_condition: error_message = "Simulated error" if hasattr(wsapp, 'on_error'): wsapp.on_error("Custom Error Type", error_message) else: sws.subscribe(correlation_id, mode, token_list) # sws.unsubscribe(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() # Assign the callbacks. sws.on_open = on_open sws.on_data = on_data sws.on_error = on_error sws.on_close = on_close sws.on_control_message = on_control_message threading.Thread(target = sws.connect).start() ORB_timeFrame =60 def createOHLC(): try: start = time.time() global df copydf = df.copy(deep=True).drop_duplicates() df = pd.DataFrame() ![alt text](``` image url ```) getOHLC_df(copydf) interval = ORB_timeFrame - (time.time() - start) print(f"Next check will start after {interval} sec : {datetime.now()}") threading.Timer(interval, createOHLC).start() except Exception as e: print(e) def getOHLC_df(df): df_final = pd.DataFrame() try: data ={} data['timestamp'] = df['timestamp'].iloc[0] data['open']= df['ltp'].iloc[0] data['low']= df['ltp'].min() data['high']= df['ltp'].max() data['close']= df['ltp'].iloc[-1] df_final = pd.concat([df_final, pd.DataFrame([data])], ignore_index=True) print(df_final) except Exception as e: print(e) while True: ns =datetime.now() interval = ORB_timeFrame - ns.second print("start in ", interval) time.sleep(interval) createOHLC() `![out put.png](/assets/uploads/files/1708411901588-out-put.png)