Files
PythagorasGoal/docs/diary/2026-09-02-debito-14-report-twr.md
T
Adriano Dal Pastro 2f701b8469 debito 14: il report stampa il TWR (+10,61%), non il bonifico (+243%)
`trades_db.py --report` calcolava e1/e0-1 sulla serie grezza di equity: il 96,3% del
numero era il versamento di $1.399,39 del 25/08. La riparazione (journal.movimenti_capitale)
esisteva e non aveva attraversato il confine fra i due lettori della stessa serie (P1).

- src/live/journal.py: `rendimento_twr` — funzione unica, spezza la serie sui movimenti
  CERTI e moltiplica i segmenti; gli ambigui restano dentro, dichiarati (P12); tre stati.
- scripts/live/trades_db.py: report() la chiama; stampa TWR con segmenti datati, movimenti
  elencati, trading al netto, delta $ etichettato "movimenti INCLUSI"; il % grezzo sparisce.
- test: +5 in test_journal.py (incl. riproduzione del +10,80% del diario 01/09, M23),
  +2 in test_trades_report.py sul testo stampato con connect() deviato in tmp. 832 verdi.
- docs: CLAUDE.md §5.14 chiuso, §2 e §13 aggiornati; memoria 40; diario 02/09.

Limite ereditato e dichiarato (D5): +10% di trading fra due letture consecutive tocca la
soglia del rilevatore e a mercato fermo verrebbe classificato movimento.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RziUCB336YPUUyDJ29x4Ke
2026-09-02 14:22:50 +00:00

3.5 KiB
Raw Blame History

2026-09-02 — Debito 14: il report stampa il TWR, non il bonifico

Scritto il 2026-09-02 fra le 14:16Z e le 14:30Z. Numeri dalla serie equity di trades.db (1.678 letture) e dal report rilanciato dopo la riparazione.

Cosa c'era

trades_db.py --report calcolava 100*(e1/e0-1) sulla serie grezza di equity e lo stampava come performance: +243%. La serie contiene un solo salto, il versamento di $1.399,39 del 25/08 11:47Z: il 96,3% di quel numero era un bonifico. Il classificatore che lo scorpora esisteva già (journal.movimenti_capitale, dal 25/08) e non era mai arrivato al secondo lettore della stessa serie. Trovato e registrato il 01/09 (2026-09-01-stato-trades.md), non riparato perché lo script legge il libro vivo.

Cosa ho fatto

pezzo dove cosa
funzione unica src/live/journal.pyrendimento_twr(con, fino_ts) chiama movimenti_capitale, spezza la serie all'equity PRIMA e DOPO ogni movimento certo, moltiplica i segmenti. Gli ambigui non spezzano (P12): restano nel rendimento, dichiarati. Tre stati: numero, o None con motivo
il report scripts/live/trades_db.pyreport() chiama rendimento_twr (P1: non rifà il conto). Stampa TWR con i segmenti datati, i movimenti elencati con la classe, trading da arming, e il delta $ grezzo etichettato «movimenti di capitale INCLUSI». Il % grezzo non compare più
test tests/test_journal.py (+5) · tests/test_trades_report.py (+2) versamento spezzato e grezzo no · senza movimenti = rendimento semplice · ambiguo non spezza · serie vuota → None con motivo · riproduzione del +10,80% del diario 01/09 (M23) · il testo stampato contiene TWR e non il grezzo · connect() nudo deviato in tmp (conftest), verificato nel test

Il report, prima e dopo

prima:  equity : $598.06 -> $2,051.84  (+1453.78, +243.08%)

dopo:   equity             : $598.06 -> $2,048.40  (+1,450.34 di equity, movimenti di capitale INCLUSI) | picco $2,073.59 | 1678 letture
        movimenti capitale : +1,399.39 certi | +0.00 ambiguo/i (restano nel P&L, dichiarati)
            2026-08-25T11:47  +1,399.39  [movimento]
        trading da arming  : +50.95  (equity al netto dei movimenti certi)
        TWR                : +10.61%  = +11.61% [2026-06-23 -> 2026-08-25] x -0.89% [2026-08-25 -> 2026-09-02]

Il giornale del giorno concorda: «cumulato dall'arming $+1.450,34 — di cui $+1.399,39 versati -> trading $+50,95». Stessa base, stesso versamento, stessa funzione.

Una cosa imparata riparando

Quattro test sono nati rossi con scenari a +10% di trading fra due letture: la soglia del rilevatore (book.EQUITY_JUMP_ALERT) è esattamente 0,10, e a mercato piatto un +10% supera «2× il massimo che il mercato poteva fare» (che è zero) — viene classificato movimento. Non è un difetto della riparazione: è il limite già dichiarato del rilevatore live (D5, nel docstring di movimenti_capitale). Nella serie vera non morde — fra due letture orarie consecutive il trading non fa +10% — ma un test che lo tocca lo rende visibile. I test ora usano +5%, e il limite è scritto nel test, nel CLAUDE.md e qui.

Cosa NON ho fatto

  • Il giornale (pnl_giorno, pagina markdown) non stampa il TWR: stampa già lo scorporo in dollari e la sua pagina ha una forma testata. Aggiungerlo è una riga, ma non era il debito.
  • Non ho scomposto lo scarto (~$25) fra round-trip + non realizzato e il trading al netto: era già fuori scope il 01/09 e lo resta.