Cross-sectional Z-score
N
42
τ
15m
r
4s
Snapshot  

Projects

Things I've built.

Two of these are live. The third is in forward testing on a demo account.

Forward test

MODEL040526

It shorts low-cap crypto pumps once they've run out of steam, and runs a small long book next to it that tends to be green on the days the short loses.

Most small coins fade after a big pump. The model looks for the ones suddenly trading around 6× their usual volume, climbing the liquidity ranks fast, and closing strong. It shorts them an hour after the daily close, once things have calmed down.

The long side is the same idea flipped. It rides the strong pumps, but only when BTC and ETH are both trending up, and it sizes down when things get wild. It's there so the two books cover each other's bad days.

It's in forward testing now on a demo account.

Combined book · 3× leverage · in-sample · Bybit · 2023-06 → 2026-06

Strategy 9.50× BTC 2.98× MU 15.5×

BEST MONTH +47.0% · WORST MONTH −7.4% · 22/32 months green

Yes, just holding Micron would have beaten this. That's one stock, picked with hindsight. The book got to 9.5× over hundreds of small trades.

9.50× In-sample · 3× leverage
−21% Worst drawdown

I wrote up the whole build in Seeking Alpha, including two months of dead ends and the look-ahead bug that faked my best curve.

Read Seeking Alpha →
Live

eBaySpy

Like Palantir, but for eBay. It watches the sellers you pick and messages you on Telegram the moment they list something.

You give it a list of eBay sellers. When one of them lists something, sells out or restocks, you get a message with the title, price, photo and a link to buy. It's all run from the chat: add a seller, remove one, change how often they're checked.

There are two lists. The watch list checks every seller on a steady cycle and reports everything. The observe list is for the few sellers you want to be first on, checked every few seconds.

It uses the official eBay API, so there's no scraping and nothing breaks when eBay changes the site. It's one Python process and a SQLite file, and it runs for weeks without me touching it.

Example alert · new listing from a tracked seller
How it works

Each observe check is one cheap API call per seller, and it only pulls full item details for listings it hasn't seen before. That's how it can check a seller every few seconds without burning through eBay's daily limit.

  • New sellers get their current stock logged silently, so you only hear about what they list next.
  • Sold alerts are double-checked with eBay first, so a glitch in search results doesn't send a false one.
  • Seen listings are kept in SQLite, so a restart never re-sends old ones.
  • It installs on a Mac as a background service that restarts itself, or on any cheap Linux server.

Python 3.11 with asyncio and httpx. Access is invite-only.

Live

Outlier Detector

Ranks a list of Bybit perpetuals against each other every 15 minutes and tells me which ones are pulling away.

I got sick of flicking between dozens of charts. I wanted one thing that keeps score for me and only speaks up when something actually matters.

Every 15 minutes it scores each coin on momentum against the rest of the list and sends the leaders to Telegram. It does two reads: one on the candle that's still forming, which is early and noisy, and one on closed candles, which is the one I trust.

It's a detector, not a trading system. I want to trust the signal before I build anything that trades on it.

Telegram confirmed summary from Outlier Detector showing regime, qualified signals, and ranked leaders.
Confirmed-cycle summary · live Telegram feed
How it works

It loads 15-minute history from Bybit over REST, then stays live on their WebSocket candle stream. Live and closed-candle prices are kept apart, so a half-formed candle never leaks into the history it actually ranks on.

  • Momentum is adjusted for each coin's own volatility, then z-scored across the whole list and clipped, so one mad print can't top the table.
  • Hurst is a hard filter. Strong momentum with nothing persistent under it gets dropped.
  • BTC's trend and a dominance proxy raise or lower the bar a coin has to clear, instead of blocking signals outright.
  • Every row it scores goes into SQLite, and a replay tool runs the real engine over recent history. 26 tests.

I wrote more about the decisions behind it in Philosophy and Design Choices.