La prova cieca (holdout) non separa le celle vere da quelle fortunate
Il gate cieco riduce le operazioni da 34.369 a 32.639, ma il risultato per lotto scende da 10,66 a 10,49.
Idea nostra, misurata e abbandonata
Un gate cieco di 250 giorni dovrebbe migliorare la qualita' futura delle celle selezionate.
Risultato per lotto
La differenza 0.17 e' molto sotto l'errore di circa 1.9.
Come e' stato misurato
Stessa corsa con e senza gate sul manicotto da 3,750 giorni, confronto di attivita', profitto e risultato per lotto.
Verdetto stretto
Il gate riduce l'attivita' senza aumentare l'edge per esposizione.
- Il database Tester e' sovrascrivibile; mancano preset, report e snapshot.
- La regola media >0 lascia passare circa meta' delle celle nulle.
Artefatti registrati: 3 presenti · 1 esterni · 1 mancanti
Il punto di partenza: una revisione del codice
Leggendo ScanSymbolEvo è emerso che nel backtest ufficiale girano spente le due difese statistiche pure implementate:
un input dell'EA prova cieca (holdout) SPENTA
un input dell'EA correzione test multipli SPENTA
un input dell'EA qualità minima SPENTA
L'elezione è quindi interamente in-sample su ~1.120 celle provate a tornata: si sceglie e si giudica sugli stessi dati.
È questo che spiega perché il voto non predice — ed è lo stesso voto che in eleggere tutte le celle risulta non correlato col risultato futuro: il voto è un t-stat in-sample, cioè in buona parte il rumore che ha fatto sembrare migliore quella cella.
Perché erano spente (e la memoria era giusta)
Con un input dell'EA e un input dell'EA — lo stesso numero — togliere 250 giorni per il test ne lascia 250 per scegliere: il t-stat cala del 29% per pura aritmetica e gli slot si svuotano. L'EA smette di entrare.
Sulla manche lunga però la finestra è 3750 giorni: 250 di test ne lasciano 3500, e il t-stat cala del 3%. Lì la prova cieca si può permettere. Aggiunto un input dell'EA (stessa logica di un input dell'EA, che è già "solo lunga").
I numeri
| senza prova cieca | con prova cieca (lunga) | |
|---|---|---|
| operazioni | 34.369 | 32.639 |
| profitto | 17.671 | 13.177 |
| € per lotto | 10,66 | 10,49 |
| discesa | 38,7% | 40,7% |
Gli slot non si sono svuotati (206 celle lunghe elette). Ma l'edge non si è mosso: 0,17 di differenza contro un errore di ±1,9. Un decimo del rumore.
Il verdetto
Il gate è questo:
if(un input dell'EA>0 && rTe[h2][hi][di] <= 0) continue; // solo: media sul test > 0
Chiedere che la media sui 250 giorni ciechi sia positiva è una condizione che passa una volta su due per caso. Quindi il filtro toglie celle quasi a caso — e togliere celle a caso produce esattamente ciò che si osserva: meno operazioni, meno soldi, qualità media invariata.
Non è una validazione, è una decimazione. Se il test cieco separasse davvero, l'edge per lotto sarebbe salito.
Per farne una difesa vera servirebbe un gate con sostanza — per esempio "la media sul test dev'essere almeno una frazione di quella sul train" — non > 0. Non provato.
Altri due punti della revisione
- Il gate anti-zombie legge tutta la finestra ed è GIUSTO così (è il suo scopo: bocciare chi era bravo dieci anni fa). Ma se un input dell'EA arrivasse a metà finestra coinciderebbe col test cieco e i due controlli diventerebbero uno.
- Il filtro Sharpe (
mm/sg) legge la finestra piena, parte cieca inclusa: unico punto senza una lettura difendibile. È spento.
Come rifare i conti
python3 verifiche/strumenti/rifai_i_conti.py edge_per_lotto
Legge la scatola nera dell'EA: nessun numero copiato a mano, nessun dato preparato. Ma la scatola nera viene sovrascritta a ogni corsa del Tester, e oggi contiene l'ultima. I numeri qui sopra sono la fotografia di quella corsa; il comando è il metodo per rifarla.
Collegate
- Eleggere tutte le celle invece delle prime tre — dove si vede che il voto non predice: qui c'è il perché
Nel registro
Le schede di ricerca che questa verifica tocca:
- ea-cercatore — l'e-process anytime-valid: la difesa statistica fatta bene
- cercatore-griglia-falsificata — cosa succede quando la persistenza non c'è
- elezione-filtro-simbolo — il winner's curse che l'in-sample produce