From 8acd83b33f231fa5f90e89ec8993280a1ec35c8a Mon Sep 17 00:00:00 2001 From: Marc Blatter Date: Sat, 4 Jul 2026 12:54:16 +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 19779 -> 18155 bytes src/web_dashboard.py | 242 +++++++----------- 2 files changed, 91 insertions(+), 151 deletions(-) diff --git a/src/__pycache__/web_dashboard.cpython-310.pyc b/src/__pycache__/web_dashboard.cpython-310.pyc index f124a7e0f895a68bed239f529ac5c120e2cf5acb..2f735b78d3a66a57f83d3147c40b79434f5477fa 100644 GIT binary patch delta 1781 zcma)6PfXip6!+)+GbV8e`R@?oKnl%DiXF(322e}OL?;;SZBix;nb-k$0cT&#pz2y! zd)Q%rrFYtxw99td4x6HBlUDW8!;T%&q)ANMdg=~H?R^Kf?+Xc#shw&k&(H6D@89pe z=lh?c{SS~}dOSQsuIWdYul+dpt>EH$7kRx;{`Jd{;KQdiRRMXAzF5OXSub&vwTxB0)LqlnH;B}% z7*@$+Vb!P_Ys-su%dC|+6KgtNG&Jlb_Bcq1Ln#zO~X1&5uc;dA|(@)Ou;wq zDU^rD?wRfrDwy&p=nj~k9GZqNJ-?zExGAK#JTXbTunUs&ez+_6dM;8QmndmQn}Oej zGw2KG@+Q%2@1#xuX=6=f1+A@ON$o>vwmX?F8cm} z?WjYlsH;ZxdQlp_WUgaF$I^nnF+3uznrmjgrj~Ws72|Nb*AE9F-kT|#RTCGbL0Ogc zY#w$4Ay=iMPwWO6HVZBrUN zJPJxA2v-A~Z;Z(5X4TM+G(IT^w*pb@H zUzD;>ag&DkV_tYSAizgq2V96a;q@>F#khxL9*iA%mCm*z7;BnQRxPs`$9;@IMW*H3 zWD?9Lg&jE(N`VWh2z7_X;6ZQ{rh^IMG~is-Ei$^G1fwALQEImt3R_23e;iVBXFhHF?0gZECm!VFR7=qx!j19RS1#E@9bEbG_xOe zB1vZp?%iMp9!G}Z&!7X&i%z>j00URF-$tJ_Ekp9b`G|}51n$PV+ji|{Jc~9O(0Pn|=2}@n7>e7u4P&N$BS}Bs?V$!jM@$4xWaCq}yKAD;7MA&86}jEmcb`@l~~MW!7t&YC%nmoSYCloe*%QM&RCHjJ?S> zCQp6hg`K^Z9Xf4St!w8W&QClll16-_ delta 2492 zcma)8U2GIp6yE9nbbq?rzuDh*ySGrJm7QgFmuV+f>)DB+P9@!b&5o!#vp!MK|}duQ&s z_uTV+-#If6-s7%+#050J-)qCqiTjhUw!L&U(CYO%@$x$UjB!YK!vh~XOuKB4+FrNq zw&BR(v_);QbHrw6*N(SsQ#RQJC%s$7j@$PhJvQXfbGUZJN2{j3aH^&&MY`gxUzkdT zt~ktv8r9p;M-MVX&>Vu>-V>279JO3%akOw=u7wNy)8T64+?+nPe8_izdsZJ|-W)S| zG%L0tkG_jtv2fPpaW9=$%z8+DH@mxsnP-^E!~M2BTmkz1I%(zgvMF9sAhAab~O#`=O(K2X`5ExA$|C%O~5*T=XlPGy-T^F1YPp&f5~; z+U$-N{UF@!cq@2=%{m&h`e7W*ISMe>c^4jZk!|9bm#q8DX!C-hyrxvk1u~=QGSvmV z1?j#xe9+asr=(R)p(Irlb)i7EAE9N9lA}}GljLP-R;x%!a)4IpS^R&6>atYDfgx25 z!JxWQ8iPl%aJE2HrAj4TDC?4}AR&Y4Y)+=-B-tvK#A0TYh}&?S6*Du#S&|mTZ9{Oa zE99gie&G{70>17*ke#@qRE1fplxNKX^E*3ho$`LS?4G3(9-J(~Vj}7)VhpOow|tz- z!u!DpywKb28ZHiJOC?z1gRt1^fjfKvuJrJ}#=_Y&uDuqGI5Vjnt+4RT1-J{m)7$S! z8Kz{;8R+(FFbQAqeowwOPtwD+c`Hj#0kaW{`CJwk2OZ~T74uR!2oHHrOGbpN!JY6| z*a^SKT~0AIiV+ZAXR53#GQ>j1NLCbU^GT8}=|e*s*(po40?EMFJi%N(?dgYGp?Iu7 z^zw`}n91dmWX*`F^bm025Rg7!^YmPpXJ>%7<6UqC{}IUvhUAP?JR|E`O(-cUVuj4B zbNXN!Pq8V!sUw?;sc6*#kyMq4sjNY$WYBsBMM;<8W?!P`iATz@Gw~xrQByUH(*S8> zl2(wCrdJBY8mf{>j|~dB+B{qp`rw=JmS#Tp!rkjYeAu%eTKhWT2fm$g1b;_ja5L(& zXAt0fVF7;ba=R=QiA)UeOXMl|EE;o4B7Wfyga-L=iK#rJoasFr>vz^UWLM{7TkKg` z1SyvA7_`VRK=!}md+SWJHtxaq;rPbmwK^;jv5=QSUCDp+v8$VZ z>uZw2s(B=uv`B0OKt%0Wb&M-t!%?Z0G=%N>2-Xg(pN+!8>Vb=KzL{l{Yt~)rB0z3C z>-n;ch+*nlwG1Q{Zgd}u`*TuFP)yXwewjc5#xWRXGc`W?kCXscf@FB#s zE>(*ZTcXtgj&ov@X%Fi&t3*c|b(I$LNisUxD0eZHc~YfY_$*=1WaPe^Xlph@3o>hK zRhprymEwjvz`m5Hl}nKvtEMK(eyi&VXC-xxS`9MlU|y@mwMJaWI?ojHZoqV3v{^p> zxtfe6EwINhZnKyegde-w?8C#uxKp#B*}lI;W3bc{Ky~_{mWVJgdBN1M1+FWeY&Odj zaOAl&bfKh66>5+Y7RS_PrIvK9LKcZulZuLo4=-_yys<&brnY`Mjni;38Xsqy3CiZ( zq^eSp>V2>gZM7Am^P24HA(lT+eAwPec9MOQ6J%g<&XCPh#n}=pqpc6qQ*Msu H9FP75dXc;0 diff --git a/src/web_dashboard.py b/src/web_dashboard.py index e1323ed..26d0ddc 100644 --- a/src/web_dashboard.py +++ b/src/web_dashboard.py @@ -118,9 +118,11 @@ async def record_buy(pair: str, qty: float, price: float): """Record a buy trade""" trading_state['current_trades'][pair] = { 'qty': qty, - 'entry_price': price, - 'entry_time': datetime.now().isoformat(), - 'type': 'BUY' + 'buy_price': price, + 'buy_time': datetime.now().isoformat(), + 'peak_profit': 0, + 'trailing_stop': None, + 'order_id': None } trading_state['trades_today'] += 1 await broadcast_update() @@ -209,17 +211,21 @@ html_content = """ Trading Bot Dashboard +
@@ -519,23 +459,23 @@ html_content = """ // Update key metrics - CHF 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)}`; 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)}`; // Update P&L with color - CHF 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)}`; 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)}`; totalPnlEl.className = 'card-value ' + (totalPnl >= 0 ? 'positive' : 'negative'); // Update performance