카테고리 없음
NASDAQ100 stock screener for bullish trend - python, yfinance
전문 컨설턴트
2024. 11. 4. 14:24
Purpose:
to screen stockers that have bullish trend
Definition:
- bullish trend: The stock's short-term simple moving average (SMA) is greater than its medium-term SMA and its medium-term SMA is greater than its long-term SMA.
- simple moving average: an average of close price for a given window.
- short-term SMA: SMA for 5 trading days (1 week)
- medium-term SMA: SMA for 20 trading days (1 month)
- long-term SMA: SMA for 60 trading days (3 month)
Theory:
Stocks that have a bullish trend have 80% possibility of going up
Getting Simple Moving Averages for Each Ticker:
data = yf.download(ticker, period="6mo")
short_window = 5 # Short-term SMA (e.g., 20 days)
medium_window = 20 # Medium-term SMA (e.g., 60 days)
long_window = 60 # Long-term SMA (e.g., 200 days)
SMA_short = data['Close'].tail(short_window).mean().values[0]
SMA_medium = data['Close'].tail(medium_window).mean().values[0]
SMA_long = data['Close'].tail(long_window).mean().values[0]
Checking Whether Bullish or Not:
condition_one = (SMA_short > SMA_medium)
condition_two = (SMA_medium > SMA_long)
is_bullish = condition_one and condition_two
Full Code:
import yfinance as yf
import pandas as pd
import json
nasdaq100_tickers = pd.read_html('https://en.wikipedia.org/wiki/Nasdaq-100#Components')[4]['Symbol']
#nasdaq100_tickers = nasdaq100_tickers[0:10]
quotes = {}
quotes["bullish"] = []
for idx, ticker in enumerate(nasdaq100_tickers):
try:
remaining = len(nasdaq100_tickers) - idx - 1
print(f"checking quote {idx + 1}. remainding = {remaining}")
data = yf.download(ticker, period="6mo")
short_window = 5 # Short-term SMA (e.g., 20 days)
medium_window = 20 # Medium-term SMA (e.g., 60 days)
long_window = 60 # Long-term SMA (e.g., 200 days)
SMA_short = data['Close'].tail(short_window).mean().values[0]
SMA_medium = data['Close'].tail(medium_window).mean().values[0]
SMA_long = data['Close'].tail(long_window).mean().values[0]
condition_one = (SMA_short > SMA_medium)
condition_two = (SMA_medium > SMA_long)
is_bullish = condition_one and condition_two
if is_bullish:
quotes["bullish"].append(ticker)
except Exception as e:
print(f"Exception: {e}")
raise
print(f"total {len(quotes['bullish'])} quotes found")
bullish_tickers = quotes['bullish']
for i in range(0, len(bullish_tickers), 5):
# Join the next five tickers into a string
line = ", ".join(bullish_tickers[i:i + 5])
print(line)
Result: