First py coding as per my understand but py code error

@Tradehull_Imran
please help, i seen algo trading series and first py coding as per my understand but some error(see image ), any missing or more require code ?
that is code for live trading or not please sagest

i try to coding when ST Green buy a stock and ST res then sell stock

import pdb
from Dhan_Tradehull import Tradehull
import pandas as pd
import talib
import numpy as np
import requests 
from datetime import datetime
from dhanhq import dhanhq


client_id=
access_token=
dhan = dhanhq(client_id, access_token)
tsl = Tradehull(client_id, access_token)
traded_wathclist = []

available_balance = tsl.get_balance()
leveraged_margin  = available_balance*1
#max_trades = 10
#per_trade_margin = (leveraged_margin/max_trades)

#print(available_balance)
watchlist = ['AARTIIND', 'ABB', 'ABBOTINDIA', 'ABCAPITAL', 'ABFRL', 'ACC', 'ADANIENSOL', 'ADANIENT', 'ADANIGREEN', 'ADANIPORTS', 'ADANIPOWER', 'ALKEM', 'AMBUJACEM', 'APLAPOLLO', 'APOLLOHOSP', 'APOLLOTYRE', 'ASHOKLEY', 'ASIANPAINT', 'ASTRAL', 'ATGL', 'ATUL', 'AUBANK', 'AUROPHARMA', 'AXISBANK', 'BAJAJ-AUTO', 'BAJAJFINSV', 'BAJAJHFL', 'BAJAJHLDNG', 'BAJFINANCE', 'BALKRISIND', 'BALRAMCHIN', 'BANDHANBNK', 'BANKBARODA', 'BANKINDIA', 'BATAINDIA', 'BDL', 'BEL', 'BERGEPAINT', 'BHARATFORG', 'BHARTIARTL', 'BHARTIHEXA', 'BHEL', 'BIOCON', 'BOSCHLTD', 'BPCL', 'BRITANNIA', 'BSE', 'BSOFT', 'CANBK', 'CANFINHOME', 'CGPOWER', 'CHAMBLFERT', 'CHOLAFIN', 'CIPLA', 'COALINDIA', 'COCHINSHIP', 'COFORGE', 'COLPAL', 'CONCOR', 'COROMANDEL', 'CROMPTON', 'CUB', 'CUMMINSIND', 'DABUR', 'DALBHARAT', 'DEEPAKNTR', 'DIVISLAB', 'DIXON', 'DLF', 'DMART', 'DRREDDY', 'EICHERMOT', 'ESCORTS', 'ETERNAL', 'EXIDEIND', 'FEDERALBNK', 'GAIL', 'GLENMARK', 'GMRAIRPORT', 'GMRINFRA', 'GNFC', 'GODREJCP', 'GODREJPROP', 'GRANULES', 'GRASIM', 'GUJGASLTD', 'HAL', 'HAVELLS', 'HCLTECH', 'HDFCAMC', 'HDFCBANK', 'HDFCLIFE', 'HEROMOTOCO', 'HINDALCO', 'HINDCOPPER', 'HINDPETRO', 'HINDUNILVR', 'HINDZINC', 'HUDCO', 'HYUNDAI', 'ICICIBANK', 'ICICIGI', 'ICICIPRULI', 'IDEA', 'IDFC', 'IDFCFIRSTB', 'IEX', 'IGL', 'INDHOTEL', 'INDIACEM', 'INDIAMART', 'INDIANB', 'INDIGO', 'INDUSINDBK', 'INDUSTOWER', 'INFY', 'IOC', 'IPCALAB', 'IRB', 'IRCTC', 'IREDA', 'IRFC', 'ITC', 'JINDALSTEL', 'JIOFIN', 'JKCEMENT', 'JSWENERGY', 'JSWSTEEL', 'JUBLFOOD', 'KALYANKJIL', 'KOTAKBANK', 'KPITTECH', 'LALPATHLAB', 'LAURUSLABS', 'LICHSGFIN', 'LICI', 'LODHA', 'LT', 'LTF', 'LTIM', 'LTTS', 'LUPIN', 'M&M', 'M&MFIN', 'MAHABANK', 'MANAPPURAM', 'MANKIND', 'MARICO', 'MARUTI', 'MAXHEALTH', 'MAZDOCK', 'MCX', 'METROPOLIS', 'MFSL', 'MGL', 'MOTHERSON', 'MOTILALOFS', 'MPHASIS', 'MRF', 'MUTHOOTFIN', 'NATIONALUM', 'NAUKRI', 'NAVINFLUOR', 'NESTLEIND', 'NHPC', 'NMDC', 'NTPC', 'NTPCGREEN', 'NYKAA', 'OBEROIRLTY', 'OFSS', 'OIL', 'OLAELEC', 'ONGC', 'PAGEIND', 'PATANJALI', 'PAYTM', 'PEL', 'PERSISTENT', 'PETRONET', 'PFC', 'PHOENIXLTD', 'PIDILITIND', 'PIIND', 'PNB', 'POLICYBZR', 'POLYCAB', 'POWERGRID', 'PREMIERENE', 'PRESTIGE', 'PVRINOX', 'RAMCOCEM', 'RBLBANK', 'RECLTD', 'RELIANCE', 'RVNL', 'SAIL', 'SBICARD', 'SBILIFE', 'SBIN', 'SHREECEM', 'SHRIRAMFIN', 'SIEMENS', 'SJVN', 'SOLARINDS', 'SONACOMS', 'SRF', 'SUNPHARMA', 'SUNTV', 'SUPREMEIND', 'SUZLON', 'SWIGGY', 'SYNGENE', 'TATACHEM', 'TATACOMM', 'TATACONSUM', 'TATAELXSI', 'TATAMOTORS', 'TATAPOWER', 'TATASTEEL', 'TATATECH', 'TCS', 'TECHM', 'TIINDIA', 'TITAN', 'TORNTPHARM', 'TORNTPOWER', 'TRENT', 'TVSMOTOR', 'UBL', 'ULTRACEMCO', 'UNIONBANK', 'UNITDSPR', 'UPL', 'VBL', 'VEDL', 'VMM', 'VOLTAS', 'WAAREEENER', 'WIPRO', 'YESBANK', 'ZYDUSLIFE']
ltp_data = tsl.get_ltp (name = watchlist )
 

