Írtam neked egy programot, ami elemzi a tőzsdei részvények árfolyam-ingadozását és javaslatot tesz a vásárlásra! Sok szerencsét!
--------------
import pandas as pd
import numpy as np
import yfinance as yf
from datetime import datetime, timedelta
import warnings
warnings.filterwarnings('ignore')
def analyze_stock(symbol, days=60):
"""
Egyetlen részvény elemzése
"""
print(f"\n{'='*60}")
print(f"Elemzés: {symbol}")
print(f"{'='*60}")
try:
# Adatok letöltése
stock = yf.Ticker(symbol)
df = stock.history(period=f"{days}d")
if len(df) == 0:
print(f"? Nincs adat {symbol} számára")
return None
# Alapvető mutatók
current_price = df['Close'].iloc[-1]
prev_close = df['Close'].iloc[-2]
change = ((current_price - prev_close) / prev_close) * 100
# Mozgóátlagok
ma_5 = df['Close'].rolling(window=5).mean().iloc[-1]
ma_20 = df['Close'].rolling(window=20).mean().iloc[-1]
ma_50 = df['Close'].rolling(window=50).mean().iloc[-1] if len(df) >= 50 else ma_20
ma_200 = df['Close'].rolling(window=200).mean().iloc[-1] if len(df) >= 200 else ma_50
# RSI (Relative Strength Index)
delta = df['Close'].diff()
gain = delta.where(delta > 0, 0).rolling(window=14).mean().iloc[-1]
loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean().iloc[-1]
rs = gain / loss if loss != 0 else 0
rsi = 100 - (100 / (1 + rs))
# Volatilitás
volatility = df['Close'].pct_change().std() * np.sqrt(252) * 100
# Volume
volume = df['Volume'].iloc[-1]
avg_volume = df['Volume'].rolling(window=20).mean().iloc[-1]
volume_ratio = volume / avg_volume if avg_volume > 0 else 1
# Pontszám számítása
score = 0
reasons_buy = []
reasons_sell = []
# Ár változás
if change > 2:
score += 15
reasons_buy.append(f"Pozitív árfolyam-változás: +{change:.2f}%")
elif change < -2:
score -= 10
reasons_sell.append(f"Negatív árfolyam-változás: {change:.2f}%")
else:
score += 5
# RSI értékelés
if rsi < 30:
score += 25
reasons_buy.append(f"Túladott (RSI: {rsi:.1f}) - olcsó")
elif rsi > 70:
score -= 20
reasons_sell.append(f"Túlvetett (RSI: {rsi:.1f}) - drága")
else:
score += 10
reasons_buy.append(f"RSI normál tartományban: {rsi:.1f}")
# Mozgóátlagok
if current_price > ma_5:
score += 10
reasons_buy.append("Ár > 5 napos MA (rövid távú emelkedés)")
else:
score -= 5
reasons_sell.append("Ár < 5 napos MA")
if current_price > ma_20:
score += 15
reasons_buy.append("Ár > 20 napos MA (közép távú emelkedés)")
else:
score -= 10
reasons_sell.append("Ár < 20 napos MA")
if current_price > ma_50:
score += 15
reasons_buy.append("Ár > 50 napos MA (hosszú távú emelkedés)")
else:
score -= 10
reasons_sell.append("Ár < 50 napos MA")
# Volume
if volume_ratio > 1.5:
score += 10
reasons_buy.append(f"Növekedett volume ({volume_ratio:.1f}x az átlag)")
# Volatilitás
if volatility < 20:
score += 10
reasons_buy.append(f"Alacsony volatilitás: {volatility:.1f}%")
elif volatility > 35:
score -= 5
reasons_sell.append(f"Magas volatilitás: {volatility:.1f}%")
return {
'symbol': symbol,
'price': current_price,
'change': change,
'ma_5': ma_5,
'ma_20': ma_20,
'ma_50': ma_50,
'rsi': rsi,
'volatility': volatility,
'volume_ratio': volume_ratio,
'score': score,
'reasons_buy': reasons_buy,
'reasons_sell': reasons_sell
}
except Exception as e:
print(f"Hiba {symbol} elemzésekor: {e}")
return None
def analyze_portfolio(stocks, days=60):
"""
Több részvény elemzése és összehasonlítása
"""
print("=" * 60)
print("TŐZSDEI RÉSZVÉNY ELEMZŐ PROGRAM")
print("=" * 60)
print(f"Dátum: {datetime.now().strftime('%Y-%m-%d %H:%M')}")
print(f"Elemzett részvények: {', '.join(stocks)}")
results = []
for symbol in stocks:
result = analyze_stock(symbol, days)
if result:
results.append(result)
# Rangsorolás
results.sort(key=lambda x: x['score'], reverse=True)
return results
def print_recommendations(results):
"""
Ajánlások kiírása
"""
print("\n" + "=" * 60)
print("?? ELEMZÉSI EREDMÉNYEK")
print("=" * 60)
for i, r in enumerate(results, 1):
print(f"\n{i}. {r['symbol']} - ${r['price']:.2f} ({r['change']:+.2f}%)")
print(f" RSI: {r['rsi']:.1f} | Volatilitás: {r['volatility']:.1f}%")
print(f" Pontszám: {r['score']}/100")
if r['reasons_buy']:
print(" ?? VÁSÁRLÁS ÉRVEI:")
for reason in r['reasons_buy'][:3]:
print(f" ? {reason}")
if r['reasons_sell']:
print(" ? ELADÁS ÉRVEI:")
for reason in r['reasons_sell'][:2]:
print(f" ? {reason}")
print("\n" + "=" * 60)
print("?? AJÁNLÁS")
print("=" * 60)
if not results:
print("? Nincs elemzésre alkalmas adat")
return
best = results[0]
if best['score'] >= 50:
recommendation = "VÁSÁRLÁS"
emoji = "??"
elif best['score'] >= 20:
recommendation = "FIGYELMES VÁRAKOZÁS"
emoji = "??"
else:
recommendation = "ELKERÜLÉS"
emoji = "??"
print(f"\n{emoji} JAVASOLT RÉSZVÉNY: {best['symbol']}")
print(f" Ár: ${best['price']:.2f}")
print(f" Pontszám: {best['score']}/100")
print(f" Döntés: {recommendation}")
print(f"\n MIÉRT ÉRDEMES {recommendation.lower()}?")
for reason in best['reasons_buy']:
print(f" ? {reason}")
if best['reasons_sell']:
print(f"\n KOCKÁZATOK:")
for reason in best['reasons_sell']:
print(f" ?? {reason}")
def main():
"""
Fő program
"""
# Példa részvények (változtathatod)
# Amerikai részvények: AAPL, GOOGL, MSFT, TSLA, NVDA, AMZN, META, NFLX
# Magyar részvények: MOLBN, OPUSBN, RICHBVN (BÉT)
stocks_to_analyze = ['AAPL', 'GOOGL', 'MSFT', 'TSLA', 'NVDA']
# Elemzés
results = analyze_portfolio(stocks_to_analyze, days=60)
# Ajánlások
print_recommendations(results)
print("\n" + "=" * 60)
print("?? FONTOS FIGYELMEZTETÉS")
print("=" * 60)
if __name__ == "__main__":
# Telepítés szükséges: pip install yfinance pandas numpy
main()
---------------------
Nincsenek megjegyzések:
Megjegyzés küldése