Akuna Capital is a Chicago-based prop trading firm focused on options market making. Less famous in the international student circle than Citadel or Optiver, but its intern hiring volume is one of the largest in this size class — for 2026, ~90 global intern offers (40 SDE + 30 Trader + 20 Quant Research).
The OA runs on HackerRank, 70 minutes, 4-5 questions, and uniquely mixes coding + probability + business knowledge — pure-LeetCode candidates often clear the OA but stumble at onsite. Below is the 2026 spring cycle breakdown of question types, track differences, and a prep path.
Akuna Intern OA at a Glance
| Dimension | Detail |
|---|---|
| Platform | HackerRank |
| Duration | 70 minutes |
| Questions | 4-5 (mix of MCQ + coding) |
| Difficulty | LC Easy/Medium + 2 probability/math MCQs + 1 scenario |
| Pass Bar | Coding 90%+ AC and MCQ all correct |
| Feedback | 7-10 days |
| Next Step | Super Day (3-4 onsite rounds + a trading game) |
2026 change: Akuna partially split the OA banks for SDE / Trader / Quant Research. SDE leans algorithm + systems; Trader / Quant Research leans probability + mental math. A typical OA = 2 shared coding problems + 2-3 track-specific MCQs.
Question 1 — Order Book Simulator (SDE / Trader)
Problem
Implement a simplified limit order book that supports:
ADD <order_id> <BUY|SELL> <price> <qty>
CANCEL <order_id>
PRINT
After each ADD, perform matching: when buy meets sell at crossing prices, fill by price priority + time priority and print each fill as MATCH <buy_id> <sell_id> <price> <qty>.
PRINT outputs the best bid / best ask and total resting quantity at each.
Approach
A textbook limit order book using two heaps:
- buy_book: max heap (best bid = highest price)
- sell_book: min heap (best ask = lowest price)
Realistically you can't ace every test in 70 minutes; doing ADD + matching well usually nets ~80% AC. Use lazy deletion for CANCEL (id → cancelled set) instead of removing from the heap.
Python Solution
import heapq
from collections import defaultdict
class OrderBook:
def __init__(self):
self.buy = [] # max heap: (-price, ts, id, qty)
self.sell = [] # min heap: (price, ts, id, qty)
self.qty = {} # id -> remaining qty
self.cancelled = set()
self.ts = 0
def _alive_top(self, heap):
while heap and (heap[0][2] in self.cancelled or self.qty.get(heap[0][2], 0) == 0):
heapq.heappop(heap)
return heap[0] if heap else None
def add(self, oid, side, price, qty):
self.ts += 1
self.qty[oid] = qty
matches = []
if side == "BUY":
while qty > 0:
top = self._alive_top(self.sell)
if not top or top[0] > price:
break
sp, sts, sid, sqty = top
trade = min(qty, self.qty[sid])
matches.append(("MATCH", oid, sid, sp, trade))
qty -= trade
self.qty[sid] -= trade
self.qty[oid] -= trade
if self.qty[sid] == 0:
heapq.heappop(self.sell)
if qty > 0:
heapq.heappush(self.buy, (-price, self.ts, oid, qty))
else: # SELL
while qty > 0:
top = self._alive_top(self.buy)
if not top or -top[0] < price:
break
bp, bts, bid, bqty = top
trade = min(qty, self.qty[bid])
matches.append(("MATCH", bid, oid, -bp, trade))
qty -= trade
self.qty[bid] -= trade
self.qty[oid] -= trade
if self.qty[bid] == 0:
heapq.heappop(self.buy)
if qty > 0:
heapq.heappush(self.sell, (price, self.ts, oid, qty))
return matches
def cancel(self, oid):
self.cancelled.add(oid)
self.qty.pop(oid, None)
Time complexity: amortized O(log n) per ADD
Pitfall: always call _alive_top before matching — otherwise the heap top can be a cancelled order, producing a wrong MATCH event.
Question 2 — Coin Flip Expected Value (Trader / Quant)
Problem (MCQ-style)
A fair coin is flipped at most 10 times, but flipping stops as soon as two consecutive heads (HH) appear. Let X = total flips. Find E[X].
Approach
Classic state expectations — let $E_0$ = expected remaining flips when no recent H, $E_1$ = expected remaining flips after one H.
Without the cap: $$E_0 = 1 + 0.5 E_1 + 0.5 E_0 \implies E_0 = 6$$
With the "max 10" cap, do backward DP:
def expected_flips(N=10):
# dp[k][s] = expected flips remaining with k flips left, in state s
# s = 0 (no recent H), 1 (one H), 2 (HH absorbed, contributes 0)
dp = [[0, 0] for _ in range(N + 1)]
for k in range(1, N + 1):
# state 0: flip once, go to 1 if H else stay 0
dp[k][0] = 1 + 0.5 * dp[k - 1][1] + 0.5 * dp[k - 1][0]
# state 1: flip once, end if H else go back to 0
dp[k][1] = 1 + 0.5 * 0 + 0.5 * dp[k - 1][0]
return dp[N][0]
print(expected_flips(10)) # ≈ 5.97
Answer: ≈ 5.97, approaching 6 as N grows. Why this keeps appearing: Akuna wants confirmation you can handle a finite cap via backward DP, not just pattern-match the unbounded formula.
Question 3 — Pricing Permutations (SDE algorithm-leaning)
Problem
Given a length-n array of prices, for each starting index i compute the sum, modulo 1e9+7, of products $\prod prices[k]$ over all strictly increasing subsequences starting at i. Constraint: n ≤ 1000.
Approach
LIS sum-of-products variant:
- $f[i]$ = sum of products of all strictly-increasing subsequences starting at i
- Recurrence: $f[i] = prices[i] \cdot (1 + \sum_{j > i,\ prices[j] > prices[i]} f[j])$
- Iterate from right to left
Python Solution
MOD = 10 ** 9 + 7
def pricing_sum(prices):
n = len(prices)
f = [0] * n
for i in range(n - 1, -1, -1):
s = 1 # subsequence containing only i
for j in range(i + 1, n):
if prices[j] > prices[i]:
s = (s + f[j]) % MOD
f[i] = int(prices[i] * s) % MOD
return sum(f) % MOD
Time complexity: O(n²) — fine for n=1000 Pitfall: float prices vs modular arithmetic. The problem usually states integer prices; if floats appear, round before applying MOD.
Track Differences
| Track | Coding Focus | MCQ Focus | Recommended Prep |
|---|---|---|---|
| SDE | Data structures + systems (order book, cache, graphs) | Complexity, memory model, concurrency basics | LC + CTCI System Design |
| Trader | Light coding + simulation | Mental math, probability, game theory, market-making basics | Heard on the Street + 100 Brainteasers |
| Quant Research | numpy / pandas + light stats | Expectation, variance, Brownian motion, option pricing intuition | Hull "Options" + Cornell ORIE notes |
Strongly recommended: apply to only one track — Akuna's ATS marks "applied to all three" as "focus unclear", which hurts recruiter screen.
4-Week Prep
| Week | Focus | Resources |
|---|---|---|
| W1 | 50 LC Mediums (heap / DP / graph) | LeetCode high-frequency for trading firms |
| W2 | 100 probability problems + mental math | Heard on the Street + Akuna brainteaser archive |
| W3 | Order book / market making basics | Hull "Options" + Akuna engineering blog |
| W4 | 2-3 mock OAs + onsite trading game sims | 1point3acres Akuna real-question threads |
FAQ
Q1: How hard is the Akuna intern OA?
Coding is LC Easy-Medium, but the difficulty is the high pass bar + tight clock. 4-5 questions in 70 minutes ≈ 12-15 min/each. SDE candidates report that all coding solved + at most one MCQ wrong is the typical pass threshold.
Q2: What language for the Akuna OA?
HackerRank offers Python, C++, Java by default. Trader / Quant Research candidates lean Python (faster to write); SDE candidates lean C++ because Akuna's engineering culture favors C++. Recommendation: pick whatever you can debug end-to-end in 70 minutes — don't switch to a less familiar language for "culture fit".
Q3: Can I retake the Akuna OA after failing?
No retakes within 12 months for the same track, but switching track is allowed (e.g., SDE failure → re-apply as Quant Research). Akuna keeps prior OA scores internally, so a weak first attempt raises the bar for the second — choose your track carefully.
Q4: How long after passing OA until onsite?
1-2 weeks to a Recruiter Call → Super Day (3-4 rounds in one day). Super Day includes a Trading Game: 5-6 candidates team up, market-make and arbitrage in 30 minutes. This is Akuna's signature round — strong OA + weak Trading Game = ~70% rejection.
Q5: How do I prep for the Akuna Trading Game?
It's a market-making sim. Common scenarios: (1) given a true-price distribution, set a bid-ask spread; (2) the market hits or lifts you, manage inventory dynamically. Core skills: always compute expected value, cap single-trade loss, never chase prices. Search YouTube for "Akuna Trading Game" — there are several candidate post-mortems.
Q6: What does Akuna pay interns?
2026 cycle US internships:
- All three tracks: same base $10-12K/month for a 10-12 week stint
- Sign-on: $5K (first-time applicants)
- Return offer rate: ~60%, full-time base $135-160K + $50-150K bonus (perf-tied)
Contact
If you're prepping Akuna Capital, Optiver, IMC, Belvedere — that is, options market-making + prop trading — the OA is just the entry gate. Onsite trading game + brainteaser is the real filter. We've curated 2025-2026 Akuna real questions + Trading Game post-mortems + brainteaser bank — feel free to reach out.
Add WeChat Coding0201, get the Akuna OA bank and Trading Game sim.
- Email: [email protected]
- Telegram: @OAVOProxy