# Portfolio Manager Applicazione desktop con GUI PyQt6 per la gestione di un portafoglio di investimenti da 180k EUR (160k ETF Core + 20k Stock Satellite). ## Caratteristiche - **Portfolio Snapshot**: Visualizzazione in tempo reale del portafoglio con P&L e allocazione - **Transaction Log**: Tracciamento completo di tutte le transazioni (BUY, SELL, DIVIDEND) - **Analytics Dashboard**: Metriche di performance, allocazione per tipo/geografia, analisi del rischio - **Price Fetching**: Aggiornamento automatico prezzi via yfinance con caching intelligente - **Database SQLite**: Persistenza dati con backup automatico ## Requisiti - Python 3.10+ - PyQt6 - yfinance - matplotlib ## Installazione ### 1. Clona il repository (o scarica il progetto) ```bash cd /path/to/portfolio-manager ``` ### 2. Crea e attiva l'ambiente virtuale **Linux/Mac**: ```bash python3 -m venv .venv source .venv/bin/activate ``` **Windows**: ```bash python -m venv .venv .venv\Scripts\activate ``` ### 3. Installa le dipendenze ```bash pip install --upgrade pip pip install -r requirements.txt ``` ## Utilizzo ### Avvia l'applicazione **Metodo 1: Launcher Script (Raccomandato) πŸš€** Doppio click su: ``` portfolio-manager.sh ``` Oppure da terminale: ```bash ./portfolio-manager.sh ``` **Metodo 2: Desktop Entry (Integrazione Desktop)** Copia il file `.desktop` nella directory delle applicazioni: ```bash cp portfolio-manager.desktop ~/.local/share/applications/ ``` Poi cerca "Portfolio Manager" nel menu applicazioni del desktop environment. **Metodo 3: Manuale da Terminale** ```bash # Attiva venv source .venv/bin/activate # Lancia app python main.py ``` ### Primo avvio Al primo avvio, il database SQLite verrΓ  creato automaticamente in `data/portfolio.db`. ### Workflow tipico 1. **Aggiungi Holdings**: Tab "Snapshot" β†’ pulsante "Add Holding" 2. **Aggiorna Prezzi**: Tab "Snapshot" β†’ pulsante "Update Prices" (fetch da yfinance) 3. **Registra Transazioni**: Tab "Transactions" β†’ pulsanti "Buy", "Sell", "Dividend" 4. **Visualizza Analytics**: Tab "Analytics" per metriche di performance e allocazione ## Struttura del Progetto ``` portfolio-manager/ β”œβ”€β”€ src/ β”‚ β”œβ”€β”€ core/ # Logica di business (Portfolio, Transaction) β”‚ β”œβ”€β”€ data/ # Database e price fetching β”‚ β”œβ”€β”€ analytics/ # Motore di analisi β”‚ β”œβ”€β”€ gui/ # Interfaccia PyQt6 β”‚ └── utils/ # UtilitΓ  (formatter, error handler) β”œβ”€β”€ data/ # Database SQLite β”œβ”€β”€ resources/ # Risorse (stylesheet QSS opzionale) β”œβ”€β”€ tests/ # Test suite β”œβ”€β”€ main.py # Entry point applicazione └── requirements.txt # Dipendenze Python ``` ## Database Schema ### Tabella `holdings` Memorizza le posizioni correnti del portafoglio. | Campo | Tipo | Descrizione | |-------|------|-------------| | ticker | TEXT | Simbolo del titolo (es. VWCE.MI) | | name | TEXT | Nome completo | | asset_type | TEXT | ETF, Stock, Cash | | quantity | REAL | QuantitΓ  posseduta | | avg_price | REAL | Prezzo medio di carico | | current_price | REAL | Prezzo corrente | | current_value | REAL | Valore corrente (qty Γ— price) | | weight_pct | REAL | Peso percentuale nel portafoglio | ### Tabella `transactions` Storico di tutte le transazioni. | Campo | Tipo | Descrizione | |-------|------|-------------| | ticker | TEXT | Simbolo del titolo | | transaction_type | TEXT | BUY, SELL, DIVIDEND | | date | DATE | Data transazione | | quantity | REAL | QuantitΓ  (NULL per DIVIDEND) | | price | REAL | Prezzo unitario (NULL per DIVIDEND) | | amount | REAL | Valore totale | | notes | TEXT | Note opzionali | ### Tabella `price_cache` Cache dei prezzi fetched da yfinance. | Campo | Tipo | Descrizione | |-------|------|-------------| | ticker | TEXT | Simbolo del titolo | | price | REAL | Ultimo prezzo fetched | | last_updated | TIMESTAMP | Timestamp ultimo aggiornamento | ## Sviluppo ### Setup ambiente di sviluppo ```bash # Attiva venv source .venv/bin/activate # Installa dipendenze di sviluppo (opzionale) pip install pytest pytest-qt ``` ### Esegui i test ```bash pytest tests/ ``` ### Logging L'applicazione logga tutti gli eventi in `portfolio.log` con livello DEBUG. ## Roadmap (Future Features) - [ ] Performance charts storici (matplotlib) - [ ] Benchmark comparison (vs FTSE MIB, S&P 500) - [ ] Export report PDF/Excel - [ ] Multi-currency support - [ ] Tax reporting (capital gains) - [ ] Dark theme (QSS stylesheet) - [ ] Keyboard shortcuts (Ctrl+U, Ctrl+A, etc.) ## Licenza Uso personale. ## Note - **Target Portfolio**: 180k EUR (Core ETF 160k + Satellite Stock 20k) - **ETF principali**: VWCE.MI (World), MEUD.MI (Europe) - **Stock satellitari**: AZM.MI (Azimut) - **Data target**: 2026-01-01