Chỉ báo

134 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.

● DemoMẫu nến và các ô chỉ báoDữ liệu thị trường giả lập, sinh ngay trong trình duyệt của bạn

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 (48)

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 Pointslookback: 24, type: "traditional"R3, 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
avgpriceAverage Price—Average
medpriceMedian Price—Median
typpriceTypical Price—Typical
machannelMoving Average ChannelupperLength: 20, lowerLength: 20, upperOffset: 0, lowerOffset: 0Upper, Lower
hammingMoving Average Hamming· nguồnperiod: 10, source: "close"MA
madoubleMoving Average Double· nguồnfirst: 20, second: 50, type: "sma", source: "close"MA 1, MA 2
matripleMoving Average Triple· nguồnfirst: 10, second: 20, third: 50, type: "sma", source: "close"MA 1, MA 2, MA 3
volindexVolatility Indexperiod: 7, mult: 3Stop
tsfTime Series Forecastperiod: 14TSF
wcloseWeighted Close—Weighted
demarkDeMark Projected Range—Projected high, Projected low
rainbowMoving Average Rainbowfirst: 10, step: 10, count: 10, exponential: 0MA 1, MA 2, MA 3, MA 4, MA 5, MA 6, MA 7, MA 8, MA 9, MA 10, MA 11, MA 12, MA 13, MA 14, MA 15, MA 16, MA 17, MA 18, MA 19, MA 20
candlepatternsCandlestick PatternstrendPeriod: 10, reversal: 1, continuation: 1, indecision: 0Bullish, Bearish, Indecision

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 (86)

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
asiAccumulative Swing Indexlimit: 10ASI—
advdeclineAdvance/Declinelength: 10Ratio—
majorityMajority Ruleperiod: 14Majority50
chopzoneChop Zone—Angle—
smiergodicSMI Ergodic· nguồnshort: 5, long: 20, signal: 5, source: "close"Oscillator, Indicator, Signal—
poPrice Oscillator· nguồnshort: 10, long: 21, source: "close"PO—
volohlcVolatility O-H-L-Cperiod: 10, annual: 365Volatility—
volztVolatility Zero Trend Close-to-Closeperiod: 10, annual: 365Volatility—
psyPsychological Lineperiod: 10PSY25, 75
newpsyNew Psychological Lineperiod: 10New PSY-50, 0, 50
vrVolume Ratioperiod: 20VR70, 150, 450
abratioAB Ratioperiod: 26A, B100
sonarSonarperiod: 20, lookback: 9, signal: 9Sonar, Signal0
sigmaSigmaperiod: 20Sigma-2, 0, 2
vhfVertical Horizontal Filterperiod: 28VHF—
rsquaredR-Squaredperiod: 14R²—
rwiRandom Walk Indexperiod: 14RWI High, RWI Low1
nviNegative Volume Indexsignal: 255NVI, Signal—
pviPositive Volume Indexsignal: 255PVI, Signal—
trTrue Range—TR—
iiiIntraday Intensityperiod: 21III %0
volpctVolume vs Averageperiod: 20Vol %0
volchangeVolume Change—Volume—
tradevalueTrade Value—Value—
binarywaveBinary Wavema: 20, fast: 12, slow: 26, signal: 9, roc: 12, stoch: 14Wave0
srocSmoothed Rate of Changeema: 13, roc: 21S-ROC0

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 quen thuộc trên bảng giá châu Á

Những chỉ báo mà nhà đầu tư ở Hàn Quốc, Nhật Bản và Việt Nam quen thấy trên bảng giá: Psychological Line (psy, tâm lý) và New Psychological Line (newpsy), Volume Ratio (vr), AB Ratio (abratio), sonar, sigma, Binary Wave (binarywave), Trade Value (tradevalue, giá trị giao dịch) cùng Volume Change (volchange), vùng giá dự phóng DeMark (demark) và dải đường trung bình rainbow tới 20 đường. Trade Value là ước tính, giá đóng cửa × khối lượng mỗi nến; con số chính thức của sở giao dịch có trong nguồn dữ liệu của họ.

chart.addIndicator('psy', { period: 10 }, 'bottom')              // tỷ lệ phiên tăng; đánh dấu 25 và 75
chart.addIndicator('vr', { period: 20 }, 'bottom')                // khối lượng phiên tăng so với phiên giảm
chart.addIndicator('tradevalue', {}, 'bottom')                    // giá đóng cửa × khối lượng, mỗi nến
chart.addIndicator('rainbow', { first: 10, step: 10, count: 10 }) // mười đường trung bình, 10 đến 100 nến

Mẫu nến

64 mẫu từ một đến năm nến: doji, búa và sao băng, marubozu và belt hold; nhấn chìm, harami, đường xuyên và mây đen, nhíp, kicking; sao mai và sao hôm, em bé bị bỏ rơi, ba chàng lính và ba con quạ, ba nến trong và ngoài, khoảng trống tasuki; three-line strike, ba phương pháp, mat hold, breakaway và ladder bottom. Mẫu đảo chiều chỉ được tính khi có xu hướng trước đó để đảo (giá đóng cửa trước mẫu vượt cả trung bình 10 nến lẫn giá đóng cửa 10 nến trước, trendPeriod), và thân nến dài hay ngắn được so với thân trung bình của các nến trước. Chỉ báo vẽ mũi tên dưới mẫu tăng và trên mẫu giảm, kèm tên viết tắt khi nến đủ rộng; nến kết thúc nhiều mẫu thì hiện mẫu dài nhất. reversal, continuation và indecision (1 hoặc 0) chọn loại mẫu.

chart.addIndicator('candlepatterns')                  // mũi tên và tên mẫu trên mỗi nến kết thúc một mẫu
chart.addIndicator('candlepatterns', { indecision: 1 }) // hiện cả doji và con xoay

import { detectCandlePatterns, CANDLE_PATTERNS } from '@tradecanvas/chart'

const found = detectCandlePatterns(bars, { patterns: ['bullishEngulfing', 'hammer'] })
// [{ index, time, pattern: { id, name, short, direction, kind, bars } }]
CANDLE_PATTERNS.length                                 // 64

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)