+
    B.j                     J   R t ^ RIHt ^ RIHt ^ RIHtHtHtH	t	 ^ RI
HtHtHt ^ RIHt ^ RIHtHtHt ^ RIHt ^ RIHt ^ R	IHtHt ^ R
IHtHtHtHtH t H!t!H"t"H#t#H$t$H%t% ^ RI&H't'H(t(H)t)H*t*H+t+H,t, ^ RI-H.t. ^ RI/H0t0 ]! R.R7      t1]! 4       t2]1Pg                  R]'R7      ]! ]4      3R R ll4       t4]1Pg                  R]5],,          R7      ]! ]4      ^3R R ll4       t6]1Pg                  R]5]),          R7      ]! ]4      ^23R R ll4       t7]1Pg                  R]5]*,          R7      ]! ]4      3R R ll4       t8]1Ps                  R4      ]! ]4      3R R ll4       t:]1Pw                  R 4      ]! ]4      3R! R" ll4       t<]1Pg                  R#4      ]! ]4      ^23R$ R% ll4       t=R&# )'z!Trading and dashboard API routes.)date)Decimal)	APIRouterDependsHTTPExceptionRequest)descfuncselect)AsyncSession)RequireAdmin2FARequireAnalystRequireViewer)get_settings)get_db)is_emergency_stop_activeset_emergency_stop)
	BotConfigDailyRiskStateDecisionLogOrderPositionPositionStatusRiskProfileSignalSymbolStrategy)DashboardStatsEmergencyStopRequestOrderResponsePositionResponseRiskConfigUpdateSignalResponse)record_audit_event)binance_serviceTrading)tagsz/dashboard/stats)response_modelc                0    V ^8  d   QhR\         R\        /#    userdbr   r   )formats   "app\api\routes\trading.py__annotate__r0   *   s        
      c                 Z  "   \         P                  ! 4       pVP                  \        \        4      P                  \        P                  V8H  4      4      G R j  xL
 pVP                  4       pVP                  \        \        4      P                  ^4      4      G R j  xL
 pVP                  4       p\        4       G R j  xL
 pVP                  \        \        P                  ! 4       4      P                  \        4      P                  \        P                  \         P"                  8H  4      4      G R j  xL
 p\$        P&                  ! 4       G R j  xL
 p	\)        V'       d   VP*                  M\,        P*                  T;'       g    V'       d   VP.                  MRV'       d   VP0                  M!\3        \5        \,        P6                  4      4      V'       d   VP8                  M
\3        R4      V'       d   VP:                  M
\3        R4      \3        R4      VP=                  4       ;'       g    ^ V'       d   VP>                  M^ R R T	V'       d   VP@                  MRV'       d.   VPB                  '       d   VPB                  PD                  R7      # R R7      #  ELC EL EL ELo ELU5i)NF0)trading_modeemergency_stopcapital	daily_pnldaily_pnl_pct	total_pnlopen_positionstrades_todaywin_ratemax_drawdownbinance_connected	is_lockedlock_reason)#r   todayexecuter
   r   wheretrading_datescalar_one_or_noner   limitr   r	   countselect_fromr   statusr   OPENr$   pingr   r4   settingsr5   current_capitalr   strpaper_initial_capitalr7   daily_loss_pctscalartrades_countr?   r@   value)
r+   r,   rA   risk_result
risk_stateconfig_resultconfig	emergencyr:   
binance_oks
   &&        r/   get_dashboard_statsrZ   )   s    
 JJLE

