Back to Community
How to Build a Portfolio Like a Billionaire

All-Weather Portfolio (Dalio)

The thought process behind the all-weather portfolio is to create an asset allocation that can perform well in all economic conditions. Ray's desire was to "Put together a family trust and create an asset allocation that he would prove reliable long after he was gone." Ray broke down the portfolio to establish an allocation that would balance the economic conditions of inflation and growth. As well as making sure that the mix would do well in different conditions, they also would balance each other out in terms of risk. This is known as the risk parity approach. Risk parity attempts to diversify a portfolio across different assets that all carry different risks, and find an optimal risk level for the portfolio as a whole. This balance ensures that when one asset class is underperforming it will automatically be offset by the outperformance of another asset in the portfolio. This allows for more stable returns over time and less volatility given that assets will have an inverse correlation to each other and be able to withstand sudden shocks to the economy.

Clone Algorithm
Total Returns
Max Drawdown
Benchmark Returns
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
def initialize(context):
    context.spy = sid(8554)
    context.tlt = sid(23921)
    context.shy = sid(23911)
    context.gld = sid(26807)
    context.dbc = sid(28054)
    schedule_function(rebalance, date_rules.month_start(), time_rules.market_open())
    schedule_function(record_vars, date_rules.month_end(), time_rules.market_close())
def rebalance(context, data):
    order_target_percent(context.spy, .3)
    order_target_percent(context.tlt, .4)
    order_target_percent(context.shy, .15)
    order_target_percent(context.gld, .075)
    order_target_percent(context.dbc, .075)
def record_vars(context, data):
    record(SPY = data.current(context.spy, 'close'))
    record(TLT = data.current(context.tlt, 'close'))
    record(SHY = data.current(context.shy, 'close'))
    record(GLD = data.current(context.gld, 'close'))
    record(DBC = data.current(context.dbc, 'close'))
There was a runtime error.