Logbook operativo · aggiornato 29/07/2026 17:16

Sistema trading — Oscillatrici & Cycle Retest

Un mese esatto dal reset del progetto (24 giu → 18 lug). Due sistemi paralleli su futures KuCoin, leva 10×. Filosofia: ogni intuizione si testa coi dati prima di rischiare capitale — censimenti, split train/test, test di permutazione, verifica adversariale.

Attivo — agisce sui trade Shadow — osserva e registra, non agisce Spento / bocciato
Capitale combinato (reale, dal 24/6)
5.816 USDT
Cycle LONG paper
+1.241 / 55 tr
Cycle SHORT paper
+2.988 / 51 tr
Registro oscillatrici
199 eventi · 8.967 snap
Bot REALI
OFF

Cycle Retest

sistema maturo · validato

La strategia principale, in sviluppo dal 24/6. Compra il retest di un livello: long sul dip di RSI ipervenduto, short sul fade di RSI ipercomprato (modulato dal semaforo BTC). È il sistema che genera i numeri veri; il reale è pronto ma spento.

Come funziona

Long = dip-buy: RSI <30 ipervenduto compra; 35-42 borderline; >50 evita (salvo payoff estremo). Schiavo del semaforo BTC (ogni bypass testato = perde).

Short = fade modulato: RSI ≥60 ipercomprato ok; pericolo = RSI basso <42 (rimbalza). Contro-regime validato retro (+11.3k su 267 episodi).

Entrata book-aware (smart entry sui muri), leva 10×, un trade alla volta sul reale.

Stats dal 24/6 — lo short è il cavallo forte

LatoTradeWRPnLMedia/trade
LONG5564%+1.241+22,6
SHORT5180%+2.988+58,6

Stesse occasioni (≈50 trade a testa), ma lo short rende 2,5× per trade. Alta resa = alta varianza: vive di pochi colpi grossi (es. SKYAI +669). 50 trade = campione ancora corto.

Regole attive

Stop asimmetrico

LONG −4% · SHORT −6%. Backtest 60gg: il −6% short evita gli stop-hunt (1 candela vol 40-100×). Rete garantita al fill.

Trailing adattivo

Retrace 0.6 / 1 / 1.5% secondo la fase. Validato su 32 short (30/32 positivi) — batte i trailing fissi. I fissi bocciati.

Gate PUMP-STRETCH

ret24h >6% & ampiezza >8× → skip. Primo shadow promosso a gate: +352 di perdite evitate, triplo riscontro.

Filtro EVITA (fiducia v1)

57 setup saltati dal 24/6: would-be WR 30% vs 68% dei presi = +2000 salvati. Filtro binario, non graduazione.

Timeout & Protect

Timeout no-momentum solo long (60m). Protect-exit short nella banda +1…2%. Gli short non hanno timeout (dottrina).

Scale-in & Min-book

Scale-in avverso ≥0.45%, max 2 add. Book minimo 300 (sotto = WR 0% storico). Uscita book-aware anti-slippage.

Oscillatrici

laboratorio · sperimentale

Nata dall'idea di SOXL: le coin che oscillano (ping-pong pavimento↔tetto). Compra il pavimento (long) / vendi il tetto (short), target +2% / stop −6%, dimensionato dal book. Un registro raccoglie ogni retest con tutte le feature; un simulatore paper testa la strategia; un mirror la specchierebbe sul reale.

Il registro & il simulatore

Registro: 401 eventi risolti (ogni retest → feature + esito vero coi −6% seguendo le candele 24h) + 18.752 snapshot densi (ogni 5 min con rendimenti futuri).

Sim paper: capitale 591 (da 1000, scala book‑sized). Entrata al livello, +2% fisso, stop −6%, cap margine 300. 39 chiusi (30 vinti, WR 77%), 125 skip. Serve a raccogliere dati sui candidati shadow — ora 8 contatori (nati‑morti, coin‑bruciata, trail‑armato, revenge‑flip, muro‑addosso, inversione‑profilo, fill‑fantasma, ordine‑dopo). Dal 20/7 una guardia anti‑fantasma scarta i fill a prezzi mai stampati (feed book su illiquide) e un circuit‑breaker ferma le entrate dopo il 3° stop del giorno.

Il mirror reale — spento

Specchia il sim sul conto reale (entra quando il sim entra). Costruito e attivato, poi fermato.

Il primo trade reale (SNXX long, full-size + stop tolto a mano) ha azzerato il conto: 194 → 0,81. La rovina non è stata un filtro mancante — è stata sizing pieno senza stop. Il mirror ora è inerte.

La scoperta della disciplina. Testati rigorosamente decine di filtri d'ingresso (livelli, coltello, dump, regime, RSI, trend, combinazioni dense long+short, entrata −3%, trailing): nessun edge meccanico affidabile. Ogni "segnale" era concentrato in 2-3 coin, spariva fuori campione, indistinguibile dal caso.

Il "long è in perdita" era un artefatto SNXX (le altre coin ai livelli rendono +12,7 di EV). Il vero limite è il bracket +2/−6 che pretende ~75% di win-rate. E l'edge reale non è predire l'ingresso — è giudizio + risk management (i trade manuali di Teo: +158 in 4 giorni).

