A professzionális elemzők két fő módszert kombinálnak, amelyeket Pythonban is könnyen megvalósíthatsz:Fundamentális elemzés: Olcsó, de stabil, nyereséges cégek keresése (pl. alacsony P/E ráta, magas profitmarzs).Technikai elemzés: A piaci momentum és trendek azonosítása (pl. RSI indikátor vagy mozgóátlagok segítségével).
Kockázati figyelmeztetés: Egy egyedi részvény vásárlása mindig magas kockázattal jár, és akár a teljes befektetett tőke elvesztését is eredményezheti. A kockázatok csökkentése érdekében érdemes diverzifikált portfólióban (vagy ETF-ekben) gondolkodni.
Az alábbi program a népszerű yfinance könyvtárat használja. Letölti egy előre meghatározott részvénylista (pl. az S&P 500 legnagyobb technológiai és növekedési cégei) legfrissebb adatait, majd kiszűri azokat, amelyek fundamentálisan alulértékeltek (P/E < 30) és technikailag sincsenek még túlvásárolt állapotban (RSI < 70).
----------
import pandas as pd
import yfinance as yf
import pandas_ta as ta # Technikai indikátorok egyszerű számításához kell telepíteni!
# 1. Definiáljuk a vizsgálni kívánt részvények listáját (példaként néhány nagyvállalat)
tickers = ["AAPL", "MSFT", "GOOGL", "AMZN", "META", "TSLA", "NVDA", "BRK-B", "JNJ", "V", "JPM", "XOM"]
def analyze_stocks(ticker_list):
results = []
print("Adatok letöltése és elemzése folyamatban...\n")
for ticker_symbol in ticker_list:
try:
ticker = yf.Ticker(ticker_symbol)
# --- FUNDAMENTÁLIS ADATOK ---
info = ticker.info
pe_ratio = info.get("trailingPE", None)
forward_pe = info.get("forwardPE", None)
profit_margin = info.get("profitMargins", None)
company_name = info.get("longName", ticker_symbol)
# --- TECHNIKAI ADATOK (Utolsó 6 hónap napi árai) ---
history = ticker.history(period="6m")
if history.empty or len(history) < 20:
continue
# RSI (Relative Strength Index) számítása 14 napos periódusra
history.ta.rsi(length=14, append=True)
# 50 napos mozgóátlag (SMA)
history.ta.sma(length=50, append=True)
latest_row = history.iloc[-1]
current_price = latest_row["Close"]
rsi = latest_row["RSI_14"]
sma_50 = latest_row["SMA_50"]
# Trend meghatározása: Ha az ár a 50 napos mozgóátlag felett van, a trend emelkedő
trend = "Bika (Emelkedő)" if current_price > sma_50 else "Medve (Eső)"
results.append({
"Ticker": ticker_symbol,
"Név": company_name,
"Ár ($)": round(current_price, 2),
"P/E Ráta": round(pe_ratio, 2) if pe_ratio else "N/A",
"Profit Marzs": f"{round(profit_margin * 100, 2)}%" if profit_margin else "N/A",
"RSI (14)": round(rsi, 2) if not pd.isna(rsi) else "N/A",
"Trend (50 SMA)": trend
})
except Exception as e:
print(f"Hiba történt a(z) {ticker_symbol} lekérésekor: {e}")
# Adatok DataFrame-be rendezése
df = pd.DataFrame(results)
return df
# Elemzés futtatása
df_stocks = analyze_stocks(tickers)
# --- SZŰRÉSI STRATÉGIA ---
# Kiszűrjük azokat a cégeket, amelyek:
# 1. Rendelkeznek P/E rátával és az 30 alatti (nem túlárazott fundamentálisan)
# 2. Az RSI értékük 70 alatti (technikailag nem túlvásárolt, van még tér növekedni)
# 3. Pozitív a profit marzsuk (nyereségesek)
# Biztonsági konverzió a szűréshez
df_stocks["P/E_float"] = pd.to_numeric(df_stocks["P/E Ráta"], errors='coerce')
df_stocks["RSI_float"] = pd.to_numeric(df_stocks["RSI (14)"], errors='coerce')
Kivalasztott_reszvenyek = df_stocks[
(df_stocks["P/E_float"] < 30) &
(df_stocks["RSI_float"] < 70) &
(df_stocks["Trend (50 SMA)"] == "Bika (Emelkedő)")
].drop(columns=["P/E_float", "RSI_float"])
# Eredmények megjelenítése
print("=== ÖSSZES LEKÉRT ADAT ===")
print(df_stocks.drop(columns=["P/E_float", "RSI_float"]).to_string(index=False))
print("\n" + "="*40)
print(" STRATÉGIA ALAPJÁN AJÁNLOTT VÉTELI CÉLPONTOK:")
print("="*40)
if Kivalasztott_reszvenyek.empty:
print("A jelenlegi piaci feltételek mellett a listából egyik részvény sem felelt meg a szigorú kritériumoknak.")
else:
print(Kivalasztott_reszvenyek.to_string(index=False))
-----------------------
Futtatás;https://www.w3schools.com/python/pandas/trypandas.asp?filename=demo_pandas_editor
https://colab.research.google.com/drive/1IBFmIxyM0-Ph71N2pks5lYz6z25PIeoI
---------------
Nincsenek megjegyzések:
Megjegyzés küldése