<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Launch Tape]]></title><description><![CDATA[Launch Tape]]></description><link>https://launchtape.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sun, 25 Oct 2026 00:45:09 GMT</lastBuildDate><atom:link href="https://launchtape.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How to give your AI the right data]]></title><description><![CDATA[How to prompt ChatGPT, Claude or Cursor to build or test a trading bot on real files, and how to make it show its assumptions.]]></description><link>https://launchtape.hashnode.dev/give-your-ai-the-right-data</link><guid isPermaLink="true">https://launchtape.hashnode.dev/give-your-ai-the-right-data</guid><category><![CDATA[Solana]]></category><category><![CDATA[AI]]></category><category><![CDATA[trading, ]]></category><dc:creator><![CDATA[Launch Tape]]></dc:creator><pubDate>Wed, 14 Oct 2026 16:12:27 GMT</pubDate><content:encoded><![CDATA[<p>A lot of people now build their Solana bot with an AI doing most of the code. That works surprisingly well for the plumbing. Where it goes wrong is the testing: the AI happily writes a backtest, runs it on whatever data is handy (or invents some), and tells you the results look promising.</p>
<p>The fix is not a smarter AI. It is giving it the right data and asking the right questions. Here is how we do it.</p>
<h2>Start with real files, not descriptions</h2>
<p>If you describe your data in words ("I have trades with prices and times"), the AI fills the gaps with guesses about column names, units and time zones. Sometimes the guesses are right. Often they are quietly wrong, and the backtest still runs.</p>
<p>Give it the actual file, or at least the first few rows plus the schema. Real rows answer questions you did not think to ask: is the price in SOL or USD, is time in seconds or milliseconds, is there one row per trade or one per block.</p>
<p><strong>Takeaway:</strong> paste a sample of the data, not a summary of it.</p>
<pre><code>Here are the first 5 rows of trades.jsonl and the schema.
Before writing any code, tell me in one line each:
what one row means, the unit of every price, and the unit of time.
</code></pre>
<h2>Small files first</h2>
<p>Chat tools have upload size limits, and long files also eat the AI's working memory. Trade data gets big fast: a single full day of our graduation trades (October 12, 2026) is about 800 MB compressed. No chat window is going to read that.</p>
<p>So work in two steps. First, a small slice (a couple of hours, or one coin) that fits in the chat. Use it to get the code right and check a few trades by hand. Then run the same script on your own machine over the big files.</p>
<p><strong>Takeaway:</strong> use the chat to build and check the script; use your computer to run it at full size.</p>
<h2>Make it state its assumptions</h2>
<p>The single most useful line you can add to any prompt is: <em>"Before you run anything, list every assumption you are making."</em> Typical answers: fills at the last seen price, no fees, coins with missing data skipped.</p>
<p>Each of those is a choice. Some are fine. Some make the result useless. You cannot judge them if you never see them.</p>
<p><strong>Takeaway:</strong> an assumption you can see is one you can fix.</p>
<h2>Ask for honest fills, by name</h2>
<p>AI-written backtests nearly always fill at the signal's price, because that is the simplest code. Tell it not to, in plain words:</p>
<ul>
<li>every buy and sell fills at the end of the first block after the signal</li>
<li>fees and slippage on both sides</li>
<li>your trade size moves the pool's price</li>
<li>coins that never reached your entry are counted, not dropped</li>
</ul>
<p>Then ask it to run the same rules both ways, naive and honest, and print the two results side by side. If they are far apart, the naive one was flattering you. Our post on <a href="https://launchtape.io/blog/your-backtest-is-lying">backtests that lie</a> goes through each of these.</p>
<p><strong>Takeaway:</strong> if you do not ask for honest fills, you will not get them.</p>
<h2>A prompt skeleton</h2>
<p>Here is a short version you can adapt. Fill in the brackets.</p>
<pre><code>I'm testing a Solana memecoin bot's rules on real trade data.
Files: [file names], schema: [paste or attach].

RULES
- Entry: [e.g. buy 15 s after graduation]
- Exit: [e.g. sell at 3 min, or -20% from my entry]
- Size: [e.g. 0.1 SOL a trade]

