a
    oÌ?jô  ã                   @   s\   d Z ddlZddlZej dd¡ ddlZddlZdd„ Zdd„ Z	dd	„ Z
ed
krXe
ƒ  dS )a^  
Measure the REAL Polymarket bid/ask spread on open soccer match-winner markets,
bucketed by price level, so we can estimate the ask the mid-only backfill lacks.

The poly backfill stored only a mid (CLOB prices-history). To estimate execution
cost we need the spread. polymarket_live.get_all_prices exposes live bestBid/bestAsk,
so sample every currently-open match-winner market, compute spread = ask-bid and
half-spread = ask-mid, and report the distribution by mid bucket -- focus on the
longshot range (mid 0.05-0.35) the strategy actually bets.

Read-only, hits the public Gamma API, NOTHING traded.
é    NzE:\soccer\mainc              	   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_spread_sample.pyÚ_f   s    r   c            	      C   s¸   t  ¡ } g }| D ]¢}| dd¡}d| ¡ vsd| ¡ v r:q| d¡pFg D ]h}| d¡pXd ¡ }d|vrtt d|¡stqHt  |¡\}}}|rHd	|  k rœd
k rHn qH| |||f¡ qHq|S )zJReturn list of (mid, bid, ask) for every YES match-winner market now open.ÚtitleÚ z vszmore marketZmarketsZquestionzend in a drawzwill (.+?) (?:beat|win on)r   é   )ÚPZfetch_soccer_eventsÚgetÚlowerÚreÚsearchZ_yes_pricesÚappend)	ZevsÚoutÚer	   ÚmÚqÚbidÚaskÚmidr   r   r   Úcollect   s    r   c                     s   t ƒ } tdt| ƒ› d�ƒ | s*tdƒ d S g d¢}tdd›ddd	›dd
d›ddd›ddd›ddd›�ƒ |D ]þ\‰‰ ‡ ‡fdd„| D ƒ}t|ƒ}|s¶tdˆd›dˆ d›ddd›�ƒ qltdd„ |D ƒƒ}dd„ |D ƒ}dd„ }dd„ |D ƒ}d d„ |D ƒ}d!d„ |D ƒ}	||ƒ}
||ƒ}||	ƒ}tdˆd›dˆ d›d|d›d"d#| | d$›d%|
d&›d"|d'›d"|d(›d)�ƒ qld*d„ | D ƒ}|�rtd+d„ |D ƒƒ}t|ƒ}|d, �r°||d,  n||d, d-  ||d,   d, }t|ƒ| }td.|› d/|d0›d1|d0›�ƒ td2d„ | D ƒƒ}td3|› d4�ƒ d S )5Nz,open Poly match-winner YES markets sampled: Ú
z8No open markets right now -- can't sample a live spread.))g        çš™™™™™©?)r   çš™™™™™¹?)r   ç333333Ã?)r   ç      Ð?)r   çffffffÖ?)r   ç      à?)r    çffffffæ?)r!   g)\�Âõ(ð?z
mid bucketZ14sú Únz>4znoBid%z>7Z	medSpreadz>10ZmedHalfz>8zmedHalf%ofMidz>14c                    s4   g | ],\}}}ˆ|  kr"ˆ k rn q|||f‘qS r   r   ©Ú.0r   r   r   ©ÚhiÚlor   r   Ú
<listcomp>1   ó    zmain.<locals>.<listcomp>z  [z.2fú,z)   r   Z4dc                 s   s$   | ]\}}}|r|d krdV  qdS )r   r   Nr   )r%   Ú_r   r   r   r   Ú	<genexpr>5   r*   zmain.<locals>.<genexpr>c                 S   s(   g | ] \}}}|r|d kr|||f‘qS )r   r   r$   r   r   r   r)   7   r*   c                 S   sP   t | ƒ} t| ƒ}|rH|d r(| |d  qN| |d d  | |d   d S tdƒS )Né   r   Únan)ÚsortedÚlenr   )ZxsÚkr   r   r   Úmed8   s    zmain.<locals>.medc                 S   s   g | ]\}}}|| ‘qS r   r   ©r%   r,   r   r   r   r   r   r)   ;   r*   c                 S   s"   g | ]\}}}||| d   ‘qS )r.   r   r4   r   r   r   r)   <   r*   c                 S   s>   g | ]6\}}}|| d kr||| d  || d  d ‘qS )r   r.   éd   r   r4   r   r   r   r)   =   r*   z  r5   z6.1fz%  z10.3fz8.3fz13.1fú%c                 S   s@   g | ]8\}}}d |  kr"dk rn q|r|dkr|||f‘qS )r   r   r   r   r$   r   r   r   r)   B   r*   c                 s   s$   | ]\}}}||| d   V  qdS )r.   Nr   r4   r   r   r   r-   D   r*   r.   r   z2
LONGSHOT range mid[0.05,0.35) with a live bid: n=z  median half-spread=z.3fz  mean=c                 s   s<   | ]4\}}}d |  kr dk rn q|r0|dkrdV  qdS )r   r   r   r   Nr   r$   r   r   r   r-   I   r*   z  (+z? markets in range had NO bid at all -> spread effectively huge))r   Úprintr1   Úsumr0   )ZrowsZbucketsZselr#   ZnobidÚrealr3   ZspreadsZhalvesZhalfpctZmsZmhZmhpZlsr2   ZmeanZnobid_lsr   r&   r   Úmain'   sL    6",ÿÿÿ>
ÿÿr:   Ú__main__)Ú__doc__ÚsysÚosÚpathÚinsertr   Zpolymarket_liver   r   r   r:   Ú__name__r   r   r   r   Ú<module>   s   %