<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bot LAB</title>
    <description>The latest articles on DEV Community by Bot LAB (@botlab).</description>
    <link>https://dev.to/botlab</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4176924%2Ff768f56f-00fb-4d05-983e-d608497a0de5.png</url>
      <title>DEV Community: Bot LAB</title>
      <link>https://dev.to/botlab</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/botlab"/>
    <language>en</language>
    <item>
      <title>Paper Trading Crypto Futures: How to Make It Honest</title>
      <dc:creator>Bot LAB</dc:creator>
      <pubDate>Mon, 02 Nov 2026 04:06:22 +0000</pubDate>
      <link>https://dev.to/botlab/paper-trading-crypto-futures-how-to-make-it-honest-45e0</link>
      <guid>https://dev.to/botlab/paper-trading-crypto-futures-how-to-make-it-honest-45e0</guid>
      <description>&lt;p&gt;Paper trading crypto futures means running a strategy or bot with simulated money on real market prices, so you can see how it behaves before risking capital. It is worth doing, but only if the simulation includes fees, slippage, funding payments and liquidation rules. Without those, a paper result will usually look much better than the same strategy would look live.&lt;/p&gt;

&lt;p&gt;This guide shows how to set up an honest futures paper test, what to measure, and how to judge the result without fooling yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why paper trading crypto futures is harder than spot
&lt;/h2&gt;

&lt;p&gt;Spot paper trading is simple: you buy, hold, and sell. Perpetual futures ("perps") add four costs and risks that many paper engines skip or simplify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Funding payments.&lt;/strong&gt; Perps charge or pay funding at set intervals. A bot that holds positions for hours or days can pay a meaningful amount here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leverage and liquidation.&lt;/strong&gt; A paper engine that never liquidates you will hide your worst outcomes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Taker fees on both sides.&lt;/strong&gt; Many bots use market orders. Fees are charged on the full position size, not on your margin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slippage.&lt;/strong&gt; Simulated fills at the last price ignore the spread and the order book, especially on fast candles and small coins.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your paper tool ignores any of these, treat its numbers as an upper bound, not an estimate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paper trading crypto futures: a setup checklist
&lt;/h2&gt;

&lt;p&gt;Before you start a paper run, decide what it must model. A good futures paper test should:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use the exchange's real fee schedule&lt;/strong&gt; for your account tier, maker and taker separately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add slippage per side.&lt;/strong&gt; Even a small assumption (for example 0.02–0.10% per side, depending on the coin and order size) is better than zero.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apply funding at the real intervals&lt;/strong&gt; using historical or live funding rates for that contract.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calculate a liquidation price&lt;/strong&gt; for every position from your leverage and the maintenance margin rule, and close the trade if price touches it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use candle data the bot could actually see.&lt;/strong&gt; Signals must use closed candles only, or you get look-ahead bias. See &lt;a href="https://botlab.org.uk/learn/how-to-detect-look-ahead-bias-in-your-own-backtest" rel="noopener noreferrer"&gt;how to detect look-ahead bias&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log every trade&lt;/strong&gt;: entry, exit, size, fee, funding, and the reason for exit.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Decide your success rules before you start
&lt;/h3&gt;

&lt;p&gt;Write down, in advance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How many trades you need before you judge the result (more on this below).&lt;/li&gt;
&lt;li&gt;The maximum drawdown you would accept.&lt;/li&gt;
&lt;li&gt;What would make you stop the test early.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Setting the rules after you see the results is one of the most common ways traders talk themselves into a weak strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example: the paper vs live trading gap
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Illustration only. These are made-up numbers to show the arithmetic. They are not results from any real bot.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Imagine a bot that opens 100 trades on a perp. Each trade uses 1,000 USDT margin at 5x leverage, so each position is 5,000 USDT notional. A basic paper engine (no costs) reports an average gain of +0.30% of notional per trade.&lt;/p&gt;

&lt;p&gt;| Item | Per trade | 100 trades | |---|---|---| | Gross paper result (+0.30% × 5,000) | +15.00 USDT | +1,500 USDT | | Taker fees, assumed 0.055% per side (0.11% round trip) | −5.50 USDT | −550 USDT | | Slippage, assumed 0.05% per side (0.10% round trip) | −5.00 USDT | −500 USDT | | Funding, assumed 2 intervals × 0.01% paid | −1.00 USDT | −100 USDT | | &lt;strong&gt;Net after costs&lt;/strong&gt; | &lt;strong&gt;+3.50 USDT&lt;/strong&gt; | &lt;strong&gt;+350 USDT&lt;/strong&gt; |&lt;/p&gt;

&lt;p&gt;In this illustration, costs remove about 77% of the gross result. A small change in assumptions (say, slippage of 0.08% per side instead of 0.05%) would turn the net result close to zero. That is the paper vs live trading gap in one table.&lt;/p&gt;

&lt;p&gt;Two lessons follow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Costs scale with notional, not margin.&lt;/strong&gt; Leverage makes every fee and slippage figure bigger relative to your capital.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thin edges are fragile.&lt;/strong&gt; If a strategy only survives with optimistic cost assumptions, it probably will not survive live.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more on how funding interacts with strategy rules, see &lt;a href="https://botlab.org.uk/learn/do-funding-rate-and-open-interest-filters-improve-a-crypto-bot" rel="noopener noreferrer"&gt;do funding rate and open interest filters improve a crypto bot&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to measure during a futures paper test
&lt;/h2&gt;

&lt;p&gt;Win rate on its own tells you little. Track these together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Number of trades.&lt;/strong&gt; Small samples can look great by luck. Our guide on &lt;a href="https://botlab.org.uk/learn/how-many-trades-does-a-backtest-need" rel="noopener noreferrer"&gt;how many trades a backtest needs&lt;/a&gt; covers sample size in detail.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Average result per trade after costs&lt;/strong&gt;, in R (multiples of the planned risk) or in % of notional.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Profit factor&lt;/strong&gt;: gross wins divided by gross losses, after costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maximum drawdown&lt;/strong&gt;, measured from peak equity, including open-position losses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Liquidations and near-liquidations.&lt;/strong&gt; Even one liquidation in a paper test is a serious warning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Funding share.&lt;/strong&gt; What share of total costs came from funding? A high share means holding time matters more than you thought.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Market exposure.&lt;/strong&gt; If the bot is long most of the time in a rising market, its result may just be market direction (beta), not skill.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Compare paper fills with real prices
&lt;/h3&gt;

&lt;p&gt;If you can, sample some paper trades and compare the simulated fill with what the order book actually offered at that time. If paper fills are consistently better, raise your slippage assumption.&lt;/p&gt;

&lt;h2&gt;
  
  
  How long should you paper trade futures?
&lt;/h2&gt;

&lt;p&gt;There is no fixed number of days. What matters is the number of trades and the variety of market conditions. A bot that trades twice a week needs months to show anything; a bot that trades ten times a day may reach a useful sample sooner, but it also pays far more in fees.&lt;/p&gt;

&lt;p&gt;A practical approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run until you reach your pre-set trade count.&lt;/li&gt;
&lt;li&gt;Make sure the period includes at least one strong move and one choppy, sideways stretch.&lt;/li&gt;
&lt;li&gt;Judge the result only after costs, and only against the rules you wrote down at the start.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How we judge paper results
&lt;/h2&gt;

&lt;p&gt;At BOTLAB, a bot is only marked "ready for micro live" after it passes 6 statistical gates (G1–G6), defined on the site. Most bots do not pass: of 221 bots tracked, 1 currently has that status and 219 are marked not ready.&lt;/p&gt;

&lt;p&gt;Even a bot that passes needs care. In our published paper trading results, mr4h/long recorded 138 trades over 78 days (16 Aug to 2 Nov 2026, simulated) with a 72.5% win rate and passed all 6 gates, and our verdict is still "sample too small to conclude". That is the standard we suggest for your own tests: a good-looking number is a reason to keep testing, not a reason to go live. You can see how results are tracked on the &lt;a href="https://botlab.org.uk/platform" rel="noopener noreferrer"&gt;platform page&lt;/a&gt;, and recent notes in Lab News such as &lt;a href="https://botlab.org.uk/news/49" rel="noopener noreferrer"&gt;Fees first&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you already have trade logs from your own bot, you can run them through our free tool, &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;, to see how the numbers look after a basic statistical check.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes in futures paper trading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Testing at high leverage "because it's paper".&lt;/strong&gt; Paper trading should match the leverage you would actually use, or the test means nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ignoring funding on long holds.&lt;/strong&gt; Swing-style bots on perps can pay funding many times per trade.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restarting the test after a bad week.&lt;/strong&gt; Resetting erases the drawdowns you most need to see.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Changing parameters mid-test.&lt;/strong&gt; Each change starts a new test. Keep a log of every version.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treating paper as proof.&lt;/strong&gt; Paper trading removes real execution, queue position and emotional pressure. Live results can be worse.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can I paper trade crypto futures for free?
&lt;/h3&gt;

&lt;p&gt;Yes. Many exchanges offer a testnet or demo mode for perps, and several charting and research platforms offer simulated accounts. Check whether the tool models funding, fees, slippage and liquidation before trusting its numbers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I paper trade crypto perps through an API?
&lt;/h3&gt;

&lt;p&gt;Often, yes. Exchange testnets usually expose the same API as the live venue, which lets you test a bot's order logic end to end. Testnet prices and liquidity can differ from the live market, so compare fills against live data where possible. When you later connect any bot to a live account, use a trade-only API key with withdrawals off and IP restriction on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is TradingView paper trading good enough for futures bots?
&lt;/h3&gt;

&lt;p&gt;It is useful for practising manual entries and checking signals on charts. For bot testing, check whether it charges funding and applies realistic fees and slippage. If it does not, add those costs yourself using a spreadsheet like the table above.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does bot trading work if the paper test is positive?
&lt;/h3&gt;

&lt;p&gt;A positive paper test is one piece of evidence, not proof. It needs enough trades, realistic costs, a period with mixed market conditions, and a result that does not depend on market direction alone. Many strategies that look good on paper fail live. See &lt;a href="https://botlab.org.uk/learn/crypto-trading-bot-backtesting-honest-guide" rel="noopener noreferrer"&gt;crypto trading bot backtesting: an honest how-to guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Paper trading crypto futures is only meaningful if it models fees, slippage, funding and liquidation.&lt;/li&gt;
&lt;li&gt;Costs scale with notional size, so leverage magnifies them.&lt;/li&gt;
&lt;li&gt;Set trade count, drawdown limits and stop rules before you start.&lt;/li&gt;
&lt;li&gt;Judge results after costs, on enough trades, across different market conditions.&lt;/li&gt;
&lt;li&gt;A strong paper result means "keep testing", not "go live".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not available in restricted jurisdictions (see the Service Agreement). You trade with your own exchange account; BOTLAB never holds funds.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Paper trading results are simulated. Past results don't predict future results. Crypto trading can lose money, including all capital. Not financial advice.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Want these checks run on your own strategy? See the &lt;a href="https://botlab.org.uk/audit" rel="noopener noreferrer"&gt;strategy and backtest audit&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://botlab.org.uk/learn/paper-trading-crypto-futures-honest-guide" rel="noopener noreferrer"&gt;BOTLAB&lt;/a&gt;. Score your own bot's trade log free: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>trading</category>
      <category>crypto</category>
      <category>datascience</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Crypto Trading Bots That Work: How to Tell Honestly</title>
      <dc:creator>Bot LAB</dc:creator>
      <pubDate>Fri, 30 Oct 2026 04:06:22 +0000</pubDate>
      <link>https://dev.to/botlab/crypto-trading-bots-that-work-how-to-tell-honestly-577j</link>
      <guid>https://dev.to/botlab/crypto-trading-bots-that-work-how-to-tell-honestly-577j</guid>
      <description>&lt;p&gt;People searching for "crypto trading bots that work" usually want a name, but no bot "works" in general. A bot only works if it shows a measurable edge after fees and slippage, over enough trades, in conditions it did not see during design, and most bots fail that test. This guide shows you how to run that test yourself, so you can judge any bot, including one you built, bought or found online.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "a crypto trading bot that works" actually means
&lt;/h2&gt;

&lt;p&gt;A bot that works is not one with a nice screenshot or a high win rate. It is a bot whose results survive four questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Is there enough data?&lt;/strong&gt; A few dozen trades can look brilliant by pure luck.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does it survive real costs?&lt;/strong&gt; Fees, slippage and funding payments eat small edges first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is it more than market beta?&lt;/strong&gt; A long-only bot in a rising market can look clever while simply riding the trend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does it hold up forward?&lt;/strong&gt; Results on data the bot was never tuned on matter far more than the backtest.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a bot cannot answer all four with evidence, you do not know whether it works. That is a fine place to be. It means you keep testing instead of risking capital.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Check the sample size before anything else
&lt;/h2&gt;

&lt;p&gt;Small samples are the most common reason people think a bot works when it does not. With 30 trades, a strategy with zero edge can easily show a 60% win rate.&lt;/p&gt;

&lt;p&gt;Practical rules of thumb:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under 50 trades: treat results as anecdotes.&lt;/li&gt;
&lt;li&gt;100–300 trades: you can start to see patterns, but confidence intervals are still wide.&lt;/li&gt;
&lt;li&gt;Several hundred trades across different market regimes (trend, range, high volatility): now the numbers begin to mean something.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Days matter as well as trades. A bot that made 300 trades in one week has seen one market regime. For more detail, see &lt;a href="https://botlab.org.uk/learn/how-many-trades-does-a-backtest-need" rel="noopener noreferrer"&gt;How Many Trades Does a Backtest Need?&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Put real costs into every result
&lt;/h2&gt;

&lt;p&gt;Many bots that "work" in a backtest are simply ignoring costs. Add all of these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trading fees&lt;/strong&gt; on both entry and exit (taker fees if the bot uses market orders).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slippage&lt;/strong&gt;: the gap between the price the bot wanted and the price it got. It grows in thin markets and fast moves.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Funding payments&lt;/strong&gt; on perpetual futures, which can run for or against you every few hours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spread&lt;/strong&gt; on less liquid pairs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scalping and high-frequency bots are hit hardest, because costs are paid on every trade while the edge per trade is tiny.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example: why a 70% win rate can still lose
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The numbers below are a made-up illustration, not BOTLAB results and not results of any real bot.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Imagine a bot with these backtest stats over 100 trades:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Win rate: 70%&lt;/li&gt;
&lt;li&gt;Average win: +0.8%&lt;/li&gt;
&lt;li&gt;Average loss: −1.6%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Before costs&lt;/strong&gt; (simple sum, ignoring compounding):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wins: 70 × 0.8% = +56%&lt;/li&gt;
&lt;li&gt;Losses: 30 × 1.6% = −48%&lt;/li&gt;
&lt;li&gt;Gross result: &lt;strong&gt;+8%&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now add realistic costs per round trip:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fees: 0.11% (0.055% each side)&lt;/li&gt;
&lt;li&gt;Slippage: 0.10% (0.05% each side)&lt;/li&gt;
&lt;li&gt;Total: 0.21% per trade × 100 trades = &lt;strong&gt;−21%&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Net result: +8% − 21% = −13%.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The high win rate hid a poor ratio of average win to average loss, and costs did the rest. This is why you should judge a bot on expectancy and profit factor after costs, not on win rate alone. See &lt;a href="https://botlab.org.uk/learn/profit-factor-vs-win-rate-trading-bots" rel="noopener noreferrer"&gt;Profit Factor vs Win Rate for Trading Bots&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Separate edge from market beta
&lt;/h2&gt;

&lt;p&gt;If Bitcoin rose strongly during the test period, almost any long-biased bot looks good. Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How did the bot do compared with simply holding the asset over the same period?&lt;/li&gt;
&lt;li&gt;Did it trade both directions, or only long?&lt;/li&gt;
&lt;li&gt;How did it behave in the falling and sideways parts of the test?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If returns track the market almost one-to-one, the bot is mostly giving you market exposure with extra fees. That is not an edge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Check for overfitting
&lt;/h2&gt;

