indian market stock analysis

indian market stock analysis

import yfinance as yf
import numpy as np
import warnings

warnings.filterwarnings("ignore")

stocks_list = {
    "Reliance Industries": "RELIANCE.NS",
    "HDFC Bank": "HDFCBANK.NS",
    "ICICI Bank": "ICICIBANK.NS",
    "Tata Consultancy Services": "TCS.NS",
    "Infosys": "INFY.NS",
    "State Bank of India": "SBIN.NS",
    "Larsen & Toubro": "LT.NS",
    "Hindustan Unilever": "HINDUNILVR.NS",
    "Bharti Airtel": "BHARTIARTL.NS",
    "Bajaj Finance": "BAJFINANCE.NS",
    "Axis Bank": "AXISBANK.NS",
    "Maruti Suzuki": "MARUTI.NS",
    "Tata Steel": "TATASTEEL.NS",
    "Oil & Natural Gas Corporation": "ONGC.NS",
    "UltraTech Cement": "ULTRACEMCO.NS",
    "Mahindra & Mahindra": "M&M.NS",
    "Asian Paints": "ASIANPAINT.NS",
    "Titan Company": "TITAN.NS",
    "Nestle India": "NESTLEIND.NS",
    "Sun Pharma": "SUNPHARMA.NS",
    "Wipro": "WIPRO.NS",
    "Adani Enterprises": "ADANIENT.NS",
    "Adani Ports": "ADANIPORTS.NS",
    "Power Grid Corporation": "POWERGRID.NS",
    "Tech Mahindra": "TECHM.NS",
    "Coal India": "COALINDIA.NS",
    "HCL Technologies": "HCLTECH.NS",
    "NTPC": "NTPC.NS",
    "Tata Motors": "TATAMOTORS.NS",
    "Grasim Industries": "GRASIM.NS",
}


# If i were to buy one unit every day, what would be my daily investment, daily profit / loss, net profit / loss for the 3 month period


def display_results(rv: dict):
    print("=" * 100)

    print(f"Stock Name: {rv['stock_name']}")
    print(f"Stock Symbol: {rv['stock_symbol']}")

    print(f"Profit Days Ct : {rv['profit_days_ct']}")
    print(f"Loss Days Ct : {rv['loss_days_ct']}")

    print(f"Profit Amount : {rv['profit_amount']}")
    print(f"Loss Amount   : {rv['loss_amount']}")

    profit_amount = rv["profit_amount"]
    loss_amount = rv["loss_amount"]

    net = 0
    if profit_amount > loss_amount:
        net = profit_amount - abs(loss_amount)
    else:
        net = abs(loss_amount) - profit_amount

    print(f"Net : {net}")
    print("=" * 100)

    return


def compute(stock_name, stock_symbol):
    tcs = yf.download(stock_symbol, period="6mo")
    df = tcs.stack()

    # add daily investment column.
    df["Buy Price"] = df["Open"]
    df["Daily Change"] = df["Close"] - df["Open"]
    df["Profit / Loss"] = np.where(df["Daily Change"] > 0, "Profit", "Loss")
    profit_days_ct = sum(df["Profit / Loss"] == "Profit")
    loss_days_ct = sum(df["Profit / Loss"] == "Loss")
    profit_amount = df.loc[df["Daily Change"] > 0, "Daily Change"].sum()
    loss_amount = df.loc[df["Daily Change"] < 0, "Daily Change"].sum()

    data = {
        "stock_name": stock_name,
        "stock_symbol": stock_symbol,
        "df": df,
        "profit_days_ct": profit_days_ct,
        "loss_days_ct": loss_days_ct,
        "profit_amount": profit_amount,
        "loss_amount": loss_amount,
    }
    display_results(data)


for stock_name, stock_symbol in stocks_list.items():
    compute(stock_name, stock_symbol)