Sunday, January 28, 2007

Dissecting a Wall Street Job Posting

A lot of you have emailed me privately with questions about working on Wall Street, and how to land a job there. (I assume that the questions are coming by email because everyone is afraid of their bosses tracing the IP addresses.)

I would like to take a recent job description that was on the site and dissect it.

Here it is:


Job Description
Our client, a top-tier global brokerage firm, is seeking multiple C++/Java Developers to work on an a real-time algo trading platform for their US Equitites trading area. This is a fulltime opportunity located in New York City, NY.

Experience in designing and implementing high speed trading system that can be used for algorithmic automated trading and smart order routing.

Prior experience in US equities trading environment is essential. Prior experience in US options/futures trading environment a plus. Prior experience in UK/Asia markets a plus. Knowledge of building automated trading systems and/or exchange connectivity is a big plus.

• Strong technical programming skills is a key requirement. The Object Oriented Design and Programming is essential. Knowledge of design patterns is also key. Hands on expertise in programming in C++ and Java (server side programming) is necessary. In depth knowledge of multithreading, exceptions, template etc.

• Needs to have strong expertise in inter process communication and event driven programming
Projects will include:

• Algorithmic Trading
• Automated Market Making
• Smart Order Routing
• Trade Analysis for Equities, Options and Futures in US Domestic and International Markets

Experience with the following products:
• TIBCO Messaging Services
• Ticker Plant
• Times Ten
• GemFire
• Transact Tools (FIX Gateway)
• Web servers (Tomcat/Weblogic)

$150 -$300k


The work is for an Algorithmic Trading platform. This is a good thing. Wall Street is becoming more and more automated, with the NYSE reducing floor space and a number of firms paring their trading staffs.

Algo trading is a very hot area. Firms want to trade large blocks of stocks without affecting the marketplace. The trading has to be broken up into a lot of small blocks, according to different strategies. The firm also has to be able to switch strategies in mid-stream. This requires monitoring the marketplace in real time, and keeping an intraday history of the stocks that you are interested in.

The firm is looking for experience in high-speed, low latency trading. Latency is everything. You want to get yourselves out there faster than all of your competitors. Latency can be affected by many factors, from speed of the networks to inefficient locking algorithms in your code. There is also a need for experience in smart order routing, which means that you might get to work with some kind of rules engine, like ILog Rules.

Let's look at the technology stack.

- Tibco is being used (either Rendevous or EMS), probably to get the spot prices from the ticker plants into the algo trading server. (Watch out for those multicast storms...)

- "Ticker Plant" probably means something like Reuters or Wombat. If the job is for Merrill, Bear Stearns or RBC, then most likely that Wombat is being used,otherwise most likely Reuters.

- Times Ten is an in-memory database (now owned by Oracle) that is probably being used to hold tick history. Other solutions in this area include KDB+, Vhayu, StreamBase, and some of the newer players that I have talked about on this blog in the past. These newer time-series databases can be used to perform complex event processing on the incoming tick stream.

- Gemfire (by Gemstone) is a distributed cache. This is probably being used to cache queries to the reference data. The use of Times Ten may mean that you will have an Oracle database.

- Transact Tools TTConnect will be used to send and receive FIX messages between your Algo server and the various exchanges. FIX is the standard message format that is used to send equity orders to exchanges and to receive updates about the status of your orders. Latency is extremely important here too. How fast can you get your messages to and from the exchanges.

- Web Servers. Perhaps for some web apps that will be used to monitor status. I would expect to see a .NET front-end here. The fact that .NET is not on the stack makes me believe that the job is not for Goldman nor Morgan Stanley, where .NET front-ends are "de riguer".

