chrisuu wrote: ... I'm not sure the issue of speed makes too much sense in determining the choice of certain tools, and especially the choice of programming language. ... .
The issue of speed and choice of tools are always relative to what you're trying to do. In this particular forum thread, we have at least the following: (a) developing the trading platform, (b) developing trading code for the trading platform, (c) developing trading ideas through experimentation, and (d) executing trading signals via the platform. Choice of language can affect speed of (a)(b) and even (c). Most modern languages and tools are probably up to the task of efficiently delivering (d) given a decent design. For those of us spending time on building our own platforms ...
Code: Select all
Personal Time = W1*(a) + W2*(b) + W3*(c) + W4*(d)
Where a, b, c, and d are the activities mentioned above and W1, W2, W3, W4 are time-weighted factors in terms of productivity.
In the above formula, the point made on Python is that W1 is small in comparison to, say, C++. I really do believe this is something not to be overlooked. I measured my own W1 for Smalltalk, C++, and Java, being equally versed in all three. My personal productivity numbers in Smalltalk were 10x that of C++ (and at the time I was doing mainline C++ code for ORB internals, cross-compiling to 10 different platforms ... so it's fair to say I knew ins-and-outs of all the language and compilers extremely well). Around that time, my W1 for Java was about 2-3x that of C++. My current measures have changed slightly, mostly due to OSS and readily integratable libraries. This gives Java a greater lead than in the past. I'd say it is currently gaining on the productivity I experienced with Smalltalk (and with Eclipse I get no compile/edit/link cycle).
Another case in point for libraries: last night I go looking for convolution code, specifically something that would take drive a kernel for optimization smoothing. Lo and behold, it's supported in native Java 2D. So I can implement my trading convolution routines easily in Java and I get OpenGL hardware acceleration for free! How long would it take me to do the same thing in Python? Smalltalk? C++? (answer: way too long, especially for accelerated hardware).
Chris, I would also ask why you believe you need a database. Is this an ODS? Datacube? Transactional store? The db can help or hinder depending on what type of analysis you're doing. Much of my analysis depends on a very dynamic environment (position sizing, equity models, risk models, in-place optimization) and is a result of running different tests, not examining static data, which implies I want to minimize both W2 and W3. W2 addresses how quickly can I substitute one idea for another, or insert a different approach. With W3, I'm looking to exercise that dynamic environment through iteration and analysis. For this the platform itself needs to be fast and flexible. I find that database access isn't going to cut it against running hundreds of thousands of test runs. So while W1 (development time factor) is important, W2 (trading code factor) and W3 (trading ideas and experimentation factor) are very important to me as well. (BTW: Thanks for the tuning inspiration Forum Mgmnt, platform now clocks as high as 22 portfolios/second, 10yrs 10mkts, IBM T-41p Centrino).
It all comes back to this: the choice of tools depends on what you want to do. And lowering complexity to me means lowering the all the factors that multiply my time. I can't answer what your holistic equation is or the time factors, but you might want to consider those as a part of your selection process.