Ë
    R±jR  ã                  ó:   — d Z ddlmZ ddlZddlZdZdd„Zdd	d„Z	y)
zóCalendar accounting for existing close-to-close signals; no execution changes.

Fees retain the historical additive-return convention. Open positions are marked
to market, never forcibly liquidated. Date-only end bounds include the whole day.
é    )ÚannotationsNg{®Gázt?c                óf  — | j                   j                  dd¬«      | j                  j                  d¬«      j	                  d«      z  }|t
        | j                  j                  dd¬«      j                  t        «      | j                  j	                  d«      j                  t        «      z   z  z
  S )zHReturn intervals ending at each row, computed before selecting a window.é   r   ©Ú
fill_valueN)Úfill_methodF)
ÚpositionÚshiftÚcloseÚ
pct_changeÚfillnaÚCOMMISSION_RATEÚexecute_entryÚastypeÚfloatÚexecute_exit)ÚsignalsÚreturnss     úD/Users/jameslopez/projects/TradingBot25/strategies/mlp_accounting.pyÚnet_returnsr      s�   € à×Ñ×$Ñ$ Q°1Ð$Ó5¸¿¹×8PÑ8PÐ]aÐ8PÓ8b×8iÑ8iÐjkÓ8lÑl€GØ”_Ø×Ñ×#Ñ# A°%Ð#Ó8×?Ñ?ÄÓFØ
×
Ñ
×
%Ñ
% eÓ
,×
3Ñ
3´EÓ
:ñ	;ññ ð ó    c                ó*
  — | j                   rt        d«      ‚t        | «      }| j                  j	                  dd¬«      }t        j                  d| j                  ¬«      }d| v �rBt        j                  | j                  d¬«      }|j                  «       j                  j                  «       }|j                  «       j                  «       s |j                  dd	 dk  j                  «       rt        d
«      ‚t!        |«      dkD  r|j#                  «       nd}|j%                  |«      }|�||t        j                  |d¬«      k\  z  }|�Žt        j                  |d¬«      }	t'        |t(        «      r.t!        |«      dk(  r |||	t        j*                  d¬«      z   k  z  }n9|||	k  z  }n0|€|�t        d«      ‚t        j                  d| j                  ¬«      }| j,                  |   }
|
j                   rt        d«      ‚|j,                  |   j/                  t0        ¬«      }t3        j4                  |«      j7                  «       st        d«      ‚t2        j8                  dt3        j:                  d|z   «      f   }t1        t3        j<                  |t2        j>                  jA                  |«      z  dz
  «      «      }t1        |j,                  |   jC                  «       dz  «      }|d   dkD  r7t1        t3        jD                  t3        jF                  |d   «      |z  «      «      nd}t!        |«      |z  }t!        |«      dkD  r t1        t3        jH                  |d¬«      «      nd}t1        t3        jJ                  t3        jL                  t3        jN                  |d«      dz  «      «      «      }t1        |d   dz
  dz  «      |dz  |dk  r|tQ        |«      z  nd	|dz  tS        |
jT                  jC                  «       «      tS        |
jV                  jC                  «       «      t1        t3        jX                  |j,                  |   |j,                  |   ¬«      dz  «      |t[        |j,                  |   j                  d   «      t[        |
j                  j                  d   «      |dkD  r2t1        |jM                  «       |z  t3        jJ                  |«      z  «      nd	|dkD  r4t1        |jM                  «       |z  t3        jJ                  |«      z  «      dœS d	dœS )a6  Measure full-history signals within optional inclusive calendar bounds.

    Timestamped rows represent return intervals ending at that timestamp. The
    first row uses the median bar duration. Untimestamped legacy inputs retain
    a daily-bar fallback. Sharpe/Sortino use observed annual bar frequency.
    zCannot measure empty signalsr   r   r   T)ÚindexÚtime)ÚutcNz8Signal timestamps must be finite and strictly increasingg     õ@é
   )Údaysz Window bounds require timestampsz&No bars in requested accounting window)ÚdtypezNon-finite strategy returnsg      ð?g    ~~Aéÿÿÿÿg      ð¿)Úddofg        é   éd   )Úweightsg•Ö&è.>)Úpnl_pctÚdd_pctÚcalmarÚcagr_pctÚentriesÚexitsÚexposure_pctÚyearsÚcarry_inÚopen_at_endÚsharpeÚsortino).ÚemptyÚ
