Alikhani0916 commited on
Commit
54ba4c6
·
verified ·
1 Parent(s): c41def0

Delete app.py

Browse files
Files changed (1) hide show
  1. app.py +0 -235
app.py DELETED
@@ -1,235 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
-
4
- import logging
5
- import json
6
- import os
7
- import yfinance as yf
8
- import pandas as pd
9
- import numpy as np
10
- import requests
11
- from telegram.ext import ApplicationBuilder, CommandHandler, CallbackQueryHandler # تغییر این خط
12
- from bs4 import BeautifulSoup
13
- from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
14
- from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, CallbackContext
15
- from ta import momentum, trend
16
- from ta.trend import IchimokuIndicator
17
- from sklearn.preprocessing import MinMaxScaler
18
- from tensorflow.keras.models import Sequential, load_model
19
- from tensorflow.keras.layers import LSTM, Dense
20
- from datetime import datetime
21
- import sqlite3
22
-
23
- # -------------------------------
24
- # تنظیمات اولیه
25
- # -------------------------------
26
- TOKEN = os.getenv("7955893797:AAEn7Rp0KNM3peQBzKLJmruTHh6OHaqmYcA") # دریافت توکن از متغیر محیطی
27
- logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
28
- logger = logging.getLogger(__name__)
29
-
30
- # -------------------------------
31
- # پایگاه داده SQLite
32
- # -------------------------------
33
- def init_db():
34
- conn = sqlite3.connect('trading_bot.db')
35
- c = conn.cursor()
36
- c.execute('''CREATE TABLE IF NOT EXISTS signals
37
- (symbol TEXT, signal TEXT, confidence REAL, timestamp DATETIME)''')
38
- conn.commit()
39
- conn.close()
40
-
41
- init_db()
42
-
43
- # -------------------------------
44
- # سیستم کشینگ داده‌ها
45
- # -------------------------------
46
- class DataCache:
47
- def __init__(self):
48
- self.cache = {}
49
-
50
- def get(self, symbol):
51
- return self.cache.get(symbol)
52
-
53
- def set(self, symbol, data):
54
- self.cache[symbol] = data
55
-
56
- cache = DataCache()
57
-
58
- # -------------------------------
59
- # دریافت داده‌ها با سیستم Fallback
60
- # -------------------------------
61
- def get_financial_data(symbol):
62
- try:
63
- # اولویت ۱: Yahoo Finance
64
- data = yf.download(symbol, period='2d', interval='5m')
65
- if not data.empty:
66
- cache.set(symbol, data)
67
- return data
68
-
69
- # اولویت ۲: کش
70
- cached_data = cache.get(symbol)
71
- if cached_data is not None:
72
- return cached_data
73
-
74
- # اولویت ۳: وب اسکرپینگ
75
- headers = {'User-Agent': 'Mozilla/5.0'}
76
- url = f"https://www.investing.com/currencies/{symbol.replace('/', '-')}"
77
- response = requests.get(url, headers=headers)
78
- soup = BeautifulSoup(response.text, 'html.parser')
79
- price = float(soup.find('span', {'data-test': 'instrument-price-last'}).text.replace(',', ''))
80
- data = pd.DataFrame({'Close': [price]})
81
- cache.set(symbol, data)
82
- return data
83
-
84
- except Exception as e:
85
- logger.error(f"خطا در دریافت داده: {e}")
86
- return pd.DataFrame()
87
-
88
- # -------------------------------
89
- # مدل هوش مصنوعی با آموزش اولیه
90
- # -------------------------------
91
- def train_ai_model(symbol='EURUSD=X'):
92
- data = yf.download(symbol, period='365d', interval='1h')
93
- scaler = MinMaxScaler()
94
- scaled_data = scaler.fit_transform(data['Close'].values.reshape(-1,1))
95
-
96
- X, y = [], []
97
- for i in range(60, len(scaled_data)):
98
- X.append(scaled_data[i-60:i, 0])
99
- y.append(scaled_data[i, 0])
100
-
101
- X, y = np.array(X), np.array(y)
102
- X = np.reshape(X, (X.shape[0], X.shape[1], 1))
103
-
104
- model = Sequential([
105
- LSTM(50, return_sequences=True, input_shape=(X.shape[1], 1)),
106
- LSTM(50),
107
- Dense(1)
108
- ])
109
- model.compile(optimizer='adam', loss='mse')
110
- model.fit(X, y, epochs=10, batch_size=32)
111
- model.save('ai_trader.h5')
112
-
113
- # -------------------------------
114
- # تحلیل تکنیکال پیشرفته
115
- # -------------------------------
116
- def advanced_technical_analysis(data):
117
- try:
118
- analysis = {}
119
- analysis['rsi'] = momentum.RSIIndicator(data['Close'], window=14).rsi().iloc[-1]
120
-
121
- macd = trend.MACD(data['Close'])
122
- analysis['macd'] = macd.macd().iloc[-1]
123
- analysis['signal_line'] = macd.macd_signal().iloc[-1]
124
-
125
- ichi = IchimokuIndicator(
126
- high=data['High'],
127
- low=data['Low'],
128
- window1=9,
129
- window2=26,
130
- window3=52
131
- )
132
- analysis['tenkan'] = ichi.ichimoku_conversion_line().iloc[-1]
133
- analysis['kijun'] = ichi.ichimoku_base_line().iloc[-1]
134
-
135
- return analysis
136
- except Exception as e:
137
- logger.error(f"خطا در تحلیل تکنیکال: {e}")
138
- return {}
139
-
140
- # -------------------------------
141
- # سیستم تولید سیگنال هوشمند
142
- # -------------------------------
143
- def generate_smart_signal(symbol):
144
- try:
145
- data = get_financial_data(symbol)
146
- if data.empty:
147
- return "⚠️ خطا در دریافت داده", 0
148
-
149
- analysis = advanced_technical_analysis(data)
150
- model = load_model('ai_trader.h5') if os.path.exists('ai_trader.h5') else None
151
-
152
- # منطق ترکیب سیگنال‌ها
153
- if model:
154
- scaler = MinMaxScaler()
155
- scaled_data = scaler.fit_transform(data['Close'].values.reshape(-1,1))
156
- X = np.array([scaled_data[-60:, 0]])
157
- X = np.reshape(X, (X.shape[0], X.shape[1], 1))
158
- prediction = model.predict(X)
159
- ai_trend = 1 if prediction[0][0] > scaled_data[-1][0] else -1
160
- else:
161
- ai_trend = 0
162
-
163
- signal_strength = (
164
- 0.4 * (1 if analysis['rsi'] < 30 else -1 if analysis['rsi'] > 70 else 0) +
165
- 0.3 * (1 if analysis['macd'] > analysis['signal_line'] else -1) +
166
- 0.3 * ai_trend
167
- )
168
-
169
- if signal_strength > 0.7:
170
- return "🟢 خرید قوی", round(signal_strength*100)
171
- elif signal_strength < -0.7:
172
- return "🔴 فروش قوی", round(abs(signal_strength)*100)
173
- else:
174
- return "⚪ خنثی", 0
175
-
176
- except Exception as e:
177
- logger.error(f"خطا در تولید سیگنال: {e}")
178
- return "⚠️ خطای سیستمی", 0
179
-
180
- # -------------------------------
181
- # رابط تلگرام
182
- # -------------------------------
183
- def start(update: Update, context: CallbackContext):
184
- user = update.effective_user
185
- update.message.reply_text(
186
- f"سلام {user.first_name}! به پیشرفته‌ترین ربات ترید خوش آمدید! 🚀",
187
- reply_markup=main_menu()
188
- )
189
-
190
- def main_menu():
191
- keyboard = [
192
- [InlineKeyboardButton("📈 دریافت سیگنال لحظه‌ای", callback_data='get_signal')],
193
- [InlineKeyboardButton("⚙ تنظیمات پیشرفته", callback_data='advanced_config')],
194
- [InlineKeyboardButton("📊 تاریخچه معاملات", callback_data='trade_history')]
195
- ]
196
- return InlineKeyboardMarkup(keyboard)
197
-
198
- def button_handler(update: Update, context: CallbackContext):
199
- query = update.callback_query
200
- query.answer()
201
-
202
- if query.data == 'get_signal':
203
- symbols = ['EURUSD=X', 'GBPUSD=X', 'USDJPY=X']
204
- for sym in symbols:
205
- signal, confidence = generate_smart_signal(sym)
206
- query.message.reply_text(
207
- f"🔎 نماد: {sym}\n"
208
- f"📊 سیگنال: {signal}\n"
209
- f"💪 قدرت: {confidence}%\n"
210
- f"🕒 زمان: {datetime.now().strftime('%H:%M:%S')}"
211
- )
212
- # ذخیره در دیتابیس
213
- conn = sqlite3.connect('trading_bot.db')
214
- c = conn.cursor()
215
- c.execute("INSERT INTO signals VALUES (?, ?, ?, ?)",
216
- (sym, signal, confidence, datetime.now()))
217
- conn.commit()
218
- conn.close()
219
-
220
- # -------------------------------
221
- # اجرای ربات
222
- # -------------------------------
223
- if __name__ == "__main__":
224
- if not os.path.exists('ai_trader.h5'):
225
- train_ai_model()
226
-
227
- # روش صحیح در نسخه‌های جدید
228
- application = Application.builder().token(TOKEN).build()
229
-
230
- # اضافه کردن هندلرها
231
- application.add_handler(CommandHandler("start", start))
232
- application.add_handler(CallbackQueryHandler(button_handler))
233
-
234
- # اجرای ربات
235
- application.run_polling()