Files
Adriano Dal Pastro b65f067f69 research(premium): ondata premi cross-venue auto-calcolati — CBPREM morto, KIMCHI d30 ucciso dallo scettico (spike+lag)
CBPREM (Coinbase vs feed cert, 2015->): HEDGE, hold -0.46. KIMCHI (Upbit/ECB, 2017->,
ancora 00:00 UTC verificata): EARNS_SLOT=True al marginal scorer (ADDS, robust_oos,
uplift + ogni anno) ma DSR 0.891 -> scettico obbligatorio: niente plateau
(d15/30/45/60 = 0.44/1.07/0.51/0.24) e lag +1g azzera (hold 0.74->0.14) = parameter
luck. Lezione codificata: EARNS_SLOT con DSR<0.95 -> sempre plateau+lag skeptic.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 22:23:16 +00:00

51 lines
2.1 KiB
Python

"""r0724_kimchi_skeptic — scettico sul candidato KIMCHI d30-folLF (2026-07-24).
Il candidato usciva da r0724_premium_wave con EARNS_SLOT=True al marginal scorer
(ADDS, robust_oos, persistente ogni anno) ma DSR 0.891<0.95. Due check obbligatori:
(1) PLATEAU: d15/d30/d45/d60 — un edge vero degrada dolcemente, uno spike no;
(2) LAG ESECUZIONE +1g: un segnale di flusso a 30g deve sopravvivere a 24h di ritardo.
ESITO (run 2026-07-24): d30 e' uno SPIKE isolato (0.44/1.07/0.51/0.24) e il lag +1g
lo azzera (hold 0.74->0.14, uplift blend negativo) -> SCARTATO, parameter-luck.
"""
import sys
import pathlib
ROOT = str(pathlib.Path(__file__).resolve().parents[2])
sys.path.insert(0, ROOT)
sys.path.insert(0, ROOT + "/scripts/research/alt")
import numpy as np, pandas as pd
import altlib
from altlib import candidate_daily, tp01_baseline_daily, HOLDOUT
sys.path.insert(0, ROOT + "/scripts/research")
from r0724_premium_wave import _PREM
def _sh(s):
s = s.dropna()
return float(s.mean()/s.std()*np.sqrt(365.25)) if s.std() > 0 else 0.0
def factory(D, extra_lag=0):
def fn(df, asset):
p = _PREM[asset]["kimchi"]
z = (p - p.shift(D)).shift(extra_lag)
pos = (np.sign(z) > 0).astype(float)
days = pd.DatetimeIndex(pd.to_datetime(df["datetime"], utc=True)).floor("D")
return np.nan_to_num(pos.reindex(days).values.astype(float))
return fn
B = tp01_baseline_daily()
def blend_uplift(C, w=0.25):
J = pd.concat({"b": B, "c": C}, axis=1, join="inner").fillna(0.0)
bl = (1-w)*J["b"] + w*J["c"]
hb, hbl = J["b"][J.index >= HOLDOUT], bl[bl.index >= HOLDOUT]
return _sh(bl)-_sh(J["b"]), _sh(hbl)-_sh(hb)
print(f"{'cella':<18}{'Sh full':>9}{'Sh hold':>9}{'upl full':>10}{'upl hold':>10}")
for D in (15, 30, 45, 60):
C = candidate_daily(factory(D), tf="1d")
uf, uh = blend_uplift(C)
hold = C[C.index >= HOLDOUT]
print(f"d{D:<3} lag0 {_sh(C):>9.2f}{_sh(hold):>9.2f}{uf:>+10.3f}{uh:>+10.3f}")
C = candidate_daily(factory(30, extra_lag=1), tf="1d")
uf, uh = blend_uplift(C)
hold = C[C.index >= HOLDOUT]
print(f"d30 lag+1g {_sh(C):>9.2f}{_sh(hold):>9.2f}{uf:>+10.3f}{uh:>+10.3f}")