o
    ‰Œúh-  ã                   @   s@  d Z ddlZddlZddlmZ G dd„ dƒZG dd„ dƒZe	dkržddl
Z
e
je
jd	� dd
lmZ eƒ Zejdddd�Zedd�Ze de¡Zer˜edƒ eded › �ƒ eded › d�ƒ eded d›�ƒ eded d›�ƒ eded d›�ƒ edd ed  ¡› �ƒ ed!ed" d#›�ƒ dS ed$ƒ dS dS )%u/  
STRATÃ‰GIE V10 RANGE ADAPTED
Adaptation de la stratÃ©gie inverse_strategy_v10 pour le backtest_adaptive

Logique:
1. DÃ©tecte les conditions RANGE (ATR < 0.3%, touches S/R)
2. Trade les rebonds sur support/rÃ©sistance
3. RSI extrÃªmes pour confirmer Ã©puisement
4. Bollinger Bands pour zones d'entrÃ©e
é    N)ÚOptionalc                   @   s<   e Zd ZdZeddd„ƒZeddejdede	fd	d
„ƒZ
dS )ÚV10RangeDetectoru%   DÃ©tecteur RANGE de la stratÃ©gie V10é   c           	      C   sX   | | }t | | ¡  ƒ}t || ¡  ƒ}tj|||gdd�jdd�}|j|d� ¡ }|S )zCalcule ATRé   )Úaxis©Úwindow)ÚabsÚshiftÚpdÚconcatÚmaxÚrollingÚmean)	ÚhighÚlowÚcloseÚperiodÚtr1Útr2Útr3ÚtrÚatr© r   úN/var/www/html/HyperOracle/crypto_trader/apollo_degen_bot/v10_range_strategy.pyÚcalculate_atr   s   zV10RangeDetector.calculate_atréd   ÚdfÚlookbackÚreturnc                    sú   t | ƒ|k rdS | j| d… }|d j}tj|d |d |d dd�}|jdd…  ¡ }|d	 }|| d
 }d}||kr?dS | ¡ }	| ¡ }
|	|
 }|	|d  ‰|
|d  ‰ t‡fdd„|dd… D ƒƒ}t‡ fdd„|dd… D ƒƒ}|dko||dkS )u“   
        DÃ©tecte si marchÃ© en RANGE

        CritÃ¨res:
        - ATR < 0.3% du prix
        - Touches rÃ©pÃ©tÃ©es de S/R (2+ de chaque)
        FNr   r   r   r   ©r   éìÿÿÿéÿÿÿÿr   ç333333Ó?çš™™™™™©?c                 3   ó   � | ]	}|ˆ krd V  qdS ©r   Nr   ©Ú.0Úc©Útop_zoner   r   Ú	<genexpr>D   ó   € z3V10RangeDetector.is_range_market.<locals>.<genexpr>éÎÿÿÿc                 3   ó   � | ]	}|ˆ krd V  qdS r&   r   r'   ©Úbottom_zoner   r   r,   E   r-   é   )	ÚlenÚilocÚvaluesr   r   r   r   ÚminÚsum)r   r   r   Úclosesr   Úavg_atrÚpriceÚatr_pctÚ	thresholdÚperiod_highÚ
period_lowÚ
range_sizeÚtouches_topÚtouches_bottomr   ©r1   r+   r   Úis_range_market   s*   	
ÿz V10RangeDetector.is_range_marketN©r   )r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr   r   Ú	DataFrameÚintÚboolrC   r   r   r   r   r      s    	 r   c                   @   s†   e Zd ZdZddefdd„Zdejdefdd	„Z	ddej
dedej
fdd„Zddej
dedefdd„Zdedejdee fdd„ZdS )ÚV10RangeStrategyuª   
    StratÃ©gie V10 RANGE adaptÃ©e

    Trade les rebonds sur support/rÃ©sistance en conditions de range
    Utilise RSI + Bollinger Bands pour confirmer Ã©puisement
    é–   Úleveragec                 C   s(   || _ dddddddddd	d
dœ| _d S )Nr   é   éF   é   ç       @éK   g      ð?g      @r   r#   )Ú
atr_periodÚ
rsi_periodÚrsi_oversoldÚrsi_overboughtÚ	bb_periodÚbb_stdÚmin_confidenceÚsl_atr_multiplierÚtp_atr_multiplierÚlookback_rangeÚrange_atr_threshold)rO   Úparams)ÚselfrO   r   r   r   Ú__init__S   s   õzV10RangeStrategy.__init__r   r   c                    s  | j d }t|ƒ|k rdS |j| d… }|d j}tj|d |d |d dd�}|jd	d…  ¡ }|d
 }|| d }|| j d krEdS | ¡ }	| ¡ }
|	|
 }|	|d  ‰|
