Post-mortem

We built a pump.fun trading bot. The data told us to kill it.

A complete automated trading system, run on live memecoin data in paper mode, then shut down on purpose. Here is exactly what the numbers said.

93
trades
31%
win rate
-0.31◎
net P&L (paper)
$0
real money lost
The verdict

No edge. And it cannot be tuned into one.

We ran two strategy configurations and 93 real trades. Both lost money. Then we backtested the three most-cited "winning" fixes against the data. All three failed. The reason is structural, not a parameter.

A stop-loss cannot work on these coins. When they dump, the price gaps roughly 80% in a single tick, so a stop set at -18% fills at a median of -84%. There is no liquidity at the stop price. This is a property of the asset, not a setting.

What we built

A decoupled pipeline, not a script

An event-bus architecture in TypeScript, around 330 tests, with a hard and un-bypassable risk gate. Live trading stayed off the whole time and needed a manual code edit plus a runtime flag to enable. By design, no automated path could turn it on.

01 INGEST
Live stream
PumpPortal websocket, ~28 launches/min
02 FILTER · FREE
Cheap pass
Local ring-buffer signals reject >99%
04 DECIDE
Claude
BUY or SKIP, structured, rate-capped
05 RISK
Hard gate
Can only shrink size, never grow
06 EXIT
Mechanical
No model can hold or override a sell
The one clear win

The free pre-filter earned its keep

pump.fun launches around 28 tokens a minute. Enriching every one is how you light money on fire. A free local pre-filter rejected over 99% of candidates before a single paid call.

First-configuration snapshot. A second configuration added 55 more trades, for 93 total. The pre-filter pass rate held near 0.6% throughout.

Two configurations

We even tried fixing it. It got worse.

Cohort B entered earlier and exited faster, the deliberate experiment after Cohort A showed where the money leaked. Earlier entry raised the win rate, and lost more money.

Cohort A · "Survivor"

20-min entry · -35% stop
Trades38
Win rate26.3%
Net P&L-0.101◎
Expectancy-0.0027◎
Avg hold7.1 min

Cohort B · "Scalp"

4-min entry · -18% stop
Trades55
Win rate34.5%
Net P&L-0.209◎
Expectancy-0.0038◎
Avg hold2.4 min
The structural wall

Where the stop-loss goes to die

We logged the exact on-chain price path for every scalp trade. Here is every hard-stop exit. The dashed line is where the stop was set. The bars are where it actually filled.

Hard-stop fills vs. the -18% trigger
stop trigger (-18%) actual fill

17 hard stops. Median fill -84% against an -18% trigger. These coins do not slide through a stop. They gap from above the trigger straight to -80% or worse in one tick, because there is no order book at -18% to sell into.

Three fixes, three failures

Every "winning strategy" missed the point

We backtested the usual advice against the real trade data. Each one targeted the wrong layer.

Re-tighten the entry filter
Winners and losers were statistically indistinguishable on every captured feature. Dev-sold was zero on 35 of 38 trades. Volume-accelerating was true on 100%. No threshold helped.
Failed
Tighter stop-loss
The best case cut the loss about 37% but never went positive, and the result hinged on a single trade. See the chart above for why a tighter stop fills no better.
Failed
Take-profit ladder and moonbag
Marginally worse. There was no fat tail to capture. Of 55 scalp trades, only 2 reached 3x and none reached 5x. ~84% faded to flat almost immediately.
Failed
A lesson that cost $12

The wallet was never ours

We generated the trading wallet with a trading service's "generate wallet" button. That means the service generated and held the private key. It was drained from the first hour: a small amount siphoned to one address every 72 minutes, automated, for 9 days, starting essentially at funding.

The rule

A wallet you did not generate is not yours

Native SOL can only move with the private key. A "click to generate" wallet from any service means they hold your keys. Generate the keypair yourself, offline, on a clean device, and use non-custodial signing. Cost of this lesson: $12. Cost if we had funded it for live trading: a lot more.

What I would tell the next person

Five things, learned the cheap way

01
Build the free pre-filter first
It is the only part of this that is unambiguously correct, and it decides whether your cost structure survives.
02
Test fills, not triggers
On an illiquid asset a stop-loss is a label, not a guarantee. Log the real price path early.
03
The edge is not in the exit
We spent most of our effort there and proved it cannot be tuned. If an edge exists, it is upstream.
04
Let the data say no
The hardest discipline was pre-committing to a kill rule and honoring the negative result instead of moving the goalposts.
05
Self-custody, always
Never trade from a wallet a third party generated for you. Hold your own keys.
06
A negative result is a result
The bot did its job. It told the truth before any real money was at risk. That is a win.