Files
PythagorasGoal/docs/diary/2026-07-25-prop-wick-accoppiato.md
T
Adriano Dal Pastro 4cb82dc474 research(prop): lente wick ACCOPPIATA — chiude il follow-up dichiarato del 25/07
La scala di conti funded era giudicata con due lenti a un ordine di grandezza di
distanza su P(>=50 EUR/g): 20.7% close-only vs 1.6-2.5% wick indipendente. Il
difetto era dichiarato (gap estratto indipendente dal rendimento del giorno) ma
il recon accoppiato esisteva solo per il book 75/25.

Qui si generalizza: sleeve TP01/SKH01 separati a risoluzione oraria (minimo
intraday esatto per qualsiasi vettore di pesi) + XS01 accoppiato dagli OHLC
giornalieri HL (recon = sleeve ufficiale a max|delta|=0.0).

FINDING: la calibrazione del wick era giusta, l'errore era l'INDIPENDENZA. Le
marginali coincidono (p50 -0.17pp identico) ma il gap e' ~3x piu' profondo nei
giorni che finiscono BENE (-1.58pp vs -0.48pp), perche' un giorno brutto chiude
sul minimo (m==R nel 26% dei giorni). Il breach si valuta sul minimo -> la lente
indipendente raddoppia i breach da daily-loss (2.0-2.9x, misurato sui giorni
storici). close-only non e' conservativa ma CIECA: 0.00% di breach ovunque.

Verifiche: (1) 1h vs 5m identici (p99 -3.06 vs -3.14pp) -> il caveat di
risoluzione del 24/07 e' trascurabile; (2) riconciliazione col 24/07 RISOLTA
(63.2% vs 58% sulla stessa finestra: non era la finestra, era la lente);
(3) bound severo su XS01 non ribalta config B.

Decisioni: funded 0.75x (non 0.50x — massimizza il payout a 3 anni, $2674 vs
$1230); scala P(>=50/g) ~6% con P(zero) 52-65%; ordine fra politiche invariato
a tutte e 3 le lenti. Book/pesi/cron INVARIATI.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-25 19:30:03 +00:00

