o
    icc                     @   s   d Z d:ddZd:ddZdd Zd;d
dZd<ddZdd Zd=ddZd>ddZd?ddZ	dd Z
d@ddZdAd d!ZdAd"d#ZdBd$d%ZdBd&d'ZdCd)d*ZdDd+d,Zd-d. ZdEd/d0Zd1d2 ZdFd4d5ZdGd8d9Zd7S )Huk   
股票技术指标接口
Created on 2018/05/26
@author: Jackie Liao
@group : **
@contact: info@liaocy.net

   closec                 C   ^   dd l }	 g }g }|  D ]\}}|||  t||kr!|d= ||| q||S N    numpyiterrowsappendlenaverageasarray)datanval_namenpvaluesMAindexrow r   I/opt/alphahud/venv/lib/python3.10/site-packages/tushare/stock/indictor.pyma      
r   c                 C   r   r   )r   r   r	   r
   stdr   )r   r   r   r   r   MDr   r   r   r   r   md-   r   r   c                 C   s>   dd|d   }d}t t| D ]\}}||| | 7 }q|S )N      r   )	enumeratereversed)pricesr   aday_emar   pricer   r   r   _get_day_emaN   s
   r$      c           
      C   s|   dd l }	 g }g }|  D ]+\}}|dkr!|| }|||  qd||  |d |  |d  }	|	}||	 q||S )Nr   r   r   r   r   r	   r   )
r   r   r   r   r    EMAr   r   past_ema	today_emar   r   r   emaX   s    
r*      	   c                 C   s\   dd l }	 |t| ||}|t| ||}|| }|| d< t| |d}	||	 }
|
||	fS )Nr   diff)r   r   r*   )r   quick_nslow_ndem_nr   r   	ema_quickema_slowDIFFDEMOSCr   r   r   macd}   s   
r6   c                 C   s   dd l }	 g g g }}}d\}}|  D ]T\}}|d u s!|d u r%d}d}|d |d |d }	}
}|	|
 ||
  d }d| d	|  }d| d	|  }d
| d|  }|| || || ||}}q||||||fS )Nr   )NN2   r   lowhighd   gUUUUUU?gUUUUUU?   r   r&   )r   r   KDJlast_klast_dr   r   clhrsvkdjr   r   r   kdj   s$   


rH      c                 C   s   dd l }	 g }g }g }|  D ]^\}}|dkr!|| }	|d q|| |	 }
|
dkr6||
 |d n
|d ||
 t||krI|d= t||krR|d= || }	|||| ||  d }|| q||S )Nr   r:   r   r   r	   r
   sumr   )r   r   r   r   RSIUPDOWNr   r   
past_valuer-   rsir   r   r   rP      s.   


$
rP   r   c                 C   s:   t | ||}t| ||}|||  }|||  }|||fS )u  
        布林线指标BOLL
        Parameters
        ------
          data:pandas.DataFrame
                      通过 get_h_data 取得的股票数据
          n:int
                统计时长，时间单位根据data决定
        return
        -------
          BOLL:numpy.ndarray<numpy.float64>
              中轨线
          UPPER:numpy.ndarray<numpy.float64>
              D线
          J:numpy.ndarray<numpy.float64>
              J线
    )r   r   )r   r   r   rE   BOLLr   UPPERLOWERr   r   r   boll   s
   
rT      c           
      C   s   g }g }g }|   D ]=\}}||d  t||kr|d= ||d  t||kr.|d= t|}t|}||d  ||  d }	||	 q
|S )uO  
        威廉指标 w&r
        Parameters
        ------
          data:pandas.DataFrame
                      通过 get_h_data 取得的股票数据
          n:int
                统计时长，时间单位根据data决定
        return
        -------
          WNR:numpy.ndarray<numpy.float64>
              威廉指标
    r9   r   r8   r   r:   )r   r	   r
   maxmin)
r   r   high_prices
low_pricesWNRr   r   highestlowestwnrr   r   r   r]     s   r]   c                 C   sP   dd l }g }g }| D ]}|| t||kr|d= ||| q
||S r   )r   r	   r
   r   r   )arrr   r   r   r   valr   r   r   _get_any_ma<  s   

