Utilities Hub
Methodology
Formulas, assumptions, and limitations of our quantitative tools
Returns and Annualization
Arithmetic Returns
Simple percentage returns calculated as:
r_t = (P_t - P_(t-1)) / P_(t-1)Log Returns
Continuously compounded returns:
r_t = ln(P_t / P_(t-1))Annualization
Returns are annualized using geometric compounding:
Annual Return = (1 + mean_daily_return)^N - 1Where N is the number of trading periods per year:
- 252: Traditional markets (Mon-Fri, excluding holidays)
- 365: Crypto markets (24/7/365 trading)
Risk Metrics
Volatility (Standard Deviation)
σ = sqrt(Σ(r_t - μ)² / (n-1)) × sqrt(N)Maximum Drawdown (MDD)
Largest peak-to-trough decline:
MDD = max((peak - trough) / peak)Value at Risk (VaR)
Calcoliamo sia il VaR parametrico (assunzione di distribuzione normale) sia quello storico:
Parametrico: VaR_α = μ - z_α × σ
Storico: VaR_α = percentile(returns, 1-α)α tipici: 95% o 99%. Il VaR è espresso come perdita attesa minima (valore negativo) sul periodo di una barra.
Expected Shortfall (ES / CVaR)
Average loss beyond VaR threshold:
ES_α = E[Loss | Loss > VaR_α]Risk-Adjusted Performance
Sharpe Ratio
Excess return per unit of total risk:
Sharpe = (R_p - R_f) / σ_pWhere R_p is portfolio return, R_f is risk-free rate (typically 0 for crypto), and σ_p is portfolio volatility.
Sortino Ratio
Similar to Sharpe, but penalizes only downside volatility:
Sortino = (R_p - R_f) / σ_downsideCalmar Ratio
Return relative to maximum drawdown:
Calmar = Annual_Return / |MDD|Information Ratio
Misura l'extra-rendimento rispetto a un benchmark, normalizzato per l'errore di tracking:
IR = (R_p - R_b) / σ_trackingDove R_b è il rendimento del benchmark e σ_tracking è la volatilità dei rendimenti in eccesso. Annualizziamo il differenziale prima di dividerlo per il tracking error.
Portfolio Optimization
Equal Weight
Simplest diversification strategy:
w_i = 1/n for all assetsRisk Parity
Equalizes risk contribution from each asset. Solved iteratively:
Risk_Contrib_i = w_i × (Σ_w_j × Cov_ij)
Target: RC_i = 1/n for all iMinimum Variance
Ricerca il portafoglio con varianza minima soggetto a pesi long-only (0 ≤ w_i ≤ 1, Σ w_i = 1):
min Σ_i Σ_j w_i w_j Cov_ijUsiamo campionamento casuale sul simplesso (fino a 1000 combinazioni) e soluzione chiusa per 2 asset. Risultato normalizzato per rispettare i vincoli.
Maximum Sharpe Ratio
Optimizes risk-adjusted returns using random simplex search (2000 samples):
max Sharpe = max (w'μ - r_f) / sqrt(w'Σw)
subject to: Σw_i = 1, 0 ≤ w_i ≤ 1Le aspettative di rendimento μ sono stimate come media storica annualizzata (configurabile tra 252 o 365 giorni di trading).
Covariance Shrinkage
Improves stability by shrinking sample covariance toward structured target:
Σ_shrunk = (1-α) × Σ_sample + α × Target
Target = diag(avg_variance)Default α = 0.10, adjustable via slider (0 to 0.30).
Market & Yield Scanners
Arbitrage Scanner (Simulato)
Lo scanner genera quotazioni sintetiche per venue centralizzati, applica modelli di fee configurabili e calcola spread lordi/netti:
- Fee model conservative: taker 0.4%, maker 0.2%, withdrawal 0.1%
- Fee model optimistic: taker 0.2%, maker 0.1%, withdrawal 0.05%
- Net spread = spread lordo − (2 × taker + withdrawal)
- Dimensione trade limitata da liquidità simulata e parametro
maxSize - Modello di slippage lineare: prezzo = base × (1 + min(size/liquidity, 5%))
Tutte le opportunità sono marcate come SIMULATED. Nessuna esecuzione reale: serve solo per studiare la sensibilità al costo delle fee e agli spread.
Yield Screener
I dati provengono da DeFiLlama (API pubblica). Filtri supportati: chain, TVL minimo, APY minimo e età del pool. Nessun rendimento è garantito: evidenziamo sempre il rischio di impermanent loss e la natura puramente informativa dello strumento.
Backtesting
Walk-forward backtesting with periodic rebalancing (monthly by default). Tracks portfolio value, turnover, and generates return series for performance metrics.
Portfolio Value Update
V_(t+1) = Σ w_i × V_t × (1 + r_i,t)Turnover
Measures trading activity at rebalancing:
Turnover_t = Σ |w_target,i - w_actual,i|Assumptions and Caveats
⚠️ Important Limitations
- Historical data only: Past performance does not guarantee future results
- Thin liquidity: Crypto markets can have low liquidity, high slippage
- No transaction costs: Backtests don't include fees, slippage, or taxes
- Stationarity assumption: Return distributions may change over time
- Look-ahead bias: Some metrics may use information not available in real-time
- Market microstructure: Ignores bid-ask spreads, market impact
- Optimization bias: Grid/random search may not find true global optimum
- Data quality: Relies on external APIs (CoinGecko, DeFiLlama)
ℹ️ Best Practices
- Use multiple time horizons for robustness checks
- Apply covariance shrinkage for stability (especially with < 100 data points)
- Consider out-of-sample validation periods
- Monitor turnover to estimate realistic transaction costs
- Use 365 trading days for crypto, 252 for traditional assets
- Combine multiple risk metrics (Sharpe, Sortino, Calmar)
- Always maintain a risk management plan
- This tool is for educational purposes - not financial advice
References
- Ledoit, O., & Wolf, M. (2003). "Improved estimation of the covariance matrix of stock returns with an application to portfolio selection"
- Maillard, S., Roncalli, T., & Teïletche, J. (2010). "On the properties of equally-weighted risk contributions portfolios"
- Markowitz, H. (1952). "Portfolio Selection", Journal of Finance
- Sharpe, W. F. (1966). "Mutual Fund Performance", Journal of Business
- Sortino, F. A., & Price, L. N. (1994). "Performance Measurement in a Downside Risk Framework"