Chỉ báo

95 chỉ báo có sẵn. Thêm một chỉ báo bằng id của nó; tham số bạn bỏ qua sẽ lấy giá trị mặc định, và tham số không hợp lệ cũng quay về giá trị mặc định.

Thêm một chỉ báo

const ema = chart.addIndicator('ema', { period: 50 })          // on the price pane
const rsi = chart.addIndicator('rsi', { period: 14 }, 'bottom') // in a pane of its own
chart.updateIndicator(rsi, { period: 21 })
chart.removeIndicator(rsi)

addIndicator trả về một id instance: cùng một chỉ báo có thể thêm nhiều lần, mỗi instance có thông số, màu và mức riêng.

Nguồn dữ liệu và chỉ báo trên chỉ báo

Các chỉ báo có đánh dấu nguồn bên dưới có thể chạy trên một giá khác giá đóng cửa (open, high, low, hl2, hlc3, ohlc4, hlcc4) hoặc trên đường của một chỉ báo khác. Đường trung bình động của RSI được vẽ trong bảng của RSI, trên thang của RSI, và bị xoá cùng lúc với RSI.

import { indicatorSource } from '@tradecanvas/chart'

chart.updateIndicator(ema, { source: 'hlc3' })
const smoothed = chart.addIndicator('sma', { period: 9, source: indicatorSource(rsi, 'value') })

Các chỉ báo ở bảng riêng cũng có thể dùng chung một bảng: chart.addIndicator('stochastic', {}, 'bottom', { pane: rsi }).

Mức, màu và giá trị

chart.setIndicatorLevels(rsi, [20, 50, 80])   // null restores 30 / 70
chart.updateIndicatorStyle(rsi, { colors: ['#f2a93b'], lineWidths: [2] })
chart.setIndicatorVisible(rsi, false)

const series = chart.getIndicatorOutput(rsi)?.series ?? []
const latest = series[series.length - 1]?.value   // keyed by the line keys below

Giá trị mới nhất của mỗi đường được gắn nhãn trên trục bằng màu của đường đó; tắt các nhãn này bằng features.indicatorValueLabels: false hoặc setIndicatorValueLabelsVisible(false). Các đường, mức, trục và con trỏ chữ thập trong cùng một bảng dùng chung một thang.

Trên bảng giá chính (35)

