One-line summary: HRT OA is a 70-minute, 4-question CodeSignal assessment that emphasizes time-series processing, step functions, and high-throughput data structures. Clean O(n log n) solutions are usually enough to advance to onsite.
Hudson River Trading (HRT) is one of New York's top high-frequency market-makers. Among quant OAs, HRT's style is "engineering-heavy and practical" — it's not as math-heavy as Jane Street, nor as trading-intuition-driven as Optiver. HRT cares whether you can write clean code that handles real market-data flows.
The article below walks through HRT OA in five sections: question types, real questions, solutions, prep strategy, and FAQ.
1. HRT OA Basics
| Item | Detail |
|---|---|
| Platform | CodeSignal |
| Duration | 70 minutes |
| Questions | 4 (increasing difficulty) |
| Languages | Python / C++ / Java (Python recommended) |
| Format | English problem statements with finance flavor (no finance knowledge required) |
| Pass bar | 600 max, recommended ≥ 500 |
| Invite source | Campus + Referral + LinkedIn sourcing |
Compared with other quant OAs: HRT does not include probability puzzles or brain teasers — every question is a LeetCode-style algorithm problem. This means LeetCode grinders have an edge.
2. Question Distribution & High-Frequency Topics
Based on the past 12 months of candidate reports:
| # | Difficulty | Common Topics | Suggested Time |
|---|---|---|---|
| Q1 | Easy | Simulation / strings / basic arrays | 5-10 min |
| Q2 | Medium | Hashmap + sliding window | 10-15 min |
| Q3 | Medium-Hard | Step function / interval merge / difference array | 20-25 min |
| Q4 | Hard | Time series + heap / binary search / segment tree | 25-30 min |
Q3 is the biggest pitfall — many candidates write O(n²) brute force and TLE on the large test cases.
3. Real Questions and Solutions
Type 1: Step Function — Maximum Concurrent Load
Problem: Given events [(start, end, value)], where each event contributes value units of load on [start, end), find the maximum instantaneous load at any moment.
Brute force O(n × m): per-tick scan, TLE
def maxLoadBrute(events):
timeline = [0] * 1_000_001
for s, e, v in events:
for t in range(s, e):
timeline[t] += v
return max(timeline)
Optimal O(n log n): difference array via event sweeping
def maxLoad(events):
points = []
for s, e, v in events:
points.append((s, v)) # enter
points.append((e, -v)) # leave
points.sort()
cur = best = 0
for _, delta in points:
cur += delta
best = max(best, cur)
return best
Key technique: Convert "intervals" into "event streams" and sweep once. HRT loves this abstraction.
Type 2: Sliding-Window Aggregation Over a Time Series
Problem: Given a stream of ticks (timestamp, price), output the maximum price in the past 5 seconds for each tick.
Optimal O(n): monotonic deque
from collections import deque
def slidingMaxPrice(ticks, window=5):
dq = deque()
res = []
for t, p in ticks:
while dq and dq[0][0] < t - window:
dq.popleft()
while dq and dq[-1][1] <= p:
dq.pop()
dq.append((t, p))
res.append(dq[0][1])
return res
Complexity: each element enters and leaves the deque at most once → O(n). HRT frequently rephrases LeetCode 239 with timestamps.
Type 3: Order Matching — Greedy + Priority Queue
Problem: Buys and sells arrive over time. Same-price orders match in time-priority order. Output total matched volume.
import heapq
def matchOrders(orders):
bids, asks = [], []
volume = 0
for side, price, qty, t in orders:
if side == 'B':
while qty and asks and asks[0][0] <= price:
ap, at, aq = heapq.heappop(asks)
m = min(qty, aq)
volume += m
qty -= m
if aq > m:
heapq.heappush(asks, (ap, at, aq - m))
if qty:
heapq.heappush(bids, (-price, t, qty))
else:
while qty and bids and -bids[0][0] >= price:
bp, bt, bq = heapq.heappop(bids)
m = min(qty, bq)
volume += m
qty -= m
if bq > m:
heapq.heappush(bids, (bp, bt, bq - m))
if qty:
heapq.heappush(asks, (price, t, qty))
return volume
Common mistakes: forgetting to push residual quantity back, or mixing up price vs. time priority.
4. Prep Strategy: From Beginner to 500+
| Phase | Duration | Focus |
|---|---|---|
| Foundation | 1-2 weeks | LeetCode arrays / hashmaps / two pointers — 60 problems |
| Reinforcement | 1-2 weeks | Sliding window, monotonic stack/queue, heap — 30 problems |
| Simulation | 1 week | CodeSignal Industry Coding Framework — 4 mock sets |
| Sprint | 3-5 days | HRT-style step-function and order-book questions — 10 problems |
Strong recommendation: practice on CodeSignal's official General Coding Framework rather than only LeetCode — its IDE lacks LeetCode's input parsing helpers.
5. FAQ — HRT OA Common Questions
Q1: What score do I need on HRT OA to advance?
Usually 500/600 is the bar. Some teams (especially SDE and Algo Dev) require 560+. Quant Researcher tracks expect a perfect score plus the bonus question.
Q2: Can I use Python? Is performance enough?
Yes. HRT test cases typically have n ≤ 10⁵, and an O(n log n) Python solution finishes in 1-2 seconds. For Q4 you should still pre-write input = sys.stdin.buffer.read().split() to speed up I/O.
Q3: Does passing OA mean automatic VO?
Not always. HRT also reviews your résumé. A high OA score with a weak résumé may still be rejected; conversely, strong résumés (top schools, ICPC, recognized internships) sometimes get fast-tracked.
Q4: Do questions repeat?
Yes. The pool is large but cyclical — variants of "max concurrency from event streams" and "order matching with cooldown" have shown up repeatedly between 2024 and 2026.
Q5: How long is the cooldown after failure?
Usually 6 months. Applications during the cooldown are auto-rejected.
6. After OA: HRT VO Process
Passing OA leads to 2-4 VO rounds, including:
- Coding rounds: 1-2 LeetCode Hard problems, focus on optimal complexity and code style
- System Design (senior only): HFT systems, order books, message buses
- Behavioral / Culture Fit: HRT emphasizes research and collaboration culture
- Onsite Lunch / Coffee Chat: not eliminating, but used for holistic evaluation
7. External Resources
🚀 Need HRT OA / VO Coaching?
If you're preparing for HRT or similar quant firms (Citadel, Jane Street, Optiver, SIG), we can help with question-type breakdowns, variant practice, and live VO support.
👉 Add WeChat: Coding0201 — get real questions and a 1-on-1 prep plan
Contact
- WeChat: Coding0201
- Email: [email protected]
- Telegram: @OAVOProxy