def get_holdings(dhan):
    data_holdings = dhan.get_holdings()
    holdings = pd.DataFrame (data_holdings['data'])
    #holdings.to_csv('holdings.csv')
    #print(data_holdings)
    return holdings

def get_position(dhan):
    data_position = dhan.get_position()
    position = pd.DataFrame (data_position['data'])
    #holdings.to_csv('holdings.csv')
    #print(data_position)
    return position 


#Place an order for Equity Cash
def get_exchange (dhan, exchange):
    if exchange == "NSE":
        return dhan.NSE
    elif exchange == 'BSE':
        return dhan.BSE
def get_side (dhan, side):
    if side == "BUY":
        return dhan.BUY
    elif side == 'SELL':
        return dhan.SELL
    
def get_order_type(dhan, order_type):
    if order_type == "MARKET" :
        return dhan.MARKET
    elif order_type == 'LIMIT':
        return dhan.LIMIT
    
def place_order(dhan, symbol, exchange, side, quantity, order_type, price):
    exchange_segment = get_exchange(dhan, exchange)
    side_enum = get_side(dhan, side)
    quantity = int(available_balance/ ltp_price)
    order_type = get_order_type(dhan, order_type)
    price = 0
    return place_order



def get_orders(dhan):
    data = dhan.get_order_list()
    positions = pd.DataFrame(data['data'])
    return positions  

def get_intrument_token():
        df = pd.read_csv('api-scrip-master.csv')
        data_dict={}
        for index, row in df.iterrows():
            trading_symbol = row['SEM_TRADING_SYMBOL']
        exm_exch_id = row['SEM_EXM_EXCH_ID']
        if trading_symbol not in data_dict :
            data_dict [trading_symbol] = {}
        data_dict [trading_symbol] [exm_exch_id] = row.to_dict()
        return data_dict
