a
    ”Z$j0  ã                   @   s\  d Z ddlZddlZddlmZ ddlmZ ddlZedƒZed Z	ed Z
ed Ze e	 ¡ ¡Ze e
 ¡ ¡Ze e ¡ ¡Zi Ze ¡ D ]N\ZZeeeƒsžqŠe d	¡Zes®qŠeee ¡ < e d
g ¡D ]Zeee ¡ < qÆqŠdd„ e ¡ D ƒZedƒ g ZdZddiZe�reed< ej ded�Z!e! dg ¡Z"e"�s6�qTe #e"¡ e! d¡Zesü�qTqüede$eƒ› d�ƒ dd„ eD ƒZ%ede$e%ƒ› �ƒ e &d¡Z'ddddddd d!d"d#d$d%d&œZ(d'd(„ Z)i Z*g Z+e%D ]@Z,e)e,d) ƒZ-e-du �rðe+ .e,d) ¡ �qÄe* /e-g ¡ .e,¡ �qÄe+�r,ed*e$e+ƒ› d+e+dd… › �ƒ e0d,d-„ e%D ƒƒZ1ed.e1› �ƒ d/d„ eD ƒZ2ed0e1› d1e$e2ƒ› �ƒ g Z3g Z4g Z5e2D ]üZ6e6d2 Z7d3e7 8¡ v Z9e9�r¨e6d4 ne6d5 Z:e e: ¡ ¡Ze�sèe5 .e6d6 e6d4 e6d5 e7e:f¡ �q‚e6d7 Z;e e;¡Z<e<�s*e5 .e6d6 e6d4 e6d5 e7d8e;› �f¡ �q‚e =e6d6 dd#… d9¡ >¡ Z?e<e?efZ@e@e*v �rne3 .e6e*e@ f¡ ne4 .e6e@f¡ �q‚eAƒ ZBe3D ]v\Z6ZCe6d2 Z7d3e7 8¡ v Z9e9�r´e6d4 ne6d5 Z:e e: ¡ ¡Ze =e6d6 dd#… d9¡ >¡ Z?eB Dee6d7  e?ef¡ �qŠg ZEe* ¡ D ]"\Z@ZFe@eBv�reE .e@eFf¡ �qed:ƒ ed;ƒ ed<ƒ ed=e$e2ƒ› �ƒ ed>e$e3ƒ› �ƒ ed?e$e4ƒ› �ƒ ed@e$e5ƒ› �ƒ edAe$eEƒ› �ƒ dZGdZHdZIe4D ]\\Z6ZCe6 dB¡dCu �ræeHd7 ZHeGe6 dDd¡7 ZGn(e6 dB¡dEu �r´eId7 ZIeGe6 dDd¡7 ZG�q´edFƒ edGeGdH›dIeH› dJeI› dK�ƒ edLƒ edMdN›dOdPdQ›dOdRdS›dOdTdU›dOdVdW›dOdXdY›dOdZd[›�ƒ eJe4d\d]„ d^�d_d… D ]À\Z6Z@e6 dB¡�r®d`ne6 dB¡dEu �rÂdandbZKe6 dDd¡ZLee6d6 dd#… dN›dOe6d7 dQ›dOe6d4 dc e6d5  ddd… dS›dOe6d2 dU›dOe6 ded¡df›dOe6 dgd¡dh›dOeKd[›dieLdH›�ƒ �q–e5�r¾edje$e5ƒ› dk�ƒ e5ddl… D ]>\ZMZNZOZPZQedmeMdd#… › dmeN› dceO› dIeP› dneQ› �
ƒ �q~eE�rXedoe$eEƒ› dp�ƒ eJeEdqd]„ d^�ddr… D ]f\Z@ZFe@\Z<ZMZeRdsd-„ eFD ƒƒZSeRdtd-„ eFD ƒƒeS ZTedmeM› dme<› due› dveSdw›dxeTdy›�
ƒ �qðdS )zzÖ
Reconcile tracked Kalshi signals in bet_history.json against actual fills
pulled from the Kalshi API. Shows which signals were skipped (manual-execution
gap) and any fills that don't tie back to a tracked signal.
é    N)Údatetime)ÚPathzE:\soccer\datazbet_history.jsonzteam_map.jsonzleague_map.jsonZkalshiÚaliasesc                 C   s   i | ]\}}||  d ¡“qS )Zkalshi_series©Úget)Ú.0ÚdivÚv© r
   ú"E:\soccer\main\kalshi_reconcile.pyÚ