r`   c                 C   s  dd l }	 dg}dg}dg}dg}dg}	dg}
|  D ]\}}|dkr&|}q|d |d  }|d |d  }|dk r>|dk sD|||rHd}d}||krNd}||krTd}|| || t|d |d  |d |d  |d |d  }|| t||kr|d= t||kr|d= t||kr|d= |||| d }|	| |||| d }|
| || dkrd}nt|| ||  d }|| |}qt||}g }t	|D ]\}}||kr||||   d }|| q|d q|	|
||fS )Nr           r9   r8   r   r:   r   )
r   r   iscloser	   rV   r
   r   absr`   r   )r   r   mrE   r   P_DMM_DMTRDXP_DIM_DIr   r   past_rowp_dmm_dmtrp_dim_didxADXADXRadxadxrr   r   r   dmiH  s^   

0




rv      c                 C   s4   dd l }	 t| |}| d }||| |d }|S )Nr   r   g      ?)r   r   true_divide)r   r   r   r   CLOSESBIASr   r   r   bias  s   
r{   c                 C   sh  dd l }	 g }|  D ]\}}|dkr|}|d qt|d |d  }t|d |d  }t|d |d  }	t|d |d  }
||krV||	krV|d|  d|
  }n|	|kre|	|kre|	d|
  }nd}|d |d  }|d |d  }|d |d  }|d|  | }t||}d	}||ds||drd}n
d
||  ||  }|| qt||}|S )Nr   ra   r   r8   r9   open      ?g      ?r;   r7   )r   r   r	   rc   rV   rb   r`   )r   r   r   SIr   r   last_rowr!   brA   rF   refgxrE   rB   siASIr   r   r   asi  s8   

r   c                 C   s  dd l }	 g }g g g }}}|  D ]n\}}|d |d kr'||d  n|d |d k r7||d  n||d  t||krG|d= t||krP|d= t||krY|d= t|}	t|}
t|}|
d|  dkrz|	d|  |
d|   }nd}|| q||S )Nr   r   r|   volumer}   rJ   )r   r   r   VR
AV_volumes
BV_volumes
CV_volumesr   r   avsbvscvsvrr   r   r   r     s0   
r   c                 C   s  dd l }	 |dg|dg|dg|dgf\}}}}|dg|dg}}|  D ]\}	}
|	dkr;|
}q0|
d }|||g}t||krR||d}|
d }|||g}t||kri||d}|
d }|||g}t||kr||d}|d }|||g}t||kr||d}||||| t||||  d }|||g}||||| t||||  d }|||g}|
}q0||||fS )Nr   r9   r8   r|   r   r:   )r   arrayr   r	   r
   deleterK   r   )r   r   r   HLOPCARBRr   r   r   rC   rB   opcarbrr   r   r   arbr6  s:   466r      c                 C   s4   | d }|t | t|d d  }t||}||fS )u  
        区间震荡线指标 DPO
        Parameters
        ------
          data:pandas.DataFrame
                      通过 get_h_data 取得的股票数据
          n:int
              统计时长，默认20
          m:int
              MADPO的参数M，默认6
        return
        -------
          DPO:numpy.ndarray<numpy.float64>
              DPO指标
          MADPO:numpy.ndarray<numpy.float64>
              MADPO指标

    r   r   r   )r   intr`   )r   r   rd   ry   DPOMADPOr   r   r   dpoo  s   