Candidati in shadow (l'unica pista viva)

Muro-tetto sui long candidato #1

Il 60% dei long crollati (stop veri) aveva un soffitto venditore ≥100× sopra la testa, vs 20% dei vinti. E — cosa rara — sopravvive togliendo SNXX (50% vs 10%).

Meccanismo sano: upside tappato → reverte e cratera. Ora in raccolta; conferma a ~15-20 stop nuovi.

Approach coltello

Flagga i long comprati in caduta violenta (approach 15m < −1.2%). Ha beccato il perdente SNXX, ma non regge fuori campione (è SNXX travestito) e taglierebbe i winner di coda.

Resta shadow, non blocca. Osservato in parallelo al muro-tetto.

Dottrine trasversali

le leggi

Stop — la rete non-negoziabile

Cycle: −4% long / −6% short. Oscillatrici: −6%. Con size pieno lo stop non è opzionale.

Dimostrato su SNXX: −114 con stop vs −194 senza = la differenza tra sopravvivere e azzerarsi.

Trailing — sì al cycle, no all'osc

cycle Adattivo, validato (batte i fissi). osc Testato e bocciato: il vantaggio erano 3-5 pump SNXX, +67% di varianza, il 26% dei winner diventava perdita. Meglio il +2% fisso.

Sizing — la leva della rovina

Full-account su un trade = rovina certa al primo trade storto (successo su SNXX). Rischiare il 10-25% del conto = probabilità di rovina ≈ 0.

La stessa ruin-simulation lo diceva; poi è successa dal vivo. Il paper può mettere 1000/trade; il reale deve rischiare una frazione.

Shadow finora

in osservazione

Esperimenti che girano in paper/registro senza toccare il reale, ognuno con una soglia di decisione. Si promuovono a regola solo se reggono; altrimenti si cestinano. Barra = progresso verso la soglia.

Cycle LONG

EsperimentoDalEsitoVerso decisioneStatoNota
experimental solo-equity7/74/5 · +774
5 / 10-15⚠ +774 ma il 77% e' UN solo trade (SKHY, pump azionario = blind spot equity); tolto resta +181 su 4 -> non e' un edge
vol-gate trailing long16/712/12 · +1969
12 / 15-20⚠ 11/11 INGANNEVOLE: exit=trailing = vincitori per definizione (i persi escono dallo stop); il trailing e' gia' live dal 22/7 -> niente da promuovere
muri/volume @exit14/723/29 giusti (79%)
29 / 15verdetto in DUE direzioni (uscire / tenere); a n grande diventa un preavviso
timeout18/617/27 giusti (62%)
27 / 15verdetto sequenziale (stop prima = giusto chiudere, +2% prima = sbagliato); protettivo: tenere aperto costava -589 (asimmetria code)
early no-momentum21/65/9 giusti (55%)
9 / 15verdetto sequenziale (stop prima = giusto chiudere, +2% prima = sbagliato); neutro anche a soldi (+2), da accumulare
turn-protect29/67/9 giusti (77%)
9 / 15verdetto sequenziale (stop prima = giusto chiudere, +2% prima = sbagliato); molto protettivo: tenere costava -1327
re-entry post-exit (ritraccio -2.5%)21/7108 setup · 73 fill · net -452
49 target / 24 stopdall'analisi trailing: 71% dei vincitori continua >2% entro 6h ma dopo ritracci >2.5% -> limit a exit-2.5% (6h), target +2/stop -4/timeout 24h; pre-registrata, niente deploy
flip-short dei long "simile a perdite"21/710 flag · 10 chiusi · pess -3300
10 / 15-20 fillwatcher: long nuovi marcati perdite -> flip short virtuale col ruleset fedele (edge_room, protect, 2 varianti fragile); retro Set-P +97/+639/+1069 vs +33; controllo -1480; decisione a 15-20 fill nuovi

Cycle SHORT

EsperimentoDalEsitoVerso decisioneStatoNota
reversal PROMOSSO (reale)18/78/13 · +240
13 / 10-15IN PROVA dal 18/7: trade REALI nel capitale; si ridisattiva se degrada
opposite-hold PROMOSSO (reale)18/7
0 / 10-15IN PROVA dal 18/7: trade REALI nel capitale; si ridisattiva se degrada
margin_kill_flip (CYCSF)17/72/2 · +294
2 / 15-15tendenza verde
muri/volume @exit12/746/61 giusti (75%)
61 / 15verdetto in DUE direzioni (uscire / tenere); a n grande diventa un preavviso
early-profit5/75/28 giusti (17%)
28 / 15verdetto sequenziale (stop prima = giusto chiudere, +2% prima = sbagliato); TAGLIA I VINCENTI: tenerli valeva +415; a n=15 candidato a spegnersi
turn-protect27/64/9 giusti (44%)
9 / 15verdetto sequenziale (stop prima = giusto chiudere, +2% prima = sbagliato); WR basso ma EV pari (-9): non urge decidere
no-adaptive-tightening (trail 1.5 liscio)21/733 trade · delta +115
33 / 20 nuoviCF: trail flat 1.5% senza tight 0.6/mid 1.0 sui trailing-exit; retro analisi +1619 (n=22), replay shadow +115 (6 migliorati/27 peggiorati, runner-driven); decisione a 15-20 trade NUOVI
OK-ingannevole (semaforo verde + tratti che urlano)21/77 flag · net -175 · skip CF +175 · flip CF -125
7 / 15short con checklist>4 "OK" MA v1-perdite/pompa/fuori-scala: la falsa fiducia del semaforo (SOXL -612, BEAT -369 a 5.25 OK); skip pre-registrato, decisione a n>=15

Promossi — validati e passati al reale

EsperimentoLatoDalEsitoDecisioneNota
reversal-watch (CYCSR)short30/67/7 · +654PROMOSSO 18/7ghost +654 7W/0L -> reale nel capitale (vedi reversal PROMOSSO)
btc_opposite_hold (CYCSO)short15/76/6 · +1189PROMOSSO 25/7ghost +1189 6W/0L -> reale nel capitale (vedi opposite-hold PROMOSSO); OPPOSITE_HOLD_PROMOTED=1
EXP-VETO-ENTRY (bypass BTC neutro)short9/728/30 · +1272PROMOSSO 25/726 trade 24W (92%), +1020; time-split 92/92, 24 simboli. Gia' attivo in paper (CYCLE_EXPERIMENTAL_VETO_OVERRIDE_BTC=1) e mirrorato al reale (3 trade)
thin-wall relativoshort15/721/22 · +1275PROMOSSO 25/718 trade 17W (94%), +1024; 16 simboli. Metro relativo gia' gate attivo in paper; profitto concentrato nella 2a meta'

Bocciati — decisi e archiviati

EsperimentoLatoDalEsitoDecisioneNota
short_revenge (CYCSV)short14/73/5 · -353DISATTIVATO 25/7revenge -353 su 5 (3W/2L); env CYCLE_SHORT_REVENGE_WATCH_ENABLED=0
btc_wait_reprice (CYCLW)long16/76/10 · -34DISATTIVATO 25/7ghost -34 su 10 (60% win, losers>winners); env CYCLE_BTC_WAIT_REPRICE_ENABLED=0
experimental cryptolong7/76/11 · -452SPENTO su cryptobypass del semaforo BTC bocciato sulle crypto; la variante equity vive negli attivi long
pump-stretch vetolong12/616/44 · +242BOCCIATO come veton=44 oltre soglia: i flaggati chiudono +242; resta l'idea mezzo-size

Fantasmi — bilancio virtuale (fuori capitale)

Trade che il bot ha skippato o chiuso presto, simulati dagli shadow: totale +1751 · margin-flip +294 (2) · opposite-hold +1189 (6) · revenge -353 (5) · reversal-watch +654 (7) · wait-reprice -34 (10). Non toccano il capitale paper.

ChiusuraFamigliaLatoCoinEntry → ExitNettoUscita
2026-07-18T09:43opposite-holdshortWLD0.3881 → 0.381274+159.79trailing
2026-07-17T22:28opposite-holdshortO0.590115 → 0.581263+134.55trailing
2026-07-17T14:09opposite-holdshortRESOLV0.02178 → 0.0212355+232.05trailing
2026-07-17T01:02opposite-holdshortENA0.0850341 → 0.0829083+231.89trailing
2026-07-15T18:12opposite-holdshortPEPE2.88e-06 → 2.808e-06+231.89trailing
2026-07-15T10:47opposite-holdshortDRAM61.85 → 60.5109+199.28trailing
2026-07-13T17:58reversal-watchshortCAP0.01963 → 0.0194478+69.13turn_protect
2026-07-12T14:08reversal-watchshortBEAT2.68433 → 2.64407+98.68trailing
2026-07-09T05:44reversal-watchshortCAP0.02286 → 0.0219456+226.73trailing
2026-07-08T22:19reversal-watchshortVANRY0.007421 → 0.00734462+43.90early_profit_protect
2026-07-07T10:07reversal-watchshortRAVE0.31954 → 0.316785+28.49early_profit_protect
2026-06-30T15:01reversal-watchshortH0.07894 → 0.0765718+147.53trailing
2026-06-30T09:16reversal-watchshortXLM0.18544 → 0.183962+39.61turn_protect
2026-07-28T20:07margin-flipshortESP0.07301 → 0.0711848+139.77trailing
2026-07-17T20:53margin-flipshortTAC0.0031859 → 0.00313168+154.23trailing
2026-07-23T19:02revengeshortACE0.08085 → 0.08372-366.98stop
2026-07-23T05:33revengeshortBLESS0.007816 → 0.0075548+94.24trailing
2026-07-23T00:46revengeshortAKE0.0017116 → 0.00168593+134.55trailing
2026-07-16T15:33revengeshortHOME0.0126903 → 0.0124945+138.66trailing
2026-07-14T15:58revengeshortM1.19421 → 1.23729-353.21stop
2026-07-23T21:12wait-repricelongDODO0.01923 → 0.01932+33.93timeout_no_momentum
2026-07-23T20:08wait-repricelongESPORTS0.0292616 → 0.0297005+134.55trailing
2026-07-23T18:46wait-repricelongERA0.0964343 → 0.0983961+186.64trailing
2026-07-23T17:56wait-repricelongACE0.08255 → 0.080352-278.26stop
2026-07-23T07:46wait-repricelongAVAAI0.00798666 → 0.0081873+233.24trailing
2026-07-23T05:07wait-repricelongBLESS0.00809823 → 0.00781152-366.04stop
2026-07-23T05:06wait-repricelongXEC7.57e-06 → 7.69356e-06+120.29trailing
2026-07-18T12:06wait-repricelongVELVET0.50055 → 0.511214+109.82trailing
2026-07-16T12:04wait-repricelongSKL0.00441547 → 0.004359-139.90timeout_no_momentum
2026-07-16T11:22wait-repricelongUB0.0769955 → 0.0765657-67.83timeout_no_momentum

Order-book al fill — il reale prende l ingresso?

Snapshot OB attorno al fill (pre / fill / post 30min). CYCLE entra col LIMIT (o riempie al tuo prezzo o non entra) · OSC entra a MERCATO (entra sempre ma paga slippage). Slippage: + = prezzo MIGLIORE del voluto, − = costo pagato. Recorder ob_fill_recorder.py.

SistemaCome entraFillCatturabili (limit)Slippage medioSpread medioFav. max medio
cycle🎯 LIMIT2012 (60%)+0.083%0.081%+0.35%
osc⚡ MERCATO4612 (26%)-0.213%0.258%+2.34%

In parole: cycle = LIMIT: slippage medio +0.08% → prende pulito, spesso a prezzo migliore · osc = MERCATO: slippage medio -0.21% (spread 0.26%) → paga l ingresso sulle coin a spread largo; un LIMIT paziente potrebbe risparmiarlo. Chi entra a LIMIT (cycle) prende al suo prezzo o non entra; chi entra a MERCATO (osc) entra sempre ma paga lo spread. Se sull osc convenga un limit invece del market, lo misura lo shadow limit-vs-market nella notifica TG.

🔬 Limit vs Market (osc) — conviene il limit paziente?

41 catture osc (35 limit si riempiva, 6 mancava). Risparmiato +231.2 · perdita evitata +0.0 · profitto perso -201.8 (vincitori mancati). Saldo: +29.4 — il LIMIT conviene

Coinfill/totrisparmev.perdpersi.vinsaldo
SNXXUSDTM11/12+122.3+0.0-64.2+58.0
AVAAIUSDTM2/2+23.7+0.0-0.0+23.7
PUMPUSDTM5/5+23.3+0.0-0.0+23.3
XPINUSDTM2/2+4.6+0.0-0.0+4.6
AKEUSDTM1/1+0.0+0.0-0.0+0.0
VANRYUSDTM1/1-1.0+0.0-0.0-1.0
ONUSDTM3/4+24.7+0.0-26.9-2.2
BUSDTM0/1+0.0+0.0-23.8-23.8
BANKUSDTM4/5+16.7+0.0-42.2-25.5
ESPORTSUSDTM6/8+17.0+0.0-44.7-27.7
SimboloLatoSist.EntryCatt.SlippageSpreadFav maxAvv max
SNXXUSDTMLONGosc7.89898no-0.3930.301+1.28-2.96
SNXXUSDTMSHORTosc7.72014no-0.5200.291+1.56-6.47
LAUSDTMLONGcycle0.0576105si+0.0010.124-0.24-2.31
ESPORTSUSDTMSHORTosc0.02729si+0.1830.340+1.17-0.49
BUSDTMLONGosc0.1695no-0.7910.179+0.96+0.52
OUSDTMSHORTcycle0.501984no-0.2560.075+1.04-0.40
COAIUSDTMLONGcycle0.33838no-0.2330.058+0.44-1.78
SNXXUSDTMSHORTosc7.49no-0.4010.319+2.00-0.60
SNXXUSDTMLONGosc7.26no-0.5510.304+2.89+0.21
ONUSDTMSHORTosc0.3456si+0.4770.249+2.07-2.75
ONUSDTMLONGosc0.33004no-0.2640.269+2.51+0.11
ESPORTSUSDTMSHORTosc0.02774no-0.5050.350+1.59+0.22
SNXXUSDTMSHORTosc8.19no-0.1220.281+0.61-4.09
ESPORTSUSDTMLONGosc0.02678si+0.1490.341+2.52-0.37
SNXXUSDTMLONGosc7.75si+0.2580.306+2.77-0.26
1000BONKUSDTMSHORTcycle0.003027si+0.0000.049+0.25-1.60
ESPUSDTMSHORTcycle0.07301si+0.0270.075+1.33-0.12
ESPORTSUSDTMLONGcycle0.02759si+0.0360.318+0.11-1.20
SNXXUSDTMSHORTosc8.29no-0.3620.395+7.42-0.06
SNXXUSDTMLONGosc8.58no-0.2330.377+1.63-5.94

Oscillatrici — candidati shadow

CandidatoDalSegnaleVerso decisioneStatoNota
muro-tetto sui long17/79 flag · 1 stop
ridimensionatoRETROCESSO 19/7: in sim 1/2 perdenti flaggati e 0 vincitori, MA sul registro NON separa (32% vs 30% stop, n=38); si continua a contare
approach coltello17/755 flag · 7 stop
deboleSNXX-travestito, tiene per contare
vol-gamba alto (big-mover)19/7sel 22% big vs 13% resto (n 770/362)
1132 / 300 eventigamba che arriva CON volume (sopra 1.36x): unico segno che replica OOS (22 vs 8); famiglia volume emersa 3 volte
runner-hunt (post-target)19/775/111 cont ≥+4%
111 / 30target resta FISSO; cerchiamo le coin delle risalite grandi (finestra after aperta; top: AKE +277% · ESPORTS +93% · BANK +75%)
nati-morti (taglio se non parte)19/75m +233 · 10m +189 · 15m +244
137 / 60ipotesi: mai in favore +0.5% nei primi X min → taglia; i 5 stop erano tutti MFE≤0.3 ma il taglio becca anche i vincitori lenti (14 su 5m) — delta flat-300, si decide a n≈60
coin bruciata (blacklist giorno)19/7saltati 16 · delta -359
16 / 12dopo uno stop la coin salta il resto del giorno (caso B doppio-stop 19/7); delta positivo = la regola avrebbe salvato (flat-300)
trail-armato oltre target19/75 run · 0 peggio · delta +358
38 / 45trail SOLO oltre target+1% (give 1%, congelati); prima del braccio ritorno al target = esci al target come oggi. Il guadagno viene da pochi runner: si decide a n≈45 vincitori
inversione-profilo (gira gli stop)20/716 flag · 6 stop ribaltati · swing +845
16 / 15candidato col profilo-stop (long coltello IN ALTO nel range / short squeeze IN BASSO) GIRATO invece che aperto; soglie congelate, il piu' forte dei candidati (decide a n≈15)
revenge-flip (allo stop)20/719/25 target · net -30
25 / 20entrare nella direzione che ci ha appena stoppato, al prezzo di stop (come revenge cycle)
muro ADDOSSO <0.8% (tossico)20/720 trade · net -188
20 / 20 stopmuro del proprio lato a meno di 0.8%: 4/9 stop vs 2/30 win nel workflow; no-trade shadow
👻 fill fantasma (depurato)20/73 trade · -31 da togliere
guardia LIVEentry a prezzi MAI stampati (feed book su illiquide); guardia anti-fantasma attiva, baseline depurata
daily-open sniper (paper)19/76 colpi · 3 ok · net -160
6 / 20compra il burst delle 00:00 UTC (vol≥50x, move≥+1.5%) ed esce a +30m; storico 6 mesi 14/16 mediana +4.2%; flat-300 leva 5, cron notturno
flip osc SHORT→long21/70 trade · 0 win (0%)flip +0 vs reale +00 / 15⚠ payoff FRAGILE (vinci +188 fisso / perdi fat-tail: -4398 lorde). Utile +1110 ma il 47% e' un solo simbolo (AVAAI). NON promuovibile
flip osc LONG→short21/70 trade · 0 win (0%)flip +0 vs reale +00 / 15⚠ +830 ma il 96% e' BANK: tolto resta +31 su 52 = rumore. Payoff fragile (-6528 lorde). NON promuovibile
flip-se-chip-forte21/798 trade · 73 win (74%)flip -1309 vs reale +78898 / 20⚠ tocca la pre-reg (n>=20, flip>reale) MA time-split -526/+2836 = utile TUTTO recente, non stabile (flip-vittorie gia' fallito OOS). ZERO flip su denaro reale

Storico giornaliero — n·PnL per esperimento

Ogni riga è uno snapshot (data + ora). Celle verdi ↑ se il PnL sale, rosse ↓ se scende (vs giorno prima). Confronta le colonne nel tempo per vedere crescere (o affondare) ciascuno shadow.

SnapshotC-S
revers
C-S
opposi
C-S
revpro
C-S
opppro
C-S
margin
C-S
expvet
C-S
thinwa
C-S
reveng
C-L
waitre
C-L
expcry
C-L
expequ
C-L
volgat
C-L
pumpst
2026-07-29 17:167·+6546·+118913·+240·2·+29430·+1272 ↑22·+1275 ↑5·-35310·-3411·-4525·+77412·+196944·+242
2026-07-28 21:247·+6546·+118913·+240·2·+294 ↑29·+1233 ↑21·+1236 ↑5·-35310·-3411·-4525·+77412·+1969 ↑44·+242
2026-07-27 23:587·+6546·+118913·+240 ↓·1·+15427·+111019·+11135·-35310·-3411·-4525·+77411·+184844·+242
2026-07-26 19:407·+6546·+118911·+332 ↓·1·+15427·+1110 ↑19·+1113 ↑5·-35310·-3411·-4525·+77411·+184844·+242
2026-07-25 19:367·+6546·+118910·+494 ↑·1·+15426·+1020 ↑18·+1024 ↑5·-35310·-3411·-4525·+77411·+1848 ↑44·+242
2026-07-24 07:307·+6546·+11897·+72 ↑·1·+15422·+537 ↑14·+540 ↑5·-353 ↓10·-34 ↑11·-4525·+77410·+1757 ↑44·+242
2026-07-23 07:307·+6546·+11894·+67 ↓·1·+15420·+325 ↑12·+329 ↑4·+14 ↑5·-344 ↓11·-4525·+774 ↑7·+1202 ↑44·+242
2026-07-22 07:307·+6546·+11892·+89·1·+15417·+21 ↑9·+24 ↑2·-2153·-9811·-4523·+6575·+98844·+242
2026-07-21 23:507·+6546·+11892·+89 ↓·1·+15416·-35 ↓8·-31 ↓2·-2153·-9811·-4523·+6575·+98844·+242
2026-07-20 14:317·+6546·+11891·+183·1·+154·5·+496 ↑2·-2153·-9811·-4523·+6575·+98844·+242
2026-07-19 18:187·+6546·+11891·+183·1·+154·4·+406 ↑2·-2153·-9811·-4523·+6575·+98844·+242
2026-07-18 19:417·+6546·+11891·+183·1·+154·3·+2712·-2153·-9811·-4523·+6575·+98844·+242

Cambiamenti — registro giornaliero

29/7
  • 17:16 — Bilancio INJ (domanda Teo: ti penti?): processo ok (rischio definito -1.4%%, pagato -1.4%%) ma DUE errori ammessi: (1) target alla mediana ignorando il p25 della mia stessa distribuzione (prezzo arrivato a +1.77%%, p25 era +1.5%%: un parziale li pagava); (2) comprato CONTRO il regime (quella notte lo scanner dava short a target sull 88%% delle coin) - col senno di poi la scelta giusta era NON comprare niente, e anche lo short avrebbe vinto (4.568->4.466). Bilancio pronostici miei in chat: 0/2. NUOVO SETUP dato a Teo (stavolta regime-allineato): BZ SHORT - mercato 77%% coin sotto zero a 24h, BZ +5.6%% controcorrente al 96%% del range, RSI 74, VOLUME IN CALO 0.84x (grind in esaurimento, NON pompa attiva: profilo dove gli short manuali di Teo fanno 79%%), spread 0.034%%, book 43.9k. Livelli: entry limit 87.95-88.10 (paziente), stop 89.00 duro (+1.1%%, sopra max 24h 88.15), parziale meta a 86.70 (+1.5%% = lezione p25), resto trailing verso 85.30+. Se il limit non riempie il trade non esiste. Applicate TUTTE le lezioni: regime, entrata paziente, parziale al p25, stop duro, runner, orario (finestra short 20-04 fa da se col limit).
  • 15:34 — Domanda Teo: come avere SEMPRE 80-100%% a trade? Risposta dai suoi 176 trade (_q80.py): IMPOSSIBILE, la materia prima non esiste - il prezzo e passato da +8%% (=80%% margine a 10x) solo 5 volte su 176 (3%%), da +10%% 3 volte (2%%). Scorciatoia leva = suicidio sui PROPRI VINCENTI: MAE dei vincenti p90 -2.31%%, quindi a 50x (liq ~-1.8%%) il 19%% dei suoi VINCITORI viene liquidato prima di vincere, a 30x il 7%%; e ogni perdente a 50x e -100%%. QUELLO CHE E A PORTATA: nei suoi top 20 il prezzo arrivava a +6.6%% medio e lui incassava +3.4%% = LASCIATA META (64%% di prezzo cumulato). Formula realistica: perdita max fissa -2%% prezzo (-20%% margine), parziale a +2%%, il RESTO CORRE con trailing largo (unico modo di esserci nei 3/100 che offrono il +8-10%%), compounding a +15-20%% medio invece di +80%% una tantum. L 80-100%% si RACCOGLIE dalla coda sopravvivendo agli altri 97, non si pretende dal singolo trade.
  • 15:26 — TRADE DI TEO UNO A UNO (_unoauno.py, 176/176 con klines, dettaglio in real_trades_unoauno.json). SOFFERTI-E-PAREGGIATI (MAE<=-2%%, chiusi ~pari): 8 trade, il peggiore PENGU long 29k nozionale andato -5.3%% sotto e chiuso a 0.00 dopo ore; ZEC short 7/6 -6.1%% sotto chiuso -0.41%%; NEAR short 33k -2%% sotto ma chiuso +0.68%% (+189, la pazienza li ha pagato). FLIP: sugli 8 sofferti fa +2%% OGNUNO ma e TAUTOLOGICO (MAE<=-2%% implica che il lato opposto ha toccato il target: si riconoscono solo col senno di poi); applicato onestamente a TUTTI i 176 = -3750, BOCCIATO. LA MINIERA E L ENTRATA PAZIENTE: limit sotto il suo prezzo applicato uniformemente a tutti: -0.5%% -> +1886 (123 presi); -1.0%% -> +2912 (95 presi, TRIPLICA facendo meta dei trade); -2.0%% -> +785 (50, troppo avido). Teo insegue il prezzo di ~1%% sistematicamente: quel punto e la differenza fra +872 e +2912. Caveat: fill al limit pieno, exit ai prezzi reali, fee taker (maker sarebbe meglio), -1%% e zona non costante (3 valori provati). Coerente con la scoperta limit-paziente dell osc (+1016) e con lo spread-che-domina: TUTTO il sistema converge sull esecuzione.
  • 15:13 — CORREZIONE IMPORTANTE sullo schema dei trade di Teo (aveva ragione lui): pesando per SOLDI invece che per movimento %% (nozionale ricavato dalle fee: noz=fees/0.0012), il totale 90gg e +872 USDT, NON negativo. Tabella per size: <2k n=132 win 37%% -145; 2-6k n=13 38%% -714; 6-12k n=15 53%% +55; >12k n=16 WIN 81%% +1676 (al netto di VELVET -903 e NEAR -571 che stanno DENTRO la fascia: i vincenti grandi ~+3150 lordi). I TRADE DI CONVINZIONE (size grossa) SONO UN EDGE REALE; il rosso viene dai 145 trade piccoli/medi (-859 messi insieme). MA la tesi bastava-evitare-gli-stop non regge ex-ante: i 6 disastri (-2753) hanno lato misto (3S/3L), revenge 1/6, e STESSA size dei vincitori (17x la mediana) = indistinguibili dai migliori all ingresso. Quello che era possibile e TAGLIARLI: un tetto duro a -2%% di prezzo sugli stessi trade recuperava ~1450 -> totale ~+2320 invece di +872 (VELVET -903->-394, i due ZEC -840->-180). CONCLUSIONE: convinzione=edge, trade piccoli=costo, e il divario sta in un tetto di perdita che valga ANCHE per i trade di convinzione. Caveat: nozionali stimati dalle fee (taker 0.06%%), taglio -2%% idealizzato senza gap/slippage.
  • 15:04 — TRADE REALI (workflow, 3 tracce; verifiche+sintesi morte per limite sessione, tracce lette dal journal). (1) I SOLDI VERI: -156.57 netti su 102 trade bot-reali (long -119.36 su 78, short -37.21 su 24); due depositi ~115 e ~119; conto azzerato il 28/6; ricarica mezza bruciata in 2 giorni (CAP -39.8 + BEAT -31); risalita a ~77 il 15/7 grazie a CHIUSURE MANUALI di Teo (+41.9 il 14/7, SOXL +32.5 a mano per bug). (2) PERCHE FERMO: master switch running:false su ENTRAMBI dal 17/7 17:14 (spenti dal pannello, deliberato); screen riavviati il 19/7 ma flag rimasto OFF -> bot vivi e inerti da 12 giorni; oggi lettura saldo fallisce con HTTP 400 persistente = possibile problema API key DA VERIFICARE PRIMA di riaccendere. (3) MIRROR = SELEZIONE AVVERSA: cattura solo il 36%% dei paper long, e proprio i PEGGIORI (catturati avg -2.06%%, mancati +1.0/+5.6%%); stesso periodo paper +884 vs reale sugli stessi -742 (capture ratio -0.84). Meccanismo: il limit si riempie quando il prezzo lo travolge (trade cattivo) e resta vuoto quando il prezzo scappa (trade buono).
  • 15:04 — SCHEMA DEI TRADE DI TEO (analyze_real_trades esteso a 90gg: 3537 fill, 176 round-trip dal 28/5, inclusa l era manuale/ChatGPT pre-14/6). PER EPOCA: manuale n=58 win 60%% move tot -9.7%%; era bot n=118 win 39%% -17.7%%. LO SCHEMA VERO E PER LATO: manuale SHORT 79%% win +8.7%% (i suoi short FUNZIONANO) vs manuale LONG 36%% win -18.4%%; era bot LONG 36%% -17.8%% (identico!), era bot SHORT 50%% ~0. I LONG PERDONO IN ENTRAMBI I MONDI COL MEDESIMO 36%%. Separatori W vs L: vincenti entrano PIU IN ALTO nel range (mediana 56%% vs 41%%, coerente con short-al-top) ; durata mediana W 45min vs L 14min; ora non separa. MAGNITUDINI: mediane simmetriche (+1.20/-1.15) ma i 6 PEGGIORI (-6..-9%%: ADA L 5/6, ZEC S 7/6, ZEC L 4/6, SNXX L 17/7, ON S 22/7, SKHY L 22/7) valgono -47.7%% combinati = piu dell intero rosso; 3 dei 6 in UN SOLO weekend (4-7 giugno). NOTA: ZEC L del 4/6 e ESATTAMENTE il trade della prova alla cieca di ieri (Teo ando long e perse ~9%%; anche io alla cieca dissi long; la logica mean-reversion del sistema diceva short). CAVEAT: move_pct e movimento prezzo, non PnL pesato per size/leva.
  • 11:03 — COSA ACCOMUNA LE COIN CHE FANNO GRANDI ESCURSIONI (domanda Teo, 7366 esiti scanner): il tratto comune e UNO SOLO, si stavano GIA muovendo. TOP 10%% per escursione (media 20.5%% in 24h): ampiezza 6h gia in atto 13.62%% vs 4.04%% della meta bassa, ret24 gia fatto 13.2%% vs 4.6%%. Nessun RSI magico (46 vs 41). Stessa conclusione dello studio coin-morte vista dall altro lato: il movimento genera movimento. MA le top sono anche le piu care: spread 0.713%% vs 0.212%%, book 8.181 vs 24.077.
  • 11:03 — IL PUNTO DOLCE NON E IL QUINTILE ESTREMO (escursione netta di spread per quintile di ampiezza): Q1 rapporto movimento/costo 25.5, Q2 27.1 (MIGLIORE), Q3 25.1, Q4 25.0, Q5 SOLO 10.3 (escursione doppia 10.90 ma spread 1.057 = 5x il costo). Le selvagge (gruppo BANK/ESPORTS che tradiamo gia) offrono il doppio del movimento a 5 volte il costo. TARGET GIUSTO: fascia media-alta, coin che si muovono gia del 3-6%% in 6h ma restano liquide (spread ~0.2%%) = ~5%% di escursione a costo minimo. CAVEAT: 11 ore di dati, in gran parte lo stesso episodio di mercato; struttura pulita (monotonia + crollo Q5) ma numeri esatti da riconfermare sul campione dei prossimi giorni.
  • 10:13 — ESITO del setup INJ LONG che avevo dato ieri 28/7 20:44 (entry 4.568, stop 4.505, target 4.685): PERSO. Massimo raggiunto 4.649 (+1.77%%, target mancato per 0.8%%), stop colpito il 29/7 alle 06:15, ora 4.495. Bilancio -1.4%%, esattamente il rischio dichiarato. NON era uno stop-hunt: dopo lo stop il massimo e stato 4.533, sotto l entry - non c era nulla da salvare tenendo. LEZIONE SUL TARGET, non sulla direzione: l escursione storica calcolata su 29 precedenti era mediana +3.1%% ma p25 +1.5%%; il caso reale ha fatto +1.77%%, cioe nella parte bassa ma NORMALE della distribuzione. Un primo target parziale a +1.5%% (4.637) sarebbe stato centrato. Con una distribuzione cosi larga, un target unico al centro lascia sul tavolo meta dei casi. METODO: rischio 1.4%% per 2.6%% con probabilita storica 66%% di fare +2%% in 24h -> aspettativa positiva, ma un trade non la verifica: questo e uno del 34%% che falliscono ed e costato quanto doveva.
  • 10:09 — VERIFICA OSC ultimi 3 giorni con costi di esecuzione (_osc_check.py): 42 trade, 37 vincenti (88%%), PAPER +1515.6, costo spread mai contato -238.9 su 85.738 di nozionale, NETTO REALISTICO +1276.6. CORROBORAZIONE INDIPENDENTE dall OB recorder: 45 fill osc catturati, slippage medio -0.121%% per lato (x2 andata+ritorno = -0.24%%), in linea con lo spread conteggiato: due misure diverse, stessa risposta. 37 uscite su 42 sono trail = il trailing fa il lavoro, la strategia funziona.
  • 10:09 — MA tre caveat: (1) UN SOLO trade fa il 40%% del risultato (BANK +608.8; senza restano +907 su 41). (2) Perdite concentrate: PUMP -183.6, SNXX -183.6, BU -143.5, XPIN -80.4, VANRY -70.5 = -662 su 5 stop; col pareggio a ~82%% di win rate e l 88%% osservato, il cuscinetto e di 6 punti. (3) STIAMO TRADANDO LE COIN PIU CARE DELL UNIVERSO: BANK 0.561%%, AVAAI 0.552%%, ESPORTS 0.543%%, SNXX 0.469%%, XPIN 0.344%% - il p90 dell universo e 0.491%%, quindi siamo sopra il 90esimo percentile su meta dei trade. I -238.9 sono la tassa di quella scelta, non una perdita da strategia sbagliata: la stessa identica logica su coin con spread mediano restituirebbe quasi tutto.
28/7
  • 21:24 — SKIP o FLIP dei LONG nella fascia 18-02? NE L UNO NE L ALTRO (valutato su TUTTI i long della finestra, non solo i perdenti, con trailing modellato). CYCLE LONG n=101: reale +412, skip 0 (delta -412), flip a short -495 (delta -907). OSC LONG n=27: reale +369, skip 0 (delta -369), flip +125 (delta -244). I long aperti in quella fascia GUADAGNANO comunque: saltarli costa, girarli costa il doppio. DETTAGLIO ISTRUTTIVO: sul cycle long il flip sarebbe stato migliore in 60/101 trade (59%%) ma perde -907 complessivi = vince piu spesso ma vince piccolo e perde grosso; stessa trappola dell analisi cycle-long di ieri, la percentuale di successi non dice nulla senza la magnitudine. QUINDI LA SCOPERTA SI RESTRINGE: non e la fascia 18-02 e ribassista quindi evita i long, ma la fascia 18-02 e dove gli SHORT funzionano. Il lato long non ne risente abbastanza da giustificare un azione. NOTA: normalizzando per margine il cycle long in finestra e leggermente negativo (-0.48%% vs +2.09%% fuori) mentre in assoluto e positivo (+412) - le due metriche NON concordano sul lato long, mentre concordano su quello short: per questo lo shadow copre solo gli short.
  • 21:15 — LA FASCIA ORARIA SI VEDE NEI NOSTRI TRADE, e NON e in-sample: la finestra 18:00-01:59 UTC e stata definita su dati di MERCATO indipendenti (20 coin liquide x 90 giorni, 43.200 osservazioni orarie), poi applicata ai trade. CYCLE SHORT: in finestra n=22 win 91%% net +1674 medio +76.1; fuori n=49 win 69%% net -188 medio -3.8. OSC SHORT: in finestra n=18 win 83%% medio +9.6; fuori n=33 win 73%% medio -0.3. LONG all opposto: osc long +13.7 in finestra vs +23.0 fuori; cycle long +4.1 vs +3.9. Meccanismo coerente: nella fascia a deriva ribassista gli short funzionano e i long rendono meno. Praticamente TUTTO il profitto degli short viene da quelle ore (20-04 italiane).
  • 21:15 — Controllo outlier sul cycle short in finestra: senza i top-3 (SKYAI +669, BANK +183, US +107) resta net +714 su n=19 = medio +37.6 (da +76.1: si dimezza ma regge); MEDIANA in finestra +57.7 vs +36.4 fuori (anche la misura robusta favorisce); 22 trade su 22 SIMBOLI DIVERSI = nessuna concentrazione. Normalizzato per margine: cycle short mediana +10.79 in finestra vs +6.25 fuori, media +11.76 vs +0.06; osc short media +6.10 vs -0.46 (mediane identiche a +18.80 perche il target fisso +2%% le schiaccia: la differenza e nelle code, meno stop in finestra); cycle long media -0.48 in finestra vs +2.09 fuori.
  • 21:15 — DEPLOYATO ore_shadow.py PRE-REGISTRATO (cron ogni 6h, solo misura). Finestra CONGELATA 18:00-01:59 UTC, congelamento 2026-07-28T21:15. Ipotesi dichiarate in anticipo: H1 gli short in finestra rendono piu di quelli fuori (mediana net/margine), H2 i long il contrario. CRITERIO DI PROMOZIONE NON MODIFICABILE: solo su trade NUOVI (aperti dopo il congelamento), n>=30 per gruppo, mediana in finestra maggiore, su ENTRAMBI i sistemi (cycle short E osc short); se regge su uno solo NON si promuove. Stato attuale: n 0/0, il contatore parte ora e i dati storici NON contano per la promozione (servono solo ad aver formulato l ipotesi). Stessa disciplina del flip-pompa.
  • 21:06 — EFFETTO ORA DEL GIORNO (_ore.py, 20 coin liquide, 90 giorni, 43.200 osservazioni orarie, split train/test + permutazione a 400 giri per i 24 test multipli). La struttura oraria ESISTE: p=0.000 corretto. MA l ora migliore in-sample NON replica: 17:00 UTC +0.221%% train -> -0.016%% test, 12:00 +0.174 -> -0.030. ORE STABILI su entrambe le meta: 00:00 +0.055/+0.062 (POSITIVA), 03:00 +0.028/+0.066; negative stabili 18:00 -0.094/-0.089, 22:00 -0.087/-0.119, 01:00 -0.062/-0.071, 02:00 -0.077/-0.054. PATTERN: la fascia 18:00-02:00 UTC (20-04 ora italiana) e sistematicamente negativa, con un ISOLA POSITIVA alle 00:00 UTC circondata da ore negative. CONFERMA INDIPENDENTE della scoperta di Teo del 19/7 sulle pump a mezzanotte UTC (allora 16 casi, qui 43k osservazioni su periodo diverso).
  • 21:06 — MA NON E TRADABILE DA SOLO: l effetto vale +0.06%% l ora contro uno spread mediano di 0.151%% -> il guadagno e 2.5 VOLTE PIU PICCOLO del costo di entrata+uscita. Su coin normali tradare l ora buona PERDE. Marginalmente sensato solo sulle ultra-liquide (BTC/SOL/ETH, spread 0.001-0.02%%) dove 0.06%% supera il costo, ma parliamo di 0.6%% del margine a 10x per un ora al giorno. USO ONESTO: non aprire trade alle 00:00, ma EVITARE long nella fascia 18:00-02:00 UTC e usare l ora come tie-breaker su setup gia validi per conto loro. Filtro di contorno, non strategia. Ennesima conferma che il costo di esecuzione domina qualunque edge marginale.
  • 20:32 — PROVA ALLA CIECA su ZEC 4/6 h03:13 (Teo non ha detto il lato): ho calcolato solo i dati PRECEDENTI e chiamato LONG. SBAGLIATO: la risposta era SHORT. Dopo il taglio ZEC non e MAI salito (max +(-1.49%%)), -11.8%% a 6h, -31.9%% a 24h, -60.2%% a 72h; LONG stop colpito, SHORT target centrato. DATI PRE: prezzo 627.36, ret24h +12.13%%, RSI15m 62.4, posizione range 24h 83.4%% (72h 85.5%%), dist da max6h -2.72%%, volume ultima ora 0.23x, prezzo +13.4%% sopra media 50h. I MIEI 4 ERRORI: (1) letto il volume collassato come venditori-assenti/bull-flag, mentre dopo +12%% e a ridosso del massimo significa COMPRATORI ESAURITI - stessa misura, lettura opposta, decide il contesto; (2) dato peso a 6 candele (90 min) di minimi crescenti dentro una struttura che aveva gia rifiutato il massimo; (3) sottopesato il segnale piu forte che avevo scritto io stesso: +13.4%% sopra la media 50h, 85%% del range 72h, ampiezza 24h 19%% = estensione estrema; (4) ERRORE CONCETTUALE PEGGIORE: usato la scoperta di oggi (il momentum batte la mean-reversion, dalle 79k osservazioni sulle coin morte) per contraddire il setup - ma quella riguarda QUALI COIN pompano su giorni/settimane, non SE una coin gia tirata continui nelle ore successive: statistica di popolazione applicata a timing sul singolo caso. NOTA POSITIVA: il SISTEMA aveva ragione - la logica mean-reversion (83%% del range -> short) era corretta, il gate NO-SHORT NON e scattato (richiede vol>=2.5x, qui 0.23x) e il flip-pompa NON avrebbe girato il trade. Le regole del bot, incluse quelle deployate oggi, avrebbero fatto la cosa giusta.
  • 19:34 — WORKFLOW COIN MORTE -> PUMP (idea Teo): IPOTESI ROVESCIATA, con la solidita piu alta mai raggiunta. 3 pannelli indipendenti (626 sym/153gg 4h; 611/200gg daily; 572/339gg daily), monotonia PERFETTA su tutti i decili/quintili, tutte le soglie (+10/+20/+50/+100/+200%%) e tutti gli orizzonti (24h-60gg), train e test. P(+20%%/7gg): 7.8%% quintile morto vs 35.3%% vivo. P(+50%%/30gg): 8.0%% vs 17.6%%. MAX-STATISTIC sull ipotesi: p=1.000 - selezionare morta e PEGGIO che scegliere a caso. Robusto agli outlier (-27.44 -> -27.46pp togliendo i 3 pump maggiori). Revisore: t=-10.7 su 22 blocchi indipendenti, sopravvive a 6 attacchi diversi. Pre-registrazione verificata col timestamp (definizioni 18:28, primo script stats 18:31).
  • 19:34 — Correzioni oneste dai revisori (anche sul verdetto negativo): (a) pesando per SIMBOLO invece che per sym-day la FREQUENZA di pump e indistinguibile (14.5%% vs 15.4%%, t=-0.43); resta significativa l AMPIEZZA (27.6 vs 37.6). Formulazione giusta: a parita di occasione le morte pompano ugualmente spesso ma molto piu PICCOLO, non pompano 2x meno. (b) RITIRATO lo steelman (dormienti piu esplosive rispetto al proprio normale, t=15.51): era artefatto meccanico, divideva per range7 che e la variabile stessa di ordinamento; con denominatore su finestra disgiunta t=+0.52. (c) RITIRATO anche morta-e-filtro-negativo: pesando per simbolo la differenza e -0.00pp. TIMING: nessun precursore usabile; il migliore ha lift OOS 20 e p=0.0025 ma i successi sono 3 eventi indipendenti tutti ad aprile, fuori aprile 19 segnali e ZERO pump; P&L +121.7%% -> -8.5%% togliendo i 3 migliori.
  • 19:34 — DEPLOYATO cap sul BOOK CAMMINATO (scoperta operativa del workflow: la regola margine_max = profondita20/leva SOVRASTIMA il piazzabile 1.5x sull universo, 1.9x sulle illiquide, 10.2x sulle estreme, perche i livelli lontani stanno a prezzi che non vuoi pagare: le illiquide arrivano a +2.25%% dal mid contro +1.04%%). Aggiunta book_walk_notional() che accumula i livelli finche il VWAP resta entro CYCLE_BOOK_WALK_MAX_IMPACT_PCT (default 0.5%% = 5%% del margine a 10x); il cap diventa min(depth20, camminato). Il bot SHORT eredita automaticamente (importa book_sized_margin_from_context alla riga 41). Kill-switch CYCLE_BOOK_WALK=0. Effetto misurato su book veri: BTC/SOL/VANRY/XPIN rapporto 1.00x (nessun cambiamento), ESPORTS 1.57x -> cap margine 968 scende a 617. Proprieta giusta: non penalizza a tappeto, stringe solo dove i livelli sono allungati. Backup .bak_bookwalk, bot riavviati istanza singola, zero traceback. Registrato anche depth_camminata_usdt nel contesto.
  • 18:10 — CONTROFATTUALE osc con spread e book del BTC (_osc_comebtc.py, 121 trade). VERIFICATO PRIMA: il simulatore osc addebita SOLO SIM_FEE=0.0006 (fee di trading); lo spread e registrato come feature ma NON viene mai addebitato -> il paper e OTTIMISTA di tutto lo spread. CORRETTO anche un mio errore: il costo andata+ritorno e UNO spread pieno (compri all ask, vendi al bid), non due; avevo raddoppiato. NUMERI CORRETTI: paper +1522 | costo spread reale mai contato ~-610 | netto realistico sulle coin attuali ~+912 | con spread BTC ~+1520. Quindi con lo spread del BTC gli STESSI trade renderebbero ~600 in piu, non perche guadagnino di piu ma perche oggi ~40%% del profitto se ne va in costi che il paper non mostra.
  • 18:10 — Effetto BOOK, con freno: 114 trade su 121 (94%%) hanno book_margin_cap SOTTO il tetto -> la liquidita limita la size a 1/6.4 del target; togliendo il vincolo il risultato salirebbe a +9792. MA NON E REALIZZABILE: e lo scenario margine-1000 che il backtest 3 mesi ha appena dimostrato fallimentare (moltiplica anche le perdite, uno stop brucia il 60%% del conto, i conti si azzerano). E un massimo teorico che ignora la rovina. DISTINZIONE CHIAVE: lo SPREAD e denaro gratis (stessi trade, stesso rischio, solo esecuzione piu economica, ~600 su 1522); la SIZE e rischio a leva (sembra +8000, e la trappola gia misurata). Conferma piu netta della giornata: il margine dell osc non sta nella direzione ne nella size, sta nel COSTO DI ESECUZIONE.
  • 17:54 — BACKTEST 3 MESI (_bt_multi.py): SMENTITA la conclusione del singolo mese. Margine 300, per mese (apr-mag / mag-giu / giu-lug): BTC +338/-531/+308 = somma +114; HYPE -963/+490/+601 = +129; DOGE +346/-386/+574 = +535; SOL +27/+91/+263 = +381. Giugno-luglio era il mese MIGLIORE per tutti: il +601 di HYPE non e ripetibile (ad apr-mag la stessa coin fa -963, conto quasi azzerato). Classifica vera su 3 mesi: DOGE +535, SOL +381, HYPE +129, BTC +114 - completamente diversa da quella del singolo mese. Ogni coin ha almeno un mese disastroso tranne SOL (sempre positiva ma importi piccoli).
  • 17:54 — CONFERMA NETTA dell ipotesi trend: HYPE apr-mag buy&hold +41.5%% (trend forte) -> -963; giu-lug -7.5%% (laterale) -> +601. Stessa coin, risultato opposto, discriminante = TREND. Idem BTC (-18.3%% -> -531) e DOGE (-23.8%% -> -386). Un trend forte IN QUALUNQUE DIREZIONE distrugge la mean-reversion.
  • 17:54 — SIZING, risposta definitiva: sommando le 4 coin sui 3 mesi, con MARGINE 300 -> +1159; con MARGINE 1000 -> -131 (NEGATIVO). Dettaglio 1000: BTC +458, HYPE +69, DOGE +1109, SOL -1767. I valori -955/-980 ripetuti sono CONTI AZZERATI (il capitale scende cosi in basso che i trade successivi sono irrilevanti e non si recupera). Quindi 300 si, 1000 no - non per prudenza ma per aritmetica: con -6%% x 10x un solo stop brucia il 60%% del conto e l esito dipende dall ordine degli eventi.
  • 17:50 — BACKTEST su coin liquide piu mosse di BTC (_bt_any.py, stessa meccanica, margine 300, 24/6-24/7). Risultati 25/75 e 15/85: HYPE +602.88/+561.18 (32 trade), DOGE +575.82/+350.46 (23), BTC +308.76/+365.10 (14), SOL +264.84/+152.16 (26), XRP +95.82/-58.56 (23), ETH -171.24/+237.78 (14), ALLO -959.27/+140.94 (126 trade!). HYPE e DOGE fanno quasi il DOPPIO di BTC e sono STABILI al variare delle soglie = risposta alla domanda di Teo (simile a BTC ma piu performante).
  • 17:50 — MECCANISMO CHIAVE emerso: la mean-reversion vuole asset LATERALI a spread basso, NON asset volatili. Guardare i buy&hold: HYPE -7.49%% e DOGE -11.76%% (nessun trend, solo oscillazione) -> strategia +600; ALLO +21.72%% (trend forte) -> strategia AZZERA IL CONTO a 25/75 (capitale finale 40.73, -959, con 126 trade e 34 stop); ETH +12.70%% -> -171. Piu ampiezza NON significa piu profitto: significa piu trade, e con geometria +2/-6 dove uno stop cancella 3.3 vittorie la FREQUENZA uccide. ALLO aveva l ampiezza piu alta fra le liquide (7.4%%) ed e il peggiore in assoluto. CRITERIO OPERATIVO: spread basso + assenza di trend + frequenza moderata; la stabilita al variare delle soglie e il test di robustezza (stabili BTC/HYPE/DOGE, instabili ETH/XRP/ALLO). CAVEAT: un solo mese, soglie scelte da me.
  • 17:46 — BACKTEST BTC 24/6-24/7, capitale 1000 (_bt_btc.py). Meccanica simulata DICHIARATA: solo il cuore mean-reversion dell osc (candele 15m, range_pos_6h, long se <=soglia_lo short se >=soglia_hi, target +2%% stop -6%%, leva 10x, stop-first, una posizione alla volta, fee 0.06%%/lato + spread; NIENTE scale-in/book-cap/trailing/protezioni/filtro BTC). Con MARGINE 300: soglie 25/75 -> +308.76 (14 trade, 12 win, 2 stop); 20/80 +252.42; 15/85 +365.10; 10/90 +365.10. Buy&hold BTC nel periodo +3.95%%. Risultato stabile al variare delle soglie = non dipende da taratura fortunata. Long 6 trade +98, short 8 +211.
  • 17:46 — NUMERO CHIAVE emerso dal backtest: con geometria +2%%/-6%% uno stop cancella 3.3 vittorie, quindi il WIN-RATE DI PAREGGIO e 76.5%% su BTC (spread 0.001%%) e 79.3%% sulle coin osc tipiche (spread 0.225%%). L osc reale gira all 83.1%% -> lavora con ~4 punti di margine sopra il pareggio, e lo SPREAD da solo ne mangia 3. Su BTC il cuscinetto sarebbe 9 punti, piu del doppio. Conferma numerica dell anteprima scanner: non e che BTC sia magico, e che con spread ~zero la stessa meccanica ha il doppio del margine prima di andare in perdita.
  • 17:46 — BACKTEST BTC con 1000 FISSI a trade (domanda Teo): il risultato ESPLODE in dispersione, da -1.40 a +677.32 (con 300 stava fra +252 e +365). Caso emblematico 20/80: STESSI 13 trade, 11 win, 2 stop, ma finisce IN PARI invece di +252 - non e cambiato cosa e successo, e cambiato QUANDO. Causa: con margine 1000 su capitale 1000 un solo stop brucia il 60%% del conto (-6%% x 10x), da li i trade successivi sono forzatamente piu piccoli (margine limitato dal capitale) e le vittorie non recuperano piu: l esito dipende dall ORDINE di vittorie e sconfitte. Conto: una vittoria +20%% sul capitale, uno stop -60%% -> servono 3 vittorie per pareggiare 1 stop, e se lo stop arriva presto lavorano su capitale dimezzato. Triplicare la size rende ~17%% in piu con SEI VOLTE la dispersione = pessimo scambio. Il margine 300 non e timidezza, e cio che rende la strategia sopravvivibile; e da qui il valore del book-cap deployato ieri (tiene la size fuori dalla zona in cui l ordine degli eventi decide tutto).
  • 17:30 — BUCO COLMATO nello scanner universo (domanda Teo: l analisi e per osc o cycle?). Le FEATURE erano neutre, ma gli ESITI che avevo impostato erano tarati sul CYCLE: long_outcome target+2/stop-4 = cycle long; short_outcome +2/-6 = cycle short E osc short; ma OSC LONG non era coperto (l osc usa -6%% anche sui long, io avevo -4%%). Aggiunto osc_long_outcome (+2/-6) come terza colonna, patch + ALTER TABLE, backup .bak_osclong. Ora ogni snapshot registra 3 esiti e i dati servono ENTRAMBI i sistemi; bonus: long_outcome vs osc_long_outcome sullo STESSO snapshot misura su 660 coin quanto vale allargare lo stop da 4 a 6%%, domanda su cui il cycle aveva risposto netto-piatto ma su n piccolo. NB: l anteprima spread data prima resta valida perche descrittiva (non dipende da target/stop) e le coin tradate erano prese da sim_trades = osc.
  • 17:27 — ANTEPRIMA SCANNER UNIVERSO (12.626 snapshot, 660 coin, 19 ore; esiti forward ancora 0, i primi maturano stasera dopo le 23:08). Distribuzione spread su 659 coin e costo andata+ritorno a 10x: p10 0.048%% (1.0%% del margine), p25 0.096%% (1.9%%), p50 0.151%% (3.0%%), p75 0.250%% (5.0%%), p90 0.491%% (9.8%%). DATO CHIAVE: le coin che tradiamo hanno spread mediano 0.225%% contro 0.151%% dell universo -> operiamo su roba PIU CARA della mediana; le peggiori (XPIN 0.31, ESPORTS 0.31, TRIA 0.32, AVAAI 0.30) costano ~6.2%% del margine solo per entrare/uscire, cioe un TERZO del target +2%% a leva 10 (=20%% sul margine). Nell universo non toccato: ETH e SOL spread 0.001%% con ampiezza 6h 2.24%%/2.08%% = costo 0.02%% del margine, 300 volte meno; ALLO 0.026%% con ampiezza 7.37%%; LA 0.150%% con 35.75%%. CAVEAT: i major oscillano meno (2.2%% vs 36.9%% di BANK) quindi con target +2%% lo centrano meno spesso - il confronto vero lo daranno gli esiti forward, non questa foto, e lo scanner copre una sola fase di mercato. DOMANDA APERTA: paghiamo il 6%% di margine per coin che oscillano tanto, quando ne esistono che oscillano abbastanza a costo ~zero? Stessa direzione del +1016 del limit-paziente.
  • 15:38 — WORKFLOW OSC (4 angoli + revisori): TUTTO BOCCIATO, e due mie affermazioni RITRATTATE. (1) ERRORE MIO su VANRY: il campo dir NON e un consiglio direzionale, e la gamba corrente dello ZigZag 4%% (osc_live_watch.py:531, zig_state righe 102-121, klines 5m/24h). Il long entra sul pavimento e per tornarci serve un ritracciamento >=4%% che mette dir=GIU -> dir-GIU+long E IL DESIGN mean-reversion, non un anomalia: 91.5%% dei chiusi sono cosi; idem book_band sottile 82%% = la norma. Due dei dieci segnali contrari che avevo elencato erano condizioni BASE del sistema. (2) RITIRATO il 54%%-vince-in-entrambe / 0-perde-in-entrambe: non e una scoperta ma un IDENTITA GEOMETRICA di target+2%%/stop-6%% (per arrivare a -6%% il prezzo attraversa sempre il +2%% dell altro lato: 23/23 e 28/28).
  • 15:38 — Esiti osc per angolo. CONTRO-DIR: nessun costo misurabile, e la strategia stessa; il vantaggio dei concordi e UN solo trade (BANK +608.8), togliendo i top-3 il segno si inverte; n=8 concordi = dati insufficienti. OI IN CROLLO: rumore col segno OPPOSTO (i long perdenti hanno OI piu ALTO); i bucket non-monotoni erano artefatto di sizing (mediana net/margine +18.80 in OGNI bucket); l unico p<0.05 dell intero lavoro NON ESISTEVA - i test erano girati sull esito SIMULATO e presentati come reale (con l esito vero p=0.614); i 10 trade con oi<=-5 vengono da 3 soli simboli. COMPOSITO: percentile 36 della nulla (151 compositi CASUALI su 200 fanno meglio); meccanismo verificato su klines ROVESCIATO (score>=6 tocca +2%% nel 95.2%% vs 84.2%%: cattura VOLATILITA, non fallimento). FLIP: max-statistic su 658 regole, la migliore sui dati veri sta SOTTO la mediana del rumore (p=0.926); la vincitrice del report era hour<=15 = firma classica del mining; OOS non trasferisce.
  • 15:38 — Correzioni a FAVORE del flip e altri caveat: reale e flip sono INDISTINGUIBILI (non flip peggiore) - vantaggio +46 su n=113, -903 togliendo i 3 maggiori, basta togliere UN trade (AKE +366) e il flip vince, IC95 include zero; il costo spread -172 era addebitato a UN LATO SOLO (violava la simmetria). RITIRATA anche level_touches<=1 come skip: il -514 e solo nel MODELLO, nel registro quei 21 trade GUADAGNANO +258. Trovati 6 interventi manuali di Teo (non 4), tutti positivi +358.6: campione autonomo del bot n=112 +1211.3. RACCOMANDAZIONE: nessuno shadow operativo, solo un log di osservazione (SH-OSC-VOL su vol_ratio<=0.129 e concordanza dir) - niente raggiunge lo standard del flip-pompa (pre-registrato + conferma indipendente). Riassunto e correzione inviati anche su Telegram.
  • 11:25 — WORKFLOW STOP LONG (4 angoli + revisori avversariali). RISULTATI PRINCIPALMENTE NEGATIVI ma solidi. (1) FLIP sui long: sembra +5523 vs -9494 reale ma e PURO SENNO DI POI - applicato pre-entry a tutti i 314 fa +1014 vs +1136 reale (i +11416 sugli stop L1 sono cancellati dai -11328 sui non-stoppati); la versione azionabile (SAR: short al prezzo di stop) PERDE in tutte le geometrie (-1104..-2741, n=163) perche lo stop cade vicino al minimo locale e il prezzo rimbalza. L analogo speculare della regola short (RSI basso) fallisce OOS: +673 train, -15 test. (2) RESIZE al book non e un edge ma un moltiplicatore di size (2.55x in L1) -> peggiora gli stop; il vantaggio apparente viene solo da L2/L3 con n piccolo. (3) STOP-HUNT: 94%% dei long stoppati torna sopra l entry entro 24h (mediana 22min) e 67%% prende il target, MA il controllo PLACEBO (stessa moneta, stessa distanza, finestra che parte 24h DOPO) da 90%% e 64%% = tasso base della crypto; eccesso attribuibile allo stop solo +4pp/+3pp -> gli stop NON sono prematuri. (4) ALLARGARE LO STOP NON RISOLVE: rigiocando i 261 trade L1 con stop da 1.29%% a 6%% lo stop-rate scende 60.9->32.2%% ma il net resta piatto (-458->-538); nei dati reali L2/L3 hanno 8 stop invece di 156 ma ognuno costa -250 invece di -47. Bocciato anche lo stop proporzionale all ATR (peggiora, se il target resta fisso).
  • 11:25 — CONTROPROVA UNIVERSO (la piu importante): lo scanner ombra e ancora inutilizzabile (0 risolti, campione su una sola oscillazione, AUC aggregate = artefatto di Simpson; rifare fra 7-10 giorni). Costruito percio un universo storico sintetico: 250 coin, snapshot orari 9/6-27/7, 242.365 esiti risolti, split train/test. RISULTATO CENTRALE: il 52%% di stop del bot NON e un problema di selezione, e interamente spiegato dalla LARGHEZZA dello stop. Bot vs caso sulle STESSE ore e STESSI simboli: 1.26%% -> 63.1 vs 61.3; 2.20%% -> 49.4 vs 47.2; 4.00%% -> 35.4 vs 33.0; 7.00%% -> 22.2 vs 19.3. A ogni larghezza il bot e entro 2-3pp dal caso con CI sovrapposti.
  • 11:25 — SHADOW PRE-REGISTRATO composito-stop long (long_composito_shadow.py, cron ogni 6h). Regola con soglie CONGELATE dal solo train L1 15-20/6: skip se >=2 voti su 3 (coin.atr_pct_15m>2.688, level.dist_entry_level_pct<0.131, coin.vol_now_vs_prev_1h<0.82). CRITERIO DICHIARATO PRIMA: promuovere solo se positiva in >=2 regimi con n>=30. Misura attuale: L1 n=147 delta +1153 (stop 71%% flaggati vs 37%%), L2 n=34 delta -969 (stop 5%% vs 33%% = REGOLA INVERTITA, seleziona i migliori), L3 n=19 delta +1282 ma n<30. Regimi positivi con n>=30: 1 su 2 -> NON PROMUOVIBILE, resta shadow. La regola cambia SEGNO col regime = adattamento a L1 (estinto), non edge. 114 trade saltati per feature mancanti.
  • 10:34 — DEPLOYATO FLIP-POMPA RSI-gated (scelta Teo: flip subito con kill-switch). Alla creazione del pending short (riga ~3156, percorso CYCS- standard): se pompa (vol_1h>=2.5 E (ret_1h>=3 O ret_24h>=8)) E rsi14_15m >= soglia -> il trade nasce LONG invece che SHORT, con ENTRY INVARIATA e stop/target SPECCHIATI (2*entry-stop, 2*entry-target); tutto registrato in ctx.flip_pompa + riga di log FLIP-POMPA. ENV: CYCLE_SHORT_FLIP_POMPA=0 per spegnere, CYCLE_SHORT_FLIP_POMPA_RSI_MIN default 79. SECONDA MODIFICA NECESSARIA (trovata verificando, altrimenti rompeva): al fill c era un min-stop che assume SHORT (se stop < entry*1.06 lo forza SOPRA l entry); su un LONG girato la condizione e sempre vera e avrebbe SOVRASCRITTO lo stop del long con uno da short, rendendo il trade insensato -> reso SIDE-AWARE (per LONG il min-stop va sotto l entry). Fallback in try/except: qualunque errore torna a SHORT invariato. Backup .bak_flippompa, compila, bot riavviato istanza singola, zero traceback. Non ancora scattato: serve un setup pompa+RSI>=79. ATTESO sui dati storici: quei trade passano da -799 a +1014 (n=8, di cui 4 flippati) - da verificare sul campo, campione piccolo.
  • 10:26 — SEPARATORE TROVATO nel flip-pompa (idea Teo: vedere cosa accomuna quelli che andrebbero bene): e l RSI. FLIP MEGLIO: ONDO rsi87 (-612->+188), RIF rsi84 (-578->+97), ZAMA rsi79 (-123->+179), SKYAI rsi90 (+110->+146), US rsi45 (+135->+188). FLIP PEGGIO: ALLO rsi58 (+183->-325), MU rsi n/d (+31->-412), TIA rsi n/d (+55->-412). Tutti e tre i fallimenti hanno RSI basso o assente; tutti quelli con RSI>=79 vanno a target. REGOLA: pompa + RSI>=79 -> FLIP; pompa + RSI basso/assente -> RESTA SHORT (quelli vincono come short, quindi NON skippare). RISULTATO sugli stessi 8: oggi tutti-short -799 | skip-tutti 0 | flip-tutti -351 | FLIP-SOLO-SE-RSI>=79 +1014 (flippati +610, lasciati short +404). SENSO MECCANICO: shortare una pompa con RSI 84-90 = contro momentum in pieno slancio -> squeeze; con RSI 45-58 la pompa e stanca e lo short funziona. CORROBORAZIONE INDIPENDENTE: ieri l analisi mediane sui tratti d entrata (_dirdisc.py) aveva trovato che sugli SHORT il flip conviene con RSI alto (70.3 vs 60.5) - due strade diverse, stesso segnale. CAVEAT: n=8 di cui solo 4 flippati; soglia 79 letta dai dati (in-sample) anche se la direzione era gia indicata da ieri. RACCOMANDAZIONE AGGIORNATA: non skip ma FLIP CONDIZIONATO ALL RSI, dietro flag.
  • 10:23 — FLIP-POMPA: Teo chiede di provare il FLIP, ma il pre-registrato lo SCONSIGLIA. Trovato che lo shadow era FERMO al 25/7 perche il CRON NON ERA MAI STATO INSTALLATO (ora aggiunto, ogni 2h alle :47). Rilanciato con RIF+ZAMA inclusi: n=8, flip_win 5, flip_net -351.3, short reale -798.8, flip_vs_short +447.5, soglia 8/15. Le tre opzioni sugli STESSI 8 trade: tenere short -799 | FLIP -351 (meglio di 447) | SKIP 0 (meglio di 799). Quindi il flip batte lo short ma PERDE contro lo skip di 448, e il criterio pre-registrato flip_net>0 NON e soddisfatto (-351); soddisfatto solo flip>short. MOTIVO: il flip vince su RIF/ONDO ma si fa stoppare su TIA/MU/ALLO che come short erano vincenti (+55/+31/+183 diventano -412/-412/-325); lo skip non ha quel costo. RACCOMANDAZIONE INVARIATA: skip, non flip. Decisione a Teo.
  • 10:18 — SCOPERTA (domanda Teo su RIF: ma il profilo diceva NO-SHORT pompa attiva?). Il gate NO-SHORT v2 e SOLO DISPLAY (kucoin_cycle_retest_paper.py:495, dentro uno span HTML): condizione vol_1h>=2.5 AND (ret_1h>=3 OR ret_24h>=8). Mostrato sulla card ma NON blocca: RIF e entrato lo stesso e ha perso -578. QUANTIFICATO su tutta la storia short: trade col gate attivo n=8, 62%% win, 38%% stop, net -799; trade normali n=62, 77%% win, 15%% stop, net +2219. LE TRE PERDITE PIU GROSSE DELLA STORIA SHORT SONO TUTTE LI: ONDO -612, RIF -578, ZAMA -123; le vincite del gruppo sono piccole (+31/+55/+110/+135/+183) = asimmetria netta (shortare una pompa ad alto volume: quando va bene rende poco, quando va male costa tantissimo). Ignorare il gate e costato ~799. PUNTO DI METODO A FAVORE: la regola era PRE-REGISTRATA il 21/7 in cycle_short_flippompa_shadow.py con criterio dichiarato in anticipo (decisione a n>=15, criterio flip_net>0) - NON e stata pescata frugando nei dati come le piste cadute ieri. MA siamo a n=8, non 15. DECISIONE A TEO: SKIP (non entrare su pompa attiva, avrebbe salvato +799, meccanismo solido e coerente con short-su-RSI-alto e short-sul-tetto) vs FLIP (cio che il pre-registro voleva testare, li n=15 conta di piu). Raccomandazione mia: attivare lo SKIP, non il flip.
  • 10:05 — BADGE PROVENIENZA su TUTTI i trade (segnalazione Teo su RIF #188 senza badge). Verificato: CYCS-RIFUSDTM-0727-184527 e cycle standard (non ghost promosso, non veto-entry) -> assenza badge CORRETTA, ma ambigua: non si distingueva standard da badge-rotto. Aggiunto fallback badge cycle standard nel ramo else di _exl (entrambi i bot) e tooltip da promosso/validato a provenienza del trade. Ora sulla card short: 105 cycle standard, 43 experimental VETO-ENTRY, 13 ex-fantasma REVERSAL. Backup .bak_badgestd, bot riavviati istanza singola.
  • 09:58 — CONFERMATO il ricordo di Teo (~5800): capitale pre-reset LONG finale 2530 con PICCO 3070, SHORT finale 2884 (era al massimo); COMBINATO finale 5414, somma dei picchi 5954. Quindi circa-5800 e esattamente cio che vedeva: il long era arrivato a 3070 e ha poi restituito ~540.
  • 09:58 — RESET CAPITALE al 28/7 (richiesta Teo, motivo tecnico solido): con capitale a 110 il margine e min(1000, CAPITALE, book/leva) -> il capitale diventava il vincolo stringente e ogni nuovo trade avrebbe usato ~110, rendendo impossibile valutare sia il book-cap sia lo scale-in nuovo (book_at_add, tier cap, entry per quantita, target ribasato). Modificati ENTRAMBI i launcher: CYCLE_PROJECT_START_AT=2026-07-28T00:00 e CYCLE_DAILY_PNL_SINCE=2026-07-28 (backup .bak_reset28). Bot riavviati istanza singola. Card dopo il reset: CONTO REALE 947.76 / -52.24 (l aperto APE short in perdita), simulazione book-sized 1000.00 / +0.00. NB: il reset azzera solo la FINESTRA DI CONTEGGIO dei pannelli, i trade storici restano nel DB (vita totale progetto +2556).
  • 09:52 — CHIARITO IL 5-6k (confusione Teo). PRIMA del reset (fino 24/7): long +1530 su 310 trade, short +1884 su 61 = +3414; i due bot partono da 1000 CIASCUNO, quindi il combinato mostrava ~2530+~2884 = ~5.4k -> il ricordo di Teo era corretto. Il reset del 25/7 ha azzerato quei +3414 e rimesso il contatore a 1000. DOPO il reset: long -394 (4 trade), short -464 (9) = -858 (capitale 110 con l aperto). Quindi il quadro nero e solo 3 giorni sfortunati su 13 trade: sulla VITA TOTALE il progetto resta +2556 (long +1136 su 314, short +1420 su 70).
  • 09:52 — GRIGLIA STOP sui 13 trade dal reset: RISULTATI SCARTATI perche contaminati. Stessa trappola strutturale gia trovata: nel DB il campo ENTRY viene SOVRASCRITTO dallo scale-in (diventa l entry media), quindi simulando dall apertura con quell entry le distanze di stop sono sbagliate. Prove: LAB -375 reale -> la sim da +124 a QUALUNQUE stop (impossibile); RIF -578 reale -> sim +288 a stop 6%%. La griglia suggerirebbe stop piu LARGHI (6%% -> +525 vs reale -858) ma NON e affidabile. Per farla bene serve ricostruire l entry originale da scale_ins[0].old_entry. UNICO NUMERO SOLIDO: reale -858 vs -371 sizando sul book d entrata -> il problema DIMOSTRATO e il sizing, non lo stop.
  • 09:52 — Etichette card precisate (richiesta Teo): pannello 1 CONTO REALE del paper (margine effettivo, scale-in inclusi) = capitale 110 / PnL -890; pannello 2 SIMULAZIONE, non il conto reale: se avessi sizato SOLO sul book dell ENTRY e basta, min(1000, capitale, depth20 lato-entry/leva), SENZA gli scale-in successivi = 629 / -371.
  • 09:46 — FIX SALDO (Teo: il saldo non combacia). ERRORE MIO di ieri: togliendo i due pannelli ho lasciato SOLO quello book-sized, che e una SIMULAZIONE (ricalcola margine = min(1000,capitale,book/leva) e IGNORA gli scale-in) -> mostrava capitale 629 mentre il conto vero era a 110. Numeri reali dal reset: long -393.75 (4 trade), short -464.18 (9), perdenti grossi RIF -578 (margine 1000), LAB -375 (981), PEPE -162 (1000), ZAMA -123 (602). RIPRISTINATO il pannello del PnL REALE (combined_cycle_stats_html) su entrambi i bot, messo PER PRIMO nel template, con etichetta esplicita CONTO REALE del paper: margine effettivamente impiegato, scale-in inclusi - e chiarito che il pannello ORDER-BOOK sotto e una simulazione. Ora la card mostra: CONTO REALE capitale 110.44 PnL -889.56 (include l aperto APE) e sotto la simulazione 629.12 / -370.88. La differenza fra i due (-890 vs -371) E IL COSTO DELL OVER-SIZING: sizando sul book le perdite sarebbero state meno della meta -> misura piu eloquente del perche il fix book-aware serviva. Backup .bak_restorereal e .bak_order, bot riavviati istanza singola.
  • 09:22 — PRIMA VERIFICA SUL CAMPO del lavoro di ieri sera: su APE short (CYCS-APEUSDTM-0728-085948) lo scale-in ha girato col codice nuovo e TUTTI E TRE i pezzi funzionano. add#1 +35.8 a 0.154900 (avverso 0.715%%), margine 500->535.82. (1) book_at_add REGISTRATO: bid20 95960, cap margine 9596, supera_il_book false, tagliato_dal_book false. (2) cap book-aware attivo ma NON ha tagliato perche non serviva (APE liquida: il book regge 9596 contro i 536 usati) -> ecco perche nei log non compare SCALE-IN RIDOTTO: comportamento CORRETTO, non mancato funzionamento; il cap morde solo dove serve (LAB: aggiunta 2.97x oltre il book; APE: book 18x il necessario). (3) TARGET RIBASATO: new_target 0.14771812; verifica a mano - entry originale ~0.153788, dopo l aggiunta a prezzo piu alto l entry media sale a 0.153873 (giusto per uno short che media al rialzo) e il target passa da 0.147637 a 0.147718 = sempre -4.00%% esatti dal nuovo costo medio invece di restare fermo sul vecchio.
  • 09:22 — SCANNER OMBRA: 7366 snapshot su 659 coin in ~10 ore, cron orario regolare. Nessun esito risolto ancora ed e CORRETTO: il primo snapshot e delle 23:08 del 27/7 e matura a 24h, quindi i primi forward arrivano stasera dopo le 23:08; da li ~660 osservazioni risolte all ora. Bot long/short/web regolari, 1 short aperto (APE).
27/7
  • 23:58 — Esempio numerico dell allineamento (_lab_ex.py, caso LAB 0727-092600). Entry originale fill 0.148140, scale-in a 0.147450 (avverso 0.466%%) +650 -> margine 331->981. (1) ENTRY: per-margine 0.14768280 vs per-quantita 0.14768208 = -0.0005%%, irrilevante QUI perche i prezzi distano solo 0.47%%; diventa rilevante mediando lontano (esempio a -10%%: per-margine 0.13832 vs per-quantita 0.13800, -0.23%%) - la formula vecchia SOVRASTIMAVA il costo medio. (2) TARGET (il cambiamento vero): target 0.154066 = +4.000%% dall entry originale; PRIMA restava fermo li e dalla nuova entry media servivano +4.322%%, ORA e ribasato a 0.153589 e servono +4.000%% esatti -> si avvicina di 0.309%%. Il controsenso corretto: prima mediavi al ribasso per abbassare il costo ma il target restava sul prezzo vecchio, quindi ti ALZAVI l asticella in termini relativi. (3) STOP invariato 0.142214 = dove il LAB e uscito: il ribasso del target NON avrebbe salvato questo trade (e sceso, non risalito), ma su un trade che risale la differenza fra chiedere +4.32%% e +4.00%% e concreta.
  • 23:49 — CYCLE ALLINEATO ALL OSC nello scale-in (richiesta Teo). Due differenze portate dall implementazione di riferimento (osc_live_watch sim_scale_in): (1) ENTRY MEDIA PESATA PER QUANTITA invece che per margine: qty_old=margin*lev/entry, qty_add=add*lev/px, new_entry=new_margin*lev/(qty_old+qty_add) - la formula corretta a leva costante; verifica sul caso LAB (0.14814 + 650 a 0.14745): margine-pesata 0.147681 vs quantita-pesata 0.147680, identiche quando i prezzi sono vicini ma divergono quando il prezzo si allontana. (2) TARGET RIBASATO sulla nuova entry media conservando la distanza originale (dopo aver mediato, il target segue il costo reale) - prima il cycle lo lasciava fermo sull entry vecchia; il nuovo target viene anche salvato nel record scale_ins come new_target. STOP INVARIATO (fisso, come fa anche l osc). Fallback in try/except: se leverage/target mancano si torna alla formula vecchia, nessuna rottura. Applicato a ENTRAMBI i file, backup .bak_alignosc, compilano, bot riavviati istanza singola, zero traceback. Ora il cycle ha tutto quello che ha l osc: cap sul book (con anche il tier, che l osc non ha), entry per quantita, target ribasato.
  • 23:40 — SCALE-IN OSC: era GIA BOOK-AWARE, e fatto MEGLIO del cycle (osc_live_watch.py sim_scale_in 1245). Usa cap_book = _BOOK[book_margin_cap] CORRENTE, desired = min(SIM_MAX_MARGIN, cap_book) e se desired <= margine NON aggiunge; inoltre RICALCOLA il target dalla nuova entry media e pesa l entry per QUANTITA (qty_old/qty_add) - due cose che il cycle non fa (il cycle tiene lo stop originale e non ribasa il target). Il modello che abbiamo costruito stasera per il cycle esisteva gia in casa: l osc era il riferimento, il cycle il rotto.
  • 23:40 — PERFORMANCE scale-in osc (domanda Teo): senza scale-in n=72, 83%% win, net +788, medio +10.9, margine medio 204; CON scale-in n=37, 81%% win, net +513, medio +13.9, margine medio 246. Win rate identico ma PnL MEDIO PIU ALTO, e regge anche per unita di margine (0.057 vs 0.053) -> sull osc lo scale-in aggiunge size SENZA degradare la qualita = sano. Esattamente il contrario del cycle non-capped, dove sul solo LAB e costato -238. Stessa idea, due implementazioni: quella che guarda il book funziona, quella che non lo guardava faceva danni; da stasera anche il cycle e capped e dovrebbe convergere. NB: i 3 scale-in cycle di oggi sono PRECEDENTI al deploy (nessun book_at_add, zero righe SCALE-IN RIDOTTO/SALTATO nei log) -> il nuovo codice non e ancora stato esercitato, si vedra al primo trade in avversita.
  • 23:28 — universe_scanner: aggiunto COMMIT INCREMENTALE (richiesta Teo). Prima inseriva tutto in blocco a fine scan: un crash a meta giro perdeva ~10 minuti di dati e non si vedeva alcun progresso. Ora flush ogni 50 coin (COMMIT_EVERY) con riga di avanzamento a video. Testato su 120 coin: progresso a 50 e 100, tutte registrate. Backup .bak_commitinc. Stato: 790 snapshot, 659 coin distinte; cron attivo (scan :07 ogni ora, resolve :37 ogni 3h); i primi esiti forward compariranno fra 24h quando i primi snapshot maturano.
  • 23:17 — COSTRUITO E ATTIVO: universe_scanner.py, lo SCANNER OMBRA su tutto l universo (idea Teo). Primo scan completo: 658 coin su 660 in 8 minuti (2 saltate per storico insufficiente) vs le 60-80 che guardavamo prima = 10x di dati. SCELTA DI PROGETTO: NON replica la strategia (sarebbe fragile e andrebbe tenuta in sync); registra il VETTORE DI FEATURE (ret 15m/1h/6h/24h, rsi14, range_pos 6h/24h, distanze da massimi/minimi, ampiezza, vol_1h_vs_avg, e dal book: bid20/ask20 con multiplier, imbalance, spread) piu l ESITO FORWARD a 24h in ENTRAMBE le direzioni (max favorevole/avverso + target/stop stop-first, long +2/-4, short +2/-6). Cosi qualunque ipotesi (discriminatore di direzione, griglie di stop, soglie) diventa testabile su n grande senza replicare il bot. NON apre nulla, non tocca i bot, scrive solo in osc_events.universe_scan. Modi: init/scan/resolve/stats. CRON: scan ogni ora (:07), resolve ogni 3h (:37). Fix in corso d opera: finestra klines 30h->40h (servono >=97 barre da 15m per ret_24h, prima veniva null) + campo bars per diagnosi. NOTA: gli insert sono in blocco a fine scan (nessun progresso intermedio visibile e in caso di crash si perde il giro); migliorabile con commit incrementali.
  • 23:03 — IDEA TEO che attacca il vero collo di bottiglia (n insufficiente): valutiamo solo ~10%% dell universo. Numeri: KuCoin ha 675 contratti futures attivi (660 USDT), i bot scansionano 60 (long, default) / 80 (short), coin effettivamente tradate 75 long / 56 short. Lo scan e ordinato per liquidita -> vediamo sempre le stesse coin di testa, ecco perche in 6 settimane solo 314 long e 187 short. DUE STRADE: (A) allargare l universo TRADATO (scan-limit 60->300): piu n ma coin meno liquide (col book-cap prenderebbero size minuscole) e cambierebbe il carattere della strategia mentre la stiamo misurando = peggiora il problema dei regimi. (B) SCANNER OMBRA su tutte le 660: valuta il setup su ogni coin e registra cosa avrebbe fatto e come sarebbe finita, SENZA aprire nulla. Zero capitale a rischio, zero modifiche alla strategia viva, dati 10x piu veloci. RACCOMANDATA LA B: tutto cio che oggi e morto per n insufficiente (regimi di stop, discriminatore di direzione, i 4 segnali coerenti long) avrebbe n sufficiente in GIORNI invece che mesi. Costo: 660 simboli per ciclo invece di 60, da girare con cadenza rada (es. oraria) per i rate-limit. NON costruito (fine contesto): e il primo task da riprendere, miglior rapporto valore/rischio emerso oggi.
  • 22:56 — SCANSIONE COMPLETA segnali (domanda Teo: aggiungere/mischiare indicatori?). _scan.py: estratte TUTTE le foglie numeriche di entry_context (28 segnali sul long, 66 sullo short, presenti in >=60%% dei trade), ognuno testato come discriminatore di direzione con soglia scelta sul TRAIN e applicata al TEST, sim CON trailing. RISULTATO: LONG 13 segnali su 28 restano positivi nel test, attesi per caso ~14 = ESATTAMENTE il livello del caso. SHORT 16 su 66, attesi ~33 = PEGGIO del caso (i segnali buoni in train si INVERTONO nel test = firma dell overfitting). I top per delta_TEST sono ingannevoli (breadth.short_pct +883 test ma solo +42 train = fluttuazione del test set). Coerenti su entrambe le meta solo 4 sul long: coin.dist_high_6h_pct (+753/+674), book.spread_pct (+1042/+364), coin.ret_15m (+782/+366), relative.rel_strength_3h (+583/+402) - ma su 28 test 4 coerenti sono dentro il caso, NON sono scoperte; al piu primi candidati da ri-testare con piu dati. CONCLUSIONE: non mancano indicatori (ne abbiamo 94, nessuno regge), manca n. Aggiungerne altri PEGGIORA il rapporto segnale/falsi-positivi. La strada e attendere i dati (book_at_add, stop_iniziale, 6-8 settimane per regime).
  • 22:48 — TEST OUT-OF-SAMPLE del discriminatore di direzione, CON TRAILING nella sim (_oos.py): NON VALIDATO. LONG train 157 (11-18/6) / test 157: in training TUTTE le soglie danno lo stesso +4687 = la regola non scatta mai (payoff_score assente nei trade di giugno) -> selezione della soglia DEGENERE; test +838 vs baseline +428 = delta +410 su 157 trade. SHORT train 34 / test 35: in training la regola e PEGGIO del baseline (+804 vs +849); test delta +51 = rumore. SCOPERTA DECISIVA: modellando il trailing il baseline long diventa POSITIVO (+428 test, +4687 train) contro il -443 della sim precedente -> il -443 era un ARTEFATTO della sim senza trailing e gonfiava tutto il vantaggio apparente del flip. Il +2495 in-sample si riduce a +410 OOS e per giunta da selezione degenere. CONCLUSIONE: il discriminatore di direzione NON sopravvive all out-of-sample; la pista flip/inverti, dopo un giorno intero di test, resta NON dimostrata su ogni sua variante (reattivo, profilo, all-entrata, per-tratti). Non usare per decisioni.
  • 22:41 — DISCRIMINATORE DI DIREZIONE (_dirdisc.py, _audit_rule.py): su 70 long il flip era meglio in 25 casi, su 69 short in 20. Mediane che separano, ASIMMETRICHE per lato: LONG payoff_score 78 (flip meglio) vs 93 (presa meglio) = -15; SHORT rsi15m 70.3 vs 60.5 = +9.8 (short su RSI alto -> squeeze, coerente con PUMP/XPIN). payoff_score NON discrimina sugli short (+3 = rumore), coerente con le mediane invertite gia trovate.
  • 22:41 — Quantificazione regole: LONG flip se payoff_score<85 -> net +2052 vs baseline -443 (delta +2495, 17 azzeccati su 28); <80 -> +1652. SHORT flip se rsi>72 -> +2149 vs 1586 (delta +563, 8 su 15). MA TRE CAVEAT CHE LO SVUOTANO: (1) il miglioramento e MONOTONO al crescere della soglia = non e il comportamento di un discriminatore, suggerisce che il guadagno venga dal flippare piu long in generale (in questa finestra i long andavano male, ribaltarli aiuta meccanicamente); (2) azzeccati appena sopra il caso (61%% long, 53%% short): il guadagno viene dalla MAGNITUDINE non dalla capacita di indovinare = fragilissimo; (3) feature scelta dalle mediane e soglia ottimizzata sugli STESSI dati = overfitting da manuale. LIMITE TECNICO: la sim NON modella trailing ne protezioni, quindi penalizza il lato PRESO (baseline -443 non e il PnL reale). CONCLUSIONE ONESTA: non e ancora un discriminatore; per esserlo serve validazione OUT-OF-SAMPLE (soglia su un periodo, test su un altro) e sim col trailing. NON usare per decisioni.
  • 22:31 — SKIP vs FLIP dal reset (domanda Teo: non solo allargare lo stop). 5 perdenti dal 25/7 per -914: LAB -97, LAB -375, PEPE -162, RIF -578 (la piu grossa, piu del LAB di cui si parlava tutto il giorno), ZAMA -123. Contro-fattuale klines 1m stop-first: SKIP dei perdenti +421 (delta +1335), FLIP dei perdenti +1346 (delta +2260), 3 flip su 5 a target. LETTURA: il flip rende il DOPPIO dello skip -> quando il bot sbaglia non sbaglia il setup, sbaglia la DIREZIONE (c erano soldi dall altra parte). CAVEAT FORTE: e senno di poi, seleziona perdenti gia noti; misura il potenziale, non e una strategia.
  • 22:31 — La firma peggio-della-mediana-dei-perdenti NON GENERALIZZA (verifica su 6-7 metriche pre-entry): LAB-97 5/6, ZAMA 4/5, LAB-375 3/6, RIF 3/6, PEPE 1/5. Un gate di qualita avrebbe fermato solo 2 dei 5 e NON RIF (-578) ne PEPE -> lo skip-per-qualita non avrebbe salvato i -914. NB il 7/7 dichiarato dall audit sul LAB non si riproduce con questo set di metriche (usava metriche diverse): prenderlo con cautela.
  • 22:31 — SCOPERTA RIUTILIZZABILE (piu importante della domanda iniziale): sugli SHORT le mediane sono INVERTITE rispetto al long. SHORT: payoff_score mediana vincenti 89.5 vs PERDENTI 100.0 (i perdenti hanno score PIU ALTO); rr_to_target 0.69 vs 1.36; best_up_pct 6.00 vs 2.95. LONG invece normale (vincenti 90.5 vs perdenti 81.5). => payoff_score sul lato SHORT non solo non filtra, e CONTROPRODUCENTE: un gate score-alto-entra sugli short PEGGIOREREBBE. E il tipico errore di applicare al short la logica tarata sul long (vedi memoria reference-class per-lato). Script _skipflip.py e _firma.py sul VPS.
  • 22:17 — APPLICATE le 3 patch rimaste (procedi-con-tutto). (1) BUG TIER CAP: lo scale-in ignorava tier_margin_cap e lo sfondava (ZAMA 500->602, LAB 500->981 +96%%); ora il cap dello scale-in rispetta ANCHE il tier oltre al book (min tra i due) - conservativo, puo solo ridurre; in try/except quindi se cycle_tier_caps non e disponibile nel file short non rompe. (2) SOGLIA TRAILING LONG da hardcoded a env CYCLE_LONG_TRAIL_ACTIVATE_PCT, DEFAULT 2.0 INVARIATO = comportamento bit-identico; per provare 1.9 basta esportarla (ma resta una scommessa su n=3, di cui il 56%% e il LAB stesso; e il mirror REALE legge CYCLE_REAL_TRAIL_ACTIVATE_PCT, env diversa, va settata a parte). (3) MARCATORE profilo-INVERTI ora solo sulla riga del lato REALMENTE preso (3a+3b insieme: senza la 3b il commento restava falso) - price_alert_web.py, backup .bak_marcatore. NON applicata la patch top-up book-driven: il suo stesso audit la sconsiglia (0 fire sotto i propri gate, premessa falsa, matematica contraria); i file old/new restano su /home/teo/_audit_t4_*.txt se un giorno servisse. Riavviati long+short+web (il web va lanciato col launcher DIRETTO, non dentro screen: il launcher crea da se lo screen - errore mio, corretto). Verificato: 1 istanza ciascuno, web HTTP 200, zero traceback.
  • 22:10 — RITRATTATO il risultato griglie-stop (revisione avversariale). CAUSA RADICE, importante per tutte le analisi future: la colonna stop nel DB NON e lo stop iniziale - alla chiusura viene sovrascritta con exit_price sulle uscite trailing/runner_trail (59/314 long riempiti hanno stop>entry). Quindi filtrare su (entry-stop)/entry>0 NON seleziona gli stop intatti, SELEZIONA I PERDENTI. Il +957 con stop 1.0%% nasceva da li (escludeva 37 trade, net +3597, 36/37 vincenti). Rifatto su n=261 intero: delta -39, IC90 [-1287,+1169], P=0.50. Verdetto vero: NESSUN regime, vivo o morto, giustifica un cambio di stop; tutti DATI INSUFFICIENTI (L3 attuale n=19/3 stop, S2 n=25/4). Servono ~60-80 riempiti e 15-20 stop per regime = 6-8 settimane. Confermato: a stop 7%% nessuna liquidazione si materializza (tetto pratico). Anche il regime SHORT 4%% NON esiste: salto diretto 1.5 -> 6.0 il 12/7.
  • 22:10 — DEPLOYATE 2 correzioni a rischio zero. (1) BUG NELLA MIA PATCH DI OGGI: il cap book-aware usava il lato del book HARDCODED per file (ask nel long, bid nello short); su un trade INVERTITO il cap veniva calcolato sul lato SBAGLIATO. Ora il lato segue il side reale del trade. (2) stop_iniziale congelato nel contesto al fill (entry/stop/target + distanze %%): senza, la distanza iniziale non e ricostruibile e l analisi stop non e ripetibile. Backup .bak_fix2, compilano, bot riavviati istanza singola, zero traceback.
  • 22:10 — ALTRI ESITI AUDIT (patch pronte, NON applicate - decisione di Teo). TRAILING: soglia 2.0%% ovunque, nel long paper HARDCODED. Asimmetria strutturale reale: il long ha un BUCO di protezione fra MFE 1.3 e 2.0 (solo turn_protect che si spegne a 1.3), lo short ha in piu early_profit_protect (23 uscite short, 0 long). Zona morta 1.5-2.0: long 5 perdite su 5 (-792), short 8 vittorie su 8 (+664). Abbassare conviene SOLO al long, danneggia sempre lo short. MA il +684 a 1.9 viene da 3 trade e per il 56%% dal solo LAB (bias di selezione); nel regime attuale cambia esito 1 solo trade. Patch = env opt-in default invariato. MARCATORE: NON e un bug, e una scelta di design documentata nei commenti (i chip si ricalcolano apposta per entrambi i lati); patch 3a+3b pronta (19 marcatori -> 14), decisione di Teo, richiede restart del web. TOP-UP book-driven: SPECULATIVO, sotto i suoi stessi gate NON si attiva mai (0 fire su 8 trade); premessa FALSA (il book non migliora, oscilla: p50 0.98, solo 9.7%% sopra 1.5x); matematica contraria (aggiungere a prezzo peggiore contro lo stesso stop assoluto porta la perdita-a-stop da 132 a 419); capitale insufficiente (606 long, 479 short). RACCOMANDATO NON ATTIVARE.
  • 22:10 — BUG COLLATERALI TROVATI (segnalati, NON toccati): (1) lo scale-in avverso IGNORA tier_cap_margin_usdt e sfonda il tetto di tier: ZAMA tier 500 -> 602, LAB tier 500 -> 981 (+96%%); legge solo target_margin_usdt. (2) btc_quality_max_margin_usdt e dead code nel bot long (letto a 5238 ma scritto solo dal short). (3) attenzione: btc_quality_size_cap nei contesti short NON e numerico (disabled/not_needed/true), mai metterlo in un min() di margini.
  • 21:02 — AUDIT STOP recuperato dal journal (la sintesi era morta col limite sessione). TRACCIA 1 LAB: stop EVITABILE ma NON allargandolo - il trade e morto in un FLASH-CRASH di 1 minuto (14:30 UTC) che ha attraversato -4/-5/-6%% nella STESSA candela; solo uno stop >=-6.85%% sopravviveva e sarebbe comunque a -306 mark-to-market. Due cause vere: (1) ZONA MORTA DEL TRAILING: MFE 1.9509%% contro soglia di armamento 2.0000%%, mancata per 0.049 punti (0.0000728 di prezzo!) - con soglia <=1.9%% il trade usciva a +45.6 invece di -375.18 = swing 420.8 USDT; (2) scale-in non book-sized: 650 aggiunti (2.97x la size) su top-20 ask da 3311 = costo esatto -238.72 dei -375.18. Setup gia peggiore della mediana dei PERDENTI su 7 metriche su 7.
  • 21:02 — AUDIT TRACCIA 2 LONG (scoperta METODOLOGICA che ribalta le analisi precedenti): su 314 long realmente riempiti 164 stop (52.2%%), net -9566 su totale +1136. MA lo stop realmente applicato NON e -4%%: mediana 1.34%%, perche 156 dei 164 stop vengono dal regime di GIUGNO a 1.1-1.8%%. Il regime -4%% copre solo ~19 trade riempiti e 3 stop -> sul -4%% NON esistono ancora dati osservati. Quindi tutte le griglie stop fatte prima mescolavano regimi diversi. TRACCIA 3 SHORT: dei 187 record solo 86 riempiti, 14 stop in perdita (16%%) per -3241 su net +3709; lo stop short e cambiato regime TRE volte (1.5%% fino 11/7, poi 4%%, poi 6%% dal 12/7): gli stop del regime stretto erano per lo piu stop-hunt, quelli a 6%% no. Lezione: segmentare SEMPRE per regime di stop prima di concludere.
  • 21:02 — AUDIT TRACCIA 4 MARCATORE: la mia ipotesi precedente e SMENTITA. Il marcatore NON usa una regola larga: usa la STESSA regola congelata del contatore (range_pos incluso), le 3 copie nel sistema sono identiche carattere per carattere. Vive in price-alert/price_alert_web.py righe 7090-7093 (_pre_chips -> _tratti -> build_osc_sim_page, GET /kucoin/osc-sim). Riverifica con klines 5m: la regola DEL MARCATORE ha edge POSITIVO su entrambi i lati; la regola larga ha edge negativo (confermata la mia misura sulla regola larga, ma non era quella del marcatore). DIFETTO REALE diverso: _pre_chips viene invocata per ENTRAMBE le direzioni, quindi il marcatore compare anche sulla riga del lato NON PRESO - su 18 marcatori renderizzati 4 stanno su una riga contro-fattuale dove non c e nulla da invertire. Patch minima individuata (1 sostituzione, univocita verificata) NON applicata: contesto esaurito, da fare a mente fresca. Incoerenza collaterale: la card dice INVERTI ma il comportamento live su quei trade e SKIP, non flip.
  • 20:59 — DEPLOYATO SCALE-IN BOOK-AWARE (prosegui-con-tutto Teo): lo scale-in NON supera piu la profondita del book. Prima: add_margin = min(rimanente, capitale) guidato solo dal prezzo -> LAB portato a 981 dove il book reggeva ~331-376. Ora: legge live_book_snapshot al momento dell add, cap = depth20_lato_uscita/leva (ASK per il long che compra, BID per lo short che vende), spazio = cap - margine_attuale; se lo spazio e sotto il minimo (10) SALTA l aggiunta e lo logga, se e parziale RIDUCE e lo logga. KILL-SWITCH: CYCLE_SCALE_IN_BOOK_AWARE=0 ripristina il vecchio comportamento in un secondo. Registrato anche tagliato_dal_book nel record scale_ins (insieme a book_at_add gia deployato). Applicato a ENTRAMBI i file (codice duplicato), backup .bak_bookaware, compilano, bot riavviati istanza singola, zero traceback. NOTA ONESTA: al momento non ci sono trade aperti, quindi il percorso scale-in non e ancora stato esercitato a runtime - va osservato al primo trade che va in avversita. La modifica e CONSERVATIVA (puo solo ridurre la size, mai aumentarla). RESTA APERTO: il caso inverso (book che migliora senza movimento avverso -> salire verso 1000) NON e implementato, e un ampliamento di comportamento che merita contesto fresco.
  • 20:53 — DEPLOYATO book_at_add: ogni SCALE-IN ora registra il BOOK del momento (era il dato mancante che impediva sia il pannello dinamico sia la validazione dello scale-in). Salva bid20/ask20, book_margin_cap_usdt (profondita lato-uscita / leva: ASK per il long che compra, BID per lo short che vende) e il flag supera_il_book (margine dopo l add > cap). Patch additiva in try/except: se il book non risponde lo scale-in NON si rompe (scrive solo errore). Applicata a ENTRAMBI i file (codice duplicato, lo short non importa lo scale-in; nel short import locale di live_book_snapshot dal modulo long). Backup .bak_bookatadd, compilano, bot riavviati istanza singola, log puliti. NIENTE cambia nel comportamento di trading: e solo logging. Dal prossimo scale-in sapremo, trade per trade, se l aggiunta era sostenuta dalla profondita reale.
  • 20:45 — FATTO: rimossi i pannelli MARGINE-FISSO-300 e NUOVE-REGOLE da ENTRAMBE le card (richiesta Teo: creano distrazione). 6 patch (3 per file: il bot short ha un suo render_html e NON eredita la pagina dal long), univocita verificata byte-per-byte prima di applicare, backup .bak_rmpanels, funzioni NON cancellate (rollback = riaggiungere 4 righe). Preservato il pannello fantasmi (era incollato dentro stats_html) e la chiamata combined_cycle_balance che lo alimenta. Nessuna ancora JS/menu puntava agli id rimossi. Verificato su entrambe le card: resta solo MARGINE ORDER-BOOK. Bot riavviati istanza singola.
  • 20:45 — SCOPERTA CHIAVE (workflow, lettura codice indipendente): lo SCALE-IN NON GUARDA MAI IL BOOK. E guidato dal PREZZO (movimento avverso >= 0.45%), add_margin = min(remaining, capitale_disponibile); nessuna lettura di book_margin_cap_usdt, nessuno snapshot book. Il target_margin_usdt=1000 e il nominale, NON il cap del book (chiavi distinte). Conseguenza: 14/16 trade LONG e 13/14 SHORT con scale-in hanno chiuso con margine SOPRA il book cap d entrata, e il margine finale atterra quasi sempre esatto a 1000 (mediana 1000 su entrambi i lati). SECONDO BUCO: se il book si approfondisce ma il prezzo NON va contro, il top-up non scatta affatto = esattamente il caso che Teo vuole (book regge di piu -> sali a 1000) oggi IMPOSSIBILE. Codice DUPLICATO nei due file (lo short non importa lo scale-in) -> ogni fix va applicato due volte.
  • 20:45 — LIMITE DATI per il pannello dinamico: NON ricostruibile dallo storico. entry_context ha solo book PRE-fill (book_at_entry/book_at_fill non esistono). L unica serie del book durante il trade e ob_fill_capture phase=post (book 20 livelli, poll 8s) ma tagliata a 30min (OB_REC_POST_MIN) e presente solo dal 26/7: dei 23 trade chiusi dal 25/7 solo 10 realmente riempiti, 5 con snapshot, 2 con copertura integrale. Prova decisiva sul LAB: scale-in a +93min = FUORI finestra; dentro la finestra la profondita dava cap 136-376, MAI vicino a 1000 -> il margine 981 non era giustificato da nessuna profondita osservata. PER ABILITARE il pannello che vuole Teo servono 2 catture nuove: (a) salvare il book dentro ogni record scale_ins (long ~5260-5270, short ~3926-3936), (b) estendere la cattura book oltre i 30min per tutta la vita del trade. ALTRA TRAPPOLA: margin_usdt e valorizzato anche sui 13 trade MAI entrati (pnl=0) -> filtrare su net_pnl<>0, mai su margin_usdt>0.
  • 17:22 — SCOPERTA (Teo: ma non abbiamo gia il book entro 30min?): SI, ob_fill_capture phase=post contiene bids/asks completi + bid_notional/ask_notional = PROFONDITA NEL TEMPO, ~200-400 snap per trade su 30min. TRAPPOLA UNITA risolta: il recorder calcola notional = somma(p*q) SENZA multiplier, il bot usa ask20_value = somma(p*q)*multiplier. Verificato su LAB: multiplier=10, ask20_value 3311.27 = 331.1*10 (ratio esatto 10.0). RISULTATO CHIAVE sul LAB stoppato: profondita nei 30min post-fill = 1360-3760 (cap margine 136-376 USDT), entrata reggeva 331, ma il bot ha fatto SCALE-IN fino a 981 = quasi il TRIPLO di quanto il book abbia mai retto nella finestra osservata. -> lo scale-in NON e book-aware. Col pannello dinamico che vuole Teo, LAB si fermerebbe a ~376 invece di 981. LIMITE DATO: finestra solo 30min post-fill e solo 5 trade cycle finora (recorder recente); lo scale-in del LAB era a +93min, fuori finestra. Per fare le stats come le vuole Teo serve estendere la cattura del book a TUTTA la vita del trade.
  • 17:13 — FIX fantasmi azzerati dal reset (Teo: diceva ancora 29 trade +1611). ghost_history_html non aveva filtro data (l avevo scritta io tutto-il-tempo) mentre ghost_balance_all usava gia start_at -> incoerenza: +1611 pre-reset stampato sotto fantasmi +0.00. Ora filtra opened_at>=PROJECT_START_AT (2026-07-25) e label da storico-completo a dal-reset. Dal 25/7 i fantasmi sono ZERO (CYCSR/CYCSO promossi, CYCSV/CYCLW spenti) -> il pannello ora sparisce, coerente col +0.00. Backup .bak_ghostreset, patcher via scp (il quoting inline ssh rompeva sui doppi apici). Bot riavviati istanza singola. VERIFICA stats: sono aggiornate - pannello nuove-regole -214.02 = somma ESATTA del DB dal 25/7 (long -393.75 + short +179.73), lo stop LAB -375.2 e dentro. CHIARIMENTO tecnico: book_sized_cycle_simulation (pannello 3) NON ha alcun riferimento a scale-in, ricalcola used_margin=min(target,capitale,book/leva) -> il pannello 3 e SENZA scale-in, il pannello 2 (margine reale) e QUELLO CON scale-in. Segnalato a Teo, label lasciati come li vuole lui.
  • 17:04 — ANNULLATA mia modifica ai label (avevo INVERTITO: il 3o e quello con lo scale-in, il 2o doveva restare a fasce). Ripristinati label originali da .bak_labels, bot riavviati istanza singola. I NUMERI erano gia corretti dal revert book-cap; nessun label andava toccato.
  • 16:51 — REVERT book-cap stats (Teo ha beccato: stop LAB -375 appariva -127, capitale non riconciliava). CAUSA: il book-cap era INGENUO - confrontava il margine TOTALE (981) contro il book D ENTRATA (331), ignorando lo SCALE-IN. Verita: l entrata e GIA book-sized (used_margin=book_cap=331), poi cresce con scale-in legittimo (+650 a 11:00 a prezzo migliore 0.14745). Quindi la diagnosi di stamattina (stats gonfiate da over-size cieco) era SBAGLIATA: non e over-size, e scale-in. Il cap penalizzava lo scale-in come se avesse zero liquidita. Ripristinato da .bak_bookcap -> capitale nuove-regole torna al reale (785.98, riflette lo stop pieno). Bot long+short riavviati istanza singola. NOTA: lo scale_ins NON salva il book al momento dell add -> per valutare davvero se lo scale-in trova liquidita servirebbe catturare book_at_scale_in (enhancement futuro).
  • 16:37 — Profilo-inverti: reconcile contatore(12) vs card(molte) dopo che Teo ha mostrato il dump. Il CONTATORE usa regola congelata approach+range_pos = 12 trade swing +960. Le CARD marcano regola LARGA coltello-dal-lato-sbagliato (solo approach) = 45 trade. Flipparli TUTTI = swing -240 (PEGGIO). ASIMMETRIA chiave: invertire coltello-SHORT->long +240 (squeeze, tipo PUMP/XPIN) BUONO; invertire coltello-LONG->short -480 PESSIMO (i long su dip rimbalzano e vincono, e il pane osc 88%). -> edge inverti e SOLO lato SHORT; il marcatore card mette il segnalino su ENTRAMBI i lati = fuorviante (fa credere 45 candidati, buoni solo ~20 short). FIX proposto: marcatore profilo-inverti solo su short (o distinguere verso). Il +960 del contatore regge perche range_pos filtra il lato giusto.
  • 16:32 — Stato profilo-inverti (inversione_profilo, check Teo): fermo a 12 flaggati swing +1150 (invariato). I 6 buoni sono tutti stop->target +240 e TUTTI del 17-24/7 (SNXX/AKEx2/BU/AVAAI long+short); 1 male XEC target->stop -240; resto neutri. STALLO: nessun nuovo flag dopo 26/7, gli ultimi (24-26/7) neutri o -41 = flip ha smesso di aggiungere valore. Il +1150 e congelato e trainato dai salvataggi iniziali; coda recente piatta. Stesso pattern di tutta la catena flip: forte all inizio (reversal in finestra toro), poi si spegne, manca test mercato in calo.
  • 16:29 — SHADOW flip-at-entry osc short (flip_entry_shadow.py, cron 6h). Se short matcha firma-perdente -> entra long invece. 44 short, sim flat300 tgt+2/stop-6. Baseline sim -480 (NB: reale osc +72, la sim semplice e piu pessimista del trailing vero -> numeri assoluti con cautela). Regole: lt<8 net+0 ma flippa 17 (7 persi presi MA 10 VINCENTI flippati); vlr>4 +0 (5los/4win); lt<8&vlr>4 -480 (troppo stretto); score>=2 -240 (6/6). VERDETTO: nessuna regola separa pulito (flippa tanti short buoni quanti cattivi); il guadagno e il solito artefatto bull (flip->long vince perche mercato sale). Trait level_touches separava in aggregato ma per-trade NON da regola netta. NON accendere: flipperemmo alla cieca short giusti. Shadow accumula per test in mercato in calo.
  • 16:26 — FLIP ALL ENTRATA (Teo chiarisce: flippare subito all entrata, non dopo la perdita; il flip reattivo early -2/-4%% infatti non brilla). Segmentati 32 short osc vinti vs 12 persi per tratti entrata (_short_seg.py): firma del PERSO = level_touches BASSO (5.7 vs 16.6), leg_age giovane (96 vs 166min), vol_leg_ratio ALTO (6.8 vs 3.0), taker_imb positivo (0.11 vs 0) = shorta livello FRESCO alto-volume compratore = momentum non esaurimento -> squeeze. Vincenti = livelli vecchi ben testati, flusso equilibrato. range_pos NON separa (vincenti pure piu in alto 74 vs 68; rp<35 perde 50%% ma non e il segnale, PUMP/XPIN erano rp>65). -> La regola inversione_profilo (rp<35) e la leva SBAGLIATA; giusta = level_touches basso + vol_leg alto + taker+. PROSSIMO: shadow flip-at-entry su questa firma (short-fresco-alto-volume -> long), misurare.
  • 16:17 — I 2 short attivi hanno preso lo STOP (conferma Teo): XPIN short -80.4 (mae -6.07), PUMP short -183.6 (mae -6.29), entrambi squeezati su. Entrambi avrebbero VINTO come long da entry (+5.9%%/+6.0%%). MA la regola flip PROFILO (inversione: approach>+2 & range_pos<35) NON li prende: erano shortati in ALTO nel range (XPIN rp71, PUMP rp100) = pattern diverso (short sul tetto squeezato) da quello che il profilo cattura (short in basso su spinta). Il buco lo copre il FLIP REATTIVO/revenge_flip (dopo lo stop, gia shadow +408 n=20 17-target) = proprio la frase originale di Teo invertirli se vanno in negativo. Sintesi a 2 meccanismi: flip-profilo pre-entrata (+1149, short-in-basso) vs flip-reattivo/revenge (+408, short-sul-tetto=questi 2). Tool giusto per questi = revenge, non profilo. Freno invariato: entrambi in finestra toro, confermare in mercato in calo.
  • 14:03 — SHADOW equity-news (equity_news_shadow.py, richiesta Teo: entra su OGNI segnale sottostante-USA nella direzione dell azione, a prescindere dai requisiti). RISULTATO NEGATIVO n=13: direzione giusta al close 24h solo 1/13 (8%%), NET -319 (regola +2/-6, flat300). Il segnale da un POP breve (46%% tocca +2%%, max-fav +3.8%%) ma si gira subito (max-avv -4.9%%), stop -6%% mangiano i target (SKHY 24/7 previsto long -> -8.3%% -> -180 x2). RETRATTO: il SNXX +185 di prima NON era il segnale news, era il TIMING osc; il segnale equity da solo PERDE. Ora i bot NON tradano su news (solo alert, aspettano il momento tecnico) ed e GIUSTO cosi. Shadow in cron ogni 6h per accumulare, ma n=13 gia chiaramente negativo. Lezione: shadowarlo fuori-requisiti ha evitato di cablare un segnale perdente.
  • 13:58 — FIX news (procedi e sistemalo Teo). Diagnosi: NON keyword falsa (match gia word-boundary + esclude ticker corti); mancava DEDUP PER CONTENUTO -> stesso annuncio listing ri-allertato 292 volte (Lorenzo/BANK), gli 822 eventi erano solo 32 unici. FIX: aggiunto dedup (src,title) nel loop alert di news_watcher.py (i segnali che variano - equity %%, blow-off %% - passano ancora; solo titoli identici fermati); backup .bak_dedup, compilato; cron si auto-ripulisce dal prossimo giro. Pulito storico events.jsonl 822->32 (backup .bak_dup). Quadro vero: 10 sottostante-USA (equity, IL gioiello - cattura su E giu: SNDK -10.8%%->SNXX -22%% short, +14.3%%->+29%% long, SK Hynix/SOXL/IBM), 16 blow-off, 4 annunci, 2 CoinDesk. Edge equity validato: prevede DIREZIONE (SNXX 19 osc 89%% win +185). Prima sepolto sotto 790 dupli.
  • 13:52 — News (richiesta Teo, sia osc che cycle). news_watcher.py (dal 21/7, cron 10min) = ALERT+shadow, NON guida i trade (grep decisioni bot vuota) -> 0 PnL diretto, 0 alert attivi ora. 822 eventi: 791 annunci KuCoin (rumore), 16 blow-off, 13 SOTTOSTANTE USA (equity), 2 CoinDesk. Coin piu flaggate BANK 587 / XPIN 206 = falsi match keyword (rumore). Pezzo intelligente = sottostante-equity (fix punto cieco): SNXX (da SanDisk) poi 19 trade osc 89%% win +185; ma SKHY/SKHYNIX flaggato 7 volte e MAI tradato; IBM 1 +24. Verdetto: grosso rumore, unico valore = segnale equity ma n minuscolo e spesso non tradato. Per avere risultati veri: (1) tagliare rumore annunci + fix over-match BANK/XPIN, (2) agganciare segnale equity ai trade (logica da validare, non solo alert).
  • 13:14 — Test robustezza flip osc per regime BTC (_flip_regime.py, procedi Teo). Motore gia auto: cron ogni 2h per osc_shadow_counters + short/long_flip_shadow. Su 12 flaggati inversione_profilo: 6 troppo vecchi per klines, degli altri TUTTI BTC-piatto (0 BTC-su, 0 BTC-giu). BUONA: flip rende +471 anche con BTC PIATTO = NON solo artefatto bull, il profilo approach/range_pos fa lavoro vero (1 flip sbagliato XEC -240). FRENO DEPLOY: caso BTC-GIU mai testato (n=0) = proprio dove uno short e giusto e flipparlo a long fa male. Gate: non accendere flip live finche inversione_profilo non accumula trade in mercato in CALO (non n>=15 generico, ma n in finestra BTC-giu). Cron lo raccogliera quando il mercato gira.
  • 13:10 — Idee Teo su osc short (invertire poco-sicuri / veri-short) GIA in shadow. IDEA1 inversione_profilo (regola congelata 20/7: short approach>+2 & range_pos<35 -> flip long): 12 flaggati, 6 stop ribaltati in target, 1 win rovinato, swing +1149.6 = LEVA PIU FORTE. osc_short_flip_shadow: flip short->long +673 vs +72 tenendo short (n=43) MA amplificato da finestra toro (tutto cio che diventa long vince, osc-long 88%%); split profilo sotto-potenza n=2/6<15. IDEA2 filtri veri-short: coin-bruciata evita -114 (10 saltati), muro-vicino -117 (17), DOA nati-morti +233 (taglia mai-in-favore 5min). trait_flips: direzione instabile per costruzione (44/47 flippano, media 2.7; instabili coltello/rsi/taker) -> per questo invertire i poco-sicuri funziona. FRENO: n piccolo + finestra rialzista, confermare che il flip regga quando il mercato NON sale prima di deploy live.
  • 12:52 — OSC scelta direzioni per tratti (chiusi + attive, _osc_dir.py). LONG ottimo: 58 trade 88%% win +1231.7. SHORT debole: 42 trade 76%% win ma net solo +72.2 (loser grossi, mae -3.0 vs long -2.37). Le 2 APERTE ora sono entrambe short e entrambe in perdita: PUMP short -4.82%% uPnL -144.7 (mae -5.0, vicino stop -6%%), XPIN short -1.6%% uPnL -21.5 = uPnL aperte -166.2. Includendo attive lo short osc va SOTTO (~+72-166=-94). I tratti NON sbagliano la direzione short (76%% il prezzo scende) ma asimmetria payoff crypto (grind piccoli su, squeeze grossi) la rende poco redditizia. LEVA osc: alzare asticella/ridurre size lato SHORT, i long vanno da soli.
  • 10:47 — FIX DEPLOYATO stats cappate sul book (combined_cycle_balance). Ogni trade ora scala il PnL per min(margine, depth20_lato/leva)/margine (simmetrico: winner sovradimensionati rendono meno, loser sovradimensionati perdono meno = size realistica). Cappato anche uPnL aperti. Etichetta corretta: da "fasce 300/600/900" (falsa) a "cappato sul book". Verificato su ENTRAMBE le card: LONG +129.78, SHORT +124.41 (era +138.45 non cappato, -14 di gonfiaggio tolto). Il bot short IMPORTA la funzione dal file long (riga 36) -> riavviati ENTRAMBI i paper in screen durevole (long self-pkill; short pkill manuale+quit+singolo launch, no doppioni); real NON toccato. Backup .bak_bookcap, script _patch_bookcap/_verify_bookcap/_margin_vs_book. NOTA: fixato il DISPLAY; il sizing LIVE del paper resta non cappato sul book (cambio piu grosso, separato, da valutare).
  • 10:36 — BUG stats fasce-qualita (segnalato Teo, CONFERMATO coi numeri, _margin_vs_book.py). Il pannello Statistiche-nuove-regole (combined_cycle_balance riga 984) somma il margine REALE di ogni trade, ma su vari trade il margine messo SUPERA quello che il book reggeva (depth20/leva): ERA long 1000 vs book 408 (+186.6 -> +76.1 se cappato), ESPORTS long 1000 vs 421 (+134.6 -> +56.7), LAB short 1000 vs 666, US short 1000 vs 777. -> PnL fasce +130.58 SOVRASTIMATO, la versione onesta-sul-book e nettamente piu bassa. Due difetti: (1) sizing non cappato sul book su diversi trade = PnL gonfiato; (2) etichetta 300/600/900 SBAGLIATA (margini reali 366/500/1000, usa min(1000,capitale,book) non le fasce). FIX (da fare in sessione fresca, non a contesto pieno): cappare margine effettivo a min(margine, depth20_lato/leva) nel calcolo stat, e valutare se sistemare anche il sizing live del paper. Esiste gia book_sized_cycle_simulation (target 1000 cappato book) ma non e le-fasce-cappate che serve.
  • 09:59 — Resoconto CYCLE reale-vs-paper (n=3 chiusi, RUMORE): paper -46.6 reale -72.1. Corretto errore mio: usare bool_or(capturabile) non la prima foto -> PEPE short si e riempito davvero (2 foto) = reale ha PRESO il perdente -162 e MANCATO un vincitore LAB +25.5. Qui reale peggio del paper, opposto osc, ma n=3 = niente. report_cycle_fill2.py.
  • 09:59 — CHIARIMENTO reprice (domanda Teo). Cycle = LIMIT + reprice (reale sposta il pending, deployato, funziona). OSC = MERCATO, entra subito, NESSUN pending -> reprice su osc IMPOSSIBILE e MAI testato (niente da reprezzare; confermato da build_diario/ob_fill_recorder:77 e assenza fase PRE nel recorder). L unica cosa su osc+limit e SHADOW (limit_vs_market_agg + report_limit_vs_market, il +1016) mai deployata. Sequenza: 1) validare in shadow osc-limit-paziente > mercato (ora n=13 trainato da BANK, serve 40-50); 2) deploy osc-a-limit; 3) SOLO POI testabile reprice su osc. Siamo al punto 1.
  • 09:54 — RESOCONTO limit-vs-mercato osc (report_limit_vs_market.py, richiesta Teo: conviene sempre il limit?). 13 osc chiusi: MERCATO (come ora) +978; LIMIT istantaneo fill-or-kill +873 (PEGGIO, prende solo 4/13, perde vincitori piccoli); LIMIT PAZIENTE aperto 30min +1016 (MEGLIO). Il limit paziente vince perche cattura comunque BANK (+608/+153, prezzo arrivato al limite), schiva il perdente BU short -143.5 (prezzo non tornato = non entri), perde solo vincitori piccoli; e col limit risparmi pure slippage (BANK 1.2-1.4%). CAUTELA: n=13 dominato da BANK (+608 =62%% del PnL) + 2 aperti -> indizio forte non regola. Intuizione Teo giusta MA solo se limit resta aperto (non fill-or-kill). TODO: rigirare a n=40-50, se regge -> osc a limit-paziente giustificato.
  • 09:38 — Dettaglio trade-per-trade avrebbe-preso (finora). CYCLE (limit) FEDELE: quando riempie il reale ha lo STESSO prezzo del paper (10/12 prese: XBT/PEPE/PENGUx7/LAB; 2 mancate = limit non raggiunto, PEPE 05:07 e LAB 00:38). Zero slippage sul prezzo, rischio solo di mancare il trade. OSC (mercato) prende SEMPRE (16/16) ma al prezzo di mercato: slippage <0.4%% su coin liquide, MA BANK long 1.37%% / short 1.20%% (=~12-14%% margine 10x) in pieno pump. 11/16 un limit non si riempiva (osc deve inseguire), 5/16 bastava. Conclusione: cycle=reale uguale al paper sul prezzo; osc=fedele su liquide, costoso sui picchi violenti (proprio dove il paper guadagna di piu -> i +608 BANK nel reale rendono un po meno).
  • 09:33 — RECORDER avrebbe-preso-o-no primi dati (n piccolo): CYCLE limit prende 10/12 (83%%) subito, i 2 mancati = limit non riempito, slippage medio 0.45%% (=~4.5%% margine a 10x). OSC mercato prende SEMPRE ma 11/16 un limit paziente avrebbe mancato subito -> insegue; pero limit-shadow 30min si riempiva 9/9 -> potrebbe aspettare. Slippage osc medio 0.06%% max 1.37%%. Serve piu n.
  • 09:33 — VERIFICA picchi profitto osc anomali (richiesta Teo): i due top BANK (long +608 =+203%% margine =+20.4%% prezzo in 5min; short +153 =-5.2%%) sono VERITIERI. Klines reali KuCoin: BANK ha pompato 0.39->0.55 (~40%% range) il 27/07 mattina; exit long 0.533 < high vero 0.550, exit short 0.528 > low vero 0.504 = prezzi realmente raggiunti. NON bug PnL (net=movimento x leva x margine - fee torna), NON wick inventato. MA: coin sottile (0.44) in movimento violento -> esecuzione reale a mercato SLITTA (recorder osc slip fino 1.37%%); entita profitto reale, netto reale un po meno. Le due domande (avrebbe-preso / e-veritiero) convergono: movimento vero, esecuzione reale costa su queste coin. Script _bank_verify.py.
  • 09:28 — Recorder OB: aggiunta FINESTRA POST-USCITA '30min' (ob_fill_recorder.py, phase post_exit ogni poll + post_exit_summary con max-favorevole/contro DOPO l uscita = capire se usciamo dentro un muro o troppo presto). Prima catturava una sola foto all uscita; ora traccia 30min come fa dopo il fill. 4 edit anchor-assert + compile, backup .bak_postexit. Recorder riavviato DUREVOLE in screen ob-fill-rec (era diventato figlio di una SSH appesa = fragile; il launcher usa exec senza screen, va wrappato). Catture finora: pre 1713 fill 27 post 2549 exit 14 summary 22; post_exit si popola al prossimo trade che esce.
