2/ Personally I love studying latency: it's concrete, less noisy than pnl, and forces you to look at the data. The seeds for full-blown strategies often come from tinkering with latency measurements.
Ok let's jump into #OKX. Same process here applies to all exchanges.
3/ First look at the docs and see what stands out. Each OKX API has two endpoints: AWS and AliCloud. This is weird. Do some googling: They launched AWS to make it easier for HFT firms to migrate their tech stack. Makes sense: we were tempted to just use AWS for simplicity.
4/ Read the docs, but also talk to the exchange. Real people will tell you things not written down. OKX is quite accessible, and management is comparatively pro-decentralization. They don't like that a few teams comprise more than half the volume, and want to help new small teams
5/ They'll tell you about "colocation" which is a misnomer since it's still cloud-based, just talk straight to their server and skip the public internet. They'll ask you if you want AWS or AliCloud. If you ask which is faster, the party line is "very similar, both are in HK"
6/ If you only remember one piece of alpha: do your own measurements! We asked them for both setups to measure ourselves
Round trip order time is almost 1ms faster from AliCloud. This is WS order entry, which you can independently confirm is much faster than REST in either case.
7/ This matches our priors: The matching engine is in AliCloud, so unless they do some IEX-style speed bumps it should be faster to trade from there. But again, you don't know until you measure.
8/ There's a subtlety here though. Your strategy needs to process data from other exchanges as an input. Let's say an important tick comes from Binance in AWS Tokyo. What latency does your strategy care about? It's not as simple as server -> OKX round trip.
9/ Rather, you care about AWS Tokyo -> Your machine -> OKX matching engine. Natural places to put your machine are AWS Tokyo, AWS HK, and AliCloud HK. There are more measurements to make here, and I won't bore you with all the details.
10/ The TLDR though (again, you should verify this if you're trading!) is usually just optimize for the obvious thing: order entry latency. This depends on your strategy, and I might do another thread on the details here if people are interested.
11/ The final measurement is always pnl. This is why it's crucial to get a high sharpe strategy with high market share running live ASAP. We ran against our live market making strategy on OKX, and the AB test showed around +20% pnl on AliCloud with high significance.
12/ As important as measuring is, you can slice along so many axes at a time, so choose wisely. Especially in pnl space, statistical significance can take > 1 week for weaker effects. I'll talk about streamlining this process in a future thread. It's an interesting math problem.
13/ But hope this was useful for someone starting out, or gives someone trading on OKX some ideas for ways to optimize their tech stack. Let me know in the comments if there are other exchanges or topics you want to learn about. Happy trading, and happy measuring.
• • •
Missing some Tweet in this thread? You can try to
force a refresh
1/ There's a lot of edge in building a production crypto HFT system the right way.
The abstractions should be rich enough to prevent careless mistakes but not too rigid to work with.
I converged on these after countless hours of building, debugging, and rewriting code 🧵
2/ Let's focus on a concrete example: How do you deal with continuous quantities?
Doing math in code with raw numeric types is error prone. Multiplying the price of one symbol by the size of another is sure way to blow up your strategy.
Just be careful? Nah, we can do better.
3/ A pervasive feature of our trading system is the concept of "units."
The first idea is to have separate types for Price, Size, Notional, etc.
1/ We've talked before about how latency is an important component of every crypto HFT strategy.
The optimization process is fun detective work because the exchange's tech is often a black box.
A thread on what to measure, graph, and analyze for your production HFT system 🧵
2/ The first important number to look at is the "exchange timestamp" field of websocket messages and REST responses.
If multiple time fields exist, use the one corresponding to matching engine time. The other fields are edge server times, which add more noise to your analysis
3/ Matching engine time is crucial because network delay and the exchange's internal machine topology add noise to the outgoing timestamps on your end.
Reconcile the matching engine and your outgoing timestamps and you can quantify and optimize the factors in between