I am curious to get input on execution system OOD patterns, division of labor, broad design elements, etc. If commentators have design recommendations they would like to share, experience with do's and don'ts, which components of the system experience the most requirement changes, books or web logs that are focused on these issues, etc., I would be interested to hear them. In my case, the execution system will need to be able to handle a basic equities strategy that trades daily, with little supervision. I expect to have an API liaison, an event handler, a trade engine, a risk monitor, an error checker, and a record keeper. Are there other core functionalities people recommend? Suggestions for design patterns that will scale easily and naturally? Thanks.
I never start out with a full fledged design and then just code to it. I think that's what the "experts" recommend. As far as design patterns you probably want a factory for injecting algos (or maybe a visitor or use something like spring). PubSub. Singleton (globals can be good ). Builder for creating orders and instruments. Just start simple and add to it otherwise nothing ever gets done. Its better to have crap that works than something elegant that doesnt
Absolutely. A lesson that I learnt the hard way when developing my algo platform. Given the ever changing nature of the markets, and the constant evolution of new ideas, the requirements on any trading application are in perpetual flux. I designed my initial iterations with far too much functional rigidity. The code wasn't brittle in the traditional software development sense, I simply didn't realise how fast my requirements would change. I realised after about a year that I needed to actually build a market data analysis framework which would support the, as yet unknown, requirements of my future self. Aside from all the boilerplate code relating to order management, connectivity etc developing a trading app really boils down to an R&D project which never truly comes to an end.
I tend to assume these conversations are between software systems developers or hedge fund geeks. Since I'm investing in a CS degree, I have to ask: For non-hft purposes, Why are existing programs ie ninja, multicharts NET, tradestation meta(whatever) insufficient? Can you build a trading edge centered on execution? Given that we all have such limited time, Shouldn't it be spent researching and building profitable trading logic exclusively?
ninja, multicharts NET, tradestation meta(whatever) are for retail. I have never seen these used in the real world. IMO, you still need to program to research and build profitable trading logic
+1 Although I have used multicharts for developing my strategies on single markets. Such programs are sufficient if you want to develop medium frequency kind of stuff over 1-2-3-10 markets. However, if you are looking to scan 100s or 1000s of stocks, only amibroker among retail software products will suffice as of today. If you want to do anything more serious, write your own code - aka pairs, basket trading etc. Ninja, Tradestation, MC, etc. were never designed for such tasks in the first place and thats why they suffer from a lot of limitations.