Back to Community
Three Quant Lessons from COVID-19

By Alex Lipton and Marcos Lopez de Prado

https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3562025

12 responses

Thanks!

@Marc thanks for posting. MLdP has a book coming out soon that looks interesting.

Can anyone shed light on what he means by "All-Weather Strategies", is he talking about long/short equity?

Search: Ray Dalio All Weather Portfolio.
A static stock/bonds/commodities ETF portfolio.

Yep, thanks for posting. If anyone has links to good papers on market regimes, please post.

Here is Cliff Asness on market timing: Sin a Little.

@Peter

like Theo said, its a A static stock/bonds/commodities ETF portfolio

Take a look at Chapter 4: Faber, Meb. Global Asset Allocation: A Survey of the World’s Top Asset Allocation Strategies, (@Amazon KindleUnlimited)

"Risk parity is a term that focuses on building a portfolio based on allocating weights based on “risk” rather than dollar weights in the portfolio. While the general theory of risk parity isn’t something particularly new, the term was only coined within the past decade and became in vogue in the past few years. Risk is defined in different ways but volatility is a simple example. As an illustration, the 60/40 stocks and bonds portfolio doesn’t have 60% of total overall risk weighted to stocks, rather, more like 90% since stock volatility dominates the portfolio’s overall total volatility. Risk parity has its roots in the modern portfolio theory of Harry Markowitz. While introduced in the 1950s, it eventually earned him a Nobel Prize. The basic theory suggested the concept of an efficient frontier – the allocation that offers the highest return for any given level of risk, and vice versa. When combined with the work of Tobin, Treynor, Sharpe, and others the theory demonstrates that a portfolio could be leveraged or deleveraged to target desired risk and return parameters. Many commodity trading advisors (CTAs) have also been using risk- or volatility-level position-sizing methods since at least the 1980s.

Ray Dalio’s Bridgewater, one of the largest hedge funds in the world based on assets under management, was likely the first to launch a true risk parity portfolio in 1996 called All Weather. Many firms have since launched risk parity products. While the underlying construction methods are different, the broad theory is generally the same. We are not going to focus too much on risk parity since Bridgewater and others have published extensively on the topic, and you will find several links at the end of this chapter. Three primer papers to read are “The All Weather Story,” “The Biggest Mistake in Investing,” and “Engineering Targeted Returns and Risks”— all of which can be found on the Bridgewater website. Bridgewater describes the theory in their white paper “The All Weather Story”:

“All Weather grew out of Bridgewater’s effort to make sense of the world, to hold the portfolio today that will do reasonably well 20 years from now even if no one can predict what form of growth and inflation will prevail. When investing over the long run, all you can have confidence in is that (1) holding assets should provide a return above cash, and (2) asset volatility will be largely driven by how economic conditions unfold relative to current expectations (as well as how these expectations change). That’s it. Anything else (asset class returns, correlations, or even precise volatilities) is an attempt to predict the future. In essence, All Weather can be sketched out on a napkin. It is as simple as holding four different portfolios each with the same risk, each of which does well in a particular environment: when (1) inflation rises, (2) inflation falls, (3) growth rises, and (4) growth falls relative to expectations.”

@Cartsen thank you for that note.

If anyone is interested here is a backtest of the All Weather Portfolio from 2007 up to Friday. The ETFs used to replicate this started in 2007, perhaps other ETFs could be used to get a longer backtest.

Clone Algorithm
48
Loading...
Total Returns
--
Alpha
--
Beta
--
Sharpe
--
Sortino
--
Max Drawdown
--
Benchmark Returns
--
Volatility
--
Returns 1 Month 3 Month 6 Month 12 Month
Alpha 1 Month 3 Month 6 Month 12 Month
Beta 1 Month 3 Month 6 Month 12 Month
Sharpe 1 Month 3 Month 6 Month 12 Month
Sortino 1 Month 3 Month 6 Month 12 Month
Volatility 1 Month 3 Month 6 Month 12 Month
Max Drawdown 1 Month 3 Month 6 Month 12 Month
"""
The Ray Dalio All Weather Portfolio is exposed for 30% on the Stock Market and for 15% on Commodities, and 40% bonds.  

http://www.lazyportfolioetf.com/allocation/ray-dalio-all-weather/

"""
import quantopian.algorithm as algo
from quantopian.pipeline import Pipeline
from quantopian.pipeline.data.builtin import USEquityPricing
from quantopian.pipeline.filters import QTradableStocksUS
import quantopian.optimize as opt  


def initialize(context):
    """Called once at the start of the algorithm.
    ticker, start date, description
    VTI,  6/14/2002, US large cap
    TLT, 7/29/2002, 20 year treasury
    IEI, 1/10/2007, 3-7 yr treasury
    GLD, 11/17/2004, Gold
    GSG, 6/20/2006, Commodity diversified
    """
    
    context.w = {symbol('VTI'): 0.30, 
                symbol('TLT'): 0.40, # 
                symbol('IEI'): 0.15,  # 
                symbol('GLD'): 0.075,  # Gold
                symbol('GSG'): 0.075,# 
                }
    
    context.init = False  
    
    # Rebalance every day, 1 hour after market open.
    algo.schedule_function(
        rebalance,
        algo.date_rules.month_start(),
        algo.time_rules.market_open(hours=1),
    )

    # Record tracking variables at the end of each day.
    algo.schedule_function(
        record_vars,
        algo.date_rules.every_day(),
        algo.time_rules.market_close(),
    )

def rebalance(context, data):
    print(data.current_dt)
    # only trade Jan
    if data.current_dt.month != 1 and context.init: 
        return
    context.init = True

    target_weights = opt.TargetWeights(context.w) 

    # Execute the order_optimal_portfolio method with above objective and any constraint  
    constraints = []
    constraints.append(opt.MaxGrossExposure(1.0))
    order_optimal_portfolio(  
        objective = target_weights,  
        constraints = constraints
        ) 


def record_vars(context, data):
    """
    Plot variables at the end of each day.
    """
    pass
There was a runtime error.

@Peter

I just took a look, they believe it's the following
18% US Large Cap, 3% US Small CAP, 6% Foreign development , 3% Foreign development, 15% 10Y Bonds, 40% 30Y Bonds, 8% Commodities, 8% Gold

They calculated shape around 0.5 and returns between 5% and 9%, depending which period.

@peter
just to know, what was the Sharpe, CAGR max DD(until Jan 2020) from your model for leverage 1 ? and what would be the DD now?

Here is a quick comparison of the All Weather Portfolio vs. SPY.

Edited to update formatting of the results table.

Loading notebook preview...

Associated slides from the presentation.