Fetch historical intraday candles
Same endpoint as chapter 27, different interval.
from datetime import datetime
candles = kite.historical_data(
instrument_token=408065,
from_date=datetime(2024, 9, 1, 9, 15),
to_date=datetime(2024, 9, 1, 15, 30),
interval="5minute",
)
Supported intervals: minute, 3minute, 5minute, 10minute, 15minute, 30minute, 60minute, day.
continuous flag for F&O — stitching contracts across expiries
candles = kite.historical_data(
instrument_token=fut_token,
from_date=datetime(2024, 1, 1),
to_date=datetime(2024, 12, 31),
interval="day",
continuous=True, # stitches consecutive expiry contracts into one series
)
Without continuous=True, a single instrument_token only has data for the period that specific contract existed (chapter 23 — F&O tokens change every expiry) — you'd get gaps whenever a contract expired.
Intraday data has a shorter lookback window
Unlike daily candles (years of history), Zerodha limits intraday interval lookback (roughly: minute ≈ 60 days, day ≈ years — exact limits vary and change over time, check current docs). For anything requiring long intraday history, you must fetch and store incrementally over time (chapter 30) — you cannot retroactively pull 2 years of 1-minute candles in one call.
def fetch_intraday_chunked(kite, token, interval, start, end, chunk_days=59):
"""Splits a long intraday request into API-limit-respecting chunks."""
import pandas as pd
all_candles = []
cursor = start
while cursor < end:
chunk_end = min(cursor + pd.Timedelta(days=chunk_days), end)
all_candles += kite.historical_data(token, cursor, chunk_end, interval)
cursor = chunk_end
return all_candles