proof #003NIFTY · BANK NIFTY · FINNIFTY (+ BTC, ETH)11 october 2026

Dinesh Kirola (Stock Burner) said:

“…the accuracy of this setup… 65 to 70.”

▶ Hear the claim 13:29 ↗

Stock Burner, YouTube, 6 Oct 2024

the investigation

His 9-20 EMA setup. Every minute of NIFTY, BANK NIFTY and FINNIFTY since 2015. We wrote his rules down before running the test, then counted how often his 1:3 target was hit — with real charges.

What happened when we tested it? ↓
01 / your expectation

What would you expect?

If the rules do what he says, how many trades should win?

02 / what actually happened

The claim met the data.

Accuracy = his 1:3 target reached before the stop, on the 5-minute spot chart — the way he measures it. Statutory option charges and slippage included.

all his conditions21–24%target hit, three indices
years at 60%+0 / 36his exact rules, every index
sessions never shared64 / 322his verified P&L, 2023–24
03 / the work behind the number

Five steps.
Nothing hidden.

These are the actual files that produced the test. Open a step to see the implementation.

01Start with the actual prices.NIFTY, BANK NIFTY and FINNIFTY 1-minute spot, Jan 2015–May 2026, checked against a second source for 2021–2026. Binance 5-minute BTC and ETH for his crypto version.+
code/sb_backtest.py · L166–181
def load_market(sym: str, source: str = "kaggle", start: str | None = None, end: str | None = None) -> Market:
kind = "crypto" if sym in CRYPTO else "nse"
if kind == "crypto":
f = RAW / f"{sym}_m1.npz"
source = "binance"
else:
f = RAW / (f"{sym}_m1.npz" if source == "kaggle" else f"{sym}_hf_m1.npz")
z = np.load(f)
t = z["t"]
keep = np.ones(len(t), bool)
if start:
keep &= t >= int(pd.Timestamp(start, tz=IST).timestamp())
if end:
keep &= t < int((pd.Timestamp(end, tz=IST) + pd.Timedelta(days=1)).timestamp())
off = 19800 if kind == "nse" else 0
loc = t[keep] + off
Browse the full file ↓Raw source ↗
02Turn his words into fixed rules.Rules written down (with his quotes and timestamps) before the first run. Ambiguous statements become separate readings.+
code/sb_backtest.py · L466–481
def strat_nine20(m: Market, v: dict, rules: dict, zero: bool = False, optimistic: bool = False) -> tuple[list[dict], dict]:
"""The 9-20 EMA setup on `tf_min` candles (sb_rules.json -> nine20 for every rule's source).
Bias: long only while EMA9 > EMA20, short only while EMA9 < EMA20. A 9/20 crossover arms the setup.
range_filter='breakout': the cross must come with a range breakout in the same direction = a candle close
beyond the extreme of the previous `range_n` candles, within `breakout_window` candles before the cross or
after it (before the entry). [Ma1HnAXxww4: range -> breakout -> crossover]
nochop: skip a cross that comes after >= 2 other crosses in the previous `chop_n` candles (EMAs intertwined).
need_departure: after the cross, price must first leave the 9 EMA (a candle entirely beyond it) and then come
back for the pullback. [uK7epk8-r9o 0:08:42 'निकला निकला निकला। और फर्स्ट टाइम पुलबैक']
max_entries_per_cross: 1 = first pullback only; null = every pullback while the trend lasts.
Entry candle (long; short mirrored): low <= EMA9 (it comes to the 9 EMA) and close > max(EMA9, EMA20), and with
entry='touch9_bull' a green candle. Entry at its close.
Stop: 'entry_candle' low/high or 'swing5' = extreme of the last 5 candles. Target rr x risk (null = none).
exit_ema20: exit at the close of a candle that closes beyond the 20 EMA against the trade."""
tf = v.get("tf_min", 5)
cd = candles(m, tf)
Browse the full file ↓Raw source ↗
03Make the costs count.Statutory option charges by date (brokerage, STT, exchange, GST, stamp duty) plus a stated slippage, converted to index points. Zero-cost runs are reported too.+
code/sb_backtest.py · L263–278
def cost_points(rules: dict, sym: str, date: str, spot: float, zero: bool = False) -> float:
if not zero and sym in CRYPTO:
# Delta Exchange perpetual futures: taker fee per side (+18% GST on the fee) + slippage per side, % of price
K = rules["costs_crypto"]
return spot * 2 * (K["taker_fee"] * (1 + K["gst"]) + K["slippage_pct_per_side"] * rules["costs"].get("slippage_mult", 1.0))
return _cost_points_nse(rules, sym, date, spot, zero)
def _cost_points_nse(rules: dict, sym: str, date: str, spot: float, zero: bool = False) -> float:
"""Per-UNIT round-trip cost of an ATM option trade, in SPOT index points (premium points / delta): STT, NSE
transaction charge (+GST), stamp duty, SEBI fee on an ATM premium, plus the stated slippage per side.
Brokerage is a flat ₹20 per order whatever the quantity, so it is charged separately in rupees (brokerage_R)."""
if zero:
return 0.0
C = rules["costs"]
gst = C["gst"]
Browse the full file ↓Raw source ↗
04Test his premises directly.“After a big bar it keeps going”: we measured the next candle after every big bar against ordinary candles.+
code/sb_backtest.py · L703–718
def bigbar_premise(m: Market, v: dict) -> dict:
"""'10 में से आठ बार ... बिग बार के बाद से डायरेक्शन होता है' (KpOwBYb3H7c 0:18:52): after a big bar, how often
does price continue in its direction? Compared with ordinary candles of the same colour on the same side of
the 9 EMA (the baseline)."""
cd = candles(m, v.get("tf_min", 5))
C = cd["c"].to_numpy(); H = cd["h"].to_numpy(); L = cd["l"].to_numpy(); O = cd["o"].to_numpy()
e9 = ema(C, 9)
dirs, rng = bigbar_flags(cd, e9, v)
day = cd["day"].to_numpy()
n = len(cd)
base = np.where((C > O) & (C > e9), 1, np.where((C < O) & (C < e9), -1, 0))
base[dirs != 0] = 0
def measure(sig):
nc, ext, cnt = 0, 0, 0
for k in np.flatnonzero(sig):
Browse the full file ↓Raw source ↗
05Check his public record.His Sensibull-verified Zerodha P&L, day by day, against the trading calendar and his own claims for the same periods.+
code/sb_backtest.py · L1079–1094
def cmd_record(a, rules: dict) -> None:
"""His PUBLIC RECORD: the Sensibull-verified daily P&L (Zerodha, 17 May 2023 - 4 Sep 2024) against his own
claims for the same periods (record_claims.json), coverage of trading sessions, and market-data checks of the
trades he showed. Writes sb_record_audit.json."""
C = json.loads(CLAIMS.read_text())
d = pd.read_csv(SENSIBULL_CSV)
d["date"] = pd.to_datetime(d["date_ist"])
sess = _sessions()
span = sess[(sess >= d["date"].min()) & (sess <= d["date"].max())]
shared = set(d["date"])
unshared = [x for x in span if x not in shared]
runs, cur = [], []
for x in span:
if x in shared:
if cur:
runs.append(cur)
Browse the full file ↓Raw source ↗
The rules, costs and assumptions in plain words

