a
    ½ûÛiì  ã                   @   s�  d Z ddlZddlZddlmZ dZdZdZdZ	dZ
g d	¢Zg d
¢Zdddddddddddddddddddddd d	œZd!d"„ Zd#d$„ Zed%e ¡  d&¡› d'�ƒ ej e
d(¡ ejd(d)d*�Zejed+ d,d-d.�ed+< ejd+gd/�Zed0eeƒ› d1ed2  ¡ › d3�ƒ ed4ed+  ¡  ¡ › d5ed+  ¡  ¡ › d6�ƒ g Ze ¡ D �]0\Z Z!e! "d2¡Z#e#ev�r`�q>d Z$ Z% Z&Z'd7D ]”\Z(Z)Z*zfe+e!e( ƒZ,e+e!e) ƒZ-e+e!e* ƒZ.e/d8d9„ e,e-e.fD ƒƒ�râe,e-e.  Z$Z%Z&e( 0d:d;¡Z'W  �q
W n  e1e2e3f�y   Y �qtY n0 �qte$du �r�q>ee$e%e&ƒ\Z4Z5Z6d<e4 d<e5 d<e6 d=œZ7e4e5e6d=œZ8eD �]\Z9Z:ze+e!e: ƒZ;W n  e1e2e3f�yŒ   Y �qRY n0 e;d>k�rœ�qRe7e: Z<e8e: Z=e;e< e< Z>e>ek �rÆ�qRe;e= d< Z?e;d< Z@e?dk�rè�qRe?e@ ZAee?e@eƒZBe Ce!d+  d?¡eDe! "d@d;¡ƒ E¡ e "e#e#¡e!dA e!dB e9eFe;dCƒeFe<dCƒeFe>dD d<ƒeFeAdD d<ƒeBe'dEœ¡ �qR�q>e Ge¡ Hd+d@g¡jId,dF�ZJedGƒ edHe ¡  dI¡› dJedK›dLe› dMedD dN›dO�	ƒ edGƒ eJjK�ræedPƒ �nÈeJdQ  L¡ ZMedReeJƒ› dSeMdK›dTeMe dD dU›dV�ƒ edWd+dX›dYd@dZ›dYd[d\›dYd]d^›dYd_d`›dYdadb›dYdcdd›dYdedb›dYdfdb›dYdQdg›dYdhdi›�ƒ edjƒ eJ ¡ D ]Æ\Z ZNeNdk › dleNdm › �ZOeeOƒdnk�rÊeOddo… dp ZOedWeNd+ dX›dYeNd@ dZ›dYeNd[ d\›dYeOd^›dYeNd_ d`›dYeNda dq›dYeNdr ds›dYeNdt du›dveNdw du›dxeNdQ dy›dYeNdh di›�ƒ �qŽeƒ  edGƒ edzeMdK›�ƒ ed{eLd|d9„ eJ ¡ D ƒƒd}›�ƒ ed~eMdK›�ƒ edGƒ g ZPe ¡ D �]´\Z Z!e! "d2¡Z#e#eQv�rÜ�qºeQe# \Z9Z:ZRze+e!e: ƒZ;W n   Y �qºY n0 d Z$ Z%Z&d7D ]z\Z(Z)Z*zZe+e!e( ƒZ,e+e!e) ƒZ-e+e!e* ƒZ.e/dd9„ e,e-e.fD ƒƒ�r€e,e-e.  Z$Z%Z&W  �qšW n   Y �qY n0 �qe$du �sºe;d>k�r²�qºee$e%e&ƒ\Z4Z5Z6d<e4 d<e5 d<e6 d=œe: Z<e;e< e< Z>d€e>  k�rek �rºn nfeP Ce!d+  d?¡eDe! "d@d;¡ƒ E¡ e "e#e#¡e!dA › dle!dB › �e9eFe;dCƒeFe<dCƒeFe>dD d<ƒd�œ¡ �qºeP�rŒe GeP¡jHdtd‚dƒ�ZSed„ƒ edWd+dX›dYd@dZ›dYd[d\›dYd]d^›dYd_d`›dYdadb›dYd…dg›dYdedb›�ƒ ed†ƒ eS ¡ D ]ž\Z ZNeeNd] ƒdnk�reNd] neNd] ddo… dp ZOedWeNd+ dX›dYeNd@ dZ›dYeNd[ d\›dYeOd^›dYeNd_ d`›dYeNda dq›dYeNdr d‡›dYeNdt du›dˆ�ƒ �qìdS )‰zá
Live Betting Signal Scanner
Downloads today's fixtures from football-data.co.uk and flags
value bets using the CLV strategy (B365 vs sharp reference odds).

