o
    HiS                     @   s2   d dl Zd dlZd dlmZmZ G dd dZdS )    N)ListOptionalc                   @   s   e Zd Zeddee dedee fddZeddee dedee fddZe			
ddee dee dedede	e
 f
ddZeddejdede	e
 fddZeddejdede	e
 fddZdS )DivergenceDetector   datalookbackreturnc                 C   R   g }t |t| | D ]}| || || d  }| | t|kr&|| q|S )z"Find peak indices in a data series   )rangelenmaxappend)r   r   peaksiwindow r   @/var/www/html/Trade-python/app/v1/services/zerodha/divergence.py
find_peaks      
zDivergenceDetector.find_peaksc                 C   r	   )z$Find trough indices in a data seriesr
   )r   r   minr   )r   r   troughsr   r   r   r   r   find_troughs   r   zDivergenceDetector.find_troughs      price	indicator
min_lengthc                 C   s`  t | |d k st ||d k rdS t| |}t| |}t||}t||}t ||krlt ||krl|d |d }}	|d |d }
}| |	 | | krZ|| ||
 k rZdS | |	 | | k rl|| ||
 k rldS t ||krt ||kr|d |d }}|d |d }}| | | | k r|| || krdS | | | | kr|| || krdS dS )zf
        Detect regular and hidden divergences
        Returns: 'bullish', 'bearish', or None
        r   Nbearishbullish)r   r   r   r   )r   r   r   r   price_peaksprice_troughs	ind_peaksind_troughsp_peak1p_peak2i_peak1i_peak2	p_trough1	p_trough2	i_trough1	i_trough2r   r   r   detect_divergence   s2    z$DivergenceDetector.detect_divergencedfc                 C   8   d| j vs
d| j vrd S tj| d  | d  |dS )Nrsicloser   r   r   columnsr   r.   tolistr/   r   r   r   r   detect_rsi_divergenceP      

z(DivergenceDetector.detect_rsi_divergencec                 C   r0   )Nmacdr2   r3   r4   r7   r   r   r   detect_macd_divergenceZ   r9   z)DivergenceDetector.detect_macd_divergenceN)r   )r   r   )r   )__name__
__module____qualname__staticmethodr   floatintr   r   r   strr.   pd	DataFramer8   r;   r   r   r   r   r      s.    "	"	5 	$r   )numpynppandasrC   typingr   r   r   r   r   r   r   <module>   s    