o
    UjB  ã                   @  s~   d Z ddlmZ ddlZddlZddlmZ ddl	m
Z
mZmZmZmZmZ dddd„Zdddd„Zdddd„Zddd„ZdS )a�  Jim Simons / Renaissance-style quantitative scoring.

Simons ignored fundamentals entirely and traded statistical patterns in
price and volume. This scorer is deliberately fundamentals-free: it blends
a mean-reversion signal (z-score of price vs its moving average, plus RSI),
a cross-sectional momentum signal (12-month minus 1-month return), and a
volatility-adjusted return (a Sharpe-like ratio).
é    )ÚannotationsNé   )Ú	StockData)ÚSignalÚStrategyResultÚcombineÚhigher_betterÚlower_betterÚverdict_fromé   Úcloseú	pd.SeriesÚwindowÚintc                 C  sv   t | ƒ|d k r
d S |  |¡ ¡ }|  |¡ ¡ }|jd |jd }}|r.t |¡s.|dkr0d S t| jd | | ƒS )Né   éÿÿÿÿr   )ÚlenÚrollingÚmeanÚstdÚilocÚnpÚisnanÚfloat)r   r   ÚmaZsd_Zlast_maZlast_sd© r   úVC:\Users\cheed\OneDrive\Desktop\Claude work\finance-tool\screener\strategies\simons.pyÚ_zscore_vs_ma   s   r   é   c                 C  sš   t | ƒ|d k r
d S |  ¡ }|jdd� |¡ ¡ }|jdd�  |¡ ¡ }|jd |jd }}|d u s=t |¡s=|dkr?dS || }tddd|   ƒS )Nr   r   )Úlower)Úupperr   g      Y@éd   )	r   ÚdiffÚclipr   r   r   r   r   r   )r   r   ÚdeltaZgainZlossZ	last_gainZ	last_lossÚrsr   r   r   Ú_rsi   s   r&   é~   c                 C  sZ   t | ƒ|d k r
d S |  ¡  ¡ j| d … }| ¡ dkrd S tt d¡| ¡  | ¡  ƒS )Nr   r   éü   )	r   Ú
pct_changeÚdropnar   r   r   r   Úsqrtr   )r   r   Zretsr   r   r   Ú_sharpe+   s   r,   Úsdr   Úreturnr   c              
   C  s  | j jrtdd ddƒg}tdd|dƒS | j d  ¡ }t|dƒ}t|dƒ}d }|  d	¡}|  d
¡}|d ur<|d ur<|| }t|dƒ}|d urKt	|ddƒnd}	|d urWt	|ddƒnd}
td||	ddƒtd||
ddƒtd|t
|ddƒdƒtd|t
|ddƒddƒg}t|ƒ}td||t|ƒƒS )NZno_price_datag        g      ð?ÚSimonszNo dataÚCloser   r   r(   é   r'   g      Àg      à?é   éF   Z	MeanRev_ZgìQ¸…ëÑ?z%z-score vs 20d MA (oversold favoured)ZRSIg
×£p=
Ç?zoversold favouredZMomentum_12_1gš™™™™™É¿gš™™™™™Ù?g333333Ó?Z	Sharpe_6Mg      à¿g       @g¸…ëQ¸Î?zvolatility-adjusted trend)ÚhistoryÚemptyr   r   r*   r   r&   Úreturnsr,   r	   r   r   r
   )r-   Úsignalsr   ÚzZrsiZmomZr12Zr1ZsharpeZmr_zZmr_rsiÚscorer   r   r   Úevaluate4   s.   




ÿür:   )r   )r   r   r   r   )r   )r'   )r-   r   r.   r   )Ú__doc__Ú
__future__r   Únumpyr   ÚpandasÚpdÚdatar   Úscoringr   r   r   r   r	   r
   r   r&   r,   r:   r   r   r   r   Ú<module>   s     	