idTênTham số mặc địnhĐường
smaSimple Moving Average· nguồnperiod: 20, source: "close"SMA
emaExponential Moving Average· nguồnperiod: 20, source: "close"EMA
bbBollinger Bands· nguồnperiod: 20, stdDev: 2, source: "close"Upper, Basis, Lower
vwapVolume Weighted Average Price—VWAP
ichimokuIchimoku Cloudtenkan: 9, kijun: 26, senkou: 52, displacement: 26Conversion, Base, Lead A, Lead B
psarParabolic SARstep: 0.02, max: 0.2SAR
supertrendSupertrendperiod: 10, multiplier: 3Supertrend
keltnerKeltner ChannelemaPeriod: 20, atrPeriod: 10, multiplier: 1.5Upper, Basis, Lower
donchianDonchian Channelperiod: 20Upper, Basis, Lower
pivotsPivot Points (Classic)lookback: 24R3, R2, R1, P, S1, S2, S3
avwapAnchored VWAPanchorTime: 0AVWAP
zigzagZigZagdeviation: 5Pivot
lrcLinear Regression Channel· nguồnperiod: 100, stdDev: 2, source: "close"Upper, Basis, Lower
hmaHull Moving Average· nguồnperiod: 21, source: "close"HMA
mtfmaMTF Moving Average· nguồnperiod: 50, timeframe: "1d", source: "close"MA
svwapSession VWAPbands: 1VWAP, +1σ, −1σ, +2σ, −2σ, +3σ, −3σ
chandelierChandelier Exitperiod: 22, multiplier: 3Long, Short
alligatorAlligatorjaw: 13, teeth: 8, lips: 5, jawShift: 8, teethShift: 5, lipsShift: 3Jaw, Teeth, Lips
vwmaVolume Weighted Moving Average· nguồnperiod: 20, source: "close"VWMA
wmaWeighted Moving Average· nguồnperiod: 20, source: "close"WMA
envelopeMoving Average Envelope· nguồnperiod: 20, percent: 2.5, source: "close"Upper, Basis, Lower
temaTriple EMA· nguồnperiod: 20, source: "close"TEMA
volumeProfileVolume Profilerows: 24—
demaDouble Exponential Moving Average· nguồnperiod: 20, source: "close"DEMA
smmaSmoothed Moving Average· nguồnperiod: 14, source: "close"SMMA
almaArnaud Legoux Moving Average· nguồnperiod: 9, offset: 0.85, sigma: 6, source: "close"ALMA
kamaKaufman Adaptive Moving Average· nguồnperiod: 10, fast: 2, slow: 30, source: "close"KAMA
lsmaLeast Squares Moving Average· nguồnperiod: 25, offset: 0, source: "close"LSMA
mcginleyMcGinley Dynamic· nguồnperiod: 14, source: "close"McGinley
macrossMA Cross· nguồnfast: 9, slow: 21, type: "sma", source: "close"Fast, Slow
fractalsWilliams Fractalsperiod: 2Up, Down
cksChande Kroll Stopp: 10, x: 1, q: 9Stop Long, Stop Short
sebStandard Error Bandsperiod: 21, mult: 2, smooth: 3Upper, Middle, Lower
gmmaGuppy Multiple Moving Average—EMA 3, EMA 5, EMA 8, EMA 10, EMA 12, EMA 15, EMA 30, EMA 35, EMA 40, EMA 45, EMA 50, EMA 60
maribbonMoving Average Ribbonma1: 20, ma2: 50, ma3: 100, ma4: 200, exponential: 0MA 1, MA 2, MA 3, MA 4

mtfma vẽ một đường trung bình động từ khung thời gian lớn hơn lên biểu đồ hiện tại — ví dụ MA50 khung ngày trên nến 1h. Nó chỉ lấy trung bình các giá đóng cửa đã hoàn tất của khung lớn hơn, nên đổi bậc tại mỗi ranh giới và không bao giờ vẽ lại (repaint).

Trong bảng riêng (60)