HOW TO TEST
- Fill every signal at the end of the next block, never at its own price.
- Charge [my real costs] on the buy and on the sell.
- My size moves the pool price (use the pool's reserves).
- Count coins that never reached my entry; don't drop them.

BEFORE CODING: list every assumption you're making.
AFTER: print win rate, median and mean return a trade, total,
the 3 worst trades, and the same rules at signal price with no
costs, for comparison. Then a plain verdict, including how small
the sample is.
</code></pre>
<p>Our <a href="https://launchtape.io/test">Test your bot</a> page has a longer, complete version that already knows our file formats.</p>
<p><strong>Takeaway:</strong> a good prompt reads like a spec. If a stranger could not run your test from it, neither can the AI.</p>
<h2>Check one trade by hand</h2>
<p>When the results come back, pick one trade, open the raw rows for that coin, and follow it yourself: when the signal fired, which block the buy filled in, what it cost, when it sold. If you cannot match what the script says, something is off.</p>
<p><strong>Takeaway:</strong> one trade checked by hand is worth more than a hundred trusted blindly.</p>
<h2>The hopeful part</h2>
<p>An AI is a fast, tireless helper for this kind of work, as long as you hold it to the same standard you would hold a person. Better rules might exist for your bot. Give the AI real data and honest instructions, and it can help you find out.</p>
<p>If you want real files to start with, the <a href="https://launchtape.io/#datasets">free sample</a> is two hours of pump.fun graduations, small enough to try today.</p>
<hr />
<p><em>Originally published at <a href="https://launchtape.io/blog/give-your-ai-the-right-data">launchtape.io/blog</a>. We run Launch Tape: every pump.fun graduation on Solana, recorded trade by trade from the chain, as daily files. There is a free sample at <a href="https://launchtape.io">launchtape.io</a>.</em></p>
]]></content:encoded></item><item><title><![CDATA[The first 2 minutes after graduation]]></title><description><![CDATA[What happens right after a pump.fun coin graduates, why your bot's reaction time matters there, and how to measure your own latency.]]></description><link>https://launchtape.hashnode.dev/first-two-minutes-after-graduation</link><guid isPermaLink="true">https://launchtape.hashnode.dev/first-two-minutes-after-graduation</guid><category><![CDATA[Solana]]></category><category><![CDATA[trading, ]]></category><category><![CDATA[bots]]></category><dc:creator><![CDATA[Launch Tape]]></dc:creator><pubDate>Wed, 14 Oct 2026 16:09:11 GMT</pubDate><content:encoded><![CDATA[<p>If you are building a pump.fun bot, sooner or later you end up looking at graduation. It is the moment a coin fills its bonding curve and moves to a real pool, and a lot of bots are built around it. It is also one of the fastest, roughest moments in a coin's life.</p>
<p>This post is about what happens in those first couple of minutes, and the practical things that decide whether your bot is early, on time, or the exit liquidity for someone else.</p>
<h2>What graduation actually is</h2>
<p>On pump.fun, a new coin trades on a bonding curve: a price formula, not a pool. When enough SOL has gone in, the curve completes, and the coin "graduates" to a PumpSwap pool where it trades like any other token.</p>
<p>From a bot's point of view, three things change at once. There is now a pool with real reserves. Lots of people are watching the same event, because graduation is easy to detect. And everyone who bought on the curve now has a clear chance to sell into the new buyers.</p>
<p><strong>Takeaway:</strong> graduation is not a calm starting line. It is a crowded doorway.</p>
<h2>Big holders do not wait long</h2>
<p>Some of the wallets that bought on the curve hold a big share of the supply. When one of them sells hard, the price can fall a long way in one block.</p>
<p>We looked at this on our own recordings. Of the pump.fun graduates from October 10 to 12, 2026, 894 had a big-holder dump by our recorder's size rule in the first 10 minutes. The median time of that dump was <strong>2.2 minutes after graduation</strong>.</p>
<p>That is the median, so half came even sooner. If your bot needs a minute to notice the graduation, another minute to decide, and some seconds to land a transaction, it can arrive right as the selling starts.</p>
<p><strong>Takeaway:</strong> your whole plan, entry and exit, may have to fit inside a couple of minutes. Design for that from the start, not as a tweak later.</p>
<h2>Why reaction time matters more here than anywhere</h2>
<p>On a slow chart, a few seconds of delay costs you a little. Right after graduation, a few seconds can be the difference between buying before a dump and buying into one, or between selling at a stop and selling after the pool has been drained.</p>
<p>There are two separate delays, and it helps to measure them separately:</p>
<ol>
<li><strong>Seeing:</strong> how long between the graduation landing on chain and your bot knowing about it.</li>
<li><strong>Acting:</strong> how long between your bot deciding and its transaction landing in a block.</li>
</ol>
<p><strong>Takeaway:</strong> "my bot is fast" is not a measurement. Two numbers are.</p>
<h2>Websocket vs polling</h2>
<p>Many first bots poll: every few seconds, ask an API "anything new?". It is easy to write, and AI tools often suggest it. The cost is that, on average, you see every event half a polling interval late, plus the request time.</p>
<p>A websocket (or another streaming subscription) pushes events to you as they happen. It is a bit more work: you need to handle disconnects, reconnect, and notice gaps. But for anything that happens in the first two minutes, polling every few seconds throws away a real slice of the window.</p>
<pre><code class="language-python"># polling: you learn about an event up to POLL_SECONDS late
while True:
    for ev in api.get_new_graduations():
        handle(ev)
    time.sleep(POLL_SECONDS)

# streaming: events arrive when they happen
async for ev in ws.subscribe("graduations"):
    handle(ev)
</code></pre>
<p><strong>Takeaway:</strong> if your strategy lives in the first minutes, stream. Then log every disconnect, because a silent gap looks exactly like a quiet market.</p>
<h2>Measure your own latency</h2>
<p>You do not have to guess how slow your bot is. Log three timestamps for every trade:</p>
<ul>
<li>the block time of the event you reacted to (from the chain)</li>
<li>the time your bot received it (your clock)</li>
<li>the block time your transaction landed in (from the chain)</li>
</ul>
<pre><code class="language-python">seen_delay   = received_at - event_block_time
landed_delay = tx_block_time - received_at
</code></pre>
<p>Run it for a day, then look at the median and the slow tail, not the best case. Keep your server clock synced, or the numbers will lie to you.</p>
<p><strong>Takeaway:</strong> once you know your real delays, put them into your backtest. If your bot really lands six seconds after the signal, test entries at six seconds, not at zero.</p>
<h2>Then test the window honestly</h2>
<p>Knowing the window is short is only useful if your tests respect it. A backtest that fills at the graduation price, or checks prices every 30 seconds, will miss most of what happens in the first two minutes. You need every trade, block by block, for each coin, including the ugly ones.</p>
<p>The hopeful part: short windows are exactly where careful, honest testing can find things that lazier bots miss. Better rules might exist here. The way to find out is to replay them on what actually happened, with your real delay built in.</p>
<p>If you want to look at those first minutes yourself, the <a href="https://launchtape.io/#datasets">free sample</a> has two hours of graduations, trade by trade.</p>
<hr />
<p><em>Originally published at <a href="https://launchtape.io/blog/first-two-minutes-after-graduation">launchtape.io/blog</a>. We run Launch Tape: every pump.fun graduation on Solana, recorded trade by trade from the chain, as daily files. There is a free sample at <a href="https://launchtape.io">launchtape.io</a>.</em></p>
]]></content:encoded></item><item><title><![CDATA[Your backtest is lying: 5 things to fix before you trust it]]></title><description><![CDATA[Most first backtests of a memecoin bot look great because they test a bot that could never exist. Five fixes that make the numbers honest.]]></description><link>https://launchtape.hashnode.dev/your-backtest-is-lying</link><guid isPermaLink="true">https://launchtape.hashnode.dev/your-backtest-is-lying</guid><category><![CDATA[Solana]]></category><category><![CDATA[trading, ]]></category><category><![CDATA[Backtesting]]></category><dc:creator><![CDATA[Launch Tape]]></dc:creator><pubDate>Wed, 14 Oct 2026 16:04:49 GMT</pubDate><content:encoded><![CDATA[<p>You wrote a bot, maybe with ChatGPT, Claude or Cursor doing most of the typing. You ran it over some history and it made money. That is the most dangerous moment in the whole project.</p>
<p>A first backtest usually tests a bot that could never exist: one that buys at the exact price it saw, pays nothing to trade, and never moves the market. Real bots do none of that. Below are the five fixes we make before we believe any result, our own included.</p>
<h2>1. Fill at the next block, not at the signal price</h2>
<p>Your bot sees a price, decides to buy, signs a transaction, and that transaction lands in a later block. By then the price has moved. On fresh memecoins it usually moves against you, because other bots saw the same thing you did.</p>
<p>So the honest rule is simple: a signal at time T fills at the end of the first block <em>after</em> T. Never at the price that triggered it. The same goes for sells and stops: a stop that "triggers at -20%" fills wherever the price is one block later.</p>
<p><strong>Takeaway:</strong> if your backtest uses the signal's own price as the fill, it is grading you on a trade you could not have made.</p>
<pre><code class="language-python"># wrong: fill = price_at(signal_time)
# right: fill at the first block after the signal
fill_slot = next(s for s in slots if s.time &gt; signal_time)
fill_price = fill_slot.last_price
</code></pre>
<h2>2. Charge fees on both sides</h2>
<p>Every swap pays the pool's fee. On top of that you pay a priority fee to land quickly, and you lose a bit more to slippage. All of that happens on the way in <em>and</em> on the way out.</p>
<p>It sounds small per trade. But a strategy that aims for small, quick wins lives or dies on those few percent, because they come off every single round trip, win or lose.</p>
<p><strong>Takeaway:</strong> put a cost on the buy and a cost on the sell, and use real numbers from your own transactions, not a guess.</p>
<h2>3. Your size moves the pool</h2>
<p>A new coin's pool is shallow. If you buy with a meaningful amount of SOL, you push the price up as you buy, so your average fill is worse than the price you saw. When you sell, you push it down.</p>
<p>Most backtests ignore this and assume you can buy any amount at the quoted price. Use the pool's own maths instead: for a constant-product pool, the tokens you get for <code>x</code> SOL depend on the pool's reserves at that moment.</p>
<p><strong>Takeaway:</strong> test at the size you will actually trade. A rule that works at 0.01 SOL can fail at 1 SOL on the same coins.</p>
<h2>4. Count the coins that never filled</h2>
<p>This one is sneaky. If your entry is "buy 15 seconds after graduation", some coins will have no trades at all after 15 seconds, or the pool will be gone. If your code quietly skips those, fine. But if it skips coins <em>because they went badly</em> (no data after a crash, a missing price after a rug), your results only include the survivors.</p>
<p>The same thing happens when you test on a list of coins you picked later, like "coins that hit the trending page". Those coins already survived something.</p>
<p><strong>Takeaway:</strong> decide the list of coins <em>before</em> you look at outcomes, and report how many never reached your entry, as a separate number.</p>
<h2>5. Look at the gap, not just the result</h2>
<p>Once you have fixed the four things above, run your rules twice: once the naive way (signal price, no fees, no size impact) and once the honest way. The difference between the two runs is the part of your "edge" that was never really there.</p>
<p>Here is what that looked like for us. We took one simple rule set (buy 15 seconds after a pump.fun graduation, sell at 3 minutes or at -20%, 0.1 SOL a trade) and ran it on 67 coins from October 10, 2026, 14:00 to 16:00 UTC. The naive backtest showed <strong>+2.3% a trade</strong>. The same rules, filled a block late, with fees on both sides and the size moving the pool: <strong>-0.9% a trade</strong>. Same coins, same rules, opposite answer. The full method is on our <a href="https://launchtape.io/test">Test your bot</a> page.</p>
<p>That is two hours of data, so it does not tell you the rule is bad forever. It tells you that the first number was not a measurement of the rule at all.</p>
<p><strong>Takeaway:</strong> if your naive and honest runs are far apart, trust the honest one, and be suspicious of any idea that only works in the naive one.</p>
<h2>Why bother</h2>
<p>None of this is meant to talk you out of building. Better rules than ours might well exist. The point is to find out cheaply, on data, before the market finds out for you with real SOL.</p>
<p>A good habit: every time your AI writes or changes the backtest, ask it to list exactly how fills, fees, size and missing coins are handled. If it cannot tell you, the backtest is not done yet.</p>
<p>If you want to try this on real graduations, the <a href="https://launchtape.io/#datasets">free sample</a> has two hours of every trade, and <a href="https://launchtape.io/test">Test your bot</a> has a prompt that runs the honest version for you.</p>
<hr />
<p><em>Originally published at <a href="https://launchtape.io/blog/your-backtest-is-lying">launchtape.io/blog</a>. We run Launch Tape: every pump.fun graduation on Solana, recorded trade by trade from the chain, as daily files. There is a free sample at <a href="https://launchtape.io">launchtape.io</a>.</em></p>
]]></content:encoded></item></channel></rss>