avatarMario Rodriguez

Summary

The article discusses the profitability of the Lazy Portfolio investment strategy, providing a Python backtesting simulation of a simple Lazy Portfolio consisting of a domestic index fund, an international index fund, and a bond market index fund, with a 34%-33%-33% allocation respectively.

Abstract

The "Lazy Portfolio" is presented as a straightforward investment strategy that emphasizes simplicity and minimal effort for long-term investors who prefer a hands-off approach. By investing in a few low-cost index funds or ETFs, investors can achieve diversification across various market segments, which helps reduce overall risk. The article highlights the key advantages of this strategy, such as simplicity, low costs, and passive investment, which allows investors to retain more of their investment returns and potentially achieve better long-term performance. The Python backtesting simulation demonstrates the strategy's historical performance over the last decade, showing the evolution of the funds' values and the strategy's returns compared to a single domestic index fund. The article concludes with a reflection on the trade-offs between higher performance and greater downturns, inviting readers to consider their risk tolerance and investment goals.

Opinions

  • The author suggests that the Lazy Portfolio may not be suitable for every investor, recommending that individuals consider their financial goals, risk tolerance, and time horizon before adopting this approach.
  • Consultation with a financial advisor is encouraged to tailor the investment strategy to individual needs and circumstances.
  • The author implies that the Lazy Portfolio's diversified nature can lead to smaller downturns compared to more aggressive investment strategies focused solely on domestic stock markets.
  • The article conveys that while the Lazy Portfolio may not outperform high-return funds like VTSAX, its balanced approach can be advantageous for risk-averse investors.
  • The Python simulation code provided in the article is presented as a tool that can be adapted to evaluate any portfolio by adjusting the assets and their respective weights for rebalancing.

Lazy Portfolio, Is It Profitable?

Python backtesting of the Lazy Portfolio

Photo by Adrian Swancar on Unsplash

It’s important to note that a investment strategy may not be suitable for every investor. Individuals should consider their financial goals, risk tolerance, and time horizon before implementing any investment approach. Consulting with a financial advisor can help tailor the strategy to individual needs and circumstances.

Lazy Portfolio

The Lazy Portfolio is an investment strategy that emphasizes simplicity and minimal effort. It is designed for long-term investors who prefer a hands-off approach to managing their portfolios. If you don’t want to be constantly monitoring your portfolio, this is your strategy.

The strategy’s core principle is to create a diversified portfolio with a few low-cost index funds or exchange-traded funds (ETFs) and maintain a consistent allocation over time. The goal of the Lazy Portfolio is to achieve market returns with minimal time and effort spent on active management.

For instance, a common Lazy Portfolio might include a domestic stock market fund, a bond fund, and an international stock market fund. The specific allocation to each asset class may vary depending on the investor’s risk tolerance and financial goals.

One of the key advantages of the Lazy Portfolio is its simplicity. By investing in a handful of index funds, investors can achieve instant diversification across thousands of securities. This diversification helps to reduce the overall risk of the portfolio and provides exposure to various market segments.

Another advantage is the low cost associated with the Lazy Portfolio. Index funds and ETFs are known for their low expense ratios compared to actively managed funds. By minimizing expenses, more of the investment returns can be retained by the investor, potentially leading to higher long-term performance.

Furthermore, the Lazy Portfolio promotes a passive investment approach, which means there is no need for frequent buying or selling of securities. Instead, the investor periodically rebalances the portfolio to maintain the desired asset allocation. Rebalancing involves adjusting the portfolio back to its original target allocation, which ensures that gains are taken from outperforming assets and reinvested in underperforming assets. This process helps to maintain the desired risk level and avoids letting any single asset class dominate the portfolio’s performance.

However, it’s important to note that the Lazy Portfolio may not be suitable for everyone. Investors with specific goals or unique circumstances may require a more customized approach. Additionally, market conditions and individual preferences can vary, so it’s crucial to assess one’s risk tolerance and consult with a financial advisor when considering any investment strategy.

Python simulation

Backtesting of this strategy may be done in Python. In this case, we will backtest one of the most simple Lazy Portfolio, which consist of:

  • A domestic index fund. In this case, we will focus on the US zone, so this fund may be used for this (Vanguard Total Stock Market Index Fund (VTSAX))
  • An international index fund, as this Vanguard Total International Stock Index Fund Admiral Shares (VTIAX).
  • A Bonda Market intex. The Vanguard Total Bond Market Index Fund (VBTLX) will be taken into account for this part.

The portfolio allocation is 34% for VTSAX, 33% for VTIAS and 33% for VBTLX.

