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 | Singapore 6-month T-bill / short-dated SGS (currently ~2.5-3%) • SORA (Singapore Overnight Rate Average) as proxy • SORA / SGS repo for short-term • No capital gains tax and SGS/SSB interest is tax-exempt for individuals, so the gross rate is effectively the after-tax rate |
| Market Benchmarks | Historical Sharpe ~0.2-0.4 long-term • The three local banks (DBS, OCBC, UOB): higher return but higher, mutually correlated volatility • Sharpe ~2-3 (low vol, modest return near the SGS yield) • Beat the STI Sharpe to add value |
| Constraints Singapore | MAS concentration rules (CIS Code), SGX/MAS derivative limits • Mid/small-cap SGX liquidity constraints (lower turnover than large caps) • Brokerage and 9% GST on fees (no securities transaction tax) reduce net Sharpe • No capital gains tax, so gross and after-tax Sharpe are the same; foreign-dividend withholding is the main drag |
| 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: the STI has a historical Sharpe around 0.2-0.4. 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 Singapore 6-month T-bill or short-dated SGS yield, currently around 2.5-3%. This represents what you could earn with virtually zero risk. Singapore has no capital gains tax and SGS/SSB interest is tax-exempt for individuals, so the gross rate is effectively the after-tax rate. The risk-free rate is the baseline - any investment should compensate you for risk above it.
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 Singapore market. One-time purchase. No subscription, ever.
Get Singapore access →