{ "bar_feature_names": [ "open_rel", "high_rel", "low_rel", "close_rel", "volume_z_30m", "amount_z_30m" ], "feature_names": [ "ret_5m", "ret_15m", "ret_30m", "rsi_5m", "rsi_15m", "rsi_30m", "vol_std_5m", "vol_std_15m", "vol_std_30m", "ma_dev_5m", "ma_dev_15m", "ma_dev_30m", "boll_z_5m", "boll_z_15m", "boll_z_30m", "macd_5m_15m", "macd_15m_30m", "cross_section_ret_rank_5m", "cross_section_vol_rank_5m", "cross_section_ret_rank_15m", "cross_section_vol_rank_15m", "cross_section_ret_rank_30m", "cross_section_vol_rank_30m", "market_ret_5m", "market_vol_5m", "market_ret_15m", "market_vol_15m", "market_ret_30m", "market_vol_30m", "hour_sin", "hour_cos", "dayofweek_sin", "dayofweek_cos" ], "feature_windows_minutes": [ 5, 15, 30 ], "bar_size": "1m", "normalization": { "stats_file": "normalization_stats.npz", "bar": { "mean_key": "bar_mean", "std_key": "bar_std" }, "features": { "mean_key": "feature_mean", "std_key": "feature_std" }, "fit_scope": "train split only" }, "leakage_constraints": [ "Use only bars with timestamp <= decision timestamp t.", "All rolling, EMA and cross-section rank features must be computed causally.", "Do not refit normalization stats online or on validation/test/live data.", "Do not use future volume, future slippage, centered rolling windows or future universe membership." ] }