
    0j                     P    d Z ddlZddlZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )u?   三重奏 BTS — Python信号计算 (与TDX公式逐位一致)    Nc                     t          j        | t           j                  }| d         |d<   d|dz   z  }t          dt	          |                     D ]"}| |         |z  ||dz
           d|z
  z  z   ||<   #|S )Ndtyper   g       @   np
empty_likefloat64rangelen)XNoutmis        0/root/web_reports/strategy_export/bts_signals.py_emar      sw    
-
,
,
,Cqtc!facQ1c!ff??!QQqS1Q3(?s1vvJ    c                     t          j        | t           j                  }| d         |d<   t          dt	          |                     D ]%}| |         |z  ||dz
           ||z
  z  z   |z  ||<   &|S )Nr   r   r   r   )r   r   Mr   r   s        r   _smar      sp    
-
,
,
,Cqtc!f1c!ffCC1a#ac(AaC.)@!(Cs1vvJr   c                     t          j        |                               |d                                          j        S Nr   min_periods)pdSeriesrollingminvaluesr   r   s     r   _rminr"      1    	!,,QA,>>BBDDKKr   c                     t          j        |                               |d                                          j        S r   )r   r   r   maxr    r!   s     r   _rmaxr&      r#   r   c                     t          j        t          |           t                    }| dd          |dd          k    | d d         |d d         k     z  |dd <   |S Nr   r   r   zerosr   boolABr   s      r   	_cross_upr0      [    
(3q66
&
&
&C1QRR5!ABB%<AcrcF1SbS6M2RABB[^T^r   c                     t          j        t          |           t                    }| dd          |dd          k    | d d         |d d         k    z  |dd <   |S r(   r*   r-   s      r   	_cross_dnr3      r1   r   c                     t          j        t          |           d          }d}t          t          |                     D ]}| |         r|}|dk    r||z
  ||<   |S )Ng    ~.Ar)   r   )r   fullr   r   )xr   lastr   s       r   	_barslastr8      sa    
'#a&&(
#
#CBT3q66]] ( (Q4199q4xc!fJr   c                 t    |                                  }|dk    r| d |          ||d <   | d         |d |<   |S )Nr   )copy)r   kr   s      r   _refr<   !   sC    
&&((C1uu#A2#c!""g!A$BQBJr   c           
         t          |           }d}d}d}||z   }||z
  }	d}
d}t          j        | |          }t          j        |dk    ||z
  |z  dz  d          }t          j        |          }t          j        |dk    | t          | d          z
  t          | d          z  dz  d          }t          j        |dk    |t          | d          z
  t          | d          z  dz  d          }t          j        |dk    | |z
  |z  dz  d          }t          j        | |          }t          j        |dk    ||z
  |z  dz  d          }||z   }||z   }||z   }t          j        t          j        t          j        t          j        ||          |          t          j        ||                    t          j        |t          j        ||                              d	z  }t          j        |          }t          j        |d
k     ||dz   z  t          j	        |          
                    d
d                                          j                  }t          j        |d
k     ||dz   z  t          j	        |          
                    d