&lt;p&gt;A bot with many tunable parameters can be fitted to almost any history. Warning signs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Results collapse when you change a parameter slightly (for example, a 20-period moving average works but 18 and 22 do not).&lt;/li&gt;
&lt;li&gt;The developer tested hundreds of variants and shows you only the best one.&lt;/li&gt;
&lt;li&gt;Performance is concentrated in a few huge trades.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tools that help: walk-forward testing, out-of-sample periods, and statistics that adjust for how many variants were tried, such as the &lt;a href="https://botlab.org.uk/learn/deflated-sharpe-ratio-explained" rel="noopener noreferrer"&gt;deflated Sharpe ratio&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Close the paper vs live trading gap
&lt;/h2&gt;

&lt;p&gt;A backtest is a model. Paper trading on live candles is the next step, because it exposes problems a backtest hides: missed fills, late signals, API errors and data gaps. Paper trading uses simulated money at real prices, so it is still not live, but it is a much more honest filter than a backtest.&lt;/p&gt;

&lt;p&gt;When you finally compare paper and live, expect live to be somewhat worse. The size of that gap tells you how realistic your cost assumptions were.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Look at drawdown, not just return
&lt;/h2&gt;

&lt;p&gt;Before trusting any bot, find:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Maximum drawdown&lt;/strong&gt;: the largest peak-to-trough fall in equity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drawdown duration&lt;/strong&gt;: how long it took to recover.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Worst losing streak&lt;/strong&gt;: how many losses in a row.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then ask whether you could sit through that without switching the bot off at the worst moment. A strategy you abandon mid-drawdown does not work for you, whatever the backtest says.&lt;/p&gt;

&lt;h2&gt;
  
  
  Crypto trading bots that work: red flags to avoid
&lt;/h2&gt;

&lt;p&gt;Walk away, or at least dig much deeper, if you see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Promises of fixed monthly returns or "guaranteed" profit.&lt;/li&gt;
&lt;li&gt;Results with no trade count, no dates and no costs.&lt;/li&gt;
&lt;li&gt;Only screenshots, no exportable trade log.&lt;/li&gt;
&lt;li&gt;Pressure to deposit funds with the bot provider rather than using your own exchange account.&lt;/li&gt;
&lt;li&gt;Requests for API keys with withdrawal permission. A bot needs trade-only keys, with withdrawals off and IP restriction on.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What honest results look like in practice
&lt;/h2&gt;

&lt;p&gt;At BOTLAB, a bot is only labelled "ready for micro live" after passing all 6 statistical gates (G1–G6), defined on the site. Most bots do not pass.&lt;/p&gt;

&lt;p&gt;As of 30/10/2026, BOTLAB tracks 212 bots in paper trading (simulated money, real prices): 1 is marked ready for micro live and 211 are not ready. The one that passed, mr4h/long, has 124 paper trades over 74 days (16/08/2026 to 29/10/2026) with a 71.0% win rate, and our own verdict is still "sample too small to conclude". Three Atlas trend bots, with 224–359 paper trades each over 78 days (08/08/2026 to 25/10/2026), passed only 2 of 6 gates, with the verdict "market beta, no proven edge". Publishing the losers is part of the method; see &lt;a href="https://botlab.org.uk/news/42" rel="noopener noreferrer"&gt;Day one: read the losers too&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That ratio is the honest answer to the search: bots that clearly work are rare, and even a bot that passes every test still needs forward data. You can read more about how bots are tested and monitored on the &lt;a href="https://botlab.org.uk/platform" rel="noopener noreferrer"&gt;platform page&lt;/a&gt;. Not available in restricted jurisdictions (see the Service Agreement). You trade with your own exchange account; BOTLAB never holds funds.&lt;/p&gt;

&lt;p&gt;If you have your own bot's trade history, you can run a first sanity check with the free tool: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A quick checklist you can use today
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;At least a few hundred trades across more than one market regime?&lt;/li&gt;
&lt;li&gt;Fees, slippage and funding included?&lt;/li&gt;
&lt;li&gt;Compared with simply holding the asset?&lt;/li&gt;
&lt;li&gt;Tested out of sample or walk-forward?&lt;/li&gt;
&lt;li&gt;Paper traded on live candles before any real money?&lt;/li&gt;
&lt;li&gt;Max drawdown you could actually live with?&lt;/li&gt;
&lt;li&gt;Trade-only API key, withdrawals off?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If any answer is "no" or "I don't know", the bot has not yet shown that it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Are crypto trading bots worth it?
&lt;/h3&gt;

&lt;p&gt;They can be useful for executing rules consistently and testing ideas, but that is different from being profitable. Whether one is worth it depends on evidence: trade count, costs, drawdown and forward results. Without that, you are paying for automation, not an edge. See also &lt;a href="https://botlab.org.uk/learn/is-trading-bot-profitable-how-to-test" rel="noopener noreferrer"&gt;Is a Trading Bot Profitable?&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trading bot vs human: who actually wins?
&lt;/h3&gt;

&lt;p&gt;Neither wins by default. Bots are faster and do not panic, but they follow rules blindly when market conditions change. Humans adapt but break their own rules. The fair comparison is the same strategy, the same costs and the same period, judged on risk-adjusted results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is paper trading crypto useful before going live?
&lt;/h3&gt;

&lt;p&gt;Yes. Paper trading on live prices catches execution problems, signal delays and unrealistic cost assumptions that backtests miss. It does not include real slippage or emotional pressure, so treat it as a filter, not proof.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a realistic trading bot success rate?
&lt;/h3&gt;

&lt;p&gt;There is no fixed figure. A win rate means little without the average win, average loss and costs. Read &lt;a href="https://botlab.org.uk/learn/trading-bot-success-rate-explained" rel="noopener noreferrer"&gt;Trading Bot Success Rate: What the Number Really Means&lt;/a&gt; for how to interpret it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No bot "works" in general; it either shows a tested edge after costs or it does not.&lt;/li&gt;
&lt;li&gt;Check sample size, real costs, market beta and overfitting before trusting any result.&lt;/li&gt;
&lt;li&gt;A high win rate can still lose money once fees and slippage are included.&lt;/li&gt;
&lt;li&gt;Paper trade on live candles before risking capital, and expect live results to be worse.&lt;/li&gt;
&lt;li&gt;Use trade-only API keys with withdrawals off, and avoid anyone promising fixed returns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Paper trading results are simulated. Past results don't predict future results. Crypto trading can lose money, including all capital. Not financial advice.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Want these checks run on your own strategy? See the &lt;a href="https://botlab.org.uk/audit" rel="noopener noreferrer"&gt;strategy and backtest audit&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://botlab.org.uk/learn/crypto-trading-bots-that-work-how-to-tell" rel="noopener noreferrer"&gt;BOTLAB&lt;/a&gt;. Score your own bot's trade log free: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>trading</category>
      <category>crypto</category>
      <category>statistics</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Solana Trading Bot: What to Backtest First</title>
      <dc:creator>Bot LAB</dc:creator>
      <pubDate>Wed, 28 Oct 2026 04:06:22 +0000</pubDate>
      <link>https://dev.to/botlab/solana-trading-bot-what-to-backtest-first-5hjk</link>
      <guid>https://dev.to/botlab/solana-trading-bot-what-to-backtest-first-5hjk</guid>
      <description>&lt;p&gt;Before you run a trading bot on Solana, backtest three things first: whether the strategy survives realistic fees, slippage and funding, whether it holds up across different volatility regimes, and whether it has enough trades to mean anything. A SOL bot that looks good on a clean chart often fails one of these tests, so check them before you spend time on settings.&lt;/p&gt;

&lt;p&gt;Solana is getting a lot of attention today, and attention like this often draws new bot users. This guide does not predict where SOL goes next. It shows how to test a bot on a coin that is getting a lot of attention, so you can judge it on evidence instead of excitement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Solana needs its own backtest
&lt;/h2&gt;

&lt;p&gt;A strategy that worked on BTC will not automatically work on SOL. Three differences matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Higher volatility.&lt;/strong&gt; Altcoins like SOL usually move more than BTC in percentage terms. Stops get hit more often, and leverage hurts faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Beta to BTC.&lt;/strong&gt; SOL often moves with BTC, but more sharply. A bot that "wins" on SOL may simply be riding BTC's direction with extra risk on top. That is market beta, not an edge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attention spikes.&lt;/strong&gt; When a coin trends, spreads, funding rates and order-book depth can change quickly. A backtest built on quiet weeks may not describe a busy one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So treat a SOL bot as a new strategy, even if the logic was copied from a BTC bot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Price in every cost
&lt;/h2&gt;

&lt;p&gt;Most bot backtests fail here. Gross results ignore what you actually pay.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trading fees
&lt;/h3&gt;

&lt;p&gt;Use your exchange's real taker and maker fees for USDT perpetuals, and count both entry and exit. If your bot uses market orders, assume taker fees on both sides.&lt;/p&gt;

&lt;h3&gt;
  
  
  Slippage
&lt;/h3&gt;

&lt;p&gt;Your fill price is rarely the candle close. Model slippage as a percentage per side and make it pessimistic. Then rerun with double that slippage. If the result collapses, the edge was too thin to be real.&lt;/p&gt;

&lt;h3&gt;
  
  
  Funding
&lt;/h3&gt;

&lt;p&gt;On perpetual futures, longs and shorts pay each other funding, usually every 8 hours. Funding can rise during trending periods. A bot that holds positions for days can lose a noticeable share of its gross result to funding alone. Use historical funding data for SOL perps, not a flat guess.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Split the history into regimes
&lt;/h2&gt;

&lt;p&gt;A single backtest number hides how the bot behaved in different market conditions. Cut your SOL history into periods and test each one separately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Strong uptrend&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strong downtrend&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sideways and choppy&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-volatility spikes&lt;/strong&gt; (days when SOL or BTC moved sharply)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A trend-following bot will often look good in the first two and bleed in the third. A mean-reversion bot is often the opposite. Neither is "bad", but you need to know which conditions the bot depends on.&lt;/p&gt;

&lt;p&gt;Also compare the bot to simply holding SOL over the same period. If the bot only makes money when SOL rises, and loses when SOL falls, it may be giving you leveraged exposure to SOL rather than a strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Check the sample size
&lt;/h2&gt;

&lt;p&gt;Twenty trades on a trending coin prove very little. Results from small samples swing wildly by chance. As a rough rule, you want enough trades across several regimes before drawing conclusions. We go deeper on this in &lt;a href="https://botlab.org.uk/learn/how-many-trades-does-a-backtest-need" rel="noopener noreferrer"&gt;How Many Trades Does a Backtest Need?&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you tested many parameter combinations to find the "best" one, the best result is inflated by luck. The &lt;a href="https://botlab.org.uk/learn/deflated-sharpe-ratio-explained" rel="noopener noreferrer"&gt;Deflated Sharpe Ratio&lt;/a&gt; is one way to adjust for this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Rule out backtest errors
&lt;/h2&gt;

