Overall, RightEdge is pretty flexible and extensible if you have the programming skills to do so. So it should be able to do most or all of what you're looking for.
OK, here we go!
UC1 - RightEdge doesn't have built-in support for multiple systems. So you will just have one system from RightEdge's point of view. But you have full control over the logic of that system, so underneath it you can be running all your "instances". The
Multiple Systems sample shows how you can do this. It runs all of its systems on the same frequency. There is also a
Multiple Frequency sample which shows how to run the same logic at different frequencies, so you would probably want to combine techniques from the two.
Q0 - Since RightEdge doesn't have a concept of multiple systems it doesn't have a UI for this. You could create a system parameter to enable or disable each instance and then you would be able to control this in the system properties. Or you could put all your code in a shared library which was referenced by a bunch of RightEdge systems which only contained code to delegate to the shared library and to control which instance was enabled. That way you could have different RightEdge projects for each individual instance for backtesting purposes. You could also pop up a dialog in the system's startup or use the /CustomStringForSystem command line parameter to control which systems are enabled.
Q1 - You will need to keep track of which position corresponds to each instance, but you won't have to trip over yourselves to do it. The Multiple Systems sample shows how to do this. RightEdge can track multiple positions open at the same time for one symbol, and each position has its own profit target and stop loss. So you just need to track which instance each position belongs to.
Q2 - From RightEdge's point of view there's just a single system so I think it's very unlikely that you would run into these kind of performance problems when running with just a single symbol.
Q3 - RightEdge can save the live tick data it recieves. But if you miss any tick data (because RightEdge isn't started, or crashes, or you have network issues, etc), it doesn't have a way to fill in what you missed. So probably you want to save the live tick data you get (either via RightEdge or separately), and have the ability to fill in any data you miss from the datafeed. If the datafeed does keep bid/ask quotes, then it might be simpler to just do a regular batch download.
Q4 - The binary data store is so simple that it will probably always be faster than SQL Server. But I think the SQL Server plugin should probably be more than fast enough for your needs, and it is more flexible. It used to have some performance issues with large datasets where an index wasn't being used correctly, but that
should now be fixed. You can always try both and compare. :-)
Q5 - No, there's nothing built in to manage spreads for multiple symbols. You could put your spread execution in the broker plugin, and then in the system you would be able to treat each spread as a separate symbol. To the system this would look like the broker offered the spread symbols you wanted, and the broker plugin would translate the spread orders into separate orders for its components.
You could also put your spread execution in your trading system. In that case you would probably create your own object model for the trading code to use instead of RightEdge's Position and Order APIs.
Q6 - There are some places in the RightEdge code where we implicitly assumed that negative or zero prices were not valid. You can check the "Ignore Bar Data Errors" option for a symbol to allow RightEdge to accept zero or negative prices. However, there may be other places in RightEdge where we implicitly assumed that negative or zero prices were not valid. One that I'm aware of is that you can't set a trailing stop price less than or equal to zero. So unfortunately I think you'll have to try it and see what issues you run into. If you do find any, please let us know and we may be able to fix them.
Q7 - Yes, I think you should be able to do that. There's a
symbol ranking sample which shows how to do something similar, although much simpler.
Thanks,
Daniel