Mark,
Like you I believe Dynamical allocation works.
I have played with AI for adaptive allocation. Using simple regressions and boosting. Also recurrent neural networks. Let me just start out by saying recurrent neural-nets were a bust. Did not work for me (yet).
So let me get back to regressions and keeping it simple. A regression is machine learning tool by any definition.
One thing I learned with regressions is that volatility (standard deviation) is INVERSELY CORRELATED with future returns. Strongly so. At least with the periods and ETFs I looked at.
So I am still using Portfolio Visualizer but this information about volatility offers some explanation—beyond MPT–as to why dynamic allocation can work.
Minimum variance works, in part I think, because it does not buy the high-flying ETFs that are about to mean-revert. The same for risk parity. Risk parity buys fewer of the more volatile stocks.
I have had mixed results with the tangency portfolios and I think this algorithm will select more volatile stocks. Stocks that have been volatile to the upside with good returns but are poised to mean-revert.
This is in a addition to any reduction in volatility-drag that minimum variance gives.
Honestly, I think you are already using a simple machine learning tool that is working—by any definition of machine learning. Occam’s razor. Keep it simple. I firmly believe that you probably do not need to change a thing to keep an optimal—or near optimal—solution. The information about the inverse correlation of volatility and returns is just one pice of data as to why what you do works.
So to be complete on this, some may not want to call what you already do machine learning. They might say that manual optimization is not machine learning. That you need to use gradient descent to officially make it machine learning. I say fine. Let’s not call it machine learning. I think I will call it Mark’s really cool money-making algorithm instead. And it works because it follows the immutable central tenant of machine learning: use Occam’s razor.
For fun, I think I will keep looking for slightly more complex solutions (but not too complex). For those who use python here is the code for the minimum variance portfolio to start with. THIS CAN BE ADAPTED TO INCLUDE YOUR PREDICTED RETURNS IN A TANGENCY PORTFOLIO:
pip install PyPortfolioOpt
import pandas as pd
df.columns=[‘XLE’,‘XLU’,‘XLK’,‘XLB’,‘XLP’]
from pypfopt.expected_returns import mean_historical_return
from pypfopt.risk_models import CovarianceShrinkage
mu = mean_historical_return(df)
S = CovarianceShrinkage(df).ledoit_wolf()
from pypfopt.efficient_frontier import EfficientFrontier
ef = EfficientFrontier(mu, S)
weights = ef.min_volatility()
ef.portfolio_performance(verbose=True)
Best,
Jim