I believe that sharing design (for in the beginning) is probably a decent way to go. The incentive question is very important. For instance, Jody Goldberg, the author of Gnumeric, works on a number of quant analytical systems (using pieces of Gnumeric) as his RealJob for a while, but even he has eventually take a job with OOo to support himself.
As for me, time is a major factor, for instance. While I would love to take a vacation and seperate out from my code what is proprietary and what can be shared (and most of the framework is probably sharable), but I don't have the time to do so, continuous updates and new product research is quite time time consuming.
Also, there is a question of what kind of ATS the framework is designed to support. I believe my system and Stephen's are both high frequency trading systems, ATS doesn't have to be high frequency at all.
From my perspective, the modules that can be shared include:
1) Feed handler, echoing what Stephen outlined
2) Messaging layer, fault tolerance, fail-over, outage detection, etc, and most importantly, performance and scalability
3) Presentation / Trading separation, I was lazy, so I wrote a wrapper for DSM (distributed shared memory), so every update is done via a DSM call, pretty easy. And my GUI was terrible, a simple Tcl/Tk wrapper.
4) memory caching and data storage, unlike Stephen's system, my system uses pre-fetching extensively (basically fetch in anticipation that the memory cache would require it. So I have very little data storage problem to speak of. I hate disk I/O, for any data, so even the small data is requested via a pub/sub mechanism.
5) Simulation and back testing, this is critical, in my opinion, for any automated system to succeed. And writing a good market simulator is very hard (and need extensive data to support), so the shell framework is probably open, but the actual limit book shuffling, simulated fills, etc, are proprietary I guess.
6) External handlers, such as exporting to analytical environment, etc. Again, I was lazy, so I wrote a file adapter for the DSM, so I can pump data into my analytical environment very quickly.
7) Order / Broker adapter, this is pretty much self explanatory
8) Extensibility API hooks, so any user defined modules can be loaded into the environmnt during run time
9) Risk Modules, this is probably highly custom proprietary, since it is dependent on the strategy being traded.
10) Administrative modules, start up, shutdowns, emergency shutdowns, drop copies, notifications (I have the system write to Jabber, another DSM wrapper, heh. So when I am on the road, I can get instant updates in real-time on my phone via IM, I am writing a wrapper so I can *send* commands to my system via IM ...).
I may have forgotten a few ...
Rufus
Quote from stephencrowley:
Great question.. of course this is possible.
I've been involved in opensource development for 7+ years so I really do believe it can be a great thing.
What is the incentive for the ATS developer to share the countless hours of work he has put into it?
... good summary deleted ...