feat(strategy): GNews guardrail — clamp news-only shifts to prior±0.25 #14

Merged
chemavx merged 1 commits from feat/news-guardrail into main 2026-07-02 07:17:35 +00:00
Owner

Contexto

Post-mortem NVIDIA 631181: un trade legacy de abril donde una única señal no corroborada de peso alto (Manifold 0.13, peso 0.6) invirtió un mercado de 0.845 a 0.431 y perdió. Con Manifold observational-only y macro gateado tras is_non_price, GNews (peso 1.5) es la única señal viva capaz de mover politics 20-30 pp contra el consenso del libro. Esto es un fusible catastrófico, no una calibración fina.

Cambios

  • apply_news_guardrail() (función pura): si |news_lo| >= 0.10 y todas las demás señales (fg, mom, btc_dom, mfld) están por debajo → clamp del posterior a prior ± 0.25. Cualquier señal material corrobora y desactiva el clamp. Config vía env: NEWS_GUARDRAIL_ENABLED=true, MAX_NEWS_ONLY_PROB_SHIFT=0.25, NEWS_MATERIAL_LOGODDS_THRESHOLD=0.10.
  • edge calculado con el posterior clampado; raw_final_prob persiste vía reasoning (sin migración de schema).
  • guardrail_changed_trade_decision: el edge raw cruzaba el gate de régimen pero el clampado ya no → el fusible evitó un trade. Nota: con la banda default 0.25 el edge_net clampado es 0.21 (> todos los mínimos de régimen); el flag solo puede dispararse con banda configurada más estrecha.
  • Observabilidad gateada por materialidad: línea NEWS_MATERIAL por mercado y NEWS SUMMARY compacto por ciclo, solo si with_news > 0 — sin flood de los ~145 mercados/ciclo sin noticias.
  • 9 tests deterministas (75/75 pasan): clamp extremo (0.845→raw 0.431→final 0.595), passthrough en banda, corroboración, umbral inclusivo, disabled, changed_decision.

Sin cambios

NEWS_LOGODDS_WEIGHT, flags de Manifold, thresholds de edge/régimen, exposure, sizing, payout, resolution detector, promotion_ready, trades históricos.

Hallazgo colateral (fuera de scope, no tocado)

Con macro gateado, politics tiene adjustments=[] → confidence = 0.4 + 0.10 (GNews) = 0.50 < MIN_CONFIDENCE 0.55 → el pipeline actual no puede ejecutar ningún trade de politics aunque el edge sea enorme. Confounder a tener en cuenta al evaluar en semanas si el fusible muerde.

🤖 Generated with Claude Code

## Contexto Post-mortem NVIDIA 631181: un trade legacy de abril donde una única señal no corroborada de peso alto (Manifold 0.13, peso 0.6) invirtió un mercado de 0.845 a 0.431 y perdió. Con Manifold observational-only y macro gateado tras `is_non_price`, **GNews (peso 1.5) es la única señal viva capaz de mover politics 20-30 pp contra el consenso del libro**. Esto es un fusible catastrófico, no una calibración fina. ## Cambios - **`apply_news_guardrail()`** (función pura): si `|news_lo| >= 0.10` y todas las demás señales (`fg`, `mom`, `btc_dom`, `mfld`) están por debajo → clamp del posterior a `prior ± 0.25`. Cualquier señal material corrobora y desactiva el clamp. Config vía env: `NEWS_GUARDRAIL_ENABLED=true`, `MAX_NEWS_ONLY_PROB_SHIFT=0.25`, `NEWS_MATERIAL_LOGODDS_THRESHOLD=0.10`. - **edge calculado con el posterior clampado**; `raw_final_prob` persiste vía `reasoning` (sin migración de schema). - **`guardrail_changed_trade_decision`**: el edge raw cruzaba el gate de régimen pero el clampado ya no → el fusible evitó un trade. Nota: con la banda default 0.25 el edge_net clampado es 0.21 (> todos los mínimos de régimen); el flag solo puede dispararse con banda configurada más estrecha. - **Observabilidad gateada por materialidad**: línea `NEWS_MATERIAL` por mercado y `NEWS SUMMARY` compacto por ciclo, solo si `with_news > 0` — sin flood de los ~145 mercados/ciclo sin noticias. - **9 tests deterministas** (75/75 pasan): clamp extremo (0.845→raw 0.431→final 0.595), passthrough en banda, corroboración, umbral inclusivo, disabled, changed_decision. ## Sin cambios `NEWS_LOGODDS_WEIGHT`, flags de Manifold, thresholds de edge/régimen, exposure, sizing, payout, resolution detector, promotion_ready, trades históricos. ## Hallazgo colateral (fuera de scope, no tocado) Con macro gateado, politics tiene `adjustments=[]` → confidence = 0.4 + 0.10 (GNews) = **0.50 < MIN_CONFIDENCE 0.55** → el pipeline actual no puede ejecutar ningún trade de politics aunque el edge sea enorme. Confounder a tener en cuenta al evaluar en semanas si el fusible muerde. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chemavx added 1 commit 2026-07-01 20:28:05 +00:00
Post-mortem NVIDIA 631181: one uncorroborated high-weight signal (legacy
Manifold 0.13 at weight 0.6) flipped a 0.845 market to 0.431 and lost.
With Manifold observational-only and macro signals gated behind
is_non_price, GNews (weight 1.5) is the only live signal able to move
politics markets 20-30 pp against the order-book consensus.  This adds a
catastrophic fuse, not a fine calibration:

- apply_news_guardrail(): when |news_lo| >= NEWS_MATERIAL_LOGODDS_THRESHOLD
  (0.10) and every other signal (fg, mom, btc_dom, mfld) is below it,
  clamp the posterior to prior ± MAX_NEWS_ONLY_PROB_SHIFT (0.25).  Any
  corroborating material signal disables the clamp.  Config via env
  (NEWS_GUARDRAIL_ENABLED=true by default).
- edge_gross/edge_net computed from the clamped posterior; raw_final_prob
  preserved in reasoning (persisted via trades.reasoning — no schema
  migration) and in the NEWS_MATERIAL log line.
- guardrail_changed_trade_decision: raw edge crossed the regime gate but
  the clamped edge no longer does (fuse prevented a trade).  Note: with
  the default 0.25 band the clamped edge_net is 0.21, above every regime
  minimum, so the flag only fires with a tighter configured band.
- Observability gated on materiality: NEWS_MATERIAL per-market line and a
  compact NEWS SUMMARY cycle line, only when with_news > 0 — no flood
  from the ~145 news-less markets per cycle.
- 9 deterministic tests (extreme clamp, in-band passthrough, corroboration,
  inclusive threshold, disabled, changed_decision).

No changes to NEWS_LOGODDS_WEIGHT, Manifold flags, edge thresholds,
sizing, payout, resolution, or historical trades.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
chemavx merged commit 117d2b33b2 into main 2026-07-02 07:17:35 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chemavx/polymarket-bot#14