o
    Wi                     @   sT   d Z ddlZddlZddlmZmZ dejdejde	deee
ee	f  fdd	ZdS )
u   
Step 1: ZigZag 摆动点识别
输入：K线数据
输出：高点(H)和低点(L)交替序列

只用价格 (high/low)，不用任何技术指标。
阈值：日线15% / 4H 8%
    N)ListTuplehighslows	thresholdreturnc                 C   s  t | }|dk r
g S g }d}d}| d }d}|d }	td|D ]}
|dkrt| |
 |	d|  kr@||d|	f d}|
}| |
 }q||
 |d|  k r[||d|f d}|
}||
 }	q| |
 |krg|
}| |
 }||
 |	k rs|
}||
 }	q|dkr| |
 |kr|
}| |
 }q||
 |d|  k r||d|f d}|
}||
 }	q|dkr||
 |	k r|
}||
 }	q| |
 |	d|  kr||d|	f d}|
}| |
 }q|S )u  
    ZigZag摆动点识别

    Args:
        highs: K线最高价数组
        lows: K线最低价数组
        threshold: 摆动阈值（如0.15 = 15%）

    Returns:
        List of (bar_index, type, price)
        type: 'H' = 高点, 'L' = 低点
        H 和 L 交替出现
       r      LH)lenrangeappend)r   r   r   npoints	directionlast_high_idxlast_high_vallast_low_idxlast_low_vali r   /opt/langlang_ai/core/zigzag.pyzigzag   sb   



r   )__doc__numpynppandaspdtypingr   r   ndarrayfloatintstrr   r   r   r   r   <module>   s    	