a
    ³¨Ûiæ  ã                   @   s  d dl Zd dlZg d¢ZdddddœZdd	„ Zg Ze ¡ D ]Z\Z	Z
eD ]LZz:ejd
e	› de› d�dd�Zeed< e
ed< e e¡ W qF   Y qF0 qFq:ejedd�Zejg d¢d�Ze ¡ Zejed dd�ed< e d¡jdd�Zeejdd„ dd�Ž \ZZZdejeejd� ed< ed ed  ed  ed< ed d ked!< ed" d#ked$< ed%eeƒ› �ƒ ed&ed!  ¡ › �ƒ ed'ed   ¡  !¡ › d(ed  "¡  !¡ › �ƒ ed j# $d)¡ed*< eed!   ¡ Z%d{d-d.„Z&ed/ƒ ed0ƒ ed1ƒ e&e%d+d,d2�Z'ed3d*d4›d5d6d7›d5d8d9›d5d:d9›d5d;d<›d5d=d>›d5d?d>›d5d@dA›�ƒ edBƒ e' (¡ D ]ž\Z)Z*e+e*dC ƒ› dDe+e*dE e*dC  ƒ› �Z,e*dF dG›Z-ee*d* d4›d5e+e*dE ƒd7›d5e*dH dI›d5e*dJ dI›d5e,d<›d5e-› d5e*d? dK›d5e*dL dM›d@�ƒ �qTe'd? j.dN Z/e'd?  "¡ Z0e'd?   ¡ Z1e'j2e'd?  3¡ d*f Z4e'd?  5¡ e'd?  Z6e6 "¡ Z7e7e'd?  5¡ e6 3¡   dO Z8ee'ƒZ9edPƒ edQƒ edRƒ edSƒ edTe/dU›dVe/dW dX›dY�ƒ edZe0dU›d[e4› d\�ƒ ed]e7dU›dVe8dX›d^�ƒ ed_e9› �ƒ ed`e%d$  :¡ dO dX›da�ƒ edPƒ edbƒ edRƒ edcd>›dddedf›ddd@dA›dddgd9›dddhd>›�	ƒ diD ]´Z;e&e%e;d,d2�Z<e<j=�rŽee;dO dj›dkdldf›�ƒ �qVe<d? j.dN Z>e<d?  5¡ Z?e?e<d?  e? dO  "¡ Z@e>d kZAee;dO dj›dme>dn›dde>do dp›dqe@dr›dkeA�rüdsndtd>›�	ƒ �qVeduƒ edvƒ edwƒ eddx›ddd6d<›ddded>›ddd@dA›dddgd9›�	ƒ eD ]¦ZBe%e%d eBk ZCeCj=�rv�qVe&eCd+d,d2�Z<e<j=�r��qVe<d? j.dN Z>e<d?  5¡ Z?e?e<d?  e? dO  "¡ Z@eeBdx›ddeeCƒd<›dye>dz›dde>do dM›dqe@dr›da�
ƒ �qVdS )|é    N)Z1920Z2021Z2122Z2223Z2324Z2425Z2526ZEPLZChampionshipzLigue 1zSerie A)ZE0ZE1ZF1ZI1c                 C   s:   d|  d|  d|  }d|  | d| | d| | fS )Né   © )ÚhÚdÚaZoverr   r   ú%E:\soccer\misc\archive\compounding.pyÚremove_margin   s    r   zE:/soccer/league_data/Ú_z.csvz	utf-8-sig)ÚencodingZSeasonZLeagueT)Zignore_index)ÚFTRÚDateÚB365AÚPSCHÚPSCDÚPSCA)Zsubsetr   )Zdayfirst)Zdropc                 C   s   t | d | d | d ƒS )Nr   r   r   )r   )Úrr   r   r   Ú<lambda>   ó    r   r   )Zaxis)ÚindexZ
PSC_fair_Ar   Zedgeçš™™™™™©?Z	qualifiesr   ÚAÚwonzTotal matches: zQualifying bets: zDate range: z to ÚWÚWeekçš™™™™™é?ç     @�@c                 C   s  |}g }t | d  ¡ ƒ}|D ]ö}| | d |k }t|ƒ}	|	dkrBq|| }
|
|	 }d}d}| ¡ D ]6\}}|d r�|||d d  7 }|d7 }qb||8 }qb||7 }| t|ƒ|	t|dƒt|
dƒt|dƒt|dƒ|t||	 d dƒt|| dƒd	œ	¡ |dkrtd
|› d�ƒ  �qqt 	|¡S )Nr   r   r   r   r   é   éd   é   )	r   ÚN_betsÚPer_betÚ
Week_stakeÚWeek_PLÚBankrollÚWinsZWRÚ
Bankroll_xz  BUST at week ú!)
ÚsortedÚuniqueÚlenÚiterrowsÚappendÚstrÚroundÚprintÚpdZ	DataFrame)ÚdataÚ	stake_pctÚstarting_bankrollZedge_thresholdZbankrollÚhistoryZweeksZweekZ	week_betsÚnZ
week_stakeZper_betZweek_plZwinsr	   Zbetr   r   r   Úrun_compound4   sB    

÷r5   z[
==========================================================================================uI   COMPOUNDING SIMULATION â€” Away CLV >5%, stake 80% per week, start Â£1000zZ==========================================================================================)r1   r2   Ú
z<14ú ZBetsz>4ZStakez>8zPer BetzW/Lz>5zWeek P&Lz>10r#   Úxz>6zK---------------------------------------------------------------------------r$   ú/r   r"   z>+10.2fr!   z>8.2fr    z>10.2fr%   z>6.2féÿÿÿÿr   z=
============================================================ZSUMMARYz<============================================================u!     Starting bankroll:   Â£1,000.00u     Final bankroll:      Â£z,.2fz  (é
   z.1fzx)u     Peak bankroll:       Â£z  (week ú)u     Max drawdown:        Â£z%)z  Weeks with bets:     z  Overall win rate:    ú%u8   SENSITIVITY â€” stake % vs final bankroll (start Â£1000)zStake %z  u   Final Â£z>12zMax DD%z	Went Bust)
gš™™™™™¹?gš™™™™™É?g333333Ó?gš™™™™™Ù?g      à?g333333ã?gffffffæ?r   gÍÌÌÌÌÌì?g      ð?z>9.0fz%  ZBUSTu   %  Â£z>11,.2fiè  z>6.1fzx  z>7.1fZYESZnozG
======================================================================u2   PER-SEASON: start each season at Â£1000, stake 80%zF======================================================================z<10u     Â£z>9,.2f)r   r   r   )DZpandasr/   ZnumpyZnpZseasonsZleaguesr   ZdfsÚitemsÚcodeÚnameÚsZread_csvr   r+   ÚconcatZdfZdropnaÚcopyZto_datetimeZsort_valuesZreset_indexÚzipZapplyZtHZtDZtAZSeriesr   r.   r)   ÚsumÚminÚdateÚmaxZdtZ	to_periodZ
qualifyingr5   Zhistr*   r	   ÚrowÚintZwlZpl_strZilocÚfinalZpeakZtroughZlocZidxmaxZ	peak_weekZcummaxZ
max_dd_rowZmax_ddZ
max_dd_pctZtotal_weeksZmeanZpctr   ÚemptyÚfZpkZddZbustZseasonÚsubr   r   r   r   Ú<module>   s¦   ,
*H&f.D.