
    ?YpjS                         S r SSKJrJrJrJrJr  SSKJrJ	r	  SSK
Jr  SSKJr  / SQr1 Skr1 SkrSS	\S
\\   4S jjrSS\S
\\   4S jjrS\\   S
\\   4S jrg)uC  
Единый реестр признаков для ML-моделей.

Цель: ликвидировать 5+ копий get_directional_feature_cols, разбросанных по проекту.
Использовать как единственный источник истины для списка колонок.
    )FEATURE_COLSINTERACTION_COLSTEMPORAL_COLS
HURST_COLS	VWAP_COLS)DIRECTIONAL_COLSSHORT_SPECIFIC_COLS)CONTEXT_COLS)MTF_CONTEXT_COLS)adxpdimdirv_5rv_10rv_20parkinson_volgarman_klass_volyang_zhang_vol	hurst_100is_trendingis_mean_revertinghurst_confidencevwap_24vwap_dist_pct
above_vwap>   doji	hh_streak	ll_streaksession_houris_market_openis_main_sessionlong_vol_climaxshort_div_signalshort_fail_breakshort_vol_climaxis_evening_session>   dow_sinhour_coshour_sin	engulfingvolume_ratiorsi_signal_acceldirectional_bias_accelmultireturnc           	         [        [        R                  [        [        -   [
        -   [        -   [        -   [        -   [        -   5      5      nU (       aN  [        [        R                  [        [
        -   5      5      nUS VVs/ s H  o2  H	  oC SU 3PM     M     snn-  n[        [        R                  U5      5      $ s  snnf )u  
Возвращает полный список признаков, используемых в моделях.

Порядок: directional → short_specific → technical → context → interactions → temporal → mtf.
Дубликаты удаляются с сохранением порядка (dict.fromkeys).

Args:
    multi: Если True — добавляются префиксные копии DIRECTIONAL_COLS + FEATURE_COLS для D1/W1.

Returns:
    Список имён колонок (без дубликатов).
)D1W1_)
listdictfromkeysr   r	   r   r
   r   r   r   )r.   cols
multi_colstfcols        6/home/ai/projects/AI_Strategy/features/feature_cols.pyget_directional_colsr<   1   s     ..=L
	*	+-=	> D $--(8<(GHI
L2#4qLLd#$$ Ms   C strictc                 Z   [         [        -   n[         Vs/ s H  o"S:w  d  M
  UPM     nn[         Vs/ s H  o"[        ;  d  M  UPM     nn[
         Vs/ s H  o"[        ;  d  M  UPM     nn[         Vs/ s H  o"[        ;  d  M  UPM     nnU (       a  U Vs/ s H  o"[        ;  d  M  UPM     nn[        [        R                  X-   U-   U-   [        -   U-   [        -   5      5      nU (       a  U Vs/ s H  o"[        ;  d  M  UPM     nnU$ s  snf s  snf s  snf s  snf s  snf s  snf )u  
Возвращает оптимизированный список базовых признаков для MoE v12.8+.

Отличия от get_directional_cols():
- Удалены dead-фичи (zero importance в Long/Short XGBoost)
- Удалён rsi_signal (дублирует rsi с r=1.0)
- Добавлены ADX + волатильностные метрики (высокоинформативны)

Args:
    strict: Если True, дополнительно удаляет borderline-фичи
            (очень низкая важность < 0.003 в обеих моделях).

Returns:
    Список базовых признаков (без дубликатов).

rsi_signal)r   EXTRA_FEATURE_COLSr   r	   DEAD_FEATURESr
   r   BORDERLINE_FEATURESr4   r5   r6   r   r   )r=   techcdirectionalshort_spctxtemporalr7   s           r;   clean_base_featuresrI   H   s   " ,,D /D.|2C1.KD /I.a=2H.HI #
=l}&<1lC
= )C=a],B=HC'Hx!4G+GAxHX%+.>>IL\\ D @4a,?#?4@K) E J > DH AsE   	DDDDD%D5DDD#*D#4D(D(r7   c                 $   [        U 5      [        [        U 5      5      :w  ai  U  Vs/ s H  oR                  U5      S:  d  M  UPM     nn[        S[        U 5       S[        [        U 5      5       S[	        [        U5      5       35      eU $ s  snf )u   
Проверяет список признаков на дубликаты и возвращает его.
Выбрасывает ValueError при обнаружении дубликатов (не отключается при python -O).
   u*   Дубликаты в признаках: z vs u   . Повторяющиеся: )lensetcount
ValueErrorsorted)r7   rD   
duplicatess      r;   validate_feature_colsrR   s   s    
 4yCD	N"!%;AA):a
;8T4CPTIGW X++1#j/+B*CE
 	
 K <s   BBN)F)__doc__features.technicalr   r   r   r   r   features.directionalr   r	   features.contextr
   features.mtf_contextr   r@   rA   rB   boolr4   strr<   rI   rR        r;   <module>r\      s~   7 7 F ) 1  % %c %.( (c (VS	 d3i r[   