I would be interested in learning what methods others are using to re-optimize multi-node ranking systems. By “multi-node ranking system,” I mean systems like the Small & Micro Cap Focus ranking system, as one example.
In the interest of both giving and taking, I’ll share my current process. I would be interested in hearing what others are doing, as well as any suggested improvements to the method below.
At a high level, I use a stepped, node-by-node optimization process. It is essentially a practical coordinate-search method rather than a full global optimization.
The total weights in my ranking system add up to 60, recognizing Portfolio123’s standard note that weights are automatically normalized to 100%. Because of that normalization, I am focused on the relative weights between nodes rather than the absolute total.
For each candidate weighting, I run both longer-term and shorter-term simulations/backtests, generally using both 20-year and 8-year periods. I then average the results of those runs as my baseline comparison. The intent is to give some additional weight to newer data without completely ignoring older data.
I also run the backtests using a rolling 4-week frequency. I use the rolling tests to reduce starting-month bias, so the results are not overly dependent on one arbitrary rebalance start date.
The optimization itself is performed in batches. For example, if the ranking system has 20 nodes, each initially assigned a weight of 3, the total system weight is 60. I then add +1 to the first node, increasing the total system weight to 61, run the backtests, and save the results. I then reset that node and add +1 to the second node, again producing a candidate system with a total weight of 61. I repeat this for each node, producing 20 separate runs, each with a total weight of 61.
I then compare those 20 candidate systems against the baseline. If one or more candidates improve on the baseline, I select the highest-performing candidate and make that the new baseline weighting. I then repeat the process by adding +1 to each node from the new baseline, producing candidate systems with a total weight of 62. If one or more of those candidates improve the result, I again select the highest-performing candidate as the new baseline, and continue the process from there.
I use the same general process in reverse by subtracting weight from individual nodes. For example, from a baseline with a total weight of 60, I can run 20 separate -1 tests, each with a total weight of 59. This helps identify nodes that may be over-weighted rather than under-weighted.
I typically continue the process until I no longer see improvement for several consecutive iterations. Improvement is not always linear. For example, there may be no improvement at total weights of 75–77, but an improvement may appear at 78, so I generally keep going until I have multiple no-improvement passes.
Finally, I usually run the process from more than one starting point. I will start from equal node weights, but I will also start from the last optimized weighting. The process can be path dependent, so using multiple starting points gives me more confidence that I am not simply accepting the first local improvement path.
It is a long and tedious process, but I have had good results with it. It also gives me more confidence that the ranking system is adapting to changing market conditions rather than remaining frozen around stale factor weights.
I would be interested in hearing whether others are using similar re-optimization methods, whether there are better objective functions to use, or whether there are more efficient ways to approach this in Portfolio123.