ValueErrorr   r	   r
   ÚpdÚSeriesr   Úto_datetimer   ÚdiffÚdtÚtotal_secondsÚisnaÚanyÚilocÚlenÚmedianr   Ú
isinstanceÚstrÚ	TimedeltaÚlocÚto_numpyr   ÚnpÚisfiniteÚallÚr_ÚcumprodÚminÚmaximumÚ
accumulateÚsumÚexpm1ÚlogÚstdÚsqrtÚmeanÚminimumÚabsÚintr   r   ÚaverageÚbool)r   ÚstartÚendr   ÚheldÚmaskÚtimesÚ	intervalsÚtypicalÚboundÚframeÚvaluesÚequityÚddr+   ÚcagrÚ	frequencyrM   Údownsides                      r   Úwindow_metricsrd      s  € ð ‡}‚}ÜÐ7Ó8Ð8Ü˜'Ó"€GØ×Ñ×!Ñ! !°Ð!Ó2€DÜ�9‰9�T §¡Ô/€DØ�ÒÜ—‘˜wŸ|™|°Ô6ˆØ—J‘J“L—O‘O×1Ñ1Ó3ˆ	Ø�:‰:‹<×ÑÔ )§.¡.°°Ð"4¸Ñ"9×!>Ñ!>Ô!@ÜÐWÓXÐXÜ(+¨E«
°Qª�)×"Ñ"Ô$¸FˆØ×$Ñ$ WÓ-ˆ	ØÐØ�EœRŸ^™^¨E°tÔ<Ñ<Ñ<ˆDØˆ?Ü—N‘N 3¨DÔ1ˆEÜ˜#œsÔ#¬¨C«°BªØ˜ ¬¯©¸!Ô(<Ñ <Ñ<Ñ<‘à˜ ™Ñ&‘àÐ  ÜÐ?Ó@Ð@Ü—I‘I˜f¨G¯M©MÔ:ˆ	Ø�K‰K˜Ñ€EØ‡{‚{ÜÐAÓBÐBØ�[‰[˜Ñ×'Ñ'¬eÐ'Ó4€FÜ�;‰;�vÓ×"Ñ"Ô$ÜÐ6Ó7Ð7Ü�U‰U�2”r—z‘z ! f¡*Ó-Ð-Ñ.€FÜ	Œr�v‰v�fœrŸz™z×4Ñ4°VÓ<Ñ<¸qÑ@ÓAÓ	B€BÜ�)—-‘- Ñ%×)Ñ)Ó+¨~Ñ>Ó?€EØ:@À¹*Àqº.Œ5”—‘œ"Ÿ&™& ¨¡Ó,¨uÑ4Ó5Ô6Èc€DÜ�F“˜eÑ#€IÜ+.¨v«;¸ª?Œ%”—‘�v AÔ&Ô
'À€CÜ”R—W‘WœRŸW™W¤R§Z¡Z°¸Ó%:¸aÑ%?Ó@ÓAÓB€Hä˜& ™* q™.¨CÑ/Ó0¸BÀ¹HØ$&¨¢F�$œ˜R›’.°À$ÈÁ*Ü�u×*Ñ*×.Ñ.Ó0Ó1¼CÀ×@RÑ@R×@VÑ@VÓ@XÓ<YÜœbŸj™j¨¯©°$©ÀÇÁÈtÑATÔUÐX[Ñ[Ó\Ø¤D¨¯©°$©×)<Ñ)<¸QÑ)?Ó$@Ü˜EŸN™N×/Ñ/°Ñ3Ó4ØEHÈ1ÂW”%˜Ÿ™›¨Ñ+¬b¯g©g°iÓ.@Ñ@ÔAÐRVØKSÐVZÊ?”5˜Ÿ™›¨Ñ1´B·G±G¸IÓ4FÑFÓGñ	ð 	ð aeñ	ð 	r   )r   úpd.DataFrameÚreturnz	pd.Series)NN)r   re   rf   Údict)
Ú__doc__Ú
__future__r   ÚnumpyrB   Úpandasr2   r   r   rd   © r   r   Ú<module>rm      s$   ðñõ
 #ã Û à€óõ5r   