from Zerodha_Tradehull import Tradehull
from rich import print
import os
import talib
import pandas as pd
import pandas_ta as pta
import datetime
import time
import xlwings as xw
import pdb
import numpy as np
import pickle
api_key = ""
api_secret = ""
tsl = Tradehull(api_key, api_secret, "yes")
kite = tsl.kite
# ----------------------------------------------Connection with Telegrame-------------------------
bot_token = ""
receiver_chat_id = ""
# ----------------------------------------------Connection with Excel-----------------------------
book = xw.Book('User_Interface_Stock.xlsx')
sheet = book.sheets['Live Orderbook']
c_sht = book.sheets['Completed_Orderbook']
s_con = book.sheets['Strategy']
# ------------------------------------------- Start : Pre market scanning ---------------------
watchlist = [x for x in set(s_con.range("A2:A60").value)]
watchlist = [x for x in watchlist if x is not None]
traded_watchlist = []
print(watchlist)
status = {'Stock_Name':None , 'Ltp' :None, 'Date':None , 'Entry_Time': None, 'Entry_Price': None, 'Buy-Sell_Signal': None, 'Quantity': None, 'Stoploss': None,
'Target': None, 'Exit_Time': None, 'Exit_Price': None, 'Profit_Loss': None, 'Remark': None, 'Traded':None, "Entry_Order_Id":None,
"Stoploss_Order_Id":None}
orderbook = {}
reentry = "Yes" #"Yes/No"
completed_orderbook = []
current_time = datetime.datetime.now().time()
for name in watchlist:
orderbook[name] = status.copy()
sheet.range('A1:Z100').value = None
c_sht.range('A1:Z100').value = None
s_con.range('B6').value = None
first_day = False
if not first_day:
orderbook = pickle.load(open("orderbook.pkl", "rb"))
trades_in_progress = [x['underlying_name'] for x in orderbook.values() if x['traded'] is not None]
initial_capital = 100000
# ------------------------------------------- Indicator Parameters ---------------------
short_SUPT_len = 10
short_SUPT_mult = 2
long_SUPT_len = 21
long_SUPT_mult = 4
while True:
current_dtime = datetime.datetime.now()
if current_dtime.time() < datetime.time(8,00):
print(f"Wait for market to start", current_dtime)
continue
watchlist = set([x for x in set(s_con.range("A2:A60").value)] + trades_in_progress)
live_pnl = tsl.get_live_pnl()
market_over = current_time > datetime.time(15,00)
if market_over:
print(f"Market over Closing all trades !! Bye Bye See you Tomorrow", current_dtime)
# tsl.market_over_close_all_order()
os.makedirs(f'Logs/{str(current_dtime.date())}', exist_ok=True)
odf.to_csv(f'Logs/{str(current_dtime.date())}/odf.csv', index=True)
pd.DataFrame(kite.orders()).to_csv(f'Logs/{str(current_dtime.date())}/orders.csv', index=True)
pd.DataFrame(kite.positions()).to_csv(f'Logs/{str(current_dtime.date())}/positions.csv', index=True)
pickle.dump(orderbook, open(f'orderbook.pkl', "wb"))
break
for name in watchlist:
odf = pd.DataFrame(orderbook).T
sheet.range('A1').value = odf
c_sht.range('A1').value = pd.DataFrame(completed_orderbook)
current_time = datetime.datetime.now()
print(f"Scanning..........{name}")
data = tsl.get_quote_data(names=name)
data = {name : {"name": name.split(":")[0], "prev_close":data[name]['ohlc']['close'], "ltp":data[name]['last_price']} for name, value in data.items()}
ltp = data[name]['ltp']
chart = tsl.get_short_term_hist_data(name=name, exchange="NSE", interval=60, oi = True)
chart_ha = pd.convert_heikin_ashi(chart)
indi_Short = pta.supertrend(chart_ha['high'], chart_ha['low'], chart_ha['close'], length=short_SUPT_len, multiplier=short_SUPT_mult)
chart_ha = pd.concat([chart_ha, indi_Short], axis=1, join='inner')
st1_col, st1d_col, st1l_col, st1s_col = indi_Short.columns
indi_Long = pta.supertrend(chart_ha['high'], chart_ha['low'], chart_ha['close'], length=long_SUPT_len, multiplier=long_SUPT_mult)
chart_ha = pd.concat([chart_ha, indi_Long], axis=1, join='inner').round(2)
st2_col, st2d_col, st2l_col, st2s_col = indi_Long.columns
comp_candle = chart_ha.iloc[-2]
prev_candle = chart_ha.iloc[-3]
Traded = orderbook[name]['Traded']
quantity = int(initial_capital/ltp)
bc1 = comp_candle[st1d_col] == 1
bc2 = comp_candle[st2d_col] == 1
bc3 = (ltp > comp_candle['high'])
bc4 = Traded is None
sc1 = comp_candle[st1d_col] == -1
sc2 = comp_candle[st2d_col] == -1
sc3 = (ltp < comp_candle['low'])
sc4 = Traded is None
if bc1 and bc2 and bc3 and bc4:
Entry_Order_Id = tsl.place_order(variety="regular", exchange='NSE', tradingsymbol=name, transaction_type='BUY', quantity=quantity, product="MIS", order_type="MARKET")
Entry_Price = tsl.get_executed_price(order_id = Entry_Order_Id)
message = f"Traded in {name} \nQuantity {quantity} \nPrice {Entry_Price}"
tsl.send_telegram_alert(message=message,receiver_chat_id=receiver_chat_id,bot_token=bot_token)
orderbook[name]['Stock_Name'] = name
orderbook[name]['Date'] = str(current_time.date())
orderbook[name]['Entry_Time'] = str(current_time.time())[:8]
orderbook[name]['Entry_Order_Id'] = Entry_Order_Id
orderbook[name]['Entry_Price'] = Entry_Price
orderbook[name]['Quantity'] = quantity
orderbook[name]['Buy-Sell_Signal'] = 'BUY'
orderbook[name]['Traded'] = "Yes"
if sc1 and sc2 and sc3 and sc4:
Entry_Order_Id = tsl.place_order(variety="regular", exchange='NSE', tradingsymbol=name, transaction_type='SELL', quantity=quantity, product="MIS", order_type="MARKET")
Entry_Price = tsl.get_executed_price(order_id = Entry_Order_Id)
message = f"Traded in {name} \nQuantity {quantity} \nPrice {Entry_Price}"
tsl.send_telegram_alert(message=message,receiver_chat_id=receiver_chat_id,bot_token=bot_token)
orderbook[name]['Stock_Name'] = name
orderbook[name]['Date'] = str(current_time.date())
orderbook[name]['Entry_Time'] = str(current_time.time())[:8]
orderbook[name]['Entry_Order_Id'] = Entry_Order_Id
orderbook[name]['Entry_Price'] = Entry_Price
orderbook[name]['Quantity'] = quantity
orderbook[name]['Buy-Sell_Signal'] = 'BUY'
orderbook[name]['Traded'] = "Yes"
# ------------------------------------------- Exit & Traling ---------------------
if orderbook[name]['Traded']:
bought = orderbook[name]['Buy-Sell_Signal'] == 'BUY'
sold = orderbook[name]['Buy-Sell_Signal'] == 'SELL'
# ------------------------------------------- Check on Exit ---------------------
if bought:
supertrend_change_1 = comp_candle[st1d_col] == -1 or comp_candle[st2d_col] == 1
if supertrend_change_1:
orderbook[name]['remark'] = "Target Buy-Hit"
Exit_Order_Id = tsl.place_order(variety="regular", exchange='NSE', tradingsymbol=name, transaction_type='SELL', quantity=quantity, product="MIS", order_type="MARKET")
orderbook[name]['Exit_Time'] = tsl.get_exchange_time(orderid=orderbook[name]['Exit_Order_Id'])
orderbook[name]['Exit_Price'] = tsl.get_executed_price(orderid=orderbook[name]['Exit_Order_Id'])
orderbook[name]['Profit_Loss'] = (orderbook[name]['Entry_Price'] - orderbook[name]['Exit_Price'])*orderbook[name]['Quantity']
if reentry:
completed_orderbook.append(orderbook[name])
orderbook[name] = status.copy()
if sold:
supertrend_change_1 = comp_candle[st1d_col] == 1 or comp_candle[st2d_col] == -1
if supertrend_change_1:
orderbook[name]['remark'] = "Target Sell-Hit"
modified_order_id = tsl.modify_order(order_id=orderbook[name]['Stoploss_Order_Id'],order_type='MARKET',quantity=None,price=None,trigger_price=None)
orderbook[name]['Exit_Time'] = tsl.get_exchange_time(orderid=orderbook[name]['Stoploss_Order_Id'])
orderbook[name]['Exit_Price'] = tsl.get_executed_price(orderid=orderbook[name]['Stoploss_Order_Id'])
orderbook[name]['Profit_Loss'] = (orderbook[name]['Entry_Price'] - orderbook[name]['Exit_Price'])*orderbook[name]['Quantity']
if reentry:
completed_orderbook.append(orderbook[name])
orderbook[name] = status.copy()
PS C:\Users\HP\OneDrive\Working Algo\Test_Algo_DST> & C:/Users/HP/AppData/Local/Programs/Python/Python38/python.exe "c:/Users/HP/OneDrive/Working Algo/Test_Algo_DST/Double-ST_Zerodha.py"
Zerodha CodeBase Version 1.0.3
Traceback (most recent call last):
File "c:/Users/HP/OneDrive/Working Algo/Test_Algo_DST/Double-ST_Zerodha.py", line 1, in <module>
from Zerodha_Tradehull import Tradehull
File "C:\Users\HP\AppData\Local\Programs\Python\Python38\lib\site-packages\Zerodha_Tradehull\__init__.py", line 1, in <module>
from .Zerodha_Tradehull import Tradehull
ImportError: cannot import name 'Tradehull' from 'Zerodha_Tradehull.Zerodha_Tradehull' (C:\Users\HP\AppData\Local\Programs\Python\Python38\lib\site-packages\Zerodha_Tradehull\Zerodha_Tradehull.py)
PS C:\Users\HP\OneDrive\Working Algo\Test_Algo_DST>
Hi @tarsharm20 ,
Code seems to be right, but make sure same name file Zerodha_Tradehull.py does not exist in the current folder.