&lt;p&gt;Before trusting any number, check for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Look-ahead bias:&lt;/strong&gt; the bot uses information it could not have known at the time (for example, a candle's close before it closed). See &lt;a href="https://botlab.org.uk/learn/how-to-detect-look-ahead-bias-in-your-own-backtest" rel="noopener noreferrer"&gt;How to Detect Look-Ahead Bias in Your Own Backtest&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Survivorship bias:&lt;/strong&gt; testing only on coins that are popular today. SOL is trending now; that tells you nothing about how the bot would have picked coins in the past.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unrealistic fills:&lt;/strong&gt; limit orders assumed to fill whenever price touches them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Worked example: how costs change a SOL bot
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Illustration only. These are made-up numbers to show the arithmetic. They are not BOTLAB results and not a forecast for SOL.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Imagine a SOL perpetual bot with this backtest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;80 trades&lt;/li&gt;
&lt;li&gt;Average gross result: &lt;strong&gt;+0.35% per trade&lt;/strong&gt; (on position size)&lt;/li&gt;
&lt;li&gt;Average holding time: 16 hours&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now add costs per round trip:&lt;/p&gt;

&lt;p&gt;| Cost | Per trade | |---|---| | Fees (0.055% taker × 2 sides) | 0.11% | | Slippage (0.05% × 2 sides) | 0.10% | | Funding (0.01% per 8h × 2 periods, if paying) | 0.02% | | &lt;strong&gt;Total cost&lt;/strong&gt; | &lt;strong&gt;0.23%&lt;/strong&gt; |&lt;/p&gt;

&lt;p&gt;Net result per trade: 0.35% − 0.23% = &lt;strong&gt;+0.12%&lt;/strong&gt;. Costs took about two thirds of the gross result.&lt;/p&gt;

&lt;p&gt;Now stress-test it. During a busy, trending week, assume slippage doubles to 0.10% per side (0.20% per trade) and funding doubles to 0.04%:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total cost: 0.11% + 0.20% + 0.04% = &lt;strong&gt;0.35%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Net result per trade: 0.35% − 0.35% = &lt;strong&gt;0.00%&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same bot is now flat before any bad luck. If a modest cost increase wipes out the edge, the edge is too thin to rely on.&lt;/p&gt;

&lt;h3&gt;
  
  
  What leverage does to this
&lt;/h3&gt;

&lt;p&gt;At x10 leverage, a 10% move against your position is roughly a full loss of the margin on that trade, before fees. Large single-day moves are common in altcoins. Any leverage setting should be tested in the backtest against the worst historical moves, not the average ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Paper trade forward before anything else
&lt;/h2&gt;

&lt;p&gt;A backtest is a story about the past. Paper trading (simulated money, real live prices) tests the bot on data it has never seen, with real-time spreads and timing.&lt;/p&gt;

&lt;p&gt;Run the SOL bot in paper mode for enough trades to cover at least a couple of different market conditions. Compare the paper results with the backtest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the win rate similar?&lt;/li&gt;
&lt;li&gt;Is the average trade close to the backtest after costs?&lt;/li&gt;
&lt;li&gt;Are drawdowns deeper than the backtest suggested?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A large gap between backtest and paper results usually means the backtest was too optimistic.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we judge bots at BOTLAB
&lt;/h2&gt;

&lt;p&gt;We hold every bot to 6 statistical gates (G1–G6), defined on the site, and a bot is only marked "ready for micro live" after passing all six. Out of 209 bots tracked, 1 currently has that status and 208 are not ready. For example, our bot mr4h/long passed 6 of 6 gates in paper trading (simulated) from 16 Aug to 28 Oct 2026, with 121 trades and a 70.2% win rate, and our verdict is still "sample too small to conclude". Three Atlas trend bots, with 224 to 359 trades each in paper trading (simulated) from 8 Aug to 25 Oct 2026, were judged "market beta, no proven edge". We publish the bots that fail our gates as well as the ones that pass. You can see how the tools fit together on the &lt;a href="https://botlab.org.uk/platform" rel="noopener noreferrer"&gt;platform page&lt;/a&gt;. All paper results are simulated.&lt;/p&gt;

&lt;p&gt;If you already have a bot's trade history, you can run it through our free tool: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is a Solana trading bot profitable?
&lt;/h3&gt;

&lt;p&gt;There is no general answer. Some strategies have made money on SOL in some periods and lost in others. The only honest way to judge a specific bot is a cost-aware backtest across several regimes, followed by forward paper trading. Even then, past results do not predict future results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I use the same settings on SOL as on BTC?
&lt;/h3&gt;

&lt;p&gt;Not without testing. SOL usually moves more than BTC, so stop distances, position size and leverage that suit BTC can be too tight or too risky on SOL. Backtest SOL separately.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do BTC moves matter for a SOL bot?
&lt;/h3&gt;

&lt;p&gt;They can. SOL often moves with BTC, so a bot's SOL results may partly reflect BTC's direction. Test how your bot did on days when BTC moved strongly in each direction, and check whether the bot adds anything beyond simply holding SOL.&lt;/p&gt;

&lt;h3&gt;
  
  
  How long should I paper trade a SOL bot?
&lt;/h3&gt;

&lt;p&gt;Long enough to collect a meaningful number of trades across more than one market condition. A single trending week is not enough, because quiet and choppy periods often behave very differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Test fees, slippage and funding first, then stress-test them at double the cost.&lt;/li&gt;
&lt;li&gt;Split SOL history into trend, chop and spike regimes; know which ones your bot needs.&lt;/li&gt;
&lt;li&gt;Compare the bot with simply holding SOL to separate edge from beta.&lt;/li&gt;
&lt;li&gt;Small samples and heavy parameter searches inflate results.&lt;/li&gt;
&lt;li&gt;Paper trade forward before trusting any backtest.&lt;/li&gt;
&lt;li&gt;Crypto trading can lose money, including all capital.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not available in restricted jurisdictions (see the Service Agreement). You trade with your own exchange account; BOTLAB never holds funds.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Paper trading results are simulated. Past results don't predict future results. Crypto trading can lose money, including all capital. Not financial advice.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Want these checks run on your own strategy? See the &lt;a href="https://botlab.org.uk/audit" rel="noopener noreferrer"&gt;strategy and backtest audit&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://botlab.org.uk/learn/solana-trading-bot-what-to-backtest-first" rel="noopener noreferrer"&gt;BOTLAB&lt;/a&gt;. Score your own bot's trade log free: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>trading</category>
      <category>crypto</category>
      <category>statistics</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Grid Trading Bot Backtest: How to Test One Honestly</title>
      <dc:creator>Bot LAB</dc:creator>
      <pubDate>Mon, 26 Oct 2026 04:06:21 +0000</pubDate>
      <link>https://dev.to/botlab/grid-trading-bot-backtest-how-to-test-one-honestly-932</link>
      <guid>https://dev.to/botlab/grid-trading-bot-backtest-how-to-test-one-honestly-932</guid>
      <description>&lt;p&gt;A grid trading bot backtest is only useful if it models how grid orders actually fill, charges every fee and funding payment, and includes the moment price leaves your range. Most grid backtests look smooth because they skip at least one of those, so the honest test is less about the profit line and more about what happens at the edges.&lt;/p&gt;

&lt;p&gt;This guide shows how to backtest a grid bot properly, where grid backtests usually lie, and how to read the result before you risk real money.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a grid trading bot backtest has to prove
&lt;/h2&gt;

&lt;p&gt;A grid bot places buy orders below the current price and sell orders above it, at fixed spacing. Each time price drops to a buy level and then rises back to the next sell level, the bot completes a "round trip" and books a small gain.&lt;/p&gt;

&lt;p&gt;That design makes two promises your backtest must check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;In a range:&lt;/strong&gt; many small round trips add up to more than fees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Out of a range:&lt;/strong&gt; the losses from holding inventory while price trends away do not erase everything the range earned.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A backtest that only shows the first part is half a test. Grid bots tend to look excellent in sideways data and fail in trending data, so the question is never "did it make money in this window?" but "what did it do in the windows it was not designed for?"&lt;/p&gt;

&lt;h2&gt;
  
  
  How to run a grid trading bot backtest step by step
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Use data fine enough to see the fills
&lt;/h3&gt;

&lt;p&gt;Grid levels are often 0.5–2% apart. On 1-hour or 4-hour candles, price can touch several levels inside one bar, and you cannot know the order in which it touched them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If a single candle's high and low cross both a buy level and the sell level above it, a naive backtest books a full round trip. In reality the order may have been sell-first, or only one side filled.&lt;/li&gt;
&lt;li&gt;Use 1-minute candles or trade data where you can. If you only have coarse candles, adopt a &lt;strong&gt;conservative rule&lt;/strong&gt;: at most one fill per level per bar, and never a buy and its matching sell in the same bar.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Define a realistic fill rule
&lt;/h3&gt;

&lt;p&gt;A limit order "touched" is not a limit order "filled". There is a queue in front of you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Count a buy as filled only if price trades &lt;em&gt;through&lt;/em&gt; the level (for example, one tick below), not just to it.&lt;/li&gt;
&lt;li&gt;Run the test twice: once with touch-fills and once with trade-through fills. If the result collapses under the stricter rule, the edge was in the fill assumption, not the strategy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Charge every cost
&lt;/h3&gt;

&lt;p&gt;Grid bots trade a lot for small gains, so costs decide the outcome.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fees:&lt;/strong&gt; use your real maker and taker rates, both sides of every round trip. If some of your orders end up as taker (re-entries, stop-outs, market rebalances), charge taker for those.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slippage:&lt;/strong&gt; small on limit fills, real on any market order, especially exits during fast moves.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Funding:&lt;/strong&gt; if you run a grid on perpetual futures, inventory held across funding times pays or receives funding. In a long trend against you, this adds up quietly. Include it from historical funding data, not an average guess.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Pick the range without peeking
&lt;/h3&gt;

&lt;p&gt;This is the most common hidden bias in grid backtests. If you look at a chart, see that price stayed between two levels for three months, and then set your grid to exactly that range, you have used future information. Of course it worked: you drew the box around the answer.&lt;/p&gt;

&lt;p&gt;Instead, set the range with a rule that only uses past data at the time, for example "range = last 30 days' high and low, recalculated weekly". Our guide on &lt;a href="https://botlab.org.uk/learn/how-to-detect-look-ahead-bias-in-your-own-backtest" rel="noopener noreferrer"&gt;detecting look-ahead bias&lt;/a&gt; covers more ways this sneaks in.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Decide what happens at the edges
&lt;/h3&gt;

&lt;p&gt;Your backtest must include an explicit rule for when price leaves the grid:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stop the bot and close inventory at a loss?&lt;/li&gt;
&lt;li&gt;Hold inventory and wait?&lt;/li&gt;
&lt;li&gt;Shift the grid to follow price?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each choice gives a very different equity curve. Whatever you choose, test it as part of the strategy, not as an afterthought.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Cover more than one market regime
&lt;/h3&gt;

&lt;p&gt;Include at least one strong uptrend, one strong downtrend and one sideways period. A single calm month is a sample of one regime, as we put it in &lt;a href="https://botlab.org.uk/news/35" rel="noopener noreferrer"&gt;One sunny week isn't a climate&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example: why the edges matter
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Illustration only. These are made-up round numbers to show the arithmetic. They are not BOTLAB results and not a forecast.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Imagine a spot grid on a coin priced at 100 USDT:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Range 90 to 110, levels every 2 USDT (about 2% apart).&lt;/li&gt;
&lt;li&gt;1,000 USDT split into 10 orders of 100 USDT each.&lt;/li&gt;
&lt;li&gt;Fee 0.1% per side.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Inside the range.&lt;/strong&gt; One round trip on a 100 USDT order with a 2-point gap earns about 2 USDT gross. Fees on both sides cost about 0.20 USDT. Net is about 1.80 USDT. If the backtest shows 40 round trips in a month, that is roughly 72 USDT net.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then price breaks down to 80.&lt;/strong&gt; Five buy orders filled on the way down, at 98, 96, 94, 92 and 90. At a price of 80, each is now worth less:&lt;/p&gt;

&lt;p&gt;| Buy price | Loss at 80 (per 100 USDT order) | |---|---| | 98 | about 18.4 USDT | | 96 | about 16.7 USDT | | 94 | about 14.9 USDT | | 92 | about 13.0 USDT | | 90 | about 11.1 USDT | | &lt;strong&gt;Total&lt;/strong&gt; | &lt;strong&gt;about 74 USDT&lt;/strong&gt; |&lt;/p&gt;

&lt;p&gt;One move of 20% wipes out the whole month of round trips, before any slippage on an exit. If this were a leveraged futures grid, the same move could hit liquidation and add funding costs.&lt;/p&gt;

&lt;p&gt;The lesson: a grid backtest that ends while price is still inside the range is showing you the 72 USDT and hiding the 74.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to read the results honestly
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Trade count overstates your sample
&lt;/h3&gt;

&lt;p&gt;A grid bot can log hundreds of round trips in a few weeks. That looks like a big sample, but those trades are highly correlated: they all depend on the same thing, price staying in the range. Three hundred round trips inside one sideways month are closer to one observation of "sideways market" than to 300 independent tests. See &lt;a href="https://botlab.org.uk/learn/how-many-trades-does-a-backtest-need" rel="noopener noreferrer"&gt;how many trades a backtest needs&lt;/a&gt; for why the number of &lt;em&gt;independent&lt;/em&gt; outcomes matters.&lt;/p&gt;

&lt;h3&gt;
  
  
  Win rate will look high, and mean little
&lt;/h3&gt;

&lt;p&gt;Grid bots close winners often and hold losers as open inventory. A 90% win rate on closed trades can sit next to a large unrealised loss. Always judge on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Equity including open positions&lt;/strong&gt;, marked to market every bar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maximum drawdown&lt;/strong&gt;, including unrealised losses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Profit after all costs&lt;/strong&gt;, divided by the worst drawdown.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Check for overfitting
&lt;/h3&gt;

&lt;p&gt;If you tested 50 combinations of range width, grid count and spacing, then the best one will look good partly by luck. Signs of overfitting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Results change sharply when you move spacing slightly (say 1.8% vs 2.0%).&lt;/li&gt;
&lt;li&gt;The best settings differ a lot between one year and the next.&lt;/li&gt;
&lt;li&gt;Performance depends on one or two big trending bars landing at the right moment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use walk-forward testing: choose settings on one period, then test them unchanged on the next. Our &lt;a href="https://botlab.org.uk/learn/crypto-trading-bot-backtesting-honest-guide" rel="noopener noreferrer"&gt;honest backtesting guide&lt;/a&gt; walks through the process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Then forward test on paper
&lt;/h3&gt;

&lt;p&gt;A backtest is a hypothesis. The next step is paper trading on live prices for long enough to see a range break, then comparing paper fills with what the backtest predicted. The gap between them, from fills, latency and fees, is information you cannot get from historical data.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we judge bots at BOTLAB
&lt;/h2&gt;

&lt;p&gt;We run every bot through 6 statistical gates (G1–G6), defined on the site, and publish paper trading (simulated money, real prices) results, losers included. Of 204 bots tracked as of 26 Oct 2026, 202 are NOT_READY. One, mr4h/long, has passed all 6 gates with 110 paper trades between 16 Aug and 26 Oct 2026, and even there our verdict is "sample too small to conclude". That is the standard we suggest for any grid bot: passing tests is a reason to keep watching, not proof of an edge.&lt;/p&gt;

&lt;p&gt;If you already have a bot's trade log, you can run it through our free tool: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;. Details of the hosted software and plans are on &lt;a href="https://botlab.org.uk/platform" rel="noopener noreferrer"&gt;/platform&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is a grid trading bot profitable?
&lt;/h3&gt;

&lt;p&gt;It can make money in ranging markets and lose money in trending ones, and nobody can know in advance which regime is coming. A backtest can tell you how the bot behaved in past regimes after costs. It cannot tell you future results. Our article on &lt;a href="https://botlab.org.uk/learn/is-trading-bot-profitable-how-to-test" rel="noopener noreferrer"&gt;whether a trading bot is profitable&lt;/a&gt; explains how to test that question.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I backtest a grid bot for free?
&lt;/h3&gt;

&lt;p&gt;Yes. You can use free historical candle data and a spreadsheet or open-source backtesting library, as long as you apply strict fill rules and real fees. Free paper trading on live prices is a good second step before any real money.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the best grid trading bot strategy?
&lt;/h3&gt;

&lt;p&gt;There is no single best setting. A useful grid strategy is one whose range rule, spacing and exit rule survive walk-forward testing across several regimes, with acceptable drawdown when price leaves the range. Be cautious of any setting that only works on one period.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should a grid bot use spot or futures?
&lt;/h3&gt;

&lt;p&gt;Futures add leverage, funding costs and liquidation risk, which a backtest must model explicitly. Spot grids avoid liquidation but still carry inventory risk when price trends down. This is a general description, not a recommendation for your situation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A grid trading bot backtest must model fills, fees, slippage and funding, or it will overstate results.&lt;/li&gt;
&lt;li&gt;Set the range with a rule that only uses past data; drawing the range on a chart is look-ahead bias.&lt;/li&gt;
&lt;li&gt;Always test what happens when price leaves the range; that is where grid losses come from.&lt;/li&gt;
&lt;li&gt;Hundreds of grid trades in one regime are not a large independent sample.&lt;/li&gt;
&lt;li&gt;Judge on equity including open positions and max drawdown, then forward test on paper.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not available in restricted jurisdictions (see the Service Agreement). You trade with your own exchange account; BOTLAB never holds funds.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Paper trading results are simulated. Past results don't predict future results. Crypto trading can lose money, including all capital. Not financial advice.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Want these checks run on your own strategy? See the &lt;a href="https://botlab.org.uk/audit" rel="noopener noreferrer"&gt;strategy and backtest audit&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://botlab.org.uk/learn/grid-trading-bot-backtest-honest-guide" rel="noopener noreferrer"&gt;BOTLAB&lt;/a&gt;. Score your own bot's trade log free: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>trading</category>
      <category>crypto</category>
      <category>statistics</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Crypto Trading Bot Backtesting: An Honest How-To Guide</title>
      <dc:creator>Bot LAB</dc:creator>
      <pubDate>Fri, 23 Oct 2026 04:06:21 +0000</pubDate>
      <link>https://dev.to/botlab/crypto-trading-bot-backtesting-an-honest-how-to-guide-383l</link>
      <guid>https://dev.to/botlab/crypto-trading-bot-backtesting-an-honest-how-to-guide-383l</guid>
      <description>&lt;p&gt;Crypto trading bot backtesting means running a bot's rules over past market data to see how it would have traded, before you risk any money. Done honestly, it does not tell you whether a bot will make money. It tells you whether a bot is worth testing further, and most bots fail that test.&lt;/p&gt;

&lt;p&gt;This guide shows how to run a backtest that is hard to fool: realistic costs, enough trades, data the bot never saw, and a forward test on live prices.&lt;/p&gt;

&lt;h2&gt;
  
  
  What crypto trading bot backtesting can and cannot tell you
&lt;/h2&gt;

&lt;p&gt;A backtest replays history. It can show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How often the rules would have traded&lt;/li&gt;
&lt;li&gt;How large the losing streaks and drawdowns could get&lt;/li&gt;
&lt;li&gt;How sensitive results are to fees, slippage and funding&lt;/li&gt;
&lt;li&gt;Whether the edge holds across different coins and time periods&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It cannot show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How the bot behaves in market conditions that never appeared in your data&lt;/li&gt;
&lt;li&gt;Your real fills during fast moves or thin order books&lt;/li&gt;
&lt;li&gt;Whether the edge was real or a pattern you found by trying many settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A backtest is the first filter, not the final verdict.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why most crypto bot backtests look better than reality
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Costs are missing or too small
&lt;/h3&gt;

&lt;p&gt;Many tools default to zero fees and perfect fills. On perpetual futures you pay a trading fee on every entry and exit, you lose some price to slippage, and you pay or receive funding every few hours while a position is open. A strategy that trades often can turn from positive to negative once these are included.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Overfitting
&lt;/h3&gt;

&lt;p&gt;If you test 200 combinations of moving-average lengths and pick the best one, that "best" result is partly luck. The more variants you try, the better the top one looks by chance. The deflated Sharpe ratio is one way to correct for this; see &lt;a href="https://botlab.org.uk/learn/deflated-sharpe-ratio-explained" rel="noopener noreferrer"&gt;Deflated Sharpe Ratio Explained&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Look-ahead bias
&lt;/h3&gt;

&lt;p&gt;The bot uses information it would not have had at the time. A common example is acting on a candle's close while it is still forming. Our guide on &lt;a href="https://botlab.org.uk/learn/how-to-detect-look-ahead-bias-in-your-own-backtest" rel="noopener noreferrer"&gt;how to detect look-ahead bias in your own backtest&lt;/a&gt; walks through the checks.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Too few trades
&lt;/h3&gt;

&lt;p&gt;Twenty trades with a 70% win rate can easily be noise. You need enough trades for the result to be distinguishable from luck; see &lt;a href="https://botlab.org.uk/learn/how-many-trades-does-a-backtest-need" rel="noopener noreferrer"&gt;How Many Trades Does a Backtest Need?&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. One market regime
&lt;/h3&gt;

&lt;p&gt;A trend bot tested only during a strong rally will look excellent. That may be market beta (the coin went up), not skill. Always compare against simply holding the asset over the same period.&lt;/p&gt;

&lt;h2&gt;
  
  
  A step-by-step backtesting process
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Write the rules down before you test
&lt;/h3&gt;

&lt;p&gt;State entry, exit, stop, position size and which coins and timeframes the bot trades. If you change the rules after seeing results, record every change. Each one counts as another attempt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Use clean, realistic data
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use the exchange's own candles for the instrument you will trade (spot vs perpetual prices differ).&lt;/li&gt;
&lt;li&gt;Check for gaps, duplicate candles and exchange outages.&lt;/li&gt;
&lt;li&gt;For perpetuals, include historical funding rates.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Model costs pessimistically
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Taker fee on both sides unless you are sure your orders rest as maker&lt;/li&gt;
&lt;li&gt;Slippage per trade (larger for small-cap coins and fast moves)&lt;/li&gt;
&lt;li&gt;Funding for every interval a position is held&lt;/li&gt;
&lt;li&gt;If your account is funded in USDT, include any conversion or withdrawal costs you actually pay&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the strategy only works with costs set to zero, it does not work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Split your data
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;In-sample:&lt;/strong&gt; where you design and tune the rules&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Out-of-sample:&lt;/strong&gt; a later period you do not touch until the rules are frozen&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Walk-forward:&lt;/strong&gt; repeat tune-then-test across rolling windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If out-of-sample results collapse compared with in-sample, assume overfitting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Measure more than total return
&lt;/h3&gt;

&lt;p&gt;Look at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Number of trades and test period&lt;/li&gt;
&lt;li&gt;Win rate together with average win and average loss (see &lt;a href="https://botlab.org.uk/learn/profit-factor-vs-win-rate-trading-bots" rel="noopener noreferrer"&gt;Profit Factor vs Win Rate&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Maximum drawdown and the longest time spent under a previous peak&lt;/li&gt;
&lt;li&gt;Result versus buy-and-hold over the same dates&lt;/li&gt;
&lt;li&gt;Result per coin and per year, not only the total&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 6: Stress test
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Double your slippage estimate&lt;/li&gt;
&lt;li&gt;Shift entries by one candle&lt;/li&gt;
&lt;li&gt;Nudge each parameter by 10–20%&lt;/li&gt;
&lt;li&gt;Remove the single best trade&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A robust strategy degrades gradually. A fragile one falls apart.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 7: Forward test on paper
&lt;/h3&gt;

&lt;p&gt;Run the frozen rules on live prices with simulated money. This is where the paper vs live trading gap starts to show: missed fills, latency, and conditions the backtest never saw. Only forward results should change your opinion of a bot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example: what costs do to a scalping bot
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Illustration only. These are made-up numbers to show the arithmetic. They are not BOTLAB results and not a real bot.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A bot on a 5-minute chart shows this backtest with zero costs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;600 trades over 3 months&lt;/li&gt;
&lt;li&gt;Average gross result per trade: +0.10% of position size&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That looks like a steady edge. Now add realistic costs per round trip:&lt;/p&gt;

&lt;p&gt;| Cost item | Per round trip | |---|---| | Taker fee, entry + exit (0.055% each) | 0.110% | | Slippage (0.015% each side) | 0.030% | | Average funding while held | 0.005% | | &lt;strong&gt;Total cost&lt;/strong&gt; | &lt;strong&gt;0.145%&lt;/strong&gt; |&lt;/p&gt;

&lt;p&gt;Net result per trade: 0.10% − 0.145% = &lt;strong&gt;−0.045%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Across 600 trades, before compounding, that is roughly 600 × −0.045% = −27% of position size. The same rules that looked profitable now lose money. Nothing about the signal changed, only the honesty of the cost model.&lt;/p&gt;

&lt;p&gt;The lesson: the more often a bot trades, the bigger its edge per trade must be to survive costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we apply this in practice
&lt;/h2&gt;

&lt;p&gt;BOTLAB uses 6 statistical gates (G1–G6), defined on the site, that a bot must pass before it is considered for anything beyond paper trading. Most bots do not pass.&lt;/p&gt;

&lt;p&gt;Our published results include the losers. For example, in BOTLAB paper trading (simulated money, real prices), Atlas/donchian-20d made 353 trades between 2026-08-08 and 2026-10-23 with a 41.6% win rate, and our verdict was "market beta, no proven edge". In other words, it mostly followed the market rather than showing skill. We wrote it up in &lt;a href="https://botlab.org.uk/news/30" rel="noopener noreferrer"&gt;Graveyard story: Atlas/donchian-20d&lt;/a&gt;. Paper results are simulated, and past results do not predict future results.&lt;/p&gt;

&lt;p&gt;If you already have a backtest or trade log, you can run it through the free &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt; tool to see common warning signs, or read more about how the research platform works on &lt;a href="https://botlab.org.uk/platform" rel="noopener noreferrer"&gt;/platform&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes checklist
&lt;/h2&gt;

&lt;p&gt;Before you trust a backtest, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are fees, slippage and funding all included?&lt;/li&gt;
&lt;li&gt;Is there an out-of-sample or walk-forward period?&lt;/li&gt;
&lt;li&gt;How many variants did I try before picking this one?&lt;/li&gt;
&lt;li&gt;Are there enough trades to separate skill from luck?&lt;/li&gt;
&lt;li&gt;Does it beat buy-and-hold over the same dates, after costs?&lt;/li&gt;
&lt;li&gt;Does it survive small parameter changes?&lt;/li&gt;
&lt;li&gt;Has it been forward tested on live prices?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you answer "no" or "not sure" to several of these, the backtest is not evidence yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is there free trading bot backtesting software?
&lt;/h3&gt;

&lt;p&gt;Yes. Many charting platforms and open-source libraries let you backtest for free. The tool matters less than the method: check that it lets you set fees, slippage and funding, and that you can hold back an out-of-sample period.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do you backtest a grid trading bot?
&lt;/h3&gt;

&lt;p&gt;Grid bots need a fill model at every grid level, fees on each small trade, and a test across trending periods, not only sideways ones. Grids often look smooth in ranges and then carry large losses when price breaks out of the range and keeps going. Include that scenario in your data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does bot trading work?
&lt;/h3&gt;

&lt;p&gt;Some rule-based strategies have shown an edge for a while; many have not. A bot is a tool that executes rules. If the rules have no edge after costs, automation only loses money faster. Test honestly and expect most ideas to fail. Our guide &lt;a href="https://botlab.org.uk/learn/is-trading-bot-profitable-how-to-test" rel="noopener noreferrer"&gt;Is a Trading Bot Profitable? How to Test One Honestly&lt;/a&gt; goes further.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is a Python trading bot backtest more accurate?
&lt;/h3&gt;

&lt;p&gt;Not automatically. Writing your own backtester gives control, but it also makes look-ahead bias and cost mistakes easier to introduce. Validate it against a few trades you can calculate by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Crypto trading bot backtesting is a filter, not a forecast.&lt;/li&gt;
&lt;li&gt;Include fees, slippage and funding, pessimistically.&lt;/li&gt;
&lt;li&gt;Count every variant you tried; overfitting grows with each one.&lt;/li&gt;
&lt;li&gt;Use out-of-sample data, walk-forward tests and stress tests.&lt;/li&gt;
&lt;li&gt;Compare against buy-and-hold to separate edge from market beta.&lt;/li&gt;
&lt;li&gt;Only forward paper results on live prices should change your view of a bot.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not available in restricted jurisdictions (see the Service Agreement). You trade with your own exchange account; BOTLAB never holds funds.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Paper trading results are simulated. Past results don't predict future results. Crypto trading can lose money, including all capital. Not financial advice.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://botlab.org.uk/learn/crypto-trading-bot-backtesting-honest-guide" rel="noopener noreferrer"&gt;BOTLAB&lt;/a&gt;. Score your own bot's trade log free: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>trading</category>
      <category>crypto</category>
      <category>statistics</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Chainlink Trading Bot: What to Backtest First</title>
      <dc:creator>Bot LAB</dc:creator>
      <pubDate>Wed, 21 Oct 2026 04:06:22 +0000</pubDate>
      <link>https://dev.to/botlab/chainlink-trading-bot-what-to-backtest-first-5f0l</link>
      <guid>https://dev.to/botlab/chainlink-trading-bot-what-to-backtest-first-5f0l</guid>
      <description>&lt;p&gt;Before you run a trading bot on Chainlink (LINK), backtest three things first: whether the strategy survives realistic fees, slippage and funding costs, whether it has enough trades to mean anything, and how deep its worst drawdown gets. A coin being in the news changes how many people watch it. It does not change how you should test a bot.&lt;/p&gt;

&lt;p&gt;Chainlink is on today's trending list, and attention brings a familiar urge: point a bot at the hot coin and see what happens. This guide shows what to check before any bot gets near a real account. It says nothing about where LINK's price is heading, because a testing guide can't tell you that and shouldn't try.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a trending coin needs more testing, not less
&lt;/h2&gt;

&lt;p&gt;When a coin trends, three things often change at once:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Volatility can change.&lt;/strong&gt; A backtest built on calm months may not reflect a busier market, or the other way round.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Liquidity conditions shift.&lt;/strong&gt; Spreads and order book depth on altcoin pairs can move a lot from one week to the next.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your own bias grows.&lt;/strong&gt; If you already expect a move, you are more likely to accept a backtest that agrees with you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rule is simple. Test the strategy as if the coin were boring. If the logic only works because of recent excitement, you have learned about the news, not about your bot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Put real costs into the backtest
&lt;/h2&gt;

&lt;p&gt;Most altcoin bots that look good on paper fail here first. A backtest without costs is a sketch, not a test.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fees
&lt;/h3&gt;

&lt;p&gt;Count the fee on every entry and every exit. Use taker fees unless you have proof your orders fill as maker. Market and stop orders are usually taker.&lt;/p&gt;

&lt;h3&gt;
  
  
  Slippage
&lt;/h3&gt;

&lt;p&gt;Slippage is the gap between the price your backtest assumed and the price you would actually get. On a mid-cap pair it is often larger than on BTC or ETH, and it tends to be worst exactly when the bot wants to trade: on fast candles and breakouts.&lt;/p&gt;

&lt;p&gt;A practical check: rerun the backtest at 2x and 3x your slippage estimate. If the result flips from positive to negative, the edge is too thin to trust.&lt;/p&gt;

&lt;h3&gt;
  
  
  Funding cost on perpetuals
&lt;/h3&gt;

&lt;p&gt;If the bot trades perpetual futures, it pays or receives funding while positions are open. Bots that hold for hours or days can lose a meaningful share of their gross result to funding. Model it from historical funding data rather than assuming zero. For more on funding-based filters, see &lt;a href="https://botlab.org.uk/learn/do-funding-rate-and-open-interest-filters-improve-a-crypto-bot" rel="noopener noreferrer"&gt;Do Funding Rate and Open Interest Filters Improve a Crypto Bot?&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example: a LINK bot before and after costs
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The numbers below are a made-up illustration to show the method. They are not BOTLAB results and not results of any real bot.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Imagine a short-term LINK perpetual strategy with this backtest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;140 trades over 60 days&lt;/li&gt;
&lt;li&gt;Average gross result per trade: &lt;strong&gt;+0.14%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Win rate: 58%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That looks fine. Now add costs, per round trip:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Taker fee 0.055% on entry plus 0.055% on exit = &lt;strong&gt;0.11%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Estimated slippage, both sides = &lt;strong&gt;0.04%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Average funding paid while holding = &lt;strong&gt;0.01%&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total cost per trade = 0.11% + 0.04% + 0.01% = &lt;strong&gt;0.16%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Net result per trade = 0.14% − 0.16% = &lt;strong&gt;−0.02%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The win rate did not change, but the strategy went from "working" to slowly losing. This is why win rate alone tells you little; see &lt;a href="https://botlab.org.uk/learn/profit-factor-vs-win-rate-trading-bots" rel="noopener noreferrer"&gt;Profit Factor vs Win Rate for Trading Bots&lt;/a&gt;. Leverage does not fix this. It multiplies both the gross result and the losses, and it brings liquidation risk closer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Check the sample size
&lt;/h2&gt;

&lt;p&gt;A backtest with 25 trades can look excellent by luck alone. Before you trust any LINK result, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How many trades?&lt;/strong&gt; Dozens are rarely enough. A few hundred, spread over different market conditions, tells you much more. Our guide &lt;a href="https://botlab.org.uk/learn/how-many-trades-does-a-backtest-need" rel="noopener noreferrer"&gt;How Many Trades Does a Backtest Need?&lt;/a&gt; goes into the details.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How many conditions?&lt;/strong&gt; Did the test include trending, falling and sideways periods, or only one regime?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How concentrated is the result?&lt;/strong&gt; If removing the best 3 trades erases the profit, the bot depends on rare events.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Look for overfitting
&lt;/h2&gt;

&lt;p&gt;Overfitting means the strategy learned the noise in past data instead of a repeatable pattern. Trending coins invite it, because it is tempting to tune parameters until the backtest catches the recent move perfectly.&lt;/p&gt;

&lt;p&gt;Warning signs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Many parameters for a small number of trades&lt;/li&gt;
&lt;li&gt;Results that collapse when a setting changes slightly (say, a 20-period lookback works but 18 and 22 do not)&lt;/li&gt;
&lt;li&gt;You tried dozens of variants and are reporting only the best one&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fixes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Out-of-sample testing.&lt;/strong&gt; Tune on one period, then test on data the strategy never saw.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Walk-forward testing.&lt;/strong&gt; Repeat the tune-then-test cycle across rolling windows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adjust for the number of attempts.&lt;/strong&gt; If you tested 50 variants, the best Sharpe ratio is inflated. The &lt;a href="https://botlab.org.uk/learn/deflated-sharpe-ratio-explained" rel="noopener noreferrer"&gt;deflated Sharpe ratio&lt;/a&gt; corrects for this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check for look-ahead bias&lt;/strong&gt;, where the backtest accidentally uses information that wasn't available at the time: &lt;a href="https://botlab.org.uk/learn/how-to-detect-look-ahead-bias-in-your-own-backtest" rel="noopener noreferrer"&gt;How to Detect Look-Ahead Bias&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 4: Measure drawdown before you look at the total
&lt;/h2&gt;

&lt;p&gt;Total result is the number people share. Maximum drawdown is the number that decides whether you can live with the bot.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What was the deepest peak-to-trough fall in the backtest?&lt;/li&gt;
&lt;li&gt;How long did it take to recover?&lt;/li&gt;
&lt;li&gt;What would that drawdown look like with the leverage you plan to use?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Expect live drawdowns to be deeper than backtest drawdowns. Set a drawdown alert in advance, a level where you pause the bot and investigate, rather than deciding in the middle of a losing streak.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Paper trade forward and compare
&lt;/h2&gt;

&lt;p&gt;A backtest replays history. A forward paper test (simulated money, live prices) shows how the bot behaves on candles it has never seen. Then compare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paper fills vs backtest assumptions&lt;/li&gt;
&lt;li&gt;Trade frequency vs backtest frequency&lt;/li&gt;
&lt;li&gt;Drawdown vs backtest drawdown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The paper vs live trading gap is real. Paper trading still doesn't capture every partial fill, rejected order or API delay, so treat even good paper results as a starting point, not a conclusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we apply this at the lab
&lt;/h2&gt;

&lt;p&gt;At BOTLAB, every bot is judged against 6 statistical gates (G1–G6), defined on the site, and we publish the losers alongside the rest. One example from our published paper trading (simulated) results: Atlas/donchian-20d made 347 trades from 2026-08-08 to 2026-10-18, with a 41.8% win rate, and our verdict was "market beta, no proven edge". That is a useful lesson in itself: plenty of trades and a long period still did not show an edge beyond following the market. The full story is in &lt;a href="https://botlab.org.uk/news/30" rel="noopener noreferrer"&gt;Graveyard story: Atlas/donchian-20d&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Before you trust a strategy, you can run it through our free tool: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;. To see how hosted bots and paper results fit together, visit the &lt;a href="https://botlab.org.uk/platform" rel="noopener noreferrer"&gt;platform page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Not available in restricted jurisdictions (see the Service Agreement). You trade with your own exchange account; BOTLAB never holds funds.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A quick pre-launch checklist for any LINK bot
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Fees modelled as taker on every entry and exit&lt;/li&gt;
&lt;li&gt;[ ] Slippage stress-tested at 2x and 3x&lt;/li&gt;
&lt;li&gt;[ ] Funding included for perpetual positions&lt;/li&gt;
&lt;li&gt;[ ] Enough trades across more than one market regime&lt;/li&gt;
&lt;li&gt;[ ] Out-of-sample or walk-forward test done&lt;/li&gt;
&lt;li&gt;[ ] Number of variants tested written down&lt;/li&gt;
&lt;li&gt;[ ] Max drawdown known, and a pause level set&lt;/li&gt;
&lt;li&gt;[ ] Forward paper test compared with the backtest&lt;/li&gt;
&lt;li&gt;[ ] API key set to trade-only, withdrawals off, IP-restricted&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is a Chainlink trading bot different from a BTC bot?
&lt;/h3&gt;

&lt;p&gt;The testing method is the same. Practical conditions often differ: altcoin pairs can have wider spreads, thinner order books and different funding behaviour, so cost assumptions that worked on BTC may be too optimistic for LINK. Test each pair with its own data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I backtest only the recent trending period?
&lt;/h3&gt;

&lt;p&gt;No. A test limited to a period when the coin was in the headlines tells you how the bot did in one unusual window. Include quiet and falling periods as well, then check that results hold out of sample.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can a high win rate make up for trading costs?
&lt;/h3&gt;

&lt;p&gt;Not by itself. As the illustration shows, a bot can win most of its trades and still lose money once fees, slippage and funding are counted. Look at net result per trade, profit factor and drawdown together.&lt;/p&gt;

&lt;h3&gt;
  
  
  How long should I paper trade before considering a live account?
&lt;/h3&gt;

&lt;p&gt;There is no fixed number of days. What matters is enough forward trades across changing conditions to compare honestly with the backtest. If the paper results drift far from the backtest, find out why before going further.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A coin trending does not make a strategy better; test it as if the coin were boring.&lt;/li&gt;
&lt;li&gt;Model fees, slippage and funding first, since thin edges often disappear there.&lt;/li&gt;
&lt;li&gt;Small samples and many tuned variants inflate results; use out-of-sample tests and adjust for the number of attempts.&lt;/li&gt;
&lt;li&gt;Judge drawdown before total result, and set a pause level in advance.&lt;/li&gt;
&lt;li&gt;Forward paper testing narrows the gap with live trading but doesn't close it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Paper trading results are simulated. Past results don't predict future results. Crypto trading can lose money, including all capital. Not financial advice.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://botlab.org.uk/learn/chainlink-trading-bot-what-to-backtest-first" rel="noopener noreferrer"&gt;BOTLAB&lt;/a&gt;. Score your own bot's trade log free: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>trading</category>
      <category>crypto</category>
      <category>statistics</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Are Trading Bots Legit? How to Check One Honestly</title>
      <dc:creator>Bot LAB</dc:creator>
      <pubDate>Mon, 19 Oct 2026 04:06:24 +0000</pubDate>
      <link>https://dev.to/botlab/are-trading-bots-legit-how-to-check-one-honestly-chf</link>
      <guid>https://dev.to/botlab/are-trading-bots-legit-how-to-check-one-honestly-chf</guid>
      <description>&lt;p&gt;If you are asking "is trading bots legit?", the short answer is that trading bots are real software, but many of the claims made about them are not. A bot is only as legitimate as its evidence: verifiable trade history, honest costs, a large enough sample, and a setup that never gives anyone control of your funds.&lt;/p&gt;

&lt;p&gt;This guide shows you how to separate a real, testable bot from marketing, using checks you can run yourself before risking any money.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is trading bots legit? What the question really means
&lt;/h2&gt;

&lt;p&gt;When people search "is trading bots legit", they usually mean one of three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Is the software real?&lt;/strong&gt; Does it actually place trades, or is it a front for a deposit scheme?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Are the results real?&lt;/strong&gt; Are the screenshots and win rates from actual trades, a backtest, or nowhere at all?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is it safe?&lt;/strong&gt; Can the bot or its seller take my money?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A bot can pass the first test and fail the other two. Plenty of genuine bots run exactly as coded and still lose money, because the strategy has no edge after fees. "Legit software" and "worth using" are different questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Red flags that a trading bot offer is not legit
&lt;/h2&gt;

&lt;p&gt;Start by checking the offer itself. These are strong warning signs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Promises of fixed returns.&lt;/strong&gt; Markets do not pay a steady percentage every month. Any fixed-return claim is a reason to walk away.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Risk-free" or "can't lose" language.&lt;/strong&gt; Every leveraged crypto strategy can lose money, including all capital.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You must deposit funds with the seller.&lt;/strong&gt; A legitimate bot connects to &lt;em&gt;your own&lt;/em&gt; exchange account. If someone asks you to send them USDT to "run the bot", that is custody, not software.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Requests for sensitive credentials.&lt;/strong&gt; No honest provider needs your password, 2FA codes, seed phrase, or an API key with withdrawal permission.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Only screenshots, no trade log.&lt;/strong&gt; Screenshots are easy to edit and easy to cherry-pick.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fake urgency or scarcity.&lt;/strong&gt; "Only 3 spots left" or countdown timers are sales pressure, not evidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testimonials you cannot verify.&lt;/strong&gt; Anonymous success stories prove nothing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If an offer shows two or more of these, you do not need to test the strategy. The offer has already failed.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to judge whether a bot's results are real
&lt;/h2&gt;

&lt;p&gt;If the offer looks clean, move on to the evidence. Here is a practical checklist.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Ask what kind of results you are looking at
&lt;/h3&gt;

&lt;p&gt;There are three types, and they are not equal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backtest:&lt;/strong&gt; the strategy run on past data. Useful, but easy to overfit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paper trading (forward test):&lt;/strong&gt; simulated money on live prices, after the strategy was frozen. Better, because the future was unknown when the rules were set.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live trading:&lt;/strong&gt; real money, real fills, real slippage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many sellers blend these together. Ask directly: which numbers are backtest, which are forward paper, and which are live? There is often a gap between paper and live results caused by slippage, partial fills and latency.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Demand the full trade list
&lt;/h3&gt;

&lt;p&gt;A legitimate track record includes every trade: entry, exit, size, fees and funding. Look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Number of trades.&lt;/strong&gt; A handful of trades says almost nothing. See &lt;a href="https://botlab.org.uk/learn/how-many-trades-does-a-backtest-need" rel="noopener noreferrer"&gt;How Many Trades Does a Backtest Need?&lt;/a&gt; for practical thresholds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Period covered.&lt;/strong&gt; Two good weeks in a rising market is not a track record.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Losing trades.&lt;/strong&gt; A history with no losers is either very short or edited.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Look past the win rate
&lt;/h3&gt;

&lt;p&gt;A high win rate is the most common marketing number and one of the least useful. A bot that wins small and loses big can show 90% wins and still lose overall. Compare win rate with average win, average loss and profit factor. Our guide on &lt;a href="https://botlab.org.uk/learn/profit-factor-vs-win-rate-trading-bots" rel="noopener noreferrer"&gt;Profit Factor vs Win Rate&lt;/a&gt; goes deeper.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Subtract real costs
&lt;/h3&gt;

&lt;p&gt;Fees, slippage and perpetual funding payments add up fast, especially for bots that trade often. Ask whether the results include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exchange taker/maker fees on both sides&lt;/li&gt;
&lt;li&gt;Realistic slippage, not mid-price fills&lt;/li&gt;
&lt;li&gt;Funding paid or received on perpetual futures&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Check for overfitting
&lt;/h3&gt;

&lt;p&gt;If a strategy was tuned across hundreds of parameter combinations, the best one will look great by chance. Ask how many variations were tried. The &lt;a href="https://botlab.org.uk/learn/deflated-sharpe-ratio-explained" rel="noopener noreferrer"&gt;Deflated Sharpe Ratio&lt;/a&gt; adjusts for exactly this problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Ask whether it is skill or just the market
&lt;/h3&gt;

&lt;p&gt;In a rising market, almost any long-only bot looks good. A fair test compares the bot with simply holding the asset over the same period. If the bot only moves with the market, you are paying for exposure you could get more simply.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example: a "90% win rate" bot
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The numbers below are a made-up illustration, not real results from any bot.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A seller advertises a bot with a 90% win rate. You ask for the trade list and get 40 trades:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;36 winning trades, average gain &lt;strong&gt;+1.0%&lt;/strong&gt; each&lt;/li&gt;
&lt;li&gt;4 losing trades, average loss &lt;strong&gt;−12.0%&lt;/strong&gt; each&lt;/li&gt;
&lt;li&gt;Round-trip fees of about &lt;strong&gt;0.11%&lt;/strong&gt; per trade&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now do the arithmetic (simple sums, to keep it clear):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gains: 36 × 1.0% = &lt;strong&gt;+36.0%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Losses: 4 × 12.0% = &lt;strong&gt;−48.0%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Fees: 40 × 0.11% = &lt;strong&gt;−4.4%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Net: about −16.4%&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The headline "90% win rate" is true. The bot still loses money in this illustration. And with only 40 trades, even a positive result would be too small a sample to draw firm conclusions. This is why the trade list matters more than the headline number.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we apply this at a research lab
&lt;/h2&gt;

&lt;p&gt;At BOTLAB, every bot has to pass 6 statistical gates (G1–G6), defined on the site, before it is labelled as ready for a small live test. Most ideas do not make it. We publish the failures too; see &lt;a href="https://botlab.org.uk/news/19" rel="noopener noreferrer"&gt;We show our receipts. Even ugly ones.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example, in BOTLAB's published paper-trading (simulated) results, Atlas/supertrend-4h logged 298 trades between 2026-08-08 and 2026-10-18 with a 42.6% win rate. Its status is NOT_READY, with the verdict "market beta, no proven edge". In plain terms, its results so far look like market exposure rather than skill. That is the kind of honest verdict you should expect from any seller. You can see how results are tracked on the &lt;a href="https://botlab.org.uk/platform" rel="noopener noreferrer"&gt;platform&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is a trading bot safe to connect?
&lt;/h2&gt;

&lt;p&gt;Even a legitimate bot needs safe setup. Follow these rules with any provider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use trade-only API keys.&lt;/strong&gt; Turn withdrawals &lt;strong&gt;off&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restrict the key by IP address&lt;/strong&gt; if your exchange supports it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never share&lt;/strong&gt; passwords, 2FA codes or seed phrases with anyone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep funds on your own exchange account.&lt;/strong&gt; The bot should place trades, not hold money.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start in paper trading&lt;/strong&gt; before using real funds, and compare paper results with what the seller claimed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check leverage settings.&lt;/strong&gt; High leverage magnifies losses as well as gains, and can liquidate a position quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want a quick first pass on a bot's numbers, try the free tool: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;. It is a starting point, not a guarantee of anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is a trading bot real or a scam?
&lt;/h3&gt;

&lt;p&gt;Both exist. Real bots are software that places trades through your exchange account using your API key. Scams usually ask you to deposit funds with them, promise fixed returns, or show only screenshots. Ask for the full trade list and never hand over custody of your money.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is a trading bot reliable?
&lt;/h3&gt;

&lt;p&gt;Reliability has two parts: does the software run without errors, and does the strategy hold up over time? A bot can be technically reliable and still lose money. Judge it on a large sample of forward-tested trades, with costs included, over different market conditions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is using a trading bot legal?
&lt;/h3&gt;

&lt;p&gt;It depends on where you live and on the exchange's terms of service. Many exchanges allow automated trading through their official API. Check your local rules and your exchange's terms before you start. Never use workarounds to access a service that is not available in your country.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are trading bots worth it?
&lt;/h3&gt;

&lt;p&gt;Only if the evidence supports it after costs. For many people, the most useful step is paper trading first. It lets you see how a strategy behaves on live prices without risking capital. Read more in &lt;a href="https://botlab.org.uk/learn/is-trading-bot-profitable-how-to-test" rel="noopener noreferrer"&gt;Is a Trading Bot Profitable? How to Test One Honestly&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Trading bots are real software. Whether a specific bot or offer is legit depends on its evidence and its setup.&lt;/li&gt;
&lt;li&gt;Walk away from fixed-return promises, "risk-free" claims, deposit requests and requests for sensitive credentials.&lt;/li&gt;
&lt;li&gt;Demand the full trade list, a clear period, and a large number of trades.&lt;/li&gt;
&lt;li&gt;Win rate alone means little. Check average loss, costs and overfitting.&lt;/li&gt;
&lt;li&gt;Compare the bot with simply holding the market.&lt;/li&gt;
&lt;li&gt;Use trade-only, IP-restricted API keys with withdrawals off, and paper trade first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not available in restricted jurisdictions (see the Service Agreement). You trade with your own exchange account; BOTLAB never holds funds.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Paper trading results are simulated. Past results don't predict future results. Crypto trading can lose money, including all capital. Not financial advice.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://botlab.org.uk/learn/are-trading-bots-legit-how-to-check" rel="noopener noreferrer"&gt;BOTLAB&lt;/a&gt;. Score your own bot's trade log free: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>trading</category>
      <category>crypto</category>
      <category>datascience</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Trading Bot Success Rate: What the Number Really Means</title>
      <dc:creator>Bot LAB</dc:creator>
      <pubDate>Fri, 16 Oct 2026 04:06:22 +0000</pubDate>
      <link>https://dev.to/botlab/trading-bot-success-rate-what-the-number-really-means-4257</link>
      <guid>https://dev.to/botlab/trading-bot-success-rate-what-the-number-really-means-4257</guid>
      <description>&lt;p&gt;A trading bot success rate, usually shown as the percentage of winning trades, tells you how often a bot wins, not whether it makes or loses money overall. To judge a bot honestly, you need its win rate together with average win and loss size, trading costs, number of trades and drawdown, ideally measured over a forward test rather than only a backtest.&lt;/p&gt;

&lt;p&gt;This guide covers what "success rate" means, why high win rates can hide losing systems, and a simple process you can use to test any bot before trusting it with real capital.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "trading bot success rate" actually measures
&lt;/h2&gt;

&lt;p&gt;When a sales page says a bot has an "85% success rate," it almost always means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Win rate:&lt;/strong&gt; winning trades divided by total trades.&lt;/li&gt;
&lt;li&gt;Sometimes it means something looser, like "85% of signals hit the first target," which ignores the trades that hit the stop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Win rate on its own says nothing about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How big the wins are&lt;/strong&gt; compared to the losses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fees, spread, slippage and funding&lt;/strong&gt;, which are charged on every trade, win or lose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How many trades&lt;/strong&gt; the figure is based on. 9 wins out of 10 trades is not the same evidence as 900 out of 1,000.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When&lt;/strong&gt; it was measured: in a backtest, on paper, or live.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the honest answer to "what is a good trading bot success rate?" is: there is no good win rate in isolation. A 40% win rate can be fine, and a 90% win rate can be a slow road to an empty account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a high win rate can still lose money
&lt;/h2&gt;

&lt;p&gt;The key idea is the &lt;strong&gt;break-even win rate&lt;/strong&gt;. For any bot, you can calculate the win rate it needs just to break even:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Break-even win rate = average loss / (average win + average loss)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If a bot's average loss is much larger than its average win, it needs a very high win rate just to stay flat. Many grid, martingale and "small take-profit, wide stop" bots look like this. They win often and quietly, then give back weeks of gains in one bad move.&lt;/p&gt;

&lt;h3&gt;
  
  
  Expectancy is the number that matters
&lt;/h3&gt;

&lt;p&gt;Expectancy is the average result per trade:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Expectancy = (win rate × average win) − (loss rate × average loss) − costs per trade&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If expectancy is negative after costs, the win rate does not matter. For a deeper comparison of these metrics, see &lt;a href="https://botlab.org.uk/learn/profit-factor-vs-win-rate-trading-bots" rel="noopener noreferrer"&gt;Profit Factor vs Win Rate for Trading Bots&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example: two bots, two success rates
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Illustration only.&lt;/strong&gt; These numbers are made up to show the math. They are not results from any real bot.&lt;/p&gt;

&lt;p&gt;Assume both bots pay 0.11% per round trip in fees and slippage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bot A: "75% success rate"&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Win rate: 75%&lt;/li&gt;
&lt;li&gt;Average win: +0.4%&lt;/li&gt;
&lt;li&gt;Average loss: −1.5%&lt;/li&gt;
&lt;li&gt;Expectancy before costs: (0.75 × 0.4) − (0.25 × 1.5) = 0.30 − 0.375 = &lt;strong&gt;−0.075% per trade&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Expectancy after costs: −0.075 − 0.11 = &lt;strong&gt;−0.185% per trade&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Break-even win rate: 1.5 / (0.4 + 1.5) ≈ &lt;strong&gt;79%&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bot B: "40% success rate"&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Win rate: 40%&lt;/li&gt;
&lt;li&gt;Average win: +2.0%&lt;/li&gt;
&lt;li&gt;Average loss: −0.9%&lt;/li&gt;
&lt;li&gt;Expectancy before costs: (0.40 × 2.0) − (0.60 × 0.9) = 0.80 − 0.54 = &lt;strong&gt;+0.26% per trade&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Expectancy after costs: 0.26 − 0.11 = &lt;strong&gt;+0.15% per trade&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Break-even win rate: 0.9 / (2.0 + 0.9) ≈ &lt;strong&gt;31%&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bot A has nearly double the success rate and still loses money in this illustration. Bot B loses more often than it wins, but its wins are large enough to cover the losses and costs.&lt;/p&gt;

&lt;p&gt;Even Bot B's positive figure would not prove anything on its own. You would still need enough trades, a realistic cost model and a forward test.&lt;/p&gt;

&lt;h2&gt;
  
  
  How sample size changes the picture
&lt;/h2&gt;

&lt;p&gt;A win rate is an estimate, and small samples are noisy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Illustration only:&lt;/strong&gt; a bot that shows a 70% win rate over 90 trades has a statistical uncertainty of roughly ±10 percentage points. Its "true" win rate could plausibly be anywhere from about 60% to 80%. That range can be the difference between a profitable system and a losing one, depending on the win/loss sizes.&lt;/p&gt;

&lt;p&gt;Practical rules of thumb:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under 30 trades: treat any win rate as anecdote.&lt;/li&gt;
&lt;li&gt;30–100 trades: early signal only, wide error bars.&lt;/li&gt;
&lt;li&gt;Several hundred trades across different market conditions: starting to mean something.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We go into this in detail in &lt;a href="https://botlab.org.uk/learn/how-many-trades-does-a-backtest-need" rel="noopener noreferrer"&gt;How Many Trades Does a Backtest Need?&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real-world example from paper trading
&lt;/h2&gt;

&lt;p&gt;At BOTLAB, every bot is checked against 6 statistical gates (G1–G6), defined on the site, and a bot is only labelled "ready for micro live" after passing all six. Out of 181 bots tracked, none currently meet that bar.&lt;/p&gt;

&lt;p&gt;Here is how win rate compares with those verdicts in our published paper-trading (simulated) results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;mr4h/long:&lt;/strong&gt; 69.7% win rate over 89 paper trades (2026-08-16 to 2026-10-16). Passes 5 of 6 gates. Status: WATCH. Verdict: sample too small to conclude.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atlas/supertrend-4h:&lt;/strong&gt; 43.0% win rate over 293 paper trades (2026-08-08 to 2026-10-15). Passes 4 of 6 gates. Status: NOT_READY. Verdict: market beta, no proven edge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atlas/live:&lt;/strong&gt; 41.1% win rate over 382 paper trades (2026-08-08 to 2026-10-15). Passes 1 of 6 gates. Status: NOT_READY.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The bot with the highest win rate is still not considered proven, because 89 trades is not enough evidence. A strong-looking success rate earned a "watch," not a "go." You can see the full breakdown on the &lt;a href="https://botlab.org.uk/platform" rel="noopener noreferrer"&gt;platform page&lt;/a&gt;. Paper results are simulated and do not predict future results.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to judge a trading bot's success rate honestly
&lt;/h2&gt;

&lt;p&gt;Use this checklist on any bot, whether you built it, bought it or are reading its sales page.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Ask for the full trade list, not a headline number
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Total trades, period covered, and every win and loss.&lt;/li&gt;
&lt;li&gt;If you only get a percentage and a screenshot, treat it as marketing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Calculate expectancy and break-even win rate
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Compare the actual win rate with the break-even win rate.&lt;/li&gt;
&lt;li&gt;A bot whose win rate sits just above break-even has very little margin for error.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Add realistic costs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Exchange fees on both entry and exit.&lt;/li&gt;
&lt;li&gt;Spread and slippage, especially on smaller coins and during volatile moves.&lt;/li&gt;
&lt;li&gt;Funding payments on perpetual futures if positions are held across funding times.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;High-frequency bots with small targets are the most sensitive to costs. A strategy that wins 0.2% per trade can turn negative from fees alone.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Check drawdown, not just wins
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Max drawdown:&lt;/strong&gt; the largest drop from peak equity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Longest losing streak:&lt;/strong&gt; can you sit through it without switching the bot off?&lt;/li&gt;
&lt;li&gt;A high win rate with rare but large losses often shows up here first.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Separate backtest, paper and live results
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backtest:&lt;/strong&gt; easy to overfit; look for look-ahead bias and too many parameter tweaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paper trading (simulated money, real prices):&lt;/strong&gt; a forward test on unseen data, but fills are idealised.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live:&lt;/strong&gt; real fills and real costs, but only meaningful after enough trades.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A success rate that drops sharply from backtest to paper is a classic overfitting sign. See &lt;a href="https://botlab.org.uk/learn/is-trading-bot-profitable-how-to-test" rel="noopener noreferrer"&gt;Is a Trading Bot Profitable? How to Test One Honestly&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Check whether the bot just followed the market
&lt;/h3&gt;

&lt;p&gt;If a bot only made money while the market went up, it may be "market beta": riding the trend rather than adding an edge. Compare its results with simply holding the asset over the same period.&lt;/p&gt;

&lt;p&gt;If you want a quick structured check of these points, you can run your own numbers through &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Red flags in success rate claims
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;"90%+ success rate" with no trade count or period.&lt;/li&gt;
&lt;li&gt;Results shown only in a rising market.&lt;/li&gt;
&lt;li&gt;Win rate quoted without average loss size.&lt;/li&gt;
&lt;li&gt;No mention of fees, slippage or funding.&lt;/li&gt;
&lt;li&gt;Screenshots instead of exportable trade history.&lt;/li&gt;
&lt;li&gt;Any claim of guaranteed or fixed monthly returns.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is a good success rate for a trading bot?
&lt;/h3&gt;

&lt;p&gt;There isn't a universal good number. A trend-following bot can work with a 35–45% win rate if its wins are much larger than its losses, while a scalping bot may need 70%+ just to cover costs. Compare the win rate with the bot's break-even win rate after costs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does bot trading work?
&lt;/h3&gt;

&lt;p&gt;Some bots show a measurable edge for a period, and many do not. Bots can execute rules consistently, but they cannot remove market risk, and edges can disappear as conditions change. The only way to find out is to test with enough trades, realistic costs and a forward test.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are trading bots legit?
&lt;/h3&gt;

&lt;p&gt;The software itself is usually legitimate; the claims around it are where problems appear. Be careful with anyone asking for API keys with withdrawal permission, seed phrases or deposits into their wallet. A safe setup uses your own exchange account with a trade-only, IP-restricted API key and withdrawals disabled.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I backtest a trading bot's success rate?
&lt;/h3&gt;

&lt;p&gt;Run the strategy on historical data with realistic fees and slippage, keep part of the data unseen for validation, and record every trade. Then forward-test on paper before risking capital. Watch for look-ahead bias and over-tuned parameters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Success rate usually means win rate, which alone does not show profitability.&lt;/li&gt;
&lt;li&gt;Always compare win rate with the break-even win rate after costs.&lt;/li&gt;
&lt;li&gt;Expectancy, drawdown and trade count matter more than the headline percentage.&lt;/li&gt;
&lt;li&gt;Small samples produce noisy win rates; the highest win rate is not automatically the best bot.&lt;/li&gt;
&lt;li&gt;Separate backtest, paper and live results, and treat big drops between them as a warning.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Crypto trading can lose money, including all capital. Not available in restricted jurisdictions (see the Service Agreement). You trade with your own exchange account; BOTLAB never holds funds.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Paper trading results are simulated. Past results don't predict future results. Crypto trading can lose money, including all capital. Not financial advice.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://botlab.org.uk/learn/trading-bot-success-rate-explained" rel="noopener noreferrer"&gt;BOTLAB&lt;/a&gt;. Score your own bot's trade log free: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>trading</category>
      <category>crypto</category>
      <category>datascience</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to Detect Look-Ahead Bias in Your Own Backtest</title>
      <dc:creator>Bot LAB</dc:creator>
      <pubDate>Wed, 14 Oct 2026 04:06:23 +0000</pubDate>
      <link>https://dev.to/botlab/how-to-detect-look-ahead-bias-in-your-own-backtest-4dd9</link>
      <guid>https://dev.to/botlab/how-to-detect-look-ahead-bias-in-your-own-backtest-4dd9</guid>
      <description>&lt;p&gt;Look-ahead bias is the failure where your backtest uses information that did not exist yet at the moment it made a decision. You detect it mechanically, not by reading your code: compute your indicator twice — once over the full price history the way a vectorised backtest does, and once bar by bar on history truncated at that bar the way a live bot sees it — then compare the two values at the same bar. If they differ anywhere, something in your pipeline peeked at the future. That is the whole method, and it takes about ten lines.&lt;/p&gt;

&lt;p&gt;This matters because look-ahead is the one backtest failure that never announces itself. Overfitting at least leaves a trail: good in-sample, bad out-of-sample. A leak looks like skill in every period, including your out-of-sample window, because the leak travels with the data. Reading the code does not reliably catch it either — the leak is usually not in a line that says &lt;code&gt;shift(-1)&lt;/code&gt;. It is in a &lt;code&gt;.mean()&lt;/code&gt; over a whole column, a resample that joins a daily close onto hourly bars, a &lt;code&gt;center=True&lt;/code&gt; you typed six months ago, or a gap-filling call that borrows the next bar's price.&lt;/p&gt;

&lt;h2&gt;
  
  
  The test
&lt;/h2&gt;



&lt;p&gt;&lt;code&gt;python full = signal(df)                  # vectorised, whole file for i in sampled_bars: inc = signal(df.iloc[:i+1])    # only data up to and including bar i assert full[i] == inc[-1]      # any difference = look-ahead&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Two details make it honest. First, truncate at the &lt;strong&gt;bar&lt;/strong&gt;, not at the row index of some already-merged frame — if your feature table was built by joining timeframes, rebuild the join inside the truncated call. Second, sample bars from across the whole history, not just the end; some leaks only fire where the data has gaps, or where a higher-timeframe boundary falls.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it looks like on real data
&lt;/h2&gt;

&lt;p&gt;We ran this on 3,000 closed BTCUSDT 1-hour candles from Bybit (2026-06-11 03:00 UTC to 2026-10-14 02:00 UTC), auditing 120 randomly sampled bars with &lt;code&gt;lookahead_analysis&lt;/code&gt; from our MIT-licensed library. Each row is a signal written the way people actually write signals.&lt;/p&gt;

&lt;p&gt;| Signal construction | Bars checked | Mismatches | Leaks? | |---|---|---|---| | EMA(20) over EMA(50) cross | 120 | 0 | no | | z-score vs trailing 200-bar mean/std | 120 | 0 | no | | &lt;code&gt;close.shift(-1) &amp;gt; close&lt;/code&gt; | 120 | 64 | yes | | Daily close joined onto 1h bars, not shifted | 120 | 57 | yes | | &lt;code&gt;rolling(21, center=True).mean()&lt;/code&gt; | 120 | 32 | yes | | Min-max normalised over the whole file | 120 | 31 | yes | | z-score vs full-sample mean/std | 120 | 4 | yes |&lt;/p&gt;

&lt;p&gt;Three things are worth reading off that table.&lt;/p&gt;

&lt;p&gt;The obvious bug (&lt;code&gt;shift(-1)&lt;/code&gt;) and the subtle one (a daily close joined onto hourly bars without shifting it forward) are equally fatal: 64 and 57 bad bars out of 120. The second is far more common in real code, because resampling and merging feels like data plumbing rather than a modelling decision.&lt;/p&gt;

&lt;p&gt;Normalisation is a leak. Min-max scaling over the whole file mismatched on 31 of 120 bars, because the minimum and maximum of a column are facts about the future. Anyone who has scaled features before splitting train and test has done this.&lt;/p&gt;

&lt;p&gt;A leak can be small and still be a leak. The full-sample z-score mismatched only 4 times in 120 bars — the mean and standard deviation of four months of hourly closes barely move when you add one more bar. It is still disqualifying: the value at bar &lt;em&gt;i&lt;/em&gt; depends on bars after &lt;em&gt;i&lt;/em&gt;, so the number your backtest traded on is a number your bot cannot compute.&lt;/p&gt;

&lt;h2&gt;
  
  
  The boolean trap
&lt;/h2&gt;

&lt;p&gt;Here is the result that changed how we run this check. We took the same series with every seventh bar deleted, filled the holes with &lt;code&gt;bfill()&lt;/code&gt; — backward fill, which copies the &lt;em&gt;next&lt;/em&gt; available price into the gap — and computed an EMA(20) over it.&lt;/p&gt;

&lt;p&gt;| What we audited | Bars checked | Mismatches | |---|---|---| | The EMA value itself | 120 | 15 | | The boolean &lt;code&gt;close &amp;gt; EMA&lt;/code&gt; built from it | 120 | 0 |&lt;/p&gt;

&lt;p&gt;Same bug, same bars. Audit the final true/false signal and the test passes. Audit the number underneath and the leak is plainly there. A boolean is a lossy summary: a contaminated value has to cross a threshold before the comparison flips, so most of the corruption is invisible at the signal level — until a day when it is not. Audit every intermediate value you compute, not only the entry flag.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-timeframe and warm-up
&lt;/h2&gt;

&lt;p&gt;If your strategy reads a 4h or daily candle while deciding on a 1h bar, the rule is simple: every higher-timeframe row you touch must have &lt;strong&gt;closed&lt;/strong&gt; by the close of the bar you are evaluating. A partial candle is legal only if you build it yourself from lower-timeframe candles that have closed. Most exchange APIs return the currently-forming candle as the first element of the response, so this bug gets written by accident constantly. Our own fetch helper drops any candle whose close time is in the future, and the audit then checks the surviving rows against the decision timestamp.&lt;/p&gt;

&lt;p&gt;A related failure produces the same symptom — backtest results your bot cannot reproduce — without any future data at all. Long indicators depend on how much history you loaded. Computing EMA(200) on the real BTC series above with only 100 bars of warm-up, versus 1,000 bars, moved the value by a median of 0.48% and up to 2.18%. That sounds harmless until you look at the trend boolean it feeds: &lt;code&gt;close &amp;gt; EMA(200)&lt;/code&gt; flipped on 25% of the bars we evaluated (n = 20 evaluation bars, so treat the exact percentage as indicative, not precise). With 300 bars of warm-up the drift fell to 0.07% median and nothing flipped. Your backtest loads years of history; your live bot usually loads whatever its first API call returned.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a leak is worth
&lt;/h2&gt;

&lt;p&gt;To put a size on it, we ran one trading rule twice on the same 3,000 bars, with the same exits (stop at max(ATR14, 0.6%), target 1.5x the stop, 25-bar time stop) and the same cost assumption (0.055% taker fee per side, charged in R). The only difference is the entry condition: the second run compares the &lt;em&gt;next&lt;/em&gt; close to the current one.&lt;/p&gt;

&lt;p&gt;| Entry condition | Trades | Mean R | Win rate | Total R | |---|---|---|---|---| | EMA(20)/EMA(50) cross (clean) | 24 | +0.044R | 50.0% | +1.1R | | Next close &amp;gt; current close (leak) | 232 | +0.240R | 57.8% | +55.6R |&lt;/p&gt;

&lt;p&gt;One bar of hindsight turns a rule with no detectable edge into one that looks like a business. The trade counts differ — the leaky condition triggers far more often — so this is an illustration of magnitude, not a controlled comparison. The direction is the point: leaks do not nudge results, they manufacture them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this method does not prove
&lt;/h2&gt;

&lt;p&gt;A clean look-ahead audit is a licence to keep testing, nothing more.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It does not prove your edge is real.&lt;/strong&gt; It proves only that your numbers were computable at the time. Overfitting, too few trades, concentration in two coins and ignored costs are separate failures with separate tests. For scale: across the 128 strategy books we track, as of 2026-10-14, &lt;strong&gt;zero&lt;/strong&gt; pass our six readiness gates — and almost all of them are look-ahead clean.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It only covers the code you hand it.&lt;/strong&gt; If the leak lives in how your trade ledger was assembled, or in a cached feature file built earlier over the whole history, auditing the signal function will not see it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It is a sampled test.&lt;/strong&gt; We checked 120 bars, not 3,000. Zero mismatches means "no leak at those bars", which is strong evidence, not proof. Increase the sample when a result looks surprisingly good.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your data vendor can leak.&lt;/strong&gt; Prices revised after the fact, timestamps labelled with a candle's close instead of its open, or funding rates stamped at the start of a settlement period rather than the end, will all pass a self-consistency check and still be wrong.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nothing here says anything about fills.&lt;/strong&gt; A signal that was computable at 14:00 can still be impossible to fill at the price your backtest assumed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What this means for your own bot
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write a &lt;code&gt;signal(df) -&amp;gt; one value per bar&lt;/code&gt; function&lt;/strong&gt; with no hidden state and no reads outside &lt;code&gt;df&lt;/code&gt;. If you cannot, that is your first finding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run the full-versus-truncated comparison on at least 100 bars&lt;/strong&gt; spread over your whole history. Any mismatch stops everything else until it is fixed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit values, not booleans.&lt;/strong&gt; Every indicator, every normalised feature, every merged higher-timeframe column — and the entry flag last.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grep for the usual suspects&lt;/strong&gt; as a second pass, never as the first: &lt;code&gt;shift(-&lt;/code&gt;, &lt;code&gt;center=True&lt;/code&gt;, &lt;code&gt;bfill&lt;/code&gt;, &lt;code&gt;backfill&lt;/code&gt;, &lt;code&gt;.interpolate()&lt;/code&gt;, &lt;code&gt;resample(...).last()&lt;/code&gt;, and any &lt;code&gt;.mean()&lt;/code&gt;, &lt;code&gt;.std()&lt;/code&gt;, &lt;code&gt;.min()&lt;/code&gt; or &lt;code&gt;.max()&lt;/code&gt; taken over a full column.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drop unclosed candles at the source.&lt;/strong&gt; Timestamp every input with the moment it became available, and compare that timestamp to the decision time rather than trusting row order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix warm-up before comparing backtest to live.&lt;/strong&gt; Load the same amount of history live as your backtest effectively used, and measure the sensitivity rather than assuming it is small.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-run the audit after every change to the feature pipeline.&lt;/strong&gt; Leaks arrive with refactors, not with new ideas.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Python implementation of all of the above — the full-versus-truncated audit, the warm-up sensitivity test, the multi-timeframe closed-candle check, plus the cost model and the statistical gates we use on our own books — is MIT-licensed at &lt;a href="https://github.com/botlabtrade/botlab-oss" rel="noopener noreferrer"&gt;github.com/botlabtrade/botlab-oss&lt;/a&gt;. Install numpy and pandas, point it at your own data, and you get the same report we run on ours. If you would rather not install anything, there is a browser version of the checks at &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;botlab.org.uk/#tool&lt;/a&gt;, which runs locally on a CSV of your trades.&lt;/p&gt;

&lt;p&gt;This is educational material about testing methodology. Nothing here is financial advice, and no result above is a live trading record.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Paper trading results are simulated. Past results don't predict future results. Crypto trading can lose money, including all capital. Not financial advice.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://botlab.org.uk/learn/how-to-detect-look-ahead-bias-in-your-own-backtest" rel="noopener noreferrer"&gt;BOTLAB&lt;/a&gt;. Score your own bot's trade log free: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>trading</category>
      <category>crypto</category>
      <category>datascience</category>
      <category>beginners</category>
    </item>
    <item>
      <title>NEAR Protocol Trading Bot: What to Test First</title>
      <dc:creator>Bot LAB</dc:creator>
      <pubDate>Wed, 14 Oct 2026 04:06:22 +0000</pubDate>
      <link>https://dev.to/botlab/near-protocol-trading-bot-what-to-test-first-fdh</link>
      <guid>https://dev.to/botlab/near-protocol-trading-bot-what-to-test-first-fdh</guid>
      <description>&lt;p&gt;Before you point a trading bot at NEAR Protocol or any other coin that is trending right now, test four things first: real trading costs at today's spreads, a large enough sample of trades, how the strategy did on data it never saw, and how it behaves when the hype fades. A backtest that only looks good during a hot streak usually reflects the streak, not an edge.&lt;/p&gt;

&lt;p&gt;This guide shows how to run those checks step by step. It does not say anything about where NEAR's price is going, and it won't. The goal is to judge the bot, not the coin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why trending coins are a trap for backtests
&lt;/h2&gt;

&lt;p&gt;When a coin like NEAR Protocol, Injective or Optimism shows up on trending lists, three things usually change at once:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Volatility jumps.&lt;/strong&gt; Bigger candles mean bigger wins &lt;em&gt;and&lt;/em&gt; bigger losses per trade.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Volume and attention change quickly.&lt;/strong&gt; Order books can look deep at one moment and thin the next.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The recent past is unusual.&lt;/strong&gt; A bot tuned on the last few weeks is tuned to an unusual regime.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A strategy that "would have made money" on a trending coin may only be showing that the coin moved a lot in one direction. That is market beta, not skill. A simple buy-and-hold over the same window would often show the same thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Count the trades before you look at returns
&lt;/h2&gt;

&lt;p&gt;The first number to check is not profit. It is the trade count.&lt;/p&gt;

&lt;p&gt;A trending window is often short, so a bot may only have taken 15–30 trades on it. With that few trades, one or two lucky outliers can create the whole result. We cover this in depth in &lt;a href="https://botlab.org.uk/learn/how-many-trades-does-a-backtest-need" rel="noopener noreferrer"&gt;How Many Trades Does a Backtest Need?&lt;/a&gt;. In short:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under ~30 trades: treat any result as anecdotal.&lt;/li&gt;
&lt;li&gt;30–100 trades: early signal at best, wide uncertainty.&lt;/li&gt;
&lt;li&gt;Several hundred trades across different market conditions: now you can start comparing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the coin doesn't have enough history for a meaningful sample, test the same rules across several similar coins and pool the results. If the rules only work on one hot coin, that is a warning sign.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Put realistic costs in first
&lt;/h2&gt;

&lt;p&gt;Costs decide whether a strategy survives, especially on fast timeframes. During a trend spike, two costs rise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Spread and slippage.&lt;/strong&gt; Your fill price can be noticeably worse than the candle close your backtest assumed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Funding (for perpetual futures).&lt;/strong&gt; When a coin is crowded on one side, funding payments can become a real drag on positions held for hours or days.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fees in USDT add up quickly on small accounts too. Always use your exchange's actual fee tier, and assume taker fees unless your bot genuinely posts limit orders that get filled. Our Lab News post &lt;a href="https://botlab.org.uk/news/13" rel="noopener noreferrer"&gt;Costs come first&lt;/a&gt; explains why we subtract costs before looking at anything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Split the data and test out-of-sample
&lt;/h2&gt;

&lt;p&gt;Never judge a bot on the same data used to choose its settings. A basic honest setup:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;In-sample (e.g. first 60–70% of the data):&lt;/strong&gt; pick parameters here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Out-of-sample (the remaining 30–40%):&lt;/strong&gt; run once, no tweaking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Walk-forward (better):&lt;/strong&gt; repeat the split on rolling windows, so every period gets tested on data the parameters never saw.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If performance collapses out-of-sample, the strategy was probably fitted to noise. The more parameter combinations you tried, the more likely the best one looks good by chance. That is what the &lt;a href="https://botlab.org.uk/learn/deflated-sharpe-ratio-explained" rel="noopener noreferrer"&gt;Deflated Sharpe Ratio&lt;/a&gt; is designed to correct for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Check the regime, not just the total
&lt;/h2&gt;

&lt;p&gt;Split results by market condition:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trending up&lt;/li&gt;
&lt;li&gt;Trending down&lt;/li&gt;
&lt;li&gt;Sideways / choppy&lt;/li&gt;
&lt;li&gt;High-volatility spikes (the "trending coin" moments)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A trend-following bot will often look great in a strong move and bleed slowly in sideways markets. A mean-reversion bot often does the opposite. Neither is wrong, but you need to know which one you have, and what happens to it when the trending phase ends.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Look past win rate
&lt;/h2&gt;

&lt;p&gt;A high win rate can hide a bad bot if the few losses are large. A low win rate can be fine if winners are much bigger than losers. Look at these together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Profit factor&lt;/strong&gt; (gross wins ÷ gross losses, after costs)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Average win vs average loss&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Max drawdown&lt;/strong&gt; and how long it took to recover&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Longest losing streak&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We compare the first two in &lt;a href="https://botlab.org.uk/learn/profit-factor-vs-win-rate-trading-bots" rel="noopener noreferrer"&gt;Profit Factor vs Win Rate for Trading Bots&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example (illustration only)
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The numbers below are made up to show the method. They are not BOTLAB results and do not describe any real bot or coin.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Imagine a 1-hour breakout bot backtested on a trending altcoin over six weeks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trades:&lt;/strong&gt; 60&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Average gross result per trade:&lt;/strong&gt; +0.60%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now subtract realistic costs, assuming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fees: 0.06% per side → 0.12% round trip&lt;/li&gt;
&lt;li&gt;Slippage during volatile hours: 0.15% per side → 0.30% round trip&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total cost per trade:&lt;/strong&gt; 0.42%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Net per trade:&lt;/strong&gt; 0.60% − 0.42% = &lt;strong&gt;+0.18%&lt;/strong&gt;. Two-thirds of the apparent edge disappeared.&lt;/p&gt;

&lt;p&gt;Next, split the trades by time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First 40 trades (in-sample, during the strongest trend): +0.45% net per trade&lt;/li&gt;
&lt;li&gt;Last 20 trades (out-of-sample, after the trend cooled): −0.36% net per trade&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The "profitable" backtest was really one strong move. On data it hadn't seen, the bot lost money after costs. With only 20 out-of-sample trades, you can't even say confidently how bad it is. The honest conclusion: &lt;strong&gt;not proven, keep paper trading or drop it.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Paper trade on live candles before any real money
&lt;/h2&gt;

&lt;p&gt;A backtest replays the past. Paper trading (simulated money, real market prices) runs the bot forward on candles it has never seen, with no chance of hindsight leaking in. It also exposes practical problems a backtest misses: delayed signals, missed fills, API errors and funding at the moment it actually applies.&lt;/p&gt;

&lt;p&gt;Our view is simple: &lt;a href="https://botlab.org.uk/news/14" rel="noopener noreferrer"&gt;every bot flies the simulator first&lt;/a&gt;. For a trending coin, paper trade long enough to see the trend end, not just while it's hot.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we judge bots at BOTLAB
&lt;/h2&gt;

&lt;p&gt;We run every bot through 6 statistical gates (G1–G6), defined on the site. A bot is only marked "ready for micro live" after passing all six.&lt;/p&gt;

&lt;p&gt;Passing the gates isn't the same as being proven. Of the 159 BOTLAB bots tracked when the site was last built (2026-10-14), 1 is marked ready for micro live, 1 is on watch and 157 are not ready. The one that passed, mr4h/long, has 80 paper trades from 2026-08-16 to 2026-10-13 (58 days) with a 73.8% win rate, and our own verdict is still "sample too small to conclude." Another bot, Atlas/ichimoku-4h, passed 4 of 6 gates over 229 paper trades (2026-08-08 to 2026-10-13) and is flagged as a suspected overfit. Those are paper trading results, and they don't predict future results.&lt;/p&gt;

&lt;p&gt;If you have your own bot's trade history, you can run it through the same kind of checks with the free tool: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A quick checklist before running a bot on a hot coin
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] At least several dozen trades, ideally hundreds across different conditions&lt;/li&gt;
&lt;li&gt;[ ] Fees, slippage and funding included at realistic levels&lt;/li&gt;
&lt;li&gt;[ ] Out-of-sample or walk-forward results reviewed, not just in-sample&lt;/li&gt;
&lt;li&gt;[ ] Results split by regime (trend, chop, spike)&lt;/li&gt;
&lt;li&gt;[ ] Profit factor, drawdown and losing streaks checked, not only win rate&lt;/li&gt;
&lt;li&gt;[ ] Paper traded on live candles, including after the trend cooled&lt;/li&gt;
&lt;li&gt;[ ] Exchange API key set to trade-only, withdrawals off, IP-restricted&lt;/li&gt;
&lt;li&gt;[ ] You've decided in advance the maximum loss you can accept, including losing all of it&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is it a good idea to run a trading bot on a trending coin like NEAR Protocol?
&lt;/h3&gt;

&lt;p&gt;That depends on the bot, not the trend. A trending coin gives you a short, unusual sample with higher costs and sharper reversals. Test the rules out-of-sample and across several coins before trusting any result. This guide makes no prediction about NEAR or any other coin.&lt;/p&gt;

&lt;h3&gt;
  
  
  How long should I backtest a bot on a new trending coin?
&lt;/h3&gt;

&lt;p&gt;Long enough to include more than one market regime and enough trades to be meaningful. If the coin's history is too short, test the same rules on similar coins with longer histories and pool the trades.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does my bot look profitable in the backtest but lose in paper trading?
&lt;/h3&gt;

&lt;p&gt;The most common reasons are underestimated costs (especially slippage in volatile hours), parameters fitted to the in-sample period, and a regime change after the backtest window. Paper trading on live candles is designed to catch exactly this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does a high win rate mean the bot is safe?
&lt;/h3&gt;

&lt;p&gt;No. A high win rate with occasional large losses can still lose money overall and produce deep drawdowns. Check profit factor, average loss size and max drawdown alongside win rate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Judge the bot, not the coin. Trending markets inflate backtests.&lt;/li&gt;
&lt;li&gt;Count trades first; small samples prove very little.&lt;/li&gt;
&lt;li&gt;Subtract fees, slippage and funding before reading any result.&lt;/li&gt;
&lt;li&gt;Only out-of-sample and forward (paper) results count as evidence.&lt;/li&gt;
&lt;li&gt;Even a bot that passes every gate can still have too small a sample to conclude anything.&lt;/li&gt;
&lt;li&gt;Use trade-only API keys with withdrawals off, and never risk money you can't afford to lose.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Paper trading results are simulated. Past results don't predict future results. Crypto trading can lose money, including all capital. Not financial advice.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://botlab.org.uk/learn/near-protocol-trading-bot-what-to-test" rel="noopener noreferrer"&gt;BOTLAB&lt;/a&gt;. Score your own bot's trade log free: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>trading</category>
      <category>crypto</category>
      <category>datascience</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Deflated Sharpe Ratio Explained: Why Your Backtest Looks Better Than It Is</title>
      <dc:creator>Bot LAB</dc:creator>
      <pubDate>Mon, 12 Oct 2026 16:06:37 +0000</pubDate>
      <link>https://dev.to/botlab/deflated-sharpe-ratio-explained-why-your-backtest-looks-better-than-it-is-480c</link>
      <guid>https://dev.to/botlab/deflated-sharpe-ratio-explained-why-your-backtest-looks-better-than-it-is-480c</guid>
      <description>&lt;p&gt;A Sharpe ratio tells you how much return a strategy produced per unit of wobble. The Deflated Sharpe Ratio asks a harder question: given how many versions of this strategy you tried before picking this one, how impressive is that number really?&lt;/p&gt;

&lt;p&gt;The gap between the two is where most backtests quietly die. This guide explains what the deflation does, how to compute it, and what number you should expect your own bot to produce.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem in one example
&lt;/h2&gt;

&lt;p&gt;Take a strategy with no edge at all. Now test 50 variants of it: different moving-average lengths, different stop distances, different hours of the day. Keep the best one.&lt;/p&gt;

&lt;p&gt;That winner will have a good-looking equity curve and a respectable Sharpe ratio. Not because it works, but because you ran 50 lotteries and kept the winning ticket. The ordinary Sharpe ratio has no way of knowing this happened. It sees one strategy and one track record, and it answers the question you asked rather than the question you should have asked.&lt;/p&gt;

&lt;p&gt;The Probabilistic Sharpe Ratio (PSR) and the Deflated Sharpe Ratio (DSR), both from work by Marcos López de Prado and David Bailey, close that hole.&lt;/p&gt;

&lt;h2&gt;
  
  
  PSR: is this Sharpe ratio distinguishable from zero?
&lt;/h2&gt;

&lt;p&gt;PSR(0) is the probability that a strategy's true Sharpe ratio is above zero, given the Sharpe you observed, the number of observations, and the shape of the return distribution.&lt;/p&gt;

&lt;p&gt;It rises with sample size, and it falls when returns are negatively skewed or have fat tails — which is exactly the profile of a strategy that wins small and often and then loses big. Two bots can show the same Sharpe ratio and have very different PSR values if one of them earned it over 1,000 trades and the other over 60, or if one of them has a hidden tail.&lt;/p&gt;

&lt;p&gt;A common working threshold is &lt;strong&gt;PSR(0) ≥ 0.95&lt;/strong&gt;: at least a 95% probability the true Sharpe is positive.&lt;/p&gt;

&lt;h2&gt;
  
  
  DSR: the same question, after counting your attempts
&lt;/h2&gt;

&lt;p&gt;DSR takes PSR and deflates the benchmark it is measured against. Instead of asking whether the Sharpe beats zero, it asks whether the Sharpe beats &lt;strong&gt;the Sharpe you would expect the best of N trials to produce by pure chance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That expected maximum grows with the number of trials, and it grows faster than people's intuition. The intuition to carry around is the one from order statistics: the expected largest value from N independent standard-normal draws rises roughly with the square root of twice the natural log of N. Sixty trials put the bar near 2.9 standard deviations; a thousand trials push it past 3.7. The number of attempts is not a footnote to the result. It is part of the result.&lt;/p&gt;

&lt;p&gt;Two things follow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DSR is always lower than PSR&lt;/strong&gt;, and the gap widens with every variant you try.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A strategy can have PSR(0) = 0.99 and DSR = 0.30 at the same time.&lt;/strong&gt; That combination is the signature of overfitting, and it is the single most informative pair of numbers you can compute about a backtest.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What counts as a trial
&lt;/h2&gt;

&lt;p&gt;This is where almost everyone under-counts. A trial is &lt;strong&gt;any variant you looked at and could have chosen&lt;/strong&gt;, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every parameter combination in a grid search, not just the ones you wrote down;&lt;/li&gt;
&lt;li&gt;every entry filter you added and then removed because it did not help;&lt;/li&gt;
&lt;li&gt;every coin universe you tried;&lt;/li&gt;
&lt;li&gt;every version of the strategy from earlier sessions, if the current version descends from it;&lt;/li&gt;
&lt;li&gt;every timeframe you tested before settling on the one you kept.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you ran a 10 by 10 grid, that is 100 trials, not 1. If you then added a filter and ran it again, that is 200. The honest number is almost always larger than the number you remember, and the correct response to uncertainty is to use the larger estimate. Deflating by too many trials makes you slow. Deflating by too few makes you confident about noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  A worked comparison
&lt;/h2&gt;

&lt;p&gt;Two of our own demonstration strategies, both audited the same way:&lt;/p&gt;

&lt;p&gt;| | Honest trend-follower | Curve-fitted variant | |---|---|---| | What it is | EMA crossover with a band, past bars only | the best of 50 variants: a crossover that only trades on two weekdays, at one hour, held for exactly 36 bars | | Variants tried | 3 | 50 | | PSR(0) | 0.95 | 0.98 | | DSR | 0.74 | 0.39 | | Verdict | not yet enough evidence | not ready, and the gap says why |&lt;/p&gt;

&lt;p&gt;The curve-fitted one has the &lt;strong&gt;better&lt;/strong&gt; ordinary statistics. It is the one you would pick if you only looked at PSR, or at the equity curve, or at the win rate. Its DSR is what gives it away: once the 50 attempts behind it are priced in, most of its apparent edge is explained by having tried 50 times.&lt;/p&gt;

&lt;p&gt;Note also that the honest strategy does not pass either. That is normal and it is the point. A real edge usually needs more trades before it can be told apart from luck, and "not yet" is a legitimate verdict.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use these numbers in practice
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write down your trial count before you compute anything.&lt;/strong&gt; Deciding it afterwards, when you can see which number you need, is how the count ends up at 1.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Report PSR and DSR together.&lt;/strong&gt; PSR alone flatters. DSR alone hides whether the problem is sample size or selection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set the bar in advance.&lt;/strong&gt; Ours: PSR(0) ≥ 0.95 and DSR ≥ 0.5, alongside a minimum trade count, a recency check, concentration limits and a drawdown limit. Six fixed gates, decided before the result is known.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expect to fail.&lt;/strong&gt; Across the hundred strategy books we track, mostly paper, none currently passes all six gates at our 300-trade floor. That is the honest base rate, and a tool that frequently tells you yes is not measuring anything.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What these statistics cannot do
&lt;/h2&gt;

&lt;p&gt;DSR works on your list of trades. It cannot see your code. So it will not catch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;look-ahead bias&lt;/strong&gt;, where the backtest used information that did not exist yet — that needs a separate audit that recomputes the signal on truncated history and checks it does not change;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;wrong cost assumptions&lt;/strong&gt; — if your R values were computed with optimistic fees, every statistic downstream inherits the optimism;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;a backtest that never could have been filled&lt;/strong&gt; at the prices it assumed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Get the trades right first. Then deflate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compute it on your own trades
&lt;/h2&gt;

&lt;p&gt;The implementation we use — PSR, DSR, minimum track record length, the six gates, the cost model and the look-ahead audit — is MIT-licensed Python at &lt;a href="https://github.com/botlabtrade/botlab-oss" rel="noopener noreferrer"&gt;github.com/botlabtrade/botlab-oss&lt;/a&gt;. There is also a &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;checker that runs in your browser&lt;/a&gt;: paste a CSV of closed trades, enter how many variants you tried, and read the six gates with your own numbers. Nothing is uploaded.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Paper trading results are simulated. Past results don't predict future results. Crypto trading can lose money, including all capital. Not financial advice.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://botlab.org.uk/learn/deflated-sharpe-ratio-explained" rel="noopener noreferrer"&gt;BOTLAB&lt;/a&gt;. Score your own bot's trade log free: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>trading</category>
      <category>crypto</category>
      <category>statistics</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Do Funding Rate and Open Interest Filters Improve a Crypto Bot?</title>
      <dc:creator>Bot LAB</dc:creator>
      <pubDate>Mon, 12 Oct 2026 16:06:35 +0000</pubDate>
      <link>https://dev.to/botlab/do-funding-rate-and-open-interest-filters-improve-a-crypto-bot-1h1c</link>
      <guid>https://dev.to/botlab/do-funding-rate-and-open-interest-filters-improve-a-crypto-bot-1h1c</guid>
      <description>&lt;p&gt;Exchange data is sold as the missing ingredient for crypto bots. Funding rate, open interest, the long/short account ratio, the perp premium: add one as an entry filter, the pitch goes, and your signal starts skipping the bad trades.&lt;/p&gt;

&lt;p&gt;We tested that claim properly and the answer was mostly no. Out of 60 filter-and-dataset combinations, one cleared the bar that separates a real effect from the best of sixty coin flips. This guide shows the test, the numbers, and the reason the result is so one-sided.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we tested
&lt;/h2&gt;

&lt;p&gt;Five trade lists, all on 15 USDT perpetual contracts on Bybit:&lt;/p&gt;

&lt;p&gt;| Dataset | What it is | Trades | Baseline mean R per trade | |---|---|---|---| | 15m | a 20-indicator voting scalp signal | 113,013 | -0.188R | | 30m | the same signal on 30-minute bars | 62,585 | -0.151R | | 4h (all) | a 4-hour mean-reversion bot's full ledger | 6,159 | -0.111R | | 4h (subset) | the part that bot actually trades | 424 | +0.101R | | 1D | a Donchian-20 daily breakout, 2 ATR stop | 886 | +0.205R |&lt;/p&gt;

&lt;p&gt;R is the result of a trade measured in units of its own risk: risk 1% of the account, make 2%, that is +2R. Every R above is &lt;strong&gt;after costs&lt;/strong&gt; — taker fee 0.055% per side, slippage measured by walking a real order book for the trade size, and average funding multiplied by holding time.&lt;/p&gt;

&lt;p&gt;Twelve filters, each with fixed rules taken from tools that already existed, nothing tuned for this test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Price and trend:&lt;/strong&gt; BTC daily regime against its 200-day EMA, multi-timeframe EMA agreement on 4h, the Ichimoku cloud, Supertrend, ADX between 20 and 35, position in the 20-day Donchian range, Choppiness below 55.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exchange data:&lt;/strong&gt; funding not crowded on our side of the trade, open interest rising with price over 24 hours, no open-interest spike above 8% in 4 hours, the long/short account ratio contrarian against its 30-day median, the perp premium contrarian against its 7-day mean.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How we avoided fooling ourselves
&lt;/h2&gt;

&lt;p&gt;Three decisions did most of the work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every data point carries the moment it became knowable.&lt;/strong&gt; Funding is stamped at its settlement time, open interest and the long/short ratio at the end of their hour, candle-derived values at candle close. A trade may only read rows that were available strictly before its entry. We re-checked a random sample of 48 trades against the live exchange API and they matched. Without this rule, a filter that quietly reads the current hour's open interest will look brilliant and be worthless.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The split is by time, not at random.&lt;/strong&gt; The oldest 60% of entries are the training period, the newest 40% the test period. A filter counts as helping only if the trades it agrees with beat the baseline in &lt;strong&gt;both&lt;/strong&gt; periods, with at least 30 agreeing trades in each. Random splits leak: a trade from June sitting in training while its neighbour from the same June afternoon sits in test is not an out-of-sample test of anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We counted our own attempts.&lt;/strong&gt; Twelve filters across five datasets is 60 trials. If all 60 were pure noise, the largest t-statistic you would expect to see by chance is roughly the square root of twice the natural log of 60, about &lt;strong&gt;2.86&lt;/strong&gt;. That is the bar. A filter scoring t = 2.0 in a 60-trial study has not found anything; it is simply the luckiest of sixty.&lt;/p&gt;

&lt;p&gt;Because trades opened on the same day share the same market, we also computed a daily-clustered statistic: the average of each day's agree-minus-disagree difference, rather than treating every trade as independent. This matters more than most people expect. A filter that tags 400 trades across 30 days has roughly 30 independent observations, not 400.&lt;/p&gt;

&lt;h2&gt;
  
  
  What came back
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;One combination cleared 2.86.&lt;/strong&gt; Multi-timeframe EMA agreement on the 4-hour bot: both the fast pair and the slow pair pointing the same way as the trade. It helped in training, it helped in test, and it cleared the noise bar. Everything else either failed one period, or beat the baseline by less than the study's own luck threshold.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The funding and open-interest guardrails almost never disagree.&lt;/strong&gt; Across all ten cells where they applied, they agreed with 84% to 100% of trades, and in six of those ten they were effectively constant — they say "fine, go ahead" nearly every time. That is a useful property for a risk check, which should only ever stop you in a genuinely extreme state. It is a useless property for a signal, because a filter that never says no cannot improve anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The long/short ratio changed its mind by dataset.&lt;/strong&gt; It helped on 15m, on 30m and on the 4-hour ledger, overfit on the 4-hour subset, and did nothing on the daily. A filter whose direction depends on which dataset you show it is describing the dataset, not the market.&lt;/p&gt;

&lt;h2&gt;
  
  
  The reason, which is simpler than the statistics
&lt;/h2&gt;

&lt;p&gt;Look at the fee arithmetic on the 15-minute signal. Fees alone are 0.055% twice, so 0.11% per round trip, before slippage and before funding. The minimum stop is 0.6%. So 0.11 divided by 0.6 is about &lt;strong&gt;0.18R of pure cost per trade&lt;/strong&gt; — almost exactly the size of that signal's loss per trade of -0.188R.&lt;/p&gt;

&lt;p&gt;The 15-minute signal does not have a filtering problem. It has a cost problem. No entry filter can rescue an edge smaller than the cost of taking it; the best a filter can do is make you lose more slowly by trading less.&lt;/p&gt;

&lt;p&gt;On the daily breakout, with a stop measured in multiples of ATR, the same 0.11% is a rounding error. This is why the same filter can look useless on one timeframe and plausible on another: the thing that changed was the denominator.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means for your own bot
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check costs before you check filters.&lt;/strong&gt; Divide your round-trip cost by your typical stop distance. If the answer is a meaningful fraction of your expected edge per trade, no filter will save the strategy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Count every variant you tried&lt;/strong&gt;, including the ones you abandoned, and raise your evidence bar accordingly. The honest number is almost always larger than the one you remember.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat exchange data as a guardrail, not as alpha.&lt;/strong&gt; Funding and open-interest extremes are good reasons to stand aside. They are poor reasons to enter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check how often your filter disagrees.&lt;/strong&gt; If it agrees with 95% of your trades, it cannot be doing much, however good its numbers look.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What we are not claiming
&lt;/h2&gt;

&lt;p&gt;The 60-trial count covers this study alone. These five datasets came from strategies that were themselves selected after earlier experiments, so the true number of attempts behind them is larger and every figure here is, if anything, flattering. The 15m and 30m lists are backtests of our own scalp signal rather than live bots. The order-book slippage uses a recent snapshot, which understates the cost of trading in thinner past markets. And the split is a single cut in time, not a walk-forward.&lt;/p&gt;

&lt;p&gt;The one surviving result is a reason to keep testing multi-timeframe trend agreement on new trades. It is not a reason to trade it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run the numbers yourself
&lt;/h2&gt;

&lt;p&gt;The statistics behind all of this — the probabilistic and deflated Sharpe ratios, the minimum track record length, the six readiness gates, the cost model and the look-ahead audit — are MIT-licensed Python at &lt;a href="https://github.com/botlabtrade/botlab-oss" rel="noopener noreferrer"&gt;github.com/botlabtrade/botlab-oss&lt;/a&gt;. Point it at your own trade list and you can reproduce the method on your own data. There is also a &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;browser version&lt;/a&gt; that needs no install.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Paper trading results are simulated. Past results don't predict future results. Crypto trading can lose money, including all capital. Not financial advice.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://botlab.org.uk/learn/do-funding-rate-and-open-interest-filters-improve-a-crypto-bot" rel="noopener noreferrer"&gt;BOTLAB&lt;/a&gt;. Score your own bot's trade log free: &lt;a href="https://botlab.org.uk/#tool" rel="noopener noreferrer"&gt;Check your bot&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>trading</category>
      <category>crypto</category>
      <category>datascience</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
