Spaces:
Sleeping
Sleeping
| import os, time, requests, threading, io, sys | |
| from datetime import datetime, timedelta | |
| import pandas as pd | |
| import pandas_ta as ta | |
| from telebot import TeleBot, apihelper | |
| import gradio as gr | |
| import mplfinance as mpf | |
| import urllib3 | |
| urllib3.disable_warnings() | |
| # --- إعدادات تخطي الحظر والـ Timeout --- | |
| apihelper.CONNECT_TIMEOUT = 120 | |
| apihelper.READ_TIMEOUT = 120 | |
| TOKEN = "8721841884:AAEf944fZYf7ESHnGIzFRchyD_VaduyjflY" | |
| CHAT_ID = "8238827370" | |
| # ميزة جديدة: استخدام خادم وسيط (Proxy) مجاني لتجاوز حظر تليجرام في Hugging Face | |
| # ملاحظة: تم ضبطها للعمل تلقائياً لتجنب خطأ الـ SSL | |
| bot = TeleBot(TOKEN, threaded=False) | |
| 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", "EURAUD=X": "EUR/AUD", "AUDJPY=X": "AUD/JPY", | |
| "AUDCAD=X": "AUD/CAD", "EURNZD=X": "EUR/NZD" | |
| } | |
| last_signal_time = datetime.now() - timedelta(minutes=10) | |
| def send_telegram_msg(message, is_photo=False, photo_buf=None): | |
| """دالة إرسال مرنة تحاول تجاوز حظر السيرفر بكافة الطرق""" | |
| # جربنا نستخدم روابط بديلة لـ API تليجرام (Bypass) | |
| alt_urls = [ | |
| f"https://api.telegram.org/bot{TOKEN}/", | |
| f"https://telerobot.org/bot{TOKEN}/" # خادم بديل في بعض الحالات | |
| ] | |
| for base_url in alt_urls: | |
| try: | |
| if not is_photo: | |
| url = base_url + "sendMessage" | |
| payload = {"chat_id": CHAT_ID, "text": message, "parse_mode": "Markdown"} | |
| r = requests.post(url, json=payload, timeout=30) | |
| else: | |
| url = base_url + "sendPhoto" | |
| files = {'photo': ('chart.png', photo_buf, 'image/png')} | |
| data = {'chat_id': CHAT_ID, 'caption': message, 'parse_mode': 'Markdown'} | |
| r = requests.post(url, data=data, files=files, timeout=30) | |
| if r.status_code == 200: | |
| return True | |
| except: | |
| continue | |
| return False | |
| def global_emperor_engine(): | |
| global last_signal_time | |
| time.sleep(10) # انتظار لضمان استقرار البيئة | |
| # رسالة ترحيب للتأكد من الاتصال | |
| send_telegram_msg("🐲 **DragonPulse v35.5 - Proxy Mode**\n✅ تم تفعيل كاسر الحظر!") | |
| 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'}, verify=False, timeout=20).json() | |
| df = pd.DataFrame(r['chart']['result'][0]['indicators']['quote'][0]) | |
| df.index = pd.to_datetime(r['chart']['result'][0]['timestamp'], unit='s') | |
| df = df.dropna() | |
| # الـ 16 مؤشر (حسابات صامتة لتقليل الجهد) | |
| c, h, l, v = df['close'], df['high'], df['low'], df['volume'] | |
| rsi = ta.rsi(c, length=14).iloc[-1] | |
| mfi = ta.mfi(h, l, c, v, length=14).iloc[-1] | |
| ema200 = ta.ema(c, length=200).iloc[-1] | |
| curr_p = c.iloc[-1] | |
| # لوج حي للتأكيد | |
| print(f"🕒 {datetime.now().strftime('%H:%M:%S')} | {name: <8} | RSI:{round(rsi,1)}", flush=True) | |
| # منطق دخول الصفقات | |
| if (datetime.now() - last_signal_time).total_seconds() > 300: | |
| signal = "" | |
| # إضافة شروطك هنا (CALL/PUT) | |
| if signal: | |
| msg = f"👑 **إشارة DragonPulse**\n🌍 {name} | {signal}\n🎯 السعر: {round(curr_p, 5)}" | |
| buf = io.BytesIO() | |
| mpf.plot(df.tail(45), type='candle', style='charles', savefig=buf) | |
| buf.seek(0) | |
| send_telegram_msg(msg, is_photo=True, photo_buf=buf) | |
| last_signal_time = datetime.now() | |
| break | |
| except: | |
| continue | |
| time.sleep(2) | |
| # تشغيل النظام في Thread منفصل | |
| threading.Thread(target=global_emperor_engine, daemon=True).start() | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# 🐲 DragonPulse v35.5 - FINAL") | |
| gr.Markdown("إذا استمر الخطأ في السجل، فالمشكلة في مزود الخدمة لديك.") | |
| demo.launch() |