a
    ú£j¯  ã                   @   sØ  d Z ddlZddlZddlmZ e edƒ ¡ ¡Zdd„ eD ƒZdZ	dId	d
„Z
edƒ edƒ edƒ edd›ddd›ddd›ddd›ddd›ddd›ddd›�ƒ edƒ e
edƒZedd›ded d ›ded! d"›ded# d$›d%ed& d›ddd›ded' ed(  d›�ƒ d)D ]fZe
eeƒZeed*›ded d ›ded! d"›ded# d$›d%ed& d›ded( d›ded' d›�ƒ �qg ZeD ]2Zed+ e	 Zed,k�r¢�q„e ed-e  ¡ �q„e�rÎeeƒeeƒ ndZed.ed/›�ƒ eƒ  edƒ ed0ƒ edƒ edd›ddd›ddd›ddd›ddd›ddd›ddd›�ƒ edƒ edd›ded d ›ded! d"›ded# d$›d%ed& d›ddd›ded' ed(  d›�ƒ d)D ]jZe
eed1d2�Zeed*›ded d ›ded! d"›ded# d$›d%ed& d›ded( d›ded' d›�ƒ �q¤eƒ  edƒ ed3ƒ edƒ ed4ƒ ed5ƒ dZdZdZdZdZeD �]Zed6 Zd7e ¡ v Zed8 Zed+ Zee	 Z e d,k�r–�qVed9 Z!e!e  d-e   Z"ee!e" 7 Ze�rÊed:k�pØe �oØed;kZ#e�rêed;k�pøe �oøed:kZ$e#�re!d-e  e ne! Z%e%e$�r.e"d-e   e  ne" 7 Z%ee%7 Zed<k�rRed-7 Zne#�rbed-7 Zned-7 Z�qVed=ed>›d?ed@›dAee dB d>›dC�ƒ edDe› dEe› dFe› �ƒ edGed! d>›dHed# d>›dC�ƒ dS )Jz�
Hedge backtest: keep YES-underdog signal, add a NO-favorite bet alongside
to lay off draw losses. Test multiple hedge ratios and sizing modes.
é    N)ÚPathzE:/soccer/bet_history.jsonc                 C   s<   g | ]4}|  d ¡r|  d¡r|  d¡dur|  d¡r|‘qS )Ú
kalshi_askÚkalshi_stakeZwonNÚftr)Úget)Ú.0Úb© r	   ú(E:\soccer\misc\archive\hedge_backtest.pyÚ
<listcomp>   s   ,ÿr   ç      Ð?Fc                 C   s~  d}d}d}d}d}d}| D �]8}	|	d }
d|
  ¡ v }|	d }|	d }|t }|dkrXq|	d }|rz|d	|  }|| }n|}|| }||| 7 }|d	7 }|r¦|d
kp²| o²|dk}|rÀ|dkpÌ| oÌ|d
k}d}|rì||d	|  | 7 }n||8 }|dk�r"|�r||d	|  | 7 }n||8 }||7 }|dk�r>|d	7 }q|�rN|d	7 }q|d	7 }q||||�rp|| d nd|||dœS )zã
    hedge_ratio: stake_no / stake_yes (0 = no hedge)
    keep_total_constant: if True, split original stake into yes + no so total = original
                         if False, ADD the hedge on top (more capital deployed)
    ç        r   ÚbetÚHOMEr   r   ç®Gáz®ï?r   é   ÚHÚAÚDéd   )ÚnÚpnlÚcapitalÚroi_pctÚwinsÚdrawsÚlosses)ÚupperÚ
DRAW_PRICE)ÚbetsZhedge_ratioÚkeep_total_constantÚ	total_pnlZtotal_capitalr   r   r   r   r   ÚsideÚis_home_betr   Ú	yes_priceÚno_priceZ
orig_stakeÚ	stake_yesÚstake_noÚyes_winÚno_winr   r	   r	   r
   Úcompute_pnl   s\    






ùr*   zN==============================================================================zHMODE A: Add hedge on top of original stake (more capital, more exposure)zHedge ratioz<14ú ZCapitalz>10zP&LZROIz>7zYES Wz>6zHedged Dz>9zTotal Lz>8zN------------------------------------------------------------------------------r   z
0.0 (none)z $r   z>8.0fr   z>+8.2fr   z>5.1fz% r   r   r   )r   g      à?g      è?g      ð?g      ø?z<14.2fr   r   r   z)
Draw-neutral avg ratio across all bets: z.3fz6MODE B: Split original stake (constant total exposure)T)r    z>MODE C: Per-bet draw-neutral hedge (size NO so draw nets to 0)z8Each bet: stake_no = stake_yes * no_price/(1 - no_price)z.This is Mode A but with a custom ratio per betr   r   r   r   r   r   r   zP&L: $z+.2fz  Capital deployed: $z.2fz  ROI: r   ú%z
YES wins: z  Draws hedged: z!  HOME-wins (now bigger losses): z  vs original: P&L $z, ROI )F)&Ú__doc__ZjsonZmathÚpathlibr   ÚloadsÚ	read_textÚhr   r   r*   ÚprintZbaselineÚrÚresZratiosr   Zno_pÚappendÚsumÚlenZavg_neutralr!   Z	total_capr   r   r   r"   r   r#   r   r$   r%   r&   r'   r(   r)   r   r	   r	   r	   r
   Ú<module>   sz   
H>
Z
Z>ZZ
   *