About this C++ Software Engineer role at XTX Markets
The Firm
XTX Markets is a leading algorithmic trading firm which uses state-of-the-art machine learning technology to produce price forecasts for over 50,000 financial instruments across equities, fixed income, currencies, commodities, and crypto. It uses those forecasts to trade on exchanges and alternative trading venues, and to offer differentiated liquidity directly to clients worldwide. The firm trades over USD $250bn a day across 35 countries and has over 300 employees based in London, Singapore, New York, Paris, Bristol, Mumbai, Yerevan and Kajaani.
We leverage the talent of our team, modern computational techniques, and state-of-the-art research infrastructure to analyse large data sets across markets quickly and efficiently, maximizing the effectiveness of our proprietary trading algorithms. We are actively seeking new methods and ideas. The models that drive our trading strategies have evolved considerably over the last 10 years, from econometric methods that gave our company its name, to trees, to neural networks, to modern deep learning architectures.
XTX Markets has an unrivalled level of computational resources in the trading industry, with a growing research cluster currently containing over 25,000 GPUs with more than 1 exabyte of usable storage. Teams across the firm include world-class researchers, developers and technologists with backgrounds in pure math, programming, physics, computer science and machine learning. The firm is also constructing a large-scale data centre in Finland to future-proof its significant computational capabilities.
At XTX Markets, technology is our business, and we are a diverse organization which attracts outstanding talent from across all industry backgrounds. We are focused on teamwork, and our people collaborate on all aspects of the business, working openly and with respect for each other, our clients and the market. Our culture is non-hierarchical and one where everyone is valued. We strive for excellence in everything we do.
The Role
We are hiring a software engineer to join our exchange trading development team (ETD) which builds and maintains most of XTX’s proprietary trading technology. We take trading ideas from our Quant Research team and turn them into reality using the most appropriate technology. On the software side we are responsible for everything from interpreting arriving market data to dispatching our orders. We also design our infrastructure and select which hardware to run on. This unusually wide scope gives us the ability to make cross-domain optimisations unavailable to our competitors, where the same work is often spread across multiple teams.
Exchanges run on their own schedules; we need our system to be ready every time trading starts. This results in a dynamic work environment where issues often have to be dealt with in a timely manner. In addition to smaller-scale projects we regularly undertake larger-scope projects to improve the system or unlock new opportunities. Everything we build is for our own use, and we use what we build to trade over USD $250 billion worth of assets every day, all in a completely automated manner.
We use the right tool for the job but most of our work is done using C++ and Python. Members of the team also regularly branch out into other technologies such as FPGA and GPU programming.
Essential Attributes
- You should have a strong knowledge of modern C++ (C++11 onwards). We have the advantage of a completely post-2011 codebase and have been eager to adopt new features where appropriate.
- We expect a strong understanding of what really is going on inside a computer when your code is running, for example caching, paging and system calls, as well as how these work and why they work like that. Knowledge of the execution pipeline in a modern CPU is even better: when are instructions executed out of order, why would they be, how is the branch target predicted for an indirect call? A lot of our code is very high performance, and the only way to achieve that is by understanding what’s really going on when it’s executed.
- You should have a good familiarity with common algorithms and data structures and their performance trade-offs, as well as the ability to reason about the running time of algorithms that you haven’t seen before. Although traditionally this would be covered in a computer science degree most of our existing team are self-taught, so a computer science degree is not necessarily a prerequisite.
- You will often have to work independently designing complex systems that need to run uninterrupted for long periods of time, so practical experience designing and implementing software systems is a plus.
- All our development is in a Linux environment, in fact many of us run Linux on our desktops also, so familiarity with the Linux command line and common tools is a plus but by no means a necessity.
- Prior finance knowledge is not required.