Files
Encelado/Encelado/docs/adr/ADR-0002-storage-su-file.md
T
Alby96andClaude Fable 5.1 4c26fd3209 Passa ai Correlation Baskets su eToro e rimuove i motori precedenti (4.0.0)
Perché: l'utente ha chiesto un bot che operi cinque basket di coppie forex
correlate su eToro, autonomo, con ledger, feed gratuiti e apprendimento
costruito da zero, e ha deciso di eliminare tutto ciò che restava delle
gestioni precedenti (Binance, cTrader/proba, ricerca con SQLite, GBDT, RL,
TA-Lib) e di non avere approvazioni manuali sui singoli ordini.

Cosa cambia:
- nuovo Core dei basket (cross sintetici, decisore, cost gate, sizing,
  esecutore leg-risk, backtest con PSR/DSR/PBO, livelli 0-3 di apprendimento),
  adattatore eToro Public API, motore autonomo con equity stop, kill-switch,
  riconciliazione, ledger append-only, calendario e notizie con sentiment;
- modalità Paper / Demo / Live (Live con flag e frase CONFERMO LIVE);
- interfaccia rifatta: barra in alto con tre schede, dashboard con i soli
  numeri principali, fuso orario selezionabile, test di rendering in PNG;
- corretto il parser dei costi eToro (campo "value"): markup e overnight
  non venivano letti;
- strumento di ricerca ridotto a ticks / baskets / falsify con due scenari di
  costo; risultati in results/ e reports/: nessuna configurazione è
  profittevole al netto dei costi (docs/STRATEGY.md lo dice con i numeri);
- documentazione completa (STRATEGY, ML_AND_LEARNING, RUNBOOK, GLOSSARY,
  KNOWN_ISSUES, ADR-0004, ADR-0005) e catena di rilascio aggiornata.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-16 15:45:55 +02:00

1.7 KiB

ADR-0002 — Storage su file per il modulo basket

Data: 2026-09-16. Stato: accettata.

Contesto

Il repository ha già un database SQLite (Encelado.Storage, unica dipendenza NuGet a runtime) usato dal motore proba per barre, dataset, modelli e journal. La specifica del modulo basket chiede storage su file: CSV ; con motivazione, JSONL append-only per ledger e notizie, JSON per modelli e stato, scritture atomiche, rotazione mensile, nessuna riga del ledger modificata.

Decisione

Il modulo basket non usa SQLite. Tutto vive in file sotto Documenti\Encelado\:

data/market/candles_<SYMBOL>_M15.csv     barre M15 bid/ask (dallo strumento ticks e dal delta API)
data/calendar/events.jsonl               eventi economici (dedup title+date+country)
data/news/news_YYYYMM.jsonl              notizie RSS (dedup hash(link))
data/ledger/decisions.jsonl              ogni valutazione di ogni basket (append-only, rotazione mensile in decisions_YYYYMM.jsonl)
data/ledger/baskets.csv                  una riga per basket chiuso (label, P&L, costi, slippage)
data/models/logreg_v<N>.json, mlp_v<N>.json, bandit.json, state.json
knowledge/calibration.csv, insights_YYYYWW.md, proposals.csv, forward_registry.csv, models_registry.csv, preregistrazione.csv
reports/*.csv, results/trials.csv

Alternative

  • Riusare SQLite: comodo per query, ma introduce un binario nativo nel percorso del modulo, contraddice la specifica e rende il ledger modificabile per errore.

Conseguenze

  • Le tabelle si aprono in un foglio di calcolo così come sono; il ledger è verificabile riga per riga.
  • L'analisi (ricostruzione del dataset, calibrazione) rilegge i file: costa qualche secondo per centinaia di migliaia di righe, accettabile per un ciclo settimanale.