a
    µZ$j½  ã                   @   s²  d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlZe d¡ ddlmZ ejjdd	d
� d\ZZZe edƒ¡Zdd„ eeƒD ƒZdd„ eD ƒZejdd„ d� dd„ Zdd„ ZedƒedƒdœZ e  !¡ D ]>\Z"Z#e$de"d›de#d d›d e#d e e d! d"›d#�ƒ qôej%d$d%�\Z&Z'd&d'dœZ(dD ]\Z"e e" Z#e'j)e*e+e#ƒƒe#e(e" d(de"d›d)e#d d*›d+e#d e e d! d"›d#�d,� �qRe'j,ed-d.d/d0d1� e' -d2¡ e' .d3¡ e' /d4¡ e'j0d5d6� e'j1d7d8d9� e& 2¡  e 3¡ Z4e&j5e4d:d;d<� e 6e&¡ e4 7¡ Z8ed=ƒ 9e8¡ d>d?„ Z:e:d@ƒZ;edAƒZ<dBe d d d*›dCe d d d*›�e<dD< e; =dEdF¡e<dG< e; =dHdF¡e<dI< edJƒZ>e< ?e>¡ e> ?e
dKe d d d›dLe d d e e d! d"›dMe d d d›dLe d d e e d! d"›dN�	dOƒ¡ ee8d:dP�Z@e@ AdQdR¡ e@jAdSdTdUdV� e< ?e@¡ e BdWdX¡�>ZCeC De;dE e;dY ¡ eC Ee;dE e;dH e< F¡ ¡ W d  ƒ n1 �sœ0    Y  e$dZƒ dS )[a/  
Counterfactual equity at different Kelly multipliers. Each historical paper bet
was sized at frac = min(kelly_f * 0.25, 0.25) of $1000, so kelly_f ~= stake/250.
Re-simulate the compounded path at an arbitrary KELLY_MULT, from $1000.
mult=0.25 reproduces the live path (sanity check). Emails the chart.
é    N)ÚPath)ÚMIMEMultipart)ÚMIMEText)Ú	MIMEImageZAggzutf-8Úreplace)ÚencodingÚerrors)ç     @�@ç      Ð?r
   zE:\soccer\data\bet_history.jsonc                 C   s   i | ]\}}t |ƒ|“qS © )Úid)Ú.0ÚiÚbr   r   ú,E:\soccer\research\analysis\_equity_kelly.pyÚ
<dictcomp>   ó    r   c                 C   s(   g | ] }|  d ¡r|  d¡dur|‘qS )Úkalshi_stakeZ
kalshi_pnlN)Úget)r   r   r   r   r   Ú
<listcomp>   r   r   c                 C   s   |   d¡pdtt| ƒ fS )NÚdateÚ )r   Úidxr   )r   r   r   r   Ú<lambda>   r   r   )Úkeyc                 C   s"   |   d¡}|r|S | d d t S )NZkalshi_kelly_fr   r	   )r   Ú	BASE_MULT)r   Zkfr   r   r   Úkelly_f   s    
r   c                 C   sž   t g}t }tD ]Š}|d }|r|dkr(qtt|ƒ|  tƒ}t|| dƒ}|dk rTd}||krft|dƒ}d| | }|| d¡r†|| n| 7 }| |¡ q|S )NZ
kalshi_askr   é   g      ð?é   Zwon)ÚSTARTÚpaperÚminr   ÚMAX_BET_PCTÚroundr   Úappend)ZmultÚeqÚrunr   ZaskZfracZstakeZbor   r   r   Úreplay   s    

r'   r
   çš™™™™™¹?)r
   r(   zKelly z.2fz	: final $éÿÿÿÿz,.2fz  (éd   z+.1fz%))é   g      @)Zfigsizez#d62728z#2077b4r   z  ($z,.0fz, )ÚcolorÚlwZlabelZgrayz--r   g333333ã?)r,   Zlsr-   Úalphaz
Bet numberzBankroll ($)u9   Kalshi compounded equity â€” Kelly 0.25 (current) vs 0.10Zbest)ZlocTg333333Ó?)r.   Úpngéx   )ÚformatZdpizE:\soccer\_equity_kelly.pngc                 C   sT   i }t | ƒD ]B}| ¡ }|r| d¡sd|v r| dd¡\}}| ¡ || ¡ < q|S )Nú#ú=r   )ÚopenÚstripÚ
startswithÚsplit)ÚpÚeZlnÚkÚvr   r   r   Ú_envB   s    "r<   zE:\soccer\.envZrelatedzEquity: Kelly 0.25 $z
 vs 0.10 $ZSubjectZEMAIL_SENDERr   ZFromZEMAIL_RECIPIENTZToZalternativez^<html><body><h3>Kalshi compounded equity by Kelly multiplier</h3><p>Kelly 0.25 (current): <b>$z</b> (z%)<br>Kelly 0.10: <b>$z=%)</p><img src="cid:eq" style="max-width:100%"></body></html>Zhtml)Z_subtypez
Content-IDz<eq>zContent-DispositionZinlinez
equity.png)Úfilenamezsmtp.gmail.comiÑ  ZEMAIL_APP_PASSWORDzemailed.)GÚ__doc__ZjsonÚioZsmtplibÚsysÚpathlibr   Zemail.mime.multipartr   Zemail.mime.textr   Zemail.mime.imager   Z
matplotlibZuseZmatplotlib.pyplotZpyplotZpltÚstdoutÚreconfigurer   r"   r   Úloadr4   ZbetsÚ	enumerater   r    Úsortr   r'   ÚpathsÚitemsÚmr%   ÚprintZsubplotsZfigZaxZcolorsZplotÚrangeÚlenZaxhlineZ
set_xlabelZ
set_ylabelZ	set_titleZlegendZgridZtight_layoutÚBytesIOZbufZsavefigÚcloseÚgetvaluer/   Zwrite_bytesr<   ÚenvÚmsgr   ZaltZattachZimgZ
add_headerZSMTP_SSLÚsZloginZsendmailZ	as_stringr   r   r   r   Ú<module>   sp    

8
0ÿ

"( ÿþýüû: