Graflume · Alpha
Technical indicator · 극단 사례 적용
OHLCV 원자료에서 45개 기술지표를 직접 계산하고, 이미 계산된 지표 열도 같은 이식 가능한 금융 차트 계약으로 렌더링합니다. 성공할 수 있는 유효 데이터 안에서 수치 범위, 희소 구조와 대용량 입력을 검증합니다. 각 탭은 필요할 때만 데이터를 만들며 잘못된 값은 조용히 보정하지 않습니다.
차트 계열 · 전문 차트 계열
Technical indicator
OHLCV 원자료에서 45개 기술지표를 직접 계산하고, 이미 계산된 지표 열도 같은 이식 가능한 금융 차트 계약으로 렌더링합니다.
- Quick API
technicalIndicator()- 브라우저 스냅샷
graflume/complete- mark
indicator- 프리셋
- 45
- OHLCV computation
- 45 computed · 0 precomputed-only
극단 사례
값의 범위·불규칙 구조·대용량 입력
성공할 수 있는 유효 데이터 안에서 수치 범위, 희소 구조와 대용량 입력을 검증합니다. 각 탭은 필요할 때만 데이터를 만들며 잘못된 값은 조용히 보정하지 않습니다.
큰 값·작은 값
0과 매우 작은 유한값부터 매우 큰 유한값까지 함께 넣어 자동 도메인, 정밀도와 기하가 무너지지 않는지 확인합니다. NaN과 Infinity는 의도적으로 거부됩니다. 유한값과 축 도메인을 보존하는 데이터 무결성 규칙 2개를 적용합니다.
상태불러오는 중
extreme-rangeextreme-smallextreme-largepositive-domainbudget:marks<=6
불러오는 중
큰 값·작은 값 · 행 데이터
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
datetemporal | valuequantitative | openquantitative | highquantitative | lowquantitative | closequantitative | volumequantitative | lowerquantitative | upperquantitative | signalquantitative |
|---|---|---|---|---|---|---|---|---|---|
| 2026-01-01 | 5.150000000000001e-10 | 5.05e-10 | 5.253000000000001e-10 | 4.949e-10 | 5.150000000000001e-10 | 0 | — | — | 4.995500000000001e-10 |
| 2026-02-01 | 9.9e-07 | 1.0099999999999999e-06 | 1.0302e-06 | 9.702e-07 | 9.9e-07 | 1 | — | — | 9.603e-07 |
| 2026-03-01 | 1.03 | 1.01 | 1.0506 | 0.9898 | 1.03 | 1000 | — | — | 0.9991 |
| 2026-04-01 | 990 | 1010 | 1030.2 | 970.1999999999999 | 990 | 1e+06 | — | — | 960.3 |
| 2026-05-01 | 1.03e+06 | 1.01e+06 | 1.0506e+06 | 989800 | 1.03e+06 | 1e+09 | — | — | 999100 |
| 2026-06-01 | 1.98e+09 | 2.02e+09 | 2.0604e+09 | 1.9404e+09 | 1.98e+09 | 1e+12 | — | — | 1.9206e+09 |
브라우저 API · 이식 가능한 스키마
브라우저 API
Graflume.technicalIndicator()
const data = [
{
"close": 5.150000000000001e-10,
"date": "2026-01-01",
"high": 5.253000000000001e-10,
"low": 4.949e-10,
"lower": null,
"open": 5.05e-10,
"signal": 4.995500000000001e-10,
"upper": null,
"value": 5.150000000000001e-10,
"volume": 0
},
{
"close": 9.9e-7,
"date": "2026-02-01",
"high": 0.0000010302,
"low": 9.702e-7,
"lower": null,
"open": 0.0000010099999999999999,
"signal": 9.603e-7,
"upper": null,
"value": 9.9e-7,
"volume": 1
},
{
"close": 1.03,
"date": "2026-03-01",
"high": 1.0506,
"low": 0.9898,
"lower": null,
"open": 1.01,
"signal": 0.9991,
"upper": null,
"value": 1.03,
"volume": 1000
},
{
"close": 990,
"date": "2026-04-01",
"high": 1030.2,
"low": 970.1999999999999,
"lower": null,
"open": 1010,
"signal": 960.3,
"upper": null,
"value": 990,
"volume": 1000000
},
{
"close": 1030000,
"date": "2026-05-01",
"high": 1050600,
"low": 989800,
"lower": null,
"open": 1010000,
"signal": 999100,
"upper": null,
"value": 1030000,
"volume": 1000000000
},
{
"close": 1980000000,
"date": "2026-06-01",
"high": 2060400000,
"low": 1940400000,
"lower": null,
"open": 2020000000,
"signal": 1920600000,
"upper": null,
"value": 1980000000,
"volume": 1000000000000
}
];
const options = {
"accessibility": {
"description": "Every indicator is calculated from the same coherent OHLCV market history. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Technical indicator"
},
"axes": {
"x": {
"format": {
"dateStyle": "long",
"timeZone": "UTC",
"type": "date"
}
}
},
"height": 620,
"interaction": {
"hover": true,
"tooltip": {
"axis": "x",
"fields": [
{
"dateStyle": "long",
"field": "date",
"format": "date",
"label": "날짜",
"timeZone": "UTC"
},
{
"field": "value",
"format": "number",
"label": "값"
},
{
"field": "open",
"format": "number",
"label": "시가"
},
{
"field": "high",
"format": "number",
"label": "고가"
},
{
"field": "low",
"format": "number",
"label": "저가"
},
{
"field": "close",
"format": "number",
"label": "종가"
},
{
"field": "volume",
"format": "number",
"label": "거래량"
},
{
"field": "lower",
"format": "number",
"label": "Lower"
},
{
"field": "upper",
"format": "number",
"label": "상한"
},
{
"field": "signal",
"format": "number",
"label": "신호"
}
],
"title": "Technical indicator",
"trigger": "axis"
}
},
"locale": "ko",
"mark": {
"fields": {
"middle": "value",
"signal": "signal",
"value": "value"
},
"options": {
"fields": [
"value",
"signal"
],
"kind": "sma"
}
},
"title": {
"subtitle": "edge case · range",
"text": "Technical indicator"
},
"width": "container",
"x": {
"field": "date",
"title": "Trading day",
"type": "temporal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
};
Graflume.technicalIndicator('#chart', data, options);이식 가능한 스키마
ChartSpec 0.1 · options
{
"accessibility": {
"description": "Every indicator is calculated from the same coherent OHLCV market history. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Technical indicator"
},
"axes": {
"x": {
"format": {
"dateStyle": "long",
"timeZone": "UTC",
"type": "date"
}
}
},
"height": 620,
"interaction": {
"hover": true,
"tooltip": {
"axis": "x",
"fields": [
{
"dateStyle": "long",
"field": "date",
"format": "date",
"label": "날짜",
"timeZone": "UTC"
},
{
"field": "value",
"format": "number",
"label": "값"
},
{
"field": "open",
"format": "number",
"label": "시가"
},
{
"field": "high",
"format": "number",
"label": "고가"
},
{
"field": "low",
"format": "number",
"label": "저가"
},
{
"field": "close",
"format": "number",
"label": "종가"
},
{
"field": "volume",
"format": "number",
"label": "거래량"
},
{
"field": "lower",
"format": "number",
"label": "Lower"
},
{
"field": "upper",
"format": "number",
"label": "상한"
},
{
"field": "signal",
"format": "number",
"label": "신호"
}
],
"title": "Technical indicator",
"trigger": "axis"
}
},
"locale": "ko",
"mark": {
"fields": {
"middle": "value",
"signal": "signal",
"value": "value"
},
"options": {
"fields": [
"value",
"signal"
],
"kind": "sma"
}
},
"title": {
"subtitle": "edge case · range",
"text": "Technical indicator"
},
"width": "container",
"x": {
"field": "date",
"title": "Trading day",
"type": "temporal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
}희소·불규칙 구조
중복, 결측, 희소성, 순서 뒤바뀜 중 이 계열에서 의미가 정의된 구조만 실행합니다. 잘못된 참조나 깨진 튜플을 성공 예제로 위장하지 않습니다. 결측·중복·순서의 의미를 보존하는 구조 규칙 3개를 적용합니다.
상태불러오는 중
irregular-structuresparseout-of-ordernullflat-runbudget:marks<=6
불러오는 중
희소·불규칙 구조 · 행 데이터
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
datetemporal | valuequantitative | openquantitative | highquantitative | lowquantitative | closequantitative | volumequantitative | lowerquantitative | upperquantitative | signalquantitative |
|---|---|---|---|---|---|---|---|---|---|
| 2025-01-03 | 97.4641 | 97.3786 | 98.8241 | 96.0986 | 97.4641 | 1217 | — | — | 94.540177 |
| 2025-01-01 | — | 94 | 96.3 | 92.9 | — | 1070 | — | — | — |
| 2025-01-04 | 98.1631 | 98.5624 | 100.0024 | 96.7931 | 98.1631 | 1287 | — | — | 95.21820699999999 |
| 2025-01-05 | 98.4747 | 99.2322 | 100.7522 | 97.3747 | 98.4747 | 1353 | — | — | 95.520459 |
| 2025-01-06 | 98.3969 | 99.3404 | 100.5404 | 97.2069 | 98.3969 | 1415 | — | — | 95.444993 |
| 2025-01-02 | 96.4177 | 95.7997 | 97.6977 | 94.6097 | 96.4177 | 1144 | — | — | 93.52516899999999 |
브라우저 API · 이식 가능한 스키마
브라우저 API
Graflume.technicalIndicator()
const data = [
{
"close": 97.4641,
"date": "2025-01-03",
"high": 98.8241,
"low": 96.0986,
"lower": null,
"open": 97.3786,
"signal": 94.540177,
"upper": null,
"value": 97.4641,
"volume": 1217
},
{
"close": null,
"date": "2025-01-01",
"high": 96.3,
"low": 92.9,
"lower": null,
"open": 94,
"signal": null,
"upper": null,
"value": null,
"volume": 1070
},
{
"close": 98.1631,
"date": "2025-01-04",
"high": 100.0024,
"low": 96.7931,
"lower": null,
"open": 98.5624,
"signal": 95.21820699999999,
"upper": null,
"value": 98.1631,
"volume": 1287
},
{
"close": 98.4747,
"date": "2025-01-05",
"high": 100.7522,
"low": 97.3747,
"lower": null,
"open": 99.2322,
"signal": 95.520459,
"upper": null,
"value": 98.4747,
"volume": 1353
},
{
"close": 98.3969,
"date": "2025-01-06",
"high": 100.5404,
"low": 97.2069,
"lower": null,
"open": 99.3404,
"signal": 95.444993,
"upper": null,
"value": 98.3969,
"volume": 1415
},
{
"close": 96.4177,
"date": "2025-01-02",
"high": 97.6977,
"low": 94.6097,
"lower": null,
"open": 95.7997,
"signal": 93.52516899999999,
"upper": null,
"value": 96.4177,
"volume": 1144
}
];
const options = {
"accessibility": {
"description": "Every indicator is calculated from the same coherent OHLCV market history. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Technical indicator · 희소·불규칙 구조"
},
"axes": {
"x": {
"format": {
"dateStyle": "long",
"timeZone": "UTC",
"type": "date"
}
}
},
"height": 620,
"interaction": {
"hover": true,
"tooltip": {
"axis": "x",
"fields": [
{
"dateStyle": "long",
"field": "date",
"format": "date",
"label": "날짜",
"timeZone": "UTC"
},
{
"field": "value",
"format": "number",
"label": "값"
},
{
"field": "open",
"format": "number",
"label": "시가"
},
{
"field": "high",
"format": "number",
"label": "고가"
},
{
"field": "low",
"format": "number",
"label": "저가"
},
{
"field": "close",
"format": "number",
"label": "종가"
},
{
"field": "volume",
"format": "number",
"label": "거래량"
},
{
"field": "lower",
"format": "number",
"label": "Lower"
},
{
"field": "upper",
"format": "number",
"label": "상한"
},
{
"field": "signal",
"format": "number",
"label": "신호"
}
],
"title": "Technical indicator · 희소·불규칙 구조",
"trigger": "axis"
}
},
"locale": "ko",
"mark": {
"fields": {
"middle": "value",
"signal": "signal",
"value": "value"
},
"options": {
"fields": [
"value",
"signal"
],
"kind": "sma"
}
},
"title": {
"subtitle": "edge case · structure",
"text": "Technical indicator · 희소·불규칙 구조"
},
"width": "container",
"x": {
"field": "date",
"title": "Trading day",
"type": "temporal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
};
Graflume.technicalIndicator('#chart', data, options);이식 가능한 스키마
ChartSpec 0.1 · options
{
"accessibility": {
"description": "Every indicator is calculated from the same coherent OHLCV market history. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Technical indicator · 희소·불규칙 구조"
},
"axes": {
"x": {
"format": {
"dateStyle": "long",
"timeZone": "UTC",
"type": "date"
}
}
},
"height": 620,
"interaction": {
"hover": true,
"tooltip": {
"axis": "x",
"fields": [
{
"dateStyle": "long",
"field": "date",
"format": "date",
"label": "날짜",
"timeZone": "UTC"
},
{
"field": "value",
"format": "number",
"label": "값"
},
{
"field": "open",
"format": "number",
"label": "시가"
},
{
"field": "high",
"format": "number",
"label": "고가"
},
{
"field": "low",
"format": "number",
"label": "저가"
},
{
"field": "close",
"format": "number",
"label": "종가"
},
{
"field": "volume",
"format": "number",
"label": "거래량"
},
{
"field": "lower",
"format": "number",
"label": "Lower"
},
{
"field": "upper",
"format": "number",
"label": "상한"
},
{
"field": "signal",
"format": "number",
"label": "신호"
}
],
"title": "Technical indicator · 희소·불규칙 구조",
"trigger": "axis"
}
},
"locale": "ko",
"mark": {
"fields": {
"middle": "value",
"signal": "signal",
"value": "value"
},
"options": {
"fields": [
"value",
"signal"
],
"kind": "sma"
}
},
"title": {
"subtitle": "edge case · structure",
"text": "Technical indicator · 희소·불규칙 구조"
},
"width": "container",
"x": {
"field": "date",
"title": "Trading day",
"type": "temporal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
}대용량 데이터
결정적인 압축 레시피를 탭을 열 때만 생성합니다. Graflume의 성능 프로필이 입력량에 맞춰 표식 수, 적중 검사와 애니메이션 비용을 제한합니다. 결정적 생성과 출력 제한을 보장하는 대용량 규칙 6개를 적용합니다. 이 계열은 논리 입력 100,000 행를 생성하고 선 점 출력을 최대 8,000개로 제한합니다.
상태불러오는 중
high-row-cardinalityall-input-rows-generatedall-input-rows-processeddeterministic-generationbounded-renderinginput:100000zoom-pan-resetbudget:line-points<=8000
- 범례:
legend · explicit · 3 channels - 포인트·범위 하이라이트:
highlights[] · datum · date - 설명 말풍선:
annotations[] · datum · date · callout · placement:auto
불러오는 중
브라우저 API · 이식 가능한 스키마
브라우저 API
Graflume.technicalIndicator()
const recipe = {
"cardinality": {
"axes": {},
"sourceRows": 100000,
"unit": "rows"
},
"expectedInvariants": [
"finite-json",
"ohlcv-low-order",
"ohlcv-high-order",
"volume-nonnegative"
],
"id": "ohlcv-sequence",
"initialView": {
"kind": "domain",
"zoom": 1
},
"outputBudget": {
"maximum": 8000,
"resource": "line-points"
},
"parameters": {
"explicitPerformance": true,
"family": "technical-indicator",
"nullableFields": [
"value",
"signal"
],
"positiveFields": [
"volume"
],
"scenario": "volume",
"valueFields": [
"value",
"signal",
"open",
"high",
"low",
"close"
],
"valuePolicy": "ohlcv"
},
"preview": {
"maximumRows": 12,
"method": "quantiles"
},
"reduction": {
"method": "ohlcv-time-bins",
"stage": "bin"
},
"seed": 930467332,
"shape": "rows",
"version": 2
};
const { data, previewRows, plan } = Graflume.materializeDemoRecipe(recipe);
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Technical indicator · 대용량 데이터"
},
"annotations": [
{
"connector": {
"visible": true
},
"detail": "데이터, 축 범위 또는 화면 위치에 사용자가 작성한 안전한 텍스트 설명을 연결합니다.",
"id": "manual-callout",
"placement": "auto",
"style": {
"maxWidth": 220,
"padding": 8
},
"target": {
"field": "date",
"type": "datum",
"value": "2025-07-09"
},
"text": "포인트·범위 하이라이트 · 2025-07-09"
}
],
"axes": {
"x": {
"format": {
"dateStyle": "long",
"timeZone": "UTC",
"type": "date"
}
}
},
"create": {
"adaptive": {
"environment": {
"rowCount": 100000
},
"largeDataNavigation": true,
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "date",
"type": "datum",
"value": "2025-07-09"
}
}
],
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"axis": "x",
"fields": [
{
"dateStyle": "long",
"field": "date",
"format": "date",
"label": "날짜",
"timeZone": "UTC"
},
{
"field": "value",
"format": "number",
"label": "값"
},
{
"field": "open",
"format": "number",
"label": "시가"
},
{
"field": "high",
"format": "number",
"label": "고가"
},
{
"field": "low",
"format": "number",
"label": "저가"
},
{
"field": "close",
"format": "number",
"label": "종가"
},
{
"field": "volume",
"format": "number",
"label": "거래량"
},
{
"field": "lower",
"format": "number",
"label": "Lower"
},
{
"field": "upper",
"format": "number",
"label": "상한"
},
{
"field": "signal",
"format": "number",
"label": "신호"
}
],
"title": "Technical indicator · 대용량 데이터",
"trigger": "axis"
}
},
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "값"
},
{
"id": "semantic-1",
"label": "신호"
},
{
"id": "semantic-2",
"label": "상·하한 밴드"
}
],
"labels": {
"hide": "숨기기",
"show": "표시"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Technical indicator · 대용량 데이터",
"visible": true
},
"locale": "ko",
"mark": {
"fields": {
"middle": "value",
"signal": "signal",
"value": "value"
},
"options": {
"fields": [
"value",
"signal"
],
"kind": "sma"
}
},
"padding": {
"top": 52
},
"performance": "ultra",
"theme": "graflume-light",
"title": {
"subtitle": "Every indicator is calculated from the same coherent OHLCV market history · 100,000 logical rows, screen-aware detail",
"text": "Technical indicator · 대용량 데이터"
},
"width": "container",
"x": {
"field": "date",
"title": "Trading day",
"type": "temporal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
};
Graflume.technicalIndicator('#chart', data, options);이식 가능한 스키마
ChartSpec 0.1 · options
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Technical indicator · 대용량 데이터"
},
"annotations": [
{
"connector": {
"visible": true
},
"detail": "데이터, 축 범위 또는 화면 위치에 사용자가 작성한 안전한 텍스트 설명을 연결합니다.",
"id": "manual-callout",
"placement": "auto",
"style": {
"maxWidth": 220,
"padding": 8
},
"target": {
"field": "date",
"type": "datum",
"value": "2025-07-09"
},
"text": "포인트·범위 하이라이트 · 2025-07-09"
}
],
"axes": {
"x": {
"format": {
"dateStyle": "long",
"timeZone": "UTC",
"type": "date"
}
}
},
"create": {
"adaptive": {
"environment": {
"rowCount": 100000
},
"largeDataNavigation": true,
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "date",
"type": "datum",
"value": "2025-07-09"
}
}
],
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"axis": "x",
"fields": [
{
"dateStyle": "long",
"field": "date",
"format": "date",
"label": "날짜",
"timeZone": "UTC"
},
{
"field": "value",
"format": "number",
"label": "값"
},
{
"field": "open",
"format": "number",
"label": "시가"
},
{
"field": "high",
"format": "number",
"label": "고가"
},
{
"field": "low",
"format": "number",
"label": "저가"
},
{
"field": "close",
"format": "number",
"label": "종가"
},
{
"field": "volume",
"format": "number",
"label": "거래량"
},
{
"field": "lower",
"format": "number",
"label": "Lower"
},
{
"field": "upper",
"format": "number",
"label": "상한"
},
{
"field": "signal",
"format": "number",
"label": "신호"
}
],
"title": "Technical indicator · 대용량 데이터",
"trigger": "axis"
}
},
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "값"
},
{
"id": "semantic-1",
"label": "신호"
},
{
"id": "semantic-2",
"label": "상·하한 밴드"
}
],
"labels": {
"hide": "숨기기",
"show": "표시"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Technical indicator · 대용량 데이터",
"visible": true
},
"locale": "ko",
"mark": {
"fields": {
"middle": "value",
"signal": "signal",
"value": "value"
},
"options": {
"fields": [
"value",
"signal"
],
"kind": "sma"
}
},
"padding": {
"top": 52
},
"performance": "ultra",
"theme": "graflume-light",
"title": {
"subtitle": "Every indicator is calculated from the same coherent OHLCV market history · 100,000 logical rows, screen-aware detail",
"text": "Technical indicator · 대용량 데이터"
},
"width": "container",
"x": {
"field": "date",
"title": "Trading day",
"type": "temporal"
},
"y": {
"field": "value",
"title": "value",
"type": "quantitative"
}
}