6.#9#?#?@[@[_d@d#effK//1J**VI%6%<%<Q%?@@M--/F.00I::tzz|((288NL_L_9_` N '++--J,2V((8M8M PPfV%:%:%.8
**gc(JhJhFi>j*4*&&'#,3=j//73<#,%,,.33!0:Z,,$*4*&&%4>:CYCYCYJ**00  `d  g A0 .s   AJ+JAJ+J!J+ J"A5J+6J%7J+J(4J+	J+J+'4J+J+:6J+1	J+;J+J+(J+:#J+J+"J+%J+(J+z/signalsc                <    V ^8  d   QhR\         R\        R\        /# r*   r+   r,   rF   r   r   int)r.   s   "r/   r0   r0   N   s&      
 r1   c                 J  "   VP                  \        \        \        P                  \
        P                  4      P                  \        \        P                  \        P                  8H  4      P                  \
        \        P                  \
        P                  8H  4      P                  \        \        P                  4      4      P                  V4      4      G R j  xL
 pVP                  4       pV UUUu. uF  w  rVp\!        VP                  VVVP"                  VP$                  VP&                  VP(                  VP*                  VP,                  VP.                  VP0                  VP2                  VP4                  VP                  R7      NK  	  uppp#  Lu upppi 5i)N)idsymbolstrategy_nameaction
confidence
risk_levelsuggested_size	stop_losstake_profitsupporting_indicatorscontradicting_indicatorsmathematical_reasonensemble_score
created_at)rB   r
   r   r   ra   r   namejoin	symbol_idr`   strategy_idorder_byr   rm   rF   allr"   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   )r+   r,   rF   resultrowsssym
strat_names   &&&     r/   list_signalsry   M   s-     ::vv}}hmm4	ff&&&))3	4	h**hkk9	:	$v(()	*	u F ::<D$ #'#" #'AJ! 	tt$88||||++kk"#"9"9%&%?%? ! 5 5++||	
  #'# s%   CF#FF#8BFF#F#z/ordersc                <    V ^8  d   QhR\         R\        R\        /# r\   r]   )r.   s   "r/   r0   r0   q   s"      M | VY r1   c                   "   VP                  \        \        \        P                  4      P                  \        \        P                  \        P                  8H  4      P                  \        \        P                  4      4      P                  V4      4      G R j  xL
 pVP                  4        UUu. uF  w  rE\        VP                  VVP                  VP                  VP                   VP"                  VP$                  VP&                  VP(                  VP*                  VP                  VP,                  R7      NK  	  upp#  Lu uppi 5i)N)r`   ra   siderI   r4   quantitypricefilled_pricerg   rh   rm   	filled_at)rB   r
   r   r   ra   ro   rp   r`   rr   r   rm   rF   rs   r   r|   rI   r4   r}   r~   r   rg   rh   r   )r+   r,   rF   rt   orw   s   &&&   r/   list_ordersr   p   s     ::ufmm$	feoo2	3	$u''(	)	u	 F* jjl #FA 	tt88ZZ''kk||kk	
 # s%   BEEE3BE	E	Ez
/positionsc                0    V ^8  d   QhR\         R\        /# r)   r-   )r.   s   "r/   r0   r0      s      } , r1   c                 ~  "   VP                  \        \        \        P                  4      P                  \        \        P                  \        P                  8H  4      P                  \        P                  \        P                  8H  4      4      G R j  xL
 pVP                  4        UUu. uF  w  r4\        VP                  VVP                  VP                  VP                  VP                   VP"                  VP$                  VP&                  VP(                  VP*                  R7      NK  	  upp#  Lu uppi 5i)N)r`   ra   rI   entry_pricer}   rg   rh   unrealized_pnlrealized_pnl	opened_at	closed_at)rB   r
   r   r   ra   ro   rp   r`   rC   rI   r   rJ   rs   r    r   r}   rg   rh   r   r   r   r   )r+   r,   rt   prw   s   &&   r/   list_positionsr      s     ::x'	fh((FII5	6	x."5"55	6 F& jjl #FA 	tt88ZZkk++kkkk	
 # 
s%   BD=D5D=,BD71D=7D=z/emergency-stopc                H    V ^8  d   QhR\         R\        R\        R\        /# r*   datarequestr+   r,   )r   r   r   r   )r.   s   "r/   r0   r0      s6     B B
BB B 		Br1   c                   "   \        V P                  4      G R j  xL
  VP                  \        \        4      P                  ^4      4      G R j  xL
 pVP                  4       pV'       d   RVP                  /MR pV'       d   V P                  Vn        \        TVP                  RRV'       d   VP                  MR VRV P                  RV P                  /VR7      G R j  xL
  RV P                  RV P                  /#  L L L"5i)Nr5   EMERGENCY_STOP_UPDATEDr   reasonuser_idrc   entity_type	entity_id	old_value	new_valuer   )r   activerB   r
   r   rF   rE   r5   r#   r`   r   )r   r   r+   r,   rV   rW   r   s   &&&&   r/   r5   r5      s      T[[
)))**VI%6%<%<Q%?@@M--/F=C!6#8#89I $