To get historical data for these three funds, we can use the yfinance library to obtain the value of the assets. This code get data for the last 10 years and plot the evolution of the three funds.

import yfinance as yf
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# Gather data for DOMESTIC, bonds, INTERNATIONAL and cash
period = "10y"
DOMESTIC = yf.Ticker("VTSAX").history(period=period)
DOMESTIC = DOMESTIC.drop(columns=['Dividends', 'Stock Splits'])
plt.plot(DOMESTIC['Close']/DOMESTIC['Close'][0])

BONDS = yf.Ticker("VBTLX").history(period=period)
BONDS = BONDS.drop(columns=['Dividends', 'Stock Splits'])
plt.plot(BONDS['Close']/BONDS['Close'][0])

INTERNATIONAL = yf.Ticker("VTIAX").history(period=period)
INTERNATIONAL = INTERNATIONAL.drop(columns=['Dividends', 'Stock Splits'])
plt.plot(INTERNATIONAL['Close']/INTERNATIONAL['Close'][0])

The following figure shows the evolution of the funds for the last ten years. Values have been normalized to the initial value in order to compare all the funds in the same graph:

Python simulations may be used to evaluate the return on investment for this strategy. The following code set the allocation of each asset and every day compute the weight of the assets. Balancing is carried out at the beginning of the year, to establish assets allocation to the portfolio goal. Finally, returns are computed and storage for analysis purposes.

DOMESTIC_weigth = np.array([0.34])
INTERNATIONAL_weigth = np.array([0.33])
BONDS_weigth = np.array([0.33])

result = np.array([1])
DOMESTIC_shares = np.array(result*DOMESTIC_weigth[0]/DOMESTIC['Close'][0])
INTERNATIONAL_shares = np.array(result*INTERNATIONAL_weigth[0]/INTERNATIONAL['Close'][0])
BONDS_shares = np.array(result*BONDS_weigth[0]/BONDS['Close'][0])

for i in range(1,len(BONDS['Close'])):
    # Daily results computation
    result = np.append(result, DOMESTIC_shares[i-1]*DOMESTIC['Close'][i] +
                       INTERNATIONAL_shares[i-1]*INTERNATIONAL['Close'][i] +
                       BONDS_shares[i-1]*BONDS['Close'][i])
    
    # Daily weitgh computation
    DOMESTIC_weigth = np.append(DOMESTIC_weigth, DOMESTIC_shares[i-1]*DOMESTIC['Close'][i]/result[i])
    INTERNATIONAL_weigth = np.append(INTERNATIONAL_weigth, INTERNATIONAL_shares[i-1]*INTERNATIONAL['Close'][i]/result[i])
    BONDS_weigth = np.append(BONDS_weigth, BONDS_shares[i-1]*BONDS['Close'][i]/result[i])
    
    # Check if we need to rebalance the assets
    if BONDS.index[i].year > BONDS.index[i-1].year:                
        # Rebalancing
        DOMESTIC_shares = np.append(DOMESTIC_shares, DOMESTIC_shares[i-1]-(DOMESTIC_weigth[i]-DOMESTIC_weigth[0])*result[i]/DOMESTIC['Close'][i])
        INTERNATIONAL_shares = np.append(INTERNATIONAL_shares, INTERNATIONAL_shares[i-1]-(INTERNATIONAL_weigth[i]-INTERNATIONAL_weigth[0])*result[i]/INTERNATIONAL['Close'][i])
        BONDS_shares = np.append(BONDS_shares, BONDS_shares[i-1]-(BONDS_weigth[i]-BONDS_weigth[0])*result[i]/BONDS['Close'][i])
    else:
        # No rebalancing
        DOMESTIC_shares = np.append(DOMESTIC_shares, DOMESTIC_shares[i-1])
        INTERNATIONAL_shares = np.append(INTERNATIONAL_shares, INTERNATIONAL_shares[i-1])
        BONDS_shares = np.append(BONDS_shares, BONDS_shares[i-1])

The result for the lazy portfolio for the last 10 years is:

Conclusions

This article presented a Python code to backtest the lazy portfolio. Returns for this strategy are lower than the obtained by the VTSAX fund. However, the Lazy Portfolio has experienced smaller downturns over the past 10 years due to its diversified nature. What do you think? Would you stand deeper downturns to get a higher performance? Leave a comment with your opinion!

Furthermore, the Python code may be used to evaluate any kind of portfolio, you just have to change the assets you are interested in and adjust the weight for rebalancing.

Do you want to learn Python:

Have you spent your learning budget for this month, you can join Medium here:

Python
Python Programming
Investment
Backtesting
Coding
Recommended from ReadMedium