views:

3252

answers:

9

I'm interested in getting into developing trading systems, black box, HFT, etc. My primary experience is with C# and .Net (7 years). I've also done some sockets programming. I have some experience in finance working on analysis applications (2 years). My goal is to move into developing automated trading systems for a hedge fund, bank, etc.

Is there any way to learn the skills needed for this without somehow getting the job first? I've looked at the open source tradelink, IB interactive brokerage, etc. I'm playing around with this framework, and may hook it up and do some paper trading. However, I'm not sure if this has much relationship with how a well-funded entity would be conducting a high-level automated trading operation. I.e. would the tools and frameworks they prefer be a totally different skill-set? Also wondering if I need to learn C++ and/or Java for these types of apps.

A: 

I'd say a Ph.D. in mathematics.

I did heard a bit about simple option pricing in a course. While it has some requirements in computer science, the biggest part is pure math.

ebo
No longer strictly true
Steve
+5  A: 

For jobs such as this they will be looking for a good background in mathematics and finance more than technical programming skills. Consider studying for a mathematics/finance course or degree in the evening. You may also wish to consider gaining some financial certifications (CFA etc...).

Its a tough job to get into without experience and/or a doctorate and you will need to be determined. Many will be looking for PHd level candidates, however reading around the area, doing the study, learning the maths will help. Technology wise it tends to be C++ with calls into mathematical libraries such as R and Matlab. Java is used in the area as the stigma around latency and garbage collection fades over time. Low-latency, multi-threading and sockets programming will all prove useful.

Good luck!

Supertux
It vastly depends on what position you're looking for, but from my impression of the poster's question it doesn't seem like he's looking for a job where finance/math background isn't necessary. The hedge fund I worked at made of point of advertising they didn't care about finance/financial modeling skills when recruiting tech people.
brbob
Agreed. Jobs are usually split between "Quant-Developer" type jobs were a mathematical or finance background will be required, and more of a "Infrastructure developer" type job, where a solid tech background is much more important. In most cases, the quants (quantitative analysts) would make a prototype model in Matlab, or even VBA, etc. and its the job of the tech guy to implement the model in the production system.
Luhar
+2  A: 

