+
    0o<jG              
          R RRRRRRRRR/t ] P                  4        U Uu/ uF  w  rWbK	  	  upp tR	 R
 ltRtRtRtRtRTtRt	Rt
^
tRtRtRt^ RItR R ltR R ltRRRR.//t. RNRNRNR NR!NR"NR#NR$NR%NR&NR'NR(NR)NR*NR+NR,NR-NR.NR/NR0NR1NR2NR3NR4NR5NR6NR7NR8NR9NR:NR;NR<NR=NR>NR?NR@NRANRBNRCNRDNRENRFNRGNRHNRINRJNRKNRLNRMNtRNtROtRPtRQtRRt. RUOt]t^tRStR# u upp i )V4H2406H3608H48012H7201Dc                <    V ^8  d   QhR\         R\         R\         /# )   assettfreturn)str)formats   "1/Users/jameslopez/projects/TradingBot25/config.py__annotate__r      s!     ? ? ?# ?# ?    c                :    RV  R\         P                  W4       R2# )z:Return the canonical data/mlp/ path for an asset/TF combo.z	data/mlp/z, z.csv)TF_TO_PERIODget)r   r   s   &&r   mlp_data_pathr      s#    ugR 0 0 89>>r   z
2015-01-01z
2017-12-01
2026-02-28z
2026-03-01g      >@g      @gH.?     @@
2021-01-01Nc                0    V ^8  d   QhR\         R\        /# )r   is_yearsr   floatint)r   s   "r   r   r   +   s     F FU Fs Fr   c                J    \        \        \        \        V ,          4      4      # )z5Dynamic IS trade floor proportional to window length.)maxMIN_ABS_TRADESroundMIN_TRADES_PER_YEAR)r   s   &r   get_min_tradesr&   +   s    ~u%88%CDEEr   c                `    V ^8  d   QhR\         R\         R\        R\         R\         R\         /# )r   calmarsortinotradesr   pnl_pctr   r   )r   s   "r   r   r   /   s8     	1 	1E 	1E 	13 	1% 	1Z_ 	1di 	1r   c                \   \        V4      pW%8  g   V ^ 8:  g   V^ 8:  g   V\        8  d   R# \        P                  ! W,          4      p\	        \        P
                  ! W%,          4      \        4      p\        P
                  ! RVR,          ,           4      pVRV,           ,          V,          # )u   Composite: sqrt(Calmar × Sortino) × (1 + log_bonus) × ln(1 + P&L/1000).
Returns 0 if below trade floor, either ratio ≤ 0, or P&L < MIN_WINNER_PNL_PCT.g        g      ?r   )r&   MIN_WINNER_PNL_PCT_mathsqrtminlogCOMPOSITE_LOG_CAP)	r(   r)   r*   r   r+   floorbase	log_bonus
geo_factors	   &&&&&    r   composite_scorer7   /   s     8$E~11BT8T::f&'DEIIfn-/@AI36!112J3?#j00r   i_mvrv_suppress_bearvaluesFT	i_w_stochi_w_macd_predi_w_osci_w_totalvoli_w_m3_momentumi_w_m2_tinyi_w_newaddri_w_stoch_div_osci_w_vwap_div_osci_w_stoch_peakingi_w_sendaddri_w_m3_div_osci_w_m2_div_osci_w_m2_div_osc_noOffseti_w_bearish_engulfingi_w_bullish_hammeri_w_bullish_engulfingi_w_shooting_stari_w_btc_spx_corri_w_dxyi_w_vixi_w_btc_dom	i_w_us10yi_w_spyi_w_goldi_w_mvrvi_w_mvrv_conti_w_nupli_w_fed_net_liqi_w_gc_positioni_w_us2yi_w_yield_curvei_w_qqq_spy_ratioi_w_rsid_reg_bulli_w_rsid_reg_beari_w_rsid_hid_bulli_w_rsid_hid_beari_w_rsid_rt_bulli_w_rsid_rt_beari_w_rsid_slow_bulli_w_rsid_slow_beari_w_rsid_delayed_peaki_w_rsid_delayed_dip
i_w_oi_roc
i_w_usdt_d	i_w_basisi_w_fear_greedi_w_btc_goldi_w_rsi_subtfresultszresults/winnerszresults/sweepszresults/reportsoutputi  g      ))z
2020-12-31r   
2021-12-31)rm   z
2022-01-01
2022-12-31)rn   z
2023-01-01
2023-12-31)ro   z
2024-01-01
2024-09-30)rp   z
2024-10-01
2025-09-30)rq   z
2025-10-01r   )r   itemsPERIOD_TO_TFr   TRAIN_STARTSCORE_START	TRAIN_END	OOS_STARTMVRV_BEAR_THRESHOLDMVRV_BULL_THRESHOLDr%   r#   r2   r-   SUBPERIOD_SPLITmathr.   r&   r7   NON_WEIGHT_PARAMSWEIGHT_COLSRESULTS_DIRWINNERS_DIR
SWEEPS_DIRREPORTS_DIR
OUTPUT_DIR	WFO_FOLDSWFO_MIN_OOS_TRADESWFO_MIN_VALID_FOLDS	WFO_TOP_N)kvs   00r   <module>r      s   eT5$ueT4P!-!3!3!56!5!56?
 		
       # F	1( Xt}5	  "+-;  % '4 	 ,	 .A	
 
 %
 '7   2  1  " $- /<   '    ",  )" #" "#" $7#& '& -'( )( -)* +* ,+, -, /-. /. 4/2 32 32 !,36 76 %76 '67<  
 
 	 $  	{ 7s   C