26/7
  • 19:40 — REFUTATO estendere veto-entry (veto_would_block.py). Applicare i 4 veti qualita long come FILTRO PERDE: tengo-solo-0-veti net +1041 < prendere-tutto +1486; i 114 scartati (58%% stop) erano net +445 POSITIVI -> filtrarli butta profitto. Per-veto: solo grind_pump discrimina (71 vs 50%% stop, ma n=14); pump_stretch +12pp; rsi_nodip +4pp rumore; spot_sell negativo. Il vantaggio veto-entry 63 vs 38%% NON e riproducibile come regola (artefatto sottoinsieme n=16). RITRATTO il consiglio precedente di estendere veto-entry. Sopravvive: payoff_score>=70 (pulito ma +52), grind_pump veto stretto da OOS. Gli stop long NON sono filtrabili puliti coi segnali attuali. LEZIONE: fare la #2 (misura read-only) ha evitato di deployare un filtro che perde soldi = valore della disciplina test-prima.
  • 19:33 — SHADOW filtro payoff_score long (payoff_filter_shadow.py, offline, zero tocco reale; n=50 con score). Baseline 58%% win 34%% stop +724. Soglia >=70 = punto dolce: butta 5 trade TUTTI perdenti (0 vincenti persi), stop 34->27%%, net +776 = filtro gratis ma modesto (+52). >=80 TROPPO: taglia 8 vincenti, net peggiora +655. >=85 (+1002) e trappola: un solo outlier -347 escluso per caso, overfitting. Conclusione: NON serve flag payoff aggressivo (>=80 fa danni); al piu pavimento >=70; la leva grossa resta veto-entry (63 vs 38%% win). Flag resta OFF, shadow rilanciabile per OOS. Stessa disciplina.
  • 19:29 — DIFFERENZIATO PER TIPO (giusta osservazione Teo: prima avevo guardato solo i reversal). SHORT sano in ogni tipo vivo: cycle-normale 77%% win +2033, veto-entry 93%% +1110, opposite 100%% +1189, reversal 78%% +986; unico marcio revenge CYCSV 40%% stop -353 (gia spento). LONG invece e UN tipo monolitico: CYC-normale 296 trade 38%% win 53%% stop (il buco); veto-entry-long 16 trade 63%% win 13%% stop (il filtro funziona anche sul long!).
  • 19:29 — SEGMENTAZIONE stop long (segment_long_stops.py, 157 stop vs 112 win dentro CYC no-veto). Firma entry perdente: payoff_quality.score BASSO (win 89 vs stop 66; score 80+ =26%% stop, <40 =100%% stop, n=50), BTC-1h piatto (win +0.10 vs stop +0.01), entrato ATTACCATO al soffitto (best_up_pct 21%% win vs 16%% stop). NON separano: btc_3h/btc_6h/imbalance (~50%% ovunque) -> il filtro BTC-3h attuale non becca i long cattivi. Il bot gia calcola payoff_score ma non ci taglia. Leva long = filtrare entry a bassa qualita (veto-entry lo prova gia). PROSSIMO: flag OFF richiedi payoff_score>=soglia su entry long, shadow, valida OOS (n=50 piccolo). Stessa disciplina reversal.
  • 19:21 — E il LONG? (domanda Teo, il reversal era short-only). Long piu DEBOLE: 312 trade 39%% win, 51%% STOP, net solo +1486. Problema OPPOSTO al reversal short: non e l uscita ma l INGRESSO. 159 stop (51%%) = -9041 con mfe medio 1.03%% (vanno quasi dritti allo stop senza salire = entry sbagliate, comprano top che si girano). Vincitori (trailing+target+runner +11k) mangiati dagli stop. Reprice conferma la leva: LONG 0-reprice 54%% stop -> 3+ reprice 6%% stop (aspettare entry migliore evita stop). Fix long = FILTRARE le entry cattive (opposto del reversal = lascia correre). PROSSIMO: segmentare i 159 stop long (firma comune? BTC contro/momentum esaurito/muro sopra) per filtrarli e recuperare i -9041.
  • 19:16 — Tre piste reversal: scelta Teo = FLAG OFF + valida OOS (disciplina). Scoping: NON sono flag semplici - target (args.target_pct), protezioni (turn_protect_enabled ma globale), reprice sono GENERICI per tutti gli short; applicarli solo ai reversal richiede gating reversal-specifico multi-punto nel bot live = modifica chirurgica, non una riga. n=7 troppo piccolo per OOS ora (serve maturino trade). Creato harness OOS check_reversal_leads.sh (rilancia i 3 backtest: protection_backtest, target_stop_grid, reprice_vs_outcome) - rilanciare periodicamente per vedere se le piste reggono a n crescente. TODO fresh session: implementare i 3 flag reversal-specifici OFF, accendere quando OOS conferma. Nulla toccato sul reale.
  • 18:58 — Piu reprice = meno stop? (reprice_vs_outcome.py). CORRELAZIONE FORTE: trade con 3+ reprice quasi zero stop - SHORT 0-reprice 17%% stop/win76%%/+38 vs 3+ 0%% stop/win91%%/+132; LONG 0-reprice 54%% stop/win36%%/+3.5 vs 3+ 6%% stop/win88%%/+63. Sul long soprattutto. MA e correlazione non causa: i trade che reprezzano 3+ possono essere setup migliori (prezzo tornato al livello), non che il reprice li migliori; bucket 2-reprice e il PEGGIORE (short-25 long-86, non monotono). Costo migliorare paper: compute basso (poll 45s->15s o soglia piu bassa), reale insegue gia (3-4s), rischio=chasing se e selezione. TEST causale da fare: abbassare soglia/velocizzare poll paper in SHADOW e confrontare stesso trade piu-reprice vs attuale. (idea Teo, dopo che il reprice reale si e visto veloce abbastanza).
  • 18:52 — TEST velocita reprice reale (domanda Teo: velocizzare invece di cappare?). Il reale gira gia a poll 3s; latenza API KuCoin ~270ms (5 campioni 262-278) -> cancel+place ~800ms -> reprice reale ~3-4s. Il PAPER ripreza ogni 45s (suo poll). Il reale e ~12-15x piu veloce del ritmo di reprice del paper: insegue OGNI reprice (anche 8x, ogni reprice a 45s). Confermato live nel log (SHORT REPRICE SOXLUSDTM 178.672->179.03). CONCLUSIONE: NON serve cappare il paper ne velocizzare il reale - gia sufficiente. Ritirata la mia proposta di cap reprice. (near-miss CHASE resta in shadow, ma il reprice-following dell entry e live).
  • 18:44 — Analisi ENTRY MODIFICATE (entry_mod_analysis.py, reprice/wall). SHORT: 59/85 modificate (69%), reprice medi 0.9 (max 3x), azzeccate 86%% (win-rate 81%%), poteva-aspettare solo 22%% lasciando 0.26%%. LONG: 53/322 (16%%), reprice medi 1.7 ma CODA fino a 8x, azzeccate 72%%, poteva-aspettare 28%% (0.38%%), win 68%%. Il bot ripreza BENE (timing buono, raramente poteva aspettare, lascia pochissimo). Per il REALE: 0-3 reprice = seguibile; la coda long 4-8x reprice il mirror NON la insegue (fill diverso/mancato) = differenza col reale. Candidato: cappare reprice a 2-3 per rendere seguibile, sacrificando poco (beneficio nei primi reprice). azzeccate un po per costruzione (ripreza verso il meglio), il segnale vero e win-rate + poteva-aspettare basso.
  • 18:17 — BACKTEST protezioni reversal (protection_backtest.py, klines vere): togliere early_profit_protect/turn_protect conviene. 7 trade usciti via protezione, tenuti fino al target naturale: 6 runner tagliati recuperano +386, 1 giratore (RAVE) restituisce -152. Net con protezioni +368 -> senza +602 = SALDO +233 (+63%). CONSERVATIVO (tenuto esce al target -2%% esistente, non al fav_until_stop). Cautela: n=7 piccolissimo, 1 altro giratore ribalta; le protezioni salvano davvero i giratori (RAVE). Lead PIU forte/chirurgico: allentare le protezioni sui reversal (non allargare target per tutti). Serve OOS prima del reale. Origine: osservazione Teo su HEMI (early_profit_protect a +11%% vs +65%% disponibile).
  • 18:12 — Esempio HEMI (Teo): reversal uscito via early_profit_protect a +11%% margine (10x), fav_until_stop 6.53%%=+65%% margine -> lasciati ~54%%. ANGOLO NUOVO: non e il target -2%%, sono le PROTEZIONI a tagliare i vincitori. Uscite reversal e quanto lasciano (fav_until_stop medio prezzo): turn_protect 5.67%% (n2), trailing 4.84%% (n7 net+162), early_profit_protect 3.05%% (n5, esce prima net+52), stop 1.48%% (n4 perdenti). Le protezioni (early_profit_protect/turn_protect) scattano al primo ritorno e chiudono a +30/+50%% margine quando il move vale +60%%. TODO: backtest reversal SENZA/allentando le protezioni su klines -> extra-runner vs restituito-giratori (piu chirurgico del target -4%% generico). Cautela: le protezioni esistono per bloccare i giratori, il fav_until_stop e hindsight.
  • 17:15 — Aggregato limit-vs-market AGGANCIATO al diario (ob_limit_vs_market_html in build_diario, sezione OB). Mostra da solo il saldo netto LIMIT vs MARKET per osc (risparmiato + evitato-perdenti - persi-vincenti), per coin, appena arrivano dati. Ora "in attesa di dati". Cosi il verdetto compare senza rilanciare limit_vs_market_agg.py.
  • 17:12 — Aggregato limit-vs-market COSTRUITO (risposta vera alla domanda "conviene il limit paziente su coin illiquide?"). (1) recorder ora SALVA il limit-shadow nel summary PG (limit_would_fill, mkt_worse_pct, order_notional) - prima era solo nel msg TG, non nettabile. (2) limit_vs_market_agg.py: netta slippage-risparmiato-sui-riempiti + perdita-evitata-sui-mancati-perdenti - profitto-perso-sui-mancati-vincenti (adverse selection), per coin -> saldo LIMIT vs MARKET. Vuoto ora (le 12 vecchie catture non hanno il campo, si popola ai prossimi fill osc). Da rilanciare tra qualche giorno per il verdetto. Recorder riavviato (1 istanza).
  • 16:59 — Diario sezione Order-book resa piu chiara: fix "post 5min"->"post 30min", colonna "Come entra" (cycle=LIMIT / osc=MERCATO), verdetto in parole per sistema (cycle prende pulito col limit / osc paga slippage col market su spread largo, un limit paziente potrebbe risparmiare). Cosi si capisce a colpo d occhio se market o limit prende meglio.
  • 16:51 — CHECK recorder OB (11 ingressi/5 uscite reali). Conferma il leak: ingressi OSC a MERCATO su coin spread-largo sanguinano (ESPORTS -0.83%, BU -1.46% slippage = ~-11%% sul margine a 10x); cycle a LIMIT catturano pulito, spesso prezzo migliore (PENGU +1.05/+1.12). Uscite tutte 100%% fill, slippage per lo piu negativo=meglio (non sono il problema). Il recorder ha isolato dove il reale perde: ingressi osc illiquidi. Shadow limit-vs-market gia raccoglie per dire se il limit paziente risparmia.
  • 05:54 — Notifica TG order-book RISCRITTA per neofiti + SIZE-AWARE (richiesta Teo: capibile e "avrebbe preso o no" col margine scelto). Non piu muro di 28 livelli grezzi: ora messaggio a parole. Verdetto principale calcolato camminando il book col MIO ordine (margine x leva -> notional, fetch_multiplier per convertire size del book): PRESO TUTTO / solo in PARTE (%) / NON PRESO. Spiega scommessa (short=scende), prezzo voluto vs preso+slippage, liquidita rapportata all ordine, spread in parole, movimento post (profitto/perdita/pari). Testato 00 -> preso tutto, 00k -> 21%. Livelli catturati 20, multiplier via /contracts.
  • 06:11 — OB recorder: (1) cattura+notifica TG anche all USCITA (non solo ingresso): rileva la chiusura (trade sparito dagli aperti per 2 poll), legge exit_price/reason, valuta se il reale sarebbe uscito col size scelto sul lato OPPOSTO (short esce comprando=asks, long vendendo=bids), messaggio dedicato. handle_exit in try/except (non puo rompere il loop). (2) PREZZI LEGGIBILI: _fmt_price (separatore migliaia, decimali per scala: 64,449.30 / 2.4567 / 0.00001234) e _fmt_usd ($500/$800.0k/$1.25M) applicati ovunque. Testati ingresso+uscita su TG.
  • 07:22 — FIX uscita (dubbio giusto di Teo): il caso avverso diceva "NO, non c e liquidita" ma con uno STOP si esce COMUNQUE (ordine a mercato), a prezzo peggiore. Ora l uscita si calcola A MERCATO (cammino il book per tutto il size senza limite di prezzo) e mostra lo SLIPPAGE vs il prezzo d uscita voluto: verde=al tuo prezzo o meglio, giallo=esci comunque ma X% peggio, rosso=book non copre la size nemmeno a mercato. Testato target(favorevole) e stop(avverso).
  • 07:53 — FIX entry per tipo ordine (2o dubbio giusto di Teo): OSC apre a MERCATO -> entri COMUNQUE, messaggio mostra prezzo medio + slippage (come uscita), non piu "non preso". CYCLE resta LIMIT -> avrebbe preso o no al prezzo esatto. Distinzione via system: osc=mercato, cycle=limit. Testati entrambi su TG. Da valutare: buffer/tolleranza sul limit cycle (allargare) se il mirror reale piazza il limit con margine.
  • 07:56 — Slippage mostrato ANCHE A LEVA (richiesta Teo): 0.10% prezzo -> 1.0% sul margine a 10x. Sia ingresso osc (mercato) che uscita: "X% peggio -> Y% sul margine a Nx". Usa la leva reale del trade (st.lev, default 10). Testato su TG.
  • 08:01 — Buffer/tolleranza sul LIMIT cycle in ingresso (fai-tu): default 0.10% (env OB_REC_CYCLE_BUFFER_PCT), allarga la soglia del limit come fa il mirror reale -> un limit mancato per un tick non risulta piu NON preso. Solo cycle (osc entra a mercato). Messaggio mostra (limit +margine X%). Testato: senza buffer fpct 0%, con 0.10% fpct 100%. Con questo il recorder OB e COMPLETO: ingresso+uscita, neofiti, size-aware, prezzi leggibili, osc-mercato/cycle-limit, uscita-a-mercato, slippage a leva, buffer limit.
  • 09:12 — SHADOW limit-vs-market su ingresso (osc E cycle, richiesta Teo dopo caso ESPORTS: sim +18.8% ma reale ~13% per slippage su spread 0.34%). Dal percorso post-segnale calcola se un limit al prezzo-segnale si sarebbe riempito nella finestra e quanto meglio del market (osc entra a mercato). Riga TG: "Limit invece di mercato: si riempiva (~Xmin) entry Y% meglio" OPPURE "NON si riempiva -> avresti MANCATO l ingresso" (adverse selection: il limit prende solo i trade che prima tornano indietro, manca le reversioni pulite). Zero rischio, misura per capire se su coin a spread largo conviene il limit paziente.
  • 09:14 — OB_REC_POST_MIN 5 -> 30 (richiesta Teo): finestra post-fill a 30 min, cosi il limit-shadow ha tempo realistico di vedere se il prezzo torna al segnale (limit paziente si riempie anche dopo 15-20 min) e cattura tutto il percorso post fino a 30min. Verificato nel processo (pid env OB_REC_POST_MIN=30).
  • 11:57 — SCOPERTA (dubbio Teo): le colonne after_min_price/after_max_price NON sono estremi 6h ma dalla chiusura FINO AD ORA (giorni/settimane; prova: ERA stored after_min 0.0778 vs VERO min 6h da klines 0.0944; BEAT after_max_at 14gg dopo). Mal-etichettate, da cappare/rinominare. Backtest reversal short RIFATTO su KLINES VERE (reversal_stop_backtest.py, 18t, finestra 12h, sim stop-vs-target onesto): allargare lo stop NON conviene (net piatto/peggio fino +6%). Ritirata la raccomandazione precedente (era basata sull after_min sbagliato). Stop reversal lasciato com e. TODO prossimo: (1) fix/rinomina after-6h, (2) fantasmi somme grigie nel daily-pnl + lista trade passati fantasmi.
  • 12:02 — Backtest TRAILING reversal su klines vere (reversal_trail_backtest.py, 18t, finestra 12h, arma +1%): allentare il trailing NON conviene (giveback 0.6% stretto = migliore +948 ~= reale +986; allargando peggiora). Quindi reversal: ne stop ne trailing da toccare, impostazioni gia vicine all ottimo. Il dubbio-dati di Teo ha evitato 2 modifiche sbagliate. TODO invariato: (1) after-6h lasciarlo + AGGIUNGERE colonna fino-ad-ora/fino-allo-stop, (2) fantasmi somme grigie daily + lista trade passati.
  • 12:06 — Fantasmi: chiarito che le somme grigie nel daily sono vuote NON per bug ma perche ZERO fantasmi dal 25/7 (CYCSR/CYCSO promossi->reali, CYCSV/CYCLW disattivati). Storico ghost: CYCSR +654(7), CYCSO +1189(7), CYCSF +154(1), CYCSV -353(5), CYCLW -34(10) = +1611 su 30, tutti pre-25/7. Codice grigio 8b8578 in daily_book_pnl_html gia presente (riapparirebbe se scattasse un CYCSF). >>> RIPARTENZA (contesto pieno, fare in sessione nuova): (1) sezione DASHBOARD Fantasmi-storico che lista i 30 ghost pre-25/7 (ora filtrati via da NOT LIKE CYCS_); (2) colonna after-stop (quanto avrebbe corso fino a beccare lo stop, su klines vere - reversal_stop_backtest.py ha il metodo). Reversal: stop+trailing NON toccare (verificato klines).
  • 12:12 — Badge EX-SHADOW/FANTASMA nella tabella trade (trade_row di kucoin_cycle_retest_paper.py): span viola 🎓 con tipo (ex-shadow REVERSAL/VETO-ENTRY/THIN-WALL, ex-fantasma OPPOSITE) da id -RW-/-OH- o entry_context. Live nel card combinato (verificato, 27 veto-entry taggati). Trade oggi 26/7: PEPE=ex-shadow reversal, PENGU=ex-shadow veto-entry, ZAMA=normale. TODO: (a) stesso patch nel bot SHORT (card short standalone non ha badge), (b) fix osc dopo-uscita che alcune mostrano ancora dritto-allo-stop -6% invece del percorso reale.
  • 12:16 — FIX osc dopo-uscita (price_alert_web.py ramo breach_ts): non mostra piu "e andato dritto allo stop -6% senza rimbalzare" (nascondeva il movimento reale) ma il DETTAGLIO completo come il ramo else: ha continuato +X% (px) / contro -Y% (px) [max contro Z% dall entry] -> poi allo STOP (-6%), usando gli estremi veri after-exit (_apx/_apn). Web riavviato col launcher (1 istanza pulita, pid nuovo). "dritto allo stop" ora 0 nel sorgente. Badge ex-shadow: fatto nel card combinato. TODO resta: badge nel bot SHORT standalone.
  • 12:21 — Badge ex-shadow ANCHE nel bot SHORT (trade_cell riga 5434 di kucoin_cycle_short_retest_paper.py, parso entry_context inline con guard). Bot short riavviato. Verificato nel card short: 11 REVERSAL + 40 VETO-ENTRY badgati, emoji e testo puliti. Badge ora completo su ENTRAMBI i card (combinato + short standalone). Fatto in questo giro: badge (2 card), fix osc dopo-uscita. TODO grossi rimasti: sezione fantasmi storici in dashboard + colonna after-stop.
  • 12:26 — FIX badge (incoerenza beccata da Teo su PENGU): veto-entry/thin-wall NON sono ex-shadow (non erano ghost, sono entry EXPERIMENTAL validate che girano ancora come experimental) -> badge ora "🧪 experimental VETO-ENTRY (validato)" coerente col 🧪 del card. reversal/opposite (erano ghost->reali) -> "🎓 ex-fantasma → reale". Fix in entrambi i bot, riavviati, verificato nei card (no piu ex-shadow). BUG LATENTE scoperto: restart_short_paper_gen.sh NON fa self-pkill come il long -> lanciato in loop ACCUMULA istanze (creato 4, poi pulito a 1 con ps -eo cmd grep -c). Per riavviare il short: avvio SINGOLO (mai loop) o aggiungere pkill al launcher.
  • 12:32 — TODO(1) FATTO: sezione FANTASMI STORICI nel card (ghost_history_html in kucoin_cycle_retest_paper.py, agganciata a stats_html dopo ghost_panel_html). Details collassabile con tutti i 29 ghost chiusi (net<>0, esclude artefatto pnl0) da tutte le famiglie GHOST_FAMS, ognuno con stato (promosso->reale RW/OH, disattivato revenge/wait, ghost attivo flip). Verificato nel card. NB: long bot gira come ./venv/bin/python3 (non python3) -> per contarlo: ps -eo pid,cmd | grep kucoin_cycle_retest_paper.py | grep -v short. TODO(2) after-stop RIMASTO: serve modificare l after-checker per calcolare+salvare max-favorevole-fino-allo-stop (su klines) + colonna nel display.
  • 12:36 — TODO(2) DATI: after-checker capito (backfill_after_trade calcola 6h VERE via interval_klines; extend_after_trade estende all-time = richiesto da Teo 17/7, ecco il mislabel). fav_until_stop.py: per reversal short, dall uscita quanto correvano ANCORA a favore fino a toccare lo stop (orizzonte 48h, klines vere). Risultato: net reale +986, EXTRA fino-allo-stop +5030 su 18 (5x, molto piu credibile del +22557 weeks-fantasy) MA e tetto (uscita al minimo esatto); il trailing realistico 12h dice comunque di non allentare -> gap non timbrabile, non parametro. Colonna PERSISTENTE ancora da fare: nuovo campo fav_until_stop_pct + calcolo nel checker (walk klines fino a stop) + display in trade_row.
  • 12:41 — TODO(2) FATTO: COLONNA after-stop nel bot short. Nuovo campo DB fav_until_stop_pct (ALTER su entrambi i DB). Funzione backfill_fav_until_stop_short (walk klines reali dalla chiusura, orizzonte 48h, congela quando prezzo tocca lo stop; is_short=stop>entry) agganciata nel loop dopo backfill_after_trade_short (8/ciclo). Display in trade_cell: "🎯 fino-stop +X% se tenuto". Pre-riempiti 16 reversal, verificato nel card (BILL +11.3%, HEMI +6.5% ecc, coincidono con fav_until_stop.py). Diverso da after_min (all-time): questo e cappato allo stop/48h = realistico. TODO opzionale: stessa cosa nel bot LONG (trade_row 7393) se serve.
  • 12:48 — Colonna after-stop FATTA anche nel bot LONG (patch gemello, riavviato). + TEST ipotesi Teo (target=struttura recente): structure_target.py, target=minimo-4-giorni-prima NON funziona (supporto raggiunto solo 1/18=6%; i reversal si fermano sopra). Il +1073% dello script e BOGUS (assume target irraggiungibile che si riempie). PERO i minimi reali (min_post) sono -4/-14% sotto entry vs target -2% -> target troppo stretto confermato, ma i minimi NON sono a un livello di struttura semplice (sparsi). Prossimo test giusto (non ancora fatto): target fisso piu largo (-4/-5%) riempie piu di quanto manca? NON allargare nulla finche non testato.
  • 12:51 — TEST LARGHEZZA TARGET reversal short (target_width_backtest.py, klines vere dall entry, 48h, 18t): PRIMO lever che migliora! target -2% attuale +1192 vs -5% +1671 (~+40% net); -4% +1382, -6% +1627. Ha senso (i minimi reali -4/-14%, target -2% incassa presto). MA rumoroso (-3% fa peggio del -2%, non monotono, n=18), win-rate 72%->44% (stop 5->10), in-sample, probabile concentrazione su 2-3 discese grosse (ERA/BILL), e assume target-o-stop puro (col trailing attivo esce prima). PROMETTENTE ma NON deploy: validare OOS + interazione trailing prima di toccare il target reale. Il target (non stop/trailing/supporto) e il lever giusto - intuizione Teo confermata.
  • 12:55 — GRIGLIA 2D target x stop reversal (target_stop_grid.py, klines vere, 18t). TRAPPOLA: colonne stop -10%/-12% fanno +3410 MA a 10x stop -10% = LIQUIDAZIONE (-100% margine) = togliere lo stop, NON fare. Segnale VERO+SICURO: target -4% batte -2% a OGNI stop; target -4%/stop -6% (attuale) = +1636 vs +970 = +69%, 13 win su 18, senza toccare lo stop. Conclusione: aumentare stop NO (verso liquidazione), aumentare TARGET a -4% SI (robusto/sicuro). Ancora in-sample n=18 -> serve OOS prima di toccare il target reale. PROSSIMO (idea Teo): segmentare i trade che vanno a stop per un tratto comune (predittivo?).
  • 12:59 — SEGMENTAZIONE stop reversal (segment_stops.py, 14 win vs 4 stop). Firma dei 4 perdenti (n=4 = ipotesi, non prova): BTC non supporta short - btc_filter.daily_short_direction_ok WIN=1/STOP=0, daily_short_return_pct WIN-0.62/STOP+0.07 (BTC scende=buono), coin_at_fill.ret_15m STOP+0.29 (coin ancora in pompa al fill). = reversal entrati contro momentum quando BTC non cadeva. NB: daily_short_direction_ok=0 = il filtro BTC del sistema li segnalava gia, il reversal-watch bypassa. IPOTESI azionabile: far rispettare al reversal il filtro BTC daily -> evita i perdenti senza allargare il target per tutti (idea Teo del filtro chirurgico). Confermare con piu perdenti prima di deployare. Due leve convergono sugli stessi trade (BTC contrario): filtro (meglio) o target -4%.
