#!/usr/bin/env python3 from fastapi import FastAPI from fastapi.responses import HTMLResponse from binance.client import Client from datetime import datetime import json, os, time, sqlite3 app = FastAPI() env = {} with open('/home/marc/bot-deploy/.env') as f: for line in f: k, _, v = line.partition('=') env[k.strip()] = v.strip() binance = Client(env.get('BINANCE_API_KEY_LIVE'), env.get('BINANCE_API_SECRET_LIVE')) DB = '/home/marc/bot-deploy/pnl_charts.db' def get_chart_data(days=1): conn = sqlite3.connect(DB) rows = conn.execute(f"""SELECT ts, pv, pp FROM history WHERE ts > {int(time.time()) - days*86400} ORDER BY ts""").fetchall() conn.close() return [(datetime.fromtimestamp(r[0]).strftime('%H:%M'), r[2]) for r in rows] @app.get('/') async def root(): chart_1d = get_chart_data(1) chart_7d = get_chart_data(7) chart_30d = get_chart_data(30) html = f''' Trading Bot v0.6

🤖 Trading Bot v0.6

Contrarian Mean Reversion Strategy

Analytics

1-Day Chart: {len(chart_1d)} points

7-Day Chart: {len(chart_7d)} points

30-Day Chart: {len(chart_30d)} points

1D Performance
+{chart_1d[-1][1] if chart_1d else 0:.2f}%
7D Performance
+{chart_7d[-1][1] if chart_7d else 0:.2f}%
30D Performance
+{chart_30d[-1][1] if chart_30d else 0:.2f}%
''' return HTMLResponse(html) @app.get('/api/state') async def state(): try: acc = binance.get_account() portfolio = sum(float(b['free']) * (1.0 if b['asset']=='USDT' else 0) for b in acc['balances']) return {'portfolio': portfolio, 'status': 'ok'} except: return {'error': 'failed'} if __name__ == '__main__': import uvicorn uvicorn.run(app, host='0.0.0.0', port=7000)