
    >Cj)$                    V   d dl mZ d dlmZ d dlmZmZ d dlmZ  ed           G d d                      Z	 ed           G d	 d
                      Z
d4d5dZd6dZd7dZd8dZ ed           ed           ed           ed          dd ed           dd!d!ddd"d9d3ZdS ):    )annotations)	dataclass)DecimalROUND_HALF_UP)OrderIntentT)frozenc                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )PaperCandler   openhighlowcloseN)__name__
__module____qualname____annotations__      src/execution/paper_lifecycle.pyr
   r
   	   s4         MMMMMMLLLNNNNNr   r
   c                     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<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   dZded<   dZded<    ed          Zded<    ed          Zded<   dZ	ded<   dZ
ded<    ed          Zded<    ed          Zded <    ed          Zded!<   d"Zd#ed$<   d"Zd#ed%<   d&Zd#ed'<   d+d*ZdS ),PaperLifecycleResultstrstrategy_idcoinsider   entry_price
exit_priceexit_reasonintcandles_heldsizegross_pnl_usdentry_fee_usdexit_fee_usdslippage_cost_usdfunding_cost_usdnet_pnl_usdmfe_pctmae_pctNDecimal | Nonerequested_sizefilled_size0unfilled_size1
fill_ratiotakerentry_liquidityexit_liquidityentry_slippage_pctexit_slippage_pctstop_gap_slippage_pctFboollive_order_allowedmainnet_signed_actionTpaper_tradingreturndict[str, str | bool | int]c                   i d| j         d| j        d| j        dt          | j                  dt          | j                  d| j        d| j        dt          | j                  d	t          | j	        | j	        n| j                  d
t          | j
        | j
        n| j                  dt          | j                  dt          | j                  d| j        d| j        dt          | j                  dt          | j                  dt          | j                  t          | j                  t          | j                  t          | j                  t          | j                  t          | j                  t          | j                  t          | j                  t          | j                  | j        | j        | j        dS )Nr   r   r   r   r   r   r    r!   r+   r,   r.   r0   r2   r3   r4   r5   r6   )r"   r#   r$   r%   r&   r'   r(   r)   r8   r9   r:   )r   r   r   r   r   r   r   r    r!   r+   r,   r.   r0   r2   r3   r4   r5   r6   r"   r#   r$   r%   r&   r'   r(   r)   r8   r9   r:   )selfs    r   to_journal_rowz#PaperLifecycleResult.to_journal_row0   s   
4+
DI
 DI
 3t/00	

 #do..
 4+
 D-
 C	NN
 c9L9X$"5"5^b^ghh
 343C3Ot//UYU^__
 S!344
 #do..
 t3
 d1
 !#d&=">">
   T%;!<!<!
" $S)C%D%D#
$ !!344 !344 122!$T%;!<!< #D$9 : :t/004<((4<(("&"9%)%?!/9
 
 
 	
