# strategy.yaml — Cerberus Bite golden config v1.0.0 # # Source of truth for every threshold consumed by the rule engine. # Modifying this file is an explicit decision of Adriano. Each change # bumps `config_version`, regenerates `config_hash` (cerbero-bite # config hash), and lands as a separate commit with the motivation in # the commit message. config_version: "1.7.0" config_hash: "1171380de6d3334be1f6eed04797cebe15e5b8ec2124e130b582c2e2097bde37" last_review: "2026-06-09" last_reviewer: "Adriano" asset: symbol: "ETH" exchange: "deribit" entry: cron: "0 */2 * * *" skip_holidays_country: "IT" capital_min_usd: "720" dvol_min: "35" dvol_max: "90" funding_perp_abs_max_annualized: "0.80" eth_holdings_pct_max: "0.30" no_position_concurrent: true exclude_macro_severity: ["high"] exclude_macro_countries: ["US", "EU"] # Finestra evento macro ridotta a 1 giorno: blocca l'entry solo se un # evento high-severity cade entro 24h, invece dei 18gg (dte_target). exclude_macro_within_days: 1 trend_window_days: 30 trend_bull_threshold_pct: "0.05" trend_bear_threshold_pct: "-0.05" funding_bull_threshold_annualized: "0.10" funding_bear_threshold_annualized: "-0.10" iron_condor_dvol_min: "55" iron_condor_adx_max: "20" iron_condor_trend_neutral_band_pct: "0.05" # Quant filters (§2.8) — gates aggiuntivi via i nuovi tool MCP. # dealer_gamma_min: scarta entry se dealer net gamma < soglia. # Long-gamma regime (>0) = dealer hedge vol-suppressing, ideale # per vendere credit spread. Soglia conservativa, da rifinire dopo # paper trading. dealer_gamma_min: "0" dealer_gamma_filter_enabled: false liquidation_filter_enabled: true # IV richness gate (§2.9). Disabilitato di default. iv_minus_rv_min: "0" iv_minus_rv_filter_enabled: true # IV richness gate adattivo — soglia P25 rolling su 60 giorni iv_minus_rv_adaptive_enabled: true iv_minus_rv_percentile: "0.25" iv_minus_rv_window_target_days: 60 iv_minus_rv_window_min_days: 30 # §13-bis: collettore research full-chain. INDIPENDENTE dal collettore # live (che resta sulla finestra DTE della strategia, 1 scadenza, no # depth). Cattura tutte le scadenze <=expiry_max_days ed entrambe le # ali, popolando book_depth_top3 → backtest opzioni per-trade e # standing put + slippage reale. Disabilitato di default (costo API). research_collector: enabled: false cron: "0 * * * *" # orario expiry_max_days: 95 # 1g..3mesi moneyness_band_pct: null # null = catena completa (entrambe le ali) open_interest_min: 100 fetch_book_depth: true book_depth_concurrency: 8 assets: ["ETH", "BTC"] structure: dte_target: 18 dte_min: 14 dte_max: 21 # PROFILO B (tune 2026-06-09): vendere più vicino sblocca credito # realizzabile. Analisi su 3.689 snapshot (1mag-8giu): a delta # 0.10-0.15 il miglior credit/width ottenibile è ~6%, quindi 0.30 era # fisicamente irraggiungibile (0 spread fattibili). Alzando il delta a # ~0.18-0.22 il ratio sale a ~8-10% e l'eleggibilità a ~11%. short_strike: delta_target: "0.18" delta_min: "0.12" delta_max: "0.22" distance_otm_pct_min: "0.10" distance_otm_pct_max: "0.25" spread_width: target_pct_of_spot: "0.04" min_pct_of_spot: "0.03" # 0.06: la griglia strike ETH sotto i $1500 è a 100pt (~6% a spot # <$2k). Con cap 0.05 nessuna gamba long rientrava in banda. max_pct_of_spot: "0.06" # Era 0.30 — irraggiungibile con delta <=0.30 in questo mercato. # 0.08 = allineato al credit/width fisicamente realizzabile a delta ~0.18. credit_to_width_ratio_min: "0.08" liquidity: open_interest_min: 100 volume_24h_min: 20 bid_ask_spread_pct_max: "0.15" book_depth_top3_min: 5 slippage_pct_of_credit_max: "0.08" sizing: kelly_fraction: "0.13" cap_per_trade_eur: "200" cap_aggregate_open_eur: "1000" max_concurrent_positions: 5 max_contracts_per_trade: 4 dvol_adjustment: - {dvol_under: "45", multiplier: "1.00"} - {dvol_under: "60", multiplier: "0.85"} - {dvol_under: "80", multiplier: "0.65"} dvol_no_entry_threshold: "80" exit: profit_take_pct_of_credit: "0.50" stop_loss_mark_x_credit: "2.50" vol_stop_dvol_increase: "10" time_stop_dte_remaining: 7 time_stop_skip_if_close_to_profit_pct: "0.70" delta_breach_threshold: "0.30" adverse_move_4h_pct: "0.05" # §7-bis (D): vol-collapse harvest. 0 = disabilitato. vol_harvest_dvol_decrease: "0" # §7.1bis (C): scala graduata di profit-take. Vuoto = chiusura # atomica. Pipeline runtime non ancora attiva (hook futuro). profit_take_partial_levels: [] monitor_cron: "0 * * * *" user_confirmation_timeout_min: 30 escalate_on_timeout: - "CLOSE_STOP" - "CLOSE_VOL" - "CLOSE_DELTA" # §7-bis (F): circuit breaker su drawdown rolling. Disabilitato di # default — abilitarlo solo dopo abbastanza posizioni chiuse. auto_pause: enabled: false lookback_trades: 5 max_drawdown_pct: "0.10" pause_days: 14 execution: environment: "testnet" # testnet|mainnet — kill switch on broker mismatch eur_to_usd: "1.075" # default FX rate for sizing engine; override at boot combo_only: true initial_limit: "mid" reprice_step_ticks: 1 reprice_max_steps: 3 reprice_max_steps_urgent: 5 order_tif: "GTC" order_expiry_min: 30 ack_timeout_s: 300 monitoring: health_check_interval_s: 300 health_failures_before_kill: 3 health_failures_before_restart: 5 daily_digest_cron: "0 8 * * *" monthly_report_cron: "0 12 1 * *" storage: sqlite_path: "data/state.sqlite" log_path: "data/log/" log_retention_days: 365 backup_path: "data/backups/" backup_retention_days: 30 mcp: config_file: "~/.config/cerbero-suite/mcp.json" call_timeout_s: 8 retry_max: 3 retry_base_delay_s: 1 required_versions: cerbero-deribit: "^2.0.0" cerbero-hyperliquid: "^1.5.0" cerbero-memory: "^4.0.0" cerbero-portfolio: "^1.2.0" cerbero-macro: "^1.0.0" cerbero-sentiment: "^1.0.0" cerbero-telegram: "^1.0.0" cerbero-brain-bridge: "^1.0.0" telegram: parse_mode: "MarkdownV2" confirmation_timeout_min: 60 exit_confirmation_timeout_min: 30 backup_channel_on_critical: true kelly_recalibration: lookback_days: 365 min_sample_low_confidence: 30 min_sample_high_confidence: 100 weight_when_medium_confidence: "0.50"