Verdict
No robust edge
The result flips from +3.4% to -5.9% per trade depending on one fill assumption, so there is no reliable edge. Calls never make money; puts only in the optimistic case.
- 17,900 trades, 2016-01 to 2025-09 (development window; the hold-out from 2025-10-01 was never loaded). Entry at the next open, one position per stock at a time.
- Optimistic fill (the 2x target counts whenever the day's high touches it): mean +3.4% per trade on premium, median -20%, win rate 35%. Calls 0.0%, puts +10.1%.
- Conservative fill (target tested at the close only): mean -5.9%, win rate 29%. Calls -8.7%, puts -0.3%. Negative in 9 of 10 years.
- Liquid-stock proxy (top 40% by turnover; the real F&O list was not available): +1.5% optimistic, date-clustered t = 1.4, not significant.
- Earlier run without the doji condition (trend only) scored +4.2%, so the doji adds nothing measurable.
- Skipping trades with a 20% one-day jump (possible unadjusted splits or bonuses) changed results by less than 0.2 points.
- Recommendation: do not trade this. Re-test only with real option prices and the real F&O stock list.
- Open questions for the owner: confirm the 'ADR bars' definition (read here as consecutive up/down closes going 1 to 2); confirm the doji threshold (body at most 10% of range); choose an entry (next open used; same-day close also possible); decide whether to source real option history.
Promotion gates
-5.9% per trade.
0.0% optimistic, -8.7% conservative.
Sign flips with the target-fill assumption.
Black-Scholes proxy with fixed volatility; no historical option data.
Sealed from 2025-10-01; not opened because the development gates failed.
Explain the strategy
The idea: when a stock pauses (a doji candle) inside a clear trend, buy a cheap option betting the trend resumes. We tested it on about 17,900 historical signals. A typical trade lost around a fifth of the premium, and whether the average was a small gain or a loss depended on assuming a very generous fill. We conclude there is nothing dependable here.
Report
Results by fill assumption and side
| config | trades | mean_ret_on_premium | median | win | t_date_clustered | avg_days |
|---|---|---|---|---|---|---|
| All | Target on intraday high (optimistic) | 17937 | +3.4% | -20.3% | 34.7% | +4.60 | 1.6 |
| Calls | Target on intraday high (optimistic) | 11834 | +0.0% | -23.5% | 32.0% | -0.95 | 1.6 |
| Puts | Target on intraday high (optimistic) | 6103 | +10.1% | -13.6% | 40.0% | +7.54 | 1.6 |
| Liquid proxy (top 40% turnover) | Target on intraday high (optimistic) | 8084 | +1.5% | -21.2% | 32.9% | +1.43 | 1.6 |
| All | Target on close (conservative) | 17888 | -5.9% | -23.1% | 29.2% | -11.46 | 1.8 |
| Calls | Target on close (conservative) | 11793 | -8.7% | -25.7% | 26.8% | -12.86 | 1.8 |
| Puts | Target on close (conservative) | 6095 | -0.3% | -17.5% | 33.8% | -2.11 | 1.9 |
| Liquid proxy (top 40% turnover) | Target on close (conservative) | 8060 | -6.9% | -23.4% | 27.9% | -10.17 | 1.9 |
Rules and parameters
Rules
- Universe: Nifty 500 stocks (quality label not EXCLUDE), daily bars 2016-01-01 to 2025-09-30.
- Doji: absolute body at most 10% of the day's high-low range.
- Buy setup: doji, close above EMA5, EMA5 above EMA20, up-close streak equals 2 (was 1 the day before). Sell setup: mirror with down closes.
- Entry: next open, one strike out of the money (call above spot, put below), nearest monthly expiry with at least 10 days left.
- Exit, first hit: option at 2x entry premium; daily close below EMA5 (call) or above EMA5 (put); close of the fifth day after entry.
- Pricing: Black-Scholes, 20-day realised volatility (floor 15%) held constant, 6.5% rate, 2% of premium haircut each side plus 1% for other costs.
- Skipped: trades with a 20% or larger one-day close move in the window; premiums below 0.2% of spot.
Parameters
- capital
- ₹1,00,000 (notional, per-trade % shown)
- window
- 2016-01-01 to 2025-09-30
- doji body
- 10% of range
- target
- 2x premium
- time stop
- 5 days
- haircut
- 2% each side + 1%
- script
- research/ema_doji.py
Instrument
Nifty 500 stock options (modelled, not real prices) · capital ₹100,000
Known limitations
- Option prices are modelled, not observed: no skew, no volatility change, no real bid-ask.
- The real F&O stock list was unavailable; liquidity is a turnover proxy, so many trades may be in stocks with no listed options.
- Monthly expiry assumed as the last Thursday (rule in force through the window).
- Entry-day target on the intraday high is optimistic; the close-based test is closer to a working order that may not fill.
Logs and raw data
Downloads appear once a data window is loaded.
Files are plain CSV so results can be re-computed independently. Trade dates are IST sessions; returns are net of modelled costs and slippage.