aggiunto file con mappa improvements

This commit is contained in:
fredmaloggia
2025-11-21 17:37:34 +01:00
parent f141853ae1
commit 38ea3f2060

39
TRACCIA_IMPROVEMENTS.md Normal file
View File

@@ -0,0 +1,39 @@
# Traccia improvements Ottimizzatore
## Struttura e stack
- Repository piatto con script versionati (2.6, 2.5.2, Lite 1.0, 2.2 UK); nessun package/moduli, logica procedurale.
- Stack: Python, pandas, numpy, matplotlib; SQLAlchemy/pyodbc (MSSQL); PyPortfolioOpt; opzionale cvxpy; Excel I/O via pandas; nessun requirements/lockfile.
- IO: Excel input (universo titoli, template), output Excel pesi/metriche in `Output/`, grafici PNG in `Plot/`; credenziali DB in `connection.txt`.
## Flusso v2.6 (principale)
- Setup cartelle e target volatilita' (`volatility_targets`), costanti (`days_per_year`, `riskfree_rate`, `mu_heal_floor`).
- Utility metriche: R2 equity, drawdown (profondita', durata, TTR), Heal index (AAW/AUW), H_min_100, serie/metriche portafoglio.
- Connessione MSSQL via `connection.txt`, stored proc `opt_RendimentoGiornaliero1_ALL` per ciascun ISIN; missing riempiti con 0.
- Per target: metriche per-asset (ann return/vol, CAGR, R2, drawdown, Heal, H_min_100 su 5Y); ottimizzazione EfficientFrontier con vincoli PesoFisso/PesoMax, per Categoria e Asset Class; export Excel gestionale (peso*99) e pie chart.
- Riepilogo portafogli: return/vol attesi, Sharpe, diversificazione, path metrics (Heal, TTR, H_min_100); overlay equity/underwater 5Y.
- Variante PH1+HealProxy (se cvxpy): obiettivo massimizzare Heal proxy con floor rendimento >=85% del baseline; grafici comparativi.
## Pattern e criticita'
- Script monolitici, funzioni locali solo utility; forte duplicazione tra versioni (2.5.x, Lite, 2.6).
- Config hard-coded (target vol, vincoli per categoria/asset class, naming file); nessuna parametrizzazione esterna.
- Credenziali DB in chiaro (`connection.txt`); host/porta/db esposti.
- Dati: scarsa validazione; `fillna(0)` su rendimenti distorce metriche; assenza di controllo su duplicati/tipi/periodi mancanti.
- Performance: chiamata stored proc per ogni ISIN in serie; calcolo covarianze/ottimizzazioni per ogni target; niente caching/parallelismo.
- Resilienza: gestione errori minima; cvxpy opzionale ma fallback silenzioso; logging solo via print; niente test.
- Codice morto: alcune utility (path metrics) non usate altrove.
- Output: scrittura massiva di Excel/PNG senza controllo overwrite/versioning.
## Collo di bottiglia
- IO/DB: loop sequenziale sugli ISIN per fetch rendimenti.
- CPU: covarianze e Solvers EfficientFrontier per ogni combinazione durata/volatilita'.
- IO file: generazione multipla di Excel e plot per portafoglio.
## Direzioni di miglioramento (linee guida, non implementate)
- Sicurezza: rimuovere/securizzare `connection.txt`, usare variabili ambiente o secret store; separare credenziali dal repo.
- Configurazione: estrarre target/vincoli in file di config (yaml/json); centralizzare costanti.
- Gestione dipendenze: aggiungere requirements/lockfile e script setup.
- Architettura: modularizzare (data fetch, metriche, optimizer, export), riuso tra versioni, eliminare duplicati.
- Dati: validazione input, gestione missing diversa da fillna(0), log warning sui buchi/ISIN mancanti.
- Performance: fetch batch/caching, eventuale parallelizzazione o memoization di covarianze/metriche.
- Testing/qualita': introdurre test per metriche e vincoli, logging strutturato, controlli su overwrite output.
- Observability: report riepilogo a schermo/logs strutturati piu' dei soli print.