idTênTham số mặc địnhĐườngMức
rsiRelative Strength Index· nguồnperiod: 14, source: "close"RSI30, 70
macdMACD· nguồnfast: 12, slow: 26, signal: 9, source: "close"Histogram, MACD, Signal—
stochasticStochastic OscillatorkPeriod: 14, dPeriod: 3, smooth: 3%K, %D20, 80
atrAverage True Rangeperiod: 14ATR—
adxAverage Directional Indexperiod: 14ADX, +DI, −DI—
obvOn Balance Volume—OBV—
williamsRWilliams %Rperiod: 14%R-80, -20
cciCommodity Channel Indexperiod: 20CCI-100, 0, 100
mfiMoney Flow Indexperiod: 14MFI20, 80
aroonAroonperiod: 25Up, Down—
rocRate of Change· nguồnperiod: 12, source: "close"ROC0
tsiTrue Strength Index· nguồnlongPeriod: 25, shortPeriod: 13, signalPeriod: 7, source: "close"TSI, Signal0
cmfChaikin Money Flowperiod: 20CMF—
stddevStandard Deviation· nguồnperiod: 20, source: "close"StdDev—
adAccumulation/Distribution—A/D—
vrocVolume Rate of Changeperiod: 14VROC0
aoAwesome Oscillatorfast: 5, slow: 34AO—
chaikinOscChaikin Oscillatorfast: 3, slow: 10Chaikin—
voldeltaVolume Deltamode: 0Delta—
vortexVortex Indicatorperiod: 14VI+, VI−1
chopChoppiness Indexperiod: 14CHOP38.2, 61.8
uoUltimate Oscillatorfast: 7, mid: 14, slow: 28UO30, 70
fiForce Indexperiod: 13EFI0
crsiConnors RSI· nguồnrsiPeriod: 3, streakPeriod: 2, rankPeriod: 100, source: "close"CRSI10, 90
coppockCoppock Curve· nguồnlongRoc: 14, shortRoc: 11, wma: 10, source: "close"Coppock0
kstKnow Sure Thing· nguồnroc1: 10, roc2: 15, roc3: 20, roc4: 30, sma1: 10, sma2: 10, sma3: 10, sma4: 15, signal: 9, source: "close"KST, Signal0
elderrayElder Rayperiod: 13Bull, Bear—
stcSchaff Trend Cycle· nguồnfast: 23, slow: 50, cycle: 10, source: "close"STC25, 75
kvoKlinger Oscillatorfast: 34, slow: 55, signal: 13KVO, Signal0
fisherFisher Transformperiod: 9Fisher, Trigger0
dpoDetrended Price Oscillator· nguồnperiod: 20, source: "close"DPO—
bopBalance of Powersmooth: 14BOP0
massindexMass Indexema: 9, sum: 25Mass26.5, 27
cmoChande Momentum· nguồnperiod: 9, source: "close"CMO-50, 0, 50
trixTRIX· nguồnperiod: 15, signal: 9, source: "close"TRIX, Signal0
emvEase of Movementperiod: 14EOM0
pvtPrice Volume Trend—PVT—
wadWilliams A/D—WAD—
chaikinvolChaikin Volatilityema: 10, roc: 10CV0
rviRelative Vigor Indexperiod: 10RVGI, Signal0
stochrsiStochastic RSI· nguồnrsiPeriod: 14, stochPeriod: 14, k: 3, d: 3, source: "close"%K, %D20, 80
ppoPercentage Price Oscillator· nguồnfast: 12, slow: 26, signal: 9, source: "close"Histogram, PPO, Signal0
acAccelerator Oscillator—AC—
rmiRelative Momentum Index· nguồnperiod: 20, momentum: 5, source: "close"RMI30, 70
disparityDisparity Index· nguồnperiod: 14, source: "close"DI0
qstickQstickperiod: 8Qstick0
pgoPretty Good Oscillatorperiod: 14PGO-3, 0, 3
bbpbBollinger Bands %B· nguồnperiod: 20, stdDev: 2, source: "close"%B0, 0.5, 1
bbwBollinger BandWidth· nguồnperiod: 20, stdDev: 2, source: "close"BBW—
momMomentum· nguồnperiod: 10, source: "close"MOM0
hvHistorical Volatility· nguồnperiod: 10, annual: 365, source: "close"HV—
voVolume Oscillatorshort: 5, long: 10Vol Osc0
ulcerUlcer Index· nguồnperiod: 14, source: "close"Ulcer—
smiStochastic Momentum Indexperiod: 10, smooth: 3, signal: 3SMI, Signal40, -40
rvixRelative Volatility Indexperiod: 10, smooth: 14RVI80, 50, 20
trendstrengthTrend Strength Indexperiod: 14Trend0
lrslopeLinear Regression Slopeperiod: 14Slope0
stderrorStandard Errorperiod: 14StdErr—
adrAverage Day Rangeperiod: 14ADR—
netvolumeNet Volume—Net0

voldelta (Volume Delta) ước lượng áp lực mua/bán từ OHLCV — nến đóng cửa tăng cộng khối lượng dương, nến giảm cộng khối lượng âm. mode: 0 là histogram theo từng nến, mode: 1 là delta luỹ kế. (Delta tick thực sự cần dữ liệu bid/ask theo từng giao dịch, thứ mà một chuỗi OHLCV không có.)

Chỉ báo của riêng bạn

Kế thừa IndicatorBase và khai báo những gì nó vẽ (plots), thang của bảng, các mức và thông số; biểu đồ sẽ tự vẽ nó, co giãn bảng của nó, gắn nhãn giá trị và liệt kê nó trong chú thích và phần cài đặt của widget mà bạn không phải viết dòng code vẽ nào. Xem hướng dẫn mẫu cho chỉ báo tuỳ chỉnh.

Bảng: đổi kích thước, thu gọn, phóng to, sắp xếp lại