Sharp reference priority: BFE (Betfair Exchange) > Avg market odds
é    N)Údatetimeg     @�@g      Ð?gš™™™™™©?gš™™™™™¹?z,https://www.football-data.co.uk/fixtures.csv)ZE0ZE1ZE2ZE3ZECZSP1ZSP2ZI1ZI2ZD1ZD2ZF1ZF2ZN1ZB1ZP1ZT1ZG1ZSC0ZSC1ZSC2ZSC3))ÚHomeÚB365H)ZDrawÚB365D)ÚAwayÚB365AZEPLZChampionshipz
League Onez
League TwoZ
ConferencezLa LigaZSegundazSerie AzSerie BZ
Bundesligaz2.BundesligazLigue 1zLigue 2Z
EredivisiezBelgian Pro LeaguezPrimeira Ligaz	Super LigzGreek SLzScottish PremzScottish ChampzScottish L1zScottish L2c                 C   s:   d|  d|  d|  }d|  | d| | d| | fS )Né   © )ÚhÚdÚaZoverr	   r	   ú&E:\soccer\misc\archive\live_signals.pyÚremove_margin%   s    r   c                 C   s(   | | }|t  }t|tƒ}t|| dƒS )Né   )Ú
KELLY_MULTÚminÚMAX_BET_PCTÚround)ÚedgeÚnet_oddsZbankrollÚfr	   r	   r   Úkelly_stake)   s    
r   zDownloading fixtures... (z%Y-%m-%d %H:%Mú)zE:/soccer/fixtures_live.csvz	utf-8-sig)ÚencodingÚDateTZcoerce)ZdayfirstÚerrors)ZsubsetzLoaded z fixtures across ZDivz leagueszDate range: z to Ú
))ZBFEHZBFEDZBFEA)ZAvgHZAvgDZAvgAc                 c   s   | ]}|d kV  qdS ©ç      ð?Nr	   ©Ú.0Úxr	   r	   r   Ú	<genexpr>I   ó    r"   ÚHÚ r   )r   r   r   r   z%a %d %bÚTimeZHomeTeamZAwayTeamr   éd   )r   r&   ÚLeaguer   r   ÚBetÚB365ÚPS_fairúEdge%ú
Kelly_raw%õ   Stake Â£ÚRef)Zdropz_===============================================================================================u   BETTING SIGNALS â€” z%Y-%m-%du     |  Bankroll: Â£z,.2fz  |  Strategy: z
x Kelly, >z.0fz% edgez  No qualifying bets found.r.   z
  u$    qualifying bets  |  Total stake: Â£z  (z.1fz% of bankroll)
z  z<12ú z<7r(   z<20ÚMatchz<35r)   z<6r*   z>6zRef Fairz>9ZEdgeZKellyz>8r/   z<5zf  ----------------------------------------------------------------------------------------------------r   z vs r   é"   é   z...z>6.2fr+   z>9.2fr,   z>5.1fz% r-   u   % Â£z>7.2fu     Total outlay: Â£u      If all bets win (unlikely): Â£c                 c   s&   | ]\}}|d  d |d  V  qdS )r*   r   r.   Nr	   )r    Ú_Úsr	   r	   r   r"   –   r#   z+,.2fu$     If all bets lose (worst case): -Â£c                 c   s   | ]}|d kV  qdS r   r	   r   r	   r	   r   r"   ©   r#   g{®Gáz”?)r   r&   r(   r1   r)   r*   r+   r,   F)Z	ascendingz+
  NEAR MISSES (2-5% edge, watching brief):zPS Fairz_  ---------------------------------------------------------------------------------------------z>8.2fú%)TÚ__doc__ZpandasZpdZurllib.requestZurllibr   ZBANKROLLr   ZEDGE_THRESHOLDr   ZFIXTURES_URLZLEAGUESZOUTCOMESZLEAGUE_NAMESr   r   ÚprintZnowÚstrftimeZrequestZurlretrieveZread_csvZdfZto_datetimeZdropnaÚlenZnuniquer   ÚdateÚmaxZsignalsZiterrowsr4   ÚrowÚgetZdivZref_hZref_dZref_aZ
ref_sourceZh_colZd_colZa_colÚfloatZrhZrdZraÚallÚreplaceÚ
ValueErrorÚKeyErrorÚ	TypeErrorZtp_hZtp_dZtp_aZfair_mapZprob_mapZoutcomeZb365_colZ	b365_oddsZps_fairZps_probr   Zevr   Zkelly_f_rawZstakeÚappendÚstrÚstripr   Z	DataFrameZsort_valuesZreset_indexZ
signals_dfÚemptyÚsumZtotal_staker5   ÚmatchZnear_missesZLEAGUE_CONFIGZps_colZnm_dfr	   r	   r	   r   Ú<module>   s4  
ú
	".

$




ô4,`<ÿÿÿÿþþ"
$
øH.<ÿÿÿ