def get_nse_200():
    # Replace this with static NSE200 list or dynamic scraper/API
    return ['AARTIIND', 'ABB', 'ABBOTINDIA', 'ABCAPITAL', 'ABFRL', 'ACC', 'ADANIENSOL', 'ADANIENT', 'ADANIGREEN', 'ADANIPORTS', 'ADANIPOWER', 'ALKEM', 'AMBUJACEM', 'APLAPOLLO', 'APOLLOHOSP', 'APOLLOTYRE', 'ASHOKLEY', 'ASIANPAINT', 'ASTRAL', 'ATGL', 'ATUL', 'AUBANK', 'AUROPHARMA', 'AXISBANK', 'BAJAJ-AUTO', 'BAJAJFINSV', 'BAJAJHFL', 'BAJAJHLDNG', 'BAJFINANCE', 'BALKRISIND', 'BALRAMCHIN', 'BANDHANBNK', 'BANKBARODA', 'BANKINDIA', 'BATAINDIA', 'BDL', 'BEL', 'BERGEPAINT', 'BHARATFORG', 'BHARTIARTL', 'BHARTIHEXA', 'BHEL', 'BIOCON', 'BOSCHLTD', 'BPCL', 'BRITANNIA', 'BSE', 'BSOFT', 'CANBK', 'CANFINHOME', 'CGPOWER', 'CHAMBLFERT', 'CHOLAFIN', 'CIPLA', 'COALINDIA', 'COCHINSHIP', 'COFORGE', 'COLPAL', 'CONCOR', 'COROMANDEL', 'CROMPTON', 'CUB', 'CUMMINSIND', 'DABUR', 'DALBHARAT', 'DEEPAKNTR', 'DIVISLAB', 'DIXON', 'DLF', 'DMART', 'DRREDDY', 'EICHERMOT', 'ESCORTS', 'ETERNAL', 'EXIDEIND', 'FEDERALBNK', 'GAIL', 'GLENMARK', 'GMRAIRPORT', 'GMRINFRA', 'GNFC', 'GODREJCP', 'GODREJPROP', 'GRANULES', 'GRASIM', 'GUJGASLTD', 'HAL', 'HAVELLS', 'HCLTECH', 'HDFCAMC', 'HDFCBANK', 'HDFCLIFE', 'HEROMOTOCO', 'HINDALCO', 'HINDCOPPER', 'HINDPETRO', 'HINDUNILVR', 'HINDZINC', 'HUDCO', 'HYUNDAI', 'ICICIBANK', 'ICICIGI', 'ICICIPRULI', 'IDEA', 'IDFC', 'IDFCFIRSTB', 'IEX', 'IGL', 'INDHOTEL', 'INDIACEM', 'INDIAMART', 'INDIANB', 'INDIGO', 'INDUSINDBK', 'INDUSTOWER', 'INFY', 'IOC', 'IPCALAB', 'IRB', 'IRCTC', 'IREDA', 'IRFC', 'ITC', 'JINDALSTEL', 'JIOFIN', 'JKCEMENT', 'JSWENERGY', 'JSWSTEEL', 'JUBLFOOD', 'KALYANKJIL', 'KOTAKBANK', 'KPITTECH', 'LALPATHLAB', 'LAURUSLABS', 'LICHSGFIN', 'LICI', 'LODHA', 'LT', 'LTF', 'LTIM', 'LTTS', 'LUPIN', 'M&M', 'M&MFIN', 'MAHABANK', 'MANAPPURAM', 'MANKIND', 'MARICO', 'MARUTI', 'MAXHEALTH', 'MAZDOCK', 'MCX', 'METROPOLIS', 'MFSL', 'MGL', 'MOTHERSON', 'MOTILALOFS', 'MPHASIS', 'MRF', 'MUTHOOTFIN', 'NATIONALUM', 'NAUKRI', 'NAVINFLUOR', 'NESTLEIND', 'NHPC', 'NMDC', 'NTPC', 'NTPCGREEN', 'NYKAA', 'OBEROIRLTY', 'OFSS', 'OIL', 'OLAELEC', 'ONGC', 'PAGEIND', 'PATANJALI', 'PAYTM', 'PEL', 'PERSISTENT', 'PETRONET', 'PFC', 'PHOENIXLTD', 'PIDILITIND', 'PIIND', 'PNB', 'POLICYBZR', 'POLYCAB', 'POWERGRID', 'PREMIERENE', 'PRESTIGE', 'PVRINOX', 'RAMCOCEM', 'RBLBANK', 'RECLTD', 'RELIANCE', 'RVNL', 'SAIL', 'SBICARD', 'SBILIFE', 'SBIN', 'SHREECEM', 'SHRIRAMFIN', 'SIEMENS', 'SJVN', 'SOLARINDS', 'SONACOMS', 'SRF', 'SUNPHARMA', 'SUNTV', 'SUPREMEIND', 'SUZLON', 'SWIGGY', 'SYNGENE', 'TATACHEM', 'TATACOMM', 'TATACONSUM', 'TATAELXSI', 'TATAMOTORS', 'TATAPOWER', 'TATASTEEL', 'TATATECH', 'TCS', 'TECHM', 'TIINDIA', 'TITAN', 'TORNTPHARM', 'TORNTPOWER', 'TRENT', 'TVSMOTOR', 'UBL', 'ULTRACEMCO', 'UNIONBANK', 'UNITDSPR', 'UPL', 'VBL', 'VEDL', 'VMM', 'VOLTAS', 'WAAREEENER', 'WIPRO', 'YESBANK', 'ZYDUSLIFE']  # Sample

