Backtest methodology
Exactly what the backtester does, so you can judge how far to trust a result. Every backtest on the site, in the app and in Claude uses the same engine and rules.
Data
- Daily prices, dividends and splits for every stock on Oslo Børs, Nasdaq Stockholm, Nasdaq Copenhagen and Nasdaq Helsinki, about 12 years back, from Yahoo Finance. Updated every weekday evening.
- Returns use dividend-adjusted prices, so dividends are reinvested. A strategy can be run in NOK, SEK, DKK, EUR or USD: returns are converted at each day's exchange rate.
- Annual-report figures (earnings, equity, EBITDA, debt, shares) from Yahoo Finance, which go back only to about 2023.
- Interest rates from Norges Bank and inflation from Statistics Norway, for market timing.
- AI scores of company announcements and reports, from the exchanges' news services.
No look-ahead
A backtest may only use what an investor could have known on the day. Each rule below enforces that.
- Decisions use data up to the close of day t and trade from day t+1, so a signal never earns the return of the day it was measured.
- Annual-report figures count from 90 days after the fiscal year end, when the report has been published, and expire after 550 days, so a company that stops reporting drops out.
- An announcement counts from the day it was published, or the next trading day if it came after the close at 16:20.
- Macro values are dated when they were published: inflation for a month from the 10th of the next month.
- Exchange rates are never filled in from later days.
- Price cleaning removes only zero and negative prices. Large jumps are kept and counted under the result: a later price is never used to correct an earlier one, since that would be look-ahead too.
Trading and costs
- Commission is charged in basis points on every purchase and sale, with an optional minimum fee per trade. Presets match the Nordic brokers' price lists.
- Slippage, when turned on, is half the bid-ask spread plus a square-root market-impact term: daily volatility × √(trade size ÷ average daily turnover). Trading a larger share of a stock's normal turnover costs more, up to 20% of the trade. Volatility and turnover are the previous day's.
- Short positions pay a borrowing fee on their value every day, 2% a year unless you set another.
- Between rebalances the holdings drift with prices and are not traded. An order in a stock without a price that day waits until the stock trades.
- All costs are shown under the result, split into commission, slippage and borrowing.
Benchmark
Every result is compared with all the stocks in its own universe – those passing the price, turnover and history filters on each day – held in equal weight, without costs. It answers the question: did the filters and the ranking add anything over just owning the market you chose?
Metrics
Ratios use daily returns over 252 trading days a year and no risk-free rate.
- Sharpe
- The average annual return divided by the annual volatility.
- Sortino
- Like Sharpe, but divided by the downside deviation: only losing days count as risk.
- Calmar
- CAGR divided by the max drawdown: the yearly return per unit of the worst fall.
- Beta and alpha vs benchmark
- Beta is how much the strategy moves when the benchmark moves 1%. Alpha is the annual return left after beta × the benchmark's return.
- Tracking error and information ratio
- Tracking error is the annual volatility of the return over the benchmark. The information ratio is that excess return per year divided by the tracking error: above 0.5 is good and rare.
- Worst drawdowns
- The deepest falls from a peak, with the dates of the peak, the low and the recovery, and how many trading days it took to get back.
Factor regression
A strategy can beat the benchmark simply by holding more small companies or recent winners than the benchmark. The factor regression separates that from real skill (alpha). It explains the strategy's weekly returns with four factors built from the same universe each backtest uses:
- Market
- The benchmark's return.
- Size (small minus large)
- The 30% of stocks with the lowest trading turnover minus the 30% with the highest. Turnover stands in for market cap, which needs share counts that only go back to about 2023.
- Momentum (12-1 months)
- The 30% with the highest return over the past year, skipping the last month, minus the 30% with the lowest.
- Low volatility
- The 30% with the lowest 60-day volatility minus the 30% with the highest.
Each factor is rebuilt on the first trading day of every month from that day's close, held in equal weight from the next day, and needs at least five stocks on each side. Weekly returns are used because many Nordic small caps don't trade every day, which would bias daily estimates towards zero. The t-statistics use Newey-West standard errors with four lags, which allow for returns that are correlated from week to week. The regression needs a year of weeks.
Read it like this: a loading of 0.5 on size means half of a small-cap bet. The factor alpha is the yearly return none of the factors explain. With a t-statistic below 2 it can't be told apart from zero, however large it looks. Value and quality factors will be added once the annual-report data covers enough years.
Returns are not reduced by a risk-free rate. With beta b and a risk-free rate rf, alpha is overstated by about rf × (1 − b) a year.
Testing robustness
One good backtest can be luck, and trying many variants and keeping the best is a sure way to find luck. These tools show whether a result holds up:
- Rolling periods: how often the strategy beat the benchmark over every 1- and 3-year window.
- Cross validation: the same strategy started on many dates, each run picking its own stocks from cash, with the spread of CAGR and Sharpe.
- Optimizer and Improve with AI: each variant shows the CAGR of the first and second half of the period. A variant that only shines in one half was probably lucky.
- Walk-forward test: the optimizer's best setting on a rolling training window, traded in the months after it, then picked again. Chained, the test periods show what optimizing would have earned without hindsight, next to the setting that turned out best. Each setting is backtested once over the whole period and cut into windows, so switching setting between tests costs nothing extra.
- Deflated Sharpe Ratio (Bailey and López de Prado): the chance that the best Sharpe among the settings tried is a real edge. It raises the bar from zero to the Sharpe the best of that many settings would reach by luck, and allows for the length of the test, skew and fat tails. Above 95% is convincing. It only knows the settings in that run, not the other ideas you tried first.
- Live strategies: a track record from the day you start following a strategy, with real prices, that is never recalculated.
Export to Python or a spreadsheet
Press Download on a result to save the equity curve, every trade and the holdings as CSV files, or the whole result as JSON. Values are raw: returns as decimals and money in the strategy's currency.
import pandas as pd
equity = pd.read_csv("tickback-…-equity.csv", parse_dates=["date"], index_col="date")
returns = equity["strategy"].pct_change().dropna()
print(returns.resample("YE").apply(lambda r: (1 + r).prod() - 1))
Known limitations
- Survivorship bias: companies that were delisted, through bankruptcy or takeover, are not in the data. Results look better than reality, most of all for small caps and strategies that buy losers. Adding delisted companies is the next step for the data.
- Annual-report figures go back only to about 2023, so value and quality strategies have short histories.
- The AI model may know what happened after older announcements, so AI strategies can look better in early years than they would have been.
- Yahoo Finance has occasional errors, such as unadjusted splits. Large jumps are counted under each result.
- Trades happen at the daily close: there is no intraday data, and taxes are not included.
How the engine is checked
The engine was audited in September 2026, and every defect found was fixed. An automated test suite runs on every change. It compares the simulation with independent share-and-cash ledgers, checks that adding later data never changes an earlier result, and checks costs, shorts, stop-losses and currency conversion on small markets with known answers.