Kéo đường phân cách phía trên một bảng để đổi kích thước. Trong ChartWidget, mỗi bảng có các nút ở góc phải trên: đưa bảng lên hoặc xuống, thu gọn chỉ còn dòng tiêu đề, phóng to (các bảng khác thu gọn lại, còn bảng giá chính giữ một dải hẹp). Bố cục đã lưu giữ kích thước, thứ tự, trạng thái thu gọn và phóng to của từng bảng. Làm điều tương tự bằng code:

chart.setPanelSize(rsi, 180)        // px, clamped to a minimum
chart.setPaneCollapsed(macd, true)  // fold to its header
chart.setMaximizedPane(rsi)         // null puts the panes back
chart.movePane(rsi, -1)             // one place up; 1 = down
chart.on('paneChange', (e) => e.payload.change)  // 'collapsed' | 'maximized' | 'order' | 'scale'
chart.setPaneScale(atr, { log: true, invert: false })  // log while its values are above 0
chart.setPaneScale(atr, { percent: true })             // labels in percent of its first value on screen

Bấm chuột phải vào một bảng trong ChartWidget để bật thang logarit, thang đảo ngược hoặc thang phần trăm riêng cho bảng đó.

Chuyển một chỉ báo sang bảng khác

Một chỉ báo có thể vào bảng của một chỉ báo khác (khi đó nó dùng chung thang của bảng đó), có bảng riêng, hoặc quay về bảng giá chính. Khi nó rời một bảng mà nó làm chủ, các chỉ báo khác trong bảng vẫn ở lại (chỉ báo kế tiếp trong bảng sẽ làm chủ bảng), và các chỉ báo đọc đường của nó sẽ đi theo nó. Trong ChartWidget, nút ⋯ trên một dòng chú thích cho chọn bảng phía trên, bảng phía dưới, một bảng mới và bảng giá chính.

chart.moveIndicatorToPane(cci, rsi)      // into RSI's pane
chart.moveIndicatorToPane(cci, 'new')    // a pane of its own
chart.moveIndicatorToPane(ema, 'price')  // an overlay back to the price pane
chart.canMoveIndicatorToPane(cci, rsi)   // whether it would move

Hoàn tác và mẫu

Thêm, xoá, sửa và di chuyển chỉ báo đều là các bước hoàn tác, nằm chung lịch sử với hình vẽ (Ctrl/⌘ Z, Ctrl/⌘ Shift Z); một chỉ báo được khôi phục khi hoàn tác sẽ quay lại với đúng id cũ, nên các cảnh báo trên đường của nó vẫn khớp. Một loạt chỉnh sửa liền nhau trên cùng một chỉ báo (kéo chọn màu, gõ chu kỳ) tính là một bước. Khi tải một bố cục, lịch sử bắt đầu lại từ đầu.

Có thể lấy ra và đặt lại toàn bộ chỉ báo cùng một lúc, và đó chính là việc mẫu chỉ báo của ChartWidget làm: Lưu indicator thành mẫu… trong menu Chỉ báo lưu chúng (thông số, kiểu, mức, bảng) dưới một cái tên, còn chọn một mẫu sẽ đặt chúng vào thay cho các chỉ báo hiện có của biểu đồ, trong một bước hoàn tác.

const setup = chart.getIndicatorSetup()   // what a layout keeps of them
chart.applyIndicatorSetup(setup)          // in place of the chart's indicators

new ChartWidget(host, { indicatorTemplates: true })  // the default

Tính toán bên ngoài biểu đồ

IndicatorWorkerHost tính một chỉ báo từ dữ liệu nến bằng chính các thông điệp mà một Web Worker sẽ dùng. Script worker chưa có trong các gói đã phát hành, nên hãy truyền null và đăng ký các plugin để tính ngay tại chỗ (SSR, test, script):

import { IndicatorWorkerHost, RSIIndicator } from '@tradecanvas/core'

const host = new IndicatorWorkerHost(null)
host.registerFallbackPlugin(new RSIIndicator())
const output = await host.calculate('rsi', { id: 'rsi', instanceId: 'rsi-1', params: { period: 14 } }, bars)