That's a pretty big job. Fortunately I just came across the following testimonial which I think very neatly explains what I like about Python. It's not my words but it quite accurately represents my opinions. http://wingware.com/python/success/esr Some of the points which I think are particularly important: 1) The biggest drawback of C and C++ compared with modern languages is that they leave the programmer in charge of memory management. (This is also why C will always be preeminent for systems programming.) 2) One of the most important characteristics of a programming language for large projects is readability, not writability. The larger the project the more time you and others spend reading code. Python is extraordinarily readable. 3) It really is possible for a moderately experienced programmer to learn Python in less than a week. Not master it, but certainly learn it and start producing workable and reliable Python code. I know I did. Martin
hey TSGannGalt, i totally agree with what u said. about wot i'm doing, im not doing anything. I was just interested to know which language is most popular among the individual traders here. a quant? well.. someone said they price complex derivatives earlier, but for me it's much more than that. for me a quant is someone with extensive background in applied mathematics and attempts to explain, understand and model how instrument prices behave in the markets. for instance, take a rocket scientist, or a cambridge statitican who have never heard of wot a option is, but when they see the data, they can recgonise a pattern (probable) from their studies/research,.. and for example try to mimick certain physical behavours in the markets.. something many have done really successfully. btw, I never suggest I'm a quant or I want to be one. as i said, i was very intrested to know wot language is most popular among people here. let me tel u something, few weeks ago i met someone u can call a 'quant'. they have a team of 22 phds, and full programmers and focus on statistical-arbitrage. this guy didn't care about wot a stock is or who buys wot. what he says: over a period of time, factors in the market indicate the movements.. (assuming u know these factors).. if u have a black box replicating what a person would do when these conditions are met, STATISTICALLY (having back-tested), the system is profitable..so where is the value-added in that from a human trader when the machine is far far more efficient? of course there are 'rare-events', but do human traders statistically have a upper hand over the machine in recognising these unexpected events? NO. unless you're a really experienced trader, and even then, the value-added is not holy. but even for that, they have risk managers. and i agree with him. for me a 'quant' does not necessarily know programming either. these guys had dedicated programmers. a 'quant' for me, is simply a scientist, applying his knowledge to some area of study.. in this case, the financial markets. of course people have other views. formally it also really depends what team your joining within a bank or a fund.
It is wise for most of our obviously rather low-level thread visitors that you hedge by mentioning "Not master it". It depends on what your aims are. Going by your standards I could say that I produced workable reliable Python "kiddie" code after only one day. But, I wouldn't say I was ready to tackle redesigning and writing of my current comprehensive project till after several months for reasons as explained in an earlier post.
Nice. Lots of good stuff there it seems, I might be able to get used to white-space delimiters... What does python offer in the way of integrated development enviornments? For math, not code.. something similiar to Maple, symbolic manipulation/numerical methods/graphic all integrated?
I know some extremely smart people and they aren't using python. Just use the right tool for the job...
aPismo, forget about the comp-lang religious zealots 'cause they have lost the plot. You gotta do what rocks your equity curve, when it all comes down to it that is the only thing that matters. If you like VB.net or C# then go for it, or whatever you are comfortable with and you believe meets your requirements. What comp-language(s) are you familiar with?
Part of my "growing" into my new Python direction was (1) IDE; (2) GUI. In fact, Python by itself is only the language. No IDE, only an interactive shell. Python also packs a GUI lib-tk with its distro which didn't really suit my purpose. While thinking about what to do better and what to expand from my old project, I experimented a lot with 4-5 IDE's and mainly wxPython and Qt as GUI, rejecting the others as "immature". I finally retained Qt and can't compared t with anything I had seen before in either Windows or Linux. (BTW, Qt supports C++ as well. Python via PyQt). I never have been a fan of MatLab type of gismo's as these are too far removed from the way I really want to see my math code integrated in my application. So my preferred IDE is basically general purpose. I retained eric3 which meshes well with Qt/PyQt and also gives me reasonable debugging capabilities in multithreaded, the only one I found to be less or more acceptable. Rapid development of math code is IMHO more efficient if you organize it in temporary compact modules to be recycled in the eric3 IDE. To test math code, you could also fall back on the "unittest" feature proper to Python which enables you to kind of write test specs for a particular module. BTW - I am not truly a fan of this. Also the eric3 IDE supports Ruby development which has some nice features for module/function dynamic reload, something I regret from my Smalltalk experience. I always keep telling myself that I should do something about Ruby. Alas, too many practical constraints prevent me to. As you see, I kept everything nicely portable. I started out writing my new app under windoz and migrated later to linux, principally due to the large database which was originally SQLserver. I also had to tackle migration/conversion of the db to MySQL on the linux system. To conclude, my main pet in the Python language is the "dictionary" which offers unheard of possibilities for those wanting to really learn. You'll not become a virtuoso with this in only one week's time. Prior knowledge of C++ is totally irrelevant to this goodie (and perhaps a few others as well). This is my story in a nutshell.
Thanks for clearing things up. Maybe Wealth-Lab or Tradestation is what you should be using. Then get into Python -> Java/C# -> C++. It's a more straight forward path and upgrade as the necessity requires to. Eventually, we're not programmers.
Gann, I have a hard time to follow you here: "Then get into Python -> Java/C# -> C++". What is your logic behind this? Indeed, I would say it's better for you to stick to Wealth-Lab, Tradestation or Metastock.
Yes, TK is just awful... Qt is nice, but again, coding GUI stuff is grunt-work, the time you are spending debugging widgets and trying to come up with graphs and whatnot, is time that you arent working on strategy or math.. Did you not get the feeling that you shouldn't have to be writing GUI stuff? Interesting. Did you ever take a look at simulink + realtime workshop? The generated C code is fast as hell and very easy to interface with input/output ports, parameter tweaking, integrated state recording, etc. My data/simulation/math/optimization stuff is seperate from my actual trading app, and if I wanted to completely throw out the app and keep all my math modules, it would be trivial. Also, for solving large symbolic math problems, PDEs, etc, I just whip that stuff out in maple and it integrates hassle-free into simulink and from there to fast C code. eric3 looks nice.. I just installed it, really doesn't seem as robust as Eclipse though. I use JUnit integrated into Eclipse to unit-test all my math libs. Yikes.. sql? Too much overhead, nextwork, text parsing, etc, I have a very fast embedded database where 'rows' are just serialized/deserialized java objects.. exposed as a java Map, all the caching/locking/etc is handled transparantly after you initialize the DB with the correct parameters.