
    ~j[                        S SK r SSS\ R                  R                  SS5      SS.rS	S
SS.r/ SQr/ SQrS/rSSSS.r\\-   \-   r	Sr
\
(       a  \	O\	 V s/ s H  o S:w  d  M
  U PM     sn rS\S\4S jrSSSSSS.SSSSS S.S!S"SSS#S.S$.rS!S"S%.S!S"S%.S!S"S%.S!S"S%.S!S"S%.S!S"S%.S&S'S%.S(.rS)rS\S\4S* jrS\S\\\\4   4S+ jrS\S\4S, jrS-rS.rS/rS0rS1S2S3S4\S5S6.r/ S7Q/ S8QS9S&S&S:S!S7.S;S<S)S)S)S=S'S'S>.rSS?S&S9S@SASBS'SCSDSES@S1SF.r\S   R?                  5       r SCSSSGSS)SS)/ SHQSIS'SJ.SK.
r!S)S2SLSM/ SN.r"\#" \"R                  SO/ 5      5      r$SPSQSR.SPSPSR.SPSPSR.SPSSSR.SPSTSR.SPSUSR.SPSTSR.SPSTSR.SPSUSR.SPSUSR.SPSVSR.SPSWSR.SPSPSR.SPSXSR.SY.r%S9S9S9S!S:S:S!S!S:S!S9S9S9S9SY.r&S9S:S!S!S9S!S&S!S9S!S:S9S:S9SY.r'SZS[S9S:S\.r(S)r)S)r*S\S\4S] jr+S\S\4S^ jr,S)r-\#" 5       r.\#" 5       r/\(S_   r0\(S`   r1\(Sa   r2\(Sb   r3\S   Sc   r4\S   Sd   r5Ser6Sfr7 S SK8r8\8Rr                  Ru                  5       r;\8Rx                  Rr                  (       a  \8Rx                  Rr                  OSgr=\8Rr                  R}                  5       r?\;(       a  \8Rr                  R                  S 5      OSgrA\;(       a  ShOSirCSirD\CqESxSj\S\4Sk jjrFS\4Sl jrGS1S2\S5SmSn.SoSpS0S<S<Sq\S5S S!Sr.
SsStSS<S<S0S0S\S5S5S!Su.Sv.rH/ SwQrIgs  sn f ! \B a    Sr;Sgr=S r?SgrA N_f = f)y    Nznlbotinterface.rui  bitcoinMOEX_DB_PASSWORD	g49020007bitcoin_tickers)hostportuserpassworddatabaseH1D1W1)r   r   r   )ASTRSBERVTBRROSNNVTKPHORSNGSPPLZLX5MTSSLKOHGAZPMOEXNSVZ)BITCOINBITCOINCZCASHEURUSDmoexforexcrypto)r!   r"   r#   Ftickerreturnc                 f    U R                  5       n U [        ;   a  gU [        ;   a  gU [        ;   a  gg)uN   Определяет рынок тикера: 'moex', 'crypto' или 'forex'.r!   r#   r"   )upperMOEX_TICKERSCRYPTO_TICKERSFOREX_TICKERSr$   s    	config.py
get_marketr-   &   s1    \\^F    g      @g       @0      皙?)atr_mult_slatr_mult_tpmax_barsswing_lookbackmax_atr_ratio      @H   g333333?g      @g      @g{Gz?)r!   r#   r"   )r2   r3   g      ?g      ?)r   r   r   r   r   r   r   Tc                     [        U 5      n[        R                  U[        S   5      R                  5       nU [        ;   a  UR                  [        U    5        U$ )u   Возвращает target config (SL/TP множители + max_atr_ratio) для тикера по рынку.

Per-ticker overrides имеют приоритет над market-default (audit 2026-08-03).
r!   )r-   MARKET_TARGET_CONFIGSgetcopyTICKER_RISK_OVERRIDESupdate)r$   marketcfgs      r,   get_target_configrA   k   sO    
 F

#
#F,A&,I
J
O
O
QC&&

(01Jr.   c                 N    [        U 5      nUS   US   UR                  SS5      4$ )u  Возвращает (sl_mult, tp_mult, max_atr_ratio) для live trade execution.

Единый источник правды — `MARKET_TARGET_CONFIGS`. Sync между train и live
гарантирует, что тренировочный RR совпадает с live.
r2   r3   r6   r1   )rA   r;   )r$   r@   s     r,   get_risk_paramsrC   w   s6     F
#CMM& r.   c                 0    U R                  5       [        ;   $ )uf   Проверяет ручной чёрный список тикеров (TICKER_BLACKLIST в config).)r'   TICKER_BLACKLISTr+   s    r,   is_ticker_blacklistedrF      s    <<>---r.   zmodels/saved*   皙?g?   
         )n_estimators	max_depthmin_samples_splitmin_samples_leafrandom_staten_jobs)rJ      <   )g      ?333333?rH         @g       @   g?gQ?)horizonshorizon_weights	min_ratiomin_abs_move_atrmove_exists_thresholds