You could write an automated trading system in any of the modern languages/frameworks (C#, VB.Net, Java, C++, Python etc.). The actual architecture of the system would depend on how you get your real-time price data, and how orders are placed. My first professional programming job was writing a genetic algorithm-based automated trading program in Visual Basic 3; price data came in on the serial port (from a satellite dish on the roof), and orders went out over the phone. I mention Visual Basic 3 to prove that anything is possible if you're given the chance.

I think for getting a job doing this sort of thing, your pure programming skills are more than adequate. What would impress a potential employer more would be your domain knowledge of the trading markets themselves (i.e. stocks, derivatives etc.). A PhD or Master's in mathematics or finance would help, but in the absence of (or in addition to) these, a command of buzzwordology is a must. The people doing the hiring will tend to be not very knowledgeable about programming, so terms like "chaos theory", "neural nets", and "genetic algorithms" will tend to get them all excited.

MusiGenesis
+4  A: 

I worked technology in a hedgefund in CT...so maybe I can help.

Language wise, the place I worked made extensive use of C# for its automated trading system. Other places did too. In fact, most everyone I knew that had come from other places had used C#. As far as financial/mathematical knowledge goes, it vastly depends on what your role is. When I was a 'Technology Associate', I had no finance or hardcore math knowledge. I just developed software that automated the generation of trade signals (the signals where then passed on to the systems that did the actual trading). I was a cog in a very big machine, so there's really no point in me knowing economics or financial modeling!

It was a good job..though work did suck at times...hope that helps.

brbob
+6  A: 

Start by reading "Options, Futures, and Derivatives" by John C. Hull. It might not be the most rigorous first text, but it'll get you off the dime without a degree or a job.

duffymo
+7  A: 

If you want to build your own automated trading system just jump in and go do it. You will have a hard time executing a lot of UHFT since you will be crossing the internet to both issue orders and crunch the order flow. A hedge fund or bank that wants to engage in HFT/UHFT will of course colo their servers in the major exchanges (NASDAQ,NYSE,DirectEdge,BATS,etc...). However don't let this deter you. There is alpha out there.

Now if you actually want to try and make money you are probably a long way from actually wanting to run something. The first problem that must be solved is strategy formation. You can either do this manually using quant methods, use machine learning or a hybrid of both. Try and find niches that larger funds won't use since they opportunity is too small relative to their fund size. Once you can build good strategies the real fun begins with portfolio management, risk management, liquidity optimization, execution optimization, hedges, etc...

Coding in .net (or java) is fine. If you are writing latency sensitive code like an execution engine then you can still use a managed language but you will need to turn off the garbage collector. Program stalls can't happen in some components. In .net managed c++ is a godsend for building hybrid apps like this. You can write most of your code in a managed language with all its benefits and write a few components in c++ with its perf benefits.

Start by getting a good data source. I have been using IQFeed and for the money they do a good job. Obviously larger operations use multiple datafeeds in the ticker plant to clean for bad ticks.

Good Luck!

Steve
+13  A: 

You may first want to have a look at this related question.

I would repeat my advice from there: there are many vendors available that service the HFT industry at this point. The most prevalent applications in this kind of trading tend to be CEP (complex event processing). Some examples are Streambase, Apama, and Aleri. On the other end, to deal with the massive quantities of data, people use high-speed databases, such as KDB, OneTick, and Vhayu.

If you want to understand the kind of technical challenges, I suggest looking at these vendors first. Their marketing materials will give you a good sense of the business applications as well as the technical challenges.

Once you understand what these things do at a basic level, google around because some of them were developed out of open source projects. One example is Truviso which developed out of the Telegraph project for streaming queries out of Berkeley. See Neil Conway's homepage for further links.

Also, some relevant books:

  • "An Introduction to High-Frequency Finance": I found this very helpful to start; well worth a read.
  • "Optimal Trading Strategies": Also very good; discusses transaction cost management (a big part of this business) and basic algorithms (e.g. VWAP).
  • "High-Frequency Trading: A Practical Guide to Algorithmic Strategies and Trading Systems": due to be published later this year.

Please also consider contributing to the quantitative finance proposal on Stack Exchange, which is designed for questions like this.

Shane
+1  A: 

@Steve... how do you propose he can enter HFT himself? The obvious costs and risk of trading possibly hundreds of thousands of times per day are far in excess of what an individual can afford.
I work in this exact area, economics qualifications are useful but programming skill in any mainstream language is way more important, nearly always involving a background in C or C++ (or good maths qualifications). Latency, thruput, optimisations, parallel processing - these are all especially useful to be able to talk about at interviews at least, and as expected are some of the hardest areas to know.
Capital market knowledge is definitely useful too, as others have mentioned.

A: 

I'm working in the field, so here's my view:

There's a big difference between developing trading systems (an "infrastructure engineer") and developing trading algos ("being a quant").

Being a quant is a lot more lucrative, and usually assumes you have a good understanding of markets and a mathematical instinct. Many places would want you to have previously proven background as a quant, and you would generally need a graduate degree if not an actual PhD.

Being an infrastructure engineer sounds closer to what you're describing. Trading systems are primarily developed in C++ (for speed) or in Java (for portability). There are some companies that specifically build trading systems over a .NET infrastructure, though that is less common. Many companies will also be willing to hire candidates experienced with one platform for the other if they're willing to learn. If you PM me, I can provide you with some potential company names.

If you just want to "play around with your system", you would usually have to either get pricing service from somewhere (very costly), or write your own code to simulate pricing data from publicly available sources. That depends on the APIs you have access to and could be a lot of work before you get to the focus of what you're trying to do.

Uri