Another feature that might be worth implementing, is adding yet another term to the equation that decides when to roll. In addition to (a) Volume, (b) Open Interest, (c) #days till expiry, why not consider adding (d) smoothness and/or steepness of price movement?
If some particular contract normally rolls many days before expiration, why not treat that period of time as a gift, a free pass, to fool around and try unusual stunts?
All other things being equal, perhaps you'd rather be in the contract with the smoother price movement (measured by Kaufman's Efficiency Index aka fractal efficiency). Or perhaps you'd rather be in the contract with the steepest price move (measured by linear regression slope). Or perhaps the contract with the greatest ADX. Or the one whose RSI is most extreme.
Maybe by rolling a few days earlier than normal (or a few days later), you can get into the preferable contract for a longer time. Maybe this boosts profitability.
Hey it's just a small matter of software. Why not code it up, try it out, and see whether it adds value? If so, boom shakka lakka lakka boom! You've improved your edge in a way that few others can. Because it involves writing software, a scary monster that terrifies most people. They won't write code and won't hire someone to do it for them, either.