Indicadores

95 indicadores integrados. Añade uno por su id; los parámetros que omitas toman su valor predeterminado, y los no válidos vuelven a él.

Añadir un indicador

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 devuelve un id de instancia: el mismo indicador se puede añadir varias veces, cada instancia con sus propios parámetros, colores y niveles.

Fuentes e indicadores sobre indicadores

Los indicadores marcados con fuente más abajo pueden calcularse sobre otro precio distinto del cierre (open, high, low, hl2, hlc3, ohlc4, hlcc4) o sobre la línea de otro indicador. Una media móvil del RSI se dibuja en el panel del RSI, en su escala, y desaparece cuando se quita el RSI.

import { indicatorSource } from '@tradecanvas/chart'

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

Los indicadores en panel también pueden compartir un panel: chart.addIndicator('stochastic', {}, 'bottom', { pane: rsi }).

Niveles, colores y valores

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

El último valor de cada línea se marca en su eje con el color de la línea; desactiva estas etiquetas con features.indicatorValueLabels: false o setIndicatorValueLabelsVisible(false). Las líneas, los niveles, el eje y la cruz de un panel comparten una misma escala.

En el panel de precio (35)

idNombreParámetros predeterminadosLíneas
smaSimple Moving Average· fuenteperiod: 20, source: "close"SMA
emaExponential Moving Average· fuenteperiod: 20, source: "close"EMA
bbBollinger Bands· fuenteperiod: 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· fuenteperiod: 100, stdDev: 2, source: "close"Upper, Basis, Lower
hmaHull Moving Average· fuenteperiod: 21, source: "close"HMA
mtfmaMTF Moving Average· fuenteperiod: 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· fuenteperiod: 20, source: "close"VWMA
wmaWeighted Moving Average· fuenteperiod: 20, source: "close"WMA
envelopeMoving Average Envelope· fuenteperiod: 20, percent: 2.5, source: "close"Upper, Basis, Lower
temaTriple EMA· fuenteperiod: 20, source: "close"TEMA
volumeProfileVolume Profilerows: 24—
demaDouble Exponential Moving Average· fuenteperiod: 20, source: "close"DEMA
smmaSmoothed Moving Average· fuenteperiod: 14, source: "close"SMMA
almaArnaud Legoux Moving Average· fuenteperiod: 9, offset: 0.85, sigma: 6, source: "close"ALMA
kamaKaufman Adaptive Moving Average· fuenteperiod: 10, fast: 2, slow: 30, source: "close"KAMA
lsmaLeast Squares Moving Average· fuenteperiod: 25, offset: 0, source: "close"LSMA
mcginleyMcGinley Dynamic· fuenteperiod: 14, source: "close"McGinley
macrossMA Cross· fuentefast: 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 traza en el gráfico actual una media móvil de una temporalidad superior; por ejemplo, la MA de 50 diaria sobre barras de 1h. Solo promedia los cierres completados de la temporalidad superior, así que avanza en escalones en cada límite y nunca se redibuja.

En un panel propio (60)