His exact 9-20 rules: a range breakout, a 9/20 EMA cross, then a candle that touches the 9 EMA and closes beyond both EMAs; stop at that candle; target 1:3 on the spot chart. We also tested all his conditions, the 1-hour chart, a generous 1:1 target and riding the trend to a 20 EMA close.

Years at 60%+: none, in any index (0 of 36 index-years for his exact rules). Every 5-minute reading lost money after charges.

His verified record: 64 of 322 trading sessions between 2023-05-17 and 2024-09-04 were never shared — including 3 Aug 2023, the “+5 lakh, 150% ROI” vlog day Moneycontrol reported on. Sharing stopped on 4 Sep 2024.

August 2023 (Moneycontrol, 23 & 25 Aug): he was accused of editing a P&L to show about ₹5.6 lakh when it “should really have been” about ₹4.3 lakh; Angel One advised its clients not to engage with him; Zerodha removed his referral link. His apology video was later retitled “…Not a Scammer” and is now private.

His 2025–26 crypto results (“10 lakh into 2 crore in six months”) are shown as his own screen recordings. We found no third-party verified record for them.

“Marketing accounts” are an industry practice insiders describe (and an undercover investigation reported in Aug 2026). We make no claim about his account.

Full method and limitations ↗
04 / follow the result

A curve tells
the whole story.

One version at a time. Select another reading to see what changes. Every losing version stays in the table.

strategy / 15 readings

9-20 EMA

His exact rules, all his conditions, his “most accurate” 1-hour chart, a generous 1:1 target, and riding to a 20 EMA close.

cumulative result / units of risk

NIFTY · EXACT (Ma1HnAXxww4): 5m | range breakout + 9/20 cross | 9-EMA touch, green candle closes beyond 9/20 | SL entry candle | 1:3 | first entry per cross

-1237.7R
NIFTY · EXACT (Ma1HnAXxww4): 5m | range breakout + 9/20 cross | 9-EMA touch, green candle closes beyond 9/20 | SL entry candle | 1:3 | first entry per cross · cumulative RServer-prepared series from the trade CSV. R means units of risk; this is not a compounded balance. Bucket extrema and endpoints are retained.1R-416R-832R-1249R2015-01-092026-05-14

5,782 trades · 29.9% net-positive · -0.214R per trade · PF 0.76

full target hit
22.5%
break-even win rate
35.9%
win-rate reference: claim 65–70% / data 29.9%

Curve = cumulative R, not dollars or a compounded account. Prepared from the downloadable CSV, with bucket extrema retained. Win-rate reference uses a separate percentage scale.

15 versions. Select one to change the chart.
Every version of 9-20 EMA. Sort by any column and select a version to update its chart.
Receipt
52233.5%0.0951.121CSV ↓
6,21723.8%-0.1540.803CSV ↓
2,64827%-0.2250.743CSV ↓
5,81928.6%-0.1940.768CSV ↓
6,07548.9%-0.2140.642CSV ↓
50632%0.0051.006CSV ↓
one year at a time

When did it work?

Yearly totals in R. Green above zero; red below. The last year is partial (data ends 2026-05-14). The raw JSON keeps every year’s win rate and trade count.

View exact yearly numbers
201530.2% wins493 trades-125.6R
201631.8% wins531 trades-141.0R
201731.5% wins527 trades-188.2R
201830.3% wins508 trades-146.3R
201928.6% wins497 trades-119.2R
202030.1% wins509 trades-95.6R
202129% wins510 trades-92.8R
202233.8% wins521 trades10.3R
202329.2% wins500 trades-82.3R
202428.8% wins525 trades-78.7R
202525.4% wins492 trades-148.0R
202629% wins169 trades-30.3R
How the wins and losses were distributed

Exact counts from this CSV. Longest consecutive stop-loss run: 20. A day-end loss is not counted as a stop.

strategy / 3 readings

9 EMA scalping

His most-viewed strategy video: rejection at the 9 EMA, 1:2 target or exit on a close across the 9 EMA.

cumulative result / units of risk

NIFTY · Gc-xw57Zrg8: 5m | 9-EMA rejection | SL candle | 1:2 or 9-EMA close or 3 candles | max 3 trades/day | stop after 2 SLs in a row

-2592.6R
NIFTY · Gc-xw57Zrg8: 5m | 9-EMA rejection | SL candle | 1:2 or 9-EMA close or 3 candles | max 3 trades/day | stop after 2 SLs in a row · cumulative RServer-prepared series from the trade CSV. R means units of risk; this is not a compounded balance. Bucket extrema and endpoints are retained.1R-864R-1728R-2593R2015-01-092026-05-14

8,031 trades · 36.4% net-positive · -0.323R per trade · PF 0.521

full target hit
15.3%
break-even win rate
52.3%

Curve = cumulative R, not dollars or a compounded account. Prepared from the downloadable CSV, with bucket extrema retained. Win-rate reference uses a separate percentage scale.

3 versions. Select one to change the chart.
Every version of 9 EMA scalping. Sort by any column and select a version to update its chart.
Receipt
8,04436%-0.2620.576CSV ↓
8,02434.7%-0.3770.467CSV ↓
8,03136.4%-0.3230.521CSV ↓
one year at a time

