السبت، 4 يناير 2025

١٢

from flask import Flask, render_template_string, request import yfinance as yf import pandas as pd from ta.trend import EMAIndicator, MACD # إعداد Flask app = Flask(__name__) # قائمة الرموز us_symbols = ['NASDAQ:SMCI', 'NASDAQ:LRCX', 'NASDAQ:ENPH', 'NASDAQ:AMAT', 'NASDAQ:FSLR'] # قاموس الرموز والأسماء ticker_to_name = { 'NASDAQ:SMCI': 'Super Micro Computer', 'NASDAQ:LRCX': 'Lam Research', 'NASDAQ:ENPH': 'Enphase Energy', 'NASDAQ:AMAT': 'Applied Materials', 'NASDAQ:FSLR': 'First Solar', } # واجهة المستخدم الرئيسية @app.route('/') def index(): html = ''' تحليل الأسهم

مرحباً بكم في أداة تحليل الأسهم

''' return render_template_string(html) # معالجة البيانات @app.route('/process', methods=['POST']) def process_data(): try: # جلب البيانات اليومية symbols_string = ' '.join(us_symbols) data_daily = yf.download(symbols_string, period='6mo', interval='1d', group_by='ticker', threads=True, progress=False) # قائمة لتخزين النتائج stock_signals = [] for symbol in us_symbols: try: df_daily = data_daily[symbol].copy() if df_daily.empty or len(df_daily) < 50: continue df_daily = df_daily.sort_index() # حساب EMA الأول والثاني ema1 = EMAIndicator(close=df_daily['Close'], window=21) df_daily['firstEMA'] = ema1.ema_indicator() ema2 = EMAIndicator(close=df_daily['firstEMA'], window=21) df_daily['secondEMA'] = ema2.ema_indicator() # تحديد إشارات التقاطع df_daily['crossUp'] = ((df_daily['firstEMA'] > df_daily['secondEMA']) & (df_daily['firstEMA'].shift(1) <= df_daily['secondEMA'].shift(1))) df_daily['crossDown'] = ((df_daily['firstEMA'] < df_daily['secondEMA']) & (df_daily['firstEMA'].shift(1) >= df_daily['secondEMA'].shift(1))) # الإشارة الأخيرة if df_daily['crossUp'].iloc[-1]: signal = 'إيجابي' elif df_daily['crossDown'].iloc[-1]: signal = 'سلبي' else: continue stock_signals.append({ 'symbol': symbol, 'last_price': round(df_daily['Close'].iloc[-1], 2), 'signal': signal }) except Exception as e: print(f"خطأ في السهم {symbol}: {e}") continue # قالب HTML لعرض النتائج html = ''' نتائج تحليل الأسهم

نتائج تحليل الأسهم

{% if signals %} {% for signal in signals %} {% endfor %}
الرمز اسم الشركة السعر الأخير الإشارة
{{ signal.symbol }} {{ ticker_to_name.get(signal.symbol, 'اسم غير متوفر') }} {{ signal.last_price }} {{ signal.signal }}
{% else %}

لا توجد إشارات للأسهم.

{% endif %} العودة إلى الصفحة الرئيسية ''' return render_template_string(html, signals=stock_signals, ticker_to_name=ticker_to_name) except Exception as e: return f"حدث خطأ: {e}" # تشغيل التطبيق from flask_ngrok import run_with_ngrok run_with_ngrok(app) app.run()

ليست هناك تعليقات:

إرسال تعليق