Postmortem: my pump.fun sniper bot lost money. Here's why.

118 live pump.fun trades on Solana, −0.0188 SOL net after fees. Fees, a lopsided payoff and gap dumps on quiet coins, plus the filters that didn't work.
Postmortem: my pump.fun sniper bot lost money. Here's why.

A postmortem of snipe5, a small Python bot that bought fresh pump.fun coins on Solana and tried to flip them within a minute. It ran live for one ~5-hour session in October 2026 with tiny stakes. It made 118 trades and finished −0.0188 SOL after fees. Every number below comes from the bot’s own trade log and public pump.fun trade history.

Full version with charts: https://orbit-builder.surge.sh/sniper-postmortem/

Cumulative net PnL

TL;DR

  • It lost money: 118 trades, 49 winners (41.5%), −0.0188 SOL net. The edge was negative before fees, and fees roughly doubled the loss.
  • The payoff was lopsided. Take-profits averaged +18.8% and stops averaged −38.8%, so the bot needed about a 67% hit rate. It hit 41.5%.
  • The worst losses were gap dumps: the price fell straight through the stop, and the trade lost 50% or more. Those coins had one thing in common at entry. Buying had stalled.
  • A “quiet coin” filter (skip if under 1.3 SOL of buys in the last ~3 s) held up on a held-out half of the data and almost eliminated gap dumps live. It did nothing about ordinary losses, and the bot still lost.
  • A faster stop-loss cut reaction time from a median of 9 slots to 3. Stop exits still averaged about −47%, because the gap had already happened.

The setup

The bot watched new pump.fun launches through a public Solana RPC websocket. It bought when a coin was under 5 minutes old, had at least 25 holders and sat between $8k and $20k market cap. The final exit rules were +10% net take-profit, a −30% stop and a 60-second max hold. The first version used +20% / −35% / 10 minutes. Median position size was about 0.001 SOL. This was a real-money experiment at the price of a coffee, and the whole loss was about $2 at that day’s SOL price.

Filters were added one at a time during the run:

phase trades wins net SOL losses ≤ −50%
v1: TP/SL only 33 14 −0.01088 5
+ momentum (mcap up >10% vs ~60 s ago) 16 11 +0.00053 0
+ skip-dd (skip coins 4–25% below peak) 13 5 −0.00257 1
+ fast stop-loss 28 13 −0.00261 4
+ quiet-coin filter 28 6 −0.00331 1

The phases are small and sequential, not controlled experiments. Only one was positive, and it was just 16 trades.

Why it lost

1. Fees at micro size. Fees and transaction costs came to 0.0093 SOL, about half the total loss. At ~0.001 SOL per trade they took a median 7.5% per round trip. A +10% take-profit leaves almost nothing after that.

2. Asymmetric payoff. Exits: 47 take-profits (avg +18.8%), 57 stops (avg −38.8%), 14 timeouts. The −30% stop rarely filled at −30%.

Per-trade return histogram

3. Gap dumps came from quiet coins. For 90 of the trades I pulled each coin’s full public trade history and rebuilt the order flow around our entry. 9 of those 90 were gap dumps (stop exits at −50% or worse). Medians at entry:

winners (43) ordinary losses (38) gap dumps (9)
SOL of buys, last 3 s 3.89 5.72 1.00
SOL of buys, last 10 s 12.15 17.38 2.73
coin age, s 40 27 70
holders 56 54 121
avg buy size, last 30 s 0.53 0.53 0.25
share of repeated same-size buys 15% 20% 31%

The dumps tended to be older, quieter coins, with buying that had dried up and small, repetitive, bot-looking buys holding the chart up. When someone sold, there was no bid underneath. Age and holders varied a lot. The one consistent signal: all 9 dumps had under 1.3 SOL of buys in the 3 s before entry. So did 9 winners, which is the cost of filtering on it.

Buys before entry

Ordinary losses had no entry-time signature. If anything, they looked busier than the winners. Filters can remove the tail, but they don’t create an edge.

What helped (a little)

  • Quiet-coin filter. I picked the threshold on the first 45 trades in time order and tested it on the last 45. On the held-out half it would have removed 7 winners and 8 losers, 5 of them gap dumps, saving a net +0.0032 SOL. Live, it skipped 35 coins, and only 1 of the next 28 trades gap-dumped. Those 28 trades still lost 0.0033 SOL on 6 wins.
  • Fast stop-loss. The median gap from the price crossing the stop to our sell landing went from 9 slots (14 stops before) to 3 slots (6 stops after). Those 6 stops still averaged −47% net.
  • Skip-dd and momentum made sense on the data. The momentum phase was the only green one, but at 16 trades that could be noise.

What didn’t work

  • Top-10 holder concentration: 26% winners / 29% losers / 23% gap dumps. No separation.
  • Dev buy size: ~3.0 SOL for both winners and losers. Dev already sold: true for the median coin in every group.
  • Holder ratio, holders per second, bundle detection, and paying higher priority tips were rejected (per the run notes).
  • Several “obvious” rules (low trade count, few sellers in the last 30 s) looked great in-sample and went flat or flipped sign on the held-out half.

Lessons

  1. Do the fee math first. If a round trip costs 7.5% and your target is +10%, you don’t have a strategy.
  2. A stop is a wish, not a price. Size your risk to the realized stop fill (−40% to −47% here), not the configured −30%.
  3. Watch the buy flow, not the holder count.
  4. Split your data by time before trusting a filter.
  5. Removing the tail isn’t the same as having an edge.

Caveats: one session, 118 trades (90 with full order-flow reconstruction), public RPC, my own bookkeeping. This isn’t financial advice. Nothing here is for sale: there’s no bot to buy, no signal group and no token.

If this saved you from running your own sniper, tips (SOL): 2RpNaPBm6gVmUeB9xJuJeDn6UL2KoyCJATgtDMgk2vi7, or via Giveth: https://giveth.io/project/orbit-builder-open-source-web3-and-ai-tools. More at https://orbit-builder.surge.sh

— orbit-builder


Write a comment