I’m a SWE looking to gain some understanding and maybe do some side projects in HFT. I’m not looking to transition to a quant job, I’m looking for info on what kind of systems a software engineer at Citadel or 2Sigma works on and some resources on how I can begin learning. I know HFT involves a lot of high performance C++ and I’d like to use this to gain exposure to that in a meaningful way. I don’t mind if there’s a bunch of math fundamentals standing in the way of implementing quant models, if my interest keeps up I can work through that. Just looking for resources to build up this knowledge assuming I have undergrad level math down.
You mention "I'm not looking to transition to a quant job" and so I'm gonna take it you're asking solely about the software side of HFT. In this case, there is no math involved. The job is literally about designing code that is a fast as possible. So just imagine writing backend code where the only thing you care about is microsecond (and for true HFT, nanosecond) latency. This includes things like: being OK with assembly; minimizing vtable; decent bit of template programming; knowing system architecture (most everyone is on FPGAs); being comfortable with kernels; bit manipulation.
Basically, just be good at systems programming. The software side of HFT don't need to know math. That's what the quant and quant devs are for
That’s really helpful and totally makes sense. Could you recommend any learning path like textbooks or just concepts to try to get through learning this stuff? I’m comfortable with assembly, bit manipulation, and kernel basics, but everything else would be new territory for me. For system architecture Im familiar with instruction pipelines and some other low level software fundamentals, but do you actually mean going down to the hardware level?
Engineers at 2S and Citadel work on garbage systems. I’ve worked on trading systems and they are all shit. Managing order and trade lifecycle is no different than any ticketing system. The rest is just FIX protocol spaghetti code and bad design decisions. Any system that needs a ton of business domain requirements baked in is shit and not fun to work on. You will learn nothing of value and your workday will be depressing.
Which company?
Spreading rumors seems fun but it’s not super productive to this post
There’s not a lot of business knowledge required - certainly nothing you couldn’t learn on the job. Building software for HFT is very similar to building software elsewhere, we just have somewhat different requirements (performance is much more important, things like user experience and UI are not) and make more money doing it.
Why do you want to learn about this? Getting an hft system to profitability requires a lot of business relationships outside of writing code (eg. connecting to the exchange, financing).
I think it’s a really interesting area with some great, highly sought after career opportunities. I’m not trying to make a system to turn a profit, I understand that that’s likely out of my depth. Building a super low latency trading system sounds like a cool way to gain exposure to high performance systems programming. As a backend application developer I don’t get exposure to writing high performance code, so I think this may be a good way to do that. Maybe some other system would be a better use of time, but I thought this sounded fun. If you know of any other good project ideas/study areas, I’d gladly look into it.
Learning financial models would be a good start. Learn how stock prices are moving, what causes the movement up and down. Start higher level with not exactly hft then work your way down.