/* Legacy presets removed — all moved to presets.php. The following block is kept commented for reference only. $_removed_legacy = [ // ── PRESET A: Previous Best (proven in real pipeline) ──────────────── // Real pipeline: 551 trades, 61.71% winrate, 568.83% total PnL, 1.03 avg PnL // Filters: diff_1h < -0.5, price_above_low_pct >= 6, lb300 'proven_best' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.85, 'tp_mode' => 'scaled_sumN', 'tp_pct' => 2, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 6, 'skip_on_short' => true], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 3, 5], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [17, 19, 20, 21, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.4, 'martingale_max_steps' => 4, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 150, 'martingale_leverage' => 10, ], ], // ── PRESET A1: + Candle Wick filter (bounce confirmation) ────────── // Data shows: wick 1-3% = 66-68% winrate (bounce already started in signal candle) // Uses low_price — NOT available in live bot (yet) 'proven_wick' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.85, 'tp_mode' => 'scaled_sumN', 'tp_pct' => 2, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 6, 'skip_on_short' => true], ['field' => 'candle_wick_pct', 'op' => '>=', 'value' => 1], // bounce already started (wick >= 1%) ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 3, 5], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [17, 19, 20, 21, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.4, 'martingale_max_steps' => 4, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 150, 'martingale_leverage' => 10, ], ], // ── PRESET A2: + BTC flat-zone filter ────────────────────────────── // Data shows: BTC flat (-0.1 to 0.1% 1h) = 54.1% winrate (coin-specific drops don't bounce) // BTC dropping < -0.5% = 69.4% winrate (market-wide dip bounces better) 'proven_btc' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.85, 'tp_mode' => 'scaled_sumN', 'tp_pct' => 2, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 6, 'skip_on_short' => true], ['field' => 'btc_abs_diff_1h', 'op' => '>=', 'value' => 0.1], // BTC must be moving (not flat) ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 3, 5], 'flip_hours' => [10, 13, 14], 'boost_hours' => [], // 'boost_hours' => ['hours' => [17, 19, 20, 21, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.4, 'martingale_max_steps' => 4, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 150, 'martingale_leverage' => 10, ], ], // ── PRESET A3: + Both wick AND BTC filter (combined) ─────────────── 'proven_wick_btc' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.85, 'tp_mode' => 'scaled_sumN', 'tp_pct' => 2, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 6, 'skip_on_short' => true], ['field' => 'candle_wick_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_abs_diff_1h', 'op' => '>=', 'value' => 0.1], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 3, 5], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [17, 19, 20, 21, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.4, 'martingale_max_steps' => 4, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 150, 'martingale_leverage' => 10, ], ], // ── PRESET F: Fresh Drop filter (data-backed, no code changes) ───── // Analysis: diff_1min <= -2 gives +3.8% WR on baseline, +2.5% on PAL. 9/10 months positive. // Catches the V-bottom: a hard fresh drop at signal = stronger snap-back. 'fresh_drop' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.85, 'tp_mode' => 'scaled_sumN', 'tp_pct' => 2, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 6, 'skip_on_short' => true], ['field' => 'diff_1min', 'op' => '<=', 'value' => -2], // fresh hard drop at entry ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 3, 5], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [17, 19, 20, 21, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.4, 'martingale_max_steps' => 4, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 150, 'martingale_leverage' => 10, ], ], // ── PRESET G: Deep 5min drop (highest quality, fewer trades) ───── // Analysis: diff_5min <= -5 gives +3.5% WR on PAL. 8/9 months consistent. 'deep_5min' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.85, 'tp_mode' => 'scaled_sumN', 'tp_pct' => 2, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 6, 'skip_on_short' => true], ['field' => 'diff_5min', 'op' => '<=', 'value' => -5], // deep 5-min drop ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 3, 5], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [17, 19, 20, 21, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.4, 'martingale_max_steps' => 4, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 150, 'martingale_leverage' => 10, ], ], // ── PRESET H: Ultra-selective (70.9% WR on 86 trades) ─────────── // Analysis: diff_1min <= -2 AND diff_5min <= -5 = 70.9% WR, 5/5 months positive // Very few trades but extremely high quality. Good for copytrading with high confidence. 'ultra_selective' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.85, 'tp_mode' => 'scaled_sumN', 'tp_pct' => 2, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 6, 'skip_on_short' => true], ['field' => 'diff_1min', 'op' => '<=', 'value' => -2], // fresh hard drop ['field' => 'diff_5min', 'op' => '<=', 'value' => -5], // deep 5-min context ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 3, 5], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [17, 19, 20, 21, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.4, 'martingale_max_steps' => 4, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 150, 'martingale_leverage' => 10, ], ], // ── PRESET B: Original Baseline (most trades, lower winrate) ─────── // 59.5% winrate, ~1441 trades/10mo, 804% total PnL // The broadest filter set — use as comparison baseline 'baseline' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.85, 'tp_mode' => 'scaled_sumN', 'tp_pct' => 2, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ], ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 3, 5], 'flip_hours' => [10, 13, 14], 'martingale_multiplier' => 1.4, 'martingale_max_steps' => 4, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── PRESET C: Previous Best with price_above_low ─────────────────── // 62% winrate, ~538 trades/10mo, 590% total PnL // Added price_above_low_pct filter, improved avg PnL significantly 'pal_filter' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], // BTC also dipping ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], // wide volatile candle ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', // 'blocked_hours' => [0, 1, 3, 5], 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], // 'blocked_hours' => [], 'flip_hours' => [10, 13, 14], // 'boost_hours' => ['hours' => [11, 17, 20, 22, 23], 'multiplier' => 1.2], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── PRESET D: Evening Only (highest winrate, fewer trades) ───────── // 66% winrate, ~326 trades/10mo, 362% total PnL // Only trades during hours 17, 19-23 UTC — most consistent performance 'evening_only' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.85, 'tp_mode' => 'scaled_sumN', 'tp_pct' => 2, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ], ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18], 'martingale_multiplier' => 1.8, 'martingale_max_steps' => 4, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 150, 'martingale_leverage' => 10, ], ], // ── PRESET E: TP/SL Mode with optimized filters ──────────────────── // Uses take-profit and stop-loss instead of fixed-time close 'tp_sl' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 1, 'tp_mode' => 'scaled_sumN', 'tp_pct' => 0.75, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -2], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 6, 'skip_on_short' => true], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'tp_sl', 'blocked_hours' => [0, 1, 3, 5, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [17, 19, 20, 21, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.4, 'martingale_max_steps' => 4, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 150, 'martingale_leverage' => 10, ], ], // ═══════════════════════════════════════════════════════════════════════ // RESEARCH PRESETS — Track 1: diff_15min filter variations // ═══════════════════════════════════════════════════════════════════════ // ── R1: Config A + diff_15min > 0 (coin rising before drop = dip in uptrend) ── 'research_d15m_pos_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ['field' => 'diff_15min', 'op' => '>', 'value' => 0], // coin was rising before drop ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R2: Config A + diff_15min > -0.5 (slightly less restrictive) ── 'research_d15m_neg05_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ['field' => 'diff_15min', 'op' => '>', 'value' => -0.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R3: Config A + diff_15min > -1 (broadest d15m cut) ── 'research_d15m_neg1_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ['field' => 'diff_15min', 'op' => '>', 'value' => -1], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ═══════════════════════════════════════════════════════════════════════ // RESEARCH PRESETS — Track 2: BTC range filter variations // ═══════════════════════════════════════════════════════════════════════ // ── R4: Config A + BTC range > -1 AND < 0.3 (exclude BTC crashes) ── 'research_btc_range_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'btc_diff_30min', 'op' => '>', 'value' => -1], // exclude BTC crashes ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R5: Config A + BTC range > -0.5 AND < 0.3 (tighter BTC range) ── 'research_btc_tight_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'btc_diff_30min', 'op' => '>', 'value' => -0.5], // tighter BTC range ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ═══════════════════════════════════════════════════════════════════════ // RESEARCH PRESETS — Track 4: Creative Combinations // ═══════════════════════════════════════════════════════════════════════ // ── R6: Config A + d15m > 0 + BTC range > -1 (best combo) ── 'research_d15m_btc_combo_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'btc_diff_30min', 'op' => '>', 'value' => -1], // exclude BTC crashes ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ['field' => 'diff_15min', 'op' => '>', 'value' => 0], // uptrend dip ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R7: Config A + d15m > 0 + BTC range > -0.5 (tightest combo) ── 'research_d15m_btc_tight_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'btc_diff_30min', 'op' => '>', 'value' => -0.5], // tight BTC range ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ['field' => 'diff_15min', 'op' => '>', 'value' => 0], // uptrend dip ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R8: Config B + d15m > 0 (looser base + d15m filter) ── 'research_d15m_pos_B' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.5], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2], ['field' => 'diff_15min', 'op' => '>', 'value' => 0], // coin was rising before drop ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 4, 5, 9, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R9: Config B + BTC range > -1 ── 'research_btc_range_B' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.5], ['field' => 'btc_diff_30min', 'op' => '>', 'value' => -1], // exclude BTC crashes ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 4, 5, 9, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R10: Config B + d15m > 0 + BTC range > -1 (full combo on loose base) ── 'research_d15m_btc_combo_B' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.5], ['field' => 'btc_diff_30min', 'op' => '>', 'value' => -1], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2], ['field' => 'diff_15min', 'op' => '>', 'value' => 0], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 4, 5, 9, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R11: Config A + d15m > -1 + BTC range > -1 (broad combo) ── 'research_d15m_neg1_btc_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'btc_diff_30min', 'op' => '>', 'value' => -1], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ['field' => 'diff_15min', 'op' => '>', 'value' => -1], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R12: Config A + BTC sweet spot (-0.5 to -0.3 had 85% WR) ── 'research_btc_sweet_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0], // BTC must be red ['field' => 'btc_diff_30min', 'op' => '>', 'value' => -0.5], // but not crashing ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ═══════════════════════════════════════════════════════════════════════ // RESEARCH PRESETS — Data-driven discoveries // ═══════════════════════════════════════════════════════════════════════ // ── R13: Config A + diff_30min > -2 (30m shallower = 70.8% WR) ── 'research_d30m_shallow_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ['field' => 'diff_30min', 'op' => '>', 'value' => -2], // shallower 30m = dip in uptrend ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R14: Config A + diff_5min > -2 (shallow 5m = 75.1% WR) ── 'research_d5m_shallow_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ['field' => 'diff_5min', 'op' => '>', 'value' => -2], // shallow 5m drop ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R15: Config A + sumN_diff sweet spot -5 to -4 (72.9% WR) ── 'research_sumN_sweet_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -5, // narrowed: -5 to -4 sweet spot 'gentle_cap_max' => -4, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R16: Config A + diff_1h < -2 (deeper 1h drop = 71.3% WR bucket) ── 'research_d1h_deeper_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -2], // deeper 1h drops ['field' => 'diff_1h', 'op' => '>', 'value' => -3], // but not crashes ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R17: Config A + pal >= 2 (sweet spot: 68.1% WR, more trades) ── 'research_pal2_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 2], // pal 2+ sweet spot ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R18: Config A + d30m > -2 + d5m > -3 (double shallow = quality) ── 'research_double_shallow_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ['field' => 'diff_30min', 'op' => '>', 'value' => -2], ['field' => 'diff_5min', 'op' => '>', 'value' => -3], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R19: Config B + d30m > -2 (shallow 30m on looser base) ── 'research_d30m_shallow_B' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.5], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2], ['field' => 'diff_30min', 'op' => '>', 'value' => -2], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 4, 5, 9, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R20: Config A + d30m > -3 (broader shallow filter) ── 'research_d30m_broad_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ['field' => 'diff_30min', 'op' => '>', 'value' => -3], // broader: > -3 ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R21: Config A + cap -6 to -3 (wider sumN, but avoiding extremes) ── 'research_sumN_wide_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -6, // narrowed: -6 to -3 (excludes extremes) 'gentle_cap_max' => -3, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R22: Config B + d30m > -2 + pal >= 2 (quality on looser base) ── 'research_quality_B' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 2], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.5], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2], ['field' => 'diff_30min', 'op' => '>', 'value' => -2], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 4, 5, 9, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ═══════════════════════════════════════════════════════════════════════ // RESEARCH PRESETS — Round 2: Parameter tuning & creative combos // ═══════════════════════════════════════════════════════════════════════ // ── R23: Config A + BTC < 0 (BTC must be red, not just < 0.3) ── 'research_btc_red_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0], // BTC must be negative ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R24: Config A + candle_range >= 3 (tighter range) ── 'research_cr3_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 3], // tighter candle range ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R25: proven_best (pal >= 6) with sumN -5.5 to -3.5 sweet spot ── 'research_proven_sumN_sweet' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -5.5, // narrowed sweet spot 'gentle_cap_max' => -3.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.85, 'tp_mode' => 'scaled_sumN', 'tp_pct' => 2, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 6, 'skip_on_short' => true], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 3, 5], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [17, 19, 20, 21, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.4, 'martingale_max_steps' => 4, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 150, 'martingale_leverage' => 10, ], ], // ── R26: Config A with NO flip_hours (more aggressive long-only) ── 'research_no_flip_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 10, 12, 13, 14, 18], // block flip hours instead 'flip_hours' => [], // no flipping 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R27: Config A + hour 14 unblocked (67.3% WR data) ── 'research_h14_unblock_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13], // removed 14 from flip (67.3% WR as long!) 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R28: Config A + aggressive boost (1.5x instead of 1.2x) ── 'research_boost_aggro_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [11, 17, 20, 22, 23], 'multiplier' => 1.5], // more aggressive 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R29: Config A with extended hours (unblock 3) ── 'research_h3_unblock_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 4, 5, 9, 12, 18], // unblocked hour 2 and 3 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R30: Config A with looser candle_range 2 + tighter btc < 0 ── 'research_cr2_btc0_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0], // BTC must be red ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2], // looser range ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 2, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ═══════════════════════════════════════════════════════════════════════ // RESEARCH PRESETS — Round 3: Hour optimization // ═══════════════════════════════════════════════════════════════════════ // ── R31: Config A + unblock h2 only ── 'research_hours_v1' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 4, 5, 9, 12, 18], // unblock h2 only (not h3) 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R32: Config A + unblock h2,h3 + add h16 as flip (69% WR, low pnl) ── 'research_hours_v2' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14, 16], // added h16 as flip 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R33: Config A + unblock h2,h3 + block h8 (62.9% WR) ── 'research_hours_v3' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 4, 5, 8, 9, 12, 18], // added h8 block 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R34: Config B + unblock h2,h3 (B-base with hour optimization) ── 'research_hours_B' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.5], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 5, 9, 18], // loosened: unblock h2,h3,h4 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R35: Config A + h21 as flip (50.3% WR as long!) ── 'research_h21_flip_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 4, 5, 9, 12, 18], // unblock h2,h3 'flip_hours' => [10, 13, 14, 21], // added h21 as flip (50.3% WR as long) 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ═══════════════════════════════════════════════════════════════════════ // RESEARCH PRESETS — Round 4: Best combinations // ═══════════════════════════════════════════════════════════════════════ // ── R36: Config A + btc < 0.1 + unblock h2 (best of R29 + tighter btc) ── 'research_btc01_h2_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.1], // tighter BTC ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 4, 5, 9, 12, 18], // unblocked h2 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R37: Config A + btc < 0.2 + unblock h2 ── 'research_btc02_h2_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.2], // slightly tighter ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R38: Config A + pal >= 1.5 + unblock h2 ── 'research_pal15_h2_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1.5], // slightly tighter ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.3], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // ── R39: Config A + btc < 0.2 + pal >= 1.5 + unblock h2 (triple refinement) ── 'research_triple_A' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.10, 'tp_mode' => 'static', 'tp_pct' => 2.5, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1.5], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.2], ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2.5], ], 'low_lookback_minutes' => 300, ], 'config' => [ 'signal_outcomes_mode' => 'no_tp', 'blocked_hours' => [0, 1, 4, 5, 9, 12, 18], 'flip_hours' => [10, 13, 14], 'boost_hours' => ['hours' => [3, 11, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.5, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], // 63.78% WR, 1018% PnL 'winner_medium' => [ 'thresholds' => [ 'direction' => 'long', 'sequence' => [ ['op' => '>', 'len' => 7, 'min_hits' => 5, 'sum_min' => -1, 'sum_max' => 2], ['op' => '<', 'len' => 1, 'sum_min' => -9, 'sum_max' => -2], ], 'diff_field' => 'diff_3min', 'min_abs_diff' => 0.0, 'gentle_cap_min' => -9, 'gentle_cap_max' => -2.5, 'vol_ratio_min' => 0, 'trades_ratio_min' => 0, 'buy_pressure_min' => 0, 'cooldown_hours' => 1, 'ahead_minutes' => 20, 'sl_pct' => 0.15, 'tp_mode' => 'static', 'tp_pct' => 555, 'tp_scale_by' => null, 'entry_feature_filters' => [ ['field' => 'diff_1h', 'op' => '<', 'value' => -0.5], ['field' => 'price_above_low_pct', 'op' => '>=', 'value' => 1], ['field' => 'btc_diff_30min', 'op' => '<', 'value' => 0.4], // BTC also dipping ['field' => 'candle_range_pct', 'op' => '>=', 'value' => 2], // wide volatile candle ], 'low_lookback_minutes' => 300, ], 'config' => [ 'month' => '2025-05 2026-03', 'signal_outcomes_mode' => 'tp_sl', // 'blocked_hours' => [0, 1, 3, 5], // 'blocked_hours' => [0, 1, 2, 4, 5, 9, 18], 'blocked_hours' => [1, 4, 5, 9, 18], // 'blocked_hours' => [], 'flip_hours' => [10, 13, 14], // 'boost_hours' => ['hours' => [11, 17, 20, 22, 23], 'multiplier' => 1.2], 'boost_hours' => ['hours' => [11, 13, 17, 20, 22, 23], 'multiplier' => 1.2], 'martingale_multiplier' => 1.4, 'martingale_max_steps' => 5, 'martingale_reset_on' => 'win', 'martingale_base_amount' => 100, 'martingale_leverage' => 10, ], ], ]; ]; // end of commented legacy block */