import yfinance as yf
import pandas as pd
def get_nifty50_symbols():
# You can fetch Nifty 50 symbols from NSE or any other source
# For this example, I'll use a static list of symbols
return ["ADANIPORTS.NS", "ASIANPAINT.NS", "AXISBANK.NS", "BAJAJ-AUTO.NS", "BAJAJFINSV.NS",
"BAJFINANCE.NS", "BHARTIARTL.NS", "BPCL.NS", "BRITANNIA.NS", "CIPLA.NS", "COALINDIA.NS",
"DIVISLAB.NS", "DRREDDY.NS", "EICHERMOT.NS", "GRASIM.NS", "HCLTECH.NS", "LICI.NS",
"HDFCBANK.NS", "HDFCLIFE.NS", "HEROMOTOCO.NS", "HINDALCO.NS", "HINDUNILVR.NS",
"ICICIBANK.NS", "INDUSINDBK.NS", "INFY.NS", "IOC.NS", "ITC.NS", "JSWSTEEL.NS",
"KOTAKBANK.NS", "LT.NS", "M&M.NS", "MARUTI.NS", "NESTLEIND.NS", "NTPC.NS", "ONGC.NS",
"POWERGRID.NS", "RELIANCE.NS", "SBILIFE.NS", "SBIN.NS", "SHREECEM.NS", "SUNPHARMA.NS",
"TATACONSUM.NS", "TATAMOTORS.NS", "TATASTEEL.NS", "TCS.NS", "TECHM.NS", "TITAN.NS",
"ULTRACEMCO.NS", "UPL.NS", "WIPRO.NS"]
def calculate_momentum(data):
data['1 Year % Change'] = (data['Adj Close'] - data['Adj Close'].shift(252)) / data['Adj Close'].shift(252) * 100
return data
def main():
# Fetch historical data for Nifty 50 stocks
nifty200_symbols = get_nifty50_symbols()
nifty200_data = {}
for symbol in nifty200_symbols:
try:
stock_data = yf.download(symbol, start="2022-06-01", end="2024-06-01")
nifty200_data[symbol] = calculate_momentum(stock_data)
except Exception as e:
print(f"Error fetching data for {symbol}: {e}")
# Calculate momentum for each stock and select top 10
momentum_stocks = []
for symbol, data in nifty200_data.items():
momentum_score = data['1 Year % Change'].iloc[-1]
momentum_stocks.append({'Symbol': symbol, 'Momentum Score': momentum_score})
momentum_df = pd.DataFrame(momentum_stocks)
top_10_momentum_stocks = momentum_df.sort_values(by='Momentum Score', ascending=False).head(10)
top_10_bearish_stocks = momentum_df.sort_values(by='Momentum Score', ascending=True).head(10)
print("Top 10 Momentum Stocks:")
print(top_10_momentum_stocks)
print("Top 10 bearish Stocks:")
print(top_10_bearish_stocks)
if __name__ == "__main__":
main()