
    bAj0              
      L   d Z ddlmZ ddlmZ ddlmZmZmZmZ ddl	m
Z
 ddlmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZmZ  e       Ze G d d             ZddZddZddZdddZ	 d	 	 	 	 	 ddZ dddZ!  e"dd e#e       e#e        e#e!      d             Z$y)z3Portfolio equity and daily risk state calculations.    )annotations)	dataclass)datedatetimetimetimezone)Decimal)funcselect)AsyncSession)Session)get_settings)DailyRiskStateOrderOrderStatusPositionPositionStatusc                  ^    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   y)EquitySummaryr	   capital	total_pnl	daily_pnldaily_pnl_pctinttrades_todayzfloat | Nonewin_raterealized_totalunrealized_totalN)__name__
__module____qualname____annotations__     Hc:\xampp\htdocs\tradingbinance\backend\app\services\portfolio_service.pyr   r      s2    r$   r   c                j    t        j                  | t        j                  t        j
                        S )N)tzinfo)r   combiner   minr   utc)trading_dates    r%   
_day_startr,      s    L$((8<<HHr$   c                H   t        t        t        j                              }t	        |      }t        t        | j                  t        j                  t        j                  t        j                        d            j                  t        j                  t        j                  k(        j                         xs d            }t        t        | j                  t        j                  t        j                  t        j                         d            j                  t        j                  t        j"                  k(        j                         xs d            }||z   |z   }||z
  }t        t        | j                  t        j                  t        j                  t        j                        d            j                  t        j                  t        j                  k(  t        j$                  |k\        j                         xs d            }||z   }	| j                  t&              j                  t&        j(                  |k(        j+                         }
|
r|
j,                  n|}|r|	|z  dz  n
t        d      }| j                  t        j.                  t0        j2                              j                  t0        j                  t4        j6                  k(  t0        j8                  |k\        j                         xs d}| j                  t              j                  t        j                  t        j                  k(        j;                         }d }|r-t        d |D              }t=        |t?        |      z  dz  d      }tA        |||	|tC        |      |||      S )Nr   d   0c              3  @   K   | ]  }|j                   d kD  sd  ywr      Nrealized_pnl.0ps     r%   	<genexpr>z(_compute_from_session.<locals>.<genexpr>Z        ;f(:1f   r2   r   r   r   r   r   r   r   r   )"r	   strsettingspaper_initial_capitalr,   queryr
   coalescesumr   r4   filterstatusr   CLOSEDscalarunrealized_pnlOPEN	closed_atr   r+   firststarting_capitalcountr   idr   FILLED	filled_atallroundlenr   r   )sessionr+   initial	day_startr   r   r   r   today_realizedr   riskstartingr   r   closedr   winss                    r%   _compute_from_sessionrZ   #   s   c(889:G<(IMM$--1F1F(GKLVHOO~'<'<<=VX 		
N MM$--1H1H(I1MNVHOO~':'::;VX 		
 &)99G'!IMM$--1F1F(GKLV>#8#88""i/ VX 	

