Research tools
record, replay, judge.
The tools that tell you whether anything on the desk works: record the pump.fun stream, replay it through the same code, tune parameters walk-forward, fit the model on your own journal, evolve strategies against random ones, score public price calls, and prove the journal was not edited.
01The report
npm run report
PnL, win rate and average return per venue and lane, the costs paid, a t-statistic per lane, exit-quality grades with advice, and the result without the luckiest trades. If the edge disappears when the top few trades are removed, it was luck. The same report is Telegram /report.
02Record the pump.fun stream
node src/cli.mjs record # record without trading; Ctrl+C to stop
node src/cli.mjs record --minutes 180 # keep each coin 3 hours (the revival lane needs old coins)
Recordings go to data/pump-events/, one file per day, the first 30 minutes of every coin by default. npm start records too (pump.record). A progress line is printed every 30 seconds. Needs Node 22.
03Replay
node src/cli.mjs replay # your recordings through the live PUMP code, every lane on its own
node src/cli.mjs replay --synthetic 500 # generated launches: checks the mechanics, not the market
node src/cli.mjs replay --out /tmp/rp # keep the journal and state
DASH_DATA=/tmp/rp/<replay folder> npm run dash # look at a kept replay in the dashboard
Replay runs the same PUMP code on a simulated clock and prints, for the whole run and per lane: trades, win rate, average, average without the top 3 %, PnL, maximum drawdown, profit factor, costs and the t-statistic. A * marks |t| > 1.96: the average return is unlikely to be zero. Anything else is not evidence yet. It also prints exit grades, exit reasons and the most common rejections. Add --set key=value to test a change (how).
04Sweep parameters walk-forward
node src/cli.mjs sweep # core pump.fun parameters
node src/cli.mjs sweep --lane moonshot # or graduation, revival, smart
The sweep tries every combination of a small grid, chooses on the older launches and judges on newer ones it has not seen, and says how many configurations it tried. It ends with either "The tuned parameters also win on unseen launches" or "does not hold up on unseen launches — keep the defaults". The result is saved to data/sweep.json. It never changes your config: apply a winner yourself, then keep measuring.
05Fit the model on your journal
npm run fit
Needs at least 30 closed trades with features. It trains p(win) on the older 70 % and tests on the newest 30 %. The model is saved to data/model.json only if it beats the base rate on the unseen trades; otherwise the prior stays. Restart the desk to use a saved model.
06Evolution lab
node src/cli.mjs evolve BTC 1h 180 # coin, candle interval, days, optional seed
Evolves simple strategies on Hyperliquid candles, judges them on the last 30 % they were not trained on, and compares the survival rate with random strategies passing the same test. It reports the probability of backtest overfitting and a deflated Sharpe per survivor, and warns when evolution barely beats random. Results go to data/evolve-<coin>-<interval>.json. A survivor is a candidate for more paper trading, nothing more.
07Calls ledger
Write down price predictions from X, Telegram or YouTube when they are made, and let the desk judge them on Hyperliquid hourly candles.
node src/cli.mjs calls add --author <name> --asset BTC --above 100000 --by 2026-11-15 --url <link>
node src/cli.mjs calls add --author <name> --asset ETH --zone 3000-3200 --by 2026-12-31 --made 2026-09-20
node src/cli.mjs calls
A call is --above, --below or --zone LO-HI, with a deadline (--by) and optionally when it was made (--made), when its window opens (--from), a source URL and a note. calls shows each as hit, miss, open or pending, and a scorecard per author. Open calls do not count until the deadline or the hit. Calls are stored in data/calls.json.
08Attested journal
node src/cli.mjs verify
Every journal row carries a hash of the previous row's hash plus the row itself. verify (or Telegram /verify) proves that no row was edited, inserted, removed or reordered, and state.json remembers the newest head so a cut-off tail is caught too. The console's health page runs the same check. It is evidence, not proof: whoever runs the desk runs the code.
✅ chain intact · head 3f9a…
09Other checks
node src/cli.mjs news: what the news agent sees right now, strongest first.node src/cli.mjs scan <address> [solana|bsc|base|ethereum]: token security report; an unknown field never passes.node src/cli.mjs leaders: score Hyperliquid leaderboard wallets for HL COPY (heavy; once a day).- Backtests for trend, leverage and funding: Trend, leverage & books.