'%&))4#T[[(DKKH	 	 	 dkk8T[[AA! *@
	s@   DD4DDD-DAD"D#DDDz/risk/configc                H    V ^8  d   QhR\         R\        R\        R\        /# r   )r!   r   r   r   )r.   s   "r/   r0   r0      s6     N N
NN N 		Nr1   c                   "   VP                  \        \        4      P                  \        P                  R 8H  4      4      G Rj  xL
 pVP                  4       pV'       g   \        RRR7      hV P                  R R7      pV Uu/ uF  qw\        \        WW4      4      bK  	  ppVP                  4        F  w  ry\        WWV	4       K  	  \        TVP                  RRVP                  TVP                  4        UU	u/ uF  w  ryV\        V	4      bK  	  up	pVR7      G Rj  xL
  R	R
RVP                  /#  Lu upi u up	pi  L!5i)TNi  zDefault risk profile not found)status_codedetail)exclude_unsetRISK_CONFIG_UPDATEDr   r   messagezRisk configuration updatedprofile)rB   r
   r   rC   
is_defaultrE   r   
model_dumprN   getattritemssetattrr#   r`   rn   )
r   r   r+   r,   rt   r   update_datakeyr   rS   s
   &&&&      r/   update_risk_configr      s&     ::f[1778N8NRV8VWXXF'')G4TUU///5K<GHKSc''/00KIH!'')
e$ *

$!**5@5F5F5HI5Hzs3E
?5HI	 	 	 3YMM' Y I J	sC   AED3E!#ED5!AE:D:EE E5Ez/decisions/logsc                <    V ^8  d   QhR\         R\        R\        /# r\   )r   r   r^   )r.   s   "r/   r0   r0      s"      > | ^a r1   c                 \  "   VP                  \        \        4      P                  \	        \        P
                  4      4      P                  V4      4      G R j  xL
 pVP                  4       P                  4       pV Uu. uF  pR\        VP                  4      RVP                  RVP                  P                  RVP                  RVP                  P                  RVP                   RVP"                  RVP$                  R	VP
                  P'                  4       /	NK  	  up#  Lu upi 5i)
Nr`   ra   rc   rd   re   was_executedblock_reasonr   rm   )rB   r
   r   rr   r   rm   rF   scalarsrs   rN   r`   ra   rc   rS   rd   re   r   r   rk   	isoformat)r+   r,   rF   rt   logsls   &&&   r/   list_decision_logsr      s     ::f[1::4@V@V;WX^^_deffF>>!D  A #add)ahhahhnn!,,!,,,,ANNANNa++!,,002
	
   gs%   AD,D%&D, B"D'"D,'D,N)>__doc__datetimer   decimalr   fastapir   r   r   r   
sqlalchemyr   r	   r
   sqlalchemy.ext.asyncior   app.api.depsr   r   r   app.core.configr   app.core.databaser   app.core.redis_clientr   r   
app.modelsr   r   r   r   r   r   r   r   r   r   app.schemasr   r   r   r    r!   r"   app.services.audit_servicer#   app.services.binance_servicer$   routerrL   getrZ   listry   r   r   postr5   putr   r    r1   r/   <module>r      s   '   > > ) ) / G G ( $ N    : 8		$> ~> v  ? F JtN';< v =D Id=&9:>Efo\^  ;4 L.>)?@AH  A0 
 v	B  B2 N
 v	N N8 FMfodf  r1   