Blog
Notes from the strategy factory

Your Backtest's Dollar Was USDC. On March 11 It Traded at 87 Cents.
We labeled the equity curve in dollars. The account was in USDC, and that Saturday USDC was not a dollar.
Read the post →
How do you warm up a backtest without counting the lookback as performance?
Unfinished indicators, cropped curves that keep their positions, and 30-day warmups on 8-hour features. The restart check that catches them.
Read the post →
We Backtested on Binance and Paper-Traded on Bybit. The Edge Was the Lag.
We researched BTC on Binance and paper-traded it on Bybit. The backtest wasn't optimistic. It was watching a faster tape.
Read the post →
The Hedge That Doubled Our Backtest’s Trading Costs
The option trades were sparse. The hedge traded every time the underlying twitched. Here’s how we found the missing costs in an options backtest.
Read the post →
Your Backtest's Short Was Winning. Auto-Deleveraging Closed It Anyway.
Liquidation is what happens when your margin runs out. ADL is what happens when theirs does, and you were the one making money.
Read the post →
The Signal Was Right. Our Options Backtest Bought the Wrong Expiration.
The signal called for a call spread. The backtest picked an expiration that looked liquid in hindsight. We traced the mismatch to one quiet calendar join.
Read the post →
Your Options Backtest Used a Midprice That Never Traded
A midpoint can be a sensible estimate of value and a lousy assumption for execution. Here are three ways that difference quietly manufactures options backtest performance.
Read the post →
Why Does My Backtest Keep Replacing Its Options Data?
The same options strategy can produce different results on “the same” history. Here’s how to tell whether the market changed in your archive, and what to save so the next run is explainable.
Read the post →
Your Backtest’s Sharpe Can Rise When You Add More Markets
A broader market universe looks like diversification. During strategy search, it can also be another batch of trials. Here’s how to tell the difference.
Read the post →
Why Does My Backtest Look Better With More Frequent Rebalancing?
A daily rebalance can capture a signal sooner, and spend the edge doing it. Here’s how to measure whether extra trading earns its keep.
Read the post →
Your Strategy’s Sharpe Ratio Can Improve When Its Data Gets Worse
A suspicious tick can be a bad print, or the one observation that exposes your strategy’s fragility. Data cleaning needs an audit trail, not just a prettier equity curve.
Read the post →
We Rebuilt a Backtest After a Data Vendor Changed Its History
The same strategy code and date range produced a different equity curve six weeks later. We traced the drift to revised market data, then rebuilt the experiment so we could tell what had changed.
Read the post →
Your Strategy Ran 240 Trials. How Many Backtests Did You Really Run?
You tried 240 parameter sets and kept the winner. Its Sharpe is 2.1. The important question is how many chances you gave noise to look like an edge.
Read the post →
The Strategy Worked Until We Charged It for Rolling a Futures Position
Our calendar spread looked clean until the front contract expired. Then the backtest rolled a position at a price nobody could trade.
Read the post →
The Rebalance Looked Cheap Until We Counted the Spread
The backtest charged 4 basis points in fees. The spread and market impact took the rebalance past 20. Here’s how we found the missing cost.
Read the post →
How do I backtest a strategy that trades on a daily signal?
A daily bar gives you a price and a date, but it doesn’t tell you when your strategy knew the close. Here’s how to backtest daily signals without granting them an impossible fill.
Read the post →
We Let an AI Research Agent Optimize a Strategy. The Diary Was Less Impressive.
The agent found a strategy with a 4.1 Sharpe. Then we counted the attempts, froze the search, and watched the result shrink into something we could actually evaluate.
Read the post →
Your AI Research Agent Has Seen the Test Set: Three Ways the Score Gets Tainted
A test set stops being a test when its results steer the next experiment. Here are three ways research agents quietly learn from it, and how to keep the score honest.
Read the post →
How do you test whether a strategy’s edge survives higher trading costs?
Don’t ask whether your strategy survives “realistic costs.” Measure how much cost it can absorb, which assumptions matter, and where the edge disappears.
Read the post →
Why Your Backtest Needs a Delisting Ledger
If a company disappears from your backtest, its final return may have disappeared too. Three common shortcuts turn dead stocks into invisible winners.
Read the post →
Your Backtest Found a 20% Edge. How Much Came From One Bad Timestamp?
A 20% backtest edge can come from a number that nobody could have known at the time. Here’s how to find out whether revisions, late releases, or vendor backfills are doing the trading for you.
Read the post →
We Took Apart a Prediction Market Backtest That Bought the Wrong Contract
The backtest bought “Will the bill pass?” But which bill, by what deadline, and according to whose resolution? We dissect the contract identity failures that turn a tidy prediction market replay into a different bet.
Read the post →
The Funding Payment That Made a Winning Perp Trade Lose Money
A BTC perpetual trade bought the right direction and still lost money. Here’s the ledger, payment by payment, and the accounting checks that explain why.
Read the post →
How do you tell whether a strategy’s edge survives a different market regime?
A strategy’s average return can hide a fragile bargain with one kind of market. Here’s how to find out whether its edge travels across regimes.
Read the post →
A Better Backtest Can Make Your Strategy Research Worse
A backtest can help you reject a bad idea. Use it to pick the best of 500 ideas, and the winner may be the luckiest one. Here’s how to keep the research process honest.
Read the post →
Why Does My Backtest’s Limit Order Fill When the Market Never Reached It?
Your limit price appeared inside the bar, so the backtest marked a fill. That’s a price touch, not evidence you got the trade.
Read the post →
Your Strategy Passed Walk-Forward. Why Did the Paper Results Drift?
A strategy passed walk-forward validation, then paper trading diverged. The first suspect may be the handoff between research and execution, not the market.
Read the post →
Why did my backtest trade at a price the market never showed?
If your simulated fill is better than every price in the bar, the problem may be your execution assumptions, not the signal. Here’s how to trace where that price came from.
Read the post →
The Backtest Found 12% Annual Turnover. The Account Traded 38%.
A backtest can say 12% annual turnover while the account trades 38%. The gap often starts with what “turnover” means in code.
Read the post →
How do you keep an AI strategy agent from leaking tomorrow into today?
A strategy can pass every syntax check and still know the future. Here are the quiet ways research agents leak information, and the checks that catch them.
Read the post →
How do you backtest a strategy that trades around a market halt?
A halt is not a zero-volume bar. It is a change in what the market will let your strategy do, with a reopening auction that can redraw the price you thought you were trading.
Read the post →
Your edge vanished after the fee tier changed. Did the strategy break, or the account?
Your strategy’s gross trades stayed the same, but its fee tier changed with your account’s volume. Here’s how to tell whether the edge moved or the account did.
Read the post →
The Rebalance That Sold Tomorrow’s Winners: A Turnover Teardown
A ranking table is not a trading strategy until you turn it into orders. Follow one monthly rebalance from target weights through turnover, fees, and the assumptions that can make its backtest look too clean.
Read the post →
Your Backtest Loved the Best Hour. Can You Trade It After the Clock Changes?
Your strategy makes money in the first hour—until that hour moves. A practical guide to testing intraday seasonality across daylight saving changes and venue schedules.
Read the post →
Your Backtest Spent the Same Cash Twice: A Guide to Portfolio Accounting
A position can be profitable on paper and still leave your next order unfundable. Three common accounting shortcuts explain how backtests quietly spend the same cash twice.
Read the post →
Your Paper Strategy Restarted With a Different Position: A Letter About State Recovery
You restarted the process, but did it restart the strategy? Here’s how to find out whether its memory of positions, pending orders, and signals matches the paper account.
Read the post →
The Backtest Passed. The Paper Strategy Missed 37% of Its Orders.
Our paper strategy submitted 100 orders and got 63 fills. The backtest counted 91. The gap came from order state, timing and assumptions that a Sharpe ratio could not show.
Read the post →
We Tried to Reproduce a Strategy’s Backtest. Here’s Where the Numbers Drifted.
We reran a saved strategy and got a different equity curve. Over a few days, we traced the drift through data revisions, dependency versions and a surprisingly small default setting.
Read the post →
How do I know whether a backtest’s market data was actually tradable?
Correct prices don’t guarantee an honest backtest. Check when each observation became usable, which market it represents, and whether your strategy could have acted on it.
Read the post →
We Replayed a Paper Strategy After a Restart. Its Orders Changed.
We restarted a paper strategy in the middle of a position and got a different sequence of orders. The signal was fine. Its memory wasn't.
Read the post →
What does an options backtest actually do at expiration?
At expiration, the last option quote is often the least useful number in your P&L. Here’s how to model settlement, exercise, and delivery without inventing a fill.
Read the post →
Your continuous futures chart is a contract nobody could trade
On April 20, 2020, two WTI contracts settled $58.06 apart. Splice them together carelessly and your backtest books $58,060 that no position earned.
Read the post →
Restart your strategy halfway through the backtest. Does it remember what it owns?
A strategy can survive every market in your dataset and still break when its process restarts. Stop the replay halfway through and find out what it forgot.
Read the post →
Your Paper Account Rejected the Backtest’s Fill: A Letter About Exchange Filters
You sized the order correctly in your backtest, but the paper venue rejected it. Here’s how to make precision rules part of the strategy’s execution model.
Read the post →
Tick data won't save your backtest — for most strategies it makes things worse
More resolution isn't more truth. For most strategies, tick data trades a real problem — bad fill and cost assumptions — for a fake one: the illusion that finer-grained data means a more honest backtest.
Read the post →
The Rebalance That Ate the Signal: A Strategy’s First Walk Through the Real Market
The signal was right about direction. The portfolio still lost its edge at the rebalance, one shallow book and one oversized order at a time.
Read the post →
How do you backtest an inverse perpetual without mixing up BTC and dollars?
A trade earns $10,000. The account gains $15,000. Both numbers are correct. Your backtest needs to explain the missing $5,000.
Read the post →
Your equity backtest found a short. Could you actually borrow it?
Your gap-fade strategy shorts every name it selects. Your broker has a smaller menu. A letter about the missing transaction before your entry.
Read the post →
Your Backtest’s Slippage Model Should Be Wrong on Purpose
The goal of a slippage model isn’t to guess the fill you would have got. It’s to find out whether your strategy survives plausible fills you can’t know from historical bars.
Read the post →
Your macro backtest traded the revised jobs report
You downloaded the historical jobs series correctly. Your strategy still traded numbers that wouldn't exist for another two months. Here's how to rebuild its information set.
Read the post →
How much latency should you add to a backtest? We measured every millisecond of ours
195 ms median. 2,970 ms at the 99th percentile. 840 ms median on the minutes your signal actually fires. Only one of those numbers is interesting.
Read the post →
Five sizing rules, one signal: the part of your backtest doing the real work
Most of the variance in your backtest result comes from how big you hold, not from when you enter. Here's the same signal under six sizing rules, with the fee bill and the peak leverage the report forgot to print.
Read the post →
Same code, same data, two different Sharpes: the nondeterminism audit your backtest needs
11,205 bars bit-identical, then a tie in a ranking, then a 0.15 Sharpe gap. If you don't know your backtest's jitter band, you don't know whether your best parameter set won anything.
Read the post →
Your Sharpe Ratio Survived Every Test. It Still Might Be a Coincidence.
A Sharpe of 2 can look extraordinary after a thousand attempts. The surprising number is how many ways you tried to get there.
Read the post →
Why Your Backtest’s Volatility Target Misses the Risk It’s Supposed to Control
A 10% volatility target is a sizing instruction, not a risk guarantee. Take one BTC perpetual strategy apart and see where the number stops describing what the account can lose.
Read the post →
The funding rate looked cheap. The position still bled.
A perpetual paid 0.01% funding every eight hours. The trade still lost money. Here’s where the backtest’s attractive carry went.
Read the post →
The row your options backtest is built on: one Deribit BTC call, field by field
The ticker has about twenty fields. Two of them are prices nobody traded at, three are in units your backtest probably misreads, and the number that kills most options strategies isn't in the payload at all.
Read the post →
You backtested $2,000 a clip and now you want $50,000: a letter about capacity
Your edge is 22 bps gross per trade. At $2,000 you pay about 2 bps of impact. At $50,000 you pay 11. The arithmetic that follows decides whether you have a strategy or a screenshot.
Read the post →
Your backtest never got liquidated: margin, mark price and the leverage line you skipped
The equity curve dips 63% in April and recovers by June. On the venue, the account was closed on day 41 and there was nothing left to recover with.
Read the post →
Both your stop and your target were inside the same bar. Which one did your backtest pick?
The bar's low is below your stop. Its high is above your target. One of those happened first, the bar doesn't say which, and something in your code decided anyway.
Read the post →
The minutes that don't exist: gaps, halts and zero-volume bars in OHLCV history
Missing bars aren't randomly scattered through your history. They cluster in exactly the minutes your strategy cares about, and the standard fixes make the damage invisible.
Read the post →
Your limit order didn't fill: a letter about queue position, maker backtests and the Sharpe you invented
Your fill rule is one line long: if the bar's low is at or below my limit, I'm filled. That line is doing more work than your entire alpha, and it's doing it wrong.
Read the post →
Split-adjusted data, taken apart: what NVDA's 10-for-1 does to every row behind it
The row says the close was $120.8781. The tape that day said $1,208.88. Six columns separate those two numbers, and most backtests misread at least three of them.
Read the post →
What breaks when you backtest prediction markets: an eight-day diary
The instrument dies. It pays one dollar or nothing, once, on a date you don't control. Almost every assumption baked into a returns-based backtester is wrong here, and here's the order in which we found that out.
Read the post →
How many trades does a backtest need before the Sharpe means anything?
The standard error of an annualized Sharpe is roughly 1 over the square root of your years of data. Everything uncomfortable follows from that one line.
Read the post →
You built a strategy that only trades at 00:00 UTC — a letter about funding-time artifacts
Your Sharpe is 2.9 and every dollar of it arrives within four minutes of a funding settlement. I've seen this exact result maybe a dozen times. Here's how to find out which kind you have.
Read the post →
Why Your Backtest Treats a Volatility Spike Like a New Regime
Volatility targeting sounds adaptive. A stale estimate, a bad floor, or a hidden rebalance rule can turn one rough week into months of missed exposure. Here’s how to spot the damage.
Read the post →
Your symbol universe is a time machine: survivorship bias in crypto perp backtests
You built your universe by calling exchangeInfo once, today, and filtering for status == TRADING. That single line quietly deleted every coin that died.
Read the post →
Anatomy of one 1-minute bar: everything OHLCV doesn't tell your backtest
Twelve values in a JSON array. At least four of them mean something different from what your fill engine assumes. Here's the whole bar, taken apart.
Read the post →
Your backtest has 100 trades. Why is the average fill still a guess?
One hundred trades, 0.04% fees, and a 0.02% slippage assumption can look precise. But the fill is still a guess until you ask what size the market could absorb.
Read the post →
Why Does My Backtest Trade More Often Than My Paper Strategy?
A signal can say “buy” once while the order system tries three times and fills twice. Here’s how to model the gap between a backtest’s trades and a paper account’s order history.
Read the post →
Your Backtest Has a Clock Problem, Even When Every Timestamp Is Right
A quote and a signal can share a timestamp while arriving in different orders. That tiny ambiguity can decide whether your strategy traded at all.
Read the post →
Why Your Backtest’s Open Orders Need a Clock
A limit order can outlive the signal that created it. Three common ways backtests lose track of open orders, and a practical model that keeps them honest.
Read the post →
Why Your Backtest Gets the Dividend Wrong
A dividend can look like a sudden loss, a free return, or a cash balance your strategy never received. Three common modeling mistakes explain why.
Read the post →
Three ways to fail walk-forward optimization without noticing
Walk-forward testing is sold as the antidote to overfitting. Done casually, it's just overfitting with better paperwork. Three failure modes and their tells.
Read the post →
How an AI agent team takes a trading idea from sentence to paper money
Ten agents, one pipeline, and a funnel that's designed to kill ideas. A walkthrough of what actually happens between "funding momentum" and a live paper node.
Read the post →
Paper trading is the only benchmark your backtest answers to
We replay every paper strategy's window through the backtest engine every day and diff the trades. Here's what that ritual keeps catching.
Read the post →
What a round trip really costs on nine venues
Fee pages are marketing. Here's the two-way arithmetic that decides whether your strategy is a business or a donation, venue by venue.
Read the post →
Why most backtests lie, and the four line items that fix them
A strategy that backtests at +40% a year and loses money live isn't unlucky. It was measured wrong. Four line items separate the two numbers.
Read the post →