import yfinance as yf
import pandas as pd
# List of Nifty 50 stocks
nifty50_stocks = ["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"]
# Function to calculate momentum
def calculate_momentum(stock_data):
# Calculate momentum using 20-day and 50-day moving averages
stock_data['20_MA'] = stock_data['Close'].rolling(window=20).mean()
stock_data['50_MA'] = stock_data['Close'].rolling(window=50).mean()
# Check if 20-day moving average is greater than 50-day moving average
stock_data['Signal'] = stock_data['20_MA'] > stock_data['50_MA']
# Calculate momentum score
stock_data['Momentum_Score'] = stock_data['Signal'].astype(int)
# Calculate the change in price over the last 10 days
stock_data['Price_Change'] = stock_data['Close'].pct_change(periods=10)
return stock_data
# Fetch data for each stock and calculate momentum
momentum_data = []
for stock in nifty50_stocks:
try:
stock_data = yf.download(stock, start="2022-01-01", end="2024-05-01")
stock_data = calculate_momentum(stock_data)
momentum_score = stock_data['Momentum_Score'][-1] # Get momentum score for the last date
price_change = stock_data['Price_Change'][-1] # get price change for the last date
momentum_data.append({'Stock': stock, 'Momentum_Score': momentum_score, 'Price_Change': price_change})
except Exception as e:
print(f"Error fetching data for {stock}: {e}")
# Create DataFrame from momentum data
momentum_df = pd.DataFrame(momentum_data)
# Sort stocks based on momentum score and price change
momentum_df = momentum_df.sort_values(by=['Momentum_Score', 'Price_Change'], ascending=False)
# Select top 10 momentum stocks
top_10_momentum_stocks = momentum_df.head(10)
print("Top 10 Momentum Stocks:")
print(top_10_momentum_stocks)