インジケーター

134 種類の組み込みインジケーターがあります。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 つのスケールを共有します。

価格ペインに表示 (48)

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 Pointslookback: 24, type: "traditional"R3, 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
avgpriceAverage Price—Average
medpriceMedian Price—Median
typpriceTypical Price—Typical
machannelMoving Average ChannelupperLength: 20, lowerLength: 20, upperOffset: 0, lowerOffset: 0Upper, Lower
hammingMoving Average Hamming· ソースperiod: 10, source: "close"MA
madoubleMoving Average Double· ソースfirst: 20, second: 50, type: "sma", source: "close"MA 1, MA 2
matripleMoving Average Triple· ソースfirst: 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 は、上位時間足の移動平均を現在のチャートに描きます。たとえば 1 時間足のバーに 日足の 50 MA を表示できます。上位時間足の確定した終値だけを平均するため、境界ごとに 階段状に変化し、リペイントすることはありません。

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

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
asiAccumulative Swing Indexlimit: 10ASI—
advdeclineAdvance/Declinelength: 10Ratio—
majorityMajority Ruleperiod: 14Majority50
chopzoneChop Zone—Angle—
smiergodicSMI Ergodic· ソースshort: 5, long: 20, signal: 5, source: "close"Oscillator, Indicator, Signal—
poPrice Oscillator· ソースshort: 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)は、OHLCV から買い / 売りの圧力を近似します。上昇して引けたバーは 出来高をプラス、下落したバーはマイナスとして加えます。mode: 0 はバーごとのヒストグラム、 mode: 1 は累積デルタです。(本来のティックデルタには約定ごとの bid / ask データが必要ですが、 OHLCV の系列にはその情報が含まれていません。)

アジアの相場ソフトでおなじみの指標

韓国、日本、ベトナムのトレーダーが相場ソフトで使い慣れた指標:サイコロジカルライン(psy)と新サイコロジカルライン(newpsy)、ボリュームレシオ(vr)、AB レシオ(abratio)、sonar、sigma、バイナリーウェーブ(binarywave)、売買代金(tradevalue)と出来高増減(volchange)、DeMark の予測レンジ(demark)、最大 20 本の移動平均レインボー(rainbow)。売買代金は各足の終値 × 出来高による推定値で、取引所の公式値はそのデータフィードにあります。

chart.addIndicator('psy', { period: 10 }, 'bottom')              // 上昇引けの割合。25 と 75 を表示
chart.addIndicator('vr', { period: 20 }, 'bottom')                // 上昇日と下落日の出来高の比
chart.addIndicator('tradevalue', {}, 'bottom')                    // 各足の終値 × 出来高
chart.addIndicator('rainbow', { first: 10, step: 10, count: 10 }) // 10〜100 本の 10 本の平均線

ローソク足パターン

1〜5 本の足からなる 64 パターン:十字線、カラカサと流れ星、丸坊主と寄り付き坊主;包み足、はらみ線、切り込み線とかぶせ線、毛抜き、キッキング;明けの明星と宵の明星、捨て子線、赤三兵と三羽烏、スリーインサイドとスリーアウトサイド、タスキ;スリーラインストライク、三法、マットホールド、ブレイクアウェイ、ラダーボトム。反転パターンは反転する対象のトレンドの後でのみ数え(パターン前の終値が 10 本平均と 10 本前の終値の両方を超えていること、trendPeriod)、実体の長短はそれ以前の足の平均実体と比べます。指標は強気パターンの下、弱気パターンの上に矢印を描き、足の幅が十分なら略称を添えます。複数のパターンが終わる足では最も長いものを表示します。reversal、continuation、indecision(1 か 0)で種類を選びます。

chart.addIndicator('candlepatterns')                  // パターンが終わる足ごとに矢印と名前
chart.addIndicator('candlepatterns', { indecision: 1 }) // 十字線やコマも表示

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

独自のインジケーター

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)