
    0o<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     1/Users/jameslopez/projects/TradingBot25/config.pymlp_data_pathr      s%    ugR 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%88%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BT8T::fw&'DEIIfun-/@AI36!112J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e4P!-!3!3!56!5A1!56? ?# ?# ?
 		
       # FU Fs F	1E 	1E 	13 	1% 	1Z_ 	1di 	1( Xt}5	 <  
 
 	 $  	{ 7s   B
