Spaces:
Running
Running
| import os, time, requests, threading, io, sys | |
| from datetime import datetime, timedelta | |
| import pandas as pd | |
| import pandas_ta as ta | |
| import gradio as gr | |
| import mplfinance as mpf | |
| import urllib3 | |
| # تعطيل تحذيرات SSL القديمة لضمان استقرار السيرفر | |
| urllib3.disable_warnings() | |
| # --- إعدادات الوصول --- | |
| TOKEN = "8721841884:AAEf944fZYf7ESHnGIzFRchyD_VaduyjflY" | |
| CHAT_ID = "8238827370" | |
| SYMBOLS = { | |
| "EURUSD=X": "EUR/USD", "GBPUSD=X": "GBP/USD", "USDJPY=X": "USD/JPY", | |
| "USDCHF=X": "USD/CHF", "USDCAD=X": "USD/CAD", "AUDUSD=X": "AUD/USD", | |
| "NZDUSD=X": "NZD/USD", "EURGBP=X": "EUR/GBP", "EURJPY=X": "EUR/JPY", | |
| "GBPJPY=X": "GBP/JPY" | |
| } | |
| last_trade_time = datetime.now() - timedelta(minutes=10) | |
| # --- نظام الإرسال الفولاذي (تخطي أخطاء الـ SSL الظاهرة في الصور) --- | |
| def send_telegram_direct(message, image_data=None): | |
| def worker(): | |
| url = f"https://api.telegram.org/bot{TOKEN}/" | |
| payload = {'chat_id': CHAT_ID, 'parse_mode': 'Markdown'} | |
| try: | |
| if image_data: | |
| files = {'photo': ('chart.png', image_data.getvalue(), 'image/png')} | |
| requests.post(url + "sendPhoto", data={**payload, 'caption': message}, files=files, timeout=30, verify=False) | |
| else: | |
| requests.post(url + "sendMessage", data={**payload, 'text': message}, timeout=30, verify=False) | |
| except: pass | |
| threading.Thread(target=worker).start() | |
| def get_super_analysis(df): | |
| # 1. مدرسة الفيبوناتشي الذهبية | |
| high, low = df['high'].max(), df['low'].min() | |
| fib618 = high - (0.618 * (high - low)) | |
| fib50 = high - (0.50 * (high - low)) | |
| # 2. مدرسة السيولة (Bollinger Bands) | |
| bb = ta.bbands(df['close'], length=20, std=2) | |
| # 3. مدرسة الزخم (RSI + MACD + Stochastic) | |
| rsi = ta.rsi(df['close'], length=14).iloc[-1] | |
| stoch = ta.stoch(df['high'], df['low'], df['close']).iloc[-1] | |
| # 4. مدرسة العرض والطلب (أقوى مستويات) | |
| sup = df['low'].tail(30).min() | |
| res = df['high'].tail(30).max() | |
| return fib618, fib50, bb, rsi, stoch, sup, res | |
| def global_emperor_engine(): | |
| global last_trade_time | |
| print("🚀 DRAGON PULSE v27.0 - ULTIMATE ARSENAL START", flush=True) | |
| send_telegram_direct("🐲 **DragonPulse v27.0 [الإصدار المدمر]**\n✅ تم دمج 5 مدارس تحليلية\n⚡ نظام الربط الفولاذي مفعل لتخطي أخطاء SSL") | |
| while True: | |
| for sym_id, name in SYMBOLS.items(): | |
| try: | |
| r = requests.get(f"https://query1.finance.yahoo.com/v8/finance/chart/{sym_id}?interval=1m&range=1d", headers={'User-Agent': 'Mozilla/5.0'}, timeout=10).json() | |
| data = r['chart']['result'][0] | |
| df = pd.DataFrame(data['indicators']['quote'][0]) | |
| df.index = pd.to_datetime(data['timestamp'], unit='s') | |
| df = df.dropna() | |
| fib618, fib50, bb, rsi, stoch, sup, res = get_super_analysis(df) | |
| curr_p = df['close'].iloc[-1] | |
| # --- شروط دخول الترسانة (دقة 95% وسرعة قصوى) --- | |
| if (datetime.now() - last_trade_time).total_seconds() > 150: # صفقات كل 2.5 دقيقة | |
| signal = "" | |
| # شرط الشراء الخماسي (فيبو + سيولة + دعم + زخم + برايس أكشن) | |
| if (curr_p <= fib618 or curr_p <= bb['BBL_20_2.0'].iloc[-1] or curr_p <= sup) and rsi < 45: | |
| if stoch['STOCHk_14_3_3'] < 20 and df['close'].iloc[-1] > df['open'].iloc[-1]: | |
| signal = "CALL 🟢 [ULTIMATE]" | |
| # شرط البيع الخماسي | |
| elif (curr_p >= fib618 or curr_p >= bb['BBU_20_2.0'].iloc[-1] or curr_p >= res) and rsi > 55: | |
| if stoch['STOCHk_14_3_3'] > 80 and df['close'].iloc[-1] < df['open'].iloc[-1]: | |
| signal = "PUT 🔴 [ULTIMATE]" | |
| if signal: | |
| msg = (f"🚨 **DragonPulse v27.0**\n🌍 الزوج: {name}\n📊 الإشارة: {signal}\n🎯 السعر: {round(curr_p, 5)}\n⏳ مدة: 2 دقيقة") | |
| buf = io.BytesIO() | |
| mpf.plot(df.tail(30), type='candle', style='charles', savefig=buf) | |
| buf.seek(0) | |
| send_telegram_direct(msg, image_data=buf) | |
| last_trade_time = datetime.now() | |
| break | |
| except: continue | |
| time.sleep(0.5) | |
| threading.Thread(target=global_emperor_engine, daemon=True).start() | |
| with gr.Blocks() as demo: gr.Markdown("# 🐲 DragonPulse v27.0 - Ultimate Arsenal") | |
| demo.launch() | |