مرحباً بكم في أداة تحليل الأسهم
''' 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 %}| الرمز | اسم الشركة | السعر الأخير | الإشارة |
|---|---|---|---|
| {{ signal.symbol }} | {{ ticker_to_name.get(signal.symbol, 'اسم غير متوفر') }} | {{ signal.last_price }} | {{ signal.signal }} |
لا توجد إشارات للأسهم.
{% 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()
ليست هناك تعليقات:
إرسال تعليق