research(hyro): HyroTrader nello specifico — consistency 40% refutata, DD 6% e' il vincolo

Addendum all'ondata rendita, su richiesta dell'operatore ("e hyrotrader").

CONSISTENCY 40%: ipotesi REFUTATA. Avevo previsto una tagliola (SKH01 ha P&L a scalino,
TP01 fa strappi di trend). Misurato: costo ~0pp a ogni leva e in entrambe le lenti,
perche' il book accumula il 10% in 130-300 giorni -> nessun giorno si avvicina al 40%
del cumulato. Prima di dichiararlo ho dovuto PROVARE che il controllo funziona (un
"costo 0" puo' essere un bug): su un book con profitto concentrato in 1-2 giorni la
regola porta P(pass) da >90% a <5%. Due iterazioni di test prima di avere un
discriminante valido (strappi ripetuti si diluiscono; sim_eval fa block-bootstrap,
non replay).

IL VINCOLO VERO E' IL maxDD 6% STATICO. Config A (book live TP01/SKH01) ha maxDD 9.5%
> 6% = strutturalmente incompatibile a leva piena: intraday a 1.0x sopravvive l'1.4%.
Config B (+XS01) ha maxDD 6.2% e Sharpe 1.13.

RACCOMANDAZIONE: config B a leva funded 0.50x (intraday P(vivo) 71% vs 32% a 0.75x;
E[payout] €7.69 vs €8.66/g — la sopravvivenza COMPONE su piu' anni, un conto bustato
smette di produrre per sempre). EV del biglietto $100k positivo in entrambe le lenti
(+$6.789 close-only, +$1.166 intraday), con ~69% di perdere la fee nella lente
pessimista. Cap $200k/trader => ~€15-30/g max: per €50/g servono piu' firm.

DISCREPANZA DICHIARATA col 24/07 (P(vivo) A@0.75x: 58% loro, 10% mio): il mio wick e' a
estrazione indipendente (piu' severo) e la finestra 2024+ e' quella dove A e' debole.
La direzione concorda (meno leva e' meglio); sul LIVELLO il numero del 24/07 (recon MTM
vero) e' piu' affidabile del mio.

Piu' l'addendum "10k su IB" al diario (analisi gia' committata in ea6743d).

Test: 217 pass (+3: consistency morde/non-morde, DD statico binding).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Adriano Dal Pastro
2026-07-25 17:10:26 +00:00
parent ea6743d6b0
commit 6f64845aa9
4 changed files with 333 additions and 0 deletions
+45
View File
@@ -180,3 +180,48 @@ def test_senza_cassa_nessun_conto_e_nessun_reddito(pl):
assert r["p_zero"] == 1.0
finally:
pl.START_EUR = old
# ------------------------------------------- 5) regola di CONSISTENCY HyroTrader
@pytest.fixture(scope="module")
def hy():
return _load("r0725_hyro", "scripts/research/r0725_hyro.py")
def test_consistency_MORDE_su_un_book_grumoso(hy):
"""PROVA CHE IL CONTROLLO FUNZIONA. Un UNICO giorno da +12% porta da solo tutto il profitto
e non arriva mai altro: con la regola 40% quel path non deve passare MAI (0.12 > 0.40*0.12),
senza regola passa subito. Se questo test non discrimina, il 'costo ~0pp' misurato sul book
vero sarebbe un bug, non un risultato.
NB sul probe: sim_eval fa BLOCK BOOTSTRAP (blocchi di 20g), non replay -> uno strappo isolato
finirebbe solo in alcuni path. Qui gli strappi sono spaziati di 20 giorni = esattamente uno per
blocco, cosi' OGNI path ne vede uno ogni 20 giorni in modo deterministico. In 40 giorni:
senza regola si passa al 1o strappo (+12% >= target 10%); con la regola servono 3 strappi
perche' il giorno migliore scenda sotto il 40% del profitto cumulato -> oltre la finestra.
"""
r = np.zeros(200)
r[::20] = 0.12
senza = hy.sim_eval(r, 1.0, consistency=False, intraday=False, max_days=40, n_paths=200)
con = hy.sim_eval(r, 1.0, consistency=True, intraday=False, max_days=40, n_paths=200)
assert senza["p_pass"] > 0.9, "senza regola un +12% secco deve passare il target 10%"
assert con["p_pass"] < 0.05, "la regola 40% deve bloccare un profitto concentrato in 1-2 giorni"
def test_consistency_non_morde_su_un_book_liscio(hy):
"""Controprova: un book che accumula il target in tanti giorni piccoli non e' toccato
dalla regola. E' il motivo per cui sul book vero il costo misurato e' ~0."""
r = np.full(400, 0.0008) # ~+0.08%/g: il 10% arriva in ~120 giorni
senza = hy.sim_eval(r, 1.0, consistency=False, intraday=False, n_paths=200)
con = hy.sim_eval(r, 1.0, consistency=True, intraday=False, n_paths=200)
assert abs(con["p_pass"] - senza["p_pass"]) < 0.02
def test_dd_statico_6pct_e_binding(hy):
"""Il maxDD 6% STATICO di HYRO e' il vincolo vero: un book con DD storico sopra il 6%
non puo' girare a leva piena. Sanity: alzando la leva la sopravvivenza funded scende."""
cfg = hy.configs()
r = list(cfg.values())[0].values.astype(float)
lo = hy.sim_funded(r, 0.5, False, 100_000.0, n_paths=400)["p_alive"]
hi = hy.sim_funded(r, 1.0, False, 100_000.0, n_paths=400)["p_alive"]
assert lo > hi