When did it work?

Yearly totals in R. Green above zero; red below. The last year is partial (data ends 2026-05-14). The raw JSON keeps every year’s win rate and trade count.

View exact yearly numbers
201531.5% wins676 trades-312.1R
201633.6% wins702 trades-346.0R
201733.5% wins716 trades-393.9R
201833.2% wins699 trades-304.0R
201937.8% wins706 trades-233.8R
202037.6% wins723 trades-186.8R
202139.2% wins712 trades-125.8R
202238.3% wins720 trades-158.7R
202338% wins705 trades-192.4R
202437.9% wins708 trades-136.0R
202539% wins712 trades-152.8R
202636.1% wins252 trades-50.4R
How the wins and losses were distributed

Exact counts from this CSV. Longest consecutive stop-loss run: 9. A day-end loss is not counted as a stop.

strategy / 12 readings

Big Bar

A spot-chart stand-in for his Big Bar entries (his option-chart condition can’t be coded).

cumulative result / units of risk

NIFTY · BB1: 5m | big bar >= 2x prior 3, body >= 60%, closes beyond 9 EMA after touching it | <= 0.08% of price (his 15 pts) | SL bar low | 1:2 | 3 candles | max 3/day

-64.1R
NIFTY · BB1: 5m | big bar >= 2x prior 3, body >= 60%, closes beyond 9 EMA after touching it | <= 0.08% of price (his 15 pts) | SL bar low | 1:2 | 3 candles | max 3/day · cumulative RServer-prepared series from the trade CSV. R means units of risk; this is not a compounded balance. Bucket extrema and endpoints are retained.0R-21R-43R-64R2015-05-272025-12-29

201 trades · 33.3% net-positive · -0.319R per trade · PF 0.445

full target hit
9%
break-even win rate
52.9%

Curve = cumulative R, not dollars or a compounded account. Prepared from the downloadable CSV, with bucket extrema retained. Win-rate reference uses a separate percentage scale.

12 versions. Select one to change the chart.
Every version of Big Bar. Sort by any column and select a version to update its chart.
Receipt
633.3%-0.5280.342CSV ↓
633.3%-0.5280.342CSV ↓
650%-0.4580.36CSV ↓
66234.3%-0.2440.462CSV ↓
1233.3%-0.2170.642CSV ↓
1233.3%-0.2740.548CSV ↓
one year at a time

When did it work?

Yearly totals in R. Green above zero; red below. The last year is partial (data ends 2025-12-29). The raw JSON keeps every year’s win rate and trade count.

View exact yearly numbers
201520% wins10 trades-5.8R
201631.8% wins22 trades-11.4R
201735.8% wins53 trades-8.5R
201827.8% wins18 trades-7.9R
201920% wins15 trades-7.4R
202033.3% wins3 trades-0.4R
202122.2% wins9 trades-4.0R
202230% wins10 trades-2.2R
202338.5% wins26 trades-6.3R
202425% wins8 trades-4.6R
202548.1% wins27 trades-5.6R
How the wins and losses were distributed

Exact counts from this CSV. Longest consecutive stop-loss run: 3. A day-end loss is not counted as a stop.

strategy / 10 readings

9-20 EMA on crypto

The same idea on BTC and ETH (Binance prices standing in for Delta Exchange), 1-hour and 15-minute.

cumulative result / units of risk

BTC · CRYPTO 1h | first pullback after departure | green candle | SL swing5 | 1:3

-315.1R
BTC · CRYPTO 1h | first pullback after departure | green candle | SL swing5 | 1:3 · cumulative RServer-prepared series from the trade CSV. R means units of risk; this is not a compounded balance. Bucket extrema and endpoints are retained.9R-103R-214R-326R2019-01-042026-09-23

1,601 trades · 26.2% net-positive · -0.197R per trade · PF 0.785

full target hit
26.1%
break-even win rate
31.1%
win-rate reference: claim 60–70% / data 26.2%

Curve = cumulative R, not dollars or a compounded account. Prepared from the downloadable CSV, with bucket extrema retained. Win-rate reference uses a separate percentage scale.

