Resolution
The resolution surface is the interval control in the top toolbar: favorite intervals stay inline, and a chevron opens the full picker. Users see it whenever the widget renders the top toolbar; what it offers is derived entirely from the datafeed and the active symbol, never hard-coded in the UI.
Where it lives

BTCUSDT · 15m · dark theme — the interval favorites (1m, active 15m) and picker chevron sit between the symbol box and the compare control.
The picker

Interval menu open · BTCUSDT · 15m · dark theme — captured from the live playground. The picker shows only intervals the current symbol and datafeed can support; favorites stay visible in the toolbar.
UI states
| State | Behavior | Why it happens |
|---|---|---|
| Available | Selectable; switching triggers a reload at that interval | The interval is in the resolved supported list — served natively (providedIntervals) or via the configured rebuild policy |
| Disabled | Visible for product consistency but not selectable; include the reason in accessible help text | Valid grammar, but the interval is not in the resolved supported list for this symbol or feed |
| Custom | A typed entry is accepted and applied | features.customIntervals is on (default) and the entry matches the interval grammar and the resolved supported list |
| Unsupported | Rejected before changing the chart; the current interval stays selected | The typed entry fails the grammar, or is valid grammar outside the supported list |
Set features.customIntervals: false for a fixed-list selector without the typed custom-interval entry. features.intervalFamilies applies the native interval-family policy before datafeed/symbol capability narrowing.
How the picker is derived from the datafeed
Two narrowing rules apply before anything renders:
- The selector is the intersection of feed-level
MarketDataFeedConfig.supportedIntervalsandSymbolInfo.supportedIntervalsfor the active symbol. providedIntervalsmarks whatloadBarsreturns natively; the gap up tosupportedIntervalsis closed byresolutionRebuildPolicy: 'exact' | 'aggregate'(aggregation requires the caching datafeed wrapper).
See Resolutions for the full decision matrix, defaults, and synthetic-aggregation rules.
TradeScript interval grammar
| Unit | Example |
|---|---|
| Ticks | 1T, 10T |
| Seconds | 1s, 5s |
| Minutes | 1m, 15m |
| Hours | 1H, 4H |
| Days | 1D |
| Weeks | 1W |
| Months | 1M |
| Years | 1Y |
TradeScript interval strings always use explicit units.
Configuration mapping
| Need | TradeScript surface |
|---|---|
| Feed-wide intervals | MarketDataFeedConfig.supportedIntervals |
| Vendor-native intervals | MarketDataFeedConfig.providedIntervals |
| Symbol-specific intervals | SymbolInfo.supportedIntervals |
| Capability grammar | ResolutionCapabilities |
| Rebuild policy | resolutionRebuildPolicy ('exact' or 'aggregate') |
| Session-aware empty bars | emptyBars |
| Typed custom entries | features.customIntervals |
| Interval-family policy | features.intervalFamilies |
| Programmatic change | chart.setInterval(interval) / chart.getInterval() |
Related pages
- Resolutions (datafeed guide) — the full interval contract and aggregation rules
- Toolbars — where the interval control sits in the chrome
- Time Scale — how interval changes affect the visible range