o
    Y2Àjh  ã                   @   sì   d 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Z	ee
ƒ ¡ jZedƒZej deeƒ¡ ej deeƒ¡ ddlZddlZddlZddlZddlZddlmZ edƒZd	d
„ Zdd„ Z dd„ Z!e"dkrte!ej#d ƒ dS dS )aÔ  
sf_watchlist_day.py -- [2026-10-02] Every stock the trade bot watched on a day, on both Star
Follow versions; buys only while the bot was watching that stock (its scan windows), exits any
time until 15:55. Compares with the bot's real trades.
  ORIGINAL  star_follow.py: all playbook days, old marks, trigger 10 in 5 min, no stop
  LATEST    sf3: winners-only, confirmed marks, market+gap (lib_v2), still-matching exit (80)
    python3 sf_watchlist_day.py 2026-10-02
é    N)Údatetime)ÚPath)ÚZoneInfoz/var/www/screener/trade)Ú
get_clientzAmerica/New_Yorkc                 C   s$   dd|  d  › dd|  d d›�S )Né	   é   é<   ú:Ú02d© ©Úmr   r   ú</var/www/screener/trade/reports/playbook/sf_watchlist_day.pyÚ<lambda>   s   $ r   c              
   C   sú   dd l }g }ttd d| › d� ƒD ]9}d|v rKd|v rK|dd… }| t|d d	… ƒd
 d t|dd … ƒ d | || d¡d	 d …  ¡ ¡f¡ qi }t|ƒD ](\}\}}|d t	|ƒk rh||d  d nd}	|D ]}
| 
|
g ¡ ||	f¡ qlqR|S )Nr   ÚlogsÚ
trade_bot_z.logz[SCAN]zcandidates selectedé   é   é   r   r   é   r   z: [é   iY  )ÚastÚopenÚTRADEÚappendÚintÚliteral_evalÚrindexÚstripÚ	enumerateÚlenÚ
setdefault)Údayr   ÚscansÚlineÚtÚwinÚir   ÚsymsÚendÚsr   r   r   Úwindows   s   R€$ÿr+   c                     s0  t | ƒ}t|ƒ}tƒ }t | ¡jtd�}i }|ddg D ]‰dd„ |jˆ|jddd�|jd	d
�dd�D ƒ|ˆ< qg }dD ]>}t 	|| ¡}t
 dt
j¡}	|ru|t|ƒ d }
|
}tdƒD ]}||v rh|| d n|}||
 d d |	|< q\| |	¡ q<i }ttd d | › d� ƒD ]}t |¡}| |d g ¡ | d¡pŸd¡ qŠg g dœ}t ¡ }t ¡ }|D ]=‰t | ˆ¡}|rÃt |ˆ |¡nd }|d u rÊq±|ˆ fdd„}tj||| |d|d�\}}|d  ‡fdd„|D ƒ7  < q±~t ¡ }t ¡ ‰t
 ‡fdd„|j D ƒ¡}t !ˆ¡\}}d t_"d!t#j$v �rd"t_%d#t#j$v �r!d$t_%|D ]C‰t | ˆ¡}|�r:t |ˆ || t&|ƒ¡nd }|d u �rC�q#|ˆ fd%d„}|d&  ‡fd'd„tj'||ˆ||| ||d(�D ƒ7  < �q#tj(|tt)d)| › tj%d*k�rzd+tj% nd,› d-� d.ƒt*d/� t+t,|ƒ› d0| › �ƒ | -¡ D ]ä\}}|dk�rŸdnd1‰ |�r°t
 ‡ fd2d„|D ƒ¡nt
 d3g¡}t.d4d5„ |D ƒƒ}t+d6| /¡ › d7t,|ƒ› d8t,|ƒ› d9|dk 0¡ d:›d;| 0¡ d<›d=| 1¡ d>›d?| 2¡ d>›d@| ¡ d>›dA�ƒ t.|‡ fdBd„dC�d dD… D ]3}t+dE|dF dG›dHt3|dI ƒ› dH|dJ dK›dLt3|dM ƒ› dH|dN dK›dH|ˆ  d<›dO|dP › dQ�ƒ �qt.|‡ fdRd„dC�d dD… D ]3}t+dS|dF dG›dHt3|dI ƒ› dH|dJ dK›dLt3|dM ƒ› dH|dN dK›dH|ˆ  d<›dO|dP › dQ�ƒ �qC�q”dTd„ | 4¡ D ƒ}t+dUt,|ƒ› dVt1|ƒd<›dWt.|ƒ› �ƒ d S )XN)ÚtzinfoÚSPYÚIWMc              	   S   s<   g | ]}|j t|jƒt|jƒt|jƒt|jƒt|jƒg‘qS r   )Ú	timestampÚfloatr   ÚhighÚlowÚcloseÚvolume)Ú.0Úbr   r   r   Ú