10 versions. Select one to change the chart.
Every version of 9-20 EMA on crypto. Sort by any column and select a version to update its chart.
Receipt
6,80124.9%-0.5060.551CSV ↓
1,25127.3%-0.1350.848CSV ↓
2,27935.3%-0.1180.844CSV ↓
2,03450%-0.2330.623CSV ↓
1,60126.2%-0.1970.785CSV ↓
6,80426.2%-0.3450.664CSV ↓
one year at a time

When did it work?

Yearly totals in R. Green above zero; red below. The last year is partial (data ends 2026-09-23). The raw JSON keeps every year’s win rate and trade count.

View exact yearly numbers
201926.7% wins180 trades-25.9R
202031.3% wins211 trades3.7R
202123.9% wins218 trades-36.3R
202224.3% wins206 trades-48.5R
202323% wins239 trades-106.3R
202426.1% wins226 trades-45.3R
202526.3% wins171 trades-37.7R
202629.3% wins150 trades-18.8R
How the wins and losses were distributed

Exact counts from this CSV. Longest consecutive stop-loss run: 22. A day-end loss is not counted as a stop.

a closer look / 01

Claim 65–70%. His exact rules:

5-minute chart, his exact 9-20 rules, 1:3 target, Jan 2015–May 2026 (5,782, 5,819, 5,821 trades).

a closer look / 02

His “most accurate” chart: 1-hour.

“Accuracy… 60 to 70%, highest on the 1-hour” (19 Nov 2025). Same rules, 1-hour candles, 1:3 target.

a closer look / 03

His own test: 29%.

“383 trades… 110 trades… 29% win rate” — read out by him on 4 Sep 2026 (his own company’s tool). He added it was still profitable: +58.7% with a −60.6% drawdown.

a closer look / 04

Big bar: does the next candle keep going?

NIFTY 5-minute, our coding of his big-bar definition (BANK NIFTY and FINNIFTY have too few big bars under it). A coin toss either way.

a closer look / 05

His verified record: what was shared?

Sensibull-verified Zerodha P&L, 2023-05-17 – 2024-09-04, against the NSE trading calendar. 3 Aug 2023 is not in the record.

05 / hear it for yourself

His words.
The exact second.

Short source excerpts, not our paraphrase. Hinglish quotations are translated; timestamps let you hear the original. Re-uploads are labelled.

“In the last six months I turned my 10 lakh trading account into 2 crore.”

Stock Burner, YouTube, 17 Jan 2026

Watch on YouTube ↗ 0:04

YouTube loads only after you press play. A source may disable embedding or become unavailable; the original timestamp link remains available.

06 / follow the money

Read the
small print.

What is promoted, what is promised, and what the primary sources actually say. These are published-source observations, not findings about anyone’s private accounts.

01

Referral links

His site and video descriptions have carried referral links for Zerodha, Upstox, Angel One, Fyers, Alice Blue, Dhan, Delta Exchange and others. Moneycontrol reported in 2023 that he told his Telegram channel he earns a share of the brokerage fee from them.

02

Crypto Trading Club

Free only if you open a Delta Exchange account through his link and submit your Delta UID; otherwise ₹4,236–15,253 + GST. Delta’s own terms say its products are not offered through a SEBI-registered intermediary.

03

Courses

₹4,000–20,000. His terms: “No refunds… under any circumstances” and “We do not guarantee any income”. His site: “Please note that we are not registered with SEBI.”

Primary-source pages checked October 2026. Their contents can change; the receipts record what this audit used.

07 / fairness is part of the proof

What this test
cannot tell you.

Right of reply. Right to correct.

Dinesh Kirola (Stock Burner) or their team are welcome to respond. We will publish the response here. Found a mistake in a quote, rule or trade? Send the source and the row; we will check it and log the correction publicly.

Send evidence or a response ↗

Corrections so far: none (11 october 2026).

08 / the receipts

Don’t take
our word for it.

The rules. The code. Every trade. Browse small previews here, or take the full research pack with you.

realshyt / stock-burner-dinesh-kirola-9-20-ema-strategy-backtest

Public receipts · published 2026-10-11

