
    bAj              
          d Z ddlmZ ddlmZ ddlmZ  ee      Zej                  g dej                  ddgej                  ddgej                  g ej                  g iZe G d	 d
             Z G d d      Z e       Zy)z8Market regime classification before strategy evaluation.    )	dataclass)
get_logger)MarketRegime)trendbreakoutensembler   r   mean_reversionc                   F    e Zd ZU eed<   eed<   ee   ed<   eed<   eed<   y)RegimeResultregime
confidenceactive_strategiesindicators_usedreasonN)	__name__
__module____qualname__r   __annotations__floatliststrdict     HC:\xampp\htdocs\tradingbinance\backend\app\services\regime_classifier.pyr   r      s#    Cy Kr   r   c                   D    e Zd ZdZdZdZdZdZdede	fdZ
d	ed
edefdZy)RegimeClassifierz
    Classify market regime using ADX, EMA slope, Bollinger width, normalized ATR.
  Strategies are enabled/disabled per regime.
       g{Gz?g{Gz?g       @
indicatorsreturnc                 <   d|v rt        t        j                  dg i d      S |j                  d      xs d}|j                  d      xs d}|j                  d      xs d}|j                  d	      xs d}|j                  d
      xs d}|j                  d      xs d}|j                  d      xs d}|r||z  nd}	|r||z
  |z  nd}
||	||
|d}|	| j                  kD  s|| j
                  kD  r-t        j                  }d|	dd|d}t        dd|	dz  z         }n|| j                  k\  r`|
dkD  rt        j                  }d|dd}n3|
dk  rt        j                  }d|dd}nt        j                  }d|d}t        dd|z         }nH|| j                  k  rt        j                  }d|dd |d}d!}nt        j                  }d"|dd#|d}d$}t        j                  |g       }t        j                  d%|j                   ||&       t        |||||      S )'Nerrorr   z+Insufficient data for regime classification)r   r   r   r   r   adxprice   atrbb_width	ema_shortema_longhistorical_volatility)r#   atr_normalizedr'   	ema_sloper*   zExtreme volatility: ATR/price=z.4fz, hist_vol=z.2f_   <   i  gMbP?zUptrend: ADX=z.1fz, EMA slope positivegMbPzDowntrend: ADX=z, EMA slope negativezADX high but flat EMAs: ADX=Z   2   zRange: narrow BB width=z, ADX=F   zDefault range: ADX=z, BB width=7   regime_classified)r   r   active)r   r   NO_DATAgetATR_EXTREME_THRESHOLDHIST_VOL_EXTREME_THRESHOLDEXTREME_VOLminADX_TREND_THRESHOLDTREND_UP
TREND_DOWNRANGEBB_WIDTH_RANGE_THRESHOLDREGIME_STRATEGY_MAPloggerinfovalue)selfr   r#   r$   r&   r'   r(   r)   hist_volr+   r,   r   r   r   r   r4   s                   r   classifyzRegimeClassifier.classify'   se   j #++"$ "D  nnU#(qw',1nnU#(q>>*-2NN;/41	>>*-2>>"9:?a(-u16;Y)U2	 , "%-
 D666(TEdEd:d!--F5nS5IU]^aTbcFRns&:!:;JD,,,5 %..(S	1EFV#%00*3s)3GH%++7CyARc*J555!''F.xnF3s)LFJ!''F*3s);xnMFJ$((4'\bc!$+
 	
r   r   strategy_typec                     t         j                  |g       }|dk(  r"|t        j                  t        j                  fvS ||v S )Nr   )r@   r6   r   r9   r5   )rD   r   rG   alloweds       r   is_strategy_allowedz$RegimeClassifier.is_strategy_allowedg   sC    %))&"5J&,":":L<P<P!QQQ''r   N)r   r   r   __doc__r;   r?   r7   r8   r   r   rF   r   r   boolrJ   r   r   r   r   r      sO    
 # !$>
4 >
L >
@(, (s (t (r   r   N)rK   dataclassesr   app.core.loggingr   
app.modelsr   r   rA   r<   r=   r>   r9   r5   r@   r   r   regime_classifierr   r   r   <module>rQ      s    > ! ' #	H	 <gz2):6b"    O( O(d %& r   