25/7
  • RESET STATS eseguito: cycle paper ricomincia da 1000 (stats vecchie 24/6-25/7 archiviate in /home/teo/Desktop/kucoin-5d-ranker/futures-alerts/archive_reset_20260725_0005); i trade restano nel DB per shadow/contatori, escono solo dal conteggio capitale
21/7
  • 2026-07-22 08:36 BASELINE CYCLE crypto-only + builder ricostruito (build_cycle_traits_baseline.py, workflow): la baseline profilo-somiglianza (cycle_traits_baseline.json) era prodotta da un workflow ad-hoc mai committato -> ricostruito il builder (sorgente DB paper per lato, trade fillati dal 24/6, vincitori cap-30 recenti + perdenti in finestra, feature_baseline med_w/med_l/iqr per lato; flag e liste-feature EDITORIALI preservate verbatim dal json). NOVITA: ESCLUSI i trade equity (coin_type_util.coin_type oltre a entry_context.coin_type, che nello storico e None) -> baseline puramente crypto. Esclusi 7 trade equity: LONG 3 (KORU/SOXL/SKHY), SHORT 4 (MU/SOXL/SKHY/DRAM). Effetto: SHORT n_loss 10->9 (via la perdita equity SOXL), RSI/dist_high short ricalibrati sul solo crypto (rsi med_w 68.9->62.6, med_l 56.2->50.2); LONG n_loss 23->21. n_win resta 30/30 (cap). Backup json .bak, builder py_compile OK. Nessun restart: il reader _cyc_traits_load ricarica per mtime.
  • Glossario diario AMPLIATO (audit voci mancanti; patcher assert-anchored su diario_template.html, backup .bak_audit, tag-balance verificato details/section/table/div/tr, build rigenerato): aggiunti 3 blocchi in fondo alla sezione Glossario. (1) Resolver & Flip: shadow_outcome_audit = il resolver orario (:17) che RISOLVE i candidati scartati (paper_trade blocked% e pullback_trade skipped con >=12h di storia) sulle candele - toccato-entry 6h, target-first vs stop-first, MFE/MAE, ritorni 30m/2h/6h, motivo normalizzato in reason_group, aggregato in shadow_outcomes; piu i 6 esperimenti flip osc_short_flip, osc_long_flip, osc_flip_chipforte, cycle_short_flippompa, cycle_short_okingann (tutti con book-cap sul lato opposto). (2) Score & Fiducia: fiducia v2/v2s (display-only, mismatch vs fiducia v1 gate), dump_score_v1, payoff_quality, exit_confidence, rebound_potential, Somiglianza v2. (3) Regole attive: safe_lev (leva adattiva), anti-chase MAX_CHASE 1.5%, runner-META v6, guardie sim osc, gate ingresso.
  • Glossario NOTA onesta: il 4o blocco previsto "Definizioni base mancanti" (MFE/MAE ecc.) NON e stato inserito perche la sorgente nel task era TRONCATA a meta riga ("Maximum Fav...", con details/table non chiusi): inserirlo avrebbe rotto la pagina. Va completato quando arriva il testo integro.
  • Resolver: nessun patch di codice applicato in questo giro (lista patch vuota nel task) -> nessun reason_group nuovo aggiunto al resolver; la voce glossario descrive il reason_group gia esistente (numeri->N, primi 2 segmenti separati da ":").
  • UI web (Teo): (1) colori chip ricalibrati per il tema chiaro crema - override [style*=color] che scuriscono verde/rosso/arancione/grigio chiari (illeggibili su #f4f1ea) a versioni scure leggibili. (2) SHADOW riconoscibile: profilo-INVERTI ora BLU grassetto e a SINISTRA (param first nella funzione add() = insert(0)). NB: gli altri marcatori SHADOW sono i "Tipo:" sulle card (file bot kucoin_cycle_*), non nel web - da fare separatamente se serve blu anche li
  • After-track osc a TEMPO INDETERMINATO (Teo): rimosso il cap 48h; ora traccia il max/min post-uscita fino ad ADESSO e si ferma SOLO quando il percorso tocca lo STOP (side-aware, query con stop/side, condizione after_max/min vs stop). Cosi la colonna dopo-uscita "avrebbe toccato lo stop?" resta viva per sempre finche non e determinata. Accumulo incrementale (il max/min cresce ogni ciclo), LIMIT 10/ciclo come throttle. Restart 20 watch. Risposta a Teo su dove vivono gli shadow: JSON+DB (li leggo io) + storico/label (a schermo)
  • Tabella osc dopo-uscita: risponde alla domanda vera di Teo (dopo essere uscito, la coin ha poi RAGGIUNTO LO STOP? = tenere sarebbe stato stoppato), non -6%% dall exit. Aggiunto: max-contro-%%-dall-entry + flag "avrebbe toccato lo STOP (tenere=stoppato)" / "stop NON raggiunto". Calcolato da after_max/min_px vs il livello stop del trade. Sui serviti: 11/12 stop non raggiunto, 1 si. Chiarito il fraintendimento: analisi flip = dall entry (verificata, corretta); era solo la colonna tabella dopo-uscita a misurare dall exit -> ora dice esplicitamente se ha toccato lo stop
  • Tabella osc chiarita (Teo confuso su entry-vs-exit): header espliciti "meglio/peggio (dall entry)" e "dopo l uscita (dall EXIT)"; aggiunti i PREZZI alla cella dopo-uscita. Il valore ha-continuato/contro e SEMPRE dall exit (non dall entry): dopo la chiusura la coin ha continuato X%% a favore poi Y%% contro. Ora inequivocabile + coi prezzi
  • Tabella osc chiuse: la colonna px-ora ora mostra il prezzo attuale con vs-exit (grigio) E vs-entry (side-aware colorato: verde=sarebbe in profitto se aperta, rosso=in perdita). Usa il px_map gia in pagina (no chiamate extra). Arricchita la cella esistente invece di aggiungere colonna (zero rischio conteggio-colonne). Header: px ora (vs exit / vs entry, 1x)
  • EXP-VETO-ENTRY aggiunto allo STORICO (Teo, marker preciso experimental_veto_entry, non il LIKE %experimental% impreciso): riga 14/16 net -35 dal 9/7 -> bypassare il veto BTC neutro e leggermente negativo (conferma analisi 8/7). NEAR-MISS e WAIT-REPRICE NON aggiunti: 0 trade veri (mai scattati; i near_miss precedenti erano solo campi-tracking dei pending, pollution del LIKE). Si aggiungono al primo fill vero. Verificato campo-sorgente: _srcv=ctx[source], _fpol=paper_pending.fill_policy, veto=ctx[experimental_veto_entry]
  • Fix rendering diario: le 5 righe retroattive shadow non si vedevano nella pagina perche erano sub-bullet a 2 spazi ( - ) ma changelog_html rende SOLO le top-level (- ). Convertite a top-level -> ora appaiono tutte nel diario. Chiarito a Teo: nella riga EXP-VETO il check muro-ask (>=3000) e spot-imbalance (<=0.15) sono due gate distinti, entrambi passavano
  • DOCUMENTAZIONE RETROATTIVA (buco changelog colmato, Teo): 5 shadow gia tracciati in storico/glossario ma mai changelogati (pre-21/7, solo-paper):
  • EXP-VETO-ENTRY (CYCLE_EXPERIMENTAL_VETO_OVERRIDE_BTC): entra su short bloccato da BTC NEUTRO solo se muro ask>=3000 + spot non compra (imb<=0.15) + ritirata ok; testa se allentare il filtro BTC sui neutro-puliti conviene (casi 8/7 H/VANRY: allentare PERDEVA)
  • SHADOW BTC-OPP HOLD: quando un pending sarebbe cancellato da BTC-opposite-confirmed, lo TIENE invece (cancel-semaforo ignorato); misura se cancellare conviene
  • SHADOW WAIT-REPRICE: durante la fase wait-BTC riprezza lentry al minimo della fase; misura il guadagno del rientro piu basso
  • NEAR-MISS: entra al best-bid del rigetto quando il prezzo arriva <0.30%% dal limit SENZA toccarlo (il paper filla dove il reale resta appeso -> divergenza paper-reale nota; ora replicato nel reale in shadow-mode)
  • SHADOW FLIP (margin_kill_flip): quando un trade e killato per margine, registra un flip virtuale verso lopposto
  • Layout osc-sim FIX VERO: il primo tentativo (globale 178->208) non toccava la pagina osc-sim perche ha body{padding-left:0!important} che lo cancella + usa #osc-wrap. Il controllo vero era #osc-wrap{padding-left:192px} (solo 14px dal menu 178 = attaccato) -> portato a 230px (52px dal menu). Verificato via fetch che il 230 e servito davvero. Serve hard-refresh browser (cache). Lezione ricorrente: verificare DOVE arriva il fix (la pagina aveva un override locale che vinceva sul globale)
  • Shadow flip-chip-forte: aggiunta variante TRAILING (arma +2%, trail 1%). Risultato GROSSO: trailing +5642 (35 win) vs pavimento +2% +920 (35 win) vs tetto +6% fisso -2546. Il trailing stravince: stesse 35 vittorie del pavimento (stesso downside) MA i vincitori corrono e catturano il +21% max-exc media che il target fisso buttava. Let-run giusto = trailing, non target ambizioso. CAVEAT: retro + trailing simulato su candele 5m (max/min per candela) = stima ottimistica; direzione robusta (combacia con backtest osc trailing +388). Da validare live. Layout osc-sim: confermato server serve padding 208px>menu178px (fetchato), tema chiaro #f4f1ea intenzionale (diario 18/07); se Teo vede male = cache browser (hard-refresh)
  • Shadow flip-chip-forte: aggiunte max-excursion + variante TETTO target+6%. Risultato istruttivo: PAVIMENTO +2%(=+20%% a 10x) +920.6 (80%% win) vs TETTO +6%(=+60%%) -2348 (48%% win). Essere avidi PERDE: stop-first, i flip toccano max (+21%% medio, 31/44 oltre +6%%) ma spesso DOPO aver ridato indietro fino allo stop -6%%. Il +2%% esce presto e banca -> il +20%% e il target OTTIMALE, non un limite pigro. Unica let-run sensata = TRAILING (arma +2%%, trail 1%%), non target fisso: alza il pavimento senza il disastro dell avidita. Candidato: aggiungere colonna trailing
  • Layout pagina Trade-simulati (osc-sim) sistemato: usava il padding GLOBALE 178px ma il menu e 190px -> coperto; alzato globale a 208px (le pagine watch hanno il loro override 245 e non cambiano). Chiarito a Teo: il flip-chip-forte (+920.6) e misurato col target FISSO +2%=+20% a 10x (conservativo, non let-run); molti flip toccavano molto di piu intra (AKE +45%). Candidato: colonna max-excursion + variante target+6%/trailing per vedere il tetto
  • Layout osc: contenuto spostato a destra padding-left 210->245px (era attaccato/coperto dal menu laterale ~190px), 2 pagine osc (main+storia). Web riavviato (giu ~1min per timing quit+relaunch del launcher, poi ok HTTP 200)
  • Shadow FLIP-SE-CHIP-FORTE montato (cron 15 */2): registra flip->opposto SOLO se chip forte (pompa/muro/coltello/taker). Retro n=44: flip +920.6 vs reale -314.1 (delta +1235), 80%% win. NOTA onesta: totale deduplicato +920 (ogni trade 1 volta); le somme per-chip (+4300) si SOVRAPPONGONO, short-contro-pompa e il vero motore (gli altri co-occorrono e ereditano merito) -> forse stringere a pompa(+muro). E retro=senno di poi: lo shadow accumula in AVANTI, decisione solo se regge live. Chiude la catena flip di oggi: da a-tappeto (bocciato) a selettivo-per-chip (promettente ma da confermare forward)
  • FILTRO-CHIP FLIP (risposta domanda Teo): flip_net osc per tipo di chip warning. I chip arancioni/rossi FORTI rendono il flip conveniente: short-contro-pompa +1624 (93%% win), coltello +1096, taker-contro +927, muro-addosso +704 (88%%). MA il valore viene SOLO dai chip: trade SENZA chip flippati perdono -906 (avg -226). Eccezione: livello-fresco = pareggio (-24, warning debole). Regola azionabile: flippare SOLO con warning forte, non a tappeto. Raffina tutto il discorso flip di oggi da generale a selettivo. Candidato shadow: flip-se-chip-forte. n grandi solidi (pompa14/coltello28/taker18), alcuni piccoli
  • Rimossa etichetta hardcoded "(profilo-stop)" dal chip muro-ADDOSSO nel web (compariva su OGNI muro-addosso a prescindere = fuorviante, la fonte della confusione arancioni/rossi-vs-profilo-stop di Teo). Ora il chip e solo warning rosso; chi decide profilo-stop e il verdetto per-lato vero. Web riavviato HTTP 200. Fix per-lato ora davvero coerente end-to-end (osc card + dashboard verdetto + niente label fissa ingannevole). RESTA: filtro-chip flip (flip_net per tipo chip)
  • COMPLETAMENTO fix profilo per-lato (Teo ha beccato che era a meta): il DASHBOARD (price_alert_web._somiglianza/_sim_cat) aveva la SUA baseline _simstat GLOBALE, separata da osc_live_watch che avevo gia fixato -> il verdetto a schermo era ancora direzione-cieco. Ora _simstat e per-lato (short/long + fallback globale), _somiglianza usa il side del trade, _sim_cat prende side param (evoluzione entry->exit). Patch compile-checked + web riavviato HTTP 200. Il (profilo-stop) sul chip muro-ADDOSSO resta etichetta hardcoded informativa (giusta). RESTA: filtro-chip flip (arancioni/rossi -> flip_net per tipo di chip)
  • BUYABLE all entry in ENTRAMBE le direzioni (Teo per sicurezza): ogni card d entrata (osc + cycle) ora stampa "book entry (10x): LONG ~X (ask) / SHORT ~Y (bid) USDT" = quanto margine il book regge per lato (ask/leva per il long, bid/leva per lo short, cap 1000 floor 100). osc in osc_traits_text (restart 20 watch), cycle in cycle_traits_html condiviso (restart long+short). Rende visibile il book-cap dove serve: all entrata. Item 2 shadow long->short deployato (cron 9 */2): flip->short dei long osc +503 vs -79.7 (23/29). Correzione AKE ledger completata (cap 945.62)
  • Correzione AKE (Teo): lo short (chiuso +56.4 target) CONVERTITO in long col PnL/exit del long (+131.42); il long spurio (aperto 19:26 mentre ancora short) azzerato a 0 (mai preso, riga tenuta per ricordo). Ledger capital_after ricalcolato: base 784.95 -> conv-long 916.37 -> TRIA 945.62 -> long-0 945.62; sim_meta allineato 945.62. Capitale osc finale 945.62 (era 1002.02: -56.4 = il +56.4 short sostituito). RESTA: item 2 shadow simmetrico long->short profilo-stop (da montare, additivo)
  • PROFILO-STOP PER LATO nel LIVE osc (fix Teo, validato in shadow 7/25): _osc_sim_baseline ora calcola la baseline PER LATO (side) con cache per-lato; osc_traits_text passa il side. Patch compile-checked + smoke-test sintassi OK + restart 20 osc-watch: tutti vivi, 0 traceback. Il badge profilo a schermo e ora direzione-aware (long e short stesso coin possono differire). CYCLE verificato: era GIA per-lato (baseline con chiavi long/short, cycle_traits_html sceglie per side) - nessun bug li. Capitale osc riconciliato 841.35->1002.02 (sim_meta era rimasto indietro, mio errore chiusure manuali). RESTA: shadow simmetrico long->short (item 2 Teo) da montare
  • PROFILO-STOP PER LATO (fix Teo, direzione-aware) - nello SHADOW osc-flip prima del live: baseline calcolata separatamente per short e long (non piu globale cieca). RISULTATO: 7/25 short cambiano verdetto con baseline-short (28%%, il fix conta). Profilo-stop(PERDITE) per-lato: n=2 flip +376 (2/2 win) vs -212 da short - supporta flip-profilo-stop con direzione corretta. AKE come short=neutro (glob diceva vittorie), long-base=neutro: le letture divergono = il punto. Prossimo: se regge a n crescente, portare per-lato nel LIVE osc_live_watch (_osc_sim_baseline) + restart 20 watch. Chiusure osc oggi: AKE short +56.4(target), AKE long convertito +131.4(max +45%% a 10x), TRIA +29.3(mfe) -> capitale osc 1002.02
  • Shadow osc-flip RI-FILTRATO col PROFILO VERO: replicato fedelmente _osc_sim_baseline (11 feature, mediane W/L + IQR, verdetto nf>=5 dl<dw*0.8) - osc_live_watch NON importabile (no guard, parte il loop). Split per profilo: PERDITE(profilo-stop) n=1 flip +188 vs short -103 (1/1 ma n=1=niente, AKE ancora aperto); VITTORIE n=7 flip +529; NEUTRO n=15 flip -491; tutti +226. Il profilo SEPARA (neutro perde, vittorie vince) ma il sottoinsieme profilo-stop e quasi vuoto -> accumula. Cron 3 */2 gia attivo. Ipotesi Teo ora replicata correttamente e pronta a riempirsi
  • Shadow FLIP OSC deployato (cron 3 */2, caso AKE +45% a 10x long): flip->long tutti gli short osc chiusi n=23 = +226 vs short -4 (18/23 win), book-capped su ask20/leva. PROMETTENTE ma: (a) filtro profilo-stop NON fatto - approach_gate_veto e il proxy SBAGLIATO (0 su chiusi, il vero profilo-stop e badge calcolato dal feat_json come i tratti cycle, DA REPLICARE); (b) AKE e ancora aperto (non nei chiusi). AKE verificato: long +4.5%%=+45%% a 10x MA ask 7645 -> book-cap ~115-764 = size briciole (direzione giusta, book strozza). TODO prossimo: replicare la logica profilo-stop osc e ri-filtrare lo shadow. Q Teo: il cycle HA lequivalente = tratti simile-a-perdite v1 + v2
  • Shadow FLIP-POMPA deployato (cron 57 */2, la regola azionabile: flip->long degli short in pompa vol>=2.5): PRIMO dato n=6 NEGATIVO, flip_net -627 vs short reale -98 (win 3/6). Il volume alto separava i grossi nellanalisi ma come REGOLA secca non regge (piccolo campione ottimista). Registra rsi14_15m+bestHi per affinare. Decisione a n>=15; se resta <0, hyp bocciata. AKE osc: short book sottile ask20 7645 -> flip-buy sarebbe size-limitato (~764); -21% = mae 2.8%x10x. TRIA osc: mfe reale +1.1%, mai fatto +10% (sim corretto). Verifiche live confermano: il book del lato compra va sempre controllato (osc gia skippa book<100)
  • FLIP all-entry book-capped, DIFFERENZIATO stop-veri vs solo-flaggati (Teo): la differenza e tutto. STOP veramente raggiunti (n=12) flippati->long +2%/-4% = +1568 (win 11/12); +6%/-6% = +2030 ma solo 7/12 (piu varianza, per i grossi). SOLO evidenziati simile-a-perdite ma NON stoppati (n=10) flippati = -660 (+2/-4) fino a -1940 (+6/-6): flipparli PERDE. Quindi il segnale NON e il flag tratti, e lo STOP VERO. -6% stop utile solo se accoppiato a target +6% (col +2% si tocca prima, allargare bleeda). RICONOSCERE i grossi (bestHi>=6%): volume 1h medio 2.8x vs 1.3x = la pompa (coerente col gate NO-SHORT v2). Hindsight su chi-stoppa, ma vol e recognizable all-entry. Shadow candidato
  • v2 tratti SEMPRE visibile (Teo "la vedo solo in alcuni"): aggiunti chip "neutro (profilo incerto)" per zona ambigua (dw~dl) e "n/d (pochi dati: N feature)" per nf<3. Ora 125/125 long e 326/326 short (prima 72%/41%). SCOPERTA: 54%% degli short e n/d = nf<3 (context scarno) -> v1/v2 somiglianza non applicabile a meta degli short. cycle_traits_html condiviso, restart long+short
  • FLIP-13 verdetto (domanda Teo: short a-perdere andati in stop, flip o skip?): flippare TUTTI i 13 short "simile a perdite" = DISASTRO -2160 vs restare short +468 (diff -2628). Solo 2/13 (BP,SOXL = gli stoppati) arrivano al +6%% target; gli altri 11 vanno al -4%% long-stop o timeout. Il cherry-pick dei 3 stoppati (+764) era senno-di-poi puro. Su questa popolazione NON-toccare batte sia flip sia skip; il flag "simile a perdite" sugli short e CATTIVO segnale (i 13 come short fanno +468). Chiude il filone flip-short-perdite: bocciato come regola
  • FLIP-WATCHER book-capped: applicato lo stesso fix del CF anche al flip-watcher (long->short): il flip-short si dimensiona su bid20/leva (cap1000 floor300) dal book reale, non piu sul margine del long. 0 chiusi ora -> nessuna storia riscritta, vale per i fill futuri. flip_replay_true resta funzione pura (il chiamante passa il margine giusto); i retro Set-P (+97/+639/+1069) restano col caveat margine-naif. Ora TUTTI i CF di flip live sono onesti sul lato opposto del book
  • FLIP CF book-capped (verifica Teo "il margine reggeva sul book?"): il flip riusava il margine dello SHORT (dimensionato su bid20) — sbagliato, il long flippato entra sul lato ASK. Ora dimensiona su ask20/leva (cap1000 floor300) dal book reale in entry_context. OK-ingannevole: flip CF +239 -> -60 (naif sovrastimava ~300); 0 book troppo sottili (sempre apribile, ma a size diversa: es. EVAA short strozzato a 321 ma ask profondo -> flip full-size -412). Skip (+570) batte flip (-60) ancora piu netto. STESSO difetto su flip-watcher (long->short, va su bid20) e flip_replay_true: prossimi da correggere
  • Etichetta REVERSAL onesta: da "(specchiato dal reale)" a "(segnale paper, non un fill reale)" — era falsa: short reale fermo dal 14/7 (ultimo EVAA), zero trade ONDO reale; la card e sempre un segnale paper del reversal-watch, mai un fill reale. Patch render-time su entrambi i file paper (long=dead code, mai renderizza short_reversal_watch), restart bot short + web (web buttato giu per errore da pkill -f, gira in ~/Desktop/price-alert non in kucoin-5d-ranker; ripristinato col launcher). Card ONDO #144 gia aggiornata
  • OK-ingannevole: aggiunto FLIP CF mirror accanto allo skip (domanda Teo): skip +569.6 BATTE flip +239.2 su questa cella (5W/2L: i 5 short vincenti flippati muoiono, 4 su 5; BEAT flip -412 stoppa ANCHE LUI = perdevano entrambi i lati, lezione 11/7). Conferma il meccanismo: flip paga sui set pieni di stop (simile-a-perdite), skip sui set winner-heavy. Riga diario con entrambi i CF
  • SHADOW OK-INGANNEVOLE deployato (cron 2h, ok Teo): short con checklist>4 OK ma tratti-perdita (v1/pompa/fuori-scala) -> candidato skip pre-registrato; primo run riproduce l analisi al centesimo (n=7, 5W/2L, net -569.6, skip CF +569.6); riga nel diario (shadow short), json cycle_short_okingann_shadow.json, decisione a n>=15 con criterio skip_cf>0
  • TEST SEMAFORO ENTRY sui chiusi (domanda Teo; long 42 scorati + short 37, checklist esiste solo dal 28-29/6): (1) DA SOLO NON SEPARA, confermato su entrambi i lati - long: bucket non monotoni, score mai >6 e mediana 0.75 (quasi sempre DEBOLE = non discrimina per costruzione), skip chk<=4 = -932; short: WR piatta 71-78%, net INVERTITO (score<2 = bucket migliore +1371), skip = -889. (2) INCROCIO checklist<=4+flag-tratti (tesi ONDO) SMENTITO: il doppio-flag e' una cella BUONA (long 70% WR +430; short +567 e SENZA l'ONDO di oggi sarebbe la migliore: 88% WR +1179) - su ONDO ha morso il GATE POMPA, non il semaforo debole. (3) SORPRESA INVERSA: sul SHORT l'unica cella negativa e' checklist>4 'OK' + flag-tratti = 'OK-INGANNEVOLE' (n=7, -570, dentro SOXL -612 e BEAT -369 entrati a checklist 5.25 OK): il semaforo verde dava falsa fiducia dove i tratti urlavano. n=7 con 2 trade dominanti -> SHADOW pre-registrato (skip CF +570; soglia decisione n=15). (4) skip solo-POMPA unico CF positivo (+154) ma n=5 tutto su ONDO. LONG: nessuna regola, ogni skip costa (-33..-932). Verdetto: semaforo inutile come filtro (Teo ricordava bene), l'incrocio utile e' solo la variante OK-ingannevole short, in shadow
  • ANALISI semaforo-vs-tratti SHORT (semaforo_incrocio_short.py, 58 chiusi fillati, 37 con score dal 28/6): il semaforo DA SOLO non separa (WR piatto 71-78% su tutti i bucket; net NON monotono: <2 = +1371 il MIGLIORE, 2-4 = -578, 4-6 = -218) - anzi sui short i DEBOLE vincono. Incrocio 2x2: la cella doppio-flag (chk<=4 + tratti v1/pompa/fuori-scala) NON e' la peggiore (n=9, 78%, +567; senza ONDO +1179) - la peggiore e' chk>4 + flag (n=7, -570: SOXL -612 e BEAT -369 avevano checklist 5.25 OK!). Controfattuali: skip chk<=4 = -889 (perde SKYAI +669), skip doppio-flag = -567, skip v1 = -468; SOLO skip-pompa e' positivo (+154) ma n=5 e regge interamente su ONDO -612. Onesta': celle piccole, net dominato da 4 trade (SKYAI/SOXL/ONDO/BEAT), baseline tratti calcolata su questi stessi trade (look-ahead), regime unico 3 settimane. Morale per PENGU 3.2/10: lo score basso da solo NON e' motivo di uscita; il segnale che ha morso oggi e' il gate pompa, non il semaforo
  • News-watch affinato: sottostante USA controllato SEMPRE per i 5 token-equity mappati (anche senza trade attivo: l'avviso serve PRIMA dell'entry, lezione SNXX), dedup per sottostante, atteso 2x nel messaggio, ticker SK Hynix corretto (000660.KS). Primo alert vero gia' sparato: SK Hynix +4.1% -> attesa ~+8% su SKHY/SKHYNIX (coerente col chip-rally di oggi)
  • NEWS-WATCH deployato (cron 10min, ok Teo, solo fonti GRATUITE): announcements KuCoin+Binance, RSS CoinDesk/CoinTelegraph (match case-sensitive sul ticker: Bank of Korea non matcha BANK), sottostante USA per i token-equity 2x (SNXX->SNDK, SOXL, IBM, SPX, SKHYNIX->HXSCL: move >=3 percento ultima sessione = alert, era il segnale con 8-12h di anticipo), monitor blow-off (+80 percento/7g = rischio dump stile BANK). Watchlist automatica dai trade open/pending dei 3 sistemi + watch osc (28 simboli). Alert Telegram bot esistente + log jsonl per valutazione shadow a posteriori. Primo run seed silenzioso. NIENTE feed X a pagamento (meta dei movimenti non ha news)
  • FIX 'peggio live' osc (Teo, caso TRIA): mae/mfe si aggiornavano solo dalle candele 5m CHIUSE (lag 5-10min); ora il prezzo live del ciclo watch (60s) entra nel min/max prima della UPDATE dei trade aperti. Verificato: TRIA mae 0 -> -0.567 al primo ciclo (= px live esatto). La logica di chiusura resta sulle candele (invariata)
  • Anche TOWNS long (stop notturno -106.5) annullato+rimborsato (Teo): all'entry aveva coltello -2.02 + taker contro + MEZZO-RANGE 45.9 (la zona 'da evitare' dell'analisi entry) = arancione/rosso come gli altri due. Capitale osc 678.5 -> 784.9. Totale annulli oggi: 3 stop arancioni (BANK, SNXX, TOWNS) = +346 rimborsati; il gate-coltello shadow ne fara il conteggio ufficiale
  • SOMIGLIANZA v2 deployata (shadow accanto al v1, ok Teo, dal caso ONDO): (a) DIREZIONALE - feature oltre la mediana-vittorie dal lato opposto alle perdite (>=0.5 IQR) contate come fuori-scala, >=2 = 'FUORI SCALA: non e il profilo delle vittorie'; (b) GATE POMPA solo short: ret_1h>=3 o ret_24h>=8 con vol>=2.5x = 'NO-SHORT (pompa attiva)'; (c) chip checklist se score<=4. Il v1 resta visibile (per misurare quanto sbaglia); v2 retro-analizzabile dai context salvati. Verificato su ONDO: 'simile a vittorie' + v2 NO-SHORT pompa +4.2/1h +10.6/24h vol 2.7x + checklist 3.2/10 DEBOLE - avrebbe urlato di non entrare. Gia visibili anche FUORI SCALA su trade long storici. Entrambi i bot riavviati
  • ONDO short -612 INDAGATO (Teo: 'diceva simile a vittorie'): dati CORRETTI (RSI 86.5 ricalcolato vs 86.8, feature verificate su kline) e formula fedele, ma DESIGN CIECO: distanza ASSOLUTA dalla mediana vittorie -> RSI 86.8 oltre-estremo e prezzo SOPRA il max 24h letti come win-like mentre erano BREAKOUT IN POMPA (l'opposto dell'esaurimento). Il context aveva GIA' 6-7 segnali contrari mai pesati: checklist 3.25/10 DEBOLE, OI -1.14 flaggato squeeze, vol 3.5x, ret_1h +4.9 in accelerazione, touches 1-2, trend MTF rialzista. VERDETTO: stop PREVEDIBILE (non il 23% fisiologico). PENGU: parzialmente (neutro corretto; sconsigliabile per payoff quality 39/RR squeeze, non stop-annunciato). FIX CANDIDATI (da pre-registrare): distanza direzionale (oltre-estremo penalizza), gate pompa-attiva (ret_1h>3 o ret24>8 con vol>2.5x = no short), peso a checklist DEBOLE
  • NEWS/X check 20-21/7 (domanda Teo): 3/5 movimenti avevano info pubblica PRIMA - SNXX (SCOPERTA: e' il Tradr 2X Long SNDK ETF = leva 2x su SanDisk! il rimbalzo SNDK sera prima + chip asiatici davano 8-12h di anticipo sul breakout), PENGU (news Target 20/7), ONDO (solo regime risk-on Clarity Act, no trigger). BANK e AVAAI: ZERO news (dump strutturali microcap - BANK era +128%/7d vicino ATH = blow-off da monitor prezzo, non da feed). CONSIGLIO: integrazione POVERA (RSS CoinDesk/CT + announcements API exchange gratuite + calendario unlock + prezzo sottostante USA per i token 2x), NON feed X a pagamento
  • Watcher flip-shadow: aggiunta variante MIRROR (richiesta Teo): colonna parallela dove il flip cavalca fino allo stop del long originale (+4% grezzo; il 6% vale per gli osc), stop -6, no protect. + AVAAI flip verificato: flippata all'entry avrebbe VINTO (+2% short dopo il target del long, max avverso 2.65<6) - istinto di Teo giusto, ma fuori da ogni flip-set delle regole attuali (non-INVERTI, somiglianza n/d): n=1 da registro
  • STOP ARANCIONI ANNULLATI+RIMBORSATI (decisione Teo): BANK long (-124.8, approach -22.4% = coltello estremo!) e SNXX short (-114.7, 1 tocco + pompa) erano flaggati dai badge nuovi -> skippabili: restano in tabella come stop_annullato_arancione (net azzerato) ma capitale rimborsato 438.9->678.5; breaker 3-stop resettato. Regola implicita da oggi: gli stop con badge arancioni all'entry si contano a parte finche il gate-coltello non e attivo
  • AVAAI 0721 ricontrollato (Teo 'forse avevo ragione'): target +2% preso a 0.008466, POI crollo fino a 0.00788 = a un soffio dallo stop 0.007802. Il target fisso l'ha salvato; l'istinto stop di Teo era giusto sulla direzione, sbagliato solo sul timing
  • STORICO giornaliero: sigle con etichetta sistema (C-L/C-S) + tooltip nome completo + LEGENDA sotto la matrice (thinwa = thin-wall relativo, cycle short). Nota: la matrice e tutta CYCLE, gli shadow osc stanno nelle tabelle sopra
  • RIANALISI ENTRY con dati nuovi (domanda Teo 'abbassare ancora l entry?'; griglie 0.3-2% su osc events n=371 + cycle long 46 + short 57): OSC: entry nuda al livello PERDE (WR 71.1% vs break-even 76.5%, -4175); sconto 0.3% = +1682 costando 6 fill, 0.5% = +2504 costando 9; 2.0% unico in utile (+2089) ma SOSPETTO (regime unico, stop spostato per costruzione, peggiora sulle pompe) -> non congelare. LEVA VERA = GATE COLTELLO: no-coltello +952 gia al livello, +1722 con 0.3%; il coltello resta rosso a OGNI sconto (lo sconto non lo ripara). CYCLE LONG: NO sconto (0.3-0.5 il punto peggiore -478: perdi 11 vincenti; 1.0% = +482 ma ~550 artefatto exit-fissa -> zero vero; MAI scontare book sottile -822). CYCLE SHORT: NO sconto extra (WALL_ENTRY_LOWER ha gia preso il margine; da 0.5% perdi SOLO vincitori); leva vera = filtro crack15m (ret15<=-0.5, n=14 base -899). COERENZA: lo sconto paga solo dove l entry era grezza (osc); il coltello/crack e il filtro dominante su TUTTI e tre i lati e non si scavalca scendendo. SHADOW PRE-REGISTRATI da attivare: osc gate-coltello, osc sconto 0.3/0.5 (+ variante 1.5 long no-pompa), osc colonna 2.0 solo-osservazione, cycle-short filtro crack15m, cycle-long skip-coltello; verdetti tra 2 settimane su regime diverso
  • FIX BADGE FUORVIANTI (caso SNXX short aperto, Teo: 'vedo tutti verdi ma sta a -5%'): (1) 'livello rodato' era VERDE anche con 1 tocco (bastava gamba vecchia >=3h): ora verde solo con tocchi>=3, e gamba vecchia con tocchi<=2 = ambra 'livello quasi mai testato (N tocchi)'; (2) nuovo avviso ambra 'short contro pompa +X%/24h' per short con trend24>=+10 (la soglia caldissima +20 era cieca per gli short: SNXX era +13.8). Applicato a pagina osc-sim E notifiche TG (li rodato era gia' corretto, aggiunti i 2 avvisi). Display-only. Nota onesta sul caso SNXX: parte era conoscibile (1 tocco + pompa, ora visibili), la rottura del range NO (somiglianza diceva 'non si sa' correttamente)
  • WATCHER FLIP-SHORT SHADOW deployato (cron 30min, ok Teo): i long paper NUOVI (da 21/7 09:15) marcati 'simile a perdite' all'entry generano un flip-short virtuale seguito col ruleset short FEDELE (riusa flip_replay_true: stop 6%, turn_protect con edge_room reale da kline 15m, variante early-profit fragile, trailing adattivo, 48h, haircut); logga edge_room/protect/scalp-sensibilita e le 2 varianti (pessimista=min). Riga nel diario (shadow long), json cycle_flip_shadow.json, decisione a 15-20 fill
  • GLOSSARIO nel diario (richiesta Teo): sezione collassabile con la descrizione di OGNI tratto (cycle+osc), shadow (cycle+osc) e fantasma - 45 voci, nel template (sopravvive al cron)
  • VERIFICA FLIP COL RULESET VERO (giudizio finale): il verdetto 'simile a perdite' AGGIUNGE VALORE (Set-P flip verde in TUTTI gli scenari: +130 pessimista / +639 fragile-off / +1069 fragile-on vs +33 reale; CONTROLLO 30 long normali flippati PERDE in ogni variante: -1480 pess / ~-230 coerente). MA il +886 semplificato si sgonfia a +97 nel caso ostile: il turn_protect vero richiede edge<=3% dal max 6h (solo 2/14 flip lo passano) -> RAVE e VANRY diventano stop -612/-236 e sono proprio i 2 long reali migliori. Fill-sensitivity: nel pessimista il 100% del net dipende da scalp 0.35%; nel fragile-off il grosso (+519) e' trailing robusto. RACCOMANDAZIONE: niente skip (Set-P reale +33 con RAVE +476); shadow watcher flip-short col BOT SHORT VERO quando un long entra marcato 'perdite' (book/quality reali risolvono la fill-sensitivity), log edge_room/protect/contesto, decisione a 15-20 fill
  • Backfill re-entry post-exit LONG completato: 102 setup, 69 fillati (67% WR: 46 target / 23 stop), net -588 -> LA PISTA NON REGGE IL SUO PRIMO BACKTEST con la regola pre-registrata (+2/-4 = serve WR>66.7% solo per il pari, e le fee la affondano). Il 'lasciato sul tavolo' c'e' ma nemmeno il re-entry semplice lo cattura. Resta in shadow com'e' (dottrina: niente ritocco post-risultato); eventuale variante con uscita diversa andra' pre-registrata a parte
  • DUE NUOVI SHADOW CYCLE deployati (cron 2h, dalle piste dell'analisi trailing, ok Teo): (1) no-adaptive-tightening SHORT: CF trail flat 1.5 (senza tight 0.6/mid 1.0) sui trailing-exit; primo run 22 trade delta +456 (5 migliorati/17 peggiorati, runner-driven; nota: analisi dava +1619 con metodo diverso) -> decisione a 15-20 trade NUOVI; (2) re-entry post-exit LONG: regola PRE-REGISTRATA limit a exit-2.5% entro 6h, target +2/stop -4/timeout 24h, margine del trade originale (backfill storico in corso). Entrambi con riga nel diario (sezioni shadow long/short), json cycle_short_noadapt_shadow / cycle_long_reentry_shadow
  • ANALISI 'ampliare il trailing per-tratti' CYCLE (long 119 vincitori + short 46, path-sim 5m, domanda Teo): VERDETTO NON AMPLIARE su entrambi i lati. Il lasciato-sul-tavolo e' reale (long med +4.2%/6h, short med +9.5%) ma NON catturabile: il prezzo ritraccia oltre il trail prima di continuare (long trail-2.5% = -2829, 30 vincitori diventano perdenti; short +457 = zero statistico su 3-4 trade). Nessun tratto rende positivo l'ampliamento (red3/rel-strength = pareggio; short rsi>=70 e top-range INVERSI: li conviene stretto). SORPRESA: il turn_protect long SALVA -1001 su n=7 (l'aneddoto flip +224->+70 non generalizza) - tenerlo. Early-profit short +415 regge solo con la logica attuale intorno. DUE PISTE VERE: (a) SHORT shadow no-adaptive-tightening (trail 1.5 liscio senza tight 0.6/mid 1.0) = +1619 sul gruppo trailing, n=22, aspettare 15-20 nuovi; (b) LONG re-entry sul retest post-exit (stile reversal-watch): il 71% continua >2% entro 6h ma dopo ritracci >2.5% = nuovo segnale d'ingresso, non exit piu largo. IGIENE DATI: after_max/after_min nei DB cycle sono backfillati oltre le 6h nei trade vecchi (EVAA +483%) -> analisi sul 'dopo' devono filtrare after_*_at o usare kline. Coerente con osc (ratchet uniforme): tre analisi indipendenti, stessa morale = exit uniforme, niente regole per-tratto
  • RICERCA nella pagina diario (richiesta Teo): barra di ricerca nel template (sopravvive al cron) che filtra le righe di tutte le tabelle, case-insensitive, con conteggio. + Post-it permanente in memoria assistente: aggiornare il diario SEMPRE, a ogni modifica, senza attendere richiesta
  • FILTRI nelle tabelle Trade chiusi (cycle LONG+SHORT, richiesta Teo): giorno (anche prefisso 2026-07), ora da/a (orario di chiusura, fallback apertura), tipo di exit (select auto-popolato dalle classi reason-*), bottone azzera; combinabili con la ricerca coin, conteggio nel pager sopra+sotto, persistenti tra refresh. Righe taggate data-open/data-closed
  • FIX 3o caso bug autocommit-PG (Teo: 'sistema max/min dell'aperta osc'): sim_resolve committava SOLO nel ramo chiusura -> mae/mfe dei trade APERTI rollbackati a ogni ciclo (SNXX aperta mostrava 0/0 con mae reale -4.6%). c.commit() prima di close() in sim_resolve+fill_pending+scale_in; verificato self-heal (SNXX mae -4.58 al ciclo dopo). I chiusi erano corretti (commit alla chiusura)
  • FLIP LONG 'simile a perdite' (idea Teo) CON GRUPPO DI CONTROLLO, replay 1m modello ruleset short: Set-P (14 long marcati perdite, EDGE incluso) reale +33 -> flippati +919 (delta +886, EDGE -208->+200); CONTROLLO (30 long non-perdite) reale +1270 -> flippati -249 (delta -1519: i flip muoiono sui veri vincitori DYDX/MAGMA/SKHY/LAB/RAVE). Delta/trade +63 vs -50 = IL VERDETTO TRATTI SEPARA DAVVERO (non e' meccanica-short). Censimento: skip del Set-P NON conviene (9/14 verdi, +33); il valore e' solo nel FLIP. Caveat: modello semplificato (identico sui 2 bracci = confronto valido, valori assoluti no), scalp 0.35% fill-sensibili, stesso regime; verifica ruleset vero in corso. Long verdetto-perdite: loss-rate 36% vs base 30% (skip-filter debole)
  • CENSIMENTO flip short 'simile a perdite' 20-21/7 (domanda Teo), replay kline 1m con ruleset long REALE, book-sized 1000: SOXL (perdite nettissimo) reale -612 vs flip long +70 (delta +682); SNX (perdite) reale +60.4 vs flip +79 (vincevano ENTRAMBI i lati: short a -3.5% avverso poi salvato dal ritraccio, long cavalcava il pump iniziale); PENGU neutro fuori set (flip sarebbe +188, short aperto ~-254). FLIP-SET: -551.6 -> +149.6 = DELTA +701. Scoperta: il turn_protect long taglia +224/+238 a +70/+79 su questi flip (pump SOXL oltre +6%). Coerente con inversione-profilo (+951) e flip-INVERTI osc, MA n=3, SOXL domina, stesso regime 20-21/7: si accumula nello shadow, decisione a n=10-15
  • STRATEGIE SHADOW nella pagina osc-sim (box live, contro-fattuali dai chiusi, zero effetto sim): (1) trailing ratchet arma+2%/trail1% (net contro-fattuale dal mfe, converte anche stop che avevano armato); (2) flip profilo-INVERTI (7 trade: net reale -1105 -> flippato +305); (3) evoluzione profilo entry->exit. Si aggiornano da soli man mano che i chiusi crescono = il forward-test in shadow chiesto dalla dottrina
  • 9o contatore shadow TRAIT-FLIPS in osc_shadow_counters (cron 2h): tratti girati durante il trade dagli snapshot 5min (isteresi >=2 snap, trade <2 snap = non misurabile). Primo run: 33/48 misurabili, 32 con flip (97%), 2.9 flip medi, top taker(21)/coltello(19)/rsi(19). In pagina: chip 'intra: N tratti girati (...)' / 'troppo corto' / 'tratti stabili' nella sezione dopo-chiusura + badge 'profilo X->Y durante il trade' quando la somiglianza cambia categoria entry->exit
  • Tratti osc DIVISI pre-entry / dopo-chiusura (richiesta Teo): la colonna tratti mostra 'pre-entry:' (coltello/muro/range/RSI/taker...) e 'dopo-chiusura:' (runner/recupero-dopo-stop/flip-post-stop/mai-partito) su righe distinte. Cycle gia strutturalmente diviso (tratti=pre, colonna 'dopo lo stop'=post)
  • BOTTONE 'chiudi' per i trade simulati aperti: osc (nuovo endpoint /api/osc-sim/close, chiude al prezzo live con advisory lock che serializza con la watch) + cycle SHORT (mancava: aggiunto cycShortClose + /api/cycle-short-paper/close mirror del long); il cycle LONG lo aveva gia
  • ANALISI (4 workflow) su come salvare la osc (net -348, asimmetria 4:1): (1) TRAILING arma+2%/trail1% RATCHET flippa a +306 ma fragile (1 trade=83%); (2) STOP -4% invece di -6% -> breakeven +35; (3) trailing NON va condizionato ai tratti (i blow-through hanno profili -oversold-laggard long, esaurimento-top short, OI-su- ma condizionare overfitta, uniforme-ratchet e meglio); (4) BLOCK/FLIP stop coi tratti: all'entry solo profilo-INVERTI funziona (coltello dal lato sbagliato del range, 5/7=71% stop), FLIP di quei 7 porta il portafoglio a +757 e batte il block; e' l'inversione-profilo gia validata nel cycle (retro +951), non overfit fresco. TUTTE da testare in SHADOW (n=47/11 minuscolo), non deploy diretto
  • FIX bug 'dopo l'uscita' (Teo l'ha notato): after_max/after_min si accumulavano SENZA finestra -> convergevano al range dell'INTERA moneta (6 AKE con valori identici), non per-trade. Ora finestra BOUNDED a 48h dall'uscita (poi si chiude), query esclude le finestre complete (no starvation). Backfill: azzerati e ricalcolati i 47 chiusi dalle kline 5m nella loro finestra [uscita,+48h]. Verificato: SNXX ora per-trade distinti; i cluster (7 AKE in 28h) condividono correttamente perche le finestre 48h si sovrappongono davvero
  • BOX 'Realta dell'edge' + fedelta fill nella pagina osc-sim (shadow, solo display, dal vivo): SCOPERTA GROSSA emersa dall'indagine fill-fidelity di Teo -> win-rate 76.6% (36/47) ma net -348 USDT perche asimmetria vincita/perdita 4:1 (target +2% vs stop -6%); serve >80% WR per pareggiare. Il box mostra live: WR, net, vincita/perdita media, WR-pareggio, e i fill fragili (8/36 con overshoot <0.15%, concentrati su book sottile). NB verificato: i fill fragili NON fabbricano vittorie false (8/8 ri-toccano target prima dello stop), il rischio reale e' fill PARZIALE su book rado. Il problema vero e' l'asimmetria 4:1, non il fill -> backtest exit-rule in corso
  • Pagina osc-sim: colonna 'meglio/peggio' ora CAPPATA al prezzo d'uscita per i trade a target/stop (Teo: 'il meglio/peggio non dovrebbe essere il prezzo durante l'apertura?'). Prima il wick della candela 5m che innescava l'uscita gonfiava il 'meglio' (es. ESPORTS short a target mostrava +9,4% invece di +2%) ED era ricontato in 'dopo l'uscita'. Ora meglio/peggio = solo cio che la posizione APERTA ha visto (target -> ~+2%), l'oltre-target/stop vive solo in 'dopo l'uscita'. Display-only, mae/mfe grezzi nel DB intatti
  • FIX regressione dal cutover PG (bug-class autocommit, segnalato da Teo: 'negli ultimi due chiusi dopo l'uscita e' rimasto -'): 2 funzioni scrivevano affidandosi all'autocommit sqlite (isolation_level=None) SENZA commit esplicito -> su pgcompat (non-autocommit) la close() rollbacca e le scritture si perdevano dal cutover. (1) sim_after_track (osc_live_watch): la colonna 'dopo l'uscita' era congelata a after_checked_ts=cutover(23:22) e i chiusi nuovi (ESPORTS 00:35, TOWNS 00:15) restavano NULL; (2) osc_real_mirror: UPDATE/INSERT su sim_real_mirror perse. Aggiunto c.commit() prima di close() in entrambi (no-op innocuo sul path sqlite del kill-switch). Audit completo degli altri writer migrati: snapshot_resolver/registry/price_alert_web committano gia' (OK), osc_shadow/watch_sync/build_diario non scrivono il DB (OK). Verificato: after-data ora su TUTTI i 46 chiusi (0 NULL), after_checked_ts avanza a ogni ciclo. restart_osc_watches.sh dinamico collaudato sul campo per il riavvio delle 20 col fix
20/7
  • restart_osc_watches.sh reso DINAMICO (prima 14 coin hardcoded = stantio, non rispecchiava le ~20 vive): ora ricava le coin dagli screen osc-watch-* attivi e riavvia solo quelle col codice corrente (uso: ricaricare osc_live_watch/pgcompat dopo una modifica); osc_watch_sync (cron 7,19) resta la fonte di QUALI coin devono girare. Vecchio in .bak_stantio
  • OSCILLATRICI MIGRATE A POSTGRESQL (Teo: 'ma ancora usi sqlite?'): la sim osc (osc_events) passa da SQLite a PG 5433 via pgcompat, come i 4 DB cycle. Causa radice risolta: lock contention SQLite sotto ~20 watch concorrenti ('database is locked', da cui il bug profilo-mancante tipo ESPORTS). Switchati 8 file a pgcompat (osc_live_watch=20 watch, osc_real_mirror, osc_watch_sync, osc_shadow_counters, registry_strategy_extend, snapshot_resolver, build_diario, price_alert_web) + mapping osc_events.sqlite3->osc_events in MAPPED. Migrate tutte le 6 tabelle (events 478, snapshots 22288, sim_trades 227, sim_meta capitale 682.52, sim_real_mirror SNXX manual_hold, manual_tracks 12). Kill-switch KUCOIN_PG_DISABLE=1 = rollback istantaneo a sqlite (congelato al cutover); backup .bak_prepg (sqlite) + .bak_pgcut per file
  • Incompatibilita PG risolte nel cutover osc: (1) MIN(x,y) scalare sqlite -> CASE portabile su wall_min_mult (PG non ha MIN a 2 argomenti); (2) BEGIN IMMEDIATE -> advisory lock di transazione in pgcompat (pg_advisory_xact_lock, lock_timeout 5s) che serializza il read-modify-write del capitale sim tra i 20 processi come faceva il write-lock sqlite; (3) migrate_osc_to_pg fixato: le tabelle senza colonna 'id' (sim_meta, sim_real_mirror) non vengono piu rollbackate dal riallineo sequenza IDENTITY. Verificato: 20 watch log PULITI post-restart, snapshots in crescita in PG, snapshot_resolver+mirror+pagina osc-sim tutti su PG senza errori
  • Notifiche TG apertura CYCLE (long smart-fill + btc-wait, short): aggiunti TRATTI in testo (capitolazione/coltello/muro ecc.) + PROFILO "SIMILE A VITTORIE/PERDITE [su Wn/Ln]" via cycle_traits_text - cosi si vede a colpo d occhio se il trade somiglia ai vincitori o ai perdenti storici quando arriva la notifica. + OSCILLATRICI: osc_traits_text nel watcher (badge coltello/muro/range/vol-gamba/RSI/taker + somiglianza dai chiusi) nella notifica [SIM] APERTO
  • BACKUP+SYNC: auto_git_commit ogni 2h (versiona il codice, commit lavoro sessione) + Google Drive via rclone (sync_gdrive ogni 2h -> gdrive:kucoin-5d-ranker-code, solo 4MB codice). Tratti osc: aggiunto badge "recuperava dopo lo stop +X%" (stophunt) e "salvabile a leva bassa"; il "runner +X% oltre target" c era gia - ora si incrociano i tratti pre-entry con l esito recupero/runner sulla stessa riga
  • Pagina cycle: pager tabella trade chiusi anche SOTTO (oltre che sopra, sync via JS) per tabelle lunghe; tabella trade della simulazione book-sized ora COLLASSATA di default (details, card stats visibili) - stesse due modifiche applicate a LONG e SHORT
  • FIX pannello "paper live overlay": mostrava prezzi VECCHI di 15gg (paper_live_price leggeva order_book_watcher_latest.json fermo dal 5/7, es. 1000BONK 0.0049695 invece di 0.003034) - ora legge prima il WS fresco + ignora l order-book-watcher se >15min. order-book-watcher confermato OBSOLETO (serviva ai vecchi paper_trader/pullback spenti; il cycle usa ws_book_feed attivo), lasciato spento. Censimento pending "target consumato senza fill": raro (8/118 non-fillati) e 50/50 dopo (4 ritornano al retest, 4 no) -> regola NON implementata, si lascia la scadenza per eta
  • "Dopo lo stop" (salvataggio: liquidazione vs stop-hunt) esteso anche ai trade CYCLE long+short: calcolatore cycle_stop_salvage.py (cron ogni 2h, maint per-coin dal censimento/fetch) + riga nella colonna Contesto dei trade stoppati (long+short); 163 stop cycle: 129 stophunt(79%),30 giusti,4 parziali - MA lo stophunt qui e strutturale (LONG stop -4% e SHORT stop -6%, entrambi con ampio corridoio verso la liq -10% - long 6% short 4% di spazio, path-dependent): NON significa stop sbagliati (i 30 giusti+coltelli costano piu del recupero dei 129, stop -4% gia validato EV+); tabella osc-sim stretta (font/padding ridotti, celle a capo) per non sforare la finestra
  • DOPO LO STOP (osc, richiesta Teo): analisi SEQUENZIALE "si poteva salvare?" - fin dove e andato contro, se/quando ha toccato la LIQUIDAZIONE (a 10x e alla leva sicura per-coin col maint vero), se ha recuperato PRIMA e di quanto+timing. Verdetto: STOP GIUSTO (liquidava) / salvabile-solo-leva-bassa / STOP-HUNT (tenendo si salvava). Su 10 stop: 7 giusti, 2 stop-hunt (AKE 055152 +2% a 2min, LRC +8.8% a 7h senza liquidare), 1 parziale. SCOPERTA: il "recupero +13.9%" di AKE-030116 era MIRAGGIO (a 8x gia liquidata a 1min, il recupero arriva dopo)
  • BADGE CYCLE VALIDATI DAL VIVO: ultimo stop short SOXL (20/7 -612) marcato "simile a perdite" NETTISSIMO (dL 0.08 vs dW 1.25: RSI 56=mediana perdenti, non esaurimento, payoff 36, livello battuto 21x poi rotto) - stesso profilo di EDGE/LRC (dip/short senza capitolazione in livello logoro). PEPE short chiuso da solo alle 09:19 (early-profit +90), slot liberato: il mutex-stantii ha retto
  • TRATTI + SOMIGLIANZA nei trade del CYCLE paper (long+short): riga Tratti nella colonna Contesto con badge robusti/fragili + verdetto simile-a-vittorie/perdite (analisi workflow). Scoperta: target fisso +2% ESTINTO post-cutover (vincitori escono in trailing); robusti - LONG capitolazione 2+ rosse (+11.9%), SHORT esaurimento-al-max (L1/W15) e ANTI R:R-troppo-bello; baseline cycle_traits_baseline.json
  • RESET STATS CYCLE PAPER programmato per il 25/7 a mezzanotte (richiesta Teo): ricomincia da 1000 SALVANDO le vecchie (backup pg_dump + snapshot HTML in archive_reset_, i trade restano nel DB per shadow/contatori, escono solo dal conteggio capitale via CYCLE_PROJECT_START_AT=25/7). Predisposto: env-token nei launcher (valore 24/6 no-op fino al 25), CONFIG_FREEZE_AT disaccoppiato (freeze resta al 24/6), script reset_cycle_25.sh + cron una-tantum 00:05 del 25 (auto-disarma)
  • Circuit-breaker osc: aggiunto reset one-shot via osc_breaker_reset.txt (conta stop da MAX(mezzanotte,reset)) e azzerato ORA su richiesta Teo - oggi c erano gia 3 stop (ON/AKE/LRC) che avrebbero bloccato la sim; col reset servono 3 stop NUOVI
  • Diario: aggiunte le 4 righe dei contatori shadow nati oggi (inversione-profilo, revenge-flip, muro-ADDOSSO, fill-fantasma) nella tabella oscillatrici + badge tratti nuovi in pagina (muro addosso/lontano, profilo-INVERTI, flip-post-stop, coltello-short storico)
  • SHADOW-LOG candidati bloccati dal mutex (chiude il buco: prima non si sapeva QUALI long avrebbe scelto): al blocco registra in entry_decision_audit i long nel band d entrata (stage=mutex_blocked, throttle 30min/simbolo; kill CYCLE_MUTEX_SHADOW_LOG=0) - ora il costo del mutex e misurabile davvero, non stimato col proxy
  • SLOT SHORT: CYCLE_SHORT_MAX_OPEN 1->2 nel launcher paper (Teo: test diretto questa settimana; capitale 2586 copre 2 margini). Da monitorare: piu trade short E l interazione col mutex (2 short freschi = long bloccato piu spesso, mitigato da mutex-stantii)
  • MUTEX-STANTII (ok Teo, caso PEPE 26h piatto che congelava il long): un OPEN opposto piu vecchio di 12h con PnL entro il +-1.5% NON blocca piu la direzione opposta (prezzo WS+REST, in dubbio blocca come prima; env CYCLE_MUTEX_IGNORE_STALE/STALE_HOURS/STALE_FLAT_PCT; patchate ENTRAMBE le copie della funzione) - slot short extra rimandato a dopo la verifica
  • INVERSIONE-PROFILO shadow (idea Teo): candidati col profilo-stop (long coltello in alto nel range / short squeeze in basso) contati come INVERTITI - retro congelato +951 (5/9 stop ribaltati, 2 vittorie toccate); contatore #8 nel cron
  • WORKFLOW ANTI-STOP (4 analisti + verifica): SCOPERTA GROSSA - 2 vittorie FANTASMA (entry mai stampata sulle candele, fill dal book su illiquide, +113 da depurare: baseline vera -60 non +52) -> GUARDIA ANTI-FANTASMA live nella sim (entry dentro il range stampato ultime 2 candele, kill OSC_SIM_PRINT_GUARD=0) + badge in pagina + contatore. Nuovi shadow: MURO-VICINO <0.8% (6 trade net -613, 4/9 stop vs 2/30 win) e REVENGE-FLIP allo stop (8/9 target, +268). Sconto entry 0.3-0.5% promettente (+496 retro) ma su 4 eventi - resta ipotesi; sconto >=1% bocciato; direzione opposta = tautologia (invertire tutto da lo stesso totale)
  • ANTI-EMORRAGIA (dopo i 6 stop del 19/7): CIRCUIT-BREAKER giornaliero ATTIVO in paper - al 3° stop del giorno la sim non apre piu fino a mezzanotte (censimento: +265 retro; kill OSC_SIM_DAILY_STOP_BREAKER=0, TG una volta al giorno) + coltello-SHORT in shadow (approach >+2 in 15m = squeeze in corsa, 4/5 stop short lo avevano; flag+TG, non blocca)
  • Pagina osc-sim: auto-refresh contenuti ogni 30s (fetch+swap, scroll preservato); badge coltello/muro-tetto nei tratti; approach nelle feature di somiglianza; chiusi ordinati per orario di chiusura
19/7
  • Colonna SOMIGLIANZA sugli aperti osc-sim: profilo pre-entry vs mediane vincitori/perdenti (10 feature, distanza IQR, live dai chiusi) - verdetto "simile alle vittorie/perdite" solo con margine >=20%, altrimenti "non si sa" coi numeri
  • Colonna TRATTI su aperti+chiusi osc-sim: badge per trade coi tratti distintivi (coin caldissima/downtrend, top/fondo range, livello fresco/rodato, vol-gamba, volumi morti, RSI, taker, muro vicino) + flag shadow (bruciata/runner/mai-partito) per vedere le somiglianze a occhio
  • Tabella PnL/giorno order-book: fantasmi DIVISI PER FAMIGLIA (wait/opp/rev/flip/veng) per giorno + totali per tag con somma
  • Colonna "dopo" chiusi: se sfora il -6% mostra il MASSIMO INCASSABILE PRIMA dello stop virtuale e poi CONGELA il dato (candela dello sforo = stop vince, conservativo); i +18% post-stop erano miraggi, i veri pre-stop sono +0.2/+1.5/+3.7%
  • Colonna "dopo" chiusi osc: se il contro sfora il -6% post-uscita, marchio con l ORDINE (picco-prima verde / -6%-prima rosso, candele 1m, finestra 48h); primo censimento: 15/24 sforano, 9 col -6% prima del picco = continuazioni-miraggio; cron shadow counters portato a ogni 2h
  • Trailing-oltre-target RIABILITATO come shadow (test v2 su 19 vincitori, candela-tocco esclusa): trail puro ancora bocciato, ma ARMATO (attivo solo oltre target+1%, give 1%) = +156 con 0 peggiorati (runner TRIA +117, ESPORTS +39) - contatore congelato nel cron shadow, riga diario, decisione a n~45 vincitori
  • FIX after-track sim osc (scoperto da Teo su AVAAI): le candele 5m ancora in formazione venivano scavalcate dal checkpoint - gli spike nel mezzo sparivano per sempre; ora riesamina le candele a cavallo (10min margine) + riparati TUTTI i 24 chiusi dalle 1m vere (AKE dopo-max +7%->+44%, ESPORTS contro -56%, XEC +28%) + colonna "finestra dopo" e merge px live nella pagina; runner-hunt aggiornata: 16/19 continuazioni >=+4%
  • Pagina Trade simulati (oscillatrici): colonna "px ora" su aperti/chiusi/skippati (chiusi con delta dal exit lato-corretto; feed WS + fallback REST) e prezzi raggiunti migliore/peggiore (px toccati) accanto alle percentuali su aperti E chiusi - per giudicare trailing e uscite
  • DAILY-OPEN SNIPER (paper, cron 01:41+02:41 con guard UTC): dallo scan pump-hard 6 mesi (242 eventi vol50x, JSON pump_hard_1m_6m) scoperto cluster 00:00 UTC che CONTINUA (14/16 positivi a +30m, mediana +4.2%) vs pump casuali che ritracciano (67% round-trip) - il bot compra il burst sulla carta (vol>=50x, move>=+1.5%, valore>=20k, slippage 0.15%) ed esce a +30m, flat-300 leva 5, ledger + TG + riga diario
  • Contatori SHADOW osc (solo conteggio, cron 7:15 + righe diario): "nati-morti" (taglio se mai in favore +0.5% nei primi 5/10/15 min - oggi si boccia da sola: -189/-226/-17, taglia i vincitori lenti) e "coin bruciata" (blacklist giorno post-stop: 3 saltati, +71 salvati - caso B doppio stop)
  • SIZING TIER-1 ATTIVO ovunque (kill CYCLE_TIER_SIZING=0): paper long+short margine <= cap_tier1/leva (vincolo sul nozionale, PnL fedele al reale), sim book-sized col cap dai trade aperti da oggi (storico intatto), reali leva sicura per coin (liq dietro lo stop: short mant-5% a 8x, BP 5x, nozionale invariato) + stesso cap margine; helper cycle_tier_caps.py con censimento + fetch live coin nuove
  • Mirror oscillatrici: banner TG "mirror ATTIVO" limitato a 1 ogni 6 ore - i riavvii tecnici ravvicinati restano silenziosi
  • TEST VELOCITA' con ordini VERI (limit -50%%, cancellati): place 272ms, cancel 266ms, reprice completo 545ms, prezzo WS <1ms; catena segnale->book ~0.3-1.3s = 100x piu' veloce del necessario
  • SCOPERTA RISK-LIMIT: su AKE/ALCH/TAC/TOWNS/B (mantenimento tier-1 al 5%) a 10x la LIQUIDAZIONE (~-5%) arriva PRIMA dello stop -6% -> nel mirror osc ora LEVA ADATTIVA per-coin (10x con mant 2.5%, 8x con mant 5%: liq ~-7.5% dietro lo stop); regola sizing: mai oltre il tier-1 (SNXX/XEC 1000 marg, PEPE 2500, sottili 300-500)
  • STOP ATTACCATO all'entry anche nei CYCLE REALI: ogni pending limit parte con lo stop-pavimento agganciato (long -4%, short +6% dal limit) via st-orders; il bot piazza comunque il suo stop gestito al fill (trailing invariato), l'attach muore col cancel del pending (wall-reprice pulito, verificato live); rispetta manual_no_stop; kill via env ATTACH_STOP=0
  • FILL via WS anche nei CYCLE REALI: filled_avg_price legge prima il feed privato (media ponderata dei match, ~300ms, meno REST e niente corse 300009); fallback REST invariato; logica verificata sull'ordine vero del test
  • FILL via WS PRIVATO attivato nel mirror: real_entry = prezzo di fill VERO in ~300ms (testato con micro-trade da 0.05 USDT: WS 297/265ms vs REST fills 1045/983ms)
  • MIRROR OSC MIGLIORATO: entry con stop+target ATTACCATI in una chiamata (st-orders, testato live 275ms) = finestra nuda ZERO; target in exchange (fill sul tocco); fallback automatico al vecchio percorso
  • WICK-CHECK CYCLE PAPER: 6/6 vincitori long e 11/11 short (dal 12/7) mai bucato lo stop minimo intrabar -> anche i cycle replicabili con stop reale in exchange (31/31 col totale osc)
  • WEBSOCKET: nuovo feed prezzi live `osc_ws_ticker` (ticker per i watch + simboli open/pending dei cycle); watch oscillatrici con tick veloce 5s su open/pending; cycle paper E reali (via import) con overlay WS sui prezzi bulk
  • Sim oscillatrici: cap margine per-trade 300 (il book-sizing dava i margini grossi ai perdenti: perdente 884 vs vincitori ~287; flat-300 avrebbe reso +268 dove il reale faceva −109)
  • TARGET +2% CONFERMATO definitivamente: griglia trailing-oltre-target completa (concessione 0→3%) tutta negativa; runner solo 11% sul registro e senza firma; aperta la runner-hunt per coin (top: AKE, XEC, US)
  • Nuovo candidato big-mover: "vol-gamba alto" (>1.36x, soglia congelata) — 25% big vs 9% resto, unico che replica out-of-sample
  • Testata la MEMORIA DEL PREZZO (tocchi del livello in 7g + eta' dell'ultimo tocco): NON predice i big-mover (split IS/OOS bocciata, direzioni instabili); il gradiente fresco 19% vs mai-visto 25% e' rumore
  • MURO-TETTO RETROCESSO: sul registro non separa gli stop (32% vs 30%, n=38); resta contato
  • Verifiche fedeltà sim→reale: decisioni su prezzi live, wick-check 14/14 vincitori replicabili con stop exchange; i 2 stop della sim NON evitabili dai dati pre-entry
  • Diario: colonna "Dal" su tutte le tabelle, PnL/giorno con 👻 grigio per giorno e valori in grassetto, verdi/rossi più accesi su tutto il sito
18/7
  • SCOPERTA GROSSA: i fantasmi (trade virtuali shadow) erano DENTRO il bilancio (+1783 short, −208 long) → esclusi da tutte le stats (21 query + capitale interno); capitale combinato vero ~3627
  • PROMOSSI IN PROVA (reversibili via env): opposite-hold (il filtro BTC non cancella più i pending, li marca) e reversal-watch (trade reali id CYCS-…-RW); righe dedicate nel diario
  • Verdetti SEQUENZIALI sulle protezioni (candele, ordine vero): timeout long e turn-protect long protettivi (tenerli costava −589/−1327); early-profit short taglia i vincenti (+415 a tenerli) → a n=15 candidato a spegnersi
  • Pump-stretch BOCCIATO come veto (44 flaggati chiudono +242); "timeout deep-red" eliminato (contatore doppione)
  • Diario ristrutturato: tabelle shadow divise Long/Short/Bocciati/Oscillatrici, muri@exit per lato, experimental diviso crypto/equity, registro fantasmi coi singoli trade
  • Pagine cycle: pannello 👻 fantasmi con totali affiancati (paper | fantasmi | insieme) anche sugli header; tag 👻 FANTASMA sulle notifiche Telegram shadow; margine in OGNI messaggio TG dei cycle paper
  • Tema chiaro su tutto il sito (variabili, zebra, stat-card, report statici); watch riavviati col gate notifiche (le notifiche "win" arrivavano da processi col codice vecchio)
  • 2026-07-21 13:46 — GIUDIZIO stop ONDO/PENGU 21-7: badge 'simile a vittorie' su ONDO era fedele alla formula (dW 2.17 vs dL 3.50, dati verificati su kline) ma la metrica e' cieca alla direzione dell'eccesso: RSI 86.8 e prezzo SOPRA il max 24h letti come win-like. Stop ONDO PREVEDIBILE: 6 segnali contrari nel context stesso (pompa +10.6%/24h, vol 3.5x, breakout, checklist 3.25 DEBOLE, OI-squeeze, MTF rialzista). PENGU parzialmente (payoff 39, rr 0.79 dicevano skip; esito laterale era plausibile). Fix candidati: distanza direzionale o gate pompa-attiva (ret_1h>3% o ret_24h>8% + vol>2.5x => no short). News: utili su PENGU/SNXX (ore di anticipo), zero su BANK/AVAAI (microcap senza stampa); consigliati RSS+announcements exchange+calendario unlock, no feed X a pagamento.
  • 2026-07-21 22:05 UTC conteggio_shadow_24.py (READ-ONLY): aggrega esiti di TUTTI gli shadow dai registri VERI (ghost-trade PG cycle_*, delta-table shadow_better_entries/stop_reclaim_shadows, 8 JSON standalone, mutex_blocked audit) - NO resolver shadow_outcome_audit morto. 16 righe, n=359 eventi, valore aggregato +10297.07 USDT, mutex 446 blocchi a parte. Output futures-alerts/conteggio_shadow_24.json. Base del conteggio del 24.
  • 2026-07-22 00:38 FIX tabella osc 'dopo l'uscita' (3 bug beccati da Teo su SNXX/AKE): (A) 'avrebbe toccato lo STOP' ora usa lo STOP DURO -6% dall'entry (1x), non lo stop memorizzato che per invertiti/trailing e' vicino all'entry (falso positivo: SNXX mostrava max contro -0.4% MA 'avrebbe toccato lo STOP'); (B) 'max contro dall'entry' firmato coerente anche per short (negativo=contro, prima positivo raw incoerente coi long); (C) branch breach_ts: se non ha proseguito (<0.15%) dice 'e' andato dritto allo stop senza rimbalzare' invece di 'ha continuato +0.0%'. Verificato su 14 trade: SNXX trailing -0.38% -> stop NON raggiunto (ok), short ON/ESPORTS -46/-44% -> HIT firmato. price_alert_web.py (bak_dopouscita), web riavviato.
  • 2026-07-22 00:33 CYCLE manage_open SIDE-AWARE per trade INVERTITI (workflow wl8hxc0qq): il bottone INVERTI del cycle era NON usabile perche' manage_open_trades (long, riga 5157) e short manage_open (riga 4717) hanno le branch stop/target hard-coded per direzione senza guardare 'side' -> un trade invertito veniva chiuso subito al prezzo sbagliato. Fix ibrido meno-rischioso: percorso nativo stesso-lato INVARIATO byte-per-byte (letterali == lato nativo, codice nuovo dietro _cy_inverted); per gli invertiti (entry_context.inverted_manual=True, set da price_alert_web._cycle_paper_invert) gestione side-aware SEMPLIFICATA: stop/target su candele 1m + time-exit (horizon/max_hold) + PnL segno corretto + scale-in col lato reale. SALTATI per gli invertiti (troppo rischioso rispecchiarli): adaptive trailing, turn_protect, guard BTC-opposite, early-no-momentum/aged-profit. Limiti onesti: no trailing/turn_protect sugli invertiti; edge-case runner-al-momento-invert usa PnL semplice notional pieno; MFE/MAE display leggermente approssimato. Backup .bak_sideaware su entrambi i bot, py_compile OK, bot riavviati (1 traceback storico init_db pre-restart + 1 429 transitorio recuperato, benigni). Anche osc _tratti: chip pre-entry per-lato sugli invertiti (2 righe [orig]+[attuale]).
  • 2026-07-22 01:03 OSC-SIM trailing ADATTIVO env-gated OSC_SIM_ADAPTIVE_TRAIL (default ON) in sim_resolve: giveback SCALA col peak_gain grezzo da entry (0.6 se <3%, 1.0 se 3-5%, 1.5 se >=5%), floor=max(OSC_SIM_TARGET_PCT, peak-giveback) + profit-floor a gradini in % leva (ratchet stile cycle: 20-25->15%, 25-30->20%, 30-40->25%, >=40->floor(peak_lev/10)*10-10%, /leva, non scende) via helper _sim_adaptive_floor condiviso LONG+SHORT (specchiato). Variante adaptive_floor del backtest: +20.31 USDT vs simple_current su 55 trade, verifica avversariale PASSATA. Con flag=0 il percorso semplice resta INVARIATO; hard stop -6% pre-arm e timeout invariati. Backup .bak_adaptivetrail, py_compile OK, 20 osc-watch riavviati, 0 nuovi Traceback.
  • 2026-07-22 08:34 OSC tabella: pre-entry di ENTRAMBE le direzioni SEMPRE (non solo per gli invertiti). Per ogni trade osc due righe 'pre-entry [LONG]' e 'pre-entry [SHORT]' coi chip direzione-dipendenti ricalcolati (coltello, taker contro/favore, short-contro-pompa, muro bid/ask, profilo-INVERTI); il lato realmente preso evidenziato (◀ PRESO / ◀ attuale se invertito, (orig) sull'originale). Cosi' si vede a colpo d'occhio quale lato favoriscono i dati senza dover invertire. price_alert_web.py _tratti/_prow (bak_bothdir), verificato 58/58 righe LONG/SHORT, 0 errori, web riavviato HTTP 200.
  • 2026-07-22 08:52 FIX A bottone invert osc (meglio/peggio): _osc_sim_invert NON specchia piu' mfe/mae dello storico (swap _nmfe=-_omae = valori FANTASMA, es. BANK mae -5.39 dove non e' mai stato; le finestre long/short differiscono e la sim col min()/max() non li corregge). Ora resetta mfe/mae all'escursione CORRENTE del nuovo lato dall'entry (prezzo live mark-price), la sim li accumula d'ora in avanti. Vale per i FUTURI invert; i 3 invertiti gia' chiusi (BANK/SNXX x2) restano artefatti pre-fix. price_alert_web.py (bak_fixA), py_compile OK, web riavviato. Diagnosi da caso XPIN/BANK di Teo: dopo-l'uscita era gia' corretto (doppia referenza exit vs entry), solo mfe/mae invertiti sballati.
  • 2026-07-22 08:53 CYCLE profilo A+B (display, nessun cambio trading-logic): (A) cycle_traits_html/text ora mostrano ENTRAMBI i lati del profilo-similarita' (▶ PRESO [lato nativo] evidenziato + [opposto — per invert]), coi tratti/verdetto/v2/W-L ricalcolati per lato, utile a valutare gli invert a colpo d'occhio; (B) equity-awareness: se ctx['coin_type']=='equity' avviso in testa (⚠ EQUITY es. SK Hynix: profilo/checklist tarati su crypto, stop -6% forse stretto) e la baseline crypto cycle_traits_baseline.json rigenerata ESCLUDENDO gli equity (0 stringhe 'equity' nel file). Motivazione: caso SKHY=SK Hynix, azione (2 simboli SKHYUSDTM/SKHYNIXUSDTM) trattata con logica crypto. Verificato su trade reale CYCS-SKHYUSDTM-0722-020043 (short, coin_type=equity): render mostra avviso EQUITY + PRESO[SHORT] W30/L9 + opposto[LONG] W30/L21. py_compile OK long+short paper; riavviati SOLO i 2 bot paper (long 3475075, short 3475143; killato duplicato short 2558223 perche' il pkill dello script env-prefissato non matcha la cmdline) + web 8790 HTTP 200; bot REAL NON toccati (846537 long-real, 846495 short-real con posizioni aperte). 0 nuovi Traceback.
  • 2026-07-22 09:06 NEWS solo sul sito (Teo): news_watcher.py tg() gated con NEWS_WATCHER_TG (default OFF) -> niente piu alert news su Telegram, il jsonl news_watcher_events.jsonl continua a loggare. Aggiunta pagina web /kucoin/news (build_news_page legge il jsonl, ultimi 200, piu recenti in cima) + link news accanto a tutti-i-trade. Riattivi TG con NEWS_WATCHER_TG=1. price_alert_web.py (bak_newspage), news_watcher.py (bak_tggate), web riavviato.
  • 2026-07-22 09:41 REALE OSC ATTIVATO (richiesta Teo). osc_real_mirror.py flag running=true, since_ms=adesso (mirrorna solo trade osc nati da ora). I 400 positions-KO erano RETE TRANSITORIA (VPS<->KuCoin instabile): client fresco 8/8 OK, mirror riavviato = 0 errori. Disattivato limite saldo <20 -> env OSC_REAL_MIN_BALANCE_USDT (default 10), saldo reale 18.12 USDT (Teo: ricaricati 40 scesi a 18). Sizing INVARIATO aggressivo: MAX_MARGIN 100000=saldo pieno (~17.5 margine), leva 10, conc=1, stop -6%=~-10.5 USDT (~-58% del conto) per stop. Creato launcher start_osc_real_mirror.sh (non esisteva). Mirror manda TG su open/close reali. bak_minbal.
  • 2026-07-22 09:50 OSC-REALE slippage guard (richiesta Teo): open_real stima lo slippage camminando il book depth20 per la nostra size PRIMA del market; skip+alert se > OSC_REAL_MAX_SLIPPAGE_PCT (default 0.6) o book sottile; fail-open su glitch. Test: 175 USDT slippa 0.00-0.04% sulle coin osc. bak_slipguard.
  • 2026-07-22 10:13 OSC-REALE regola loss-like (Teo, validata backtest): revert skip-AKE hardcode (OSC_REAL_SKIP_SYMBOLS default vuoto); il mirror ora calcola il verdetto profilo-somiglianza del lato preso (replica _osc_sim_baseline, cache 10min) e SKIPPA se PERDITE (env OSC_REAL_SKIP_LOSSLIKE=1, +alert TG). NIENTE flip: backtest 4 loss-like storici = skip 0 vs tieni -293 vs skip/flip -580 (flip XEC -580 su long che aveva vinto +20; verdetto opposto=vittorie inaffidabile). Test: AKE short 095535 -> PERDITE (gate lo skipperebbe). bak_profskip.
  • 2026-07-22 10:40 WEB notifica TG su azioni MANUALI dal sito (richiesta Teo): helper _web_tg (legge token da KUCOIN_ENV_FILE, stesso bot del mirror); osc_sim_close e osc_sim_invert ora mandano TG su chiusura/inversione manuale. In try/except (non bloccano l azione). CYCLE close/invert non ancora (da estendere se serve). Nota AKE: discrepanza 14-vs-20 = ritardo pressione-vs-esecuzione del bottone chiudi (esegue al prezzo LIVE del click, AKE sceso tra i due -> fill migliore, non bug); sim(0.0017776,+21%) e reale(0.00180328,+8.4%) divergiti perche chiusi in momenti/canali diversi. bak_webtg.
  • 2026-07-22 10:45 WEB notifica TG estesa al CYCLE: cycle_paper_close + cycle_short_paper_close + _cycle_paper_invert ora mandano TG su chiudi/inverti manuale dal sito (helper _web_tg condiviso). Primo AKE long reale oggi: chiuso +14.3% ROE ma picco a 0.00189094 = avrebbe reso +76.3% ROE (target fisso +2% ha cappato, ~62 punti sul piatto -> caso per trailing sul mirror). bak_cyctg.
  • 2026-07-22 11:03 SCOPERTA 'simile a perdite/vittorie' e' PER-LATO e sul CYCLE si comporta OPPOSTO tra long e short (backtest verificato): cycle SHORT 'simile a perdite' = 86%% win, net +874, e nel 69%% dei casi dopo l'exit POTEVA CORRERE ancora (min oltre max) -> di fatto e' quasi un PREDITTORE DI VITTORIA (short di esaurimento); cycle LONG 'simile a perdite' = 24%% win, net +145, solo 40%% poteva correre -> segnale debole ma nel verso 'giusto'. Causa: baseline short W30/L10 (solo 10 short perdenti) = mediana perdenti rumorosa/non rappresentativa. PER-SISTEMA opposto: sull'osc skip-loss-like AIUTA (net negativi), sul cycle DANNEGGIA (-812) -> NON skippare sul cycle. Osservazione di Teo (notato 'solo short, lato long forse no') CONFERMATA dai dati. NOTA UX (Teo): il rosso di 'simile a perdite' e' fuorviante (rosso=negativo=lato sbagliato nell'intuito) ma su short cycle e' spesso BUONO; per ORA display LASCIATO COM'E' (colori invariati) per non confondere, eventuale relabel un altro giorno. Anche: AKE reale TP a +10%% ROE (trigger 0.00179964) filled +8.4%% lordo (slippage stop-market 0.2%%) -> +7.6%% netto (fee): il 10->7 e' slippage+fee, non bug; TP sull'app e' stop-MARKET.
  • 2026-07-22 11:07 MIRROR REALE OSC ora SEGUE IL TRAILING DEL SIM (OSC_REAL_TRAIL_SYNC default on): tolto il target fisso +2% e lo stop del reale alzato al floor del sim quando il trailing e' armato -> il reale corre insieme al sim invece di cappare presto. Motivato dal primo AKE long reale (+14% ROE ma picco +76%, ~62 punti lasciati sul piatto dal target +2%). Mirror riavviato via start_osc_real_mirror.sh, flag osc_real_state.json running:true, processo python vivo, 0 traceback post-avvio (awk sul banner 'OSC REAL MIRROR avviato').
  • 2026-07-22 11:13 OSC-REALE: (1) profilo-INVERTI skip (Teo): se il sim ha lo shadow profilo-INVERTI (coltello lato sbagliato: long approach<-1.2 & range>50 / short approach>2.0 & range<35) il mirror NON specchia -> solo sim, env OSC_REAL_SKIP_INVERTI=1 + alert TG. (2) stop/target/floor da LAST(TP) a MARK(MP): niente wick-out da spike del last (paura Teo di stop presi da wick veloci); il cycle REAL usava GIA MP (nessun cambio li). Piu il trailing-sync deployato prima (mirror segue il trail del sim). bak_invskip/bak_markprice.
  • 2026-07-22 12:43 (1) cycle_traits_baseline RIGENERATO col builder (ricalcola med_w/med_l dai trade attuali, cap 30 win, esclude equity); vecchio 19/7 tenuto come cycle_traits_baseline_VECCHIO_19lug.json per confronto. Cambio: med_l SHORT aggiornate (pos_range 62.8->68.7, rsi 50.2->55.35), long invariato, med_w invariate (win cappati). Validazione flip vittorie-short: NEGATIVA/fragile (LOO instabile), NON deployata. (2) WEB: colonna somiglianza aggiunta anche ai trade CHIUSI osc (prima solo negli aperti) - build_osc_sim_page header 7288 + row 7429 + _somiglianza(t). bak_simclosed. Web riavviato HTTP 200.
  • 2026-07-22 12:43 OSC-REALE: entry mirror da MARKET a LIMIT-OB IOC (OSC_REAL_LIMIT_ENTRY default on) -> niente chase ne slippage, fill controllato dal book o skip; fill parziali gestiti sulla size reale. Motivato da drift ON -0.39% e slippage AKE. Mirror riavviato via start_osc_real_mirror.sh, osc_real_state.json running:true, processo python vivo (pid 3886086), 0 traceback post-avvio.
  • 2026-07-25 17:51 SESSIONE 25/7 (riepilogo periodo + pulizia):
  • 2026-07-25 17:58 FANTASMI allineati al reset: ghost_balance_all in kucoin_cycle_retest_paper.py ora filtra AND opened_at >= start_at (default PROJECT_START_AT=07-25), come capitale e stats; prima mostrava all-time (+1611 incoerente col capitale dal 25). Ora ghost total dal 25 = 0.00 (CYCSO/CYCSR promossi contano nel capitale, CYCSV off, CYCSF/CYCLW nessuno chiuso). Analisi all-time preservata nel DB+diario. bak_ghostfilter, entrambi i bot riavviati, capitali preservati (LONG 955.91 SHORT 1221.27).
  • 25/07 18:06 — diario: tabella shadow aggiornata. revenge(CYCSV) -> DISATTIVATO; opposite-hold(CYCSO) -> PROMOSSO 25/7 (+1189 6W/0L); reversal(CYCSR) -> PROMOSSO 18/7 (+654 7W/0L): spostati dagli "in osservazione" ai decisi. Fix where riga opposite-hold PROMOSSO (btc_opposite_survived -> opposite_hold_promoted) per contare i trade reali promossi.
  • 25/07 18:14 — diario: split tabella decisi in DUE — "Promossi" (verde, sopra: reversal 18/7, opposite-hold 25/7) e "Bocciati/disattivati" (rosso, sotto: revenge, exp-crypto, pump-stretch). Prima erano tutti in una sola tabella con pill rossa (i promossi apparivano erroneamente in rosso sotto Bocciati).
  • 25/07 18:30 — PROMOSSI 2 shadow validati (oltre soglia + verifica anti-artefatto): EXP-VETO-ENTRY short 26t 24W(92%) +1020 time-split 92/92 24 simboli, gia attivo paper + mirrorato reale (3t); thin-wall relativo short 18t 17W(94%) +1024. DISATTIVATO ghost CYCLW wait-reprice long -34/10 (60%% win, losers>winners) via CYCLE_BTC_WAIT_REPRICE_ENABLED=0 + riavvio long paper. Diario ora 4 promossi/4 bocciati. NB: durante il riavvio drop di rete ha lasciato il long giu per qualche minuto, ripristinato.
  • 25/07 18:37 — Riesame shadow con lente UTILE (non solo n/win-rate, su richiesta Teo). CONFERMATE le 2 promozioni: veto-entry +1020 (top trade 18%%, top3 54%%, 24 simboli) e thin-wall +1024 (18%%, 16 simboli) = utile DISTRIBUITO (nota: sono largamente gli stessi trade, stessi top winner BANK/AKE/US). RESPINTE le 2 ad alto utile: solo-equity +774 e 77%% UN solo trade SKHYUSDTM (pump azionario, blind spot equity); vol-gate +1848 e tautologico (exit_reason=trailing = vincitori per definizione, i perdenti escono da stop) + trailing gia live dal 22/7. marginflip +154 ma n=1. Nessuna nuova promozione.
  • 25/07 18:45 — Riesame shadow OSC flip con lente utile+concentrazione+time-split (richiesta Teo). NESSUNA promuovibile. Problema strutturale: payoff fragile (vinci +188 fisso / perdi fat-tail: short -4398, long -6528, chip -7202 di perdite lorde). osc_long_flip +830 = 96%% un simbolo (BANK): tolto resta +31 su 52 = rumore. osc_short_flip +1110 = 47%% AVAAI. osc_flip_chipforte +2310 supera la rimozione del top-simbolo (resta +1299/65) e tocca la pre-reg (n=65>=20, flip>reale +133) MA il time-split la boccia: 1a meta -526, 2a meta +2836 = utile tutto recente, non stabile nel tempo (coerente con flip-vittorie gia fallito OOS). Restano in osservazione, ZERO flip su denaro reale.
  • 25/07 18:52 — Diario: aggiunte NOTE-caveat inline alle righe attive coi numeri ingannevoli (cosi non sembrano oro). vol-gate: warning "11/11 exit=trailing = vincitori per definizione, trailing gia live, niente da promuovere". solo-equity: warning "+774 ma 77%% e un solo trade SKHY (blind spot equity), tolto resta +181/4". NB: le 3 OSC flip NON sono nel diario (solo nei loro JSON), li nessun numero ingannevole visibile.
  • 25/07 19:03 — Diario: aggiunte le 3 shadow OSC flip (short/long/chip-forte) nella tabella oscillatrici, GIA con caveat inline (payoff fragile +188/fat-tail, concentrazione: long 96%% BANK, short 47%% AVAAI, chipforte time-split -526/+2836). Cosi sono documentate in un posto solo, ZERO flip reale.
  • 25/07 19:03 — NUOVO ob_fill_recorder.py (daemon standalone, screen ob-fill-rec, launcher start_ob_fill_recorder.sh): cattura l ORDER BOOK attorno al fill dei paper cycle short+long. PRE-fill (pending entro 1%% dall entry = anticipato), FILL (transizione pending->open), POST-fill per 5 min. Metriche: catturabile-all-entry (bid>=entry short / ask<=entry long), slippage al fill, spread, max favorevole/avverso post. Serve a valutare se il REALE (mirror LIMIT) prende le stesse entry. Read-only (DB paper + OB pubblico), nessun rischio bot. Output JSONL ob_fill_capture.jsonl + log logs/ob_fill_recorder.log.
  • 25/07 19:13 — Recorder OB esteso agli OSC: ora 3 sorgenti (cycle short/long tabella trades + osc_events sim_trades). OSC non ha stato pending (apre diretto al segnale) -> per osc cattura FILL+POST, non il pre. Tag system=cycle/osc nei record. Fix startup DBS->SOURCES (NameError beccato in foreground). + VISTA nel diario "Order-book al fill — il reale prende l ingresso?": aggregato per sistema (fill, catturabili %%, slippage/spread medio, fav max) + tabella ultimi 20 fill; ora vuota, si popola ai prossimi fill.
  • 25/07 19:31 — (1) Diario: MENU SITO a sinistra (voci da KUCOIN_SIDE_NAV_LINKS: dashboard, analisi/confronto coin, oscillatrici, diario, cycle reali... con propagazione token) + section-nav spostata a DESTRA. (2) Recorder OB migrato da JSONL a POSTGRES (tabella osc_events.ob_fill_capture, come il resto del sistema); la vista del diario ora legge da PG. WS-vs-REST: confermato REST (snapshot 8s di pochi simboli attivi, WS sarebbe overkill). (3) Lock single-instance flock nel launcher (verificato: 2o avvio rifiutato con "gia attivo"); recorder a 1 istanza pulita.
  • 25/07 19:34 — Menu-sito del diario reso DINAMICO: build_diario.py legge KUCOIN_SIDE_NAV_LINKS da price_alert_web.py via ast (senza eseguirlo) e genera i link a runtime (placeholder SITE_NAV_LINKS nel template). Non piu hardcoded: aggiungi/togli una pagina nel sito e il diario si allinea al prossimo rebuild. Token propagato via JS.
  • 25/07 19:42 — OB recorder TESTATO end-to-end: (a) cattura con OB REALE (XBT bid/ask/spread, capturabile+slippage) OK; (b) resa sul SITO/diario OK (tabella con simbolo/cycle/pill si, verificata con riga di test); (c) TELEGRAM OK (send_telegram ritorna message_id, chat 47346772). AGGIUNTA notifica TG con STAMPA COMPLETA (build_full_msg): tutto lorder book al fill 14+14 livelli con prezzi/size, entry marcata, spread, traiettoria post e fav/avv max — non piu solo riepilogo. Livelli catturati 6->20. Confermata istanza singola (il pgrep -c 2 era il comando stesso che matchava il pattern; fuser: lock tenuto da 1 pid). Nota: riga TEST-E2E (XBT finto) lasciata in PG per far vedere la resa sul sito, da cancellare.

Legenda sigle (tutte CYCLE; gli shadow oscillatrici sono nelle tabelle sopra, non in questa matrice): revers=reversal-watch (CYCSR) [cycle short] · opposi=btc_opposite_hold (CYCSO) [cycle short] · revpro=reversal PROMOSSO (reale) [cycle short] · opppro=opposite-hold PROMOSSO (reale) [cycle short] · margin=margin_kill_flip (CYCSF) [cycle short] · expvet=EXP-VETO-ENTRY (bypass BTC neutro) [cycle short] · thinwa=thin-wall relativo [cycle short] · reveng=short_revenge (CYCSV) [cycle short] · waitre=btc_wait_reprice (CYCLW) [cycle long] · expcry=experimental crypto [cycle long] · expequ=experimental solo-equity [cycle long] · volgat=vol-gate trailing long [cycle long] · pumpst=pump-stretch veto [cycle long]

Stato attuale

Girano ora

  • Cycle paper LONG + SHORT
  • 20 watch oscillatrici (1/coin, 60s)
  • Simulatore oscillatrici (paper)
  • Registro + resolver + auto-sync watch (cron)
  • Dashboard web (pagina Oscillatrici + osc-sim)

Spenti

  • Bot reale LONG (cycle) off
  • Bot reale SHORT (cycle) off
  • Mirror reale oscillatrici inerte · conto ~0

Piano: riattivare il reale al traguardo paper 6000 (già ~5816), con size prudente e stop fisso — lo short è il lato forte ma il più ballerino.

L'edge che c'è davvero. Un mese di test ha mappato con precisione dove l'edge non è (nessun filtro d'ingresso meccanico regge). Le due cose solide sono le meno affascinanti: stop sempre e sizing sano. E il miglior generatore di soldi resta il giudizio discrezionale di Teo — +158 USDT in 4 giorni sui trade manuali, contro cui nessuna macchina ha ancora vinto.

📖 Glossario

tratti · shadow · fantasmi

Cosa significa ogni badge/contatore che vedi nelle pagine e nelle tabelle qui sopra. Aggiornato al 21/7.

Tratti CYCLE (colonna "Tratti" dei trade long/short)
TrattoSignificato
✓ / ⚠ flag (es. "spazio verso il max", "esaurimento al max", "capitolazione 2+ rosse", "anti R:R-troppo-bello")Regole CONGELATE dalla baseline storica del lato (long W30/L23, short W30/L10): ✓ verde = tratto che storicamente vince, ⚠ rosso = che storicamente perde, grigio = fragile (campione piccolo o segnale debole). Le soglie stanno in cycle_traits_baseline.json e non si ricalibrano a mano.
simile a vittorie / perdite / profilo neutroSomiglianza del trade alle vittorie o perdite storiche DEL SUO LATO: distanza normalizzata (IQR) delle feature d'entry (dist dal max 24h, posizione range 6h, RSI15m) dalle mediane dei vincitori (dW) vs perdenti (dL). "Perdite" se dL < dW×0.8, "vittorie" se dW < dL×0.8, altrimenti neutro. [n Wx/Ly] = campione della baseline. Validato: flip degli short "perdite" 20-21/7 = +701; flip long Set-P col ruleset vero = verde in ogni scenario mentre il controllo perde.
Dopo lo stopAnalisi SEQUENZIALE post-stop (calcolatore cycle_stop_salvage, cron 2h): STOP GIUSTO = tenendo si toccava la liquidazione; STOP-HUNT = tornava in profitto prima, senza liquidare (tenendo si salvava); salvabile solo a leva ≤X = liquidava a 10x ma non a leva bassa; recupero parziale = risaliva ma non in profitto. Sui 163 stop: 79% stop-hunt ma STRUTTURALE (corridoio stop→liq ampio), non significa stop sbagliati.
max tier-1Massimo margine per la coin al primo scaglione di risk-limit KuCoin (per posizione, a 10x = cap/10): quanto potresti alzare la size senza cambiare scaglione.
Tratti OSC (colonna "tratti" in osc-sim, divisi pre-entry / dopo-chiusura)
TrattoSignificato
⛔ bruciataCoin già stoppata oggi (regola coin-bruciata: stessa coin stesso giorno = sospetta).
👻 ENTRY MAI STAMPATAFill irreale: il prezzo d'entry non è mai stato stampato nelle candele (fill dal book su illiquide). Vittorie così vengono depurate dal bilancio; live c'è la guardia anti-fantasma.
⚠ coltello (approach)Strappo in corsa negli ultimi 15min: long che arriva scendendo <-1.2% / short che arriva salendo >+2%. Comprare/vendere dentro il movimento.
🧱 muro-tetto / muro ADDOSSO / muro a X% / muro lontanoMuro di book: TETTO = ask sopra il long; ADDOSSO = muro nella direzione del trade a <0.8% (profilo-stop: 4/9 stop vs 2/30 win); lontano >2.5% = spazio per correre.
coin caldissima / downtrendTrend 24h ≥+20% (pompata) o ≤-8% (in caduta).
top / fondo rangePosizione nel range 6h: ≥75% (in cima) o ≤15% (sul fondo).
livello fresco / rodatoFresco = gamba nata da <30min (poco testato); rodato = ≥3h o ≥15 tocchi (livello difeso più volte, storicamente meglio).
vol-gamba X / volumi mortiVolume della gamba d'ingresso vs norma (≥2x = arriva CON volume, unico segno big-mover che replica); volumi morti = vol 1h ≤0.3x.
RSI dip / RSI altoRSI 5m ≤38 (ipervenduto) o ≥60. Nota onesta: da solo NON separa stop da win (verificato).
taker contro / a favoreFlusso degli ordini aggressivi vs il lato del trade (|imbalance| ≥0.15). "Contro" = gli aggressori spingono contro di te. È il tratto più volatile intra-trade (si gira nel 78% dei trade).
🔁 profilo-INVERTIColtello dal lato SBAGLIATO del range: long che scende ma sta in alto nel range (>50%) / short che sale ma sta in basso (<35%). 5/7 = 71% stop: il candidato flip più forte (stessa regola +951 retro nel cycle).
flip post-stop avrebbe vinto / stoppavaRetro del revenge-flip: se allo stop avessi invertito la direzione, l'altro lato faceva target (+2%) o stoppava anche lui.
🏃 runner +X% oltre targetDopo il target il prezzo ha continuato di X% (dai dati after): quanto avrebbe reso un trailing.
🔄 recuperava dopo lo stop / salvabile a leva bassaDall'analisi sequenziale dopo-stop: tornava in profitto senza liquidare (stop-hunt) oppure sopravviveva solo con leva ≤X.
mai partito (10m)DOA/nato-morto: nei primi 10min mai in favore di almeno +0.5%.
intra: N tratti girati / troppo corto / stabiliQuanti tratti hanno CAMBIATO stato durante il trade (snapshot 5min, un flip conta se persiste ≥2 snapshot). "Troppo corto" = <2 snapshot, non misurabile. Il 97% dei misurabili gira ≥1 tratto (media 2.9).
profilo X→Y durante il tradeLa somiglianza (vittorie/perdite/neutro) è cambiata categoria tra entry e exit.
somiglianza: simile alle vittorie / perdite / non si saDistanza (IQR) delle feature d'entry dalle mediane dei vincitori vs perdenti dei chiusi osc. "Non si sa" = profilo senza vicini storici o distanze quasi pari.
Shadow CYCLE (contatori che osservano, non agiscono)
ShadowCosa conta
wait-reprice (CYCLW)Ingressi ripresi dopo il reprice del btc-wait: il filtro BTC aveva spostato l'entry, qui si misura cosa avrebbe fatto.
opposite-holdIl filtro BTC non cancella più i pending opposti: li marca e ne traccia l'esito virtuale.
reversal-watch (…-RW)Rientro dopo uno stop se il prezzo mostra reversal (adverse ≥4% + reject dal max): trade reali marcati RW, 4/4 +265 retro.
🧪 EXP-VETO-ENTRYExperimental: BTC neutro bypassato dai veti (gate thin-wall sullo short). Conta i trade aperti che il semaforo avrebbe fermato.
thin-wall VETO vs thin-wall RELATIVODUE cose diverse: il VETO (regola vecchia, assoluta: muro ask < 3000 fisso = fade senza resistenza, blocca) oggi e' un contatore shadow dei CANDIDATI BLOCCATI (le sue righe sono ingressi mai nati, non trade). Il RELATIVO (15/7, colonna "thinwa" dello storico) usa il metro giusto (muro < 4× la media ask) e i trade che il vecchio 3000 avrebbe bloccato girano come paper taggati relative_only: la colonna misura quanto il vecchio veto buttava via.
pump-stretchGate bocciato come veto (44 flaggati chiudono +242): resta contato per memoria.
mutex-stantii / mutex_blockedUn open opposto >12h piatto (±1.5%) non blocca più l'altra direzione; mutex_blocked logga QUALI long il mutex avrebbe bloccato (costo misurabile).
inversione-profiloCandidati col profilo-stop (coltello dal lato sbagliato del range) contati come INVERTITI: retro +951 (5/9 stop ribaltati). Gemello del flip osc.
turn-protect / early-profit / timeoutProtezioni d'uscita sotto verdetto sequenziale: timeout e turn-protect LONG protettivi (tenerli); early-profit SHORT taglia i vincenti (+415 a tenerli, a n=15 candidato spegnimento). Il turn_protect long SALVA -1001 nel campione (l'aneddoto flip non generalizza).
stop-reclaimDopo lo stop: il prezzo ha ripreso l'entry? quando e quanto sopra? (misura gli stop anticipati).
no-adaptive-tightening (short, 21/7)Controfattuale: trail flat 1.5% SENZA lo stringimento adattivo (0.6/1.0) sui trailing-exit. Retro +456 (5 migliorati/17 peggiorati, runner-driven). Decisione a 15-20 trade nuovi.
re-entry post-exit (long, 21/7)Dopo un vincitore: limit a exit-2.5% entro 6h, target +2/stop -4/timeout 24h. RETRO BOCCIATO (-588 su 69 fill, WR 67% < pareggio): resta a contare i nuovi, scettici.
daily-open sniperPaper sui pump di mezzanotte UTC (scoperta 19/7: continuano +4.2% a 30m, gli altri orari round-trip).
Shadow OSC (contatori del cron osc_shadow_counters, ogni 2h)
ShadowCosa conta
nati-morti (DOA)"Se dopo X min mai in favore di +0.5% → taglia": griglia 5/10/15min. A 15min il taglio avrebbe reso +226.
coin bruciataDopo uno stop, stessa coin stesso giorno = skip. Retro: saltati 9, net -212 (avrebbe salvato).
trail-armato (+1%/1%)Trailing oltre il target sui vincitori: quanti runner catturati e delta (flat-300).
dopo-ordine (salvataggio)Sequenziale post-stop: stop_giusto (liquidava) / stophunt (recuperava prima) / solo_leva_bassa / recupero_parziale. Su 11 stop: 8 giusti, 2 stop-hunt, 1 parziale.
👻 fill fantasmaVittorie con entry mai stampata sulle candele: depurate (+113 tolti dal bilancio); live c'è la print-guard.
muro-vicino <0.8%Trade aperti col muro addosso: 6 trade net -613, tossico.
revenge-flipFlip virtuale allo stop: 9/11 target, +140/268. In attesa di n.
inversione-profiloColtello dal lato sbagliato del range: candidato flip/blocco (7 flaggati, 5 stop ribaltati, swing +951).
trait-flips (21/7)Tratti girati durante il trade (snapshot 5min, isteresi 2): 97% dei misurabili gira ≥1 tratto; top: taker, coltello, RSI.
circuit-breaker giornalieroAl 3° stop del giorno la sim non apre più fino a mezzanotte (retro +265). Reset one-shot via osc_breaker_reset.txt.
coltello-SHORTApproach >+2% in 15m sullo short = squeeze in corsa (4/5 stop short lo avevano): flag+TG, non blocca.
👻 Fantasmi (bilancio virtuale)
TermineSignificato
FantasmaTrade VIRTUALE di una famiglia shadow (wait-reprice, opposite-hold, reversal-watch, experimental…): simulato fino in fondo ma MAI contato nel capitale paper (esclusi dal 18/7 da tutte le stats: prima gonfiavano il bilancio di +1783 short / -208 long).
totale con fantasmi (cap X)Capitale paper + PnL di tutti i fantasmi: quanto varrebbe il sistema SE le famiglie shadow fossero attive. Il confronto paper-vs-fantasmi dice quali famiglie promuovere.
👻 grigio nel PnL/giornoNel riquadro giornaliero: la parte fantasma del giorno, mostrata a parte per non confonderla col reale.
fill fantasma (osc)Altra cosa: vittoria con entry mai stampata (fill irreale su illiquida), depurata dal bilancio osc. Stesso emoji, concetto diverso.
Resolver & Flip (audit dei bloccati · inversioni · 21/7)
VoceSignificato
shadow_outcome_audit (il resolver)Cron orario (:17) che RISOLVE i candidati scartati dai filtri: ogni paper_trade con status 'blocked%' e ogni pullback_trade 'skipped' con ≥12h di storia viene simulato sulle candele — ha mai toccato l'entry entro 6h? poi target-first vs stop-first entro 6h, con MFE/MAE e ritorni a 30m/2h/6h. Il motivo di blocco viene normalizzato in reason_group (numeri→N, primi 2 segmenti separati da ":", es. gate_rejected:relative_trend_block) e i risultati aggregati per (fonte, reason_group) in shadow_outcomes. È la base del conteggio 24/7 (gira di continuo, ~4200 righe auditate): la % target 1° alta = il filtro sta bloccando trade che avrebbero vinto (toglie edge), bassa = protegge davvero.
osc_short_flip (flip SHORT→LONG)21/7, caso AKE +45%. Per ogni SHORT osc chiuso, flip→LONG dall'entry con book-cap sul lato opposto (ask20_usdt/leva, clamp 100–1000: la size che un long consumerebbe davvero sugli ask). Target +2%, stop -6% osc, stop-first, finestra 48h. Diviso per profilo osc "simile a perdite" con baseline calcolata PER-LATO short (nf≥5, dL<dW×0.8). È la variante inversione-profilo dell'osc (flip nella direzione OPPOSTA), da non confondere col revenge-flip che invece rientra nella STESSA direzione che ha stoppato. Decisione a n≥15.
osc_long_flip (flip LONG→SHORT)21/7, speculare a osc_short_flip. Per ogni LONG osc chiuso, flip→SHORT dall'entry con book-cap sul lato opposto (bid20_usdt/leva, clamp 100–1000: lo short vende sui bid). Target -2%, stop +6% osc, stop-first. Profilo "simile a perdite" con baseline PER-LATO long. Gemello inversione-profilo del lato long: flip direzionale opposto, distinto dal revenge. Decisione a n≥15.
osc_flip_chipforte (flip solo se chip forte)21/7. Flip→opposto SOLO quando il trade osc porta un chip-warning FORTE (short-contro-pompa / muro-addosso / coltello / taker-contro) — i chip che nell'analisi rendevano se flippati (pompa +1624, coltello +1096, taker +927, muro +704) mentre senza-chip si perdeva -906. Book-cap sul lato opposto (ask per il flip-long, bid per il flip-short, clamp 100–1000). Confronta tre uscite: PAVIMENTO target +2%, TETTO target +6%, TRAILING (arma a +2%, trail 1% sotto il picco, mai sotto +2%, stop -6% se non arma). Trigger dal chip, non dal profilo né dal revenge. Decisione a n≥20 (criterio flip_net>0 e flip>reale).
cycle_short_flippompa (flip pompa)21/7, la regola AZIONABILE all'entry. Flippa→long gli SHORT cycle entrati in POMPA ad alto volume (vol_1h≥2.5 e (ret_1h≥3% o ret_24h≥8%)) = il gate NO-SHORT v2. Non è hindsight né il "simile a perdite" (bocciato, -660): flippa solo la pompa riconoscibile al momento. Book-cap sul lato opposto ASK20 (ask20_value/leva, clamp 300–1000, thin<300). Target +2%, stop -4% (robusto: 11/12 sugli stop veri). Decisione a n≥15 (flip_net>0).
cycle_short_okingann (OK-ingannevole)21/7. SHORT cycle entrati con checklist >4 "OK" MA tratti che urlano (v1 simile-a-perdite OR gate pompa OR fuori-scala≥2): il semaforo verde dà falsa fiducia dove i tratti avvertono. Candidato primario è lo SKIP (skip_cf = PnL dello short ribaltato di segno); traccia in parallelo anche il flip_cf→long (target +6% = lo stop dello short, stop -4%) con book-cap sul lato opposto (ASK20/leva, cap 1000 floor 300). Non è un'inversione-profilo né un revenge: è il filtro anti-falso-verde. Retro n=7, net -570 (SOXL -612, BEAT -369 a checklist 5.25). Decisione a n≥15 (skip_cf>0).
Score & Fiducia (badge/score persistiti nei trade)
VoceSignificato
Fiducia v2 (long) / Fiducia v2s (short) — il badge "fiducia v2" che vedi liveScore SOLO display, retroattivo su tutti i trade: non opera (il gate resta sulla v1). Parte da 60/100. LONG (feature-scan 10/7, n=71): premia ret_24h ≤2% (+15), penalizza pompa >6%/>10% (-20/-30) e ampiezza stiracchiata >8×/>12× (-15/-25), scala la "trappola payoff-alto+no-dip" (payoff_quality ≥75 con RSI15m >50 → -25). SHORT (regole 8/7): RSI15m ≥60 fade (+15) / <42 rischio squeeze (-25), vol >5× squeeze (-20), muro ask sottile <3000 (-10), ret_24h ≤-4% momentum-giù (+10). Etichette: ALTA ≥75 / MEDIA ≥50 / BASSA ≥30 / DEBOLE <30. Mismatch da sapere: il diario documenta la "Fiducia" come la card Filtro EVITA (fiducia v1), che è un altro score — quello operativo che gradua la size (ALTA 1.0 / MEDIA 0.5 / BASSA 0.25) e salta i setup (label EVITA = skip). Stesso nome "Fiducia", due score diversi: la v1 (gate, con EVITA) decide; la v2 (display, con DEBOLE) commenta e basta. Nel render compaiono entrambe ("fiducia v1 (gate)" + "fiducia v2").
dump_score_v1 (short, persistito 17/7)Qualità del dump per il fade-short, 0–5, salvato nell'entry_context al fill (prima solo a video). Somma 5 flag binari sulla coin al fill: pump3h (ret_3h ≥5%), aria-sotto (dist_low_6h ≥8% = spazio per cadere), crack15m (ret_15m <0), livello-fresco (tocchi_24h ≤5), top-range (pos_range_6h ≥80%). ≥4 = rosso: profilo-dump forte (pompata di recente, vuoto sotto, già crepa, in cima a un livello poco difeso). Puramente osservativo, non filtra.
payoff_quality (score, long)Score 0–100 che distingue un payoff davvero tradabile da un best-high vecchio/falso. Parte da 50; il peso più grosso è il downside compensato (R:R vs minimo: +22 se ≥2.5, -28 se scarso), poi livelli-sotto, posizione nel range, penalità pompa-24h e volume-morto, ATR, spread/imbalance. Etichette: ≥75 QUALITA ALTA / ≥55 MEDIA / ≥35 BASSA / <35 FALSO POTENZIALE. Nasce osservativo ma è anche operativo sul long: alza il min-stop dinamico, alimenta lo smart-entry e il quality-gate blocca i "falsi potenziali" (CYCLE_QUALITY_MIN_SCORE, default 70). Legge la geometria da rebound_potential.
exit_confidence ("Fiducia uscita", persistita per trade)Score informativo d'uscita (0–100, salvato in exit_confidence_*): quanto conviene lasciar correre il trailing. Non tocca ordini/stop/chiusure — serve solo a confrontare live vs storico. Parte da 55, si muove su profitto-in-leva (runner +12), cuscino sopra stop/floor, ritraccio dal picco, più momentum coin (RSI / ret1h / ret3h / vol). Etichette: ≥72 RESTA ALTA / ≥55 RESTA MEDIA / ≥38 STRINGI·VALUTA / <38 VENDI·PROTEGGI; NON ATTIVO se il trailing non è ancora armato (torna 45). Calcolata anche a trade chiuso per lo storico.
rebound_potential ("PAYOFF ALTO/MEDIO/BASSO")La geometria grezza del payoff, puramente osservativa (non apre/filtra): stop_down%, target_up%, prossima resistenza, best-high (max tra target / resistenza / max6h / max24h), best-low, e i rapporti R:R (rr_best, rr_best_vs_low). Etichetta PAYOFF ALTO (rr_best ≥2 e best_up ≥4%) / MEDIO (≥1.2 e ≥2.5%) / BASSO / N/D, più il giudizio "asimmetria eccellente…scarsa". È l'input di payoff_quality: rebound = la forma, payoff_quality = il giudizio se quella forma è reale.
Somiglianza v2 (shadow 21/7, colonna Tratti)V2 del verdetto somiglianza, sopra la v1 "simile a vittorie/perdite/neutro": aggiunge direzione + gate-pompa + checklist. ⛔ NO-SHORT: solo short, se pompa attiva (vol_1h ≥2.5× e ret_1h ≥3% oppure ret_24h ≥8%) = non shortare dentro la pompa. FUORI SCALA: ≥3 feature valutate e ≥2 "oltre-estremo" (oltre la mediana-vittorie, lontano dalle perdite, di ≥0.5 IQR) = trade più estremo del profilo vincente. Altrimenti "v2: conferma vittorie/perdite/neutro" o "n/d (pochi dati)"; appende un ⚠ se la checklist d'entry ≤4. Vale per entrambi i lati (parametro side).

Regole attive

Leva adattiva (safe_lev)

Leva massima con la liquidazione DIETRO lo stop: lev = 100 / (stop + maint + buffer), buffer 1%. Mant 2,5% → 10x; mant 5% → 8x (liq ~−7,5%, oltre lo stop −6%). Cappata a LEV. Gira sul mirror reale osc.

Anti-chase (MAX_CHASE 1.5%)

Guardia sul mirror REALE osc: l'entry si aggiorna al prezzo attuale, ma se è già scappato a favore >1.5% rispetto all'entry del sim → skip. Non rincorre un movimento già partito.

Runner-META v6

Al +4% incassa METÀ posizione (profitto in cassa); l'altra metà diventa runner con stop a pareggio + trailing 3% dal picco (runner_trail_pct). Cattura i runner (picco medio +14% dopo il target) senza poter perdere. Validato +7,38% vs +5,83%.

Guardie sim osc

Quarantena livello (OSC_LEVEL_COOLDOWN_H=6): un livello che ha già dato un esito non ne dà un altro per 6h (niente N eventi sullo stesso episodio). Retest vivo (OSC_MAX_ENTRY_DRIFT=1.2%): apre l'evento/pending solo se il prezzo è ANCORA al livello entro banda. Cooldown (SIM_COOLDOWN_H=6): niente nuovo trade stesso sym/lato per 6h dopo la chiusura. Pending (OSC_SIM_PENDING_MAX_H=4): il pending armato scade se il flush profondo non arriva entro 4h.

Gate ingresso

late_dump_blocks_short: blocca lo short tardivo (ret15 ≤ −1%, oppure ret1h ≤ −1.8%, con pos6h ≤ 35%) — già in fondo, niente da spremere. rotation_guard: cooldown post-stop 20m / post-profit 8m sull'ultima chiusa; override solo per retest alto-fresco (q ≥ 85, pos6 ≥ 65%). btc_short_breakdown: shorta a range basso solo se BTC conferma il breakdown (ret15 ≤ −0.20% e ret60 ≤ −0.25% o ret180 ≤ −0.40%). dynamic_long_min_stop: impone uno stop long minimo dinamico per qualità setup (allarga lo stop se troppo stretto, logica-short).