<dictcomp>$   ó    r   zFetching all Kalshi fills...ÚlimitéÈ   Úcursorz/portfolio/fills)ÚparamsÚfillsz  Got z fillsc                 C   s   g | ]}|  d ¡dkr|‘qS )ÚsideZyesr   ©r   Úfr
   r
   r   Ú
<listcomp>9   r   r   z  Opening fills (YES buys): z7^(KX[A-Z0-9]+GAME)-(\d{2}[A-Z]{3}\d{2})[A-Z]+-([A-Z]+)$é   é   é   é   é   é   é   é   é	   é
   é   é   )ZJANZFEBZMARZAPRZMAYZJUNZJULZAUGZSEPZOCTZNOVZDECc           	      C   sr   t  | ¡}|sd S | ¡ \}}}t|d d… ƒ|dd… t|dd … ƒ  }}}td| t| |ƒ ¡ }|||fS )Nr   r   iÐ  )Ú	TICKER_REÚmatchÚgroupsÚintr   ÚMONTHSÚdate)	ÚtÚmÚseriesZdpartÚwinnerZyyZmonZddÚdr
   r
   r   Úparse_tickerA   s    
0r.   Útickerz  WARNING: z tickers unparseable, e.g. c                 c   s*   | ]"}t |d  ƒrt |d  ƒd V  qdS )r/   r   N)r.   r   r
   r
   r   Ú	<genexpr>X   r   r0   z  Earliest fill date: c                 C   sD   g | ]<}|  d ¡r|  d¡rt |d dd… d¡ ¡ tkr|‘qS )Z
kalshi_askr(   Nr    ú%Y-%m-%d)r   r   Ústrptimer(   Úearliest_fill_date)r   Úbr
   r
   r   r   [   s    þz
Tracked Kalshi bets from z+: ZbetZHOMEÚhomeZawayr(   r   zno series for div=r1   zG
======================================================================zRECONCILIATION SUMMARYzF======================================================================z"Tracked Kalshi bets in window:    z"  MATCHED to a real fill:         z"  MISSED (signal, no fill):       z"  UNMAPPED (no abbr lookup):      z"  ORPHAN fills (no tracked bet):  ZwonTZ
kalshi_pnlFz8
If you HAD placed all the missed signals (per tracked):z  Hypothetical extra P&L: $z+.2fz  (zW / zL)z!
--- MISSED SIGNALS (last 30) ---ZDATEz<11ú ZLEAGUEz<5ZMATCHz<40ZBETz<10ZCLVz>5ZSTAKEz>7ZRESULTz<6c                 C   s   | d d S )Nr   r(   r
   ©Úxr
   r
   r   Ú<lambda>¡   r   r9   )ÚkeyiâÿÿÿZWINZLOSSú?z vs é&   Z
clv_kalshiz>5.1fZkalshi_stakez>7.2fz $z
--- UNMAPPED (z4 tracked bets where I couldn't find kalshi abbr) ---é   z  z)  -> z
--- ORPHAN FILLS (u'    â€” placed but not in bet_history) ---c                 C   s   | d d S )Nr   r   r
   r7   r
   r
   r   r9   ­   r   é   c                 c   s   | ]}t |d  ƒV  qdS )Úcount_fpN©Úfloatr   r
   r
   r   r0   ¯   r   c                 c   s&   | ]}t |d  ƒt |d ƒ V  qdS )Zyes_price_dollarsr?   Nr@   r   r
   r
   r   r0   °   r   z	  YES on z  qty=z.1fz @ avg $z.2f)UÚ__doc__ZjsonÚrer   Úpathlibr   Zkalshi_traderZktZREPOZHISTORYZTEAM_MAPZ
LEAGUE_MAPÚloadsÚ	read_textÚhistoryZteam_map_rawZ
league_mapZname_to_abbrÚitemsÚnameÚinfoÚ
isinstanceÚdictr   ZabbrÚlowerÚaliasZdiv_to_seriesÚprintZ	all_fillsr   r   Z_getZrespr   ÚextendÚlenZopening_fillsÚcompiler#   r'   r.   Z
fill_indexZunparseabler   ZparsedÚappendÚ
setdefaultÚminr3   Ztracked_kalshiZmatchedZmissedZunmappedr4   r   ÚupperZis_homeZ	team_namer   r+   r2   r(   Zbet_dater:   ÚsetZtracked_keysÚ_ÚaddZorphan_fillsZ
fills_listZmissed_total_pnlZmissed_winsZmissed_lossesÚsortedÚresultZpnlr-   ÚhÚaÚsÚreasonÚsumZtotal_countZavg_pxr
   r
   r
   r   Ú<module>   sü   






 ÿ 
&


> (†2 
