WhiskyBot

market microstructure research, and a volatility harvesting trader, for a thin exchange

WhiskyBot was built to answer one question, what actually makes money on a thin exchange where the visible order book is mostly decoration, and to trade only once the recorded data gave an honest answer. Nothing here was trusted to theory. A collector records the order book, the trade tape, and prices on other venues, and every claim below came out of that data.

What it found

Market making earns the spread and hands it straight back in fees. The real inside spread on this venue is a fraction of the quoted one, so the quotes you see are decoration, and the fee lands on every fill. That is not a tuning problem, it is the structure of the place. Harvesting an asset's own volatility with a grid, bounded by a hard stop for a genuine collapse, is the first edge here that held up across every parameter and both halves of the sample tested.

secondsa probe one tick inside the quoted spread filled, while the wide quotes sat untouched
every stepthe grid edge stayed positive across every spacing swept, and both halves of the tape
~29 / daytimes the chosen band is crossed, so it round trips many times a day

How it got there

Probe orders placed one tick inside the quoted spread filled in seconds while the wide quotes sat untouched, so the real inside spread is a fraction of what the book displays. Markout, where price goes in the seconds after a fill, then measured how much of any captured spread survives contact with the flow. On some pairs it is badly adverse, a fill is on the wrong side of the next move by most of a percent, on a liquid major it is close to neutral.

Put those together with the fee charged on every fill and market making on this venue is break even to negative. So the search moved to the one thing a thin, choppy market gives away for free, its own oscillation, and to a strategy that pays the fee once per captured swing rather than on every quote update.

The grid, and its one safeguard

The grid rests a ladder of maker orders at a fixed step wider than the round trip fee, buys each rung it reaches, and sells one step up. The step is chosen against the fee, not by feel. Too narrow and a fixed toll eats a shrinking capture, too wide and the ladder rarely fills. The right band is roughly what the asset moves in an hour, so it is crossed many times a day, and it is picked from the recorded tape by sweeping every spacing and keeping the one that pays across both halves of the sample rather than the one that looks best on the whole.

The safeguard is the one thing a venue's own static grid bot cannot offer. If price falls a set fraction below its peak the grid stops buying, so a real collapse cannot keep averaging into a dead coin, while sells keep working so a bounce still flattens. Backtests show this leaves a choppy asset's edge intact, it never falls that far in normal chop, and caps a genuine trend to a bounded loss.

Fee aware

the step is sized against the real round trip fee, so each swing clears the toll rather than feeding it.

Robust, not fitted

the spacing is chosen for paying across both halves of the sample, not for the best single number.

Catastrophe stop

buys halt on a real collapse while sells keep working, capping a trend to a bounded loss.

Honest to holding

every result marks leftover inventory and reports against simply holding the asset.

Execution built for a hostile socket

A thin venue drops connections, delays replies, and closes idle sockets on a timer for maintenance. The execution layer assumes all of it. Orders survive a socket close, so on reconnect the book, not our memory, is the authority.

The reconnect diffs the orders we placed against the orders still resting. Any of ours that has vanished must have filled while we were disconnected, because maintenance drops the socket and not the book, so that fill is recovered to the ledger and the position from the order itself, even though its trade report never arrived. Balances are the final word on inventory and reconcile any residual. A cancel reconnects and logs in first, because a dropped socket is exactly when orders are resting unsupervised and the kill switch cannot depend on the connection that just failed.

Honest accounting

A self contained diary is rendered from the persisted fills and periodic balance snapshots, and its numbers are built to reconcile with the exchange's own trade info, line for line, because a diary that flatters is worse than none.

What the surveillance measures

Alongside the trader, a set of detectors describe order flow, they do not prove intent, and the distinction is kept explicit. Trade population split into size clusters, since a bot and a person leave different distributions. Resting order behaviour, attributing every reduction in a level to a fill or a cancel, since orders that vanish before they can be filled are the spoofing footprint. Recurring price and quantity signatures, which are a script working from fixed parameters. And cross venue premium, the direct test of whether a local price is being pushed anywhere the wider market disagrees with.

What is deliberately not here

Credentials live outside the code and are read from the environment, never sent anywhere but the exchange login. The live configuration, which pair is trading, at what step, and at what size, is not published. On a venue like this the copyable value is the running configuration and the calibration behind it, not the code. A grid is textbook. Knowing which asset, tuned how, from months of recorded flow, is the part worth keeping.

WhiskyBot is closed source.