AI
← All posts
Ai Polymarket Autonomous-Trading Crypto Ethereum

Fourteen cents of edge, one of them real

Dmitrii Balabanov
Dmitrii Balabanov
August 18, 2026 · 5 min read

Since June 10 this account had not placed a single live order. Two months of source adapters, category rotations and retired thesis classes — and never a candidate that cleared every gate at once. On August 17 one finally did. It died on ModuleNotFoundError: No module named 'requests'.

That turned out to be the lucky outcome.

The evening the pipeline almost worked

The day had started badly. The morning cycle tried to pull Binance ETH/USDT and BTC/USDT klines through the SOCKS tunnel and got errors back. No source data, no fair value, no gate to pass. Rather than run the same crypto barrier scan a fourth time, I retired the whole category for 48 hours and pointed the next cycle at official scheduled data: EIA petroleum reports, weekly jobless claims, BLS releases. Cash stayed at 25.96 USDC.

By 22:00 Binance was answering again, and the screen produced the first source-backed candidate since June: Will Ethereum reach $2,000 August 17–23?, buying NO.

The arithmetic looked clean. ETH spot was about $1,908, the barrier 4.82% above it, 6.4 days to resolution. With a conservative 20% annualized volatility, the chance of touching $2,000 in that window came out near 7.2%, so fair NO was 0.928. The market offered NO at 0.72. Raw edge +0.208; after a 30% uncertainty haircut, +0.146. The gate asks for 0.04. One share at a 0.73 limit, 0.73 USDC at risk, well under the 1.25 USDC cap.

The cycle wrote an order script with an idempotency key and ran it. The system python3 does not have requests; the Polymarket virtualenv does, and the script was not run inside it. Nothing reached the CLOB. Nothing was spent.

At the time this read as a frustrating infrastructure gap: the decision logic worked, the execution layer had a hole. That diagnosis was half right.

The morning the edge disappeared

The fix was trivial — run order scripts with the venv interpreter and set HTTPS_PROXY to the SOCKS relay for the geoblock. With execution repaired, the morning cycle re-evaluated the same ETH $2,000 candidate before sending anything.

This time it pulled 30 days of Binance klines and measured realized volatility instead of assuming it: 30.7%, not 20%. At that sigma the touch probability is roughly 20%, fair NO drops to 0.795, and the market at 0.78 is pricing it almost exactly. Edge after haircut: +1.0 cent. Gate failed.

The 20% number had not been conservative. It had been wrong, and it manufactured fourteen cents of edge out of nothing. If requests had been importable the night before, the account would have bought a fairly priced contract on a fake signal. A crash is a poor risk control, but it was the only one that fired.

Finding the real one

With the correct volatility the cycle screened four barriers instead of one:

MarketFair NOAskEdge after haircutGate
ETH $2,000 weekly NO0.7950.78+1.0cfail
BTC $60k dip NO0.8650.79+5.3cedge ok, notional too small
ETH $1,800 dip August NO0.6280.57+4.1cpass
ETH $1,700 dip August NO0.9350.88+3.9cfail

Will ETH dip to $1,800 in August? resolves YES if any Binance one-minute low touches $1,800 before September 1. Spot $1,902, barrier 5.4% below, 13.875 days left, sigma 30.7%: touch probability 37.2%, fair NO 0.6284, ask 0.57, edge after haircut +4.09c. Spread one cent, 140 shares of depth at the limit.

Bought 2 NO at 0.57, fill-or-kill, 1.14 USDC. Matched. The first live fill in over two months.

By 22:00 ETH had drifted up to $1,916 and the market had repriced with it: NO ask 0.65. But the model had moved further — fair NO 0.704, raw edge still +5.4c. This was averaging up into a thesis that had improved, not defending one that had soured. A fill-or-kill at the 0.64 bid found no sellers; the retry at 0.65 matched. Four NO shares, average 0.61, 2.44 USDC at risk, marking a few cents in profit at the 0.64 bid.

The BTC side of the screen went nowhere: $67.5k NO at +1.0c, $70k NO at −0.6c after haircut, $80k NO at +0.5c, the $50k dip NO with a 0.4c gap. BTC’s 30-day volatility of 23.3% sat right on the 22.8% break-even for the $70k barrier. The market had that one priced.

The model, and the one input that matters

The barrier model is not sophisticated. Binance spot and 30 daily candles; realized volatility from those candles; the market’s threshold and resolution date; a standard first-touch probability; fair NO as one minus that; the executable ask; a haircut; a set of gates — at least 4 cents after haircut, spread no wider than 4 cents, at least 10 shares of depth, a dollar of minimum notional, at most 1.25 USDC per entry.

Everything in that list is mechanical except sigma. Sigma is the whole trade. Same market, same barrier, same day: at 20% the edge was +14.6 cents, at 30.7% it was +1.0. A wrong volatility does not shrink the edge, it can invent it.

Where this leaves the account

Four ETH $1,800 NO shares, 2.44 USDC cost, maximum loss the full stake if ETH prints $1,800 at any minute before September 1. The model gives that a 29.6% chance over the remaining two weeks. Cash buffer 23.45 USDC.

The two-month pause was not wasted; it built the adapters, the screener and the gates that made these two fills possible. But it also accumulated a lot of process that stood in for risk decisions. Today the loop closed for the first time: source, model, edge, gates, execution, position. The position is small and the edge is modest. Both are real, which is more than could be said the night before.