<listcomp>5   s    4ÿzmain.<locals>.<listcomp>r   r   )ÚhourÚminuter   )r8   iè  )Ústartr)   Úlimit)r-   r.   i†  r   é   éd   ÚdataÚtradesz_trades.jsonlÚsymbolÚpl_pctr   )ÚoriginalÚlatestc                    ó   t ‡ fdd„|D ƒƒS )Nc                 3   ó,   � | ]\}}|ˆ   ko|k n  V  qd S ©Nr   ©r5   ÚxÚyr   r   r   Ú	<genexpr>K   ó   €* ú)main.<locals>.<lambda>.<locals>.<genexpr>©Úany©r   Úwr   r   r   r   K   ó    zmain.<locals>.<lambda>g      Y@)Ústop_pctÚcan_buyrB   c                    ó   g | ]}d ˆ i|¥‘qS ©Úsymr   ©r5   r%   ©r*   r   r   r7   M   ó    c                    s   g | ]}|ˆ v ‘qS r   r   )r5   Úk)Úm3r   r   r7   P   ó    éP   z--bandÚbandz--sinceÚsincec                    rD   )Nc                 3   rE   rF   r   rG   r   r   r   rJ   [   rK   rL   rM   rO   r   r   r   r   [   rQ   rC   c                    rT   rU   r   rW   rX   r   r   r7   \   rY   )rS   Úsf_watchlist_ÚcountÚ_Ú z.jsonrP   )Údefaultz watched stocks on Úplc                    s   g | ]}|ˆ  ‘qS r   r   rW   ©Úkeyr   r   r7   a   r\   g        c                 S   s   h | ]}|d  ’qS rU   r   rW   r   r   r   Ú	<setcomp>b   r\   zmain.<locals>.<setcomp>z
== z: z trades on z stocks, win z.0%z, avg z+.2fz%, sum z+.1fz% (0.1% cost per trade) | best z	%, worst ú%c                    s
   | ˆ   S rF   r   ©r%   rf   r   r   r   e   s   
 rf   é   z	   best: rV   Ú5ú Úbuy_mÚbuyz.2fz -> Úsell_mÚsellz% [Úwhyú]c                    s   | ˆ  S rF   r   rj   rf   r   r   r   g   s    z
   worst: c                 S   s   g | ]	}|D ]}|‘qqS r   r   )r5   ÚvrH   r   r   r   r7   i   s    z
== BOT (real): z trades, sum z!% (before the 0.1% cost), stocks )5r+   Úlistr   r   ÚfromisoformatÚreplaceÚETÚget_minute_barsÚL2Ú_minutesÚnpÚzerosÚfloat32ÚminÚranger   r   r   ÚjsonÚloadsr!   ÚgetÚRTÚLibÚSFÚ
load_marksÚREFÚloadÚ
day_arraysÚstar_followÚS3ÚarrayÚkeysÚnormal_ratesÚ	MIN_MATCHÚsysÚargvÚMODEÚtupleÚrun_dayÚdumpÚHEREr0   Úprintr    ÚitemsÚsortedÚupperÚmeanÚsumÚmaxÚhmÚvalues) r"   r&   r(   ÚcÚd0ÚrowsÚbenchr6   ÚbyÚarrÚoÚlastr   ÚbotÚlr%   ÚresÚlibÚmarksÚrefÚaÚokÚtrrb   ÚwmaskÚnbÚnsrt   ÚTÚpÚtradedÚbpr   )rg   r[   r*   r   Úmain.   s‚   "ÿ,
 8"
8<*>ÿÿ
ÿ d dÿ,r¹   Ú__main__r   )$Ú__doc__r�   r‘   r   Úpathlibr   Úzoneinfor   Únumpyr|   Ú__file__ÚresolveÚparentr—   r   ÚpathÚinsertÚstrÚreference_traderr„   r‹   r†   Ú	sf3_batchrŒ   Úlib_v2rz   Ú	referencerˆ   Úalpaca_clientr   rx   rŸ   r+   r¹   Ú__name__r’   r   r   r   r   Ú<module>   s.    $?ÿ