Last active
February 3, 2023 23:32
-
-
Save shashankvemuri/c47422683539b43395c29ce7927cec78 to your computer and use it in GitHub Desktop.
Minervini Conditions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Checking Minervini conditions of top 30% of stocks in given list | |
rs_stocks = rs_df['Ticker'] | |
for stock in rs_stocks: | |
try: | |
df = pd.read_csv(f'{stock}.csv', index_col=0) | |
sma = [50, 150, 200] | |
for x in sma: | |
df["SMA_"+str(x)] = round(df['Adj Close'].rolling(window=x).mean(), 2) | |
# Storing required values | |
currentClose = df["Adj Close"][-1] | |
moving_average_50 = df["SMA_50"][-1] | |
moving_average_150 = df["SMA_150"][-1] | |
moving_average_200 = df["SMA_200"][-1] | |
low_of_52week = round(min(df["Low"][-260:]), 2) | |
high_of_52week = round(max(df["High"][-260:]), 2) | |
RS_Rating = round(rs_df[rs_df['Ticker']==stock].RS_Rating.tolist()[0]) | |
try: | |
moving_average_200_20 = df["SMA_200"][-20] | |
except Exception: | |
moving_average_200_20 = 0 | |
# Condition 1: Current Price > 150 SMA and > 200 SMA | |
condition_1 = currentClose > moving_average_150 > moving_average_200 | |
# Condition 2: 150 SMA and > 200 SMA | |
condition_2 = moving_average_150 > moving_average_200 | |
# Condition 3: 200 SMA trending up for at least 1 month | |
condition_3 = moving_average_200 > moving_average_200_20 | |
# Condition 4: 50 SMA> 150 SMA and 50 SMA> 200 SMA | |
condition_4 = moving_average_50 > moving_average_150 > moving_average_200 | |
# Condition 5: Current Price > 50 SMA | |
condition_5 = currentClose > moving_average_50 | |
# Condition 6: Current Price is at least 30% above 52 week low | |
condition_6 = currentClose >= (1.3*low_of_52week) | |
# Condition 7: Current Price is within 25% of 52 week high | |
condition_7 = currentClose >= (.75*high_of_52week) | |
# If all conditions above are true, add stock to exportList | |
if(condition_1 and condition_2 and condition_3 and condition_4 and condition_5 and condition_6 and condition_7): | |
exportList = exportList.append({'Stock': stock, "RS_Rating": RS_Rating ,"50 Day MA": moving_average_50, "150 Day Ma": moving_average_150, "200 Day MA": moving_average_200, "52 Week Low": low_of_52week, "52 week High": high_of_52week}, ignore_index=True) | |
print (stock + " made the Minervini requirements") | |
except Exception as e: | |
print (e) | |
print(f"Could not gather data on {stock}") | |
exportList = exportList.sort_values(by='RS_Rating', ascending=False) | |
print('\n', exportList) | |
writer = ExcelWriter("ScreenOutput.xlsx") | |
exportList.to_excel(writer, "Sheet1") | |
writer.save() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment