インジケーター

95 種類の組み込みインジケーターがあります。id を指定して追加します。省略したパラメーターは 既定値になり、無効な値も既定値に戻ります。

インジケーターの追加

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 はインスタンス id を返します。同じインジケーターを何度でも追加でき、 インスタンスごとに独自の入力、色、レベルを持てます。

ソースとインジケーターへの適用

下の表で ソース と記されたインジケーターは、終値以外の価格 (open、high、low、hl2、hlc3、 ohlc4、hlcc4)や、別のインジケーターのラインに対して計算できます。 RSI の移動平均は RSI のペインに RSI のスケールで描かれ、RSI を削除すると一緒に消えます。

import { indicatorSource } from '@tradecanvas/chart'

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

ペインのインジケーター同士で 1 つのペインを共有することもできます: chart.addIndicator('stochastic', {}, 'bottom', { pane: rsi })。

レベル、色、値

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

各ラインの最新値は、そのラインの色で軸上にタグ表示されます。タグは features.indicatorValueLabels: false または setIndicatorValueLabelsVisible(false) で 非表示にできます。ペインのライン、レベル、軸、クロスヘアは 1 つのスケールを共有します。

価格ペインに表示 (35)

id名前既定のパラメーターライン
smaSimple Moving Average· ソースperiod: 20, source: "close"SMA
emaExponential Moving Average· ソースperiod: 20, source: "close"EMA
bbBollinger Bands· ソースperiod: 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· ソースperiod: 100, stdDev: 2, source: "close"Upper, Basis, Lower
hmaHull Moving Average· ソースperiod: 21, source: "close"HMA
mtfmaMTF Moving Average· ソースperiod: 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· ソースperiod: 20, source: "close"VWMA
wmaWeighted Moving Average· ソースperiod: 20, source: "close"WMA
envelopeMoving Average Envelope· ソースperiod: 20, percent: 2.5, source: "close"Upper, Basis, Lower
temaTriple EMA· ソースperiod: 20, source: "close"TEMA
volumeProfileVolume Profilerows: 24—
demaDouble Exponential Moving Average· ソースperiod: 20, source: "close"DEMA
smmaSmoothed Moving Average· ソースperiod: 14, source: "close"SMMA
almaArnaud Legoux Moving Average· ソースperiod: 9, offset: 0.85, sigma: 6, source: "close"ALMA
kamaKaufman Adaptive Moving Average· ソースperiod: 10, fast: 2, slow: 30, source: "close"KAMA
lsmaLeast Squares Moving Average· ソースperiod: 25, offset: 0, source: "close"LSMA
mcginleyMcGinley Dynamic· ソースperiod: 14, source: "close"McGinley
macrossMA Cross· ソースfast: 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 は、上位時間足の移動平均を現在のチャートに描きます。たとえば 1 時間足のバーに 日足の 50 MA を表示できます。上位時間足の確定した終値だけを平均するため、境界ごとに 階段状に変化し、リペイントすることはありません。

独自のペインに表示 (60)

