research(wave-0822): lo scettico RITIRA il difetto di contabilita' (non esiste, bit-exact) e chiude oggi il gate del 22/12 — il meccanismo e' un filtro di frequenza

This commit is contained in:
Adriano Dal Pastro
2026-08-22 17:43:33 +00:00
parent b6c0deb866
commit 1750b5a93b
5 changed files with 240 additions and 25 deletions
+88 -3
View File
@@ -356,9 +356,16 @@ def liquidita(rows: list[dict], tab: dict) -> None:
s = stat[f]
print(f"{f:<10} {s['oi']:>11} {rA[f]:>8} {s['puts']:>10} {s['two']:>10} "
f"{s['pct']:>9.0%} {rB[f]:>8}")
print("\n 📌 LA CLASSIFICA SI ROVESCIA. SOL_USDC e' 1° per open interest e ULTIMO per quote")
print(" presenti; BTC_USDC, dichiarato 'praticamente morto' (5 strumenti con OI>=100), ha")
print(" quasi tutti i put quotati a due lati. L'open interest misura posizioni ACCUMULATE,")
# la correlazione di rango si CALCOLA, non si racconta: sulle sole famiglie lineari,
# cioe' quelle su cui la domanda del filone e' stata posta.
a = np.array([rA[f] for f in LINEAR], float)
c = np.array([rB[f] for f in LINEAR], float)
rho = float(np.corrcoef(a, c)[0, 1])
print(f"\n 📌 LA CLASSIFICA SI ROVESCIA. Correlazione di rango fra i due criteri sulle sei")
print(f" famiglie lineari: {rho:+.2f}. SOL_USDC e' 1ª per open interest fra le lineari e")
print(" ULTIMA di tutte per quote presenti; BTC_USDC, dichiarato 'praticamente morto' (5")
print(" strumenti con OI>=100), ha quasi tutti i put quotati a due lati. L'open interest")
print(" misura posizioni ACCUMULATE,")
print(" non la possibilita' di negoziare ADESSO — e sull'universo lineare le due cose non")
print(" hanno quasi nulla a che vedere.")
print(" ⚠️ Ricaduta sul codice di produzione: `collect_chain.py` prefiltra a OI>=100. Sulle")
@@ -366,6 +373,28 @@ def liquidita(rows: list[dict], tab: dict) -> None:
print(" suo nome lo lascia credere. 4ª occorrenza di 'una riga presente non e' un dato")
print(" presente' — qui in versione: 'una posizione aperta non e' un prezzo negoziabile'.")
print("\n" + "-" * 104)
print("2b. E ALLORA DOV'E' LA LIQUIDITA' CHE SI VEDE NEL VOLUME? Nel mercato a BLOCCHI,")
print(" che ha un minimo d'ordine suo — e non e' raggiungibile con $635.")
print("-" * 104)
print(f"{'famiglia':<10} {'con volume 24h':>15} {'volume 24h $':>14} {'blocco min':>11} "
f"{'blocco min $':>13} {'x il conto':>11}")
for f in FAMS:
sub = [r for r in rows if r["fam"] == f]
if not sub:
continue
nv = sum(1 for r in sub if r["vol"] > 0)
vusd = sum(r["vol_usd"] for r in sub)
bm = sub[0]["blockmin"]
bm_usd = bm * tab[f]["S"] * (1.0 if not is_inv(f) else 1.0)
print(f"{f:<10} {nv:>15} {vusd:>14,.0f} {bm:>11g} {bm_usd:>13,.0f} "
f"{bm_usd/CAPITAL:>10.0f}x")
print("\n 📌 SOL_USDC ha molti piu' strumenti con volume nelle ultime 24h che quotati a due")
print(" lati: quelle opzioni si negoziano, ma via blocchi/RFQ. Il minimo di blocco e' un")
print(" fatto del venue, non un'opinione, e a $635 e' fuori portata di due ordini di")
print(" grandezza. **Non si conclude che il mercato alt non esista: si conclude che la parte")
print(" a cui questo conto ha accesso — il book continuo — e' quella sottile.**")
# ---------------------------------------------------------------- §3 la struttura
@@ -461,9 +490,65 @@ def struttura(rows: list[dict]) -> dict:
f"{len(gi):>12} {len(ge):>11}")
print(" Se la colonna `eseg.` si allontana dal target -0.28/-0.10, la struttura che si")
print(" comprerebbe NON e' quella richiesta: la griglia degli strike quotati la deforma.")
print("\n --- CONTROLLO POSITIVO: questo snapshot e' di SABATO. E' atipico? ---")
print(" Non posso aspettare una settimana, ma posso puntare lo stesso strumento su una")
print(" grandezza che il progetto ha GIA' misurato su 19 settimane di giorni feriali:")
print(" attraversare lo spread sul canonico BTC/ETH inverse costa ~10% del credito (30/07).")
for f in INVERSE:
if f in res:
print(f" {f:<4} inverse: costo di attraversamento oggi = "
f"{(1-res[f]['fv'])*100:5.1f}% del credito (atteso ~10%)")
print(" Se coincide, il sabato non sta degradando i book che il progetto conosce, e la")
print(" lettura sulle famiglie nuove non e' un artefatto del giorno. **E' un controllo")
print(" debole** (una grandezza sola, un istante), non una prova di tipicita'.")
robustezza_dte(rows)
return res
def robustezza_dte(rows: list[dict]) -> None:
"""L'UNICO grado di liberta' di questo file, esposto invece che nascosto.
VRP01 e' settimanale (tenor 7g, finestra 4-10). Qui la finestra e' stata allargata a 4-45
per dare piu' scadenze alle famiglie alt, che ne hanno poche. Allargare una finestra e'
una scelta, e una scelta va misurata: se la conclusione dipendesse da essa, sarebbe la
conclusione a essere stata scelta.
"""
global DTE_HI
print("\n --- ROBUSTEZZA: la finestra DTE e' il mio unico grado di liberta' ---")
print(f" {'famiglia':<10} {'finestra':>9} {'scad':>5} {'f_venue':>8} {'spr% corta':>11} "
f"{'cred eseg$':>11} {'maxloss$':>9}")
orig = DTE_HI
try:
for hi in (10.0, 45.0):
DTE_HI = hi
for f in FAMS:
gg = scegli(rows, f, eseguibile=True)
fv, ss, ce, ml = [], [], [], []
for g in gg:
s, lo = g["short"], g["long"]
cm = usd(s["mark"], s) - usd(lo["mark"], lo)
c = usd(s["bid"], s) - usd(lo["ask"], lo)
if cm <= 0:
continue
fv.append(c / cm); ss.append(rel_spread(s)); ce.append(c)
ml.append(loss_usd(s["K"], lo["K"], s) - c)
w = f"{DTE_LO:.0f}-{hi:.0f}g"
if not fv:
print(f" {f:<10} {w:>9} {len(gg):>5} {'n/d':>8}")
continue
print(f" {f:<10} {w:>9} {len(fv):>5} {np.median(fv):>8.3f} "
f"{np.nanmedian(ss)*100:>10.1f}% {np.median(ce):>11.2f} "
f"{np.median(ml):>9.2f}")
print()
finally:
DTE_HI = orig
print(" 📌 Da leggere sull'ORDINE, non sulla terza cifra: le quote si muovono fra un giro e")
print(" l'altro (su tre snapshot a pochi minuti ETH_USDC ha dato 0.947-0.983, le inverse")
print(" 0.847-0.942, le alt 0.79-0.87, SOL sempre negativo). Cio' che NON si muove e' la")
print(" graduatoria, e alla finestra VERA di VRP01 (4-10g) e' piu' netta, non meno.")
def profondita(rows: list[dict], fams: list[str], b: Budget) -> None:
print("\n" + "=" * 104)
print("3b. PROFONDITA' IN CIMA AL BOOK (public/get_order_book depth=5) sulle gambe scelte")