All Market Conditions
| Strategy Type | Risk-Adjusted Return Optimization |
| Market Outlook | All Market Conditions |
| Risk Level | Analytical Tool - Optimizes Risk-Return |
| Time Horizon | Medium to Long-Term Allocation |
| Best Conditions | Stable correlation structure, sufficient historical data |
| Avoid When | Extreme regime changes, limited data history |
| Risk Free Rate | UK 3-month Treasury bill yield (currently ~4%) • Bank of England Bank Rate as proxy (currently 3.75%) • SONIA (Sterling Overnight Index Average) for short-term • Use after-tax rate (or hold within an ISA/SIPP) for fair comparison |
| Market Benchmarks | Historical Sharpe ~0.3-0.5 long-term • Higher return but higher volatility • Sharpe ~2-3 (low vol, modest return) • Beat the FTSE 100 Sharpe to add value |
| Constraints Uk | UCITS/FCA concentration limits, derivative position limits • Mid/small cap (FTSE 250/SmallCap, AIM) liquidity constraints • Stamp duty (0.5% SDRT on share buys), brokerage impact on net Sharpe • CGT vs tax-sheltered (ISA/SIPP) impact on after-tax Sharpe |
| Practical Considerations | 252 days for annualization • Monthly or quarterly typical • 1-3 years of data recommended • Include in optimization |
For a long-term portfolio, Sharpe above 0.5 is acceptable, above 1.0 is good, above 2.0 is excellent but rare to sustain. Compare to benchmarks: FTSE 100 has historical Sharpe around 0.3-0.5. Beating the market's Sharpe means you're adding value. Be skeptical of strategies claiming Sharpe above 2.0 over long periods - verify thoroughly.
Monthly or quarterly rebalancing is typical. More frequent creates more transaction costs; less frequent lets the portfolio drift from optimal. A good approach: Check monthly, but only rebalance if weights drift more than 5% from optimal. This balances responsiveness with cost efficiency.
Yes, for simple portfolios. Use Excel Solver with the objective to maximize Sharpe (or minimize negative Sharpe). Set constraints for weights summing to 1 and position limits. For more complex optimization (many assets, complex constraints), Python with scipy or cvxpy is more powerful and flexible.
Highest return often comes with highest volatility. A 30% return with 50% volatility might be worse risk-adjusted than 15% return with 10% volatility. Additionally, diversification can reduce portfolio volatility below any single asset while maintaining reasonable returns. Sharpe optimization finds this optimal combination.
Use the UK 3-month Treasury bill or SONIA, currently around 4% (the Bank of England Bank Rate is 3.75%). This represents what you could earn with virtually zero risk. If optimizing after-tax returns, use the after-tax rate or hold assets in an ISA/SIPP. The risk-free rate is the baseline - any investment should compensate you for risk above this baseline.
Optimization fits to historical data including noise. The 'optimal' weights are partly optimal for that specific historical period, not for the future. This is overfitting. Solutions: Use robust estimation, add constraints, shrink estimates, perform walk-forward analysis, and expect 20-40% degradation from in-sample to out-of-sample Sharpe.
High-volatility assets will have small weights in Sharpe-optimized portfolios unless they have very high expected returns. This is appropriate - their risk contribution would otherwise dominate. If you want more balanced exposure, consider risk parity (equal risk contribution) or add minimum weight constraints. Position sizing should reflect the volatility difference.
Yes, especially for active strategies. Approach 1: Add turnover constraint (limit weight changes). Approach 2: Add turnover penalty to objective function. Approach 3: Subtract expected transaction costs from expected returns. Net Sharpe (after costs) is what matters, not gross Sharpe. High turnover strategies often have negative net Sharpe despite positive gross Sharpe.
Steps: (1) Get market-cap weights for your universe. (2) Estimate covariance matrix. (3) Back out equilibrium returns using π = δΣw_mkt. (4) Express your views as return forecasts with confidence. (5) Apply BL formula to blend equilibrium with views. (6) Optimize with blended returns. Libraries like PyPortfolioOpt and Riskfolio-Lib implement BL.
Sharpe penalizes all volatility equally. Sortino only penalizes downside volatility. For assets with positive skew (large upside potential), Sortino optimization may allocate more than Sharpe would. Most investors care more about downside than upside volatility, making Sortino often more appropriate. Implementation is similar - just replace standard deviation with downside deviation.
Methods: (1) Use rolling windows with recent data weighted more heavily. (2) Regime-switching models with different parameters per regime. (3) Conditional estimation based on observable signals (VIX, momentum). (4) Bayesian updating that adapts to new information. (5) Shrinkage toward stable long-term estimates. Accept that parameters change and build adaptability into the system rather than assuming stationarity.
Rule of thumb: At least 10 observations per estimated parameter. For N assets: N expected returns + N(N+1)/2 covariance terms. For 10 assets: ~65 parameters → need ~650 observations (2.5+ years of daily data). With monthly data, this becomes impractical. Solutions: Factor models (reduce dimensionality), shrinkage estimators, or simpler allocation rules for limited data.
Methods: (1) Walk-forward analysis - optimize rolling, test forward. (2) Cross-validation appropriate for time-series. (3) Compare to simpler baselines (equal weight, risk parity). (4) Check IS vs OOS Sharpe ratio (50-80% retention is realistic). (5) Examine weight stability - very unstable weights suggest overfitting. (6) Use information criteria (AIC, BIC) to penalize complexity.
Approach 1: Pre-compute optimal weights for each regime, switch based on regime indicator. Approach 2: Regime-conditional expected returns in dynamic optimization. Approach 3: Robust optimization that performs acceptably across regimes. Challenge: Real-time regime detection is imperfect. Consider blending regime portfolios based on regime probabilities rather than hard switching.
Testing SR₠> SR₂ requires accounting for correlation between the two return series. Jobson-Korkie test or bootstrap methods are appropriate. For uncorrelated series with T observations: SE(SR₠- SR₂) ≈ √[2(1 + SR_avg²/2) / T]. Need substantial data (3+ years) for statistical significance. High correlation between strategies makes comparison harder (reduces test power).
Full guided lessons, quizzes, and a complete strategy library for the United Kingdom market. One-time purchase. No subscription, ever.
Get United Kingdom access →