Skip to content

Documentation / @finchart/core / SeriesHandle

Interface: SeriesHandle<T, TPoint>

Defined in: packages/core/src/plot/pane.ts:189

등록 하나의 데이터를 쥔 손잡이. addSeries가 돌려준다. 시리즈가 여럿인 무대에서 "새 데이터를 누구에게 주는가"는 plot.setData로 답할 수 없어서 등록마다 자기 손잡이를 갖는다.

규칙: 줄 게 해제뿐이면 함수, 더 있으면 객체. addDecoration·plot.on은 그래서 함수를 그대로 돌려준다. dispose는 이름만 PluginApi와 같고 상속하지 않는다 — 상속하면 "Plot이 알아서 정리해 준다"는 없는 약속이 생긴다.

Extends

Type Parameters

T

T extends BaseDataPoint

TPoint

TPoint extends BaseDataPoint = T

Properties

attached

readonly attached: boolean

Defined in: packages/core/src/plot/pane.ts:276

이 손잡이가 아직 pane에 붙어 있는가. 쓰기 문 다섯은 떨어진 손잡이에서 던지므로, 그 전에 묻는 자리다.

ts
socket.on("tick", (t) => { if (handle.attached) handle.updateLast(t); });

없으면 늦게 오는 콜백을 쓰는 쪽이 try/catch를 두르는 것 말고 방법이 없다 — 던지는 계약은 물어볼 수 있을 때만 성립한다.

묻는 것과 던지는 것의 경계가 다르다. 무대가 통째로 내려간 경우 (Plot.removePane·destroy)에도 이것은 거짓이지만 쓰기 문은 던지지 않는다 — 언마운트 도중 늦게 도착한 콜백이 부르는 것이 정상 경로이고, 그때 pane은 이미 목록에도 레이아웃에도 없어서 쓴 것이 아무 데도 안 닿는다. 두 경우를 갈라 읽는다:

attached쓰기 문무슨 일이 있었나
false던진다등록이 사라졌다 — dispose()·syncSeries 축출
false조용하다무대가 내려갔다 — removePane·destroy

read()·xRange·dispose()는 떨어진 뒤에도 안전하다 — 묻기 전에 읽어도 터지지 않는다.


xRange

readonly xRange: Range | null

Defined in: packages/core/src/plot/pane.ts:249

이 등록이 그리는 점들의 x 범위. 비었으면 null.

파생이면 파생 결과의 범위다 — 이동평균은 앞의 period개가 없으므로 원본보다 짧다. 무한 스크롤이 묻는 "어디까지 왔나"는 그리는 것 기준이 맞다.

Methods

append()

append(points): void

Defined in: packages/core/src/plot/pane.ts:220

뒤에 최신을 잇는다. 도메인은 그대로 둔다.

Parameters

points

T[]

Returns

void


dispose()

dispose(): void

Defined in: packages/core/src/plot/pane.ts:279

등록을 뗀다. 두 번 불러도 안전하다.

Returns

void


prepend()

prepend(points): void

Defined in: packages/core/src/plot/pane.ts:217

앞에 과거를 잇는다. 도메인은 그대로 둔다 — 왼쪽으로 끌다 과거를 불러올 때 화면이 전체 구간으로 튕겨 돌아가면 안 되기 때문이다.

Parameters

points

T[]

Returns

void


read()

read(): TPoint[]

Defined in: packages/core/src/plot/pane.ts:208

이 등록이 그리는 점들. 지표의 입력이 되는 자리다.

ts
const price = pane.addSeries({ series: candleSeries(), data: candles });
computation({ inputs: [price], calc: (candles) => ... });

파생이 걸려 있으면 파생 결과다 — 화면에 있는 것이 곧 다음 계산의 입력이다.

돌려주는 배열은 살아 있는 것이다. 고치지 마라. 복사본을 주지 않는 이유는 이 문이 지표 파이프라인의 입력이라서다 — 틱마다 도는 자리에서 10만 점을 복사하면 그 자체가 프레임 예산을 먹는다. 정렬·필터가 필요하면 받는 쪽이 [...handle.read()]로 뜬다.

Returns

TPoint[]

Overrides

Source.read


setData()

setData(data): void

Defined in: packages/core/src/plot/pane.ts:211

데이터셋을 통째로 간다. 두 축을 다시 맞춘다.

Parameters

data

T[]

Returns

void


swapSeries()

swapSeries(next): void

Defined in: packages/core/src/plot/pane.ts:241

그리는 표현만 갈아 끼운다 — 데이터·파생·이 손잡이를 문 것들 (지표의 source, 실시간 updateLast)은 전부 그대로다. 캔들 ↔ 에어리어 같은 차트 유형 전환이 이 문이다: plot.setSeries는 pane의 다른 시리즈(이동평균 등)까지 버리므로 그 자리에 못 쓴다.

값 축은 다시 맞춘다 — 시리즈마다 차지하는 구간이 다르다 (캔들은 low~high, 종가 라인은 close만).

Series는 무상태여야 한다 (SeriesSpec.series와 같은 규칙) — 상태를 드는 표현은 갈아 끼우는 순간 그 상태가 날아간다.

Parameters

next

Series<TPoint>

Returns

void


updateLast()

updateLast(point): void

Defined in: packages/core/src/plot/pane.ts:227

진행 중인 봉의 틱. 마지막 점과 같은 x면 교체, 크면 append다. 작으면 DataError — 과거를 고치는 것은 setData의 일이다. 도메인은 안 건드린다 — pan/zoom도, 수동 값 구간도 그대로다.

Parameters

point

T

Returns

void