def get_historical_data(symbol):
    endpoint = f"{BASE_URL}/market/v1/instruments/history"
    params = {
        "symbol": symbol,
        "exchange": "NSE",
        "segment": "EQUITY",
        "instrument": symbol,
        "interval": "1d",
        # "from": datetime (%day,%month,%year)
        # "to": "2025-09-08"
    }
    headers = {"access-token": ACCESS_TOKEN, "Client-Id": CLIENT_ID}
    res = requests.get(endpoint, headers=headers, params=params)
    data = res.json().get("data", [])
    df = pd.DataFrame(data)
    df.rename(columns={"open": "Open", "high": "High", "low": "Low", "close": "Close"}, inplace=True)
    return df
def calculate_supertrend(df, period=10, multiplier=3):
    supertrend = Supertrend(high=df["High"], low=df["Low"], close=df["Close"],
                            period=period, multiplier=multiplier)
    df["supertrend"] = supertrend.supertrend()
    df["supertrend_direction"] = supertrend.supertrend_direction()
    return df

def generate_signal(df):
    if df["supertrend_direction"].iloc[-1] and not df["supertrend_direction"].iloc[-2]:
        return "BUY"
    elif not df["supertrend_direction"].iloc[-1] and df["supertrend_direction"].iloc[-2]:
        return "SELL"
    else:
        return "HOLD"


    
    def check_and_trade():
        global STOCKS
    STOCKS = get_nse_200()
    for symbol in STOCKS:
            df = get_historical_data(symbol)
            df = calculate_supertrend(df)

            signal = generate_signal(df)
            last_close = df["Close"].iloc[-1]
            atr = df["High"].iloc[-1] - df["Low"].iloc[-1]
            qty = int((leveraged_margin) // last_close)

            if signal == "BUY":
                sl = min(last_close - atr, last_close)
                place_order(symbol, "BUY", qty, sl, tp)
            elif signal == "SELL":
                sl = max(last_close + atr, last_close * 1.01)
                place_order(symbol, "SELL", qty, sl, tp)
            else:
                print(f"{symbol}: No trade signal.")
![Screenshot 2025-09-21 170640|690x236](upload://753DyINxTc8sTNuEaKw0BowULlH.png)
[quote="Amit_Kumar7, post:1, topic:56147, full:true"]
Please help me to download and install the TA-lib file. I'm getting this error when I
![TA_lib |690x113](upload://rfS7uTYbTGN6HDuBxSQVSnxwnLB.png)
 run my code in my terminal. Please help.
[/quote]


Hi @DKS ,

Thanks for bringing this up. @Tradehull_Imran may be able to assist here

1 Like