a
    ¯	èi—  ã                   @   sš  d dl Zd dlZd dlZd dlZd dlZe d¡ e d¡Zg Z	eD ]HZ
z6eje
dd�Zej e
¡ d¡d  ed< e	 e¡ W qD   Y qD0 qDeje	dd	�Zejg d
¢d�Zejed ddd�ed< ejdgd� d¡jdd�Zded  ded   ded   ed< ded  ed  ed< ded  ed  ed< ded  ed  ed< ed ded   ded   ed< ed ded   ded   ed< ed ded   ded   ed< dZdZd Zd!Zd"eefd#d$„Zefd%d&„Zefd'd(„Zg d)¢Zd*Zd+Ze d,eed- eef ƒ e ƒ  d.Z!e e! "d/d0d1d2d3d4d5d6d7¡	ƒ e d8ƒ eD ]v\Z#Z$Z%ee&e$ƒee%ƒZ'ee'eeƒ\Z(Z)Z*Z+Zee'eeƒZ,e d9 "e#e-e'ƒe(e+e)e*e .e,d:¡e /e,¡e .e,d;¡¡	ƒ �qPe ƒ  e d<ƒ e d= "d>d?d@dAdB¡ƒ ed"gedCƒZ0edDd"gedCƒZ1eZ2eZ3e4e0d j5j6 7¡ ƒZ8e8D ]ÌZ9e0e0d j5j6e9k Z:e1e1d j5j6e9k Z;e: <¡ D ]6\Z=Z>e?e>dE e eƒZ@eAe2e@e2 e>dF   dGƒZ2�q^e; <¡ D ]6\Z=Z>e?e>dE e eƒZ@eAe3e@e3 e>dF   dGƒZ3�qže dH "e9e-e:ƒe2e-e;ƒe3¡ƒ �q*e ƒ  e dIƒ ed"gedCƒZ0e dJ "dKd1d2d3d5d7¡ƒ dLD ]dZBee0eBe?eBd*ƒƒ\Z(Z)Z*Z+Z=ee0eBe?eBd*ƒƒZ,e dM "dNeBd-  e(e+e)e .e,d:¡e .e,d;¡¡ƒ �q0dS )Oé    NÚignorezE:/soccer/league_data/*.csvz	utf-8-sig)ÚencodingÚ_ZleagueT)Zignore_index)ÚB365HÚB365DÚB365AÚPSHÚPSDÚPSAÚFTRÚDate)Zsubsetr   Zcoerce)ZdayfirstÚerrors©Zdropé   r   r	   r
   ZoverÚpHÚpDÚpAr   ÚedgeHr   ÚedgeDr   ÚedgeAiÐ  g     @�@gš™™™™™©?éc   ÚAc                 C   sb  g }| D �]}|dkrdt d |kt d |k@ }t |  ¡ }|d dk|d< |d |d< |d |d< n¢|d	krºt d
 |kt d |k@ }t |  ¡ }|d d	k|d< |d |d< |d |d< nLt d |kt d |k@ }t |  ¡ }|d dk|d< |d |d< |d |d< ||d< | |¡ qt |¡ d¡jdd�}|jdd„ dd�|d< |jdd„ dd�|d< |S )NÚHr   r   r   ÚwonÚoddsr   ÚpÚDr   r   r   r   r   r   r   Zoutcomer   Tr   c                 S   s2   t | d | d d  d| d   | d d  dƒS )Nr   r   r   r   )Úmax©Úr© r    ú%E:\soccer\misc\archive\mc_analysis.pyÚ<lambda>:   ó    zbuild_pool.<locals>.<lambda>r   )ZaxisÚ	raw_kellyc                 S   s   | d r| d d S dS )Nr   r   r   g      ð¿r    r   r    r    r!   r"   ;   r#   Úpnl_unit)ÚdfÚcopyÚappendÚpdÚconcatÚsort_valuesÚreset_indexZapply)ÚoutcomesZedge_minÚodds_maxÚpartsÚoÚmaskÚbÚpoolr    r    r!   Ú
