a
    š4j  ã                   @   s¢  d Z ddlZddlZddlZddlmZ g Ze d¡D ]JZeedd��*Z	e 
e	¡D ]Ze e¡ qRW d  ƒ q61 sv0    Y  q6dd„ Zd	d
„ Zi ZeD �]ZeedƒZedu sšedkr¼qšeedƒeedƒ ZZedu sšedu räqšed ed ed fZeedƒeedƒeedƒeedƒeedƒeedƒeedƒeedƒeek�rHdndeek�rXdndedœZed �rved �s†ed ršed rše e¡Zedu �s¦eed kršeee< qšed eeƒ› d!�ƒ d"d#„ Zd$D ]ô\Z\ZZd%d&„ e ¡ D ƒZd'd&„ eD ƒZeeƒ\Z Z!Z"eeƒ\Z#Z$Z%ed(e› d)e › d*e!d+ d,›d-e"d+ d,›d.e$d+ d/›d0e%d+ d/›d1�ƒ e&d2d3„ eD ƒƒZ'ed4e'› d5e'e  d+ d6›d7e&d8d3„ eD ƒƒ› d5e&d8d3„ eD ƒƒe  d+ d6›d9�	ƒ �qÐed:ƒ d;D ]ô\Z\ZZZ(d Z)Z*e ¡ D ]‚Zee �rðee �rðee( �s�qðe+ee ee  ƒd<k �r4�qðe+ee ee(  ƒe+ee ee(  ƒk �rhe)d7 Z)ne*d7 Z*�qðe)e* Z,e,�rÒed(e› d=e)› d5e)e, d+ d6›d>e*› d5e*e, d+ d6›d?e,› d@�ƒ �qÒdAdB„ Z-edCƒ dDD ]šZ.g Z/e ¡ D ]lZddedE fddedF ffD ]H\ZZZ0ee �ree �ree ee  e.k�re/ ee e0f¡ �q�qìe-dGe1e.d+ ƒ› dH�e/ƒ �qÜedIƒ dDD ]šZ.g Z/e ¡ D ]lZddedE fddedF ffD ]H\ZZZ0ee �r´ee �r´ee ee  e.k�r´e/ ee e0f¡ �q´�q”e-dJe1e.d+ ƒ› dK�e/ƒ �q„edLƒ dMD ]p\Z2Z3Z4g Z/e ¡ D ]FZee3 �rfe/ ee3 edE f¡ ee4 �rBe/ ee4 edF f¡ �qBe-e2› dN�e/ƒ �q,dS )Oz±Is there an exploitable edge BETWEEN Polymarket and Kalshi?
Read-only analysis over the 47-day backfill (poly mid vs kalshi mid, timestamp-aligned).
Pre-KO rows only. No trades.é    N)Údefaultdictz*E:\soccer\poly_backfill\*_polybackfill.csvzutf-8)Úencodingc              	   C   s(   z
t | ƒW S  ttfy"   Y d S 0 d S ©N)ÚfloatÚ	TypeErrorÚ
ValueError)Úx© r	   ú&E:\soccer\research\poly_kalshi_edge.pyÚfl   s    
r   c                 C   s   t |  |¡ƒS r   )r   Úget)ÚrÚkr	   r	   r
   Úcol   s    r   ÚelapsedZresult_homeZresult_awayZ	game_dateÚhomeZawayZkalshi_home_midZkalshi_away_midZkalshi_home_askZkalshi_away_askZpoly_home_priceZpoly_away_priceZpin_fair_homeZpin_fair_awayé   )ÚkhÚkaZkh_askZka_askÚphÚpaÚpfhÚpfaÚhome_winÚaway_winÚelr   r   r   r   r   z)fixtures with both-book pre-KO snapshot: Ú
c                 C   s:   t | ƒ} t| ƒ}|sd S t| ƒ| }| |d  }|||fS )Né   )ÚsortedÚlenÚsum)ZxsÚnÚmeanÚmedr	   r	   r
   Ústats4   s    r$   ))ÚHOME)r   r   )ÚAWAY)r   r   c                 C   s,   g | ]$}|t  r|t r|t  |t  ‘qS r	   )ÚpkÚkk)Ú.0r   r	   r	   r
   Ú
<listcomp>>   ó    r*   c                 C   s   g | ]}t |ƒ‘qS r	   )Úabs©r)   Údr	   r	   r
   r*   ?   r+   ú[z] poly-kalshi mid diff: n=z  mean=éd   z+.2fz
c  median=zc  |  |diff| mean=ú.2fz	c median=Úcc                 c   s   | ]}|d krdV  qdS )ç¸…ëQ¸ž?r   Nr	   r-   r	   r	   r
   Ú	<genexpr>C   r+   r4   z        |diff|>=3c: z (z.0fz%)   |diff|>=5c: c                 c   s   | ]}|d krdV  qdS )çš™™™™™©?r   Nr	   r-   r	   r	   r
   r4   D   r+   z%)zG
--- When |poly-kalshi|>=2c, which book is closer to Pinnacle fair? ---))r%   )r   r   r   )r&   )r   r   r   ç{®Gáz”?z] poly closer z%) | kalshi closer z%)  (n=ú)c                    sü   |st d| › d�ƒ d S d}d}|D ].\}}|rJ|d| | 7 }|d7 }q$|d8 }q$t|ƒ}|| d }|| d }|| ‰ |dkr¢t‡ fdd„|D ƒƒ|d  nd}	|	r¸t |	| ¡nd}
|
rÈˆ |
 nd}t d| › d	|› d
|d›d|d›d|d›�
ƒ d S )Nz  z	: no betsg        r   r   r0   c                 3   s.   | ]&\}}|rd | | ndˆ  d V  qdS )r   éÿÿÿÿr   Nr	   )r)   ÚpZwn©r"   r	   r
   r4   k   r+   zroi_test.<locals>.<genexpr>z: n=z WR=z.1fz% ROI=z+.1fz% t=r1   )Úprintr   r    ÚmathZsqrt)ZlabelÚpicksZpnlÚwZpriceÚwonr!   ZroiÚwrÚvarZseÚtr	   r:   r
   Úroi_testZ   s"    

*rC   z\
--- Strategy A: bet the team that is CHEAPER on Poly than Kalshi (by >=Xc), at poly mid ---)r6   r3   r5   r   r   zpoly-cheaper>=zc (buy@poly_mid)z^
--- Strategy B: bet the team that is CHEAPER on Kalshi than Poly (by >=Xc), at kalshi mid ---zkalshi-cheaper>=zc (buy@kalshi_mid)zT
--- Baseline: bet EVERY home and away at each book's mid (no divergence filter) ---))Zpolyr   r   )Zkalshir   r   z all sides @mid)5Ú__doc__ZcsvZglobr<   Úcollectionsr   ZrowsÚfÚopenZfhZ
DictReaderr   Úappendr   r   Zfixr   ZrhZraÚkeyZrecr   Úprevr;   r   r$   Zsider'   r(   ÚvaluesZdiffsZabsdr!   r"   r#   Ú_ZameanZamedr    ZbigZpfkZpoly_closerZkalshi_closerr,   ZtotrC   Zthrr=   r?   ÚintZbookZhkZakr	   r	   r	   r
   Ú<module>   sœ   ,

ù
$

	FV*
F&*&* $