Files
DOLPHIN/prod/configs/green.yml
hjnormey ea65e2d699 fix(s6): suspend S6 sizing coefficients — point-in-time overfitting
The S6 multipliers (B3→2.0×, B6→1.5×, etc.) were derived from the ~600-trade
window ending 2026-04-19. ~100+ trades since that window show regime reversal —
bucket PnL rankings did not hold out-of-sample. Locking historical per-bucket
performance into operational sizing is overfitting at any fixed point-in-time.

Changes:
- green.yml: s6_size_table → null (uniform 1.0× sizing until coefficients
  demonstrate multi-window out-of-sample stability)
- s6_table_path commented out (same reason)
- B4 ban RETAINED: structural exclusion (only gross-negative bucket,
  -$100 gross before fees, R:R 0.80, WR 34.8%) not a time-window call
- AEM MAE_MULT_BY_BUCKET RETAINED: grounded in asset vol characteristics,
  not point-in-time PnL

Infrastructure (routing layer, recompute script, Prefect flow) fully intact.
Re-enable: set s6_table_path or populate s6_size_table once recompute_s6
demonstrates stable multi-window out-of-sample variance (< 20% guard).

Post-mortem note added to CRITICAL_ASSET_PICKING_BRACKETS_VS._ROI_WR_AT_TRADES.md
including system naming clarification (old GREEN vs new-GREEN vs BLUE).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 14:16:24 +02:00

118 lines
5.6 KiB
YAML
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# GREEN — SHORT-only mirror of BLUE + V7 RT exit engine (experimental staging)
#
# BLUE compliance (2026-04-13):
# direction : short_only (was: long)
# boost_mode : d_liq (NEW — matches BLUE's create_d_liq_engine)
# max_hold_bars : 250 (matches BLUE live; OB cascade halves to ~125)
# min_irp_alignment : 0.0 (was: 0.45 — matches BLUE's ENGINE_KWARGS)
# max_leverage : 8.0 (D_LIQ soft cap; informational)
# abs_max_leverage: 9.0 (D_LIQ hard cap; informational)
# vol_p60 : 0.00009868 (gold canonical — matches BLUE)
# hazelcast.state_map: DOLPHIN_STATE_GREEN
#
# V7 additions (GREEN only):
# use_exit_v7 : true (V7 = vol-normalized MAE + bounce_score/risk ML)
# v6_bar_duration_sec : 5.0 (eigenscan cadence; swap to 1.0 when NT runs 1s bars)
# bounce_model_path : path to bounce_detector_v3.pkl
# Rollback: set use_exit_v7: false, use_exit_v6: true to revert to pure V6
strategy_name: green
direction: short_only
engine:
boost_mode: d_liq # BLUE compliance: D_LIQ engine (LiquidationGuardEngine)
vel_div_threshold: -0.02
vel_div_extreme: -0.05
min_leverage: 0.5
max_leverage: 8.0 # D_LIQ soft cap (informational — d_liq ignores this)
abs_max_leverage: 9.0 # D_LIQ hard cap (informational — d_liq ignores this)
leverage_convexity: 3.0
fraction: 0.20
fixed_tp_pct: 0.0095
stop_pct: 1.0
max_hold_bars: 250 # BLUE compliance; OB cascade halves to ~125 at runtime
use_direction_confirm: true
dc_lookback_bars: 7
dc_min_magnitude_bps: 0.75
dc_skip_contradicts: true
dc_leverage_boost: 1.0
dc_leverage_reduce: 0.5
use_asset_selection: true
min_irp_alignment: 0.0 # BLUE compliance (was 0.45)
use_sp_fees: true
use_sp_slippage: true
sp_maker_entry_rate: 0.62
sp_maker_exit_rate: 0.50
use_ob_edge: true
ob_edge_bps: 5.0
ob_confirm_rate: 0.40
lookback: 100
use_alpha_layers: true
use_dynamic_leverage: true
seed: 42
# V7 RT exit engine (GREEN only — observer mode; not present in BLUE config)
use_exit_v7: true # V7: vol-normalized MAE + bounce_score/risk ML injection
use_exit_v6: false # V6 fallback — set true here + false above to roll back
v6_bar_duration_sec: 5.0 # scan cadence; set 1.0 when NT runs 1-second bars
bounce_model_path: /mnt/dolphinng5_predict/prod/models/bounce_detector_v3.pkl
paper_trade:
initial_capital: 25000.0
data_source: live_arrow_scans
log_dir: paper_logs/green
vol_p60: 0.00009868 # gold canonical (was 0.000099)
hazelcast:
imap_pnl: DOLPHIN_PNL_GREEN
imap_state: DOLPHIN_STATE_GREEN
state_map: DOLPHIN_STATE_GREEN # capital persistence map (was defaulting to BLUE)
# ──────────────────────────────────────────────────────────────────────────────
# GREEN S6/EsoF/AEM sprint (exp/green-s6-esof-aem-shadow-2026-04-21).
# BLUE (prod/configs/blue.yml) does NOT set these keys → orchestrator loads them
# as None/False → BLUE math is byte-identical pre-sprint. To disable any branch
# on GREEN, comment the corresponding key — single kill-switch per feature.
# ──────────────────────────────────────────────────────────────────────────────
# B4 structurally banned at the selector (only gross-negative bucket — R:R 0.80,
# WR 34.8%, gross PnL -$100 before fees). This is a structural exclusion, not a
# point-in-time performance call, so it survives the overfitting concern below.
# Slot is rerouted to next-ranked asset, not wasted with 0× sizing.
asset_bucket_ban_set: [4]
# S6 PER-BUCKET SIZING MULTIPLIERS — INTENTIONALLY DISABLED (2026-04-22).
#
# Diagnosis: the coefficients below (B3→2.0×, B6→1.5×, etc.) were derived from
# ~600 trades ending 2026-04-19. The ~100+ trades *since* that window show a
# regime reversal — bucket performance has not held. Locking historical point-in-time
# bucket PnL into operational sizing IS overfitting, regardless of how compelling
# the research window looked.
#
# What stays: B4 ban above (structural, gross-negative even before fees).
# What's disabled: all non-trivial multipliers — system sizes uniformly (1.0× = no-op)
# until prod/scripts/recompute_s6_coefficients.py has a stable multi-window dataset
# that demonstrates the coefficients generalise out-of-sample.
#
# Infrastructure (routing layer, recompute script, Prefect flow) is fully intact.
# Re-enable by un-commenting s6_table_path OR populating s6_size_table below.
#
# s6_table_path: prod/configs/green_s6_table.yml # ← un-comment to re-enable
s6_size_table: null # disabled — all buckets size at 1.0× until data stabilises
# EsoF regime gate lives at the top of _try_entry (orchestrator single-site).
# mult == 0 → regime-wide skip (no selector/sizer work). UNKNOWN replaces NEUTRAL
# (signals-in-conflict is empirically the worst ROI state).
esof_sizing_table:
FAVORABLE: 1.20
MILD_POSITIVE: 0.60
UNKNOWN: 0.25
NEUTRAL: 0.25 # alias — historical CH rows / stale HZ snapshots
MILD_NEGATIVE: 0.00
UNFAVORABLE: 0.00
# Target exchanges (e.g. Binance) require integer leverage. Default 1x pending
# CH-trade-walk in prod/scripts/analyze_leverage_winrate.py to pick the rounding
# rule (round-half-up vs banker's round vs stay-at-1x). leverage_raw is preserved
# in CH trade_events + NDPosition for that analysis.
use_int_leverage: true