[{"data":1,"prerenderedAt":505},["ShallowReactive",2],{"article:i-backtested-150-trading-strategies-on-indian-markets":3,"\u002Fblog\u002Fi-backtested-150-trading-strategies-on-indian-markets-surround":496},{"id":4,"title":5,"archived":6,"author":7,"body":8,"date":480,"description":481,"extension":482,"image":483,"meta":484,"minRead":485,"navigation":486,"path":487,"published":486,"seo":488,"sitemap":489,"stem":490,"tags":491,"__hash__":495},"blog\u002Fblog\u002Fi-backtested-150-trading-strategies-on-indian-markets.md","I Tested ~150 Trading Strategies on Indian Markets. Only a Plain Index SIP Held Up.",false,"Baljeet Singh",{"type":9,"value":10,"toc":468},"minimark",[11,22,25,28,33,38,66,70,146,150,153,160,163,189,192,195,199,202,226,230,233,314,317,321,324,327,331,334,354,425,432,436,456,459],[12,13,14],"blockquote",{},[15,16,17,21],"p",{},[18,19,20],"strong",{},"Not investment advice."," I'm not SEBI-registered. This is what I tested on past data and what happened. The past doesn't predict the future.",[15,23,24],{},"Trading content online mostly shows winning trades. I wanted to know whether any strategy still makes money once you pay every charge and test it on data it has never seen.",[15,26,27],{},"So I wrote a program that replays five years of Indian stock market data and tests trading rules against it. This is called backtesting. I tested about 150 versions of different strategies.",[15,29,30],{},[18,31,32],{},"Short version: none of them held up. A plain monthly SIP into an index fund did as well as or better than all of them.",[34,35,37],"h2",{"id":36},"how-i-tested","How I tested",[39,40,41,48,54,60],"ul",{},[42,43,44,47],"li",{},[18,45,46],{},"Real data:"," the 50 Nifty stocks, Nifty and Bank Nifty, and their options, from 2021 to 2026, in 5- to 15-minute steps.",[42,49,50,53],{},[18,51,52],{},"Every charge included:"," brokerage, taxes, exchange fees, and a little extra for not getting the exact price you wanted.",[42,55,56,59],{},[18,57,58],{},"Old data to build, new data to check:"," I built and tuned every strategy on 2021 to mid-2025. I kept the last 16 months aside and looked at it only once, at the very end. If a strategy failed there, it failed.",[42,61,62,65],{},[18,63,64],{},"A luck check:"," I also ran the same trades with the direction picked by a coin flip. A real strategy should beat a coin.",[34,67,69],{"id":68},"the-results","The results",[71,72,73,86],"table",{},[74,75,76],"thead",{},[77,78,79,83],"tr",{},[80,81,82],"th",{},"what I tested",[80,84,85],{},"what happened",[87,88,89,98,106,114,122,130,138],"tbody",{},[77,90,91,95],{},[92,93,94],"td",{},"Day trading stocks",[92,96,97],{},"small profits in 2021-24 disappeared in 2025-26",[77,99,100,103],{},[92,101,102],{},"Holding stocks for days or weeks",[92,104,105],{},"nothing beat simply buying and holding the same stocks",[77,107,108,111],{},[92,109,110],{},"Nifty and Bank Nifty futures",[92,112,113],{},"worked until 2020, then stopped",[77,115,116,119],{},[92,117,118],{},"Buying options",[92,120,121],{},"lost money",[77,123,124,127],{},[92,125,126],{},"Selling options every day",[92,128,129],{},"about zero before charges, a loss after",[77,131,132,135],{},[92,133,134],{},"Selling options on expiry day only",[92,136,137],{},"the one thing that worked, and it got weaker",[77,139,140,143],{},[92,141,142],{},"Monthly index SIP",[92,144,145],{},"as good as or better than everything else",[34,147,149],{"id":148},"a-strategy-that-looked-great-then-didnt","A strategy that looked great, then didn't",[15,151,152],{},"The best day-trading idea was simple. If a stock opens at least 1% higher or lower than yesterday's close, wait 15 minutes, trade in the direction it breaks, and hold until 3:15 pm.",[15,154,155,156,159],{},"On the old data, starting with ₹5 lakh, it made ",[18,157,158],{},"₹8.9 lakh in four years",". It beat the coin flips easily. It looked real.",[15,161,162],{},"Then I looked closer:",[39,164,165,171,177,183],{},[42,166,167,170],{},[18,168,169],{},"It needed more money than I'd have."," On busy days it wanted 31 trades at once. Limited to five trades a day, the profit fell to ₹3.9 lakh.",[42,172,173,176],{},[18,174,175],{},"A slightly worse price wiped it out."," If each trade got a slightly worse price than I assumed, that ₹3.9 lakh became a ₹2.6 lakh loss.",[42,178,179,182],{},[18,180,181],{},"A few days did all the work."," The best 5% of days made all the profit. The rest of the days lost money.",[42,184,185,188],{},[18,186,187],{},"On the data I'd kept aside, it lost."," Over the newest four months it lost ₹1.07 lakh.",[15,190,191],{},"When I tried to improve it by adding more rules, it looked even better on the old data and lost money on the new data. Each extra rule made it fit the past a little better and the future a little worse.",[15,193,194],{},"That's why \"my backtest made 200%\" screenshots mean very little.",[34,196,198],{"id":197},"charges-ate-most-of-the-profit","Charges ate most of the profit",[15,200,201],{},"The edges I found were real but tiny, smaller than the cost of trading:",[39,203,204,209,215,221],{},[42,205,206,208],{},[18,207,94],{}," costs about 0.14% per trade, in and out.",[42,210,211,214],{},[18,212,213],{},"Futures"," cost about 0.07%. The best futures idea earned about 0.09% per trade before charges.",[42,216,217,220],{},[18,218,219],{},"Holding stocks for a few days"," pays about 0.2% in tax per trade. One strategy made around 900 trades and turned a 115% market rise into a loss.",[42,222,223,225],{},[18,224,118],{}," costs about 3% of what you pay for the option, each time.",[34,227,229],{"id":228},"stocks-went-up-overnight-and-down-during-the-day","Stocks went up overnight and down during the day",[15,231,232],{},"The most surprising thing I found wasn't a strategy. Across the 50 stocks, almost all the gains happened between one day's close and the next day's open. During market hours, they drifted down on average.",[71,234,235,248],{},[74,236,237],{},[77,238,239,242,245],{},[80,240,241],{},"year",[80,243,244],{},"overnight, per day",[80,246,247],{},"market hours, per day",[87,249,250,261,272,283,293,304],{},[77,251,252,255,258],{},[92,253,254],{},"2021",[92,256,257],{},"+0.19%",[92,259,260],{},"−0.08%",[77,262,263,266,269],{},[92,264,265],{},"2022",[92,267,268],{},"+0.10%",[92,270,271],{},"−0.06%",[77,273,274,277,280],{},[92,275,276],{},"2023",[92,278,279],{},"+0.17%",[92,281,282],{},"−0.05%",[77,284,285,288,291],{},[92,286,287],{},"2024",[92,289,290],{},"+0.15%",[92,292,260],{},[77,294,295,298,301],{},[92,296,297],{},"2025",[92,299,300],{},"+0.06%",[92,302,303],{},"−0.01%",[77,305,306,309,312],{},[92,307,308],{},"2026",[92,310,311],{},"+0.03%",[92,313,271],{},[15,315,316],{},"Other researchers have found the same pattern. It also explains the day-trading results: strategies that bought stocks opening higher were riding this overnight jump. When it shrank in 2025, they stopped working.",[34,318,320],{"id":319},"the-one-thing-that-worked","The one thing that worked",[15,322,323],{},"The only strategy that passed every check was selling Nifty options on expiry day: sell at 9:20 am, cut a losing side if it rises 25%, and close everything at 3:15 pm. Bank Nifty showed the same pattern.",[15,325,326],{},"On the new data its profit roughly halved, and in the newest four months it lost money. This was after SEBI changed the weekly expiry rules in late 2024. Over the whole new period it earned about 3% a year on the money it needs, which is less than a savings-style liquid fund, with the risk of a big loss on a bad day.",[34,328,330],{"id":329},"what-held-up-a-plain-sip","What held up: a plain SIP",[15,332,333],{},"I tested a monthly SIP into a Nifty 50 index fund going back to 2009, against three \"smarter\" versions:",[39,335,336,342,348],{},[42,337,338,341],{},[18,339,340],{},"Wait for a 5% drop:"," keep the money aside and invest only when the market is 5% below its high.",[42,343,344,347],{},[18,345,346],{},"Wait for a 10% drop:"," the same, but wait for a bigger fall.",[42,349,350,353],{},[18,351,352],{},"Sell in downtrends:"," sell everything when the market falls below its 200-day average, and buy back when it's above again.",[71,355,356,375],{},[74,357,358],{},[77,359,360,363,366,369,372],{},[80,361,362],{},"SIP started",[80,364,365],{},"every month",[80,367,368],{},"wait for 5% drop",[80,370,371],{},"wait for 10% drop",[80,373,374],{},"sell in downtrends",[87,376,377,392,408],{},[77,378,379,382,385,387,389],{},[92,380,381],{},"2009",[92,383,384],{},"11.0%",[92,386,384],{},[92,388,384],{},[92,390,391],{},"7.9%",[77,393,394,397,400,402,405],{},[92,395,396],{},"2015",[92,398,399],{},"10.6%",[92,401,399],{},[92,403,404],{},"10.8%",[92,406,407],{},"8.0%",[77,409,410,413,416,419,422],{},[92,411,412],{},"2019",[92,414,415],{},"9.5%",[92,417,418],{},"9.6%",[92,420,421],{},"9.3%",[92,423,424],{},"7.8%",[15,426,427,431],{},[428,429,430],"em",{},"Yearly returns."," Waiting for a drop was about the same, sometimes a little higher, sometimes a little lower. Selling in downtrends cost 2-3% a year. The plain SIP did as well with nothing to watch.",[34,433,435],{"id":434},"what-this-doesnt-prove","What this doesn't prove",[39,437,438,444,450],{},[42,439,440,443],{},[18,441,442],{},"I only tested today's Nifty 50 companies."," Companies that dropped out of the index aren't in the data, which makes buying and holding look better than it was.",[42,445,446,449],{},[18,447,448],{},"Five-minute steps aren't exact."," Real trades get different prices.",[42,451,452,455],{},[18,453,454],{},"Four new months is short."," Some strategies make all their money on a few big days a year.",[15,457,458],{},"It doesn't mean no strategy works. It means the obvious ones are smaller than the charges, and the ones that worked in 2021 had mostly faded by 2025.",[15,460,461,462,467],{},"How I checked the data and kept the tests honest is in a second post: ",[463,464,466],"a",{"href":465},"\u002Fblog\u002Fhow-i-tried-not-to-fool-myself-backtesting-indian-markets","How I Tried Not to Fool Myself Backtesting Indian Markets",".",{"title":469,"searchDepth":470,"depth":470,"links":471},"",2,[472,473,474,475,476,477,478,479],{"id":36,"depth":470,"text":37},{"id":68,"depth":470,"text":69},{"id":148,"depth":470,"text":149},{"id":197,"depth":470,"text":198},{"id":228,"depth":470,"text":229},{"id":319,"depth":470,"text":320},{"id":329,"depth":470,"text":330},{"id":434,"depth":470,"text":435},"2026-10-19","I tested day trading, swing trading, futures and options on five years of real NSE data, with every charge included. The strategies that looked great on old data stopped working on new data. A simple monthly SIP did as well as anything.","md","\u002Fimg\u002Fbacktest-150-strategies.png",{},5,true,"\u002Fblog\u002Fi-backtested-150-trading-strategies-on-indian-markets",{"title":5,"description":481},{"loc":487},"blog\u002Fi-backtested-150-trading-strategies-on-indian-markets",[492,493,494],"Backtesting","Python","Data","rYnFZYPMfgqeCPhmPYAHu-QOEvmHegwT0pac5Tkg-ZA",[497,500],{"title":466,"path":465,"stem":498,"description":499,"children":-1},"blog\u002Fhow-i-tried-not-to-fool-myself-backtesting-indian-markets","My best trading strategy made ₹8.9 lakh on paper. A few honest checks turned it into a loss. Here are the checks, and the data problems I had to fix before any result meant anything.",{"title":501,"path":502,"stem":503,"description":504,"children":-1},"Identifying the Raga from the Notes","\u002Fblog\u002Fidentifying-the-raga-from-the-notes","blog\u002Fidentifying-the-raga-from-the-notes","A weighted heuristic gets the raga right 67.3% of the time. Reranking against a corpus of published compositions takes it to 72.7%, which is the version I can actually ship — and on a 55-composition eval that number carries an interval wide enough to be worth writing down. Here is the method and the number, including the unflattering parts.",1792427740664]