d                                          j                  }||k    }||	k     }t          |          }t          |          }||k    }| } ||k     }!|! }"||
k    }#t          j        |#||!          }$t          j        |#| |"          }%t          j        |d          }&|d         |&d<   t!          t          j        ||&z
            dd          }'t!          t          j        ||&z
  d          dd          }(t          j        |(dk    |'|(z  dz  d          })t          |)dz  d          }*t          j        |$t%          |d          t%          |d                    }+t          j        |$t'          |*d          t'          |*d                    },t          j        ||+k    |*|,dz  z   dz  d          }-t          j        t          |-d          dz  d          }.d| z  |z   |z   dz  }/t%          |d          }0t'          |d          }1|1|0z
  }2t          j        |2dk    |/|0z
  t          j        |2dk    d|2          z  dz  d          }3t          |3d          }4t          j        |2dk    |4d          }5t%          |d          }6t'          |d          }7|7|6z
  }8t          j        |8dk    |/|6z
  t          j        |8dk    d|8          z  dz  d          }9t          |9d          }:t          j        |8dk    |:d          };t          j        |$|5|;          }<t          dt          |<d          z  d|<z  z   d          }=t%          |d
          }>t'          |d
          }?t          j        |?|>k    | |>z
  |?|>z
  z  d          }@|@t          j        |$dd          k    }A|.dk    t          |.d          dk    z  t          |.d          dk    z  }Bt)          |<|=          }Ct          j        |$dd          }D||Dk    }E|B|Cz  |Ez  }Ft'          |d          }Gt'          |d          }Ht'          |<d          }It'          |<d          }Jt          j        |$||Gk    t          |d          t          |Gd          k     z  ||Hk    t          |d          t          |d          k     z            }Kt          j        |$|<t          |Id          k     |<t          |Jd          k               }L|K|Lz  |<dk    z  }M|A|Mz  |<t          j        |$d d!          k    t          |<d          |<k    z  z  }Nt+          |<|=          |<t          j        |$d"d          k    z  }Ot-          |F|N|O|<|=|$|#          S )$uA   三重奏信号: 返回 dict(buy, tp_warn, sell, C7, C9, low_vol)g      @g      ?g        x   g      @r   d   r   g333333?   r   F   gư>
            g     P@      "   2         gMbX?gZd;O?g-?gMbP?g      @A   K   N   7   )buytp_warnsellC7C9low_volC2)r   r   minimumwherearanger<   maximumcumsumr   r   r   meanr    r   r8   rollr   absr"   r&   r0   r3   dict)PCHLOnGATEHHUPHHDNUP_TDN_TSBOFFB1B2arB3B4B5B6B7B8B9C1rV   csavg_rawAVGVOLUPDNBUBDst_lowst_highnost_low	nost_highenoughrU   high_volpLA2A3A4A5A6A7A8
xihuo_lineC5RLLRHLRGLRSVLC7L0C7LRL2RH2RG2RSVHC7H0C7HrS   rT   D1D2D3	golden_tp
xih_active
trend_turnVTvol_passrP   H13H11C13C11pnhinhtop_divrQ   rR   sP                                                                                   r   compute_btsr   &   s   AA	D3dS	dDdDsBC 
z!AB28BqD"Q$#a88	y||B	x1aQq		k4!99,S033B	x1aQq		k4!99,S033B	x!QqS!GCK""Brz!AB	x1adBYs]1%%B	"uBBb2b5	z"*RZ
2b(9(9"==bjB>O>OPP*R
2b 1 1224 4478B 
y}}BHRUB1Iry}}'<'<RA'<'N'N'S'S'U'U'\]]G8BrE2r!t9	"@U@UVXef@U@g@g@l@l@n@n@uvvF d{Bvd{B}}B2br6FF77D[HXI)r6FHVVX..GXfgy11H 
wq||B1Q4RUBF1R4LL1B$rz!B$q'9'9!A">">r	x8BrE#Ic**BtBrE!}}B	xaE!BKK00B	xbU2b\\22B	x2r"Q$wk!$$Bz$r!**U*2..J 	
!Aa{BaCqS#c'c	#h,3a#(>(>>sB2	F	FD	d2DBHS\$r::aCqS#c'c	#h,3a#(>(>>sB2	F	FD	d2DBHS\$r::	xC  BE$r!**U2X%a((B Qr{{BuQr{{B	x2qtbenQ''B"(75---I 5 4
1#5#5e#;<d:a>P>PQV>VWJBJ	xC  BVH:h&C 	aCqSbC%2,,c
!S&4!99T#a[[#891c6D1IIdSTUViiDW:XYYC
DQKK4A;;77CGRUOGw"RXgb%<%<"<tBqzz"}!MNG 
2b		2bhwr"555	6DCtr7WYZZZZr   )__doc__numpyr   pandasr   r   r   r"   r&   r0   r3   r8   r<   r    r   r   <module>r      s    F E          
  
 L K K K K K_ _ __ _ _    
K[ K[ K[ K[ K[r   