Now, onto the compensation. 150-300K ... That's a pretty wide range. The 300K might lead me to believe that this position was for a hedge fund, but the first line tells me that it is a top-tier global brokerage firm. If you take the word "Brokerage" literally, then this would eliminate Lehman, Goldman, and Bear Stearns. Base salaries go from about a low of 130K to about 160K, with 150K being the norm. So, if the total comp was 150K, then you are not getting much of a bonus, are you? Let's take 150K as being the base. Lehman had about 60-80% bonuses this year and Morgan Stanley had about 45-55%. Except for Goldman, you are probably not going to get 100% bonus for a Java/C++ developer role from one of the other firms. So, I would take the 300K figure with a HUGE grain of salt, and look more at 210-225K as total comp.

With all of this said, my firm is also looking for top talent. If you have experience in the above areas, and if you want to explore some opportunities with us, please send your resume to me.

©2007 Marc Adler - All Rights Reserved


Anonymous said...

Dude nice post... But what adivce would you give on where to start if one does not have this kind of experience with algo trading and deep c++ experience? Or if one has intermediate c++ knowledge with few years experience in say web or general development but little to no experience on trading development. Where should one get the knowledge and how long do you think would it take to build the level of skills...

marc said...

Most financial companies now will consider hiring very strong developers with no financial experience, and will train these developers on capital markets. These jobs are harder to get, and you may come in at a more junior level than someone who has financial experience. But it can be done.

Another way is to join a big consulting firm, like IBM's Business Consulting Services, Ernst and Young, Price Waterhouse, or KPMG, and try to get into their Capital Markets practice. After a few years at these firms, you might be able to move on to the brokerage firms.

The key thing to do is to make your development skills as sharp as possible, and to learn technologies that are in-demand, like .NET 3.0, Analysis Services, SQL Server 2005, etc.

MS said...

Good discussion going on here. I was actually going to ask marc a question similar to the one posted earlier. I have seen that once you get into web or some development that does not use C++ its kinda hard to get switch back to doing real C++ stuff. With so much new stuff always happening it sometimes gets hard to keep pace with new developments specially when you are on your own and have to learn everything by yourself. Hope marc here can shed some more light on how he goes on learning and doing so many different technologies... Good info here by the way.

marc said...

You have to be relentless in your learning. Chris Donnan stays up until 1AM every night to read, read, and read. You are correct in stating that people arfe so busy during the workday that they have no time to learn new things, but you have to try to make time. Try to start a little financially-related coding project at home. Try to sign up for some finance courses at your local college. If you are in New York City, then the NY Institute of Finance offers courses in the evening. Try back-porting some of your code from C# to C++, or to Java.

Anonymous said...

There is lot of work done with Winforms and C# to develop trading apps with good GUI but i have seen that if you have lot of experience and little winforms experience than you will not get into developing trading apps even though winforms themselves are easy to develop compared to webforms. It seems that because of the distributed nature using multithreading and messaging used by trading systems it makes the development more complicated and clients want people with such experience. But how does one get experience if one is not given a chance to work on them? I have not come across any sample trading apps that can demonstrate some of these stuff... Any info on this marc?

marc said...

You can try to write a trading system yourself. Write some feed handles that get prices from Yahoo Finance or other services like that (OpenTick, etc). Put the prices on a nice flashing grid. Draw some real-time and historical charts. There are interesting issues in handling threading, dispatching, communications, etc. That should give you a decent start.

David LattimoreGay said...

Sounds like there is room for a training course geared to providing the attendee's with the appropriate experience in building apps for the trading floor.

I am currently working with a .Net trainer at the moment developing such course material so will keep you all posted

MING CHEN said...

Good post. I wonder what a "trading system" really encompasses. IMO, it should include all sub-systems from various departments of a trading firm. The post above mostly likely is for the infrastructure piece that deals with communications inside and outside the firm. In addtion, you have the front desk roles that focus on trading strategies and risk control and trade level, which probably demand more Excel/VBA skills more than anything else; mid/back office roles primarily focusing on PL calculation, performance attribution and risk analysis at portfolio/firm level, which would need more knowledge in SQL, OLAP and more application architecting, etc; then there is research oriented positions where you'd have to have a phd degree in physics and can code calculus in C++, application design is not a big concern there though. The degree of financial knowledge also varies across positions. For example, I think none of the positions above, except for infrastructure, would require experience in FIX...