From e67c9859a03ee1b2c467a9f1fd524dc48c8d6147 Mon Sep 17 00:00:00 2001 From: Marc Blatter Date: Wed, 29 Jul 2026 10:57:44 +0200 Subject: [PATCH] Dashboard: Restore v0.32 Analytics layout - Update version to v0.6 --- src/web_dashboard.py | 278 +++---------------------------------------- 1 file changed, 17 insertions(+), 261 deletions(-) diff --git a/src/web_dashboard.py b/src/web_dashboard.py index 8bac185..78d8af6 100644 --- a/src/web_dashboard.py +++ b/src/web_dashboard.py @@ -1,11 +1,9 @@ #!/usr/bin/env python3 -"""Trading Bot Dashboard v0.4 (Dynamic Positioning) - Auto-load 1-Day chart on page load""" -import sqlite3 from fastapi import FastAPI from fastapi.responses import HTMLResponse from binance.client import Client from datetime import datetime -import json, os, time +import json, os, time, sqlite3 app = FastAPI() @@ -20,7 +18,8 @@ DB = '/home/marc/bot-deploy/pnl_charts.db' def init_db(): c = sqlite3.connect(DB).cursor() - c.execute("""CREATE TABLE IF NOT EXISTS history (ts INTEGER PRIMARY KEY, pv REAL, pu REAL, pp REAL, uf REAL, ap INTEGER)""") + c.execute("""CREATE TABLE IF NOT EXISTS history ( + ts INTEGER PRIMARY KEY, pv REAL, pu REAL, pp REAL, uf REAL, ap INTEGER)""") sqlite3.connect(DB).commit() init_db() @@ -40,34 +39,29 @@ async def state(): try: t = binance.get_ticker(symbol=p) prices[p.replace('USDT', '')] = float(t['lastPrice']) - except: pass + except: + pass pv = sum(bal.get(a, {}).get('total', 0) * prices.get(a, 0) for a in ['BTC', 'ETH', 'SOL', 'BNB', 'XRP', 'USDT']) uf = bal.get('USDT', {}).get('free', 0) - # Get latest P&L from database - try: - conn = sqlite3.connect('/home/marc/bot-deploy/pnl_charts.db') - row = conn.execute('SELECT pu, pp FROM history ORDER BY ts DESC LIMIT 1').fetchone() - conn.close() - if row: - pu, pp = row[0], row[1] - else: - pu, pp = 0.0, 0.0 - except: - pu, pp = 0.0, 0.0 + pu = pv - 137.79 + pp = (pu / 137.79 * 100) if pv > 0 else 0 ap = 0 try: with open('/home/marc/bot-deploy/active_trades.json') as f: ap = json.load(f).get('count', 0) - except: pass + except: + pass conn = sqlite3.connect(DB) - conn.execute("INSERT OR REPLACE INTO history VALUES (?, ?, ?, ?, ?, ?)", (int(time.time()), pv, pu, pp, uf, ap)) + conn.execute("INSERT OR REPLACE INTO history VALUES (?, ?, ?, ?, ?, ?)", + (int(time.time()), pv, pu, pp, uf, ap)) conn.commit() conn.close() - return {'portfolio_value': round(pv, 2), 'pnl_usdt': round(pu, 2), 'pnl_pct': round(pp, 2), 'usdt_free': round(uf, 2), 'active_positions': ap, 'balance': bal, 'prices': prices} + return {'portfolio_value': round(pv, 2), 'pnl_usdt': round(pu, 2), 'pnl_pct': round(pp, 2), + 'usdt_free': round(uf, 2), 'active_positions': ap, 'balance': bal, 'prices': prices} except Exception as e: return {'error': str(e)} @@ -79,257 +73,19 @@ async def history(hours: int = 24): conn.close() ts_list, pcts, usdts = [], [], [] - seen_ts = set() - for t, p, u in rows: dt = datetime.fromtimestamp(t) - - if hours <= 24: - ts = dt.strftime('%H:00') - else: - ts = dt.strftime('%d.%m.%y') - - if ts in seen_ts: - continue - - seen_ts.add(ts) - ts_list.append(ts) + ts_list.append(dt.strftime('%H:%M' if hours <= 24 else '%m-%d')) pcts.append(round(p, 2)) usdts.append(round(u, 2)) return {'timestamps': ts_list, 'pnl_pcts': pcts, 'pnl_usdts': usdts, - 'current_pct': pcts[-1] if pcts else 0, 'current_usdt': usdts[-1] if usdts else 0, - 'min_pct': min(pcts) if pcts else 0, 'min_usdt': min(usdts) if usdts else 0, - 'max_pct': max(pcts) if pcts else 0, 'max_usdt': max(usdts) if usdts else 0, - 'avg_pct': sum(pcts)/len(pcts) if pcts else 0, 'avg_usdt': sum(usdts)/len(usdts) if usdts else 0} + 'current_pct': pcts[-1] if pcts else 0, 'min_pct': min(pcts) if pcts else 0, + 'max_pct': max(pcts) if pcts else 0, 'avg_pct': sum(pcts)/len(pcts) if pcts else 0} @app.get('/') async def dashboard(): - html = """ - - - - -Trading Bot v0.4 - - - - -
- -
-

🤖 Trading Bot v0.4

P&L Analytics

-
● LOADING
-
- -
- - -
- -
-
-
Portfolio
-
-
P&L
-
-
-
USDT
-
-
Trades
-
-
- -
-

Holdings

- -
-
-
- -
-
-
📈 P&L Performance (Live)
-
- - - -
- -
-
-
Current
-- -- -
-
-
Min
-- -- -
-
-
Max
-- -- -
-
-
Avg
-- -- -
-
-
-
- -
- - - -""" - return HTMLResponse(content=html) + return HTMLResponse("""Trading Bot v0.6

🤖 Trading Bot v0.6

P&L Analytics

● LOADING
Portfolio
-
P&L
-
-
USDT
-
Trades
-

Holdings

📈 P&L Performance (Live)
Current
-
Min
-
Max
-
Avg
-
""") if __name__ == '__main__': import uvicorn