La regola d'uscita «piano scaduto» — FALSIFICATA a ogni valore
Duecento casi appaiati: ogni uscita temporale testata peggiora il valore atteso; la coda catastrofica resta non misurata.
Costruito, verdetto non ancora dato
Uscire dopo k volte la durata stimata, senza target raggiunto, dovrebbe migliorare il valore atteso.
Valore atteso
Anche il valore migliore tra le uscite resta sotto il riferimento senza ritiro.
Come e' stato misurato
Duecento occasioni forex appaiate sugli stessi tick, target 1 pip, rete 200 pip, orizzonte 24 ore e sei valori di k incluso mai uscire.
Verdetto stretto
Ogni k testato peggiora il valore atteso rispetto a non uscire; la protezione dalla coda catastrofica resta non misurata.
- Duecento casi e 24 ore non osservano la coda che la regola voleva limitare.
- I risultati precedenti basati su ingresso stimato sono invalidi.
Artefatti registrati: 3 presenti · 1 esterni · 1 mancanti
Data: 2026-08-18 · Strumento: verifiche/strumenti/uscita_ab.py (rilanciabile)
La regola in prova
Il piano dichiara prima quanto ci mette il mercato a percorrere la distanza del bersaglio (ritmo.dura_s, 168-264 s sul forex, per simbolo e per ora). La regola:
se sono passati k × dura_s e il bersaglio non è arrivato, si esce al mercato.
L'idea era che non fosse un time-stop — falsificato a ogni valore — perché la scadenza la portano i dati e non noi.
Il verdetto
200 occasioni forex distinte, appaiate, stessi tick, barriere di produzione (bersaglio 1 pip / rete 200), orizzonte 24 h:
La barra dietro al numero confronta i valori della colonna; la cifra resta il dato esatto.
| k (× dura_s) | bersaglio | uscite | pip totali | EV/op | vs non uscire mai |
|---|---|---|---|---|---|
| 0 — mai | 40/40 | 0 | +40 | +1,000 | — |
| 1 | 16 | 24 | −25 | −0,617 | −1,617 |
| 2 | 21 | 19 | −21 | −0,537 | −1,537 |
| 3 | 21 | 19 | −16 | −0,390 | −1,390 |
| 5 | 29 | 11 | +8 | +0,205 | −0,795 |
| 10 | 34 | 6 | +12 | +0,303 | −0,697 |
Perde a ogni k, e monotonamente: più tagli, peggio va. A k=1, 22 uscite su 24 sono in perdita.
Il meccanismo è trasparente: con un bersaglio da 1 pip e una rete a 200, l'operazione arriva quasi sempre se la lasci stare. Uscire prima converte una vittoria quasi certa in una perdita realizzata.
⚠ È esattamente la previsione che avevo stampato dentro lo strumento prima di girarlo: «se il guadagno non è netto, l'ipotesi giusta è che sia l'ennesima taratura dello stesso errore — non che serva un altro k». Non serve un altro k.
Cosa NON dice questo banco
Non dice che la regola sia inutile per tagliare la coda, ed è la ragione per cui era stata proposta. Su 200 casi in 24 ore la rete a 200 pip è stata toccata zero volte: il disastro che una regola d'uscita dovrebbe prevenire non c'è nel campione, quindi la sua prevenzione non è misurabile qui.
È la stessa struttura dello stop a 30 pip: la sua metà forte era aritmetica («non può perdere più di 30»), non statistica. Un tetto si dimostra ragionando, non contando.
Il quadro completo delle barriere, su dati validi
Stesso simulatore, k=0, 200 casi, 24 h:
| configurazione | bersaglio | rete | aperti | pip | EV |
|---|---|---|---|---|---|
| tp1 / sl200 (produzione) | 190 | 0 | 10 | +190 | +1,000 |
| tp5 / sl30 | 160 | 29 | 11 | −70 | −0,370 |
| tp1 / sl30 | 190 | 10 | 0 | −110 | −0,550 |
190 vittorie su 190, zero perdite in 200 casi. È la forma «raccogliere monetine»: si vince quasi sempre poco, si perde raramente moltissimo. E la perdita, semplicemente, non entra in una finestra di 24 ore.
⚠ Un difetto mio che invalida il banco precedente
bersaglio_ab.py (e la prima versione di questo) prendevano l'ingresso da piano.ingresso_stimato. Quel campo non è il prezzo di mercato di quell'istante: mano._prezzi lo costruisce su panel_log_intra.price, l'istantanea dell'indicatore, e quel feed è a cinque minuti. Scarto misurato dal mercato vero:
| mediana | p90 | max | |
|---|---|---|---|
| EURAUD | 6,5 | 27,6 | 35,8 |
| EURJPY | 13,2 | 25,7 | 31,3 |
| EURUSD | 18,8 | 24,0 | 63,8 |
| GBPJPY | 10,3 | 27,5 | 32,3 |
Con un bersaglio da 1 pip, barriere costruite attorno a un prezzo sbagliato di dieci non misurano le barriere: misurano l'errore. Tutti i numeri del documento precedente sono da buttare (l'ordinamento qualitativo regge, i numeri no).
Il sistema vero non ha questo difetto, ed è scritto nella docstring di _prezzi: all'EA si mandano le distanze, perché i livelli si calcolino sul fill reale. Ero io a usare una stima dove il sistema usa un contratto. Ora l'ingresso viene dai tick — ASK comprando, BID vendendo — e bersaglio_ab.py è etichettato come superato invece che cancellato.
Dove siamo, onestamente
Tre cose provate e tutte e tre bocciate, sempre sugli stessi dati e appaiate:
- bersaglio più grande (5 pip) — peggio;
- rete più stretta (30 pip) — peggio;
- uscita a piano scaduto, sei valori di k — peggio, sempre.
Il filo comune: ognuna converte un rischio di coda invisibile in perdite visibili. Nessuna crea un vantaggio, perché il vantaggio non sta nelle barriere — su mercato senza deriva l'EV è −spread comunque le si metta.
Quindi le strade che restano sono tre, e nessuna è una taratura:
- misurare davvero la coda, che nessuna finestra da 24 ore può vedere: serve più storia e più simboli — cioè il deploy dell'EA, che ne riaccende sette;
- dimensionare perché la coda sia sopravvivibile, che è una decisione, non una misura;
- trovare un vantaggio vero — e la direzione l'abbiamo misurata ≈ 0.