Markets found firmer ground on Wednesday after two sessions of losses as investors made a cautious return to some recently-battered banking, finance and auto counters.
Dismal macroeconomic data and rising concerns over the country's economic outlook amid rising Covid-19 cases capped the gains, traders said.
After swinging over 800 points during the day, the 30-share BSE Sensex closed 232.24 points or 0.74 per cent higher at 31,685.75.
On similar lines, the NSE Nifty rose 65.30 points, or 0.71 per cent, to finish at 9,270.90.
M&M was the top gainer in the Sensex pack, spurting 5.27 per cent, followed by Bajaj Finance, HDFC Bank, Bharti Airtel, ICICI Bank, Hero MotoCorp and HDFC.
On the other hand, ITC cracked 5.81 per cent. HUL, TCS, Titan and Infosys too ended in the red.
According to traders, economic uncertainty due to the Covid-19 pandemic, muted corporate earnings and weak macroeconomic data kept investors wary.
India's service sector activity plummeted to a historic low in April amid the coronavirus lockdown.
The IHS Markit India Services Business Activity Index stood at just 5.4 in April, from 49.3 in March—the most severe contraction in services output since records began in December 2005.
'Markets were volatile as 9,100 levels held out as a key support for the Nifty in a day of mixed gains for its constituents. Financials led the gains, in anticipation of stimulus measures while FMCG, bluechip IT stocks and OMCs disappointed.
'The volatility in the indices is expected to continue as investors look out for trading cues in the form of stimulus measures by the government and global market trends,' said Vinod Nair, head of research at Geojit Financial Services.
BSE finance, telecom, bankex, auto, basic materials and realty indices climbed up to 2.46 per cent, while FMCG, consumer durables, IT and energy closed lower.
Broader BSE midcap and smallcap indices rose up to 0.78 per cent.
Global equities were mixed as investors tracked the rising coronavirus cases and escalating US-China tensions.
Bourses in Shanghai, Hong Kong and Seoul settled with significant gains, while Tokyo was closed for a holiday.
European markets were trading on a cautious note in early deals.
International oil benchmark Brent crude futures rose 1.65 per cent to USD 31.48 per barrel.
On the currency front, the rupee depreciated 9 paise to close at 75.72 against the US dollar.
In India, the death toll due to Covid-19 rose to 1,694 and the number of cases climbed to 49,391, according to the health ministry.
Globally, the number of coronavirus cases has crossed 36.63 lakh and the death toll has topped 2.57 lakh.