Adaptive Asset Allocation: update to reflect investor data constraints

I realized that the portfolios presented so far would be pretty difficult for the individual retail investor to implement due to data constraints.

The problem

Say today is January 31, and the market has just closed. The adaptive asset allocation portfolios I constructed assume that the investor exists at the close of the last day of the month. Which is definitely reasonable assuming a brokerage account at a place like Interactive Brokers with market on close orders. However, the algorithms also assumed that we would enter the new positions on January 31. This could be possible if live streaming quotes were used, and the weights were calculated seconds before actual close and the positions entered right before close, but it’s definitely not possible for a normal retail investor to do.

The solution

So I decided to test the effect on returns of delaying the entry by one day; specifically, entering the new positions on the close of February 1 in the example above (and still exiting the positions on January 31). Again, this is a reasonable simulation for what a retail investor would actually do: he would exit his old positions on January 31, calculate new portfolio weights on February 1, and enter the new positions on the market close of February 1.


Sharpe Ratio drops from around 0.8 to 0.62. CAGR is only 7.6%. It’s interesting that performance deteriorates so much from delaying entry by just one day. Perhaps the performance decrease represents the costs of (unrealistically) both entering and exiting positions on the same day.

An interesting caveat

I wanted to test the next logical variation: what if we, instead of entering the new positions one day later, exited the old positions one day earlier? Using our example, the investor would exit his positions on January 30, calculate the new portfolio weights on January 31 (using data looking back from January 30, not 31), and then enter the new positions on February 1. Below are the results.



Both CAGR and Sharpe Ratio are higher than if we entered new positions one day late: CAGR is 2% higher, Sharpe Ratio is also 0.77 compared to 0.62. It seems we’re missing out on a lot more of the returns if we skip the first day of each month instead of the last day of each month. Is this evidence of the end of month/first of month effect (basically that the returns on the first day of a month are significantly higher than average)? Maybe, but for now, I need to move forward with my project. Creating the adaptive asset allocation algorithms is only the first part… more to come.

5 thoughts on “Adaptive Asset Allocation: update to reflect investor data constraints”

    1. That’s another possibility. I assume you mean buying and selling simultaneously, e.g. all at once on the close, correct me if I’m wrong. It could get a little tricky in actual implementation because you when submit the buy orders you don’t know a priori how many shares of each ETF to buy (since you don’t know what your buying power will be once the old positions are exited). I’m thinking in terms of a “set it and forget it” strategy, you could solve the issue I talk about above by making the trades yourself live instead of setting buy/sell at market or buy/sell at market close orders beforehand.

      If you mean exiting the positions on the morning of Feb 1st and entering the new position son the close of Feb 1st, that could work. To simply things in my analyses though, I only used close-to-close returns instead of actual prices. I guess you could think of the one day delay of exiting on market close Jan 30th and entering on market close Feb 1st as a conservative individual investor implementation.

  1. I intend to try to replicate this system, I am interested to see how a varying holding period (not just one month on the month) changes the results, as well as possibly varying tax regimes with holding periods > 1yr vs short term holdings. Thanks for the blog!

  2. how about let user decide which date to exit ? not just end of the month. for example, exit/enter at the second Monday of every month.

Leave a Reply

Your email address will not be published. Required fields are marked *