build_pool    s6    
ÿ
r4   c                 C   sþ   |}| d j d |fg}|}d}g }|  ¡ D ]‚\}	}
t|
d | |ƒ}|| }||
d  }t|| dƒ}t||ƒ}t||| | ƒ}| t || ¡¡ |}| |
d |f¡ q,t |¡dkrÜt |¡t |¡ t 	d¡ nd}|t
 d d }|||||fS )	zFSingle compounded Kelly run in date order. Returns list of (date, br).r   r   r$   r%   ç{®Gáz„?éü   g’$I’$IÂ?r   )ZilocÚiterrowsÚminr   r(   ÚnpÚlogZstdZmeanZsqrtÚSTART)r3   ÚkmÚmax_pctZbankrollÚbrÚpathZpeakÚmax_ddZlog_retsr   ÚrowÚfracZstakeZpnlZbr_newÚsharpeÚcagrr    r    r!   Úkelly_compound_run>   s$    
0rE   c                 C   sŒ   t j d¡}| d j}| d j}t  |¡}t|ƒD ]T}| t|ƒ¡}	t}
|	D ]0}t	|| | |ƒ}t
|
||
 ||   dƒ}
qL|
||< q2|S )Nr   r$   r%   r5   )r9   ZrandomZdefault_rngÚvaluesÚemptyÚrangeZpermutationÚlenr;   r8   r   )r3   r<   r=   ÚnÚrngZraw_kZpnl_uÚfinalsÚiÚidxr>   ÚjrB   r    r    r!   Úmonte_carloS   s    



rP   ))z	Away onlyr   r   )zAway (odds<6)r   ç      @)z	Home onlyr   r   )z	Draw onlyr   r   )z	Home+AwayÚHAr   )zHome+Away (A<6)rR   rQ   )zAll 3ÚHDAr   )zAll 3 (A<6)rS   rQ   ç      Ð?çš™™™™™¹?zTKelly multiplier: %.2fx | Max stake: %.0f%% of bankroll | Start: $%.0f | MC sims: %déd   z:{:<22} {:>5} {:>10} {:>8} {:>7} {:>7}  {:>9}  {:>9}  {:>9}ZStrategyZBetszFinal BRZCAGRZMaxDDZSharpezMC p10zMC medzMC p90zi---------------------------------------------------------------------------------------------------------zV{:<22} {:>5} {:>10,.0f} {:>7.1%} {:>7.1%} {:>7.2f}  ${:>8,.0f}  ${:>8,.0f}  ${:>8,.0f}é
   éZ   zJ=== Year-by-year compounded bankroll: Away (odds<6) vs Home+Away (A<6) ===z${:<6} {:>10}  {:>10}  {:>10}  {:>10}ZYearz	Bets(A<6)zBR(A<6)zBets(HA)zBR(HA)rQ   r   r$   r%   r5   z,{:<6} {:>10}  {:>10,.0f}  {:>10}  {:>10,.0f}z3=== Kelly multiplier sensitivity: Away (odds<6) ===z&{:<8} {:>10} {:>8} {:>7}  {:>9}  {:>9}ZKelly)rU   rT   g      à?g      è?g      ð?z:{:<8} {:>10,.0f} {:>7.1%} {:>7.1%}  ${:>8,.0f}  ${:>8,.0f}z%.0f%%)CZpandasr)   ZglobÚosZnumpyr9   ÚwarningsÚfilterwarningsÚfilesZdfsÚfZread_csvr&   r?   ÚbasenameÚsplitr(   r*   ZdropnaZto_datetimer+   r,   ZN_SIMr;   ZEDGEZODDSMAXr4   rE   rP   ZconfigsZKMZMAXPCTÚprintZhdrÚformatÚnamer-   r.   Úlistr3   r>   r@   rC   rD   rL   rI   Z
percentileZmedianZpool_AZpool_HAZbr_AZbr_HAÚsortedZdtZyearÚuniqueZyearsZyrZgAZgHAr7   r   rA   r8   rB   r   r<   r    r    r    r!   Ú<module>   sš   (

($$$þ

ÿÿ
þ