AlgoStrike Labs

How we test

The standard every system we sell, and every rule set we test for a client, is held to. Last revised 12 October 2026.

A backtest is an argument, not a fact. It is only as honest as the assumptions behind it, and most of those assumptions are never written down. This page writes ours down. If a disclosure or a test report ever departs from what is here, the departure is stated in the document itself.

What this page is notIt contains no results, no figures and no claims about any system. It describes method. We are not registered with SEBI in any capacity and nothing here is investment advice. See the Terms.

Contents

1. A rule has to be mechanical

Before anything is tested, every rule is written so that a stranger could execute it from the document alone, without a phone call to us. If the rule contains "unless conditions look bad", "if the market is choppy" or any judgement a person makes while watching a screen, it is not a rule. It is discretion with a spreadsheet, and it cannot be tested, because the test would be testing our mood on the day.

The stranger test: could someone who has never met us run this, exactly, on a day we are unreachable?

This has a cost. Mechanical rules are sometimes worse than a good trader's judgement on a given day. We accept that, because a rule that can be tested, audited and transferred is worth more than a judgement that cannot be.

2. Data and its limits

We test on historical index and option-chain data at intraday resolution. The source, resolution and coverage used for a given test are stated in the report, together with any gaps, because every data set has gaps and pretending otherwise is where errors start.

What intraday bars cannot tell you

A one-minute bar carries four prices. Inside that minute the market traded many more. A rule that fires "when price crosses X" within a bar is being tested against a guess about the order in which open, high, low and close occurred. We treat intra-bar crossings conservatively: if a bar's range contains both a trigger and a stop, the stop is assumed to have been hit first. This makes results worse. That is the correct direction to be wrong in.

Option chain data

Where a rule depends on option prices, the test uses the historical price of the specific strike and expiry, not a model price derived from the index. Illiquid strikes are flagged. A strike with no quote at the moment of the rule's decision is treated as untradeable, and the rule's own fallback applies; if there is no fallback, no trade is taken.

3. Fills: never at mid

The single most common way a backtest flatters a strategy is by filling at the mid-point of the bid and ask. Nobody gets mid. On an expiry day the spread on an out-of-the-money option can be a meaningful fraction of its premium, and a strategy that crosses that spread twice a day is paying it twice a day.

Buys fill at the ask. Sells fill at the bid. Always.

Where bid and ask are not available in the data, we fill at the traded price adjusted by a stated spread assumption, adverse to the order, and we say so. Limit orders are modelled as filling only if the market trades through the limit, not merely touches it. Unfilled legs are handled by the rule set's own logic, which must specify what happens — cancel, chase, or abandon the entry — because that decision is part of the strategy, not a detail.

4. Costs, line by line

Every report states the cost model in full before any result appears. The reader should be able to disagree with a number, substitute their own and re-run. A test that cannot be re-run with different costs is a story, not a test.

ItemHow it is applied
BrokeragePer order, at a stated flat rate. Stated so you can replace it with your own broker's.
Securities transaction taxAt the statutory rate on the applicable basis, including the different treatment of positions that expire in the money.
Exchange transaction charges, SEBI fees, stamp duty, GSTAt the rates in force on each test date.
Slippage on entriesA stated amount per lot, adverse to the order, in addition to crossing the spread.
Slippage on stop exitsA larger stated amount, and larger again on days flagged as gap days (§5).
MarginModelled at the exchange framework in force on the test date. A position that could not have been held under that day's margin is not held.

The slippage assumptions are the most argued-about numbers in any test, which is why they are the first thing stated. If a buyer thinks ours are too kind, the report shows what the results look like at double the assumption, so the argument can be had with numbers rather than adjectives.

5. Stops and gap days

A stop loss in a backtest is a promise the market did not make. Index options reprice on the open; a position carried overnight does not get out at its stop level if the market opens through it. It gets out at the first available print, which can be a long way from the level.

We handle this in two ways. First, stops are filled at the worse of the stop level and the first tradeable price after the trigger, never at the stop level itself. Second, sessions where the open is beyond a stated distance from the prior close are flagged as gap days, and stop fills on those days carry the larger slippage assumption. The report lists the gap days in the period and shows the strategy's result on them separately, because a short-option strategy's whole character is decided by what it does on its five worst days.

6. Regimes and structural breaks

"Tested since 2019" sounds like years of evidence. It is several different markets glued together. Volatility regimes change; so, in Indian index options specifically, have expiry days, lot sizes, the number of weekly expiries, margin frameworks and settlement conventions. A rule set that worked across all of those is either robust or fitted to all of them, and the only way to tell is to look at each separately.

Every report splits the test period at the structural breaks that matter for the instrument, names each one, and shows the result inside each segment. It also splits by volatility regime, using a stated measure computed from the data itself. A strategy that made all its money in one segment is reported as a strategy that made all its money in one segment.

7. Overfitting, and how we guard against it

Any rule set with enough adjustable parameters can be made to look good on the past. The guards we use:

Parameter count is disclosed

The report states how many free parameters the rule set has. Fewer is better. A system with two parameters that works adequately is worth more than one with eleven that works brilliantly, because the second one is probably describing the past rather than predicting anything.

Sensitivity, not optimisation

We do not search for the best parameter values and report those. We report how results change when each parameter is moved either side of its chosen value. If a small move in a parameter produces a large change in results, that is reported as fragility, and fragility is a finding.

Periods held back

Where the test period allows, rules are specified on one portion of the data and evaluated on another that was not used in specifying them. Where it does not allow this, the report says so, and the result is weighted accordingly.

No changes after the fact

A rule that is altered after seeing where it lost is a different rule, and the test starts again. The report states the version of the rule set it tested. Changes between versions are logged.

8. What a report contains

In this order, so that the assumptions are read before the results:

SectionContents
Rules testedThe exact version. For a client's own rule set, exactly as supplied, with any ambiguity we had to resolve stated.
DataSource, resolution, coverage, gaps.
Fill and cost modelEverything in §3 and §4, with the numbers.
Results by segmentEach structural segment and each volatility regime separately, then the whole.
Worst stretchesThe worst sessions, the worst consecutive run, and the gap days, individually.
SensitivityResults under doubled costs, and under each parameter moved either side.
What this test does not showA plain list. Queue position. Partial fills. Outages. Margin calls mid-session. The behaviour of a person under stress. Any regime not in the data.

A test report contains no recommendation and no opinion on whether the rules should be traded. It reports what the rules did on past data under stated assumptions. What to do with that is the reader's decision.

9. What we refuse to report

10. The limits of all of this

Everything above makes a backtest more honest. Nothing makes it true. A historical test cannot contain the regime that has not happened yet, cannot reproduce the moment a broker's system goes down, and cannot model the person who abandons the rules after the fourth losing week. The most carefully tested strategy in the world can lose money from the first day it is deployed.

We hold ourselves to this standard because it is the honest way to do the work, not because it guarantees anything. If a buyer wants a guarantee, we are the wrong people to be talking to.

Not investment adviceAlgoStrike Labs sells software and documentation. We are not registered with SEBI as a research analyst, investment adviser, portfolio manager or in any other capacity. Trading in derivatives carries substantial risk of loss. Simulated results are not indicative of future results.