235 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-07-25 — La lente wick ACCOPPIATA: chiusura del follow-up dichiarato
**Script:** `scripts/research/r0725_prop_coupled.py` · **Test:** `tests/test_prop_coupled.py` (13 casi)
**Segue:** `2026-07-25-rendita-capcurve-prop.md` §5 (scala prop) e §7 (HyroTrader)
**Book / pesi / cron: INVARIATI.** Nessuna decisione di portafoglio dipende da questo lavoro.
---
## 1. Cosa era rimasto aperto, e perché contava
La scala di conti funded (§5 del diario di stamattina) era stata giudicata con **due lenti** che
differiscono di un **ordine di grandezza** su P(≥50 €/g in 3 anni):
| lente | P(≥50/g) | com'era descritta |
|---|---|---|
| close-only | **20.7%** | tetto ottimista — le regole prop scattano sull'equity intraday, non sulla chiusura |
| wick indipendente | **1.6-2.5%** | pavimento pessimista — gap lognormale estratto **indipendente** dal rendimento del giorno |
Una banda 1.6%-20.7% non decide niente: è la differenza fra "scommessa a coda destra che vale i
600 euro" e "non vale la pena". E il difetto del pavimento era **già dichiarato** nel docstring:
> *«nella realtà i wick profondi stanno sulle giornate brutte (sono ACCOPPIATI): estrarli
> indipendenti aggiunge finti tuffi anche nelle giornate buone → breach spuri → stima troppo
> severa. Il modo giusto è il bootstrap delle TUPLE (ritorno, gap) come in
> r0724_goal50_intraday_mc.py, che però ha il recon solo per TP01+SKH01 → FOLLOW-UP dichiarato.»*
Questo lavoro chiude quel follow-up.
## 2. Metodo
Tre pezzi, tutti verificati contro qualcosa di indipendente:
1. **Recon per-sleeve a risoluzione oraria.** `r0724` calcola il minimo intraday del book Deribit
con i pesi 75/25 **cablati dentro**. Qui i pesi si dividono via per ottenere gli sleeve nudi
(ret, wick) di TP01 e SKH01 — così il minimo si compone **esattamente** sul path orario per
**qualsiasi** vettore di pesi. Logica invariata: exit-al-livello, SL prioritario, fee.
2. **Lente accoppiata per XS01**, che su Hyperliquid è 1d nativo. L'escursione intraday si
ricostruisce dagli **OHLC giornalieri** dei 19 alt: il book si valuta ai 4 checkpoint
O / primo estremo / secondo estremo / C, con **ordinamento condiviso** fra le gambe (le alt
co-muovono) preso nell'ordine **avverso**. Non è path-exact, ma è **accoppiato al giorno vero**,
che è tutto il punto.
*Sanity:* il recon riproduce lo sleeve ufficiale con `max|Δ| = 0.0` esatto.
3. **Le tre lenti sulla stessa macchina di simulazione** (close / indipendente / accoppiata), così
il confronto non mescola differenze di modello con differenze di lente.
---
## 3. Il risultato principale: la calibrazione era giusta, l'**indipendenza** era l'errore
Confronto delle distribuzioni **marginali** del gap (book live TP01/SKH01, 2691 giorni):
| | p50 | p90 | p99 | peggiore |
|---|---|---|---|---|
| **accoppiato (recon)** | 0.17pp | 1.03pp | 2.70pp | 5.96pp |
| indipendente (calibrazione 25/07) | 0.17pp | 0.90pp | 3.50pp | — |
**Sono quasi identiche.** La calibrazione lognormale di stamattina era buona. Quello che era
sbagliato non è *quanto* sono profondi i tuffi, ma **su quali giorni cadono**.
### 3.1 E la dipendenza va nel verso inatteso
Mi aspettavo — e lo avevo scritto — che i gap profondi stessero sui giorni brutti. **È il
contrario:**
| book | giorni | m==R | gap medio | gap \| decile PEGGIORE | gap \| decile MIGLIORE |
|---|---|---|---|---|---|
| A TP01/SKH01 (live) | 2691 | 26% | 0.38pp | **0.48pp** | **1.58pp** |
| B +XS01 (diversif.) | 937 | 20% | 0.36pp | 0.39pp | 1.30pp |
| TP01 solo | 2691 | 33% | 0.39pp | 0.59pp | 1.57pp |
| SKH01 solo | 2691 | 76% | 0.39pp | 0.40pp | 2.97pp |
| XS01 solo | 937 | 53% | 0.44pp | 0.22pp | 2.32pp |
L'escursione intraday è **~3× più profonda nei giorni che finiscono BENE** che in quelli che
finiscono male. Il meccanismo, una volta visto, è ovvio: un giorno brutto **scende tutto il
giorno e chiude sul minimo** (`m == R` nel 26% dei giorni: la chiusura *è* il peggio), mentre
un recupero a V ha un minimo profondo e una chiusura alta.
Il breach però si valuta **sul minimo**. Quindi ciò che conta è quanto gap si aggiunge **nei
giorni brutti** — e lì il gap vero è ~1/3 di quello dei giorni buoni. Un'estrazione indipendente
usa la stessa distribuzione ovunque, e così **carica i giorni brutti con la coda che nella realtà
appartiene ai giorni buoni**.
### 3.2 Quanto costa, misurato sui giorni storici (nessun bootstrap)
Frazione di giorni che sfondano la regola di daily-loss:
| book | leva | regola | close-only | **ACCOPPIATO** | indipendente | gonfiaggio |
|---|---|---|---|---|---|---|
| A (live) | 0.75 | daily 4% (HYRO) | 0.00% | 0.21% | 0.40% | **1.9×** |
| A (live) | 1.00 | daily 4% (HYRO) | 0.00% | 0.32% | 0.78% | **2.4×** |
| B (+XS01) | 0.75 | daily 4% (HYRO) | 0.00% | 0.11% | 0.25% | **2.4×** |
| B (+XS01) | 1.00 | daily 5% (FTMO) | 0.00% | 0.11% | 0.31% | **2.9×** |
Due letture:
- la lente indipendente **raddoppia** i breach da daily-loss (2.0-2.9×);
- **close-only non è "leggermente ottimista": è strutturalmente cieca.** Fa `0.00%` su ogni riga —
la regola di daily-loss **non scatta mai** sulle chiusure. Non è una lente approssimata, è una
lente che non vede affatto quel vincolo.
---
## 4. Tre verifiche — perché un "nessuna differenza" va provato, non assunto
### (1) Risoluzione: l'1h basta? — **sì, misurato**
TP01 tiene peso costante nel giorno, quindi il suo minimo intraday si può calcolare **anche a 5m**
ed è un confronto pulito:
| | p50 | p90 | p99 | peggiore |
|---|---|---|---|---|
| gamba TP01 @1h | 0.337pp | 1.358pp | 3.056pp | 5.34pp |
| gamba TP01 @5m | 0.336pp | 1.366pp | 3.136pp | 5.33pp |
Identici. **Il caveat "i wick a 1h sono un tetto, i 5m sarebbero più profondi" — portato avanti dal
24/07 — è quantificato e trascurabile.** L'ora cattura già il minimo del giorno: i 5m aggiungono
solo rumore dentro un'ora di minimo già individuata.
*Nota di metodo:* entrambe le righe riportavano `n=1865` e la cosa sembrava un errore (stessa
serie confrontata due volte). Non lo era: il filtro scarta i giorni in cui TP01 è **flat** (~30%),
che sono gli stessi a qualsiasi risoluzione. Verificato prima di accettare il risultato.
### (2) Riconciliazione col 24/07 — **la discrepanza dichiarata è risolta**
CLAUDE.md portava un ⚠ aperto: *«Discrepanza col 24/07 (P(vivo) A@0.75x 58% vs 10% mio)»*, con
l'ipotesi che fosse un effetto-finestra. **Non era la finestra, era la lente:**
| finestra | lente | P(pass) | P(vivo 1a) | E[payout/a] |
|---|---|---|---|---|
| 2019-03+ FULL | close | 53.8% | 79.7% | $2.085 |
| **2019-03+ FULL** | **accoppiato** | 48.1% | **63.2%** | $1.618 |
| 2024+ comune | close | 47.0% | 74.8% | $1.632 |
| 2024+ comune | accoppiato | 35.6% | 39.4% | $770 |
Sulla **stessa finestra piena** del 24/07 (recon MTM indipendente, che dava **58%**) la mia lente
accoppiata dà **63.2%** — accordo entro 5pp, con due implementazioni scritte separatamente. Il
**10%** del 25/07 era l'artefatto della lente indipendente. La finestra spiega il resto
(63.2% full → 39.4% sul 2024+, dove config A è debole).
### (3) Bound severo su XS01 — **non ribalta niente**
È XS01 a reggere il vantaggio della config diversificata, e il suo gap dipende da una convenzione
(ordinamento condiviso). Girato anche il bound opposto — ogni gamba al **proprio** peggio nello
stesso istante, fisicamente impossibile su 10 gambe co-moventi ma utile a delimitare l'errore:
| convenzione | gap p90 | peggiore | P(pass) | P(vivo 1a) | E[payout/a] |
|---|---|---|---|---|---|
| ordine condiviso (base) | 0.86pp | 4.81pp | 42.9% | **76.0%** | $1.144 |
| per-gamba (bound severo) | 1.83pp | 15.56pp | 32.3% | **57.6%** | $814 |
| *config A, per confronto* | — | — | 35.6% | **39.4%** | $770 |
Anche al bound severo **config B resta sopra config A** (57.6% vs 39.4%, $814 vs $770). La
conclusione non dipende dalla convenzione.
---
## 5. Cosa cambia nelle decisioni
### 5.1 La raccomandazione HyroTrader si sposta da 0.50x a **0.75x**
Config B (book diversificato, +XS01), lente accoppiata, finestra 2024+:
| leva | P(pass eval) | P(vivo 1a) | E[payout/a] | **E[payout] su 3 anni** |
|---|---|---|---|---|
| 0.50x | 28.6% | 99.5% | $412 | ~$1.230 |
| **0.75x** | 42.9% | 76.0% | $1.144 | **~$2.674** |
| 1.00x | 46.6% | 42.1% | $1.246 | ~$1.992 |
Stamattina la scelta era **0.50x**, perché la lente indipendente dava a 0.75x una sopravvivenza
del 55%. Con la lente onesta la sopravvivenza a 0.75x è **76%**, e 0.75x **massimizza il payout
atteso su 3 anni** — batte 0.50x di 2,2× e 1.00x di 1,3× (a 1.00x la sopravvivenza crolla e
l'effetto composto la punisce). L'argomento del 25/07 — *"la sopravvivenza compone su più anni"*
resta valido; è il punto in cui morde che si sposta.
### 5.2 La scala di conti: il ranking regge, i livelli no
| lente | leva | MISTO EUR/g med | P(≥10/g) | P(≥50/g) | P(zero) |
|---|---|---|---|---|---|
| close-only | 1.00x | 11.11 | 50.8% | **22.0%** | 33.9% |
| **accoppiata** | **0.75x** | 0.00 | **29.7%** | 5.6% | **52.2%** |
| **accoppiata** | **1.00x** | 0.00 | 20.8% | **6.5%** | 65.5% |
| indipendente | 1.00x | 0.00 | 5.2% | 1.0% | 81.5% |
- **L'ordinamento fra politiche SOPRAVVIVE a tutte e tre le lenti**: MISTO ≥ CONC-DIV >
CONC-2SL ≈ SPARSO. L'affermazione di stamattina — *«il confronto fra POLITICHE è robusto:
è la stessa lente applicata a tutte»* — è confermata su una lente che allora non esisteva.
**CONC-2SL (= il book live attuale su ogni conto) resta la peggiore o penultima ovunque.**
- **I livelli si spostano parecchio.** La stima onesta di P(≥50/g) in 3 anni è **~5,6-6,5%**, non
1,6-2,5% e non 20,7%. La scala è **~3-4× più probabile** di quanto diceva il pavimento e
**~3,4× meno** di quanto diceva il tetto.
- **P(≥10/g) è massima a 0.75x (29,7%)**, non alla leva piena: l'ottimo di leva della scala
coincide con quello del conto singolo.
- Il prezzo resta alto: **P(bruciare i €600) = 52% a 0.75x, 65% a 1.00x.**
### 5.3 Il verdetto sul goal, ristretto
Il 25/07 concludeva: *«una via da €600 a €50/g ESISTE con P ~2-21% in 3 anni e P(bruciare i €600)
~33-78% → scommessa a coda destra, NON una rendita»*. Con la lente onesta la banda si stringe:
> **P(≥50 €/g entro 3 anni) ≈ 6%, con P(perdere i €600) ≈ 52-65%.**
> Resta una scommessa a coda destra. Ma è una scommessa con una probabilità **conoscibile**,
> non un intervallo di un ordine di grandezza.
---
## 6. Cosa NON cambia
- **Book, pesi, cron: invariati.** Niente qui tocca il portafoglio.
- Il fronte prop **non è aperto**: questo lavoro dice *cosa costerebbe e con quale probabilità*,
non che vada fatto.
- Resta il caveat di finestra del 25/07: il **2024+** è la finestra in cui XS01 è stato scoperto e
affinato → la **taglia** del vantaggio di config B è ottimista; il **meccanismo** (correlazione
bassa → meno DD → più sopravvivenza sotto vincolo di DD) è robusto. La verifica (2) qui sopra
quantifica per la prima volta quanto pesa la finestra da sola (63.2% → 39.4% su config A).
- XS01 resta **STAT-MODE sul capitale proprio** (serve ~$20k). Su un conto funded da $100k è
eseguibile: è esattamente l'asimmetria capitale-proprio vs funded del §4 di stamattina.
---
## 7. Lezione da portare avanti
> **Un modello di rischio intraday non si valida sulla distribuzione marginale del wick, ma sul suo
> ACCOPPIAMENTO al rendimento del giorno.** Qui la marginale era calibrata quasi perfettamente
> (p50 0.17pp identico) e ciò nonostante il modello sbagliava di 2-3× sui breach, perché metteva
> i tuffi sui giorni sbagliati. Un test "i percentili del mio wick sintetico coincidono con quelli
> del recon" sarebbe **passato**, e la stima sarebbe rimasta sbagliata.
Corollario controintuitivo, da ricordare perché è il contrario dell'intuizione: **l'escursione
intraday è più profonda nei giorni che chiudono bene**. I giorni che chiudono male chiudono *sul*
minimo. Ogni regola valutata sul minimo (daily-loss, trailing DD, stop di conto) va misurata su
tuple accoppiate, mai su un wick estratto a parte.
Terzo: **close-only non è una lente conservativa, è una lente cieca** per le regole intraday —
0.00% di breach da daily-loss su ogni configurazione testata. Va usata come controllo, mai come
stima.