Skip to content
View nisgemML's full-sized avatar

Block or report nisgemML

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
nisgemML/README.md

Nishant Gemawat

Senior software engineer with 14+ years of experience, the recent ones in financial services. I'm currently on quantitative investment platform infrastructure at State Street Alpha Frontier (via TCS). Before that I spent four years at Morgan Stanley. I work in C++, C# and Python on Linux and Windows.

The six pinned repositories form one trading pipeline, from bytes on the wire to a research question:

 UDP multicast ──► ITCH decode ──► order book ──► matching ──► decision
 (gap recovery)    (C++ / FPGA)    (deep books)   (lock-free)   (+ is there a signal at all?)
Repository What it is What it has been checked against
tick-to-trade End-to-end C++ pipeline: MoldUDP64 feed → ITCH 5.0 → matching engine → strategy A full NASDAQ main-venue day (2020-01-30, 423M messages): for AAPL, MSFT and TSLA, every price level of the engine's book equals an independent reference at all 12 checkpoints (52,745 levels, 0 mismatched)
lob-engine Limit order book and matching engine: struct-of-arrays levels, AVX2 search, no allocation on the matching path Fill-by-fill equality with a reference model on 5 × 1M random events under ASan/UBSan/TSan. Found and fixed an order-index collapse: cancel went from 3.5 ms to ~55 ns, flat to 60,000 live orders
fpga-itch-parser Synthesizable Verilog ITCH 5.0 decoder 600,006 checks on real NASDAQ messages against a third-party parser, 0 failures. 8/8 injected RTL bugs caught. Places and routes on a Lattice ECP5 at 137–141 MHz after two timing fixes (open-source flow, no board)
mpsc-queue Vyukov MPSC queue with a written memory-model proof CI on x86-64 and AArch64. The seq_cst cost is measured, not assumed (8.8 → 20.6 ns per push). States plainly that the queue is not lock-free or linearizable
udp-multicast-receiver MoldUDP64 receiver: gap detection, retransmit, A/B line arbitration ITCH layout pinned by test vectors typed from the spec. Detects the kernel silently clamping its receive buffer
quant-signal-research Pre-registered study of short-horizon BTCUSDT direction on 12 months of 1-minute data Purged walk-forward validation, lookahead tests, Bonferroni-adjusted intervals. Result: a detectable signal (AUC 0.521) far below the cost of trading it (0.15 bps edge vs a 20 bps fee)

How I work

Every repository documents the bugs I found in my own work, how each was caught, and the test that now pins it. A few that shaped how I test:

  • A test can agree with itself. An ITCH parser passed every test because its fixtures shared its wrong byte layout. Golden vectors typed by hand from the NASDAQ spec now catch it, and they fail 11 checks against the old parser.
  • Realistic data can miss the worst case. A hash bug that made cancels over 60,000× slower survived every correctness test, including a replay of a real exchange day, because none of them built a deep book with consecutive order IDs. The fix is pinned by a structural test (longest probe cluster), not a timing threshold.
  • Statistics need the same scrutiny as code. Bootstrap intervals at a Bonferroni level, built from 300 resamples, were measurably too narrow. Fixing them reclassified one borderline result from "detectable" to "not". I published that change rather than keep the stronger-looking claim.
  • Say what isn't proven. Benchmarks are labelled with the machine they ran on (laptop under WSL2, or a one-vCPU container), and each repo's LIMITATIONS.md lists what is not claimed: no FPGA board run, no co-location latency, no backtested P&L.

Background

M.S. in Computer Science, Texas A&M University–Commerce · Post-Graduate Certificate in AI/ML, Purdue University. Earlier work spans payments (Worldpay), where I built a C++ serial-comms subsystem called from .NET that removed ~300 ms garbage-collection latency spikes from card-terminal processing, plus enterprise systems at Dell, eBay and FedEx.

Contact

LinkedIn · nisgem@gmail.com

Pinned Loading

  1. tick-to-trade tick-to-trade Public

    C++ tick-to-trade pipeline: MoldUDP64/ITCH 5.0 feed → order book → matching engine → market maker. Replayed a full NASDAQ main-venue day (423M messages): the engine's book equals an independent ref…

    C++

  2. mpsc-queue mpsc-queue Public

    Vyukov MPSC queue in C++20 with a written memory-model proof. Beats mutex, spinlock and boost::lockfree by 3.7–4.3× (WSL2, median of 5 runs). seq_cst cost measured: 8.8 → 20.6 ns per push. CI on x8…

    C++ 5

  3. quant-signal-research quant-signal-research Public

    Pre-registered study of short-horizon BTCUSDT direction on 12 months of real 1-minute data. Purged walk-forward, lookahead tests, Bonferroni intervals. Result: a detectable signal (AUC 0.521 [0.511…

    Python

  4. lob-engine lob-engine Public

    C++20 limit order book and matching engine: SoA price levels, AVX2 level search (1.6×), no allocation or page faults on the matching path. Fill-for-fill equal to a reference model on 5×1M events. F…

    C++ 2 1

  5. fpga-itch-parser fpga-itch-parser Public

    Synthesizable Verilog ITCH 5.0 decoder. 600,006 checks on real NASDAQ main-venue messages against a third-party parser, 0 failures; 8/8 injected RTL bugs caught. Places and routes on a Lattice ECP5…

    Verilog

  6. udp-multicast-receiver udp-multicast-receiver Public

    MoldUDP64 / ITCH 5.0 multicast feed handler: gap detection and retransmit, A/B line arbitration, SO_TIMESTAMPING. ITCH layout pinned by golden vectors typed from the spec; detects the kernel silent…

    C++ 1