jasimali75 commited on
Commit
69ae813
Β·
verified Β·
1 Parent(s): 4385724

Deploy pro trading signals with futures & forex

Browse files
Files changed (3) hide show
  1. README.md +6 -11
  2. app.py +245 -0
  3. requirements.txt +3 -0
README.md CHANGED
@@ -1,15 +1,10 @@
1
  ---
2
- title: TradingProSignals
3
- emoji: πŸƒ
4
- colorFrom: purple
5
- colorTo: gray
6
- sdk: gradio
7
- sdk_version: 6.14.0
8
- python_version: '3.13'
9
  app_file: app.py
10
  pinned: false
11
  license: mit
12
- short_description: Trading Signals with professional analyzer
13
- ---
14
-
15
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: Pro Trading Signals
3
+ emoji: πŸ“ˆ
4
+ colorFrom: green
5
+ colorTo: blue
6
+ sdk: streamlit
 
 
7
  app_file: app.py
8
  pinned: false
9
  license: mit
10
+ ---
 
 
 
app.py ADDED
@@ -0,0 +1,245 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ XAUUSD Pro Trading Signals - Fast Live Data Version
3
+ """
4
+
5
+ import streamlit as st
6
+ import pandas as pd
7
+ import yfinance as yf
8
+ from datetime import datetime
9
+ import time
10
+
11
+ st.set_page_config(
12
+ page_title="XAUUSD Pro Trader",
13
+ page_icon="πŸ“ˆ",
14
+ layout="centered",
15
+ initial_sidebar_state="collapsed"
16
+ )
17
+
18
+ st.markdown("""
19
+ <style>
20
+ .main-title { font-size: 2.5rem; font-weight: bold; color: #FFD700; text-align: center; }
21
+ .signal-box { background: #1a1a1a; border-radius: 15px; padding: 25px; margin: 10px 0; }
22
+ .prob-big { font-size: 4rem; font-weight: bold; text-align: center; }
23
+ .buy-signal { color: #00E676; }
24
+ .sell-signal { color: #FF5252; }
25
+ .wait-signal { color: #FFD740; }
26
+ .stSelectbox { color: white; }
27
+ div[data-baseweb="select"] > div { background: #1F2937 !important; }
28
+ </style>
29
+ """, unsafe_allow_html=True)
30
+
31
+ st.markdown('<h1 class="main-title">πŸ“ˆ XAUUSD PRO TRADER</h1>', unsafe_allow_html=True)
32
+ st.markdown('<p style="text-align:center;color:#888;">Live Futures & Forex Signals β€’ Ultra Fast</p>', unsafe_allow_html=True)
33
+
34
+ PAIRS = {
35
+ "πŸ₯‡ Gold Futures (GC)": {"sym": "GC=F", "type": "futures", "name": "Gold"},
36
+ "πŸ₯ˆ Silver Futures (SI)": {"sym": "SI=F", "type": "futures", "name": "Silver"},
37
+ "πŸ›’οΈ Crude Oil (WTI)": {"sym": "CL=F", "type": "futures", "name": "Crude Oil"},
38
+ "β›½ Natural Gas": {"sym": "NG=F", "type": "futures", "name": "Natural Gas"},
39
+ "🌽 Corn Futures": {"sym": "ZC=F", "type": "futures", "name": "Corn"},
40
+ "🌾 Wheat Futures": {"sym": "ZW=F", "type": "futures", "name": "Wheat"},
41
+ "EUR/USD": {"sym": "EURUSD=X", "type": "forex", "name": "EUR/USD"},
42
+ "GBP/USD": {"sym": "GBPUSD=X", "type": "forex", "name": "GBP/USD"},
43
+ "USD/JPY": {"sym": "USDJPY=X", "type": "forex", "name": "USD/JPY"},
44
+ "USD/CHF": {"sym": "USDCHF=X", "type": "forex", "name": "USD/CHF"},
45
+ "AUD/USD": {"sym": "AUDUSD=X", "type": "forex", "name": "AUD/USD"},
46
+ "USD/CAD": {"sym": "USDCAD=X", "type": "forex", "name": "USD/CAD"},
47
+ "BTC/USD": {"sym": "BTC-USD", "type": "crypto", "name": "Bitcoin"},
48
+ "ETH/USD": {"sym": "ETH-USD", "type": "crypto", "name": "Ethereum"},
49
+ }
50
+
51
+ TIMEFRAMES = {
52
+ "1 Min": {"interval": "1m", "period": "1d"},
53
+ "5 Min": {"interval": "5m", "period": "5d"},
54
+ "15 Min": {"interval": "15m", "period": "5d"},
55
+ "30 Min": {"interval": "30m", "period": "10d"},
56
+ "1 Hour": {"interval": "1h", "period": "30d"},
57
+ "4 Hour": {"interval": "4h", "period": "60d"},
58
+ "Daily": {"interval": "1d", "period": "180d"},
59
+ }
60
+
61
+ col1, col2, col3 = st.columns([2, 2, 1])
62
+ with col1:
63
+ selected_pair = st.selectbox("πŸ“Š Asset", list(PAIRS.keys()), label_visibility="collapsed")
64
+ with col2:
65
+ selected_tf = st.selectbox("⏱ Timeframe", list(TIMEFRAMES.keys()), label_visibility="collapsed")
66
+ with col3:
67
+ st.write("")
68
+ analyze_btn = st.button("⚑ ANALYZE", use_container_width=True)
69
+
70
+ if analyze_btn:
71
+ with st.spinner("πŸ“‘ Fetching live data..."):
72
+ try:
73
+ start_time = time.time()
74
+ pair_info = PAIRS[selected_pair]
75
+ sym = pair_info["sym"]
76
+ tf = TIMEFRAMES[selected_tf]
77
+
78
+ ticker = yf.Ticker(sym)
79
+ df = ticker.history(period=tf["period"], interval=tf["interval"])
80
+
81
+ if df.empty or len(df) < 20:
82
+ st.error("❌ No data available. Try different timeframe.")
83
+ else:
84
+ close = df['Close']
85
+
86
+ df['sma9'] = close.rolling(9).mean()
87
+ df['sma21'] = close.rolling(21).mean()
88
+ df['sma50'] = close.rolling(50).mean()
89
+ df['ema8'] = close.ewm(span=8, adjust=False).mean()
90
+ df['ema21'] = close.ewm(span=21, adjust=False).mean()
91
+
92
+ delta = close.diff()
93
+ gain = delta.clip(lower=0)
94
+ loss = (-delta).clip(lower=0)
95
+ avg_gain = gain.ewm(alpha=1/14, adjust=False).mean()
96
+ avg_loss = loss.ewm(alpha=1/14, adjust=False).mean()
97
+ rs = avg_gain / loss.replace(0, 1e-12)
98
+ df['rsi'] = 100 - (100 / (1 + rs))
99
+
100
+ ema12 = close.ewm(span=12, adjust=False).mean()
101
+ ema26 = close.ewm(span=26, adjust=False).mean()
102
+ df['macd'] = ema12 - ema26
103
+ df['macd_signal'] = df['macd'].ewm(span=9, adjust=False).mean()
104
+ df['macd_hist'] = df['macd'] - df['macd_signal']
105
+
106
+ high = df['High']
107
+ low = df['Low']
108
+ prev_close = close.shift(1)
109
+ tr = pd.concat([high - low, (high - prev_close).abs(), (low - prev_close).abs()], axis=1).max(axis=1)
110
+ df['atr'] = tr.ewm(alpha=1/14, adjust=False).mean()
111
+
112
+ up_move = high.diff()
113
+ down_move = -low.diff()
114
+ plus_dm = ((up_move > down_move) & (up_move > 0)) * up_move
115
+ minus_dm = ((down_move > up_move) & (down_move > 0)) * down_move
116
+ tr_s = tr.ewm(alpha=1/14, adjust=False).mean()
117
+ p_dm_s = plus_dm.ewm(alpha=1/14, adjust=False).mean()
118
+ m_dm_s = minus_dm.ewm(alpha=1/14, adjust=False).mean()
119
+ tr_safe = tr_s.replace(0, 1e-12)
120
+ df['plus_di'] = 100 * (p_dm_s / tr_safe)
121
+ df['minus_di'] = 100 * (m_dm_s / tr_safe)
122
+ di_sum = (df['plus_di'] + df['minus_di']).replace(0, 1e-12)
123
+ dx = 100 * (df['plus_di'] - df['minus_di']).abs() / di_sum
124
+ df['adx'] = dx.ewm(alpha=1/14, adjust=False).mean()
125
+
126
+ last = df.iloc[-1]
127
+ price = float(last['Close'])
128
+ atr = float(last['atr'])
129
+
130
+ score_buy = 0
131
+ score_sell = 0
132
+ reasons = []
133
+
134
+ if price > last['sma50']:
135
+ score_buy += 1
136
+ reasons.append("βœ“ Price > SMA50")
137
+ else:
138
+ score_sell += 1
139
+ reasons.append("βœ— Price < SMA50")
140
+
141
+ if last['sma21'] > last['sma50']:
142
+ score_buy += 1
143
+ reasons.append("βœ“ SMA21 > SMA50")
144
+ else:
145
+ score_sell += 1
146
+ reasons.append("βœ— SMA21 < SMA50")
147
+
148
+ if last['ema8'] > last['ema21']:
149
+ score_buy += 1
150
+ reasons.append("βœ“ EMA8 > EMA21")
151
+ else:
152
+ score_sell += 1
153
+ reasons.append("βœ— EMA8 < EMA21")
154
+
155
+ if last['macd'] > last['macd_signal']:
156
+ score_buy += 1
157
+ reasons.append("βœ“ MACD bullish")
158
+ else:
159
+ score_sell += 1
160
+ reasons.append("βœ— MACD bearish")
161
+
162
+ if last['macd_hist'] > 0:
163
+ score_buy += 1
164
+ reasons.append("βœ“ MACD histogram +")
165
+ else:
166
+ score_sell += 1
167
+ reasons.append("βœ— MACD histogram -")
168
+
169
+ rsi = last['rsi']
170
+ if 50 < rsi < 70:
171
+ score_buy += 1
172
+ reasons.append(f"βœ“ RSI healthy ({rsi:.0f})")
173
+ elif 30 < rsi < 50:
174
+ score_sell += 1
175
+ reasons.append(f"βœ— RSI weak ({rsi:.0f})")
176
+ elif rsi >= 70:
177
+ score_sell += 1
178
+ reasons.append(f"⚠ RSI overbought")
179
+ elif rsi <= 30:
180
+ score_buy += 1
181
+ reasons.append(f"βœ“ RSI oversold")
182
+
183
+ adx = last['adx']
184
+ if adx > 20:
185
+ if last['plus_di'] > last['minus_di']:
186
+ score_buy += 2
187
+ reasons.append(f"βœ“ Strong uptrend (ADX:{adx:.0f})")
188
+ else:
189
+ score_sell += 2
190
+ reasons.append(f"βœ— Strong downtrend (ADX:{adx:.0f})")
191
+ else:
192
+ reasons.append(f"β—‹ Ranging market")
193
+
194
+ if score_buy >= 5:
195
+ prob = min(95, 55 + (score_buy * 7))
196
+ action = "🟒 BUY"
197
+ color_class = "buy-signal"
198
+ tp = round(price + (atr * 2), 2)
199
+ sl = round(price - (atr * 1), 2)
200
+ elif score_sell >= 5:
201
+ prob = min(95, 55 + (score_sell * 7))
202
+ action = "πŸ”΄ SELL"
203
+ color_class = "sell-signal"
204
+ tp = round(price - (atr * 2), 2)
205
+ sl = round(price + (atr * 1), 2)
206
+ else:
207
+ prob = max(40, 50 + (score_buy - score_sell) * 5)
208
+ action = "🟑 WAIT"
209
+ color_class = "wait-signal"
210
+ tp = sl = round(price, 2)
211
+
212
+ fetch_time = round(time.time() - start_time, 2)
213
+
214
+ st.markdown(f"""
215
+ <div class="signal-box">
216
+ <h2 class="{color_class}" style="text-align:center;">{action}</h2>
217
+ <h1 class="prob-big {color_class}">{prob}%</h1>
218
+ <p style="text-align:center;color:#888;">WIN PROBABILITY β€’ {fetch_time}s</p>
219
+ <hr style="border-color:#333;">
220
+ <div style="display:flex;justify-content:space-around;text-align:center;">
221
+ <div>
222
+ <p style="color:#888;">CURRENT PRICE</p>
223
+ <h3>${price:.2f}</h3>
224
+ </div>
225
+ <div>
226
+ <p style="color:#00E676;">TAKE PROFIT</p>
227
+ <h3>${tp:.2f}</h3>
228
+ </div>
229
+ <div>
230
+ <p style="color:#FF5252;">STOP LOSS</p>
231
+ <h3>${sl:.2f}</h3>
232
+ </div>
233
+ </div>
234
+ <hr style="border-color:#333;">
235
+ <h4 style="color:#FFD700;">πŸ“Š TECHNICAL ANALYSIS</h4>
236
+ <p style="font-family:monospace;color:#ccc;">{chr(10).join(reasons)}</p>
237
+ <p style="color:#888;text-align:center;">{selected_pair} β€’ {selected_tf} β€’ {datetime.now().strftime('%H:%M:%S')}</p>
238
+ </div>
239
+ """, unsafe_allow_html=True)
240
+
241
+ except Exception as e:
242
+ st.error(f"Error: {str(e)}")
243
+
244
+ st.markdown("---")
245
+ st.markdown('<p style="text-align:center;color:#555;font-size:12px;">XAUUSD Pro Trader β€’ Futures & Forex Signals</p>', unsafe_allow_html=True)
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ streamlit
2
+ pandas
3
+ yfinance