Ë
    Bp±jG  ã                   ó   — d dddddœZ e j                  «       D � �ci c]  \  } }|| “Œ
 c}} Zdededefd	„Zd
ZdZdZdZdZ	dZ
dZdZdZdZdZddlZdedefd„Zdedededededefd„Zddd d!giiZg d"¢Zd#Zd$Zd%Zd&Zd'Zg d(¢ZeZd)Zd*Z yc c}} w )+Ú240Ú360Ú480Ú720Ú1D)Ú4HÚ6HÚ8HÚ12Hr   ÚassetÚtfÚreturnc                 ó<   — d| › dt         j                  ||«      › d�S )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     úW/Users/jameslopez/projects/TradingBot25/.worktrees/mlp-comparable-measurement/config.pyÚmlp_data_pathr      s%   € à�u�g˜R¤× 0Ñ 0°°RÓ 8Ð9¸Ð>Ð>ó    z
2015-01-01z
2017-12-01ú
2026-02-28z
2026-03-01g      Àg      >@g      @é
   gç§èH.ö?ç     @�@ú
2021-01-01é    NÚis_yearsc                 óB   — t        t        t        t        | z  «      «      S )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Ô%8¸8Ñ%CÓDÓEÐEr   ÚcalmarÚsortinoÚtradesÚpnl_pctc                 ó  — t        |«      }||k  s| dk  s|dk  s	|t        k  ryt        j                  | |z  «      }t	        t        j
                  ||z  «      t        «      }t        j
                  d|dz  z   «      }|d|z   z  |z  S )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.r   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_scorer/   /   s…   € ô ˜8Ó$€EØ�‚~˜ 1š¨°1ª¸ÔBTÒ8TØÜ�:‰:�f˜wÑ&Ó'€DÜ”E—I‘I˜f u™nÓ-Ô/@ÓA€IÜ—‘˜3 ¨6Ñ!1Ñ1Ó2€JØ�3˜‘?Ñ# jÑ0Ð0r   Úi_mvrv_suppress_bearÚvaluesFT)1Ú	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Úoutput))z
2020-12-31r   ú
2021-12-31)re   z
2022-01-01ú
2022-12-31)rf   z
2023-01-01ú
2023-12-31)rg   z
2024-01-01ú
2024-09-30)rh   z
2024-10-01ú
2025-09-30)ri   z
2025-10-01r   é   iˆ  )!r   ÚitemsÚPERIOD_TO_TFÚstrr   ÚTRAIN_STARTÚSCORE_STARTÚ	TRAIN_ENDÚ	OOS_STARTÚMVRV_BEAR_THRESHOLDÚMVRV_BULL_THRESHOLDr   r   r*   r%   ÚSUBPERIOD_SPLITÚmathr&   ÚfloatÚintr   r/   Ú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>  ðð  5°¸eÈ4ÑP€Ø!-×!3Ñ!3Ô!5Ô6Ñ!5™˜˜A��1‘Ð!5Ò6€ð?˜ð ? #ð ?¨#ó ?ð
 €Ø€Ø€	Ø€	ð
 Ð ØÐ ð Ð Ø€ØÐ ØÐ Ø#€ã ðF˜Uð F só Fð	1˜Eð 	1¨Eð 	1¸3ð 	1È%ð 	1ÐZ_ð 	1Ðdió 	1ð( ˜X¨¨t }Ð5ð	Ð ò€ð< €Ø €Ø€
Ø €Ø€
ò €	ð $Ð ØÐ Ø�	ùó{ 7s   œB
