Analyzing BSE 400 MidSmallCap Index Price Trends Over October 2026 with Indices-API Time-Series Data
You need to quantify how the BSE 400 MidSmallCap Index trended across October 2026 so you can chart the move, calculate the period’s return, and flag the deepest drawdown your portfolio would have endured. By the end of this guide, you’ll query Indices-API’s time-series data for October 2026, compute return and max drawdown in Python, and understand the practical details that make your integration reliable in production.
Define the analysis: what you’ll compute for October 2026
For a single, auditable month (October 2026), we’ll:
- Fetch daily time-series values for the BSE 400 MidSmallCap Index.
- Calculate the month-to-date percentage return using the first and last available trading days.
- Compute the maximum peak-to-trough drawdown over the month.
- Optionally, pull one day of OHLC to validate intramonth volatility against your time-series closes.
Important: confirm the exact symbol code for the “BSE 400 MidSmallCap Index” on the Indices-API Supported Symbols page and use that exact string in your requests. In the examples below, we refer to the index by its full name key as shown in the JSON to avoid guessing a ticker code.
Query October 2026 with the Time-Series endpoint
The time-series endpoint returns daily snapshots between a start_date and an end_date. We’ll request the full month of October 2026. Note that end_date cannot be today; it must be a historical date. If you’re running this before the month has finished, set end_date to the latest completed trading day.
Complete curl request
The following request is ready to copy-paste. Replace YOUR_API_KEY with your key. If your plan supports symbol filtering, you can filter client-side using the “rates” object returned per date. To look up the exact symbol token for this index, see the Indices-API Supported Symbols page.
curl "https://indices-api.com/timeseries?access_key=YOUR_API_KEY&start_date=2026-10-01&end_date=2026-10-30"
We intentionally use an end_date before month-end (2026-10-30) to avoid weekend/holiday gaps and to comply with the rule that end_date cannot be today. You can adjust this to the last available trading day of October 2026.
Illustrative JSON response
The values below are minimal and illustrative to show the structure. Your live results will differ. The “rates” map is keyed by date, and under each date you’ll find a map of index symbols to numeric rates. We include only the key index from this post.
{
"success": true,
"timeseries": true,
"start_date": "2026-10-01",
"end_date": "2026-10-30",
"base": "USD",
"rates": {
"2026-10-01": {
"BSE 400 MidSmallCap Index": 0.00052
},
"2026-10-07": {
"BSE 400 MidSmallCap Index": 0.00051
},
"2026-10-15": {
"BSE 400 MidSmallCap Index": 0.00049
},
"2026-10-30": {
"BSE 400 MidSmallCap Index": 0.00050
}
},
"unit": "per index"
}
Field usage you’ll care about:
- success: boolean status for the call.
- timeseries: confirms you received a time-series payload.
- start_date and end_date: the range the API attempted to deliver.
- base: USD by default. Quotes are expressed relative to this base.
- rates: a dictionary keyed by YYYY-MM-DD; each entry is a dictionary of symbol to rate.
- unit: the unit the API uses; here “per index.” Use rate changes for returns as long as base is consistent.
Compute period return and max drawdown in Python
The following Python sample calls the same time-series endpoint, extracts the BSE 400 MidSmallCap Index series across October 2026, computes a month-to-date return using the first and last available rates, and calculates max drawdown. It also shows how to handle missing dates (weekends/holidays) by focusing on the dates actually returned.
import os
import requests
from datetime import datetime
API_KEY = os.getenv("INDICES_API_KEY", "YOUR_API_KEY")
START = "2026-10-01"
END = "2026-10-30"
INDEX_KEY = "BSE 400 MidSmallCap Index" # Confirm exact symbol on the Symbols page
url = "https://indices-api.com/timeseries"
params = {
"access_key": API_KEY,
"start_date": START,
"end_date": END
}
resp = requests.get(url, params=params, timeout=20)
resp.raise_for_status()
data = resp.json()
if not data.get("success") or not data.get("timeseries"):
raise RuntimeError(f"Unexpected response: {data}")
base = data.get("base") # typically 'USD'
series = []
# Collect (date, rate) only for the index we care about
for datestr, per_day_map in data.get("rates", {}).items():
if per_day_map is None:
continue
if INDEX_KEY in per_day_map:
series.append((datetime.fromisoformat(datestr).date(), float(per_day_map[INDEX_KEY])))
# Sort by date to ensure chronological order
series.sort(key=lambda x: x[0])
if len(series) < 2:
raise ValueError("Not enough data points in the requested range for return/drawdown computation.")
# Compute period return: (last / first) - 1
first_rate = series[0][1]
last_rate = series[-1][1]
period_return = (last_rate / first_rate) - 1.0
# Compute max drawdown on the rate series
peak = series[0][1]
max_drawdown = 0.0
for _, value in series:
if value > peak:
peak = value
drawdown = (value / peak) - 1.0
if drawdown < max_drawdown:
max_drawdown = drawdown
print(f"Base currency: {base}")
print(f"Samples: {len(series)} days")
print(f"Start date: {series[0][0]}, rate: {first_rate}")
print(f"End date: {series[-1][0]}, rate: {last_rate}")
print(f"Period return: {period_return:.4%}")
print(f"Max drawdown: {max_drawdown:.4%}")
Notes:
- We treat the provided “rate” for the index as the value for return calculations. Because everything is relative to the same base (“USD”), the ratio of end/start rates yields the return across the period.
- We do not assume continuous dates; we only use the dates that appear in the response (no weekends or holidays).
- You can swap Python for JavaScript/TypeScript fetch or Axios using the same fields: start_date, end_date, base, and rates.
For other endpoint details, parameters, and error handling patterns, see the Indices-API Documentation.
Optional: check one day of OHLC during October
If you want to validate intraday volatility for a particular date inside October 2026, use the OHLC endpoint for that date. This is helpful when reconciling your time-series close against the day’s range.
curl "https://indices-api.com/open-high-low-close/2026-10-15?access_key=YOUR_API_KEY"
Illustrative, minimal response:
{
"success": true,
"timestamp": 1792032000,
"base": "USD",
"date": "2026-10-15",
"rates": {
"BSE 400 MidSmallCap Index": {
"open": 0.00050,
"high": 0.00051,
"low": 0.00049,
"close": 0.00049
}
},
"unit": "per index"
}
From this object you’ll typically use:
- date and timestamp: for aligning candles to your chart’s timezone logic.
- rates[index].open/high/low/close: for range and volatility checks.
- base and unit: to ensure quote consistency with your time-series.
Practical details that save you time
Base currency and units:
- Base: Responses are relative to USD by default (base = "USD"). Keep the base consistent across your calculations. If you combine multiple endpoints, ensure all data shares the same base.
- Unit: The API reports “unit”: “per index.” Returns are computed from the rate series directly; a percentage change in the rate corresponds to a percentage change you can chart. Avoid mixing series with different bases or units.
Trading days vs weekends/holidays:
- The time-series endpoint returns only dates for which the index has data. Expect gaps on weekends and exchange holidays.
- Do not forward-fill by default for analytics like drawdown; compute on returned dates. For charts, you can forward-fill visually if desired, but label non-trading days appropriately.
End date cannot be today:
- Set end_date to a day with completed data, not the current day. For month-end analysis, use the last business day of the month or the latest available trading day.
Update frequency and caching:
- Depending on your subscription plan, the latest endpoint updates at different intervals. Time-series and historical endpoints return stable values for completed days.
- Cache immutable historical responses aggressively (e.g., per month or per day). For in-progress months, you can cache daily snapshots and refresh only the tail of the range.
Naming and symbols:
- You must confirm the exact symbol for “BSE 400 MidSmallCap Index” before you ship. Visit the Indices-API Supported Symbols and search for “BSE 400 MidSmallCap Index.” Use that exact key in your “rates” lookups.
Reference and onboarding:
- Sign up for a free key at the Indices-API Website and test your first call in minutes.
- For more endpoints (e.g., latest, historical, fluctuation, intraday), browse the Indices-API Documentation.
Putting it together: building your October 2026 workflow
Here’s a simple flow to standardize your monthly rollups for the BSE 400 MidSmallCap Index:
- Resolve the exact index symbol on the Symbols page.
- Call /timeseries with start_date=2026-10-01 and end_date=the last available trading day in October 2026.
- Extract the index’s daily values from the nested “rates” dictionary for each date.
- Compute: period return (last/first - 1) and max drawdown using the algorithm in the Python sample.
- Optionally: fetch /open-high-low-close/YYYY-MM-DD for spot checks on specific dates.
- Cache the month once finalized; only the trailing few days need refreshing during the month.
Why this matters for dashboards, alerts, and research
With a consistent, daily time-series for October 2026, you can:
- Render clean MTD charts and tooltips from the returned dates and values—no need to impute weekends.
- Trigger alerts when drawdown breaches thresholds, using the drawdown you compute in process memory.
- Compare October’s trajectory with prior months by repeating the same time-series call with different ranges.
If you plan to integrate more indices for cross-market views, keep the base currency and unit consistent across queries, then compute returns uniformly using the same pipeline. Explore the rest of the endpoints in the Indices-API Documentation as you scale.
FAQ
How do I find the exact symbol for the BSE 400 MidSmallCap Index?
Use the search on the Indices-API Supported Symbols page. Copy the exact symbol string and use that as the key when reading the “rates” map in responses.
My end_date is today and I’m seeing partial data or gaps. What should I do?
Set end_date to the last completed trading day. The API’s rule of thumb is that end_date should not be today. For rolling analyses, advance end_date once per completed trading day.
The time-series response has fewer dates than the calendar month. Is that normal?
Yes. Only trading days are returned. Weekends and exchange holidays will not appear. Your return and drawdown should be computed over the dates actually present.
Can I directly calculate returns from these rates even though the base is USD and the unit is “per index”?
Yes. As long as you use a consistent base and unit across the series, percentage returns can be computed as (last_rate / first_rate) - 1. The drawdown algorithm in the sample works on these rates without further transformation.
How often should I cache?
Cache immutable historical days indefinitely. For an in-progress month, cache daily and refresh only the newest day; re-freeze the month once the final trading day is in.
Get your key and start shipping
Grab a free API key from the Indices-API Website, confirm the BSE 400 MidSmallCap Index symbol on the Symbols page, then drop the curl and Python samples into your repo. In under an hour, you’ll have reliable October 2026 time-series, period return, and max drawdown wired into your dashboard or alerting pipeline.