Candlestick chart
chart.candlestick
Overview
Preserves exact OHLC, chronological spacing, gaps, direction, and optional all-or-none volume. It never aggregates, samples, resamples, or reads a market calendar. svg is a complete static, script-free chart. Mark highlight, the dotted guide, and the value panel are not in that SVG, and entry motion, focus, and updates stay inactive there. Pass the entire output.behavior.artifact unchanged to SquillifyChartRuntime.mount(container, artifact, options), then call the returned handle's replay() once to play the entry. A later value change uses update(nextArtifact, {intent}). Injecting svg directly leaves hover and motion off. Interaction is on by default for every host chart: after mount, pointer and keyboard focus open the value panel and the dotted guide. Set behavior.interaction.enabled to false to turn that off. motion.preset accepts only the family's entrance.
OHLC ordering, exactness, gaps, and volume require a contract distinct from Line.
Reliability
We preserve the exact candles you supply and never fetch, sample, or resample them. Declared failures: CANDLESTICK_DOMAIN_INVALID — trigger: domain type or chronological order is invalid; retryable: no; unchanged input: will not succeed; next: follow the recovery intent in the error details. CANDLESTICK_SERIES_INVALID — trigger: series count or candle count is outside bounds; retryable: no; unchanged input: will not succeed; next: follow the recovery intent in the error details. CANDLESTICK_OHLC_INVALID — trigger: high/low does not contain open and close; retryable: no; unchanged input: will not succeed; next: follow the recovery intent in the error details. CANDLESTICK_VOLUME_INVALID — trigger: volume is negative or only partly supplied; retryable: no; unchanged input: will not succeed; next: follow the recovery intent in the error details. CANDLESTICK_SCALE_INVALID — trigger: the requested price scale cannot represent the domain; retryable: no; unchanged input: will not succeed; next: follow the recovery intent in the error details. CHART_CAPACITY_EXCEEDED — trigger: the supplied candle density cannot remain legible on the requested canvas; retryable: no; unchanged input: will not succeed; next: follow the recovery intent in the error details.
Context footprint
Every candle and interaction target is priced before layout. A successful call costs 4 execution credits.
When to use it
When callers already have complete exact OHLC periods.
When periods need fetching, aggregation, or indicator computation.
Scope
Non-goals
- Market data lookup
- Aggregation
- Resampling
- Technical indicators
- Forecasting
Properties
Capabilities
Cost & billing
Flat rate per invocation
File handling
How we handle your data
What this means
This skill may receive sensitive content and may return submitted, transformed, extracted, or reformatted content.
Squillify guarantees
- Runs inside Squillify
- This skill runs inside Squillify.
- Payloads are not sent to an external service by this skill.
- Squillify does not permanently store submitted payloads.
- Telemetry records metadata only, not submitted content.
- Submitted payloads are not used for training.
- Submitted payloads are not reviewed by humans.
- This skill does not target sensitive data.
- The response may contain submitted or transformed content.
Your responsibility
Squillify does not determine whether submitted content is sensitive. Your application is responsible for deciding what data it is allowed to submit. Your application is responsible for securing the response.
Input schema
| Field | Type | Required | Description |
|---|---|---|---|
| domainType | string | Yes | date or instant; no inference. |
| series | array | Yes | Array of 1..4 objects with id, optional label, and 1..5000 chronological candles containing at/open/high/low/close and optional volume. |
| priceAxis | object | No | Optional object with scale, min, max, and unit properties; omit it for an inferred linear exact-price domain. |
| domainAxis | object | No | Optional object with chronological formatting and explicit break properties; omit it to preserve the supplied date or instant positions. |
| volumePanel | object | No | Optional object with visible and heightRatio properties; omit it and no volume companion panel is rendered. |
| comparisonScale | string | No | shared or independent small-multiple scales; default shared when omitted. |
| references | array | No | Optional array of at most 24 objects with id, value, label, and meaning properties; omit it for no price references. |
| candleWidth | string | No | auto or an integer string from 1..40 design pixels; default auto when omitted. |
| width | integer | No | Canvas width in pixels, 100..1600 (optional; default 960). Outside that range the request is refused as invalid input rather than clamped. The ceiling is the size a chart is read at — a full-HD dashboard or a report page; beyond it the canvas stops being what limits how much fits, and type sized for the canvas is illegible once the export is displayed smaller. It applies per side, so a tall portrait canvas for a long horizontal ranking is allowed. |
| height | integer | No | Canvas height in pixels, 100..1600 (optional; default 520). Outside that range the request is refused as invalid input rather than clamped. The ceiling is the size a chart is read at — a full-HD dashboard or a report page; beyond it the canvas stops being what limits how much fits, and type sized for the canvas is illegible once the export is displayed smaller. It applies per side, so a tall portrait canvas for a long horizontal ranking is allowed. |
| title | string | No | Heading drawn above the plot (optional; at most 1024 code points). Omit it and the chart renders untitled — we never invent a title from your data. One code point past that ceiling is refused as TOOL_INPUT_INVALID. |
| subtitle | string | No | Second line under the title, useful for the period covered or the unit (optional; at most 1024 code points). Omit it and no second line is drawn. |
| caption | string | No | Optional bounded caption drawn below the plot; omit it and no caption is emitted. |
| source | string | No | Optional bounded source attribution; omit it and no source line is emitted. |
| period | string | No | Optional bounded reporting-period label; omit it and no period line is emitted. |
| theme | string | No | Visual language: basic, modern or squillify (optional; default squillify). An unregistered value is rejected with the registered names listed — we never substitute silently. |
| surface | string | No | Surface the theme renders on: dark or light (optional; default light). |
| density | string | No | How tightly the chrome is packed: compact, standard or spacious (optional; default standard). Density scales spacing only — it never lowers a legibility minimum. |
| visualProfile | string | No | What the SVG promises about the host font: portable or certified (optional; default portable). The default is layout-deterministic and tolerates substitution; certified refuses text the certified metrics cannot fully measure. |
| style | object | No | Optional bounded paint and typography styling; omit it to use the selected theme defaults. text.size is expressed in normalized design pixels at an 800-pixel reference width, so equivalent roles match at equal CSS width. It never changes data or accessibility. 'contract' selects the published semantics. 'tokens' sets design tokens; 'rules' applies typed properties to a role and optional series/category facets; 'palette' accepts a digest-checked palette; 'css' is a bounded post-layout stylesheet. The styleCapabilities section publishes this family's accepted roles, properties and copyable examples. For Bar, target one mark with role 'bar' plus seriesIndex and categoryIndex; categoryIndex alone targets that category across series. A minimal rule is {"target":{"role":"bar"},"set":{"paint.fill":"#2563eb"}}. Unsupported typed rules are refused; unsupported CSS is dropped and reported. Do not discover the grammar through trial calls: style validation failures are currently billable. Before calling, read this contract's styleSurface and styleCapabilities sections for the complete rule shape, accepted roles and properties, limits, and copyable examples. |
| behavior | object | No | Optional motion and interaction object for enter_candles, update_candles, append_candles, focus_candle, focus_series, and trace_period; omit for static SVG. svg is a complete static, script-free chart. Mark highlight, the dotted guide, and the value panel are not in that SVG, and entry motion, focus, and updates stay inactive there. Pass the entire output.behavior.artifact unchanged to SquillifyChartRuntime.mount(container, artifact, options), then call the returned handle's replay() once to play the entry. A later value change uses update(nextArtifact, {intent}). Injecting svg directly leaves hover and motion off. Interaction is on by default for every host chart: after mount, pointer and keyboard focus open the value panel and the dotted guide. Set behavior.interaction.enabled to false to turn that off. motion.preset accepts only the family's entrance. |
| accessibility | object | No | Optional object with detail and maxItems properties; omit it for the default bounded full-detail reading order. |
| output | object | No | Output scoping (optional). Nested key output.idNamespace ([a-z][a-z0-9-]{0,31}) is prefixed onto every generated element id when several charts share one host document; omit for a standalone chart. An invalid namespace is rejected. |
Output schema
| Field | Type | Required | Description |
|---|---|---|---|
| svg | string | Yes | Allowlist-checked SVG. svg is a complete static, script-free chart. Mark highlight, the dotted guide, and the value panel are not in that SVG, and entry motion, focus, and updates stay inactive there. Pass the entire output.behavior.artifact unchanged to SquillifyChartRuntime.mount(container, artifact, options), then call the returned handle's replay() once to play the entry. A later value change uses update(nextArtifact, {intent}). Injecting svg directly leaves hover and motion off. Interaction is on by default for every host chart: after mount, pointer and keyboard focus open the value panel and the dotted guide. Set behavior.interaction.enabled to false to turn that off. motion.preset accepts only the family's entrance. |
| width | integer | Yes | Rendered width in pixels. |
| height | integer | Yes | Rendered height in pixels. |
| viewBox | string | Yes | SVG viewBox string (for example "0 0 800 400"). |
| seriesResults | array | Yes | Array of per-series objects with ids, exact extents, candle counts, gap counts, and rising/falling/doji counts. |
| candleResults | array | Yes | Array containing one object per candle with exact OHLC, direction, union index, optional volume, and stable target identity. |
| priceAxisResult | object | Yes | Object with resolved scale, exact minimum, exact maximum, unit, and comparison-scale properties. |
| domainResult | object | Yes | Object with domain type, ordered unionPositions, and explicit gapsPreserved and resampled flags. |
| volumeAxisResult | object | Yes | Object with visible, scale, and exact heightRatio properties for the independent volume panel. |
| renderSummary | object | Yes | Object with bounded series, candle, union-position, aggregation, resampling, and volume counts or flags. |
| transformationSummary | object | Yes | Object proving no lookup, aggregation, resampling, indicators, or inferred market calculations occurred. |
| styleReport | object | No | Always reports the resolved typographyProfile and fontMetrics contract, plus tokensApplied, rulesApplied, typedRulesApplied, typedAssignmentsApplied, rulesDropped, declarationsDropped and, when anything was dropped, a bounded list of reasons. |
| accessibility | object | No | Optional object containing bounded data-equivalent reading-order text, detail level, and truncation metadata. |
| behavior | object | No | Resolved default-on motion and interaction report. Includes the digest-bound host artifact when behavior is enabled and always preserves a complete script-free SVG. svg is a complete static, script-free chart. Mark highlight, the dotted guide, and the value panel are not in that SVG, and entry motion, focus, and updates stay inactive there. Pass the entire output.behavior.artifact unchanged to SquillifyChartRuntime.mount(container, artifact, options), then call the returned handle's replay() once to play the entry. A later value change uses update(nextArtifact, {intent}). Injecting svg directly leaves hover and motion off. Interaction is on by default for every host chart: after mount, pointer and keyboard focus open the value panel and the dotted guide. Set behavior.interaction.enabled to false to turn that off. motion.preset accepts only the family's entrance. |
| warnings | array | No | Present when the render succeeded with a known degradation. Each entry is an object with a stable code, a message and details. Every chart can emit FONT_SUBSTITUTION_POSSIBLE under visualProfile 'portable', FONT_GLYPH_UNMEASURED when a code point falls outside the certified metrics, and CHART_STYLE_PARTIALLY_APPLIED when part of your styling was dropped — styleReport then names which part and why. Codes are stable for agent routing. |
API contract
POST /v1/executecurl -sS -X POST "$BASE/v1/execute" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"skillKey":"chart.candlestick","input":{"domainType":"date","series":[{"id":"sqfy","candles":[{"at":"2026-08-03","open":"101.20","high":"106","low":"99.80","close":"104.50"}]}]}}'import { Squillify } from "@squillify/sdk";
const sq = new Squillify({ apiKey: process.env.SQUILLIFY_API_KEY });
const { output } = await sq.execute("chart.candlestick", {"domainType":"date","series":[{"id":"sqfy","label":"SQFY","candles":[{"close":"104.50","open":"101.20","at":"2026-08-03","high":"106","volume":"820000","low":"99.80"}]}]});Errors
| Code | HTTP | Retryable | Description |
|---|---|---|---|
| VALIDATION_ERROR | 400 | No | The request payload failed schema validation. |
| UNAUTHORIZED | 401 | No | Missing or invalid API key. |
| SKILL_NOT_ACCESSIBLE | 403 | No | The API key is not granted access to this skill. |
| SKILL_NOT_AVAILABLE_FOR_PLAN | 403 | No | This skill is not included in your current plan. |
| PLAN_ELIGIBILITY_UNAVAILABLE | 503 | Yes | Plan eligibility could not be decided. Retry after backoff. |
| SKILL_NOT_FOUND | 404 | No | The requested skill or version does not exist. |
| TENANT_RATE_LIMITED | 429 | Yes | Request rate limit exceeded. Retry after backoff. |
| QUOTA_EXCEEDED | 429 | Yes | Plan quota exhausted. Retryable once the quota period resets. |
| EXECUTION_TIMEOUT | 504 | Yes | Execution exceeded the allowed time budget. |
| CANDLESTICK_DOMAIN_INVALID | 400 | No | The request payload failed this skill's input validation. |
| CANDLESTICK_SERIES_INVALID | 400 | No | The request payload failed this skill's input validation. |
| CANDLESTICK_OHLC_INVALID | 400 | No | The request payload failed this skill's input validation. |
| CANDLESTICK_VOLUME_INVALID | 400 | No | The request payload failed this skill's input validation. |
| CANDLESTICK_SCALE_INVALID | 400 | No | The request payload failed this skill's input validation. |
| CHART_CAPACITY_EXCEEDED | 429 | No | A size, quota, rate, or time limit was exceeded. |
Other limits
| Limit | Value |
|---|---|
| Recommended inline bytes | 32 KiB |
Limitations
- Market data lookup
- Aggregation
- Resampling
- Technical indicators
- Forecasting
- Live ticker simulation
- Missing partial candles
- Server-derived indicators
How to call
POST /v1/execute (requires authentication)
{
"skillKey": "chart.candlestick",
"input": {
"domainType": "date",
"series": [
{
"id": "sqfy",
"label": "SQFY",
"candles": [
{
"close": "104.50",
"open": "101.20",
"at": "2026-08-03",
"high": "106",
"volume": "820000",
"low": "99.80"
}
]
}
]
}
}Examples
Daily OHLC
{
"domainType": "date",
"series": [
{
"id": "sqfy",
"label": "SQFY",
"candles": [
{
"close": "104.50",
"open": "101.20",
"at": "2026-08-03",
"high": "106",
"volume": "820000",
"low": "99.80"
}
]
}
]
}{
"height": 520,
"viewBox": "0 0 960 520",
"candleResults": [
{
"direction": "rising",
"close": "104.5",
"open": "101.2",
"at": "2026-08-03",
"high": "106",
"targetKey": "t-candle-5c29315d57b1481e",
"bodyChange": "3.3",
"unionIndex": 0,
"seriesId": "sqfy",
"volume": "820000",
"low": "99.8",
"range": "6.2"
}
],
"renderSummary": {
"variation": "candlestick",
"seriesCount": 1,
"candleCount": 1,
"unionPositionCount": 1,
"aggregated": false,
"resampled": false,
"volumeVisible": true
},
"accessibility": {
"title": "Candlestick chart",
"detail": "grouped",
"description": "1 exact OHLC candles across 1 series; missing times are gaps and aggregation is not performed."
},
"priceAxisResult": {
"scale": "linear",
"comparisonScale": "shared",
"minimum": "99.8",
"maximum": "106",
"unit": ""
},
"seriesResults": [
{
"minimumLow": "99.8",
"last": "2026-08-03",
"id": "sqfy",
"first": "2026-08-03",
"risingCount": 1,
"candleCount": 1,
"gapCount": 0,
"maximumHigh": "106",
"fallingCount": 0,
"label": "SQFY",
"dojiCount": 0
}
],
"svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"960\" height=\"520\" viewBox=\"0 0 960 520\" role=\"img\" class=\"sq-chart sq-chart--candlestick sq-family--cartesian sq-theme--squillify sq-surface--light sq-density--standard\" data-sq-style-contract=\"CHART_STYLE@1\" data-sq-chart=\"candlestick\" data-sq-family=\"cartesian\" data-sq-theme=\"squillify\" data-sq-theme-version=\"1\" data-sq-surface=\"light\" data-sq-density=\"standard\" data-sq-a11y-detail=\"grouped\" aria-labelledby=\"sq-217c91c8afbe-title-0 sq-217c91c8afbe-desc-1\"><title id=\"sq-217c91c8afbe-title-0\">Candlestick chart</title><desc id=\"sq-217c91c8afbe-desc-1\">1 exact OHLC candles across 1 series; missing times are gaps and aggregation is not performed.</desc><style>.sq-chart{--sq-chart-axis:#c9d1df;--sq-chart-font-family:'Squillify Mono', 'IBM Plex Mono', monospace;--sq-chart-grid:#d8dee9;--sq-chart-surface:#ffffff;--sq-chart-text-muted:#667085;--sq-chart-text-primary:#101828;--sq-series-1:#2563eb;--sq-series-2:#6d5ce7;--sq-series-3:#168a5b;--sq-series-4:#c45412;--sq-series-5:#d92d20;--sq-series-6:#667085;font-family:var(--sq-chart-font-family);font-weight:500;}.sq-chart .sq-background{fill:var(--sq-chart-surface);}.sq-chart .sq-grid{stroke:var(--sq-chart-grid);}.sq-chart .sq-axis{stroke:var(--sq-chart-axis);}.sq-chart .sq-tick-label{fill:var(--sq-chart-text-muted);}</style><rect x=\"0\" y=\"0\" width=\"960\" height=\"520\" fill=\"#ffffff\" class=\"sq-background\" data-sq-role=\"background\"/><g class=\"sq-plot\" data-sq-role=\"plot\"><text x=\"79\" y=\"23\" font-size=\"10\" text-anchor=\"start\" textLength=\"24\" lengthAdjust=\"spacing\" fill=\"#101828\" class=\"sq-label\" data-sq-role=\"facet-label\" data-sq-series-index=\"0\">SQFY</text><line x1=\"79\" y1=\"26\" x2=\"79\" y2=\"381.72\" stroke=\"#c9d1df\" stroke-width=\"1\" class=\"sq-axis\" data-sq-role=\"axis-line\"/><line x1=\"79\" y1=\"381.72\" x2=\"948\" y2=\"381.72\" stroke=\"#d8dee9\" stroke-width=\"1\" class=\"sq-grid\" data-sq-role=\"grid-line\"/><text x=\"73\" y=\"385.22\" font-size=\"10\" text-anchor=\"end\" textLength=\"24\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-tick-label\" data-sq-role=\"tick-label\">99.8</text><line x1=\"79\" y1=\"292.79\" x2=\"948\" y2=\"292.79\" stroke=\"#d8dee9\" stroke-width=\"1\" class=\"sq-grid\" data-sq-role=\"grid-line\"/><text x=\"73\" y=\"296.29\" font-size=\"10\" text-anchor=\"end\" textLength=\"36\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-tick-label\" data-sq-role=\"tick-label\">101.35</text><line x1=\"79\" y1=\"203.86\" x2=\"948\" y2=\"203.86\" stroke=\"#d8dee9\" stroke-width=\"1\" class=\"sq-grid\" data-sq-role=\"grid-line\"/><text x=\"73\" y=\"207.36\" font-size=\"10\" text-anchor=\"end\" textLength=\"30\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-tick-label\" data-sq-role=\"tick-label\">102.9</text><line x1=\"79\" y1=\"114.93\" x2=\"948\" y2=\"114.93\" stroke=\"#d8dee9\" stroke-width=\"1\" class=\"sq-grid\" data-sq-role=\"grid-line\"/><text x=\"73\" y=\"118.43\" font-size=\"10\" text-anchor=\"end\" textLength=\"36\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-tick-label\" data-sq-role=\"tick-label\">104.45</text><line x1=\"79\" y1=\"26\" x2=\"948\" y2=\"26\" stroke=\"#d8dee9\" stroke-width=\"1\" class=\"sq-grid\" data-sq-role=\"grid-line\"/><text x=\"73\" y=\"29.5\" font-size=\"10\" text-anchor=\"end\" textLength=\"18\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-tick-label\" data-sq-role=\"tick-label\">106</text><g class=\"sq-candle\" data-sq-role=\"candle-body\" data-sq-target-key=\"t-candle-5c29315d57b1481e\" data-sq-series-index=\"0\" data-sq-point-index=\"0\" data-sq-meaning=\"rising\"><line x1=\"103\" y1=\"26\" x2=\"103\" y2=\"381.72\" stroke=\"#101828\" stroke-width=\"1.2\" class=\"sq-candle-wick\" data-sq-role=\"candle-wick\" data-sq-series-index=\"0\" data-sq-point-index=\"0\" data-sq-meaning=\"rising\"/><rect x=\"94\" y=\"112.061\" width=\"18\" height=\"189.335\" rx=\"1\" fill=\"#168a5b\" stroke=\"#101828\" stroke-width=\"1\" class=\"sq-candle-body\" data-sq-role=\"candle-body\" data-sq-series-index=\"0\" data-sq-point-index=\"0\" data-sq-meaning=\"rising\"/><rect x=\"94\" y=\"402.576\" width=\"18\" height=\"83.424\" fill=\"#c9d1df\" class=\"sq-volume-bar\" data-sq-role=\"volume-bar\" data-sq-series-index=\"0\" data-sq-point-index=\"0\" data-sq-meaning=\"rising\"/></g><line x1=\"79\" y1=\"486\" x2=\"948\" y2=\"486\" stroke=\"#c9d1df\" stroke-width=\"1\" class=\"sq-axis\" data-sq-role=\"axis-line\"/><text x=\"103\" y=\"501\" font-size=\"10\" text-anchor=\"middle\" textLength=\"30\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-tick-label\" data-sq-role=\"tick-label\">Aug 3</text></g></svg>",
"volumeAxisResult": {
"visible": true,
"scale": "linear",
"heightRatio": "0.22"
},
"domainResult": {
"type": "date",
"unionPositions": [
"2026-08-03"
],
"gapsPreserved": true,
"resampled": false
},
"transformationSummary": {
"applied": false,
"operations": [],
"affectedCategoryCount": 0,
"affectedPointCount": 0,
"affectedLabelCount": 0
},
"width": 960
}Intraday instant candle
{
"domainType": "instant",
"series": [
{
"candles": [
{
"at": "2026-08-03T10:00:00Z",
"open": "51",
"close": "52",
"high": "53",
"low": "50"
}
],
"id": "desk"
}
]
}{
"height": 520,
"viewBox": "0 0 960 520",
"candleResults": [
{
"direction": "rising",
"close": "52",
"open": "51",
"at": "2026-08-03T10:00:00Z",
"high": "53",
"targetKey": "t-candle-48f342c4c289f373",
"bodyChange": "1",
"unionIndex": 0,
"seriesId": "desk",
"volume": "",
"low": "50",
"range": "3"
}
],
"renderSummary": {
"variation": "candlestick",
"seriesCount": 1,
"candleCount": 1,
"unionPositionCount": 1,
"aggregated": false,
"resampled": false,
"volumeVisible": false
},
"accessibility": {
"title": "Candlestick chart",
"detail": "grouped",
"description": "1 exact OHLC candles across 1 series; missing times are gaps and aggregation is not performed."
},
"priceAxisResult": {
"scale": "linear",
"comparisonScale": "shared",
"minimum": "50",
"maximum": "53",
"unit": ""
},
"seriesResults": [
{
"minimumLow": "50",
"last": "2026-08-03T10:00:00Z",
"id": "desk",
"first": "2026-08-03T10:00:00Z",
"risingCount": 1,
"candleCount": 1,
"gapCount": 0,
"maximumHigh": "53",
"fallingCount": 0,
"label": "desk",
"dojiCount": 0
}
],
"svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"960\" height=\"520\" viewBox=\"0 0 960 520\" role=\"img\" class=\"sq-chart sq-chart--candlestick sq-family--cartesian sq-theme--squillify sq-surface--light sq-density--standard\" data-sq-style-contract=\"CHART_STYLE@1\" data-sq-chart=\"candlestick\" data-sq-family=\"cartesian\" data-sq-theme=\"squillify\" data-sq-theme-version=\"1\" data-sq-surface=\"light\" data-sq-density=\"standard\" data-sq-a11y-detail=\"grouped\" aria-labelledby=\"sq-c34a8863389e-title-0 sq-c34a8863389e-desc-1\"><title id=\"sq-c34a8863389e-title-0\">Candlestick chart</title><desc id=\"sq-c34a8863389e-desc-1\">1 exact OHLC candles across 1 series; missing times are gaps and aggregation is not performed.</desc><style>.sq-chart{--sq-chart-axis:#c9d1df;--sq-chart-font-family:'Squillify Mono', 'IBM Plex Mono', monospace;--sq-chart-grid:#d8dee9;--sq-chart-surface:#ffffff;--sq-chart-text-muted:#667085;--sq-chart-text-primary:#101828;--sq-series-1:#2563eb;--sq-series-2:#6d5ce7;--sq-series-3:#168a5b;--sq-series-4:#c45412;--sq-series-5:#d92d20;--sq-series-6:#667085;font-family:var(--sq-chart-font-family);font-weight:500;}.sq-chart .sq-background{fill:var(--sq-chart-surface);}.sq-chart .sq-grid{stroke:var(--sq-chart-grid);}.sq-chart .sq-axis{stroke:var(--sq-chart-axis);}.sq-chart .sq-tick-label{fill:var(--sq-chart-text-muted);}</style><rect x=\"0\" y=\"0\" width=\"960\" height=\"520\" fill=\"#ffffff\" class=\"sq-background\" data-sq-role=\"background\"/><g class=\"sq-plot\" data-sq-role=\"plot\"><text x=\"79\" y=\"23\" font-size=\"10\" text-anchor=\"start\" textLength=\"24\" lengthAdjust=\"spacing\" fill=\"#101828\" class=\"sq-label\" data-sq-role=\"facet-label\" data-sq-series-index=\"0\">desk</text><line x1=\"79\" y1=\"26\" x2=\"79\" y2=\"478\" stroke=\"#c9d1df\" stroke-width=\"1\" class=\"sq-axis\" data-sq-role=\"axis-line\"/><line x1=\"79\" y1=\"478\" x2=\"948\" y2=\"478\" stroke=\"#d8dee9\" stroke-width=\"1\" class=\"sq-grid\" data-sq-role=\"grid-line\"/><text x=\"73\" y=\"481.5\" font-size=\"10\" text-anchor=\"end\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-tick-label\" data-sq-role=\"tick-label\">50</text><line x1=\"79\" y1=\"365\" x2=\"948\" y2=\"365\" stroke=\"#d8dee9\" stroke-width=\"1\" class=\"sq-grid\" data-sq-role=\"grid-line\"/><text x=\"73\" y=\"368.5\" font-size=\"10\" text-anchor=\"end\" textLength=\"30\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-tick-label\" data-sq-role=\"tick-label\">50.75</text><line x1=\"79\" y1=\"252\" x2=\"948\" y2=\"252\" stroke=\"#d8dee9\" stroke-width=\"1\" class=\"sq-grid\" data-sq-role=\"grid-line\"/><text x=\"73\" y=\"255.5\" font-size=\"10\" text-anchor=\"end\" textLength=\"24\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-tick-label\" data-sq-role=\"tick-label\">51.5</text><line x1=\"79\" y1=\"139\" x2=\"948\" y2=\"139\" stroke=\"#d8dee9\" stroke-width=\"1\" class=\"sq-grid\" data-sq-role=\"grid-line\"/><text x=\"73\" y=\"142.5\" font-size=\"10\" text-anchor=\"end\" textLength=\"30\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-tick-label\" data-sq-role=\"tick-label\">52.25</text><line x1=\"79\" y1=\"26\" x2=\"948\" y2=\"26\" stroke=\"#d8dee9\" stroke-width=\"1\" class=\"sq-grid\" data-sq-role=\"grid-line\"/><text x=\"73\" y=\"29.5\" font-size=\"10\" text-anchor=\"end\" textLength=\"12\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-tick-label\" data-sq-role=\"tick-label\">53</text><g class=\"sq-candle\" data-sq-role=\"candle-body\" data-sq-target-key=\"t-candle-48f342c4c289f373\" data-sq-series-index=\"0\" data-sq-point-index=\"0\" data-sq-meaning=\"rising\"><line x1=\"103\" y1=\"26\" x2=\"103\" y2=\"478\" stroke=\"#101828\" stroke-width=\"1.2\" class=\"sq-candle-wick\" data-sq-role=\"candle-wick\" data-sq-series-index=\"0\" data-sq-point-index=\"0\" data-sq-meaning=\"rising\"/><rect x=\"94\" y=\"176.667\" width=\"18\" height=\"150.667\" rx=\"1\" fill=\"#168a5b\" stroke=\"#101828\" stroke-width=\"1\" class=\"sq-candle-body\" data-sq-role=\"candle-body\" data-sq-series-index=\"0\" data-sq-point-index=\"0\" data-sq-meaning=\"rising\"/></g><line x1=\"79\" y1=\"486\" x2=\"948\" y2=\"486\" stroke=\"#c9d1df\" stroke-width=\"1\" class=\"sq-axis\" data-sq-role=\"axis-line\"/><text x=\"103\" y=\"501\" font-size=\"10\" text-anchor=\"middle\" textLength=\"30\" lengthAdjust=\"spacing\" fill=\"#667085\" class=\"sq-tick-label\" data-sq-role=\"tick-label\">Aug 3</text></g></svg>",
"volumeAxisResult": {
"visible": false,
"scale": "linear",
"heightRatio": "0.22"
},
"domainResult": {
"type": "instant",
"unionPositions": [
"2026-08-03T10:00:00Z"
],
"gapsPreserved": true,
"resampled": false
},
"transformationSummary": {
"applied": false,
"operations": [],
"affectedCategoryCount": 0,
"affectedPointCount": 0,
"affectedLabelCount": 0
},
"width": 960
}Recommended use cases
- Supplied daily OHLC
- Aligned instrument comparison
- Exact volume companion
Avoid for
- Live ticker simulation
- Missing partial candles
- Server-derived indicators
Related skills
Composable with
Safety & privacy
- Runs without calling any external service.
- Your payloads are never stored permanently.
- Telemetry captures metadata only — never your payload contents.
- We never train models on your payloads.
- No human reviews your payloads.