A half-day journey through five of the world's most sophisticated financial markets — the technology, protocols, standards, and engineering decisions that move trillions of dollars of options contracts across Australia, India, Japan, Korea, and Taiwan every day.
Markets → Order journey → Protocols → Encoding → Matching → Latency → Risk → APAC deep-dive → Career
You know what a share is — partial ownership of a company. An option is a contract that gives you the right but not the obligation to buy or sell that share at a fixed price before a fixed date.
That sounds abstract. Here is why it matters technically: options expire. Every contract has a clock ticking. That clock creates urgency, and urgency demands speed.
If options decay in value over time, who is on the other side of every trade — and why would they willingly sell you something that's losing value?
ASX Trade — equities + Exchange Traded Options (ETOs)
ASX 24 — futures + options on futures
Cboe AU — alternative equities venue
CoLo: Equinix SY3 (ASX), Global Switch (Cboe)
NSE — world's largest options exchange by volume
BSE BOLT+ — Eurex T7 technology platform
NSE NNF spec: "trimmed" — NDA for full details
TSE Arrowhead 4.0 — cash equities
OSE J-GATE 3.0 — derivatives + index options
Mandatory pre-trade risk via TradeGuard system
KRX EXTURE+ — unified platform, equities + derivatives
Full spec NDA-gated via member portal. FIX tags 6000–9999 are KRX custom.
TAIFEX — futures + options, government-owned
TMP spec is public PDF — rare for APAC. Big-endian, sequence-numbered.
NSE is the world's largest options market by volume — yet it's harder to connect to than CME. Why would an exchange make connectivity harder, and who does that benefit?
The strategy engine receives market data before it sends an order. That means it has to process incoming data faster than competitors to act first. What limits how fast you can process incoming data?
A fixed-width record. Every field is at a known byte offset. No parsing needed — you read position 0–3 for price, position 4–7 for quantity, done.
// OUCH Enter Order — 49 bytes total
// Offset Size Field
// 0 1 PacketType = 'O'
// 1 4 OrderToken (binary int)
// 5 1 BuySellIndicator 'B'/'S'
// 6 4 Shares (big-endian uint32)
// 10 8 Stock (8 ASCII chars)
// 18 4 Price (uint32, scaled 10^-4)
// 22 4 TimeInForce
// ... ...
Parse time: nanoseconds. One memcpy into a struct. FPGA can do it in hardware.
A tag=value ASCII protocol. Every field is labelled with a tag number. Human-readable, but verbose. Designed in 1992 for reliability over speed.
8=FIX.4.4|9=178|35=D| ← BeginStr|Length|MsgType 49=FIRM1|56=EXCHANGE| ← SenderID|TargetID 34=291|52=20240506-09:30:01| ← SeqNum|SendTime 11=ORD-001|55=NIFTY25MAY| ← ClOrdID|Symbol 54=1|38=10|44=21500.00| ← Side|Qty|Price 10=247| ← Checksum
Parse time: microseconds. Must scan for pipe delimiters. Cannot FPGA-accelerate easily.
FIX is text, so you can read a packet capture in Wireshark and immediately understand it. Binary requires a spec to decode. From a security and debugging perspective, which property is more valuable?
Binary message formats (OUCH, ITCH, TMP) define what the data is. Session protocols define how messages are packaged, sequenced, and recovered when something goes wrong.
// SoupBinTCP frame header (3 bytes) uint16_t length; // payload size char type; // 'S'=Sequenced, 'U'=Unsequenced // Then the OUCH/binary payload follows // Login handshake: 'L' → Login Request (username, password, session, seqnum) 'A' ← Login Accepted (session ID, seq start) 'J' ← Login Rejected (reason code)
Used by: ASX Trade OUCH, ASX 24, J-GATE OUCH
// MoldUDP64 packet header (20 bytes) char session[10]; // identifies the stream uint64_t seqNum; // first msg seq in this pkt uint16_t msgCount; // msgs in this packet // Then: [uint16_t len][ITCH message] * msgCount // Gap detection: if seqNum jumps, you missed msgs // → Send retransmit request to TCP recovery port
Used by: ASX ITCH, J-GATE ITCH. NSE MTBT uses own framing; TAIFEX TMP uses own sequence header.
If UDP doesn't guarantee delivery, why not just use TCP for market data and be done with it? Think about what happens when 500 subscribers each need the same data simultaneously.
A/B feeds mean two identical streams. Why? Hint: think about what happens if a single UDP packet is lost by a faulty switch port.
When a matching engine publishes one Add-Order ITCH message, the application payload is a ~36-byte record. By the time it leaves the NIC, it is wrapped in four more layers.
| Layer | What it does | Overhead |
|---|---|---|
| L7 ITCH | Add Order message fields | 36 bytes |
| L6 Encoding | Big-endian binary, length prefix | +2 bytes |
| L5 MoldUDP64 | Session ID, sequence number | +20 bytes |
| L4 UDP | Port numbers, checksum | +8 bytes |
| L3 IPv4 | Source/dest IP, multicast group | +20 bytes |
| L2 Ethernet | MAC addresses, EtherType | +18 bytes |
| Total on wire | ~104 bytes |
The three universal truths across all APAC venues:
The OSI model was designed in the 1970s, before financial markets used computers. It was designed for robustness, not nanosecond latency. What would you redesign if you built a protocol stack specifically for high-frequency trading?
The order book is a data structure — a sorted map of price levels, each containing a queue of orders. At each venue the algorithm is identical:
If two orders arrive at the matching engine in the same microsecond, who wins? How does the exchange decide? And what happens if two physically separated gateways each receive an order at "the same time" by different clocks?
Light travels ~200,000 km per second in fibre (c ÷ 1.5 refractive index). You cannot change this. You can only choose:
If microwave is faster than fibre, why doesn't every firm use it between every venue? What are the engineering and regulatory constraints?
Every order must pass through a risk gate before it reaches the exchange. This is both a regulatory requirement and a self-preservation mechanism.
| Check | Catches |
|---|---|
| Fat-finger filter | Order price > X% from last trade — e.g. BUY at 10× market price |
| Max order size | Single order exceeds configured lot limit |
| Max notional | Order value in currency exceeds daily/session cap |
| Position limits | Net delta/gamma would exceed risk mandate |
| Msg rate limit | Orders/second exceeds exchange-set throttle |
| Kill switch | Operator manually halts all activity instantly |
The risk gate sits between your strategy and the exchange. It adds latency. Competitors who remove risk controls trade faster. How do you design a system that is maximally fast AND maximally safe?
In the US, Nasdaq publishes its ITCH and OUCH specs publicly as free PDFs. CME publishes MDP 3.0. Any developer in the world can download and implement them.
In APAC, several venues gate their specs behind Non-Disclosure Agreements or member-only portals. This is deliberate.
Independent Software Vendors hold exchange certifications and sell pre-built connectors:
| ISV | Region focus | Known for |
|---|---|---|
| Omnesys / TCS | IN | NSE/BSE certified; widely used |
| ODIN (FT) | IN | NSE OMS/DMA standard |
| KOSCOM | KR | KRX certified; only realistic path for foreign firms |
| Trading Technologies | Global | JP/AU certified; used by prop desks |
| Fidessa / ION | Global | Full APAC stack; buy-side focus |
If you were building a trading system to connect to KRX and the full spec is NDA-gated, what is your options path: (a) sign the NDA, (b) use an ISV, (c) reverse-engineer from packet captures? What are the legal and practical implications of each?
| Venue | Native MD protocol | MD transport | Order Entry | OE transport | FIX version | Spec access | CoLo / DC |
|---|---|---|---|---|---|---|---|
| 🇦🇺 ASX Trade | ITCH | UDP mcast + SoupBinTCP recov | OUCH (binary) | TCP · SoupBinTCP | 5.0 SP2 EP196 | ✓ Public PDF | Equinix SY3 |
| 🇦🇺 ASX 24 | MDP (ITCH-like) | UDP multicast | FIX only | TCP · FIX session | 5.0 SP2 | ✓ Public | Equinix SY3 |
| 🇦🇺 Cboe AU | Multicast PITCH | UDP + Spin/Gap Proxy | BOEv3 (binary) | TCP | Cboe AU FIX | ✓ Public PDF | Global Switch SY |
| 🇮🇳 NSE | MTBT / MBP | UDP mcast A/B + TCP recov | NNF (binary) | TCP | via ISV bridge | ⚠ Trimmed public | NSE CoLo (BKC) |
| 🇮🇳 BSE BOLT+ | FAST/FIX | UDP multicast | ETI + IML/OMB | TCP (Eurex T7) | 5.0 SP2 native | ✓ ETI spec public | BSE CoLo (Fort) |
| 🇯🇵 TSE Arrowhead 4 | FLEX Std/Full | UDP multicast (dual feed) | Arrowhead native | TCP (member API) | 4.4 / 5.0 gated | 🔒 Gated (member) | TSE DC (Osaka) |
| 🇯🇵 OSE J-GATE 3 | J-GATE ITCH | UDP mcast (gated) | OUCH + OMnetAPI | TCP · SoupBinTCP | 4.4 / 5.0 | 🔒 Gated + TradeGuard | OSE DC (Osaka) |
| 🇰🇷 KRX EXTURE+ | MDS · High-Speed | UDP multicast (NDA) | Proprietary binary | TCP (NDA) | 4.4 + tags 6000-9999 | 🔒 NDA member portal | KRX CoLo (Busan) |
| 🇹🇼 TAIFEX | TMP MD | UDP multicast | TMP v2.15.0 | TCP (seq-numbered) | 4.2 / 4.4 hybrid | ✓ Public PDF | TAIFEX DC (Taipei) |
KRX's FIX dialect uses custom tags 6000–9999. The FIX standard reserves tags above 5000 for custom use. What problems arise when two different venues both invent their own custom tags and start at 6000?
In a system where two orders arrive "at the same time," the matching engine must decide who was first. Its answer is only as good as its clock.
| Venue | Timestamp field | Epoch |
|---|---|---|
| ASX ITCH | 6-byte ns since midnight | Sydney local |
| NSE MTBT | 8-byte ns epoch | IST (UTC+5:30) |
| TSE FLEX | 4-byte ms since midnight | JST (UTC+9) |
| KRX | 8-byte µs epoch | KST (UTC+9) |
| TAIFEX TMP | 4-byte ms since midnight | CST (UTC+8) |
⚠ Every timezone and epoch is different. A system that correlates trades across APAC must convert all to UTC with nanosecond precision before comparison.
NSE timestamps in IST (UTC+5:30) — a half-hour offset. Why is a half-hour timezone unusual globally? And what edge case does this create in a naive UTC conversion that adds exactly 5 hours?
Build and maintain exchange connectors. Implement binary protocol parsers. Handle session reconnection, gap recovery, heartbeat timeouts. Test against exchange-provided simulation environments (CAST, UAT).
Skills: C++, Python, Wireshark, understanding of TCP/UDP, bit manipulation, big-endian parsing
Build feed handlers that process millions of messages per second and maintain accurate order books. Detect and recover from gaps in µs. Distribute normalised data to dozens of downstream consumers.
Skills: C++, FPGA awareness, shared memory IPC, lock-free data structures, performance profiling
Measure tick-to-trade latency with nanosecond precision. Configure kernel-bypass networking. Tune CPU affinity and NUMA locality. Monitor PTP synchronisation. Benchmark hardware options.
Skills: Linux internals, networking, DPDK/OpenOnload, perf tools, hardware knowledge
Design and implement pre-trade risk controls. Write kill-switch logic. Build audit trails. Verify compliance with SEBI/FSA/ASIC/FSC regulations. Certify against exchange risk requirements (TradeGuard etc).
Skills: C++, understanding of financial regulation, testing under adversarial conditions
Analyse order book behaviour. Model spread dynamics. Study how APAC venues differ in maker-taker fees, tick sizes, position limits. Understand why the same strategy behaves differently on NSE vs TAIFEX.
Skills: Python, statistics, options pricing, data analysis, curiosity about market mechanics
Navigate exchange onboarding: member agreements, spec NDAs, UAT certification, production approval, ongoing audit requirements. Liaise with exchanges in JP, KR, IN. Translate bilingual specs.
Skills: project management, attention to detail, language skills (Japanese, Korean helpful), stakeholder communication
Every protocol you learned today was invented by an engineer who faced a problem and designed a solution. ITCH replaced a text-based protocol in 2002. TMP is still being iterated. This field is not settled — it is actively being built by people your age in 10 years.