
    ܛAj_                         d Z ddlZddlmZ ddlmZmZ ddlZddl	m
Z
 ddlmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZmZ ddlmZ ddlmZ  ee      Z  e
       Z! G d d      Z" e"       Z#y)zHDecision engine - orchestrates regime, indicators, strategies, and risk.    N)Decimal)AnyOptional)get_settings)
get_logger)MarketRegime	RiskLevelSignalAction)indicators_service)market_data_service)regime_classifier)RiskContextRiskDecisionrisk_manager)statistics_service)strategy_enginec                   x    e Zd ZdZd ed      ddfdedee   deded	edz  d
edede	e   de
eeeef   f   fdZy)DecisionEnginez
    Central decision maker. Classifies regime, uses closed candles only,
    combines strategies and risk into auditable decisions.
    N01hsymbolcandlesstrategy_typerisk_contextstrategy_params
spread_pctintervalcorrelation_idreturnc	                   K   |xs t        t        j                               }|||d}	t        j                  ||      }
t        |
      t        j                  k  rZt        dt        j                  dt        j                  t        d      d d dd	      }t        j                  j                   |	d<   ||	fS t        j"                  |
||	      }d
|v r`t        dt        j                  dt        j                  t        d      d d dd|d
    	      }t        j                  j                   |	d<   ||	fS t%        j&                  |      }|j(                  j                   |	d<   |j*                  |	d<   |j,                  |	d<   t%        j.                  |j(                  |      sWt        dt        j                  dt        j                  t        d      d d dd| d|j(                  j                    	      }||	fS t1        |      |d<   |xs i }t1        |      |d<   |j3                  d|j4                         |j3                  d|j6                         |j9                  d      }|t1        |      |_        |j9                  d      }|t1        |      |_        ||_        |
dd  D cg c]  }t1        |d          }}tA        jB                  tE        jF                  |            }||	d<   |d   rtH        jK                  d||d   |       tM        jN                  |||      }t        t        |d               }|jP                  |	d<   |jR                  |	d<   |j9                  d      |j9                  d       |j9                  d!      |j9                  d"      |j9                  d      |j9                  d      d#|	d$<   tU        jV                  ||||%       d {   }tH        jY                  d&|||j(                  j                   |jZ                  j                   |jP                  |j\                  |j*                  '       ||	fS c c}w 7 pw)(N)r   r   r   Fr   r   insufficient_dataz3Not enough closed candles (forming candle excluded))	approvedaction
confidence
risk_levelposition_size	stop_losstake_profitblock_reasonreasonmarket_regime)r   errorzInsufficient data: regime_reasonactive_strategiesuncertain_marketz	Strategy z not allowed in regime r   min_confidence_buyensemble_sell_thresholdhistorical_volatilityrelative_volumeicloseanomaly
is_anomalyanomaly_detectedz_score)r   r8   r   priceregime_confidencescorersiadxema_crossover)r9   r<   r=   r>   r3   r2   
indicators)r   decision_made)r   r   regimer#   r$   r"   r*   )/struuiduuid4r   filter_closed_candleslenr   MIN_CANDLESr   r
   HOLDr	   HIGHr   r   NO_DATAvaluecalculate_allr   classifyrA   r*   r.   is_strategy_allowedfloat
setdefaultr0   r1   getr2   r3   r   r   detect_anomaliespdSeriesloggerwarningr   evaluater$   r;   r   evaluate_signalinfor#   r"   )selfr   r   r   r   r   r   r   r   metadataclosed_candlesdecisionr?   regime_resultreal_volreal_rel_volcclosesr5   signalcurrent_prices                        FC:\xampp\htdocs\tradingbinance\backend\app\services\decision_engine.pyrW   zDecisionEngine.evaluate   s     (<3tzz|+<,*$
 -BB7HU~!3!?!??##(($>>%cl 0L
H )5(<(<(B(BH_%X%%'55no`hi
j ##(($>>%cl 0,Z-@,AB
H )5(<(<(B(BH_%X%%)22:>$1$8$8$>$>!$1$8$8!(5(G(G$% 44]5I5I=Y##(($>>%cl /"=/1HI]I]IcIcHde
H X%%#(#4
< )/R(-j(9%""#79X9XY""#<l>b>bc >>"9:16xL.!~~&78#+0+>L(",-;CD-AB-A%'
#-AB$55bii6GH%< NN-fgiFXiwNx ))-_UJw$7 89(5(@(@$%"LL^^G,>>%(>>%('^^O<)~~.?@%/^^4K%L"
 &55flMbhii) ''--??((**&&?? 	 		
 !!C C( js    J!Q	#Q8DQ	QA1Q	)__name__
__module____qualname____doc__r   rB   listdictr   r   tupler   r   rW        re   r   r      s     (,%cl(,v"v" dv" 	v"
 "v" v" v" v" !v" 
|T#s(^+	,v"rn   r   )$ri   rC   decimalr   typingr   r   pandasrS   app.core.configr   app.core.loggingr   
app.modelsr   r	   r
   app.services.indicators_servicer    app.services.market_data_servicer   app.services.regime_classifierr   app.services.risk_managerr   r   r   app.services.statistics_servicer   app.services.strategy_enginer   rf   rU   settingsr   decision_enginerm   rn   re   <module>r}      s]    N      ( ' < < > @ < M M > 8	H	>|" |"~ !"rn   