o
    @a¹j@  ã                   @   s„   d Z ddlZddlZddlZddlmZ dd„ e edƒ¡D ƒZ	g d¢Z
dd	„ Zd
d„ Zedkr>ejdd… D ]Zeeƒ q7dS dS )a!  
pick_report.py -- [2026-09-27] How well an entry-rules run recognized the
day's winners (held to 15:55, so a pick = win if the stock was higher at
the close than at the pick).
  * picks, winning / losing picks per day
  * coverage: of each day's winners (closed above the 9:30 open) and big
    winners (closed 5%+ above the open), how many were picked, and how
    many of those picks still made money
  * indicator values at the pick: winning picks vs losing picks
Usage: python3 sim/analysis/pick_report.py data/simulations/<run>.json [...]
é    N)Údefaultdictc                 C   s   i | ]}|d  |d f|“qS )ÚdateÚsymbol© )Ú.0Úrr   r   ú4/var/www/screener/trade1/sim/analysis/pick_report.pyÚ
<dictcomp>   s    r	   z>/var/www/screener/trade/reports/open_window/daily_winners.json)ÚvasÚbar_rvolÚsmooth_accelÚ	imbalanceÚ
spread_pctÚprice_vs_vwap_pctÚdist_to_hod_pctÚown_change_5bar_pctÚrs_minÚvol_slope_5Úminutes_after_openÚup_from_open_pctc                    sÐ   | d d ‰ dd„ ˆ   d¡pi  ¡ D ƒ}ˆ   d¡pi }ddlm} | | d	 ¡}t  || d
 fi ¡  d¡}i ‡ fdd„tD ƒ¥|rEt|ƒnd |  d¡|jd |j d |r_| d | d d nd ˆ   d¡dœ¥S )NÚplanÚ
indicatorsc                 S   s   g | ]}|d ur|‘qS ©Nr   )r   Úxr   r   r   Ú
<listcomp>   ó    zflat.<locals>.<listcomp>Úrel_strength_pctÚvolume_risingr   )ÚdatetimeÚ
entry_timer   Úopenc                    s   i | ]}|ˆ   |¡“qS r   ©Úget)r   Úk©Úir   r   r	      r   zflat.<locals>.<dictcomp>Ú
slope_normé<   i*  Úentry_priceé   éd   Ú
trend_3bar)r   r   r   r   r+   )	r"   Úvaluesr   ÚfromisoformatÚDWÚINDÚminÚhourÚminute)ÚtÚdayÚrsÚvrr   ÚetÚor   r$   r   Úflat   s   *ýr9   c                    sd  t  t| ƒ¡}td|d › d�ƒ ttƒ}g }tdd›ddd›dd	d
›ddd
›ddd›ddd›ddd›ddd›�ƒ t|d ƒD ]ô‰ |d ˆ  d }dd„ |D ƒ}‡ fdd„t ¡ D ƒ}‡ fdd„t ¡ D ƒ}dd„ |D ƒ‰‡fdd„|D ƒ}‡fdd„|D ƒ}	‡fdd„|	D ƒ}
dt	|ƒfd	t	|ƒfdt	|ƒt	|ƒ fd t
d!d"„ |D ƒƒfd#t	|ƒfd$t	|ƒfd%t	|ƒfd&t	|	ƒfd't	|
ƒff	D ]\‰}|ˆ  |7  < qÁtˆ d(d … d›dt	|ƒd)›dt	|ƒd*›dt	|ƒt	|ƒ d*›dt
d+d"„ |D ƒƒd,›dt	|ƒd-›d.t	|ƒd/›dt	|	ƒd›d.t	|ƒd0›dt	|
ƒd1›d.t	|	ƒd2›�ƒ |D ]}| |d3 d4kt|ˆ ƒˆ |f¡ �q q@td5d›d|d d6›d|d	 d7›d|d d7›d|d  d,›d|d$ d8›d.|d# d9›d|d& d:›d.|d% d;›d|d' d<›d.|d& d=›�ƒ td>ƒ tD ]1‰‡fd?d„|D ƒ}‡fd@d„|D ƒ}|�r®|�r®tdAˆdB›dt |¡dC›dt |¡dC›�ƒ �q~|S )DNz
=================== Únamez ===================r4   Ú6ú Úpicksz>5Úwinz>4ÚlosezP/Lz>9z | zwinners pickedz>15zbig winners pickedz>19zbig picked & wonz>17ÚdaysÚtradesc                 S   s   g | ]
}|d  dkr|‘qS ©Ú
pl_dollarsr   r   ©r   r3   r   r   r   r   ,   s    zreport.<locals>.<listcomp>c                    s,   g | ]\\}}}|ˆ kr|d  dkr|‘qS )Úopen_close_pctr   r   ©r   ÚdÚsr   ©r4   r   r   r   -   ó   , c                    s,   g | ]\\}}}|ˆ kr|d  dkr|‘qS )rE   é   r   rF   rI   r   r   r   .   rJ   c                 S   s   i | ]}|d  |“qS )r   r   rD   r   r   r   r	   /   s    zreport.<locals>.<dictcomp>c                    ó   g | ]}|ˆ v r|‘qS r   r   ©r   rH   ©Úpickedr   r   r   0   r   c                    rL   r   r   rM   rN   r   r   r   1   r   c                    s    g | ]}ˆ | d  dkr|‘qS rB   r   rM   rN   r   r   r   2   s     Úplc                 s   ó   � | ]}|d  V  qdS ©rC   Nr   rD   r   r   r   Ú	<genexpr>3   ó   € zreport.<locals>.<genexpr>ÚdaywÚwpÚdaybÚbpÚbpwrK   Ú5Ú4c                 s   rQ   rR   r   rD   r   r   r   rS   6   rT   z+9.0fz>7ú/z<7z<9z>8z<8rC   r   ÚTOTALz5.0fz4.0fz>7.0fz<7.0fz>9.0fz<9.0fz>8.0fz<8.0fz>
Indicator medians at the pick:   winning picks | losing picksc                    s,   g | ]^}}}|r|  ˆ ¡d ur|ˆ  ‘qS r   r!   ©r   ÚokÚfÚ_©r#   r   r   r   >   rJ   c                    s,   g | ]^}}}|s|  ˆ ¡d ur|ˆ  ‘qS r   r!   r^   rb   r   r   r   ?   rJ   z   Ú22z10.3f)ÚjsonÚloadr    Úprintr   ÚfloatÚsortedr.   ÚitemsÚlenÚsumÚappendr9   r/   ÚstÚmedian)ÚpathÚresÚtotÚrowsÚtrÚwrU   rW   rV   rX   rY   Úvr3   ÚaÚbr   )r4   r#   rO   r   Úreport$   sn   F:2ÿTÿÿÿÿÿÿ$ÿ:ÿÿÿÿÿÿ,€rx   Ú__main__r)   )Ú__doc__rd   Ú
statisticsrm   ÚsysÚcollectionsr   re   r    r.   r/   r9   rx   Ú__name__ÚargvÚpr   r   r   r   Ú<module>   s     
ÿ!
þ