sabato 25 ottobre 2025

Corso di Python: 12 – Sito internet per analisi finanziaria e consulenza portafogli

Progetto: FinancialAdvisorPro
Sito Web per Consulente Finanziario

Progetto: FinanceAdvisorPro

1. Obiettivi del progetto

  • Fornire ai clienti un accesso riservato al proprio portafoglio.

  • Analizzare i dati finanziari (azioni, ETF, titoli, ecc.).

  • Calcolare rendimento, rischio e ottimizzazione dei portafogli.

  • Fornire dashboard interattive con grafici e report.

  • Consentire al consulente di gestire clienti, portafogli e dati di mercato.


2. Architettura generale

Livello Tecnologia
Frontend HTML5, CSS3, JavaScript, Bootstrap, Plotly.js per grafici interattivi
Backend Python, Django, Pandas, NumPy, yfinance, scikit-learn, Matplotlib/Plotly
Database PostgreSQL o MySQL
Sicurezza Django auth, hashing password (Argon2/Bcrypt), HTTPS/SSL, ruoli (cliente/consulente)
Task asincroni Celery + Redis (aggiornamento dati di mercato, calcolo portafogli)

3. Struttura del progetto Django

financeadvisorpro/
│
├── manage.py
├── requirements.txt
├── financeadvisorpro/         # Configurazione Django
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
│
├── users/                     # Gestione utenti e autenticazione
│   ├── models.py
│   ├── views.py
│   ├── forms.py
│   └── templates/users/
│
├── portfolios/                # Gestione portafogli e analisi
│   ├── models.py
│   ├── views.py
│   ├── utils.py               # Calcolo rendimento, rischio, ottimizzazione
│   └── templates/portfolios/
│
├── market/                    # Dati di mercato
│   ├── api.py                 # Interfaccia con yfinance o Alpha Vantage
│   ├── tasks.py               # Aggiornamento dati asincrono
│   └── models.py
│
└── templates/                 # Template generali

4. Modelli principali

users/models.py

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    is_consultant = models.BooleanField(default=False)

portfolios/models.py

from django.db import models
from users.models import CustomUser

class Portfolio(models.Model):
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)

class Asset(models.Model):
    portfolio = models.ForeignKey(Portfolio, on_delete=models.CASCADE, related_name='assets')
    ticker = models.CharField(max_length=10)
    weight = models.FloatField()  # Percentuale del portafoglio

market/models.py

from django.db import models

class MarketData(models.Model):
    ticker = models.CharField(max_length=10)
    date = models.DateField()
    open_price = models.FloatField()
    close_price = models.FloatField()
    high_price = models.FloatField()
    low_price = models.FloatField()
    volume = models.BigIntegerField()

5. Funzioni principali in Python

Recupero dati di mercato

import yfinance as yf
import pandas as pd
from market.models import MarketData

def fetch_market_data(ticker):
    stock = yf.Ticker(ticker)
    df = stock.history(period="1y")
    for date, row in df.iterrows():
        MarketData.objects.update_or_create(
            ticker=ticker,
            date=date.date(),
            defaults={
                "open_price": row["Open"],
                "close_price": row["Close"],
                "high_price": row["High"],
                "low_price": row["Low"],
                "volume": row["Volume"]
            }
        )

Calcolo rendimento e rischio del portafoglio

import numpy as np

def portfolio_statistics(weights, returns):
    mean_returns = returns.mean()
    cov_matrix = returns.cov()
    
    portfolio_return = np.dot(weights, mean_returns) * 252  # annualizzato
    portfolio_std = np.sqrt(np.dot(weights.T, np.dot(cov_matrix*252, weights)))
    
    return portfolio_return, portfolio_std

Visualizzazione portafoglio con Plotly

import plotly.express as px

def plot_portfolio_value(portfolio_df):
    fig = px.line(portfolio_df, x='Date', y='Total', title='Valore portafoglio nel tempo')
    return fig.to_html()

6. Dashboard e area riservata

  • Clienti: login → dashboard → portafogli → grafici → report PDF/CSV.

  • Consulente: login → gestione utenti → gestione portafogli → report aggregati → analisi rischio complessiva.

Strumenti consigliati per dashboard interattive:

  • Django + Plotly Dash: integrazione dei grafici direttamente nelle pagine web.

  • Streamlit (opzione alternativa): ottimo per prototipi interattivi in Python.


7. Sicurezza

  • Autenticazione Django integrata con password hashed.

  • Ruoli utente: cliente e consulente.

  • HTTPS e certificati SSL.

  • Limitazione accesso dati per ogni cliente.


8. Miglioramenti avanzati

  • Previsioni finanziarie con machine learning (scikit-learn, Prophet, TensorFlow).

  • Alert automatici via email per variazioni significative del portafoglio.

  • App mobile (React Native / Flutter) con backend Python.

  • API REST per integrazione con altre piattaforme di investimento.


Nessun commento:

Posta un commento

Corso Fondamenti di Informatica e Reti: 6 Reti di computer e Internet

Reti di computer e Internet Introduzione Prova a pensare alla vita quotidiana senza reti informatiche: niente messaggi WhatsApp, niente m...