Agree. To balance between " waiting to get everything optimal" or " get in quicker with an acceptable arsenal of tools" is crucial. That is why i decided to : 1- not learn C++. I know C++ is more powerful but it will be nearly impossible for someone like me to learn it enough to get the benefit. 2- To start working on an already tested framework and not to reinvent the wheel. The acceptable level, i think comes when i decided to not learn programming by start with languages such as easy language or AFL. I decided to go to languages such as c# and Java. They relatively could get things done with relatively enough power. General purpose and OO languages. Also, OpenQuant could give me the event oriented architecture. If i could achieve all that in a reasonable time frame, i will feel so content.
My goal is to play at the edge of retail in terms of execution speed. This is where my system will be at minimum risk. I care about risk more than profit. Hopefully LMAX + OpenQuant can get me there. Till now i think so.
You mentioned AFL though... if I had to pick another package right now I'd probably go with Amibroker for awhile to see if I like it. I can, have not quite bothered yet, but could, bring Event Driven Architecture to any of the packages. I wrote my own functions to implement that in Sierrachart but it's a hokey way to go, I want it done at a lower level. Ninja has a little bit of it and Openquant has it in spades...
AFL is a powerful concise language indeed. But very few are depending on it for live trading. Only for backtesting and optimizing. It is one of the least priority on list. It would be another plus for me to be able to play with it one day. But to be realistic, i have to focus on one thing at a time.
I'd say C++ is more open than C#, but in everyday terms that means more opportunities for uncaught (by the compiler) mistakes. C# provides a safer development environment, its main feature - vs C++ - (imo) is the garbage collector (which is a double-edge sword), its main limitation - vs C++ - is the single inheritance. On the trading platform side, already tested framework doesn't mean bug-free or even fast-fixes ... I have generated a fair number of tickets with Ninja, and I have yet to see an answer different from "this is expected behavior" ... even when it is followed by "it will be fixed in the next major release". To be fair, in all but one case, I found a workaround (in one case, that workaround takes 1000+ lines). Sadly, you'll only find out about platform bugs usually late in the game.
I can not seek the perfect .. If i do, this will 1- Delay me from getting into the game. 2- Make the learning curve brutally high for me. Regarding my specific situation, i believe i have to make compromises but the valid question is to which degree?
My understanding is Retail + Millisecond ---> C# or Java Institutional + microsecond -----> C++ fair enough
The fact that a class X can inherit (be derived) from a single base class B: // C# class X : B { ... } contrary to C++ where a class X can inherit (be derived) from multiple base classes B1, B2, ... Bn // C++ only class X : B1, B2, ..., Bn { ... } Of course, in C# a class can *implement* multiple interfaces, but that's the thing - it has to provide the implementation for each interface it supports, and this is a world apart from inheritance.