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)
| id | Tên | Tham số mặc định | Đường |
|---|---|---|---|
sma | Simple Moving Average· nguồn | period: 20, source: "close" | SMA |
ema | Exponential Moving Average· nguồn | period: 20, source: "close" | EMA |
bb | Bollinger Bands· nguồn | period: 20, stdDev: 2, source: "close" | Upper, Basis, Lower |
vwap | Volume Weighted Average Price | — | VWAP |
ichimoku | Ichimoku Cloud | tenkan: 9, kijun: 26, senkou: 52, displacement: 26 | Conversion, Base, Lead A, Lead B |
psar | Parabolic SAR | step: 0.02, max: 0.2 | SAR |
supertrend | Supertrend | period: 10, multiplier: 3 | Supertrend |
keltner | Keltner Channel | emaPeriod: 20, atrPeriod: 10, multiplier: 1.5 | Upper, Basis, Lower |
donchian | Donchian Channel | period: 20 | Upper, Basis, Lower |
pivots | Pivot Points (Classic) | lookback: 24 | R3, R2, R1, P, S1, S2, S3 |
avwap | Anchored VWAP | anchorTime: 0 | AVWAP |
zigzag | ZigZag | deviation: 5 | Pivot |
lrc | Linear Regression Channel· nguồn | period: 100, stdDev: 2, source: "close" | Upper, Basis, Lower |
hma | Hull Moving Average· nguồn | period: 21, source: "close" | HMA |
mtfma | MTF Moving Average· nguồn | period: 50, timeframe: "1d", source: "close" | MA |
svwap | Session VWAP | bands: 1 | VWAP, +1σ, −1σ, +2σ, −2σ, +3σ, −3σ |
chandelier | Chandelier Exit | period: 22, multiplier: 3 | Long, Short |
alligator | Alligator | jaw: 13, teeth: 8, lips: 5, jawShift: 8, teethShift: 5, lipsShift: 3 | Jaw, Teeth, Lips |
vwma | Volume Weighted Moving Average· nguồn | period: 20, source: "close" | VWMA |
wma | Weighted Moving Average· nguồn | period: 20, source: "close" | WMA |
envelope | Moving Average Envelope· nguồn | period: 20, percent: 2.5, source: "close" | Upper, Basis, Lower |
tema | Triple EMA· nguồn | period: 20, source: "close" | TEMA |
volumeProfile | Volume Profile | rows: 24 | — |
dema | Double Exponential Moving Average· nguồn | period: 20, source: "close" | DEMA |
smma | Smoothed Moving Average· nguồn | period: 14, source: "close" | SMMA |
alma | Arnaud Legoux Moving Average· nguồn | period: 9, offset: 0.85, sigma: 6, source: "close" | ALMA |
kama | Kaufman Adaptive Moving Average· nguồn | period: 10, fast: 2, slow: 30, source: "close" | KAMA |
lsma | Least Squares Moving Average· nguồn | period: 25, offset: 0, source: "close" | LSMA |
mcginley | McGinley Dynamic· nguồn | period: 14, source: "close" | McGinley |
macross | MA Cross· nguồn | fast: 9, slow: 21, type: "sma", source: "close" | Fast, Slow |
fractals | Williams Fractals | period: 2 | Up, Down |
cks | Chande Kroll Stop | p: 10, x: 1, q: 9 | Stop Long, Stop Short |
seb | Standard Error Bands | period: 21, mult: 2, smooth: 3 | Upper, Middle, Lower |
gmma | Guppy 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 |
maribbon | Moving Average Ribbon | ma1: 20, ma2: 50, ma3: 100, ma4: 200, exponential: 0 | MA 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)
| id | Tên | Tham số mặc định | Đường | Mức |
|---|---|---|---|---|
rsi | Relative Strength Index· nguồn | period: 14, source: "close" | RSI | 30, 70 |
macd | MACD· nguồn | fast: 12, slow: 26, signal: 9, source: "close" | Histogram, MACD, Signal | — |
stochastic | Stochastic Oscillator | kPeriod: 14, dPeriod: 3, smooth: 3 | %K, %D | 20, 80 |
atr | Average True Range | period: 14 | ATR | — |
adx | Average Directional Index | period: 14 | ADX, +DI, −DI | — |
obv | On Balance Volume | — | OBV | — |
williamsR | Williams %R | period: 14 | %R | -80, -20 |
cci | Commodity Channel Index | period: 20 | CCI | -100, 0, 100 |
mfi | Money Flow Index | period: 14 | MFI | 20, 80 |
aroon | Aroon | period: 25 | Up, Down | — |
roc | Rate of Change· nguồn | period: 12, source: "close" | ROC | 0 |
tsi | True Strength Index· nguồn | longPeriod: 25, shortPeriod: 13, signalPeriod: 7, source: "close" | TSI, Signal | 0 |
cmf | Chaikin Money Flow | period: 20 | CMF | — |
stddev | Standard Deviation· nguồn | period: 20, source: "close" | StdDev | — |
ad | Accumulation/Distribution | — | A/D | — |
vroc | Volume Rate of Change | period: 14 | VROC | 0 |
ao | Awesome Oscillator | fast: 5, slow: 34 | AO | — |
chaikinOsc | Chaikin Oscillator | fast: 3, slow: 10 | Chaikin | — |
voldelta | Volume Delta | mode: 0 | Delta | — |
vortex | Vortex Indicator | period: 14 | VI+, VI− | 1 |
chop | Choppiness Index | period: 14 | CHOP | 38.2, 61.8 |
uo | Ultimate Oscillator | fast: 7, mid: 14, slow: 28 | UO | 30, 70 |
fi | Force Index | period: 13 | EFI | 0 |
crsi | Connors RSI· nguồn | rsiPeriod: 3, streakPeriod: 2, rankPeriod: 100, source: "close" | CRSI | 10, 90 |
coppock | Coppock Curve· nguồn | longRoc: 14, shortRoc: 11, wma: 10, source: "close" | Coppock | 0 |
kst | Know Sure Thing· nguồn | roc1: 10, roc2: 15, roc3: 20, roc4: 30, sma1: 10, sma2: 10, sma3: 10, sma4: 15, signal: 9, source: "close" | KST, Signal | 0 |
elderray | Elder Ray | period: 13 | Bull, Bear | — |
stc | Schaff Trend Cycle· nguồn | fast: 23, slow: 50, cycle: 10, source: "close" | STC | 25, 75 |
kvo | Klinger Oscillator | fast: 34, slow: 55, signal: 13 | KVO, Signal | 0 |
fisher | Fisher Transform | period: 9 | Fisher, Trigger | 0 |
dpo | Detrended Price Oscillator· nguồn | period: 20, source: "close" | DPO | — |
bop | Balance of Power | smooth: 14 | BOP | 0 |
massindex | Mass Index | ema: 9, sum: 25 | Mass | 26.5, 27 |
cmo | Chande Momentum· nguồn | period: 9, source: "close" | CMO | -50, 0, 50 |
trix | TRIX· nguồn | period: 15, signal: 9, source: "close" | TRIX, Signal | 0 |
emv | Ease of Movement | period: 14 | EOM | 0 |
pvt | Price Volume Trend | — | PVT | — |
wad | Williams A/D | — | WAD | — |
chaikinvol | Chaikin Volatility | ema: 10, roc: 10 | CV | 0 |
rvi | Relative Vigor Index | period: 10 | RVGI, Signal | 0 |
stochrsi | Stochastic RSI· nguồn | rsiPeriod: 14, stochPeriod: 14, k: 3, d: 3, source: "close" | %K, %D | 20, 80 |
ppo | Percentage Price Oscillator· nguồn | fast: 12, slow: 26, signal: 9, source: "close" | Histogram, PPO, Signal | 0 |
ac | Accelerator Oscillator | — | AC | — |
rmi | Relative Momentum Index· nguồn | period: 20, momentum: 5, source: "close" | RMI | 30, 70 |
disparity | Disparity Index· nguồn | period: 14, source: "close" | DI | 0 |
qstick | Qstick | period: 8 | Qstick | 0 |
pgo | Pretty Good Oscillator | period: 14 | PGO | -3, 0, 3 |
bbpb | Bollinger Bands %B· nguồn | period: 20, stdDev: 2, source: "close" | %B | 0, 0.5, 1 |
bbw | Bollinger BandWidth· nguồn | period: 20, stdDev: 2, source: "close" | BBW | — |
mom | Momentum· nguồn | period: 10, source: "close" | MOM | 0 |
hv | Historical Volatility· nguồn | period: 10, annual: 365, source: "close" | HV | — |
vo | Volume Oscillator | short: 5, long: 10 | Vol Osc | 0 |
ulcer | Ulcer Index· nguồn | period: 14, source: "close" | Ulcer | — |
smi | Stochastic Momentum Index | period: 10, smooth: 3, signal: 3 | SMI, Signal | 40, -40 |
rvix | Relative Volatility Index | period: 10, smooth: 14 | RVI | 80, 50, 20 |
trendstrength | Trend Strength Index | period: 14 | Trend | 0 |
lrslope | Linear Regression Slope | period: 14 | Slope | 0 |
stderror | Standard Error | period: 14 | StdErr | — |
adr | Average Day Range | period: 14 | ADR | — |
netvolume | Net Volume | — | Net | 0 |
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)