a
    Zãj  ã                   @   s  d Z ddlZddlZddlZddlmZ ejjddd� ee d¡ƒZ	dd	„ Z
ed
d„ ƒZe	D �]\Zeedddd���4Ze e¡D �]Ze d¡dkr˜q‚e
edƒZedu s‚edkr´q‚e d¡pÀdZdD ]ÒZe
ede› �ƒZe
ede› d�ƒZe
ede› d�ƒZe
ede› �ƒZeed ed ed ef Zedu�rŒe�rŒe�rŒe�rŒde  k �rje  k �rjdk �rŒn ned  e ed eeef¡ erÆeed< qÆq‚W d  ƒ q^1 �s²0    Y  q^e ¡ D ]Zed jdd� �qÆd \ZZg Zg Z g Z!d!Z"dZ#dZ$e %¡ D �]\Z&Zed �red �s(�qed e&d" dk�r@d#nd$kZ'e(d%d&„ e)ed ƒD ƒdƒZ*e*du �rp�qed e* \Z+Z,ZZZee d' Z-ee d Z.ee- e- d Z/ee e d Z0e e.¡ e  e/¡ e! e0¡ de e Z1e"e'�rôe1nd(7 Z"e#d7 Z#e$e'7 Z$�qd)d*„ Z2e2eƒ\Z3Z4Z5e2e ƒ\Z6Z7Z7e2e!ƒ\Z8Z7Z7e9d+ed,›d-ed,›d.e#› d/e$› d0de$ e# d,›d1�ƒ e9d2e3d3›d4e4d3›d5e5d3›�ƒ e9d6e6d7›d8�ƒ e9d9e8d7›d:�ƒ e9d;e6e8 d3›d<�ƒ e9d=de" e# d>›d?e"d>›d@e#› dA�ƒ e9e"dk�rdBndCƒ dS )Da6  
Is the Kalshi bid-ask spread small enough that our edge survives paying it?
At each signal moment (first PRE snapshot where clv_kalshi in [5,12]% for a side),
measure: bid-ask spread (cents), edge vs MID, edge vs ASK (what we pay), and the
spread tax = edge_mid - edge_ask. Settle outcomes to get at-ask ROI.
é    N)Údefaultdictzutf-8Úreplace)ÚencodingÚerrorszE:\soccer\live_data\*.csvc              	   C   s0   zt |  |d¡ƒW S  ttfy*   Y d S 0 d S )NÚ )ÚfloatÚgetÚ	TypeErrorÚ
ValueError)ÚrÚk© r   ú,E:\soccer\research\analysis\_spread_check.pyÚfval   s    r   c                   C   s
   g d dœS )N)ÚrowsÚftrr   r   r   r   r   Ú<lambda>   ó    r   r   )Únewliner   r   ZstatusZPREÚelapsedr   )ÚhomeÚawayZclv_kalshi_Zkalshi_Z_askZ_bidZ	pin_fair_Z	game_dater   r   é   r   éd   T)Úreverse)g      @g      (@g        é   ÚHÚAc                 c   s8   | ]0\}\}}}}}t |  kr(tkrn q|V  qd S )N)ÚFLOORÚCAP)Ú.0ÚiÚmÚcÚbÚaÚpr   r   r   Ú	<genexpr>)   r   r'   é   éÿÿÿÿc                 C   s6   t | ƒ} t| ƒ}t| ƒ| | |d  | t|d ƒ fS )Nr(   gÍÌÌÌÌÌì?)ÚsortedÚlenÚsumÚint)Úxr   r   r   r   Ústats5   s    r/   zsignals (first clv in [z.0fú,z]): z
, winners z (z%)
zbid-ask spread (cents): mean z.2fz	  median z  p90 zedge vs MID  : mean z+.2fú%zedge vs ASK  : mean z&%   (this is what the signal/CLV uses)zspread tax    : z- pts of edge lost to crossing half the spreadz
at-ask flat ROI: z+.1fz%  (z units over z bets)z=> edge survives the spreadz=> spread eats the edge):Ú__doc__ZcsvZglobÚsysÚcollectionsr   ÚstdoutÚreconfigurer*   Úfilesr   ZseriesÚfpÚopenÚfZ
DictReaderr   r   Zelr   ZsideZclvZaskZbidZpfÚdÚappendÚvaluesÚsortr   r   ZspreadsZedge_midZedge_askZunitsÚnZnwinÚitemsÚkeyÚwinÚnextÚ	enumerateZeir"   r#   ZmidZsprZemZeaZbor/   ZmsZmedsZp90sZmmÚ_ZmaÚprintr   r   r   r   Ú<module>   sf   

D26 (