|d  ‰ t	‡fdd„|dd… D ƒƒ}t	‡ fdd„|dd… D ƒƒ}|dko‚|dkS )u?   Version flexible de la dÃ©tection range avec seuil configurabler^   FNr   r   r   r   r    r!   r"   r   r_   r$   c                 3   r%   r&   r   r'   r*   r   r   r,   €   r-   z=V10RangeStrategy._is_range_market_flexible.<locals>.<genexpr>r.   c                 3   r/   r&   r   r'   r0   r   r   r,   �   r-   r2   )
r`   r3   r4   r5   r   r   r   r   r6   r7   )ra   r   r   r   r8   r   r9   r:   r;   r=   r>   r?   r@   rA   r   rB   r   Ú_is_range_market_flexiblec   s*   

ÿz*V10RangeStrategy._is_range_market_flexibler   Úpricesr   c                 C   s^   |  ¡ }| |dkd¡j|d� ¡ }| |dk d¡ j|d� ¡ }|| }ddd|   }|S )zCalcule RSIr   r   r   r   )ÚdiffÚwherer   r   )ra   rd   r   ÚdeltaÚgainÚlossÚrsÚrsir   r   r   Úcalculate_rsi†   s   zV10RangeStrategy.calculate_rsirR   rS   Ústdc                 C   sB   |j |d� ¡ }|j |d� ¡ }|||  }|||  }|||fS )zCalcule Bollinger Bandsr   )r   r   rm   )ra   rd   r   rm   ÚsmaÚrolling_stdÚupperÚlowerr   r   r   Úcalculate_bollinger_bands�   s
   
z*V10RangeStrategy.calculate_bollinger_bandsÚsymbolc                  C   s^  t |ƒdk rdS |  |¡}|sdS |d }|  || jd ¡}|  || jd | jd ¡\}}}t |d |d |d | jd	 ¡}	|jd
 }
|jd
 }|jd
 }|jd
 }|	jd
 }| jd }|j| d…  ¡ }|j| d…  	¡ }|| }||d  }||d  }d}d}|
|krôg }|| jd kr›| 
d¡ |d7 }|
|kr¨| 
d¡ |d7 }t|
| ƒ| }|dk r½| 
d¡ |d7 }d|jv rã|d jdd
…  ¡ }|d jd
 }||d krã| 
d¡ |d7 }|| jd kródt	|dƒ|dœ}nu|
|k�rig }|| jd k�r| 
d¡ |d7 }|
|k�r| 
d ¡ |d7 }t|
| ƒ| }|dk �r0| 
d!¡ |d7 }d|jv �rX|d jdd
…  ¡ }|d jd
 }||d k�rX| 
d¡ |d7 }|| jd k�rid"t	|dƒ|dœ}|�sndS || jd#  }|| jd$  }|d% dk�rŒ|
| }|
| }n|
| }|
| }||d% |
|||d& |d& d'd'|d( ||d)| jd*d+œS ),ug   
        Analyse et gÃ©nÃ¨re un signal RANGE

        Returns:
            Signal dict ou None
        r   Nr   rV   rY   rZ   r   r   rU   r"   r^   r$   r   rW   ÚRSI_OVERSOLDé#   ÚBB_LOWER_TOUCHrP   g{®Gázt?ÚNEAR_SUPPORTrR   Úvolumer!   g      ø?ÚVOLUME_SPIKEé   r[   ÚLONG)ÚsideÚ
confidenceÚconfluencesrX   ÚRSI_OVERBOUGHTÚBB_UPPER_TOUCHÚNEAR_RESISTANCEÚSHORTr\   r]   r|   r}   ÚV10_RANGE_REVERSALr~   Tg{®Gáz”?)rs   r|   Úentry_priceÚ	stop_lossÚtake_profitr}   ÚscoreÚstrategy_usedÚstrategyr~   r   rk   rC   rO   Úrisk_pct)r3   rc   rl   r`   rr   r   r   r4   r   r6   Úappendr	   Úcolumnsr   rO   ) ra   rs   r   Úis_ranger8   rk   Úbb_upperÚ	bb_middleÚbb_lowerr   Úcurrent_priceÚcurrent_rsiÚcurrent_bb_upperÚcurrent_bb_lowerÚcurrent_atrr   r=   r>   r?   Úresistance_zoneÚsupport_zoneÚsignalr}   r~   Údist_to_supportÚavg_volÚcurrent_volÚdist_to_resistanceÚsl_distanceÚtp_distancer…   r†   r   r   r   Úanalyze—   sÄ   

ÿÿ










ý€






ý
ñzV10RangeStrategy.analyzeN)rN   rD   )rR   rS   )rE   rF   rG   rH   rK   rb   r   rJ   rL   rc   ÚSeriesrl   Úfloatrr   Ústrr   ÚdictrŸ   r   r   r   r   rM   K   s    #	 rM   Ú__main__)Úlevel)ÚApolloDegenClientÚBTCUSDTÚ5miô  )ÚlimitrN   )rO   u   
âœ… SIGNAL V10 RANGE:z	   Side: r|   z   Confidence: r}   ú%z   Entry: $r„   z,.2fz   SL: $r…   z   TP: $r†   z   Confluences: z, r~   z   RSI: rk   z.1fu>   
â�Œ Pas de signal (marchÃ© pas en range ou pas d'Ã©puisement))rH   Úpandasr   ÚnumpyÚnpÚtypingr   r   rM   rE   ÚloggingÚbasicConfigÚINFOÚapollo_clientr¦   ÚclientÚ
get_klinesr   r‰   rŸ   r˜   ÚprintÚjoinr   r   r   r   Ú<module>   s4   9 j
é