r   )r;   r<   )r   r   r   r   r+   r,   r   r.   r0   r2   r3   r4   r5   r6   r8   r9   r:   r?   r   r   r   r   r      s        IIIIIIMMM%)N))))"&K&&&&$WS\\M))))!'#,,J&&&&"O""""!N!!!!")'#,,....!(----%,WS\\1111$$$$$"'''''M
 
 
 
 
 
r   r   
0.00000001valuer   placesr   r;   c                T    |                      t          |          t                    S )Nrounding)quantizer   r   )rA   rB   s     r   _qrG   Q   s    >>'&//M>BBBr   	numeratordenominatorc                    |dk    rt          d          S | |z  t          d          z                      t          d          t                    S )Nr   r-   1000.01rD   )r   rF   r   )rH   rI   s     r   _pctrM   U   sI    as||#genn4>>wvYf>gggr   	liquiditymaker_fee_ratetaker_fee_ratec                   | dk    r|n|S )Nmakerr   )rN   rO   rP   s      r   _fee_rate_forrS   [   s    &'11>>~Er   pctc                0    | dk    rt          d          n|S )NrR   r-   )r   )rN   rT   s     r   _slippage_forrV   _   s    $//73<<<S8r   z0.00045z0.02r/   r-   Nz0.00020r1   )fee_rateslippage_pcthold_hours_per_candlefunding_rate_hourly_pcttrailing_stop_pctmax_fill_notional_usdrO   rP   r2   r3   depth_slippage_pctr6   intentr   r   candleslist[PaperCandle]rW   rX   rY   rZ   r[   r*   r\   r2   r3   r]   r6   c          	     |   | j         dk    rt          d          | j        t          d          |dk    rt          d          |st          d          |dvs|dvrt          d	          | j        }||n||z  }t	          |||z            }|dk    rt          d
          ||z
  }||z                      t          d          t                    }|
|
n|}||n|}t          ||          }||n|}|}| j        }| j	        }|}|}|d         j
        }d}t          |          }t          |d          D ]\  } }!t          ||!j                  }t	          ||!j                  }|b||k    r\|t          d          |t          d          z  z
  z  }"t          ||"                    t          d          t                              }|!j        |k    rX|!j        |k     r8|!j        |k     r-|!j        t          d          |t          d          z  z
  z  }d}n|}|| j        k    rdnd}| } n||!j        |k    r|}d}| } n|dk    r|nt          ||          }#||z
  |z  }$||z  }%||z  }&|%t#          ||	|          z  }'|&t#          ||	|          z  }(|%|z  t          d          z  |&|#z  t          d          z  z   })|%|z  t          d          z  |z  t          |          z  }*|$|'z
  |(z
  |)z
  |*z
  }+t%          ||z
  |          },t%          ||z
  |          }-t'          d9i d| j        d| j        dddt-          |          dt-          |          d|d |d!t-          |          d"t-          |$          d#t-          |'          d$t-          |(          d%t-          |)          d&t-          |*          d't-          |+          d(|,d)|-d*t-          |          d+t-          |          d,t-          |          d-|d.|d/|d0|d1|#d2|dk    r|nt          d3          d4d5d6d5d7d8S ):aU  Simulate a deterministic long-only Paper lifecycle.

    Conservative v1 lifecycle model for replacing expected-move-only Paper exits:
    entry fill, optional partial fill cap, maker/taker fee class, stop/TP/trailing
    exits, stop-gap slippage, depth-aware slippage, MFE/MAE, fees and funding.
    It never creates live side effects.
    buyz8paper lifecycle currently supports long/buy intents onlyNz$paper lifecycle requires a stop_lossr   zentry_price must be positivezat least one candle is required>   rR   r1   z liquidity must be maker or takerz4paper lifecycle partial fill produced no filled sizez0.0001rD   	time_exit   )startr/   rK   rL   stop_gap_slippagetrailing_stop	stop_losstake_profit)rO   rP   r   r   r   longr   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r+   r,   r.   r0   r2   r3   r4   r5   r6   r-   r8   Fr9   r:   Tr   )r   
ValueErrorri   r!   minrF   r   r   rV   rj   r   len	enumeratemaxr   r   r   rS   rM   r   r   r   rG   ).r^   r   r_   rW   rX   rY   rZ   r[   r\   rO   rP   r2   r3   r]   r6   r+   fill_notional_capr,   r.   r0   
taker_rateeffective_slippage_pctentry_slip_pctstop_gap_pctr!   stoprj   highestlowestr   r   r    idxcandlerh   exit_slip_pctgrossentry_notionalexit_notional	entry_feeexit_feeslippage_costfunding_costnetmfemaes.                                                 r   simulate_paper_lifecycler   d   s   2 {eSTTT?@@@a7888 <:;;;000NJ\4\4\;<<<[N1F1R--XcftXtn&7+&EFFKaOPPP"[0M.889J9JUb8ccJ#1#=8J3E3Q//Wc"?4JKKN,A,M((SiLDD$KGF"JKw<<L 222  Vgv{++VVZ(((W{-B-B#ws||6G'RW..6X'XYMt]33GFOOm3\\]]D:{T!!fkD&8&8#[GCLL<'RW..;X,XY
1!
158H1H1HookLE"v{k'A'A$J'KLE$/3F$F$FLLMZh  kA  MB  MBM+%-E 4'N%M~nx!y!y!yyI}^NkuvvvvH#n4wu~~E-ZgJgjqrwjxjxJxyM!$;;gennLOddgno{g|g||L
)
h
&
6
EC
w$k
2
2C
v#[
1
1C   &&[[ V {OOO	
 j>>>  K "\ XXX iii mmm \\\ ]+++ L))) sGGG   !" .)))#$ {OOO%& ''''( :)* (+, &~-. *>/0 (-12 /:=P.P.PllV]^aVbVb34 !556 $e78 d9 r   )r@   )rA   r   rB   r   r;   r   )rH   r   rI   r   r;   r   )rN   r   rO   r   rP   r   r;   r   )rN   r   rT   r   r;   r   ) r^   r   r   r   r_   r`   rW   r   rX   r   rY   r   rZ   r   r[   r*   r\   r*   rO   r   rP   r*   r2   r   r3   r   r]   r*   r6   r*   r;   r   )
__future__r   dataclassesr   decimalr   r   src.execution.order_intentr   r
   r   rG   rM   rS   rV   r   r   r   r   <module>r      s   " " " " " " ! ! ! ! ! ! * * * * * * * * 2 2 2 2 2 2 $        $<
 <
 <
 <
 <
 <
 <
 <
~C C C C Ch h h hF F F F9 9 9 9  	**#GFOO%,WS\\'.ws||(,,0%gi00%)"!)-,0!y y y y y y y yr   