0adc69a357
18 agenti su book market-neutral a 2 gambe BTC/ETH (eseguibili a $600, a differenza di XS01), giudicati sul MARGINALE vs TP01 (altlib.marginal_vs_tp01), non sullo Sharpe assoluto. Lab: ortholib.py (eval_book leak-free a 2 gambe + causalità + eseguibilità@600), ortho_score.py (giudice), meta_ortho.py (corr mutua + persistenza multi-cut), sleeve_rv.py (curated, SELECTION- BIASED, non deployare). Esito: 17/18 "ADDS" -> gonfiato dall'hold-out corto fisso-2025 (finestra ETH-bleed dove TP01 è debole). Diagnosi orchestratore: collassano a 8 bet (corr 0.43); persistenza multi-cut e selezione walk-forward smascherano i 2025-only (kalman/xs2). Scettico indipendente: basket selection-free ha uplift pre-2025 +0.027 = 49° percentile di asset-rumore corr-zero (matematica di diversificazione, non segnale); corr(Sharpe-TP01, uplift) -0.87 (è un HEDGE dei drawdown di TP01); muore a 0.30% RT. Verdetto: NIENTE in live. Resta solo TP01. Lezione: lo scorer marginale va indurito (multi-cut + null-asset-rumore + distinguere hedge da alpha). Diario 2026-06-21-ortho-tp01-relative-value.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
"""sleeve_rv — CURATED relative-value sleeve: equal-weight of the 4 ortho books whose
|
|
marginal uplift to TP01 is POSITIVE AT EVERY hold-out cut (2022/23/24/25), i.e. persistent
|
|
rather than the 2025 ETH/BTC-bleed artifact. Two price-based + two implied-vol-based, so
|
|
the legs are mechanism-diverse (mutual corr < 0.6).
|
|
|
|
This is ONE executable 2-leg BTC/ETH book (the averaged legs stay within the $300/asset
|
|
cap because each sub-book is capped 0.5/leg and the mean of capped weights is capped).
|
|
|
|
book(btc, eth) -> (w_btc, w_eth)
|
|
Use it as a small market-neutral satellite alongside TP01 (forward-monitor first).
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import importlib.util
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import numpy as np
|
|
|
|
HERE = Path(__file__).resolve().parent
|
|
sys.path.insert(0, str(HERE))
|
|
|
|
# the persistent-at-every-cut representatives (mechanism-diverse)
|
|
MEMBERS = [
|
|
"agent_14_dvol_spread",
|
|
"agent_04_ratio_donchian",
|
|
"agent_03_relstrength_gated",
|
|
"agent_15_vol_premium_tilt",
|
|
]
|
|
|
|
|
|
def _load(name: str):
|
|
p = HERE / "agents" / f"{name}.py"
|
|
spec = importlib.util.spec_from_file_location(name, p)
|
|
mod = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(mod)
|
|
return mod.book
|
|
|
|
|
|
_BOOKS = [_load(n) for n in MEMBERS]
|
|
|
|
|
|
def book(btc, eth):
|
|
wbs, wes = [], []
|
|
for b in _BOOKS:
|
|
wb, we = b(btc, eth)
|
|
wbs.append(np.nan_to_num(np.asarray(wb, float)))
|
|
wes.append(np.nan_to_num(np.asarray(we, float)))
|
|
wb = np.mean(wbs, axis=0)
|
|
we = np.mean(wes, axis=0)
|
|
return np.clip(wb, -0.5, 0.5), np.clip(we, -0.5, 0.5)
|