a
    
âjM  ã                   @   s8  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��øZ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 ed ef Zedu�rNedu�rNde  k �r0dk �rNn ned  e ed ef¡ erÂeed< qÂq€W d  ƒ q^1 �st0    Y  q^e ¡ D ]Zed jdd� �qˆd\ZZg 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 Z!e"d"d#„ e#e!ƒD ƒdƒZ$e$du �r �q´e!e$ d$ Z%d%d&„ e!e$d… D ƒZ&e e%e&e f¡ �q´e'd'ed(›d)ed(›d*e(eƒ› d+�ƒ e'd,d-›d.d-›d/d0›d1d0›d2d0›d3d-›d4d5›d6d7›�ƒ e'd8ƒ dZ)e*dd9ƒD �]`Z+d Z, Z-Z.d:Z/d:Z0eD ]¬\Z%Z1Z e2e%e+d;  d$ƒZ3e3dk�re �ræe.d7 Z.�qæe+dk�r:e4d<d#„ e1D ƒƒndZ5e5�r‚e,d7 Z,e/e37 Z/de3 e3 Z6e �rxe-d7 Z-e0e67 Z0ne0d8 Z0ne �ræe.d7 Z.�qæde, e(eƒ Z7e,�r²e/e, ndZ8e,�rÈde0 e, ndZ9e+dk�rÚe0Z)e0e) Z:e'd=e;e+ƒ d> d-›e7d?›d@e8dA›e-d0›e9dB›e.d-›e0dC›e:dD›�	ƒ �qÈe'dEƒ dS )Fa×  
Limit-order fill-capture sim. Signal = first PRE snapshot where Kalshi CLV >= 5%.
At that moment record the ask A0. For each offset N cents, place a resting buy
limit at P = A0 - N/100. It FILLS if any later PRE snapshot's ask <= P (price
came down to us) before kickoff. Filled bets enter at P; unfilled = no bet ($0).
Settle via ftr. Flat 1-unit stake, ROI uses fill price. Compares net to N=0
(market-at-ask baseline), netting out the winners we miss by not filling.
é    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\_fill_capture.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	game_dater   r   é   r   éd   T)Úreverse)g      @g      (@é   ÚHÚAc                 c   s4   | ],\}\}}}t |  kr$tkrn q|V  qd S )N)ÚFLOORÚCAP)Ú.0ÚiÚmÚcÚar   r   r   Ú	<genexpr>0   r   r%   é   c                 C   s   g | ]\}}}|‘qS r   r   )r    r"   r#   r$   r   r   r   Ú
<listcomp>4   r   r'   zsignals (first CLV in [z.0fú,z]): Ú
Úoffsetz>7zfill%ZavgEntryz>9ZfilledWzfillROI%ZmissWZnetUnitsz>10ZvsMktz>8zB------------------------------------------------------------------é   g        g      Y@c                 c   s   | ]}|t d  kV  qdS )g•Ö&è.>N)ÚP)r    r$   r   r   r   r%   G   r   ú-r#   z>6.0fú%z>9.3fz>+8.1fz>+10.2fz>+8.2fzx
netUnits = total flat-stake profit over the WHOLE signal set (unfilled = 0). vsMkt = vs the N=0 market-at-ask baseline.)<Ú__doc__ZcsvZglobÚsysÚcollectionsr   ÚstdoutÚreconfigureÚsortedÚfilesr   ZseriesÚfpÚopenÚfZ
DictReaderr   r   Zelr   ZsideZclvZaskÚdÚappendÚvaluesÚsortr   r   ZsignalsÚitemsÚkeyÚwinr   ÚnextÚ	enumerateZeiZA0Zfuture_asksÚprintÚlenZ
base_unitsÚrangeÚNZnfillZ	nwin_fillZ	nwin_missZ	entry_sumZunitsZfutÚroundr,   ÚanyZfilledÚbZfillpctZavgentryZfillroiZvsÚstrr   r   r   r   Ú<module>   s¨   

0.
$ ÿÿÿ
 


(ÿÿÿÿ