After investigating a number of alternatives (one, two, three) to NinjaTrader, I ended up implementing my strategy as a COM plug-in to DTLink’s Personal Stock Screener, and found that I can run through the equivalent strategy optimization, as in NinjaTrader, 255 times faster. A significant part of the speed improvement likely comes from three orders of magnitude less memory usage during the optimization process (comparing each process’s increase in memory during optimization, not total process memory usage).
TA-Lib proved quite useful for technical analysis functions and apparently Personal Stock Screener uses TA-Lib as well.
Anatoly Ivasyuk, at DTLink, was very responsive to the few questions I had, as well as quickly turning around the fix for a bug I ran into.