atr_periodmax_bars_ratiouse_atr_normuse_bars_targetuse_move_classifierbreakeven_wrxgb_peak_weightxgb_trough_weighti     gMbP?gGz?g{Gz?i'  iP  )n_epochsepisode_sizer2   r3   
hidden_dimlrgammaepsilon_startepsilon_endepsilon_decay_stepsbuffer_capacity
batch_sizetarget_update   ))皙?rW   )rV   g      @)rV   r7   g        )   rL   )
risk_per_tradesl_multtp_multreentry_delay_hourstime_stop_hoursweekend_filterr6   ladder_enabledladder_tiersladder_sl_after_tierg333333ÿ   )enabled
min_tradesmin_window_pnl_pctcooldown_hours	blacklistr   gQ?gRQ?)longshortgGz?gףp=
?rV   rs   g)\(?gq=
ףp?)r   r   r   r   r   r   r   r   r   r   r   r   r   r   g?gzG?)long_thresholdshort_thresholdshort_weightlong_weightc                 8    [         =(       a    [        U 5      S:H  $ )uc   True если тикер относится к MOEX и включён режим только-LONG.r!   )MOEX_ONLY_LONGr-   r+   s    r,   is_moex_only_longr   "  s    :j0F::r.   c                 8    [         =(       a    [        U 5      S:H  $ )u   True если short-таргеты не должны вычисляться при обучении для этого тикера.r!   )SHORT_TRAIN_DISABLED_MOEXr-   r+   s    r,   should_disable_short_trainingr   &  s    $EF);v)EEr.   r   r   r   r   r2   r3   gffffff?rT   zN/Acudacpumodec                     U S:X  a  [         q[        $ U S:X  a  [        q[        $ U S:X  a  [        (       a  Sq[        $ Sq[        $ U q[        $ )uG  
Switches global DEVICE for training vs inference.

Args:
    mode: 'train' → CUDA (if available), 'inference' → CPU, 'auto' → auto-detect.

Returns:
    The device string that was set.

IMPORTANT: Call this BEFORE importing models.experts in training scripts,
because experts.py reads config.DEVICE at module load time.
train	inferenceautor   r   )TRAIN_DEVICEDEVICEINFERENCE_DEVICE_CUDA_AVAILABLE)r   s    r,   
set_devicer   g  s`     w M 
	!
 M	 
*? M 16 M Mr.   c            
      L    S[          S[         S[         S[         S[         3
$ )z4Returns a formatted string with current device info.zDevice: z | CUDA avail: z | CUDA ver: z | GPU: u    × )r   r   _CUDA_VERSION
_GPU_COUNT	_GPU_NAME r.   r,   print_device_infor     s3     6(//): ;"O8J<tI;	Hr.   balanced)rN   rO   rR   rS   class_weighti,     logloss)
rN   rO   learning_rate	subsamplecolsample_bytreeeval_metricrR   rS   	verbosityscale_pos_weighti     )rN   rO   r   r   r   	reg_alpha
reg_lambdamin_child_samplesrR   rS   r   r   )rfxgblightgbm)#atr_pctbb_widthclose_to_sma_50macdbb_width_x_atr_pct	return_20	macd_histbb_width_x_rsicts50_x_ret20close_to_sma_20strength_trendrsitrend_signalbb_positionclose_to_sma_10volume_ratiomacd_signal_accelatr_pct_x_vol_ratiorsi_x_bb_possignal_strengthreturn_1	bb_signaldirectional_biasrsi_signal_acceldirectional_bias_accelclose_to_sma_5return_5momentum_signal
rsi_signalmacd_signal	hh_streak	ll_streakvolume_signal	engulfingdoji)r   )Josenvironr;   	DB_CONFIG
TIMEFRAMESr(   r)   r*   TICKER_TYPESALL_TICKERSMONITOR_USE_ALL_TICKERSMONITOR_TICKERSstrr-   r:   r=   USE_SWING_TARGETSdictrA   tuplefloatrC   boolrF   SAVE_DIRRANDOM_SEED	TEST_SIZEVALIDATION_SIZERF_DEFAULTSREGRESSION_CONFIG	RL_CONFIGr<   TARGET_CONFIGRISK_CONFIGTICKER_AUTO_DISABLEsetrE   TICKER_THRESHOLDSTICKER_SHORT_WEIGHTSTICKER_LONG_WEIGHTSDEFAULT_CONFIGr   r   r   r   SHORT_BLOCKLIST_ENABLEDSHORT_BLOCKLISTLONG_BLOCKLISTDEFAULT_LONG_THDEFAULT_SHORT_THDEFAULT_SHORT_WEIGHTDEFAULT_LONG_WEIGHTSL_MULTTP_MULTROLLING_WR_BREAKEVENROLLING_WR_MIN_SAMPLEStorchr   is_availabler   versionr   device_countr   get_device_namer   ImportErrorr   r   r   r   r   MODEL_CONFIGTOP_FEATURES_BY_RANK)ts   0r,   <module>r     sZ   	  

1;?!	 D1
 2
HE^+m;
      !	2[M![	2	 
s 
s 
B "#B[]ptu "#B[]ptu!#B[]ptu
 . !5 5 5 5 5 5
 !5   	c 	d 	C E%*=$> .# .$ .
 	"!#$kRQ &#&CS9 " 
 	  &f-224  %>    *..{B?@  T*T*T*T*T*T*T*T*T*T*T*T*T*T* & 33333  #####  	   ;c ;d ;F# F$ F  %  !!12!"34 %n5 $]3   
'
6

'
6   
jj--/O*/--*<*<EMM&&%M((*J1@

**1-eI )ve  
S c 23  #"  # #)"J
 ] 
3d	  OMJI	s   	K"K?BK K.-K.