idNombreParámetros predeterminadosLíneasNiveles
rsiRelative Strength Index· fuenteperiod: 14, source: "close"RSI30, 70
macdMACD· fuentefast: 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· fuenteperiod: 12, source: "close"ROC0
tsiTrue Strength Index· fuentelongPeriod: 25, shortPeriod: 13, signalPeriod: 7, source: "close"TSI, Signal0
cmfChaikin Money Flowperiod: 20CMF—
stddevStandard Deviation· fuenteperiod: 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· fuentersiPeriod: 3, streakPeriod: 2, rankPeriod: 100, source: "close"CRSI10, 90
coppockCoppock Curve· fuentelongRoc: 14, shortRoc: 11, wma: 10, source: "close"Coppock0
kstKnow Sure Thing· fuenteroc1: 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· fuentefast: 23, slow: 50, cycle: 10, source: "close"STC25, 75
kvoKlinger Oscillatorfast: 34, slow: 55, signal: 13KVO, Signal0
fisherFisher Transformperiod: 9Fisher, Trigger0
dpoDetrended Price Oscillator· fuenteperiod: 20, source: "close"DPO—
bopBalance of Powersmooth: 14BOP0
massindexMass Indexema: 9, sum: 25Mass26.5, 27
cmoChande Momentum· fuenteperiod: 9, source: "close"CMO-50, 0, 50
trixTRIX· fuenteperiod: 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· fuentersiPeriod: 14, stochPeriod: 14, k: 3, d: 3, source: "close"%K, %D20, 80
ppoPercentage Price Oscillator· fuentefast: 12, slow: 26, signal: 9, source: "close"Histogram, PPO, Signal0
acAccelerator Oscillator—AC—
rmiRelative Momentum Index· fuenteperiod: 20, momentum: 5, source: "close"RMI30, 70
disparityDisparity Index· fuenteperiod: 14, source: "close"DI0
qstickQstickperiod: 8Qstick0
pgoPretty Good Oscillatorperiod: 14PGO-3, 0, 3
bbpbBollinger Bands %B· fuenteperiod: 20, stdDev: 2, source: "close"%B0, 0.5, 1
bbwBollinger BandWidth· fuenteperiod: 20, stdDev: 2, source: "close"BBW—
momMomentum· fuenteperiod: 10, source: "close"MOM0
hvHistorical Volatility· fuenteperiod: 10, annual: 365, source: "close"HV—
voVolume Oscillatorshort: 5, long: 10Vol Osc0
ulcerUlcer Index· fuenteperiod: 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) aproxima la presión compradora/vendedora a partir de OHLCV: las barras que cierran al alza suman volumen positivo y las bajistas, negativo. mode: 0 es el histograma por barra y mode: 1 el delta acumulado. (Un delta real por tick necesita datos de compra/venta de cada operación, que una serie OHLCV no incluye).

Tu propio indicador

Extiende IndicatorBase y declara lo que dibuja (plots), la escala de su panel, sus niveles y sus parámetros; el gráfico lo dibuja, escala su panel, etiqueta sus valores y lo muestra en la leyenda y la configuración del widget sin que tengas que escribir código de renderizado. Consulta la receta de indicador personalizado.

Paneles: redimensionar, contraer, maximizar, reordenar

Arrastra el divisor que hay sobre un panel para cambiar su tamaño. En ChartWidget cada panel tiene botones arriba a la derecha: subirlo o bajarlo, contraerlo hasta su cabecera y maximizarlo (los demás paneles se contraen y el panel de precio conserva una franja). Los diseños guardados conservan el tamaño, el orden y el estado contraído o maximizado de cada panel. Lo mismo desde código:

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

En ChartWidget, haz clic derecho en un panel para darle su propia escala logarítmica, invertida o porcentual.

Mover un indicador a otro panel

Un indicador puede unirse al panel de otro indicador (y entonces comparte la escala de ese panel), tener un panel propio o volver al panel de precio. Cuando deja un panel que era suyo, los demás indicadores se quedan en él (el siguiente indicador en panel pasa a ser su dueño), y los que leen sus líneas lo siguen. En ChartWidget, el botón ⋯ de una fila de la leyenda ofrece el panel de arriba, el de abajo, un panel nuevo y el panel de precio.

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

Deshacer y plantillas

Añadir, quitar, editar y mover indicadores son pasos que se pueden deshacer, en el mismo historial que los dibujos (Ctrl/⌘ Z, Ctrl/⌘ Shift Z); un indicador que vuelve al deshacer conserva su propio id, así que las alertas sobre sus líneas siguen coincidiendo. Una ráfaga de cambios en un mismo indicador (un color arrastrado, un periodo escrito) es un solo paso. Al cargar un diseño, el historial empieza de cero.

Los indicadores se pueden tomar y volver a poner en bloque, que es lo que hacen las plantillas de indicadores de ChartWidget: Guardar indicadores como plantilla… en el menú Indicadores los guarda (parámetros, estilo, niveles, paneles) con un nombre, y elegir una plantilla los pone en lugar de los del gráfico, como un solo paso de deshacer.

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

Cálculo fuera del gráfico

IndicatorWorkerHost calcula un indicador a partir de las barras con los mismos mensajes que usaría un Web Worker. El script del worker todavía no forma parte de los paquetes publicados, así que pasa null y registra los plugins para calcular en el mismo hilo (SSR, tests, scripts):

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)