Download ZIP 4.7 MB
Files 55
/ README.txt
2 KB · 21 lines · published 2026-10-11
realshyt proof data pack: https://realshyt.com/proof/stock-burner-dinesh-kirola-9-20-ema-strategy-backtest
What this is: our backtest of the strategies Dinesh Kirola ("Stock Burner") teaches — his 9-20 EMA setup, his 9 EMA scalping
and his Big Bar entries — on every minute of NIFTY, BANK NIFTY and FINNIFTY from 2015 to 2026 (plus BTC and ETH), with statutory
charges and slippage; and his public Sensibull-verified P&L record checked against the trading calendar. 40 readings with every trade.
Our test, our method, our opinion. Not financial advice.
Files
trades/*.csv every trade of every published reading (R = result in units of risk, after costs; cost_pts in index points)
results_*.json every number for every reading (incl. the larger 9 EMA readings not published as CSV), with yearly results
premises.json his premises tested directly (big bars; 5-minute vs 1-hour; trend days)
crosscheck.json the same rules on a second data source (2021–2026) — same conclusion
options_NIFTY.json his exact rules priced on real NIFTY weekly option premiums (a sample of expiries; cross-check only)
headline.json the headline readings quoted in the video
his_public_record/ his Sensibull-verified daily P&L (as published by him), his own claims, and our coverage + market checks
rules.json the exact rules and costs, written down before the first run (dated snapshots in the repo's prereg/)
METHOD.md his rules with verbatim quotes + timestamps, every ambiguity, what was not codeable, all results
code/sb_backtest.py the Python used for everything
Found a mistake? Tell us on Instagram @realshyt__ and we will correct it publicly.
Lines 1–21 / 21

Copy copies the visible page of source. Raw and Download contain the entire file.

README.txt

The receipts, explained.

realshyt proof data pack: https://realshyt.com/proof/stock-burner-dinesh-kirola-9-20-ema-strategy-backtest

What this is: our backtest of the strategies Dinesh Kirola ("Stock Burner") teaches — his 9-20 EMA setup, his 9 EMA scalping and his Big Bar entries — on every minute of NIFTY, BANK NIFTY and FINNIFTY from 2015 to 2026 (plus BTC and ETH), with statutory charges and slippage; and his public Sensibull-verified P&L record checked against the trading calendar. 40 readings with every trade. Our test, our method, our opinion. Not financial advice.

Files trades/*.csv every trade of every published reading (R = result in units of risk, after costs; cost_pts in index points) results_*.json every number for every reading (incl. the larger 9 EMA readings not published as CSV), with yearly results premises.json his premises tested directly (big bars; 5-minute vs 1-hour; trend days) crosscheck.json the same rules on a second data source (2021–2026) — same conclusion options_NIFTY.json his exact rules priced on real NIFTY weekly option premiums (a sample of expiries; cross-check only) headline.json the headline readings quoted in the video his_public_record/ his Sensibull-verified daily P&L (as published by him), his own claims, and our coverage + market checks rules.json the exact rules and costs, written down before the first run (dated snapshots in the repo's prereg/) METHOD.md his rules with verbatim quotes + timestamps, every ambiguity, what was not codeable, all results code/sb_backtest.py the Python used for everything

Found a mistake? Tell us on Instagram @realshyt__ and we will correct it publicly.

no trust required

Verify one trade yourself.

Open a 5-minute NIFTY (or BANK NIFTY / FINNIFTY) spot chart in IST and add the 9 and 20 EMAs. Find the recorded entry time, compare the stop and the 1:3 target, then follow the candles to the recorded exit. cost_pts is the per-trade cost in index points; rules.json lists the schedule.

The server samples uniformly from every trade in this version. The complete CSV stays out of your browser.

2015-01-09long / row 2
entry
8,247.72015-01-09T13:35:00+05:30
stop
8,236.8recorded level
target
8,280.4recorded level
exit
8,236.82015-01-09T13:35:00+05:30
result
-1.242Rstop

Times: UTC. Prices are CFD prices; costs can explain differences from the chart.

Open every trade in this version ↓
09 / your turn

Agla guru kaun?

A name is a start. A public claim with its source is better. Comment BURN on the audit reel and tell us what you want checked next.

Follow @realshyt__ ↗Learn to check a claim yourself ↗

Our test and our opinion of it. Short public excerpts used for commentary and review. Educational content, not financial advice. Past results do not predict future results.

All investigations ←