From 51bf3df2275bede3ec0641bcc433594bee9a3fb1 Mon Sep 17 00:00:00 2001 From: Marc Blatter Date: Sat, 4 Jul 2026 13:14:44 +0200 Subject: [PATCH] Bot auto-update: src/__pycache__/web_dashboard.cpython-310.pyc,src/web_dashboard.py --- src/__pycache__/web_dashboard.cpython-310.pyc | Bin 19817 -> 18499 bytes src/web_dashboard.py | 391 +++++++++--------- 2 files changed, 184 insertions(+), 207 deletions(-) diff --git a/src/__pycache__/web_dashboard.cpython-310.pyc b/src/__pycache__/web_dashboard.cpython-310.pyc index 80abfe1eaaaccf71cf8d5cdb9523bc76351defd2..2a3021e8da8e5107964bbd1627b944069088f284 100644 GIT binary patch delta 2504 zcmbtV&u<$=7{v%BQBX`$r*R!ObnG}(1+TknJ9cm@6@i36v>@8%02eg7JG-8Cy}Q~S zC$S=Aao~W&0Wk+8#2>&Faz{cOKycy0flEaX6+*rA#1WX;_3V!AO(kGPcATC0e!cg; zZ~yo__uVJCytlHl`~+LiK78#?=f+q0n`=+rZ&Q8k$Kvzgco|IA00uU8dqBOiOy4?l zo_c4_kKd0@qc7bvN78K_8h7o$8@i@qc#aqJz_tqczLGc;&rOx@^tt7^M6uuiJEI;@ zpzk|K2}dD8gF1NG!S3A~(6|--KYo>6t%HlVknJI`|N6x`2%#G)AqudSI%GCT=_73S zNe^g^PJANe-q-4&-(;T_`?RGhM2c3l=IrR#g|qahLb;h>1K^N&X=ERoCU)%}XsiCw zlsR2n-?(k!(03rK(sIz`n1g+17!qua7;r8@F3UOep@9?~kwb*s)H`&r?JAf76ZU|? zZlZv3^LDAY5Qn3mu0KbAE^l6KLcXWs^Eiz@f+h+;Uwcf+^nDPR_UX&dHT`T)7P}7bOIu=98S3H z2zL^lmD*-fRx>GSk{(?(koBrVAIJXJgc#eq6g|7tSQP63IzyRN5lgfJj|Ez%d+u^BxEQa_mdz1t zL@~mlPS6p_sHhXIxT0~&xXi2Xg_z)jtQ=*z$tEtc;VCATwaeB#?jbUE2=-isVB%!O zlJU5vC4It+oYH252YtPn-VX- z#g`3zHs4tH#K2$A*0PTR%L@k3Wh3Q(=$hg}kyfhb_GEx%-~UalTW?OGmf6vAl+$D? zB*10rrQ?gkG!-DBMJj_peTwQsY?3}hR#kV>5tjC?1N{)O0qi-^uNeGsCitW;X+3L- z>}qVMK}6Gu2IuMXmCTf>F$s7xDbZV@w+I|$k+^|CJQ8BlnffDuC&OZOQElu->iMBu zZDnYXdm!>4oXLYSJ2p}Ip07c?<~bu!Yl$H);~w<--T`|d9Y1!`wl%h6|B`V74SX_E z_&bTWDJ@lNuL$_WG!Y0SX{RLdqevJb899tiOc;(vj9)D?+lB)}q6~d=67bjU?bX?U z@<6^^tJ3{inUY#DKaK6ldpp16X}A6D$=~f#j$Y{8TmpW8*^n5~-#TUbS?BkY54&IH c7Hh}EV|me!yPGHbFRrXF7MF7Cxu^d62N^Jp*8l(j delta 2991 zcmbVO&u`mQ9H+EWx2VgOC8--yltQpYQkc z{e0g~U(EgSqT;KnB>!bU7-=+65FD|xdJM;4rg6mcEFvWhUe7TroH!jw7 z)9$p8yc@oF|MEKhRT7Tdj(!v^X6x8xICdZ!xMx~NEp+uR={N+vd;4kyy@R_>4_DCJ z#3l#u`yTOhY{QL@ZC~_>XBwgP&<;XvtnGI^r*G>mWSKU>p4joQZW24#RMfgoI@c?x zTqBzHx}w!~kbDImRk_w~s7R6JD_co(nqxU$3zdn?J`s?5v6N^2dZsOQiP`A}Ew=Zd zOMj7G&PW=7!Qk5C8TmY0rjN3#^qG`ROI?EX_|?VII{i_|rc~KIjI5vJ1fk|0BHyu0 z9hDneLp36hw4K{vRx;d5SK&U~)!c?uC%wtxCyYE6R_4JS3-(y@103}Iv2y69?^+m2 zVcIN*V%u`G{iNk#b(;{X(%{igDnnV8wPsyS?hg~YgdTLwfJDfjEDQ7`pQfJ`GHY$e z(vv#|9P!PM2{209Aw3rVlGO1aNe@GUJuG_DTcQ-R?ZG~Tc{T2`mrD^ zu+%eK*CY*l+}0!Mf%Dvr7c8psr^0LWk?;!8KF4WD7gm;O zuzKkn=Px}ezUd94MCm;a&58f3Pvqtpz1xll zLMU3q0QuaWEO?ws;ad81`TQG0)coC0iCCC3N*hVW&Iky}aS5*lH#ZWNn5+b=;O^*d z&2oHlMloVo!~HQ?E=T)aY!1i6Y_2C*z_<>A%Oc^HOxtjhr7hkAPk$!+QtwEZSNX`IdfzeAZt2!A0$^7FEf&94 z;5B_Jt=^EBHPIY5hi$V51A)!$$lY*s!{Qi4=;QPQ^jmuVty?##Tz#^Lst9h;>0i~t j9DkrGWsfa5y|1K(f1Vn(uj7aGwv=0x&dufK7XJMY;q4g4 diff --git a/src/web_dashboard.py b/src/web_dashboard.py index 2984ff9..7ec4782 100644 --- a/src/web_dashboard.py +++ b/src/web_dashboard.py @@ -210,207 +210,184 @@ html_content = """ Trading Bot Dashboard + * { + margin: 0; + padding: 0; + box-sizing: border-box; + } + + body { + background-color: #0a0a0a; + color: #d0d0d0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + line-height: 1.6; + } + + h1, h2, h3, h4 { + color: #ffffff; + } + + .container { + max-width: 1400px; + margin: 0 auto; + padding: 40px; + } + + .header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 40px; + padding-bottom: 20px; + border-bottom: 1px solid #2a2a2a; + } + + .header h1 { + color: #ffffff; + font-size: 28px; + } + + .status-badge { + background-color: #2ecc71; + color: #000; + padding: 6px 14px; + border-radius: 20px; + font-size: 12px; + font-weight: 600; + } + + .metrics-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 20px; + margin-bottom: 40px; + } + + .card { + background-color: #1a1a1a; + border: 1px solid #2a2a2a; + border-radius: 8px; + padding: 24px; + } + + .card:hover { + border-color: #3a3a3a; + } + + .card-label { + color: #888888; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 1px; + margin-bottom: 12px; + font-weight: 600; + } + + .card-value { + color: #ffffff; + font-size: 32px; + font-weight: 700; + margin-bottom: 4px; + } + + .card-subtext { + color: #666666; + font-size: 12px; + } + + .positive { + color: #2ecc71; + } + + .negative { + color: #ff5555; + } + + .section-title { + color: #ffffff; + font-size: 18px; + font-weight: 700; + margin: 40px 0 20px 0; + padding-bottom: 10px; + border-bottom: 1px solid #2a2a2a; + } + + .performance-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); + gap: 16px; + margin-bottom: 40px; + } + + .performance-card { + background-color: #1a1a1a; + border: 1px solid #2a2a2a; + border-radius: 8px; + padding: 20px; + text-align: center; + } + + .performance-label { + color: #888888; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 1px; + margin-bottom: 10px; + font-weight: 600; + } + + .performance-value { + color: #2ecc71; + font-size: 28px; + font-weight: 700; + } + + table { + width: 100%; + border-collapse: collapse; + margin-bottom: 40px; + } + + th { + background-color: #151515; + color: #888888; + padding: 14px; + text-align: left; + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + border-bottom: 1px solid #2a2a2a; + } + + td { + padding: 14px; + border-bottom: 1px solid #1f1f1f; + color: #d0d0d0; + font-size: 13px; + } + + tr:hover { + background-color: #141414; + } + + .empty-state { + text-align: center; + color: #666666; + padding: 40px; + font-style: italic; + font-size: 13px; + } + + .last-update { + text-align: right; + color: #666666; + font-size: 11px; + margin-top: 20px; + padding-top: 20px; + border-top: 1px solid #2a2a2a; + } +
@@ -518,26 +495,26 @@ html_content = """ } function updateDashboard(data) { - // Update key metrics - CHF PRIMARY, USD secondary + // Update key metrics - PRIMARY, USD secondary const usdt = data.balance.USDT || 0; const usdt_chf = usdt * 0.84; - document.getElementById('usdt').textContent = `$${usdt.toFixed(2)} / CHF ${usdt_chf.toFixed(2)}`; + document.getElementById('usdt').textContent = `$${usdt.toFixed(2)}${usdt_chf.toFixed(2)}`; const portfolio_usd = data.portfolio_value_usd || 0; const portfolio_chf = data.portfolio_value_chf || (portfolio_usd * 0.84); - document.getElementById('portfolio').textContent = `$${portfolio_usd.toFixed(2)} / CHF ${portfolio_chf.toFixed(2)}`; + document.getElementById('portfolio').textContent = `$${portfolio_usd.toFixed(2)}${portfolio_chf.toFixed(2)}`; - // Update P&L with color - CHF primary + // Update P&L with color - primary const dailyPnl = data.daily_pnl || 0; const dailyPnl_chf = dailyPnl * 0.84; const dailyPnlEl = document.getElementById('daily-pnl'); - dailyPnlEl.textContent = `$${dailyPnl >= 0 ? '+' : ''}${dailyPnl.toFixed(2)} / CHF ${dailyPnl_chf >= 0 ? '+' : ''}${dailyPnl_chf.toFixed(2)}`; + dailyPnlEl.textContent = `$${dailyPnl >= 0 ? '+' : ''}${dailyPnl.toFixed(2)}${dailyPnl_chf >= 0 ? '+' : ''}${dailyPnl_chf.toFixed(2)}`; dailyPnlEl.className = 'card-value ' + (dailyPnl >= 0 ? 'positive' : 'negative'); const totalPnl = data.total_pnl || 0; const totalPnl_chf = totalPnl * 0.84; const totalPnlEl = document.getElementById('total-pnl'); - totalPnlEl.textContent = `$${totalPnl >= 0 ? '+' : ''}${totalPnl.toFixed(2)} / CHF ${totalPnl_chf >= 0 ? '+' : ''}${totalPnl_chf.toFixed(2)}`; + totalPnlEl.textContent = `$${totalPnl >= 0 ? '+' : ''}${totalPnl.toFixed(2)}${totalPnl_chf >= 0 ? '+' : ''}${totalPnl_chf.toFixed(2)}`; totalPnlEl.className = 'card-value ' + (totalPnl >= 0 ? 'positive' : 'negative'); // Update performance