En esta nueva entrega, vamos a crear estrategia de Ray Dalio (Bridgewater Associates), All Weather en Python. La primera entrega de portfolios en el blog fue la entrega de Portfolios de Darwinex en Python. La estrategia de Ray Dalio, All-Weather (tambien conocida como All-Seasons) es una estrategia de portfolios “casi” permanentes, y esta diseñada para todo tipo de escenarios económicos, tales como, crecimiento, inflación, recesión y deflación. La única diferencia mas notable con una cartera permanente, es que pondera los activos por una aproximación a “Risky Parity”.
Ciertos activos, tienden a minimizar la volatilidad frente a otros. Un claro ejemplo serian los bonos del tesoro americano, que suelen ser menos volátiles que la renta variable americana. Lo cual, si en un portfolio, ponderamos por igual todos los activos, los activos mas volátiles, tendrían una impacto mayor en la cartera, exagerando los retornos.
Una cartera “Risk Parity” intenta igualar el riesgo, ponderando mas los activos menos volátiles, y ponderando menos los mas volátiles.



La estrategia fue publicada por primera vez en el libro de Tony Robbins” Money, mastering the game”, con las siguientes allocations:
- 30% US Equities
- 15% Intermediate-term Treasuries
- 40% Long Term Treasuries
- 7.5% Commodities
- 7.5% Gold



Para este estudio, utilizaremos ETFs. Si no tienes muy claro, que es un ETF, sus ventajas y riesgos, te recomiendo que pases por los siguientes artículos de Enric Jaimez (UnEspeculador.com): link1 link2 link3
- US Equities (SPY)
- Long Term Treasuries (TLT)
- Intermediate-term Treasuries (IEF)
- Commodities (DBC)
- Gold (GLD)
Nota1: El backtest esta claramente sesgado, por el un ciclo alcista. En una estrategia de estas características, necesitaríamos un histórico desde 1960 hasta el día de hoy, para poder verificar la validez de la misma, yo lo he hecho, con datos propietarios, y la realidad es que, quedan mas o menos even contra un benchmark 40% renta fija, 60% renta variable, y minimiza algo la volatilidad anualizada. Pero a corto plazo, los resultados son los que son, y no se puede negar. ¿Es una mala estrategia? Yo no la usaría, pero últimamente he visto demasiada gente hablando de ella, y me ha parecido lo suficientemente curioso como para escribir estas lineas.¡
All Weather de Ray Dalio en Python
Para empezar, cargamos las librerias necesarias para poder backtestear la estrategia
import pandas as pd
import numpy as np
import yfinance as yf
import matplotlib.pyplot as plt
import quantstats as qt
%matplotlib inline
Descargamos las timeseries de las cotizaciones historicas de los activos, de una fuente gratuita como puede ser Yahoo
spy = yf.download('SPY')
tlt = yf.download('TLT')
ief = yf.download('IEF')
dbc = yf.download('DBC')
gld = yf.download('GLD')
splv = yf.download('SPLV')
Asignamos los pesos a cada uno de los activos, segun el asset allocation que dio Ray Dalio en el libro "Money, Mastering The Game" de Tony Robbins.
peso_spy = 0.3
peso_tlt = 0.4
peso_ief = 0.15
peso_dbc = 0.075
peso_gld = 0.075
Creamos un dataframe, con los que nos interesa, en este caso, el porcentaje de cambio de los cierres ajustados para cada activo.
assets = pd.DataFrame()
assets['gld'] = gld['Adj Close'].pct_change()
assets['dbc'] = tlt['Adj Close'].pct_change()
assets['ief'] = ief['Adj Close'].pct_change()
assets['tlt'] = dbc['Adj Close'].pct_change()
assets['spy'] = spy['Adj Close'].pct_change()
assets['splv'] = splv['Adj Close'].pct_change()
assets = assets.dropna()
Y creamos los retornos de dicha composicion de cartera, multiplicando la ponderacion por el retorno y sumandolo a el resto de ponderaciones.
all_weather = peso_spy * assets['spy'] + \
peso_tlt * assets['tlt'] + \
peso_ief * assets['ief'] + \
peso_dbc * assets['dbc'] + \
peso_gld * assets['gld']



Es una estrategia ganadora, con muchísimo drawdown. Ahora vamos a analizar sus ratios en profundidad.
qt.reports.full(all_weather,"SPY")
Mientras que la estrategia ha ganado un 80% aproximadamente, el mercado ha hecho un 237%. Vemos un coste de oportunidad inasumible para cualquier inversor. La realidad es que a minimizado el drawdown, mientras el mercado ha tenido un drawdown máximo de 55%, la estrategia de Dalio tan solo un 38%, y también ha reducido la volatilidad analizada, mientras que el mercado ha tenido una volatilidad de un 19%, la estrategia de Dalio un 11%. Con una beta de 0.43.
Por consecuencia, tiene un alto coste de oportunidad esta estrategia en periodos alcistas, quizá sea mucho mas optimas en cualquier otra circunstancia de mercado, que no sea el ciclo alcista mas largo de toda la historia.
Agradecimientos a Ran Aroussi por sus fantásticas herramientas yfinance (descarga de dataframes con series de temporales de cotizaciones con fuente en Yahoo) y quantstats,donde hemos creado todas estas preciosas estadísticas!