Overview
The OHLCV Data API retrieves historical and current-day daily candlestick data for NSE equities. It uses a hybrid approach combining historical tick data API with live market snapshots to provide complete OHLCV coverage including today’s data. Source File:fetch_all_ohlcv.py
Endpoint Details
Historical Tick Data API
https://openweb-ticks.dhan.co/getDataHPOSTLive Snapshot API
https://ow-scanx-analytics.dhan.co/customscan/fetchdtPOSTRequest Headers
Request Payloads
Historical OHLCV Request
Exchange code (“NSE” for NSE equities)
Trading symbol
Segment (“E” for equities)
Instrument type (“EQUITY”)
Security ID (Sid from master_isin_map.json)
Expiry code (0 for equities)
Timeframe - “D” for daily, “W” for weekly, “M” for monthly
Start timestamp (Unix epoch seconds)
End timestamp (Unix epoch seconds)
Example Historical Payload
Live Snapshot Request
Example Requests
Historical OHLCV
Live Snapshot
Response Structure
Historical OHLCV Response
Array of timestamps or date strings
Array of open prices
Array of high prices
Array of low prices
Array of close prices
Array of volumes
Example Historical Response
Live Snapshot Response
Implementation Details
Hybrid Multi-Chunk Strategy
Configuration
Concurrent threads for parallel processing
Days per chunk (6 months)
2 years back from today (ensures 200-day MA calculation)
Request timeout in seconds
dhan_data_response.json (requires Sid field)ohlcv_data/{SYMBOL}.csvOutput Structure
Each stock gets its own CSV file:CSV Format
Performance Metrics
- Total Stocks: ~2,775
- Threads: 15 concurrent requests
- History Depth: 2 years (default)
- Chunk Size: 180 days
- Time per Stock: 5-10 seconds (initial), 1-2 seconds (incremental)
- Total Time: ~30-45 minutes (initial full sync), ~5-10 minutes (daily updates)
- Success Rate: >95%
- Output Size: ~300-500 KB per stock (2 years daily data)
Progress Tracking
Incremental Updates
The implementation supports efficient incremental updates:- Check Existing File: Read last date from CSV
- Calculate Gap: Determine missing date range
- Fetch Gap Only: Request only missing data
- Add Today: Append live snapshot for current day
- Merge & Save: Combine with existing data
Incremental Example
Use Cases
- Technical Analysis: Calculate moving averages, RSI, MACD
- Backtesting: Test trading strategies on historical data
- Pattern Recognition: Identify chart patterns
- Volatility Analysis: Calculate ATR, Bollinger Bands
- Volume Analysis: Track volume trends and spikes
- Price Action: Study candlestick patterns
- Data Exports: Build custom analytics dashboards
Data Quality
Adjustments
- Data is NOT adjusted for splits/bonuses by default
- Manual adjustment required for corporate actions
- Use corporate actions API to identify adjustment dates
Gaps
- Market holidays: No data (expected gaps)
- Stock suspensions: No data during suspension
- Newly listed: Data starts from listing date
- Delisted: Data ends at delisting date
Technical Indicators Examples
Simple Moving Average (SMA)
RSI (Relative Strength Index)
Volume Analysis
Error Handling
Missing Sid
API Timeout
Empty Response
Notes
- Sid (Security ID) is mandatory - stocks without Sid are skipped
- Data includes both historical and current-day (live) candles
- Current day data updates during market hours (9:15 AM - 3:30 PM IST)
- Post-market, current day becomes historical next trading day
- Chunk size of 180 days balances API limits and efficiency
- CSV format allows easy import into Excel, pandas, or TA-Lib
- Date format is YYYY-MM-DD for universal compatibility
- Volume is in number of shares (not value)
- All prices are in INR
- Run daily after market close for up-to-date data
- Initial sync takes 30-45 minutes; incremental updates take 5-10 minutes
- Consider running incrementally (only fetch new data) for daily updates