id名前既定のパラメーターラインレベル
rsiRelative Strength Index· ソースperiod: 14, source: "close"RSI30, 70
macdMACD· ソースfast: 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· ソースperiod: 12, source: "close"ROC0
tsiTrue Strength Index· ソースlongPeriod: 25, shortPeriod: 13, signalPeriod: 7, source: "close"TSI, Signal0
cmfChaikin Money Flowperiod: 20CMF—
stddevStandard Deviation· ソースperiod: 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· ソースrsiPeriod: 3, streakPeriod: 2, rankPeriod: 100, source: "close"CRSI10, 90
coppockCoppock Curve· ソースlongRoc: 14, shortRoc: 11, wma: 10, source: "close"Coppock0
kstKnow Sure Thing· ソースroc1: 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· ソースfast: 23, slow: 50, cycle: 10, source: "close"STC25, 75
kvoKlinger Oscillatorfast: 34, slow: 55, signal: 13KVO, Signal0
fisherFisher Transformperiod: 9Fisher, Trigger0
dpoDetrended Price Oscillator· ソースperiod: 20, source: "close"DPO—
bopBalance of Powersmooth: 14BOP0
massindexMass Indexema: 9, sum: 25Mass26.5, 27
cmoChande Momentum· ソースperiod: 9, source: "close"CMO-50, 0, 50
trixTRIX· ソースperiod: 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· ソースrsiPeriod: 14, stochPeriod: 14, k: 3, d: 3, source: "close"%K, %D20, 80
ppoPercentage Price Oscillator· ソースfast: 12, slow: 26, signal: 9, source: "close"Histogram, PPO, Signal0
acAccelerator Oscillator—AC—
rmiRelative Momentum Index· ソースperiod: 20, momentum: 5, source: "close"RMI30, 70
disparityDisparity Index· ソースperiod: 14, source: "close"DI0
qstickQstickperiod: 8Qstick0
pgoPretty Good Oscillatorperiod: 14PGO-3, 0, 3
bbpbBollinger Bands %B· ソースperiod: 20, stdDev: 2, source: "close"%B0, 0.5, 1
bbwBollinger BandWidth· ソースperiod: 20, stdDev: 2, source: "close"BBW—
momMomentum· ソースperiod: 10, source: "close"MOM0
hvHistorical Volatility· ソースperiod: 10, annual: 365, source: "close"HV—
voVolume Oscillatorshort: 5, long: 10Vol Osc0
ulcerUlcer Index· ソースperiod: 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)は、OHLCV から買い / 売りの圧力を近似します。上昇して引けたバーは 出来高をプラス、下落したバーはマイナスとして加えます。mode: 0 はバーごとのヒストグラム、 mode: 1 は累積デルタです。(本来のティックデルタには約定ごとの bid / ask データが必要ですが、 OHLCV の系列にはその情報が含まれていません。)

独自のインジケーター

IndicatorBase を継承し、描画する内容(plots)、ペインのスケール、レベル、 入力を宣言します。描画のコードを書かなくても、チャートが描画し、ペインのスケールを調整し、値をタグ表示し、 ウィジェットの凡例と設定に表示します。詳しくは カスタムインジケーターのレシピを参照してください。

ペイン:サイズ変更、折りたたみ、最大化、並べ替え

ペインの上の区切り線をドラッグしてサイズを変えます。 ChartWidget では各ペインの右上にボタンがあり、上下への移動、ヘッダーだけへの折りたたみ、 最大化(ほかのペインは折りたたまれ、価格ペインは細い帯として残ります)ができます。 保存したレイアウトには、各ペインのサイズ、順序、折りたたみ、最大化の状態が残ります。コードからも同じことができます:

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

ChartWidget でペインを右クリックすると、そのペイン独自の対数スケール、反転スケール、パーセントスケールを設定できます。

インジケーターを別のペインへ移動する

インジケーターは、別のインジケーターのペインに加わる(そのペインのスケールを共有します)、独自のペインを持つ、 価格ペインに戻る、のいずれもできます。自分が持ち主だったペインを離れても、そのペインのほかのインジケーターは残り (次のペインインジケーターがペインを引き継ぎます)、そのラインを使っているインジケーターは一緒に移動します。 ChartWidget では、凡例の行にある ⋯ ボタンから、上のペイン、下のペイン、新しいペイン、価格ペインを選べます。

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

元に戻す操作とテンプレート

インジケーターの追加、削除、編集、移動は、描画と同じ履歴に入る元に戻す操作の 1 ステップです (Ctrl/⌘ Z、Ctrl/⌘ Shift Z)。元に戻す操作で復活したインジケーターは元の id のまま戻るので、 そのラインに設定したアラートも引き続き対応します。1 つのインジケーターへの連続した編集(色のドラッグ、期間の入力)は 1 ステップにまとまります。レイアウトを読み込むと、履歴は新しく始まります。

インジケーターは丸ごと取り出して戻すことができ、ChartWidget のインジケーターテンプレートはこの仕組みを使っています。 インジケーターメニューの インジケーターをテンプレートとして保存… で、それら(入力、スタイル、レベル、ペイン)を 名前を付けて保存し、テンプレートを選ぶとチャートのインジケーターがそれに置き換わります。これは 1 回の元に戻す操作にまとまります。

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

チャートの外での計算

IndicatorWorkerHost は、Web Worker が使うのと同じメッセージで、バーからインジケーターを計算します。 ワーカースクリプトはまだ公開パッケージに含まれていないため、null を渡してプラグインを登録し、 その場で計算してください(SSR、テスト、スクリプト向け):

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)