1. write down the claim, exactly
Copy the exact words, the video link and the timestamp. Not your summary of it. “60–70% win rate over the years” and “usually works” are very different claims, and you can only test the words that were actually said.
2. turn the words into rules, before you test
Write a rules table: market, timeframe, session and time zone, entry, stop, target, what happens if neither is hit, trades per day, filters. Wherever the words can be read two ways, don’t pick the one you like: test both. We tested 18 versions of one “simple” strategy. Write the table before the first run and never change it because of the results; that’s how people fool themselves.
Here is a trading strategy, quoted from a video: "<paste the exact words, with the timestamp>".
Turn it into a rules table: market, timeframe, session times (with time zone), entry trigger, stop loss, target, what happens if neither is hit, how many trades per day, and any filters.
Then list every place where the words are ambiguous and could be read two or more ways. Don't fill gaps with your own ideas; each ambiguity becomes a separate version we will test.3. get real data (free)
| source | what you get | watch out for |
|---|---|---|
| Dukascopy historical data | Forex, index and commodity CFDs, 1-minute and tick, BID and ASK, many years back. What we used. | CFD prices, not exchange futures. Times are UTC: convert to the market’s time zone. |
| HistData.com | Free 1-minute files for forex pairs and some indices. Good as a second source to cross-check. | BID only (no spread). Check the time stamps against another source before trusting them. |
| Yahoo Finance | Long daily history for stocks, ETFs and futures. | 1-minute bars only go back about 30 days, so they’re only good for spot checks. |
| your broker | Many brokers (including Indian ones) offer historical data through their platform or API. | Check what history and timeframe you actually get, and whether it’s adjusted. |
Use 1-minute data for any intraday rule. Daily candles can’t tell you whether the stop or the target was hit first.
4. count the real costs
- Spread: buys fill at the ASK, sells at the BID. Use the real spread from the data, not a guess.
- Slippage: stop orders and market exits fill a little worse than the level. We used 0.5 points on the Nasdaq.
- Commission: whatever your broker charges per trade.
- Then run it once with zero costs, so everyone can see how much the costs change the answer.
5. run every version, every year
Write a Python backtest for the rules table above.
Data: 1-minute BID and ASK candles in a CSV per day (columns: time_utc, open, high, low, close). Convert times to the market's local time zone, daylight saving included.
Execution: a long enters at the ASK and exits on the BID, a short the other way round. If the stop and the target are both touched inside the same minute, assume the stop was hit first.
Costs: the real spread from the data, plus <X> points slippage on every stop and market fill, plus <Y> commission per trade.
Run every version from the ambiguity list. For each version print: trades, trades per week, win rate, % of trades that hit the full target, % stopped, % closed at the end of the day, average win and average loss in R, break-even win rate, profit factor, and a table per year.
Also run it once with zero costs. Save every trade to a CSV (date, direction, entry time and price, stop, target, exit time and price, exit reason, result in R).Read the results like this:
| win rate | Trades that closed in profit. On its own it says almost nothing. |
| full target hit | How often the trade actually reached the target. In our test it was 11%, while the win rate was 44%: most “wins” were small. |
| R | Profit or loss in units of risk. +2R = a full 1:2 winner, about −1R = a stop. |
| break-even win rate | average loss ÷ (average win + average loss). If your win rate is below this, you lose money. |
| profit factor | Money won ÷ money lost. Below 1 = losing. |
| per year | A claim “over the years” has to hold in each year, not just on average. |
6. check it by hand, then publish
Pick 5 random days from the trade CSV. For each day, print the 1-minute bars around the entry and the exit, and show step by step why the backtest entered, where the stop and target were, and why it exited. Recompute the result in R by hand from the printed prices. Flag anything that doesn't match.Then cross-check with a second data source, and publish everything: the rules, every trade, the code. If you can’t show the trades, it isn’t proof. See ours: the Umar Punjabi strategy backtest, with every trade, the rules file and the full Python code to download.
tools
- Python (free) with pandas, or any AI that writes code with you. Our setup for that is in the ai trading desk guide.
- Our code: the downloader and the backtest are in the proof download (code/ib_data.py, code/ib_backtest.py). Use them as a template.
- Before you trust anyone’s claim: run the claim check.
read this twice
- A backtest tells you how rules did, not how they will do. Markets change.
- Testing 100 versions and keeping the best one is not a result, it’s luck. Report every version you ran.
- Paper trade or demo trade a strategy before risking money on it.
Questions, or a claim you want us to test? Comment it on Instagram. Educational content, not financial advice.