Adedoyinjames commited on
Commit
3f39d96
·
verified ·
1 Parent(s): d4a541d

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +80 -0
app.py ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import yfinance as yf
3
+ import pandas as pd
4
+ import plotly.graph_objects as go
5
+ from datetime import datetime
6
+
7
+ # --- ALGORITHM STATE ---
8
+ portfolio = {"balance": 100.0, "trades": []}
9
+
10
+ def get_market_data():
11
+ df = yf.download("EURUSD=X", period="5d", interval="1h")
12
+ # Flatten multi-index if necessary
13
+ if isinstance(df.columns, pd.MultiIndex):
14
+ df.columns = df.columns.get_level_values(0)
15
+ return df.dropna()
16
+
17
+ def run_trading_logic():
18
+ df = get_market_data()
19
+
20
+ # 1. CALCULATE INDICATORS (The "Brain")
21
+ df['SMA_Fast'] = df['Close'].rolling(window=10).mean()
22
+ df['SMA_Slow'] = df['Close'].rolling(window=30).mean()
23
+
24
+ current_price = df['Close'].iloc[-1]
25
+ fast_ma = df['SMA_Fast'].iloc[-1]
26
+ slow_ma = df['SMA_Slow'].iloc[-1]
27
+
28
+ # 2. DECISION LOGIC (The "Algorithm")
29
+ signal = "HOLD"
30
+
31
+ # Check if we already traded today
32
+ today = datetime.now().strftime("%Y-%m-%d")
33
+ already_traded = any(t['Date'] == today for t in portfolio['trades'])
34
+
35
+ if not already_traded:
36
+ if fast_ma > slow_ma:
37
+ signal = "BUY"
38
+ elif fast_ma < slow_ma:
39
+ signal = "SELL"
40
+
41
+ # 3. EXECUTE TRADE (1:3 Risk Management)
42
+ if signal != "HOLD":
43
+ risk = 0.0020 # 20 Pips Stop Loss
44
+ reward = 0.0060 # 60 Pips Take Profit
45
+
46
+ trade = {
47
+ "Date": today,
48
+ "Action": signal,
49
+ "Entry": round(current_price, 5),
50
+ "SL": round(current_price - risk if signal == "BUY" else current_price + risk, 5),
51
+ "TP": round(current_price + reward if signal == "BUY" else current_price - reward, 5),
52
+ "Result": "PENDING"
53
+ }
54
+ portfolio['trades'].append(trade)
55
+
56
+ # 4. VISUALS
57
+ fig = go.Figure(data=[go.Candlestick(x=df.index, open=df['Open'], high=df['High'], low=df['Low'], close=df['Close'])])
58
+ fig.add_trace(go.Scatter(x=df.index, y=df['SMA_Fast'], name='Fast MA', line=dict(color='orange')))
59
+ fig.add_trace(go.Scatter(x=df.index, y=df['SMA_Slow'], name='Slow MA', line=dict(color='blue')))
60
+ fig.update_layout(template="plotly_dark", title="EUR/USD Algorithm Analysis")
61
+
62
+ return fig, pd.DataFrame(portfolio['trades']), f"Current Balance: ${portfolio['balance']:.2f}"
63
+
64
+ # --- GRADIO INTERFACE ---
65
+ with gr.Blocks() as demo:
66
+ gr.Markdown("# 📉 EUR/USD Pure Algorithm (No-ML)")
67
+ status = gr.Label(value="Analyzing Market...")
68
+
69
+ with gr.Row():
70
+ chart = gr.Plot()
71
+ history = gr.Dataframe(headers=["Date", "Action", "Entry", "SL", "TP", "Result"])
72
+
73
+ btn = gr.Button("Manual Refresh / Scan Market")
74
+ btn.click(run_trading_logic, outputs=[chart, history, status])
75
+
76
+ # Optional Auto-refresh
77
+ timer = gr.Timer(60)
78
+ timer.tick(run_trading_logic, outputs=[chart, history, status])
79
+
80
+ demo.launch()