James Bachini

How Often Should I Rebalance My Portfolio

Portfolio Rebalancing

In this tutorial I modelled the optimal rebalancing frequency for a digital asset portfolio holding:

  • 40% USDC
  • 40% ETH
  • 20% BTC

This is a 60/40 crypto portfolio which I’ve discussed before. You can run the code with different assets (anything with a historical price feed).

Starting with a $10,000 initial investment, the code allocates the funds accordingly and tracks performance over time.

tl;dr – You should be rebalancing every 180-365 days i.e. once or twice a year


Building The Model

The model draws on eight years of historical daily price data for BTC and ETH.

The code for scraping this is available at: https://github.com/jamesbachini/Rebalancing-Crypto-Portfolio-Model/blob/main/fetch.js

This creates a crypto_prices.json data set which we will be using.

You can add additional assets for anything that trades on Binance.

The main script for the model is in https://github.com/jamesbachini/Rebalancing-Crypto-Portfolio-Model/blob/main/model.js

Note that this isn’t using any machine learning or anything particularly sophisticated, I am just crunching the numbers.

I apply a 50% volatility reduction which is optional and can be commented out on line 131. This step is designed to create a forecasted future environment with diminishing volatility for crypto assets compared to the previous 8 years.

I calculate daily yield on USDC and ETH:
The simulation includes yield assumptions:

  • USDC: 10% APR (There are plenty of places to get 20%+ fairly safely currently but when the basis trade disappears in a bear market it is much harder to earn stablecoin yield so this is somewhat conservative based on an expected multi-year average)
  • ETH: 3% APR Staking rewards, stETH, rETH etc.
  • BTC: 0% APR 🙁

These yields accrue daily. Thus, even when the portfolio isn’t being rebalanced, the portion in USDC and ETH grows slowly each day.

Every rebalance incurs a 0.1% trading fee on the total amount of value traded. This simulates the real-world cost of gas fees and exchange fees and ensures that frequent rebalancing doesn’t unrealistically ignore the toll of transactional costs.

Instead of using a single static timeframe, the model picks random four year windows from the historical data to simulate. Running 10,000 of such trials to give a robust statistical picture of how different rebalancing frequencies would perform over as many possible market conditions.


The code tests a range of intervals, it measures the average final portfolio value after these simulated four year periods for each interval.

Intervals tested include:

  • Every 1 day
  • Every 7 days (weekly)
  • Every 14 days (bi-weekly)
  • Every 30 days (monthly)
  • Every 60 days (bi-monthly)
  • Every 90 days (quarterly)
  • Every 180 days (semi-annually)
  • Every 270 days
  • Every 365 days (annually)
  • Every 548 days
  • Every 730 days (every two years)

More can be added quite simply at line 143 in the code.

Here are the full results.


Rebalancing Model Results

Rebalancing Model

The results show the average final portfolio value starting from $10,000 and under the given conditions, here’s how the portfolio performed:

  • — 10000 random 4-year periods at interval=1 days —
    Average final portfolio value: $85712.05
  • — 10000 random 4-year periods at interval=7 days —
    Average final portfolio value: $105592.87
  • — 10000 random 4-year periods at interval=14 days —
    Average final portfolio value: $111880.15
  • — 10000 random 4-year periods at interval=30 days —
    Average final portfolio value: $116987.56
  • — 10000 random 4-year periods at interval=60 days —
    Average final portfolio value: $118906.82
  • — 10000 random 4-year periods at interval=90 days —
    Average final portfolio value: $117130.26
  • — 10000 random 4-year periods at interval=180 days —
    Average final portfolio value: $124153.33
  • — 10000 random 4-year periods at interval=270 days —
    Average final portfolio value: $125914.05
  • — 10000 random 4-year periods at interval=365 days —
    Average final portfolio value: $123273.54
  • — 10000 random 4-year periods at interval=548 days —
    Average final portfolio value: $118626.35
  • — 10000 random 4-year periods at interval=730 days —
    Average final portfolio value: $110165.96

What Does This Mean For Investors?

The data suggests that you should be rebalancing between once and twice per year.

Under the given assumptions of trading fees, yields, and reduced volatility, rebalancing too frequently can reduce returns over the long run due to trading costs and even without costs it wasn’t optimal.

In contrast, very infrequent rebalancing might allow the portfolio’s composition to drift too far from the target allocation, potentially increasing risk or missing opportunities to lock in gains.

In this specific model, the “sweet spot” landed around the 270 day mark yielding the highest average final value. These insights might guide portfolio management strategies, helping long-term investors find a balanced rebalancing schedule that maximizes returns after accounting for fees and market movements.

Note. Past performance is not indicative of future results. The historical data and volatility assumptions are particular to a given period and may not reflect future market conditions. Optimal rebalance frequency depends on your personal objectives and risk tolerance. Some investors may prefer more frequent interventions to control risk, even if it means slightly lower returns.


Get The Blockchain Sector Newsletter, binge the YouTube channel and connect with me on Twitter

The Blockchain Sector newsletter goes out a few times a month when there is breaking news or interesting developments to discuss. All the content I produce is free, if you’d like to help please share this content on social media.

Thank you.

James Bachini

Disclaimer: Not a financial advisor, not financial advice. The content I create is to document my journey and for educational and entertainment purposes only. It is not under any circumstances investment advice. I am not an investment or trading professional and am learning myself while still making plenty of mistakes along the way. Any code published is experimental and not production ready to be used for financial transactions. Do your own research and do not play with funds you do not want to lose.