o
    V×íi	  ã                   @   s‚   d Z ddlZddlZddlmZ ddlmZ ddl	m	Z	 ddl
mZ dd	lmZ eG d
d„ dƒƒZdedejdee fdd„ZdS )u<  
Step 7: cæµªåšç©ºä¿¡å·

4Hçº§åˆ«è¯†åˆ«ä¸‹é™è¶‹åŠ¿ï¼š
æ¡ä»¶ï¼šH1 â†’ L â†’ H2(æ›´ä½Ž) â†’ è·Œç ´L
å…¥åœºï¼šè·Œç ´Lçš„é˜´çº¿ï¼ˆæ”¶ç›˜<L ä¸” é˜´çº¿ ä¸” æ”¾é‡>1.2xï¼‰
ç¡®è®¤ï¼šåŽç»­2æ ¹ä¸æ”¶å›žLä¸Šæ–¹
æ­¢æŸï¼šå…¥åœºKçº¿é«˜ç‚¹ + 0.5%
åªå¯¹BTCå’ŒETHåšç©º
åšç©ºåœ¨4Hçº§åˆ«ç›´æŽ¥å…¥åœºï¼ˆä¸åš1Hç²¾å‡†å…¥åœºï¼‰
é    N)Ú	dataclass)ÚListé   )Úzigzag)ÚSignalé   )Úsettingsc                   @   sb   e Zd ZU dZeed< eed< eed< eed< eed< eed< eed< eed	< eed
< eed< dS )Ú
ShortSetupu2   åšç©ºç»“æž„ï¼šH1 â†’ L â†’ H2(æ›´ä½Ž) â†’ è·Œç ´LÚh1_idxÚh1_priceÚl_idxÚl_priceÚh2_idxÚh2_priceÚ	break_idxÚbreak_priceÚ
entry_highÚvolume_ratioN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__Úfloat© r   r   ú/opt/langlang_ai/core/shorts.pyr	      s   
 r	   ÚcoinÚdf_4hÚreturnc           !      C   s  |d j }|d j }|d j }|d j }|d j }|d }t|ƒ}t||tjƒ}	g }
tt|	ƒd ƒD ]Ù}|	| \}}}|	|d  \}}}|	|d  \}}}|d	ksY|d
ksY|d	krZq2||kr_q2|}t|d t|d |ƒƒD ]}|| |krvqm|| || krqmtd|d ƒ}||kr“t 	|||… ¡n|| }|dkrœqm|| | }|dk r§qmt|d |ƒ}d}t|d |ƒD ]}|| |krÃd} nq·|r
|| d dkr
|| }|| }|dtj
  }|| | } | tjkrëqm|
 t| dd|j| ||| |||| | || |dd¡  nqmq2|
S )uY   
    åœ¨4Hçº§åˆ«å¯»æ‰¾åšç©ºä¿¡å·

    ç»“æž„ï¼šH1 â†’ L â†’ H2(æ›´ä½Ž) â†’ è·Œç ´L
    ÚhighÚlowÚopenÚcloseÚvolumeÚ	timestampr   r   ÚHÚLé<   r   é   g333333ó?é   TFÚshortu   åšç©ºu   4Hç›´æŽ¥)r   Ú	directionÚsignal_typeÚ
entry_timeÚentry_priceÚ	stop_lossÚsl_distanceÚbox_highÚbox_lowÚbox_width_pctÚbox_duration_barsr   Úentry_method)ÚvaluesÚlenr   ÚSÚZIGZAG_THRESHOLD_4HÚrangeÚminÚmaxÚnpÚmeanÚSL_SHORT_OFFSETÚSL_MAX_DISTANCEÚappendr   Úiloc)!r   r   ÚhighsÚlowsÚopensÚclosesÚvolumesÚ
timestampsÚnÚpointsÚsignalsÚiÚidx1Útype1Úprice1Úidx2Útype2Úprice2Úidx3Útype3Úprice3Úsupport_levelÚjÚ	vol_startÚavg_volÚ	vol_ratioÚconfirm_endÚ	confirmedÚkr/   r   r0   r1   r   r   r   Úfind_short_signals&   s|   
	



"þ

ó€r_   )r   Únumpyr>   ÚpandasÚpdÚdataclassesr   Útypingr   r   Úpipeliner   Úconfigr   r9   r	   ÚstrÚ	DataFramer_   r   r   r   r   Ú<module>   s"    ÿþý