N !11I 	n%	++|;	<	 	
 )-t$$'H4<Y)C/'#,M 	djj*+	 2 22EOOy4P	Q		 	  ]]8$++HOO~?T?T,TUYY[FH;f;;F+c115#&%)	 	r$   c                `  K   t        t        t        j                              }t	        |      }t        t        | j                  t        t        j                  t        j                  t        j                        d            j                  t        j                  t        j                  k(               d {   j!                         xs d            }t        t        | j                  t        t        j                  t        j                  t        j"                        d            j                  t        j                  t        j$                  k(               d {   j!                         xs d            }||z   |z   }||z
  }t        t        | j                  t        t        j                  t        j                  t        j                        d            j                  t        j                  t        j                  k(  t        j&                  |k\               d {   j!                         xs d            }||z   }	| j                  t        t(              j                  t(        j*                  |k(               d {   }
|
j-                         }|r|j.                  n|}|r|	|z  dz  n
t        d      }| j                  t        t        j0                  t2        j4                              j                  t2        j                  t6        j8                  k(  t2        j:                  |k\               d {   j!                         xs d}| j                  t        t              j                  t        j                  t        j                  k(               d {   }|j=                         j?                         }d }|r-t        d |D              }tA        |tC        |      z  dz  d      }tE        |||	|tG        |      |||      S 7 d7 7 7 7 7 }w)Nr   r.   r/   c              3  @   K   | ]  }|j                   d kD  sd  ywr1   r3   r5   s     r%   r8   z&_compute_from_async.<locals>.<genexpr>   r9   r:   r2   r;   )$r	   r<   r=   r>   r,   executer   r
   r@   rA   r   r4   whererC   r   rD   rE   rF   rG   rH   r   r+   scalar_one_or_nonerJ   rK   r   rL   r   rM   rN   scalarsrO   rP   rQ   r   r   )rR   r+   rS   rT   r   r   r   r   rU   r   risk_resultrV   rW   r   r   closed_resultrX   r   rY   s                      r%   _compute_from_asyncrc   i   s^    c(889:G<(Ioo4==(2G2G)H!LMSS >+@+@@ 
 fh 		
N oo4==(2I2I)JANOUU >+>+>> 
 fh 		
 &)99G'!Ioo4==(2G2G)H!LMSS >+@+@@ **i7  fh 
	
N !11I~$$^%@%@L%PQ K ))+D(,t$$'H4<Y)C/'#,M oo4::ehh'(.. 2 229,
 	
 fh   "//xx.2G2GGH M ""$((*FH;f;;F+c115#&%)	 	C 	
sr   B8P.:P;B(P.#P!$CP.+P$,A$P.P'B7P.P*	A%P..P,/A0P.!P.$P.'P.*P.,P.Nc                F    t        | |xs t        j                               S N)rZ   r   todayrR   r+   s     r%   get_equity_summaryrh      s     ,*F$**,GGr$   c                b   K   t        | |xs t        j                                d {   S 7 wre   )rc   r   rf   rg   s     r%   get_equity_summary_asyncrj      s&      %Wl.JdjjlKKKKs   &/-/c                   |xs t        j                         }| j                  t              j	                  t        j
                  |k(        j                         }|s| j                  t              j                  t        j
                  j                               j                         }|r|j                  n!t        t        t        j                              }t        |||      }| j                  |       |j                  |_	        |j                   |_        |j"                  |_        |j&                  |_        y)zNKeep DailyRiskState aligned with computed equity (for risk manager + history).)r+   rJ   current_capitalN)r   rf   r?   r   rB   r+   rI   order_bydescrl   r	   r<   r=   r>   addr   r   r   daily_loss_pctr   trades_count)rR   summaryr+   state	yesterdayrW   s         r%   sync_daily_risk_stateru      s    /4::<Ln%	++|;	<	 

 MM.)Xn116689UW 	
 1:9,,ws8KiKiGj?k%%$

 	E#OOE''EO"00E --Er$   PortfolioServicer#   )rh   rj   ru   )r+   r   returnr   )rR   r   r+   r   rw   r   )rR   r   r+   r   rw   r   re   )rR   r   r+   date | Nonerw   r   )rR   r   r+   rx   rw   r   )rR   r   rr   r   r+   rx   rw   None)%__doc__
__future__r   dataclassesr   r   r   r   r   decimalr	   
sqlalchemyr
   r   sqlalchemy.ext.asyncior   sqlalchemy.ormr   app.core.configr   
app.modelsr   r   r   r   r   r=   r   r,   rZ   rc   rh   rj   ru   typestaticmethodportfolio_servicer#   r$   r%   <module>r      s    9 " ! 3 3  # / " ( S S>   ICLQhH
 8<LL)4LL.8D*+=>$01I$J!-.C!D  r$   