I've spent the last week or so developing a custom optimizer to use instead of the default brute force one. Here's some feedback. I'd imagine enhancing this area is pretty low on the priority list so this is mostly FYI.
1. Most importantly, thanks for providing a great architecture that makes it possible to extend NT like this. I am continually blown away at how I can implement almost any idea I come up with after a little digging.
2. I get the impression the NT framework is doing a calculation to figure out the total number of iterations expected based on the min, max, and increment values, and using these to update the elapsed/remaining times. It would be nice if a custom optimizer could override this so that the times displayed would be accurate. For the time being I am just outputting the accurate timing info to the output window.
3. After you call RunIteration() from your optimizer, the Strategy.Performance collection is empty. I would expect this to contain the performance information from the run which just completed so I can rank the results and decide which ones to propagate. I worked around this for the time being by accessing a static member in my SQN optimizer type.
4. Related to #3, if you create a custom optimizer type, the value that you return, as far as I can tell, does not get stored in the data model anywhere, just in the results viewable by NT. It would be nice if that were stored as Strategy.Performance.AllTrades.TradesPerformance.P erformanceValue or something similar to avoid having to redo the calculation.
5. It would be very nice to be able to specify properties on the optimizer itself and have those settable in the UI. For example, once I select my optimizer I would be able to specify population size and max generations. I've worked around this for the time being by hijacking a couple of parameters from the strategy itself.
6. The optimizer and optimizer type classes should have a Print method. For the time being, I just call Strategy.Print.

Comment