Project 02

HFT research

Independent ResearcherIndependent Research

In one line

A paper on how high-frequency trading manipulation works and who pays for it, plus the detector I built to catch it. Published on Zenodo in October 2026.

Facts

Role
Independent Researcher
Where
Independent Research
When
Grades 11-12

What I did

I wanted to understand what high-frequency trading does to retail investors, the people buying a few shares at a time. So I read the research on how manipulation works, wrote it up, and built my own detector. It watches one-minute price bars and flags the minutes that look like momentum ignition. On 20 US stocks and funds it raised about five alerts per stock per day, and shuffled data raised a similar number, which I take to mean the alerts catch unusual trading rather than proof of manipulation. The paper is on Zenodo and the code is on GitHub.

How it was built

  1. Start in a notebook

    I computed three signals on one-minute price bars and combined them into a risk score, using simple rules and an Isolation Forest. I planted known events in the data to measure how accurate it was.

  2. Move it to a server

    The notebook's code became server/engine.py behind a FastAPI app. Every function takes its settings as arguments, so each request can use its own thresholds.

  3. Explain every flag

    The browser interface has Scan, Replay, Alerts, Accuracy and Guide tabs. Click an alert and the chart zooms in and tells you, in plain English, why it scored what it did.

  4. Keep it watching

    An always-on watcher knows NYSE hours, holidays and half days, keeps alert history in SQLite, and sends a push notification when a watched stock shows the pattern.

  5. Write it up

    The paper is called "High-Frequency Trading and Retail Investors: A Review of Manipulation Research and a Detection Model". I tested the detector on 20 US stocks and funds: about five alerts per stock per day, and a shuffled-data control gave a similar rate. It is on Zenodo under CC BY 4.0 (DOI 10.5281/zenodo.23669016).