r   c                 C   s   dd l }	 g }g }|  D ]2\}}||d  t||kr!|d= ||}|dkr2|}	|d q||	 |	 d }
||
 qt||}||fS )Nr   r   r:   )r   r   r	   r
   r   r`   )r   r   rd   r   ry   TRIXr   r   rn   past_trtrixTRMAr   r   r   r     s    

r   c                 C   s   dd l }	 g }g }|  D ]C\}}||d  t|dk r&||d  q|||dd  ||dd  ||dd  ||dd  g}|| q||S )Nr   r      iiir   )r   r   CSBBIr   r   bbir   r   r   r     s   J
r   c                 C   sr   dd l }	 g }g }|  D ]&\}}||d k r|d n|d |||   }|| ||d  q||S )Nr   r   ra   r   r&   )r   r   r   MTMCNr   r   mtmr   r   r   r     s   

r   c                 C   sN   dd l }	 || d | d  | d | d   | d | d  }|| d  }|S )Nr   r   r8   r9   r   )r   rx   )r   r   tmpOBVr   r   r   obv  s
   4r      c                 C   s   t d)NzNot implemented yet)	Exception)r   r   r   r   r   sar  s   r   TNc           '      C   s  dd l m} ddlm} dd l}d|d< |  |ddd |j| d | d dd	 |d |	d
 |
  |jdd |ddd t| dd}|j| d |dd	 |j| d | d dd	 |d |d |	d
 |
  |jdd d}|ddd t| |}|j| d |dd	 |d |d |	d
 |
  |jdd |ddd t| |}	|j| d |	dd	 |d |d |	d
 |
  |jdd |ddd t| |\}
}}|j| d |
dd	 |j| d |dd	 |j| d |dd	 |d |d |	d
 |
  |jdd |ddd t| \}}}|j| d |dd	 |j| d |d d	 |j| d |d!d	 |d" |d |	d
 |
  |jdd |ddd# t| d}t| d$}t| d%}|j| d |d&d	 |j| d |d'd	 |j| d |d(d	 |d) |d |	d
 |
  |jdd |ddd* t| \}}}|j| d |d+d	 |j| d |d,d	 |j| d |d-d	 |j| d | d dd	 |d. |d |	d
 |
  |jdd |ddd/ t| d0d}|j| d |d1d	 |d2 |d |	d
 |
  |jdd |ddd t| \}}}}|j| d |d3d	 |j| d |d4d	 |j| d |d5d	 |j| d |d6d	 |d7 |d |	d
 |
  |jdd |ddd8 t| dd}|j| d |d9d	 |d: |d |	d
 |
  |jdd |ddd$ t| dd}|j| d |d;d	 |d< |d |	d
 |
  |jdd |ddd= t| d>d}|j| d |d?d	 |d@ |d |	d
 |
  |jdd |ddd0 t| d>d\}}|j| d |dAd	 |j| d |dBd	 |dC |d |	d
 |
  |jdd |dddD t| dddE\} }!|j| d | dFd	 |j| d |!dGd	 |dH |d |	d
 |
  |jdd |dddI t| d$ddE\}"}#|j| d |"dJd	 |j| d |#dKd	 |dL |d |	d
 |
  |jdd |dddM t| }$|j| d |$dNd	 |dO |d |	d
 |
  |jdd |dddP t| dd}%|j| d |%dQd	 |dR |d |	d
 |
  |jdd |dddS t| }&|j| d |&dTd	 |dT |d |	d
 |
  |jdd |  |ra|   |d urm|!| d S d S )UNr   )rcParams)   r7   zfigure.figsizer   r   dater   )labelvalueZ   )rotationr   r   )r   zMA(n=10)zCLOSE PRICEr   r;   zMD(n=10)r   r   z	EMA(n=12)r'   rw   r5   r3   r4   MACDrI   r<   r=   r>   KDJ   r%   r   zRSI(n=6)z	RSI(n=12)z	RSI(n=24)rL      z
BOLL(n=10)zUPPER(n=10)zLOWER(n=10)rQ   r,   rU   z	WNR(n=14)rZ   z	+DI(n=14)z	-DI(n=14)z	ADX(m=14)z	ADXR(k=6)DMI   z	BIAS(n=5)rz   zASI(n=5)r      r+   zVR(n=26)r   zAR(n=26)zBR(n=26)ARBR   )r   rd   z	DPO(n=20)z
MADPO(m=6)r      z	DPO(n=12)zMADPO(m=20)r      zBBI(3,6,12,24)r   r   zMTM(n=6)r      r   )"matplotlib.pyplotpyplotpylabr   r   figuresubplotplotxlabelylabellegendxticksr   titler   r*   r6   rH   rP   rT   r]   rv   r{   r   r   r   r   r   r   r   r   tight_layoutshowsavefig)'r   is_showoutputpltr   r   r   r   r   r'   r5   r3   r4   r<   r=   r>   RSI6RSI12RSI24rQ   rR   rS   rZ   ri   rj   rr   rs   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   plot_all  sh  





























































r   )r   r   )r%   r   )r%   r+   r,   r   )rI   r   )r   r   r   )rU   )rU   rU   rI   )rw   )r+   )r   rI   )r%   r   )rI   )r   )TN)__doc__r   r   r$   r*   r6   rH   rP   rT   r]   r`   rv   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s.   
	
!!


%$
*
/
$

o

7
1
9
.

