@invinite-org/chartlang-runtime 1.0.2 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +101 -0
- package/README.md +10 -2
- package/dist/buildComputeContext.js.map +1 -1
- package/dist/createScriptRunner.d.ts +55 -4
- package/dist/createScriptRunner.d.ts.map +1 -1
- package/dist/createScriptRunner.js +103 -35
- package/dist/createScriptRunner.js.map +1 -1
- package/dist/dep/DepOutputStore.d.ts +92 -0
- package/dist/dep/DepOutputStore.d.ts.map +1 -0
- package/dist/dep/DepOutputStore.js +0 -0
- package/dist/dep/DepOutputStore.js.map +1 -0
- package/dist/dep/DepRunner.d.ts +146 -0
- package/dist/dep/DepRunner.d.ts.map +1 -0
- package/dist/dep/DepRunner.js +243 -0
- package/dist/dep/DepRunner.js.map +1 -0
- package/dist/dep/depOutput.d.ts +50 -0
- package/dist/dep/depOutput.d.ts.map +1 -0
- package/dist/dep/depOutput.js +92 -0
- package/dist/dep/depOutput.js.map +1 -0
- package/dist/dep/emissionFilter.d.ts +70 -0
- package/dist/dep/emissionFilter.d.ts.map +1 -0
- package/dist/dep/emissionFilter.js +105 -0
- package/dist/dep/emissionFilter.js.map +1 -0
- package/dist/dep/index.d.ts +8 -0
- package/dist/dep/index.d.ts.map +1 -0
- package/dist/dep/index.js +7 -0
- package/dist/dep/index.js.map +1 -0
- package/dist/emit/alert.js.map +1 -1
- package/dist/emit/alertConditionEmission.js.map +1 -1
- package/dist/emit/applyPlotOverride.d.ts +24 -0
- package/dist/emit/applyPlotOverride.d.ts.map +1 -0
- package/dist/emit/applyPlotOverride.js +48 -0
- package/dist/emit/applyPlotOverride.js.map +1 -0
- package/dist/emit/draw/annotations/arrow.js +1 -1
- package/dist/emit/draw/annotations/arrow.js.map +1 -1
- package/dist/emit/draw/annotations/arrowMarkDown.js +1 -1
- package/dist/emit/draw/annotations/arrowMarkDown.js.map +1 -1
- package/dist/emit/draw/annotations/arrowMarkUp.js +1 -1
- package/dist/emit/draw/annotations/arrowMarkUp.js.map +1 -1
- package/dist/emit/draw/annotations/arrowMarker.js +1 -1
- package/dist/emit/draw/annotations/arrowMarker.js.map +1 -1
- package/dist/emit/draw/annotations/text.js +1 -1
- package/dist/emit/draw/annotations/text.js.map +1 -1
- package/dist/emit/draw/boxes/circle.js +1 -1
- package/dist/emit/draw/boxes/circle.js.map +1 -1
- package/dist/emit/draw/boxes/ellipse.d.ts +1 -1
- package/dist/emit/draw/boxes/ellipse.js +1 -1
- package/dist/emit/draw/boxes/ellipse.js.map +1 -1
- package/dist/emit/draw/boxes/marker.js +1 -1
- package/dist/emit/draw/boxes/marker.js.map +1 -1
- package/dist/emit/draw/boxes/path.d.ts +1 -1
- package/dist/emit/draw/boxes/path.js +1 -1
- package/dist/emit/draw/boxes/path.js.map +1 -1
- package/dist/emit/draw/boxes/polyline.d.ts +1 -1
- package/dist/emit/draw/boxes/polyline.js +1 -1
- package/dist/emit/draw/boxes/polyline.js.map +1 -1
- package/dist/emit/draw/boxes/rectangle.js +1 -1
- package/dist/emit/draw/boxes/rectangle.js.map +1 -1
- package/dist/emit/draw/boxes/rotatedRectangle.js +1 -1
- package/dist/emit/draw/boxes/rotatedRectangle.js.map +1 -1
- package/dist/emit/draw/boxes/triangle.d.ts +1 -1
- package/dist/emit/draw/boxes/triangle.js +1 -1
- package/dist/emit/draw/boxes/triangle.js.map +1 -1
- package/dist/emit/draw/channels/disjointChannel.js +1 -1
- package/dist/emit/draw/channels/disjointChannel.js.map +1 -1
- package/dist/emit/draw/channels/flatTopBottom.d.ts +1 -2
- package/dist/emit/draw/channels/flatTopBottom.d.ts.map +1 -1
- package/dist/emit/draw/channels/flatTopBottom.js +1 -1
- package/dist/emit/draw/channels/flatTopBottom.js.map +1 -1
- package/dist/emit/draw/channels/regressionTrend.d.ts +3 -4
- package/dist/emit/draw/channels/regressionTrend.d.ts.map +1 -1
- package/dist/emit/draw/channels/regressionTrend.js +1 -1
- package/dist/emit/draw/channels/regressionTrend.js.map +1 -1
- package/dist/emit/draw/channels/trendChannel.js +1 -1
- package/dist/emit/draw/channels/trendChannel.js.map +1 -1
- package/dist/emit/draw/containers/frame.d.ts +1 -1
- package/dist/emit/draw/containers/frame.js +2 -2
- package/dist/emit/draw/containers/frame.js.map +1 -1
- package/dist/emit/draw/containers/group.d.ts +1 -2
- package/dist/emit/draw/containers/group.d.ts.map +1 -1
- package/dist/emit/draw/containers/group.js +2 -2
- package/dist/emit/draw/containers/group.js.map +1 -1
- package/dist/emit/draw/curves/arc.js +1 -1
- package/dist/emit/draw/curves/arc.js.map +1 -1
- package/dist/emit/draw/curves/brush.js +1 -1
- package/dist/emit/draw/curves/brush.js.map +1 -1
- package/dist/emit/draw/curves/curve.js +1 -1
- package/dist/emit/draw/curves/curve.js.map +1 -1
- package/dist/emit/draw/curves/doubleCurve.js +1 -1
- package/dist/emit/draw/curves/doubleCurve.js.map +1 -1
- package/dist/emit/draw/curves/highlighter.js +1 -1
- package/dist/emit/draw/curves/highlighter.js.map +1 -1
- package/dist/emit/draw/curves/pen.js +1 -1
- package/dist/emit/draw/curves/pen.js.map +1 -1
- package/dist/emit/draw/cycles/cyclicLines.js +1 -1
- package/dist/emit/draw/cycles/cyclicLines.js.map +1 -1
- package/dist/emit/draw/cycles/sineLine.js +1 -1
- package/dist/emit/draw/cycles/sineLine.js.map +1 -1
- package/dist/emit/draw/cycles/timeCycles.js +1 -1
- package/dist/emit/draw/cycles/timeCycles.js.map +1 -1
- package/dist/emit/draw/elliott/elliottCorrectionWave.js +1 -1
- package/dist/emit/draw/elliott/elliottCorrectionWave.js.map +1 -1
- package/dist/emit/draw/elliott/elliottDoubleCombo.js +1 -1
- package/dist/emit/draw/elliott/elliottDoubleCombo.js.map +1 -1
- package/dist/emit/draw/elliott/elliottImpulseWave.js +1 -1
- package/dist/emit/draw/elliott/elliottImpulseWave.js.map +1 -1
- package/dist/emit/draw/elliott/elliottTriangleWave.js +1 -1
- package/dist/emit/draw/elliott/elliottTriangleWave.js.map +1 -1
- package/dist/emit/draw/elliott/elliottTripleCombo.js +1 -1
- package/dist/emit/draw/elliott/elliottTripleCombo.js.map +1 -1
- package/dist/emit/draw/fibA/fibChannel.js +1 -1
- package/dist/emit/draw/fibA/fibChannel.js.map +1 -1
- package/dist/emit/draw/fibA/fibRetracement.js +1 -1
- package/dist/emit/draw/fibA/fibRetracement.js.map +1 -1
- package/dist/emit/draw/fibA/fibTimeZone.d.ts +1 -2
- package/dist/emit/draw/fibA/fibTimeZone.d.ts.map +1 -1
- package/dist/emit/draw/fibA/fibTimeZone.js +1 -1
- package/dist/emit/draw/fibA/fibTimeZone.js.map +1 -1
- package/dist/emit/draw/fibA/fibTrendExtension.js +1 -1
- package/dist/emit/draw/fibA/fibTrendExtension.js.map +1 -1
- package/dist/emit/draw/fibA/fibWedge.js +1 -1
- package/dist/emit/draw/fibA/fibWedge.js.map +1 -1
- package/dist/emit/draw/fibB/fibCircles.d.ts +1 -2
- package/dist/emit/draw/fibB/fibCircles.d.ts.map +1 -1
- package/dist/emit/draw/fibB/fibCircles.js +1 -1
- package/dist/emit/draw/fibB/fibCircles.js.map +1 -1
- package/dist/emit/draw/fibB/fibSpeedArcs.js +1 -1
- package/dist/emit/draw/fibB/fibSpeedArcs.js.map +1 -1
- package/dist/emit/draw/fibB/fibSpeedFan.js +1 -1
- package/dist/emit/draw/fibB/fibSpeedFan.js.map +1 -1
- package/dist/emit/draw/fibB/fibSpiral.d.ts +1 -2
- package/dist/emit/draw/fibB/fibSpiral.d.ts.map +1 -1
- package/dist/emit/draw/fibB/fibSpiral.js +1 -1
- package/dist/emit/draw/fibB/fibSpiral.js.map +1 -1
- package/dist/emit/draw/fibB/fibTrendTime.d.ts +1 -2
- package/dist/emit/draw/fibB/fibTrendTime.d.ts.map +1 -1
- package/dist/emit/draw/fibB/fibTrendTime.js +1 -1
- package/dist/emit/draw/fibB/fibTrendTime.js.map +1 -1
- package/dist/emit/draw/gann/gannBox.js +1 -1
- package/dist/emit/draw/gann/gannBox.js.map +1 -1
- package/dist/emit/draw/gann/gannFan.js +1 -1
- package/dist/emit/draw/gann/gannFan.js.map +1 -1
- package/dist/emit/draw/gann/gannSquare.js +1 -1
- package/dist/emit/draw/gann/gannSquare.js.map +1 -1
- package/dist/emit/draw/gann/gannSquareFixed.js +1 -1
- package/dist/emit/draw/gann/gannSquareFixed.js.map +1 -1
- package/dist/emit/draw/handle.d.ts +2 -2
- package/dist/emit/draw/handle.js +2 -2
- package/dist/emit/draw/handle.js.map +1 -1
- package/dist/emit/draw/index.js.map +1 -1
- package/dist/emit/draw/lines/crossLine.js +1 -1
- package/dist/emit/draw/lines/crossLine.js.map +1 -1
- package/dist/emit/draw/lines/horizontalLine.d.ts +1 -1
- package/dist/emit/draw/lines/horizontalLine.js +1 -1
- package/dist/emit/draw/lines/horizontalLine.js.map +1 -1
- package/dist/emit/draw/lines/horizontalRay.js +1 -1
- package/dist/emit/draw/lines/horizontalRay.js.map +1 -1
- package/dist/emit/draw/lines/line.d.ts +1 -1
- package/dist/emit/draw/lines/line.d.ts.map +1 -1
- package/dist/emit/draw/lines/line.js +2 -3
- package/dist/emit/draw/lines/line.js.map +1 -1
- package/dist/emit/draw/lines/trendAngle.js +1 -1
- package/dist/emit/draw/lines/trendAngle.js.map +1 -1
- package/dist/emit/draw/lines/verticalLine.js +1 -1
- package/dist/emit/draw/lines/verticalLine.js.map +1 -1
- package/dist/emit/draw/namespace.d.ts +1 -1
- package/dist/emit/draw/namespace.js +1 -1
- package/dist/emit/draw/namespace.js.map +1 -1
- package/dist/emit/draw/patterns/abcdPattern.js +1 -1
- package/dist/emit/draw/patterns/abcdPattern.js.map +1 -1
- package/dist/emit/draw/patterns/cypherPattern.d.ts +1 -2
- package/dist/emit/draw/patterns/cypherPattern.d.ts.map +1 -1
- package/dist/emit/draw/patterns/cypherPattern.js +1 -1
- package/dist/emit/draw/patterns/cypherPattern.js.map +1 -1
- package/dist/emit/draw/patterns/headAndShoulders.js +1 -1
- package/dist/emit/draw/patterns/headAndShoulders.js.map +1 -1
- package/dist/emit/draw/patterns/threeDrivesPattern.js +1 -1
- package/dist/emit/draw/patterns/threeDrivesPattern.js.map +1 -1
- package/dist/emit/draw/patterns/trianglePattern.d.ts +1 -1
- package/dist/emit/draw/patterns/trianglePattern.js +1 -1
- package/dist/emit/draw/patterns/trianglePattern.js.map +1 -1
- package/dist/emit/draw/patterns/xabcdPattern.js +1 -1
- package/dist/emit/draw/patterns/xabcdPattern.js.map +1 -1
- package/dist/emit/draw/pitchforks/pitchfan.js +1 -1
- package/dist/emit/draw/pitchforks/pitchfan.js.map +1 -1
- package/dist/emit/draw/pitchforks/pitchfork.d.ts +1 -1
- package/dist/emit/draw/pitchforks/pitchfork.js +2 -2
- package/dist/emit/draw/pitchforks/pitchfork.js.map +1 -1
- package/dist/emit/draw/pushDrawing.js.map +1 -1
- package/dist/emit/draw/subIdAllocator.d.ts +1 -1
- package/dist/emit/draw/subIdAllocator.js +1 -1
- package/dist/emit/draw/subIdAllocator.js.map +1 -1
- package/dist/emit/draw/table/table.d.ts +1 -1
- package/dist/emit/draw/table/table.js.map +1 -1
- package/dist/emit/emissionsQueue.js.map +1 -1
- package/dist/emit/hash.js.map +1 -1
- package/dist/emit/hline.d.ts +6 -4
- package/dist/emit/hline.d.ts.map +1 -1
- package/dist/emit/hline.js +5 -2
- package/dist/emit/hline.js.map +1 -1
- package/dist/emit/index.d.ts +2 -1
- package/dist/emit/index.d.ts.map +1 -1
- package/dist/emit/index.js +2 -1
- package/dist/emit/index.js.map +1 -1
- package/dist/emit/logEmission.js.map +1 -1
- package/dist/emit/paneResolver.d.ts +52 -11
- package/dist/emit/paneResolver.d.ts.map +1 -1
- package/dist/emit/paneResolver.js +69 -26
- package/dist/emit/paneResolver.js.map +1 -1
- package/dist/emit/plot.d.ts.map +1 -1
- package/dist/emit/plot.js +2 -1
- package/dist/emit/plot.js.map +1 -1
- package/dist/emit/runtimeError.js.map +1 -1
- package/dist/execution/dispose.d.ts.map +1 -1
- package/dist/execution/dispose.js +7 -0
- package/dist/execution/dispose.js.map +1 -1
- package/dist/execution/drain.js.map +1 -1
- package/dist/execution/index.js.map +1 -1
- package/dist/execution/onBarClose.d.ts +9 -13
- package/dist/execution/onBarClose.d.ts.map +1 -1
- package/dist/execution/onBarClose.js +28 -59
- package/dist/execution/onBarClose.js.map +1 -1
- package/dist/execution/onBarTick.d.ts +4 -10
- package/dist/execution/onBarTick.d.ts.map +1 -1
- package/dist/execution/onBarTick.js +24 -57
- package/dist/execution/onBarTick.js.map +1 -1
- package/dist/execution/onHistory.js.map +1 -1
- package/dist/execution/runComputeStep.d.ts +68 -0
- package/dist/execution/runComputeStep.d.ts.map +1 -0
- package/dist/execution/runComputeStep.js +96 -0
- package/dist/execution/runComputeStep.js.map +1 -0
- package/dist/execution/secondaryStream.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/inputs/index.js.map +1 -1
- package/dist/inputs/resolveInputs.js.map +1 -1
- package/dist/internal.d.ts +12 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +14 -0
- package/dist/internal.js.map +1 -0
- package/dist/persistentStateStore.js.map +1 -1
- package/dist/persistentStateStore.runtime.d.ts +18 -4
- package/dist/persistentStateStore.runtime.d.ts.map +1 -1
- package/dist/persistentStateStore.runtime.js +111 -18
- package/dist/persistentStateStore.runtime.js.map +1 -1
- package/dist/persistentStateStore.validate.d.ts +11 -1
- package/dist/persistentStateStore.validate.d.ts.map +1 -1
- package/dist/persistentStateStore.validate.js +32 -3
- package/dist/persistentStateStore.validate.js.map +1 -1
- package/dist/primitives.js.map +1 -1
- package/dist/request/alignHtfSeriesCache.js.map +1 -1
- package/dist/request/alignHtfSeriesToLtf.d.ts +2 -2
- package/dist/request/alignHtfSeriesToLtf.js +2 -2
- package/dist/request/alignHtfSeriesToLtf.js.map +1 -1
- package/dist/request/bucketLtfBarsByMainContainment.js.map +1 -1
- package/dist/request/bucketLtfBarsCache.js.map +1 -1
- package/dist/request/index.js.map +1 -1
- package/dist/request/lowerTf.js.map +1 -1
- package/dist/request/pushOnce.js.map +1 -1
- package/dist/request/requestNamespace.js.map +1 -1
- package/dist/request/security.js.map +1 -1
- package/dist/request/streamBars.js.map +1 -1
- package/dist/ringBuffer.d.ts +2 -2
- package/dist/ringBuffer.js +1 -1
- package/dist/ringBuffer.js.map +1 -1
- package/dist/runtimeContext.d.ts +65 -7
- package/dist/runtimeContext.d.ts.map +1 -1
- package/dist/runtimeContext.js.map +1 -1
- package/dist/seriesView.d.ts +1 -1
- package/dist/seriesView.js +1 -1
- package/dist/seriesView.js.map +1 -1
- package/dist/state/index.js.map +1 -1
- package/dist/state/lifecycle.js.map +1 -1
- package/dist/state/stateNamespace.d.ts.map +1 -1
- package/dist/state/stateNamespace.js +13 -2
- package/dist/state/stateNamespace.js.map +1 -1
- package/dist/state/stateSlot.js.map +1 -1
- package/dist/stateStore.d.ts +7 -4
- package/dist/stateStore.d.ts.map +1 -1
- package/dist/stateStore.js.map +1 -1
- package/dist/streamState.d.ts +1 -1
- package/dist/streamState.js +1 -1
- package/dist/streamState.js.map +1 -1
- package/dist/ta/adl.js +2 -2
- package/dist/ta/adl.js.map +1 -1
- package/dist/ta/adr.d.ts +3 -3
- package/dist/ta/adr.js +5 -5
- package/dist/ta/adr.js.map +1 -1
- package/dist/ta/adx.d.ts +1 -1
- package/dist/ta/adx.js +3 -3
- package/dist/ta/adx.js.map +1 -1
- package/dist/ta/alma.d.ts +3 -3
- package/dist/ta/alma.js +5 -5
- package/dist/ta/alma.js.map +1 -1
- package/dist/ta/anchoredVolumeProfile.js.map +1 -1
- package/dist/ta/anchoredVwap.d.ts +1 -1
- package/dist/ta/anchoredVwap.js +3 -3
- package/dist/ta/anchoredVwap.js.map +1 -1
- package/dist/ta/ao.js +2 -2
- package/dist/ta/ao.js.map +1 -1
- package/dist/ta/aroon.js +2 -2
- package/dist/ta/aroon.js.map +1 -1
- package/dist/ta/aroonOsc.js +2 -2
- package/dist/ta/aroonOsc.js.map +1 -1
- package/dist/ta/atr.d.ts +1 -1
- package/dist/ta/atr.js +3 -3
- package/dist/ta/atr.js.map +1 -1
- package/dist/ta/barssince.js +1 -1
- package/dist/ta/barssince.js.map +1 -1
- package/dist/ta/bb.d.ts +1 -1
- package/dist/ta/bb.js +3 -3
- package/dist/ta/bb.js.map +1 -1
- package/dist/ta/bbPercentB.js +2 -2
- package/dist/ta/bbPercentB.js.map +1 -1
- package/dist/ta/bbw.js +2 -2
- package/dist/ta/bbw.js.map +1 -1
- package/dist/ta/bop.js +2 -2
- package/dist/ta/bop.js.map +1 -1
- package/dist/ta/cci.js +2 -2
- package/dist/ta/cci.js.map +1 -1
- package/dist/ta/chaikinOsc.d.ts +1 -1
- package/dist/ta/chaikinOsc.js +3 -3
- package/dist/ta/chaikinOsc.js.map +1 -1
- package/dist/ta/chandeKrollStop.d.ts +1 -1
- package/dist/ta/chandeKrollStop.js +3 -3
- package/dist/ta/chandeKrollStop.js.map +1 -1
- package/dist/ta/chandelier.d.ts +1 -1
- package/dist/ta/chandelier.js +3 -3
- package/dist/ta/chandelier.js.map +1 -1
- package/dist/ta/change.js +1 -1
- package/dist/ta/change.js.map +1 -1
- package/dist/ta/chop.js +2 -2
- package/dist/ta/chop.js.map +1 -1
- package/dist/ta/cmf.js +2 -2
- package/dist/ta/cmf.js.map +1 -1
- package/dist/ta/cmo.js +2 -2
- package/dist/ta/cmo.js.map +1 -1
- package/dist/ta/connorsRsi.d.ts +1 -1
- package/dist/ta/connorsRsi.js +3 -3
- package/dist/ta/connorsRsi.js.map +1 -1
- package/dist/ta/coppock.js +2 -2
- package/dist/ta/coppock.js.map +1 -1
- package/dist/ta/crossover.d.ts +1 -1
- package/dist/ta/crossover.js +2 -2
- package/dist/ta/crossover.js.map +1 -1
- package/dist/ta/crossunder.d.ts +1 -1
- package/dist/ta/crossunder.js +2 -2
- package/dist/ta/crossunder.js.map +1 -1
- package/dist/ta/dema.js +2 -2
- package/dist/ta/dema.js.map +1 -1
- package/dist/ta/dmi.d.ts +1 -1
- package/dist/ta/dmi.js +3 -3
- package/dist/ta/dmi.js.map +1 -1
- package/dist/ta/donchian.js +2 -2
- package/dist/ta/donchian.js.map +1 -1
- package/dist/ta/dpo.js +2 -2
- package/dist/ta/dpo.js.map +1 -1
- package/dist/ta/ema.d.ts +1 -1
- package/dist/ta/ema.js +3 -3
- package/dist/ta/ema.js.map +1 -1
- package/dist/ta/envelope.js +2 -2
- package/dist/ta/envelope.js.map +1 -1
- package/dist/ta/eom.d.ts +1 -1
- package/dist/ta/eom.js +3 -3
- package/dist/ta/eom.js.map +1 -1
- package/dist/ta/fisher.js +2 -2
- package/dist/ta/fisher.js.map +1 -1
- package/dist/ta/fixedRangeVolumeProfile.js.map +1 -1
- package/dist/ta/highest.js +1 -1
- package/dist/ta/highest.js.map +1 -1
- package/dist/ta/historicalVolatility.d.ts +1 -1
- package/dist/ta/historicalVolatility.js +3 -3
- package/dist/ta/historicalVolatility.js.map +1 -1
- package/dist/ta/hma.js +2 -2
- package/dist/ta/hma.js.map +1 -1
- package/dist/ta/ichimoku.d.ts +1 -1
- package/dist/ta/ichimoku.js +3 -3
- package/dist/ta/ichimoku.js.map +1 -1
- package/dist/ta/index.js.map +1 -1
- package/dist/ta/kama.js +2 -2
- package/dist/ta/kama.js.map +1 -1
- package/dist/ta/keltner.js +2 -2
- package/dist/ta/keltner.js.map +1 -1
- package/dist/ta/klinger.js +2 -2
- package/dist/ta/klinger.js.map +1 -1
- package/dist/ta/kst.js +2 -2
- package/dist/ta/kst.js.map +1 -1
- package/dist/ta/lib/adxFromDi.js +2 -2
- package/dist/ta/lib/adxFromDi.js.map +1 -1
- package/dist/ta/lib/applyOffset.js +2 -2
- package/dist/ta/lib/applyOffset.js.map +1 -1
- package/dist/ta/lib/computeMa.js +2 -2
- package/dist/ta/lib/computeMa.js.map +1 -1
- package/dist/ta/lib/computeMaOfFloat64.js +2 -2
- package/dist/ta/lib/computeMaOfFloat64.js.map +1 -1
- package/dist/ta/lib/directionalState.js +2 -2
- package/dist/ta/lib/directionalState.js.map +1 -1
- package/dist/ta/lib/donchianMid.js +2 -2
- package/dist/ta/lib/donchianMid.js.map +1 -1
- package/dist/ta/lib/emaFloat64.js +2 -2
- package/dist/ta/lib/emaFloat64.js.map +1 -1
- package/dist/ta/lib/linearRegression.js +2 -2
- package/dist/ta/lib/linearRegression.js.map +1 -1
- package/dist/ta/lib/maTypes.js.map +1 -1
- package/dist/ta/lib/pearson.js +2 -2
- package/dist/ta/lib/pearson.js.map +1 -1
- package/dist/ta/lib/pickCandleSource.js +2 -2
- package/dist/ta/lib/pickCandleSource.js.map +1 -1
- package/dist/ta/lib/readSourceField.js +2 -2
- package/dist/ta/lib/readSourceField.js.map +1 -1
- package/dist/ta/lib/rollingStddev.js +2 -2
- package/dist/ta/lib/rollingStddev.js.map +1 -1
- package/dist/ta/lib/smaFloat64.js +2 -2
- package/dist/ta/lib/smaFloat64.js.map +1 -1
- package/dist/ta/lib/smmaFloat64.js +2 -2
- package/dist/ta/lib/smmaFloat64.js.map +1 -1
- package/dist/ta/lib/sourceValue.js.map +1 -1
- package/dist/ta/lib/trSeries.js +2 -2
- package/dist/ta/lib/trSeries.js.map +1 -1
- package/dist/ta/lib/volume-profile/bucketEdges.js.map +1 -1
- package/dist/ta/lib/volume-profile/bucketizeVolume.js.map +1 -1
- package/dist/ta/lib/volume-profile/developingSeries.js.map +1 -1
- package/dist/ta/lib/volume-profile/index.js.map +1 -1
- package/dist/ta/lib/volume-profile/intercept.js.map +1 -1
- package/dist/ta/lib/volume-profile/scaffold.js.map +1 -1
- package/dist/ta/lib/volume-profile/tooHeavy.js.map +1 -1
- package/dist/ta/lib/volume-profile/types.js.map +1 -1
- package/dist/ta/lib/volume-profile/valueArea.js.map +1 -1
- package/dist/ta/lib/volume-profile/volumeProfileShared.js.map +1 -1
- package/dist/ta/lib/vwmaFloat64.js +2 -2
- package/dist/ta/lib/vwmaFloat64.js.map +1 -1
- package/dist/ta/lib/wilderDirectional.js +2 -2
- package/dist/ta/lib/wilderDirectional.js.map +1 -1
- package/dist/ta/lib/wilderSmoothing.js +2 -2
- package/dist/ta/lib/wilderSmoothing.js.map +1 -1
- package/dist/ta/lib/wmaFloat64.js +2 -2
- package/dist/ta/lib/wmaFloat64.js.map +1 -1
- package/dist/ta/lowest.js +1 -1
- package/dist/ta/lowest.js.map +1 -1
- package/dist/ta/lsma.js +2 -2
- package/dist/ta/lsma.js.map +1 -1
- package/dist/ta/maRibbon.js +2 -2
- package/dist/ta/maRibbon.js.map +1 -1
- package/dist/ta/macd.d.ts +1 -1
- package/dist/ta/macd.js +4 -4
- package/dist/ta/macd.js.map +1 -1
- package/dist/ta/massIndex.d.ts +1 -1
- package/dist/ta/massIndex.js +3 -3
- package/dist/ta/massIndex.js.map +1 -1
- package/dist/ta/mcginley.js +2 -2
- package/dist/ta/mcginley.js.map +1 -1
- package/dist/ta/median.js +2 -2
- package/dist/ta/median.js.map +1 -1
- package/dist/ta/mfi.d.ts +1 -1
- package/dist/ta/mfi.js +3 -3
- package/dist/ta/mfi.js.map +1 -1
- package/dist/ta/momentum.js +2 -2
- package/dist/ta/momentum.js.map +1 -1
- package/dist/ta/netVolume.d.ts +1 -1
- package/dist/ta/netVolume.js +3 -3
- package/dist/ta/netVolume.js.map +1 -1
- package/dist/ta/nvi.d.ts +1 -1
- package/dist/ta/nvi.js +3 -3
- package/dist/ta/nvi.js.map +1 -1
- package/dist/ta/nz.js +1 -1
- package/dist/ta/nz.js.map +1 -1
- package/dist/ta/obv.js +2 -2
- package/dist/ta/obv.js.map +1 -1
- package/dist/ta/persistence.js.map +1 -1
- package/dist/ta/pivotsHighLow.js +2 -2
- package/dist/ta/pivotsHighLow.js.map +1 -1
- package/dist/ta/pivotsStandard.d.ts +1 -1
- package/dist/ta/pivotsStandard.js +3 -3
- package/dist/ta/pivotsStandard.js.map +1 -1
- package/dist/ta/pmo.js +2 -2
- package/dist/ta/pmo.js.map +1 -1
- package/dist/ta/ppo.d.ts +1 -1
- package/dist/ta/ppo.js +3 -3
- package/dist/ta/ppo.js.map +1 -1
- package/dist/ta/psar.js +2 -2
- package/dist/ta/psar.js.map +1 -1
- package/dist/ta/pvi.d.ts +1 -1
- package/dist/ta/pvi.js +3 -3
- package/dist/ta/pvi.js.map +1 -1
- package/dist/ta/pvo.d.ts +1 -1
- package/dist/ta/pvo.js +3 -3
- package/dist/ta/pvo.js.map +1 -1
- package/dist/ta/pvt.d.ts +1 -1
- package/dist/ta/pvt.js +3 -3
- package/dist/ta/pvt.js.map +1 -1
- package/dist/ta/registry.js.map +1 -1
- package/dist/ta/roc.js +2 -2
- package/dist/ta/roc.js.map +1 -1
- package/dist/ta/rsi.d.ts +1 -1
- package/dist/ta/rsi.js +3 -3
- package/dist/ta/rsi.js.map +1 -1
- package/dist/ta/rvgi.js +2 -2
- package/dist/ta/rvgi.js.map +1 -1
- package/dist/ta/rvi.d.ts +1 -1
- package/dist/ta/rvi.js +3 -3
- package/dist/ta/rvi.js.map +1 -1
- package/dist/ta/sessionVolumeProfile.js.map +1 -1
- package/dist/ta/sma.d.ts +1 -1
- package/dist/ta/sma.js +3 -3
- package/dist/ta/sma.js.map +1 -1
- package/dist/ta/smi.js +2 -2
- package/dist/ta/smi.js.map +1 -1
- package/dist/ta/smma.js +2 -2
- package/dist/ta/smma.js.map +1 -1
- package/dist/ta/stdev.d.ts +1 -1
- package/dist/ta/stdev.js +3 -3
- package/dist/ta/stdev.js.map +1 -1
- package/dist/ta/stoch.js +2 -2
- package/dist/ta/stoch.js.map +1 -1
- package/dist/ta/stochRsi.js +2 -2
- package/dist/ta/stochRsi.js.map +1 -1
- package/dist/ta/supertrend.d.ts +1 -1
- package/dist/ta/supertrend.js +3 -3
- package/dist/ta/supertrend.js.map +1 -1
- package/dist/ta/tema.js +2 -2
- package/dist/ta/tema.js.map +1 -1
- package/dist/ta/trendStrengthIndex.d.ts +2 -2
- package/dist/ta/trendStrengthIndex.js +4 -4
- package/dist/ta/trendStrengthIndex.js.map +1 -1
- package/dist/ta/trix.d.ts +1 -1
- package/dist/ta/trix.js +3 -3
- package/dist/ta/trix.js.map +1 -1
- package/dist/ta/tsi.js +2 -2
- package/dist/ta/tsi.js.map +1 -1
- package/dist/ta/ulcerIndex.js +2 -2
- package/dist/ta/ulcerIndex.js.map +1 -1
- package/dist/ta/ultimateOsc.js +2 -2
- package/dist/ta/ultimateOsc.js.map +1 -1
- package/dist/ta/valuewhen.js +1 -1
- package/dist/ta/valuewhen.js.map +1 -1
- package/dist/ta/visibleRangeVolumeProfile.d.ts +2 -2
- package/dist/ta/visibleRangeVolumeProfile.js +2 -2
- package/dist/ta/visibleRangeVolumeProfile.js.map +1 -1
- package/dist/ta/vol.js +2 -2
- package/dist/ta/vol.js.map +1 -1
- package/dist/ta/volatilityStop.d.ts +1 -1
- package/dist/ta/volatilityStop.js +3 -3
- package/dist/ta/volatilityStop.js.map +1 -1
- package/dist/ta/vortex.d.ts +1 -1
- package/dist/ta/vortex.js +3 -3
- package/dist/ta/vortex.js.map +1 -1
- package/dist/ta/vwap.d.ts +3 -3
- package/dist/ta/vwap.js +5 -5
- package/dist/ta/vwap.js.map +1 -1
- package/dist/ta/vwma.js +2 -2
- package/dist/ta/vwma.js.map +1 -1
- package/dist/ta/williamsFractal.js +2 -2
- package/dist/ta/williamsFractal.js.map +1 -1
- package/dist/ta/williamsR.js +2 -2
- package/dist/ta/williamsR.js.map +1 -1
- package/dist/ta/wma.js +2 -2
- package/dist/ta/wma.js.map +1 -1
- package/dist/ta/zigZag.js +2 -2
- package/dist/ta/zigZag.js.map +1 -1
- package/dist/views/barstateView.js.map +1 -1
- package/dist/views/index.js.map +1 -1
- package/dist/views/refreshRuntimeViews.js.map +1 -1
- package/dist/views/symInfoView.js.map +1 -1
- package/dist/views/timeframeView.js.map +1 -1
- package/package.json +7 -3
package/dist/ta/hma.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hma.js","sourceRoot":"","sources":["../../src/ta/hma.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"hma.js","sourceRoot":"","sources":["../../src/ta/hma.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAChB,qEAAqE;AACrE,4DAA4D;AAC5D,mEAAmE;AACnE,yCAAyC;AAIzC,OAAO,EAAE,sBAAsB,EAAuB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAuB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAM/B,SAAS,MAAM;IACX,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,GAAG,CACf,MAAc,EACd,MAAsB,EACtB,MAAc,EACd,KAAe;IAEf,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,MAAM,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,MAAM,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;IAC9B,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IACnF,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,MAAM,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAE1D,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAwB,CAAC;IACjE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,IAAI,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAC/B,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC;AACvB,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/hma.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape. The HMA primitive composes three WMA sub-\n// slots derived from the parent slot id.\n\nimport type { HmaOpts, Series } from \"@invinite-org/chartlang-core\";\n\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { type ScalarOrSeries, readSourceValue } from \"./lib/sourceValue.js\";\nimport { wma } from \"./wma.js\";\n\ntype HmaSlot = {\n readonly series: Series<number>;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.hma called outside an active script step\");\n }\n return ctx;\n}\n\n/**\n * Hull moving average — `WMA(2·WMA(src, N/2) − WMA(src, N), sqrt(N))`.\n * Composes three WMA sub-slots derived from the parent slot id\n * (`${slotId}/half`, `${slotId}/full`, `${slotId}/final`). The intermediate\n * `diff = 2·halfWMA − fullWMA` is a scalar passed into the final WMA;\n * no separate primitive owns the diff stream. Warmup is the full chain:\n * `length + ceil(sqrt(length)) − 2`. Tick-mode propagates through every\n * sub-slot's replace-head branch.\n *\n * @formula halfLen = floor(length / 2) ;\n * sqrtLen = round(sqrt(length)) ;\n * half = WMA(source, halfLen) ;\n * full = WMA(source, length) ;\n * diff = 2 · half − full ;\n * out = WMA(diff, sqrtLen)\n * @warmup length + ceil(sqrt(length)) − 2\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const h = ta.hma(bar.close, 21);\n * // plot(h);\n */\nexport function hma(\n slotId: string,\n source: ScalarOrSeries,\n length: number,\n _opts?: HmaOpts,\n): Series<number> {\n const ctx = getCtx();\n const halfLen = Math.max(1, Math.floor(length / 2));\n const sqrtLen = Math.max(1, Math.round(Math.sqrt(length)));\n const src = readSourceValue(source);\n const halfSeries = wma(`${slotId}/half`, src, halfLen);\n const fullSeries = wma(`${slotId}/full`, src, length);\n const ha = halfSeries.current;\n const fa = fullSeries.current;\n const diff = Number.isFinite(ha) && Number.isFinite(fa) ? 2 * ha - fa : Number.NaN;\n const finalSeries = wma(`${slotId}/final`, diff, sqrtLen);\n\n let slot = ctx.stream.taSlots.get(slotId) as HmaSlot | undefined;\n if (slot === undefined) {\n slot = { series: finalSeries };\n ctx.stream.taSlots.set(slotId, slot);\n }\n return slot.series;\n}\n"]}
|
package/dist/ta/ichimoku.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ import type { IchimokuOpts, IchimokuResult } from "@invinite-org/chartlang-core"
|
|
|
27
27
|
* @since 0.2
|
|
28
28
|
* @stable
|
|
29
29
|
*
|
|
30
|
-
* `opts.offset` shifts all five outputs in lockstep
|
|
30
|
+
* `opts.offset` shifts all five outputs in lockstep.
|
|
31
31
|
*
|
|
32
32
|
* @example
|
|
33
33
|
* // import { ta } from "@invinite-org/chartlang-runtime";
|
package/dist/ta/ichimoku.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/ichimoku.ts
|
|
5
5
|
// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
|
|
6
|
-
// Re-licensed MIT for chartlang.
|
|
7
|
-
//
|
|
6
|
+
// Re-licensed MIT for chartlang. The math is the reference, the code
|
|
7
|
+
// style is not.
|
|
8
8
|
// Structural choices (callsite-id slot, Series<T> proxy, replaceHead
|
|
9
9
|
// mode) follow chartlang's primitive shape — NOT invinite's
|
|
10
10
|
// IndicatorPlugin shape. Ichimoku composes six `ta.highest` / `ta.lowest`
|
|
@@ -121,7 +121,7 @@ function resultForOffset(slot, offset) {
|
|
|
121
121
|
* @since 0.2
|
|
122
122
|
* @stable
|
|
123
123
|
*
|
|
124
|
-
* `opts.offset` shifts all five outputs in lockstep
|
|
124
|
+
* `opts.offset` shifts all five outputs in lockstep.
|
|
125
125
|
*
|
|
126
126
|
* @example
|
|
127
127
|
* // import { ta } from "@invinite-org/chartlang-runtime";
|
package/dist/ta/ichimoku.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ichimoku.js","sourceRoot":"","sources":["../../src/ta/ichimoku.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ichimoku.js","sourceRoot":"","sources":["../../src/ta/ichimoku.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/ichimoku.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape. Ichimoku composes six `ta.highest` / `ta.lowest`\n// sub-slots (one pair each for Tenkan / Kijun / Senkou B) — the same\n// composition seam `donchian.ts` uses — so a fix to highest/lowest\n// flows in for free. The forward-displaced Senkou A / Senkou B and\n// backward-displaced Chikou are produced via per-slot delay ring\n// buffers of capacity `displacement + 1`.\n\nimport type { IchimokuOpts, IchimokuResult } from \"@invinite-org/chartlang-core\";\n\nimport { Float64RingBuffer } from \"../ringBuffer.js\";\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView, makeShiftedSeriesView } from \"../seriesView.js\";\nimport { highest } from \"./highest.js\";\nimport { lowest } from \"./lowest.js\";\n\nconst DEFAULT_CONVERSION_LENGTH = 9;\nconst DEFAULT_BASE_LENGTH = 26;\nconst DEFAULT_LEADING_SPAN_B_LENGTH = 52;\nconst DEFAULT_DISPLACEMENT = 26;\n\ntype IchimokuSlot = {\n readonly outputs: IchimokuResult;\n readonly tenkanBuffer: Float64RingBuffer;\n readonly kijunBuffer: Float64RingBuffer;\n readonly senkouABuffer: Float64RingBuffer;\n readonly senkouBBuffer: Float64RingBuffer;\n readonly chikouBuffer: Float64RingBuffer;\n readonly conversionLength: number;\n readonly baseLength: number;\n readonly leadingSpanBLength: number;\n readonly displacement: number;\n /** Forward-shift delay for senkouA: capacity `displacement + 1`.\n * At each close we append the new `senkouARaw`; `at(displacement)`\n * gives the value from `displacement` closes ago — exactly the\n * value we emit for `senkouA[t]`. */\n readonly senkouADelay: Float64RingBuffer;\n readonly senkouBDelay: Float64RingBuffer;\n /** Backward-shift delay for chikou: capacity `displacement + 1`.\n * `chikou[t] = close[t − displacement]` — at each close we append\n * the new close; `at(displacement)` gives the value from\n * `displacement` closes ago. */\n readonly closeDelay: Float64RingBuffer;\n readonly shiftedResults: Map<number, IchimokuResult>;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.ichimoku called outside an active script step\");\n }\n return ctx;\n}\n\nfunction midpoint(hi: number, lo: number): number {\n if (!Number.isFinite(hi) || !Number.isFinite(lo)) return Number.NaN;\n return (hi + lo) / 2;\n}\n\nfunction spanAverage(a: number, b: number): number {\n if (!Number.isFinite(a) || !Number.isFinite(b)) return Number.NaN;\n return (a + b) / 2;\n}\n\nfunction delayedValue(delay: Float64RingBuffer, displacement: number): number {\n if (delay.length <= displacement) return Number.NaN;\n return delay.at(displacement);\n}\n\nfunction initSlot(\n capacity: number,\n conversionLength: number,\n baseLength: number,\n leadingSpanBLength: number,\n displacement: number,\n): IchimokuSlot {\n const tenkanBuffer = new Float64RingBuffer(capacity);\n const kijunBuffer = new Float64RingBuffer(capacity);\n const senkouABuffer = new Float64RingBuffer(capacity);\n const senkouBBuffer = new Float64RingBuffer(capacity);\n const chikouBuffer = new Float64RingBuffer(capacity);\n // The delay ring buffers need only `displacement + 1` slots — at\n // each close we append the new raw value; `at(displacement)`\n // returns the value from `displacement` closes ago.\n const delayCap = displacement + 1;\n return {\n outputs: Object.freeze({\n tenkan: makeSeriesView<number>(tenkanBuffer),\n kijun: makeSeriesView<number>(kijunBuffer),\n senkouA: makeSeriesView<number>(senkouABuffer),\n senkouB: makeSeriesView<number>(senkouBBuffer),\n chikou: makeSeriesView<number>(chikouBuffer),\n }),\n tenkanBuffer,\n kijunBuffer,\n senkouABuffer,\n senkouBBuffer,\n chikouBuffer,\n conversionLength,\n baseLength,\n leadingSpanBLength,\n displacement,\n senkouADelay: new Float64RingBuffer(delayCap),\n senkouBDelay: new Float64RingBuffer(delayCap),\n closeDelay: new Float64RingBuffer(delayCap),\n shiftedResults: new Map(),\n };\n}\n\nfunction resultForOffset(slot: IchimokuSlot, offset: number): IchimokuResult {\n if (offset === 0) return slot.outputs;\n let cached = slot.shiftedResults.get(offset);\n if (cached === undefined) {\n cached = Object.freeze({\n tenkan: makeShiftedSeriesView<number>(slot.tenkanBuffer, offset),\n kijun: makeShiftedSeriesView<number>(slot.kijunBuffer, offset),\n senkouA: makeShiftedSeriesView<number>(slot.senkouABuffer, offset),\n senkouB: makeShiftedSeriesView<number>(slot.senkouBBuffer, offset),\n chikou: makeShiftedSeriesView<number>(slot.chikouBuffer, offset),\n });\n slot.shiftedResults.set(offset, cached);\n }\n return cached;\n}\n\n/**\n * Ichimoku Cloud — five-line trend / cloud overlay. Composes six\n * `ta.highest` / `ta.lowest` sub-slots (Tenkan high+low, Kijun\n * high+low, Senkou B high+low) — the same composition seam\n * `ta.donchian` uses — so a fix to either rolling-extreme primitive\n * flows in for free. Forward-displaced Senkou A / Senkou B and\n * backward-displaced Chikou are produced via per-slot delay ring\n * buffers of capacity `displacement + 1`.\n *\n * `chikou.current` returns `close[t − displacement]` (the close from\n * `displacement` bars ago, plotted at today's position — the\n * lagging-span semantic). Renderer-side, the script author may\n * choose to draw it at the visually-offset position; the runtime\n * exposes the backward-shifted value so script-author conditionals\n * (cross / alert) see meaningful data.\n *\n * @formula tenkan[t] = (highest(high, conversionLength) + lowest(low, conversionLength)) / 2 ;\n * kijun[t] = (highest(high, baseLength) + lowest(low, baseLength)) / 2 ;\n * senkouARaw = (tenkan + kijun) / 2 ;\n * senkouBRaw = (highest(high, leadingSpanBLength) + lowest(low, leadingSpanBLength)) / 2 ;\n * senkouA[t] = senkouARaw[t − displacement] ;\n * senkouB[t] = senkouBRaw[t − displacement] ;\n * chikou[t] = close[t − displacement]\n * @anchors displacement, conversionLength, baseLength, leadingSpanBLength\n * @warmup max(conversionLength, baseLength, leadingSpanBLength) + displacement − 1\n * @since 0.2\n * @stable\n *\n * `opts.offset` shifts all five outputs in lockstep.\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-runtime\";\n * // const i = ta.ichimoku(\"slot\");\n * // plot(i.tenkan);\n * // plot(i.kijun);\n * // plot(i.senkouA);\n * // plot(i.senkouB);\n * // plot(i.chikou);\n */\nexport function ichimoku(slotId: string, opts?: IchimokuOpts): IchimokuResult {\n const ctx = getCtx();\n const conversionLength = opts?.conversionLength ?? DEFAULT_CONVERSION_LENGTH;\n const baseLength = opts?.baseLength ?? DEFAULT_BASE_LENGTH;\n const leadingSpanBLength = opts?.leadingSpanBLength ?? DEFAULT_LEADING_SPAN_B_LENGTH;\n const displacement = opts?.displacement ?? DEFAULT_DISPLACEMENT;\n const offset = opts?.offset ?? 0;\n const bar = ctx.stream.bar;\n\n let slot = ctx.stream.taSlots.get(slotId) as IchimokuSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(\n ctx.stream.ohlcv.close.capacity,\n conversionLength,\n baseLength,\n leadingSpanBLength,\n displacement,\n );\n ctx.stream.taSlots.set(slotId, slot);\n }\n\n // Compose: rolling extremes via the registered ta.highest /\n // ta.lowest sub-slots. Each composed call advances the sub-slot on\n // the same close (or replaces its head on the same tick).\n const tenkanHi = highest(`${slotId}/tenkanHigh`, bar.high, conversionLength).current;\n const tenkanLo = lowest(`${slotId}/tenkanLow`, bar.low, conversionLength).current;\n const kijunHi = highest(`${slotId}/kijunHigh`, bar.high, baseLength).current;\n const kijunLo = lowest(`${slotId}/kijunLow`, bar.low, baseLength).current;\n const senkouBHi = highest(`${slotId}/senkouBHigh`, bar.high, leadingSpanBLength).current;\n const senkouBLo = lowest(`${slotId}/senkouBLow`, bar.low, leadingSpanBLength).current;\n\n const tenkan = midpoint(tenkanHi, tenkanLo);\n const kijun = midpoint(kijunHi, kijunLo);\n const senkouBRaw = midpoint(senkouBHi, senkouBLo);\n const senkouARaw = spanAverage(tenkan, kijun);\n\n if (ctx.isTick) {\n // Replace the head of the delay buffers with the tick's\n // updated raw values. `at(displacement)` then returns the\n // SAME value as before (the displacement-shifted slot is not\n // affected by the head's value), so the displaced output\n // heads are stable on tick.\n slot.senkouADelay.replaceHead(senkouARaw);\n slot.senkouBDelay.replaceHead(senkouBRaw);\n slot.closeDelay.replaceHead(bar.close);\n slot.tenkanBuffer.replaceHead(tenkan);\n slot.kijunBuffer.replaceHead(kijun);\n slot.senkouABuffer.replaceHead(delayedValue(slot.senkouADelay, displacement));\n slot.senkouBBuffer.replaceHead(delayedValue(slot.senkouBDelay, displacement));\n slot.chikouBuffer.replaceHead(delayedValue(slot.closeDelay, displacement));\n } else {\n slot.senkouADelay.append(senkouARaw);\n slot.senkouBDelay.append(senkouBRaw);\n slot.closeDelay.append(bar.close);\n slot.tenkanBuffer.append(tenkan);\n slot.kijunBuffer.append(kijun);\n slot.senkouABuffer.append(delayedValue(slot.senkouADelay, displacement));\n slot.senkouBBuffer.append(delayedValue(slot.senkouBDelay, displacement));\n slot.chikouBuffer.append(delayedValue(slot.closeDelay, displacement));\n }\n\n return resultForOffset(slot, offset);\n}\n"]}
|
package/dist/ta/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ta/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ta/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nexport { TA_REGISTRY, ta } from \"./registry.js\";\nexport type { RuntimeTaNamespace } from \"./registry.js\";\nexport { maRibbonOutputKeys } from \"./maRibbon.js\";\nexport type { ScalarOrSeries } from \"./lib/sourceValue.js\";\n"]}
|
package/dist/ta/kama.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/kama.ts
|
|
5
5
|
// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
|
|
6
|
-
// Re-licensed MIT for chartlang.
|
|
7
|
-
//
|
|
6
|
+
// Re-licensed MIT for chartlang. The math is the reference, the code
|
|
7
|
+
// style is not.
|
|
8
8
|
// Structural choices (callsite-id slot, Series<T> proxy, replaceHead
|
|
9
9
|
// mode) follow chartlang's primitive shape — NOT invinite's
|
|
10
10
|
// IndicatorPlugin shape.
|
package/dist/ta/kama.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kama.js","sourceRoot":"","sources":["../../src/ta/kama.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kama.js","sourceRoot":"","sources":["../../src/ta/kama.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/kama.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape.\n\nimport type { KamaOpts, Series } from \"@invinite-org/chartlang-core\";\n\nimport { Float64RingBuffer } from \"../ringBuffer.js\";\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView } from \"../seriesView.js\";\nimport { type ScalarOrSeries, readSourceValue } from \"./lib/sourceValue.js\";\n\nconst DEFAULT_LENGTH = 10;\nconst DEFAULT_FAST = 2;\nconst DEFAULT_SLOW = 30;\n\ntype KamaSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n readonly length: number;\n readonly fastAlpha: number;\n readonly slowAlpha: number;\n /** Trailing `length + 1` source values; `at(0)` is head, `at(length)` is oldest. */\n readonly sourceWindow: Float64RingBuffer;\n prevKama: number;\n prevClosedKama: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.kama called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(\n length: number,\n fastLength: number,\n slowLength: number,\n capacity: number,\n): KamaSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n length,\n fastAlpha: 2 / (fastLength + 1),\n slowAlpha: 2 / (slowLength + 1),\n sourceWindow: new Float64RingBuffer(length + 1),\n prevKama: Number.NaN,\n prevClosedKama: Number.NaN,\n };\n}\n\n/**\n * Compute the next KAMA value given the slot's current window state,\n * `headSrc` (the source value to evaluate at age 0 — may be the\n * just-appended close or a tick replacement), and `prev` (the prior\n * KAMA — either `prevClosedKama` on close or `prevClosedKama` on\n * tick; tick recomputes from the closed prior). Returns NaN until the\n * window holds `length + 1` finite samples.\n */\nfunction computeKama(slot: KamaSlot, headSrc: number, prev: number): number {\n if (slot.sourceWindow.length < slot.length + 1) return Number.NaN;\n if (!Number.isFinite(headSrc)) return prev;\n\n const oldest = slot.sourceWindow.at(slot.length);\n if (!Number.isFinite(oldest)) return prev;\n\n const change = Math.abs(headSrc - oldest);\n\n let volatility = 0;\n // Per-bar absolute diffs across the trailing `length` pairs:\n // |w[0] − w[1]| + |w[1] − w[2]| + … + |w[length-1] − w[length]|\n // with w[0] substituted by `headSrc` so tick replays work\n // without mutating the closed window.\n {\n const next = headSrc;\n const prior = slot.sourceWindow.at(1);\n if (!Number.isFinite(prior)) return prev;\n volatility += Math.abs(next - prior);\n }\n for (let j = 1; j < slot.length; j += 1) {\n const next = slot.sourceWindow.at(j);\n const prior = slot.sourceWindow.at(j + 1);\n if (!Number.isFinite(next) || !Number.isFinite(prior)) return prev;\n volatility += Math.abs(next - prior);\n }\n\n const er = volatility > 0 ? change / volatility : 0;\n const sc = (er * (slot.fastAlpha - slot.slowAlpha) + slot.slowAlpha) ** 2;\n\n // Seed at the warmup boundary with the source value itself\n // (matches invinite's convention + standard Pine `ta.kama`).\n if (!Number.isFinite(prev)) return headSrc;\n return prev + sc * (headSrc - prev);\n}\n\n/**\n * Kaufman's Adaptive Moving Average — an EMA-like recurrence whose\n * smoothing constant adapts to market efficiency. The \"efficiency\n * ratio\" is the directional change over the last `length` bars\n * divided by the total path-length over the same window; high\n * efficiency (trending) → smoothing approaches `fastAlpha`,\n * low efficiency (chop) → smoothing approaches `slowAlpha`.\n * Defaults: `length = 10`, `fastLength = 2`, `slowLength = 30`.\n *\n * NaN handling: mid-stream NaN source → KAMA carries the prior value\n * forward (matches the EMA / SMMA recurrence convention). Zero-\n * volatility window → `er = 0`, smoothing degenerates to `slowAlpha²`\n * but no change occurs because `src − prev` is itself 0 in the\n * constant-source regime.\n *\n * @formula fastAlpha = 2 / (fastLength + 1) ;\n * slowAlpha = 2 / (slowLength + 1) ;\n * change = |src[t] − src[t − length]| ;\n * vol = Σ_{j=0..length-1} |src[t − j] − src[t − j − 1]| ;\n * er = vol > 0 ? change / vol : 0 ;\n * sc = (er · (fastAlpha − slowAlpha) + slowAlpha)² ;\n * KAMA[t] = KAMA[t − 1] + sc · (src[t] − KAMA[t − 1])\n * @warmup length\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const k = ta.kama(bar.close, { length: 10, fastLength: 2, slowLength: 30 });\n * // plot(k);\n */\nexport function kama(slotId: string, source: ScalarOrSeries, opts?: KamaOpts): Series<number> {\n const ctx = getCtx();\n const length = opts?.length ?? DEFAULT_LENGTH;\n const fastLength = opts?.fastLength ?? DEFAULT_FAST;\n const slowLength = opts?.slowLength ?? DEFAULT_SLOW;\n let slot = ctx.stream.taSlots.get(slotId) as KamaSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(length, fastLength, slowLength, ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const src = readSourceValue(source);\n if (ctx.isTick) {\n // Tick replays the head off the existing closed window with\n // `src` substituted at age 0; `prevClosedKama` is the recurrence\n // anchor (the prior CLOSED bar's KAMA).\n const value = computeKama(slot, src, slot.prevClosedKama);\n slot.prevKama = Number.isFinite(value) ? value : slot.prevClosedKama;\n slot.outBuffer.replaceHead(value);\n } else {\n slot.sourceWindow.append(src);\n const value = computeKama(slot, src, slot.prevClosedKama);\n slot.prevClosedKama = Number.isFinite(value) ? value : slot.prevClosedKama;\n slot.prevKama = slot.prevClosedKama;\n slot.outBuffer.append(value);\n }\n return slot.series;\n}\n"]}
|
package/dist/ta/keltner.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/keltner.ts
|
|
5
5
|
// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
|
|
6
|
-
// Re-licensed MIT for chartlang.
|
|
7
|
-
//
|
|
6
|
+
// Re-licensed MIT for chartlang. The math is the reference, the code
|
|
7
|
+
// style is not.
|
|
8
8
|
// Structural choices (callsite-id slot, Series<T> proxy, replaceHead
|
|
9
9
|
// mode) follow chartlang's primitive shape — NOT invinite's
|
|
10
10
|
// IndicatorPlugin shape. Keltner composes the registered MA primitive
|
package/dist/ta/keltner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keltner.js","sourceRoot":"","sources":["../../src/ta/keltner.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,0EAA0E;AAC1E,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"keltner.js","sourceRoot":"","sources":["../../src/ta/keltner.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/keltner.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape. Keltner composes the registered MA primitive\n// (sma / ema / wma / smma) via sub-slot `${slotId}/<maType>` over\n// `bar.close` for the middle band, and `ta.atr` via sub-slot\n// `${slotId}/atr` for the band offset — so fixes to either flow in\n// for free (mirrors maRibbon / donchian composition convention).\n\nimport type {\n KeltnerOpts,\n KeltnerResult,\n MaTypeNoVolume,\n Series,\n} from \"@invinite-org/chartlang-core\";\n\nimport { Float64RingBuffer } from \"../ringBuffer.js\";\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView } from \"../seriesView.js\";\nimport { atr } from \"./atr.js\";\nimport { ema } from \"./ema.js\";\nimport { sma } from \"./sma.js\";\nimport { smma } from \"./smma.js\";\nimport { wma } from \"./wma.js\";\n\nconst DEFAULT_LENGTH = 20;\nconst DEFAULT_MULTIPLIER = 2;\nconst DEFAULT_MA_TYPE: MaTypeNoVolume = \"ema\";\n\ntype KeltnerSlot = {\n readonly upperBuffer: Float64RingBuffer;\n readonly lowerBuffer: Float64RingBuffer;\n readonly length: number;\n readonly multiplier: number;\n readonly maType: MaTypeNoVolume;\n outputs: KeltnerResult | null;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.keltner called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(\n length: number,\n multiplier: number,\n maType: MaTypeNoVolume,\n capacity: number,\n): KeltnerSlot {\n return {\n upperBuffer: new Float64RingBuffer(capacity),\n lowerBuffer: new Float64RingBuffer(capacity),\n length,\n multiplier,\n maType,\n outputs: null,\n };\n}\n\nfunction dispatchMa(\n maType: MaTypeNoVolume,\n subSlotId: string,\n source: number,\n length: number,\n): Series<number> {\n switch (maType) {\n case \"sma\":\n return sma(subSlotId, source, length);\n case \"ema\":\n return ema(subSlotId, source, length);\n case \"wma\":\n return wma(subSlotId, source, length);\n case \"smma\":\n return smma(subSlotId, source, length);\n }\n}\n\n/**\n * Keltner Channels — overlay volatility envelope. Middle band is an\n * `maType` MA of `bar.close` over `length`; upper / lower bands sit\n * `multiplier · ATR(length)` above / below the middle. Defaults\n * `length = 20`, `multiplier = 2`, `maType = \"ema\"` (Linda Raschke /\n * TradingView canonical form — Chester Keltner's original used a\n * different \"typical range\" formulation; every modern reference\n * defaults to EMA + Wilder ATR). Composes the registered MA primitive\n * via sub-slot `${slotId}/<maType>` and `ta.atr` via sub-slot\n * `${slotId}/atr` — fixes to either flow in for free. Returns a\n * cached `{ upper, middle, lower }` record (same identity every bar).\n * NaN across all outputs while the trailing window is unwarmed.\n *\n * @formula middle = MA(close, length, maType) ;\n * upper = middle + multiplier · atr(length) ;\n * lower = middle − multiplier · atr(length)\n * @warmup length\n * @anchors maType\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const k = ta.keltner({ length: 20, multiplier: 2 });\n * // plot(k.upper);\n * // plot(k.middle);\n * // plot(k.lower);\n */\nexport function keltner(slotId: string, opts?: KeltnerOpts): KeltnerResult {\n const ctx = getCtx();\n const length = opts?.length ?? DEFAULT_LENGTH;\n const multiplier = opts?.multiplier ?? DEFAULT_MULTIPLIER;\n const maType = opts?.maType ?? DEFAULT_MA_TYPE;\n let slot = ctx.stream.taSlots.get(slotId) as KeltnerSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(length, multiplier, maType, ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const close = ctx.stream.bar.close;\n const middleSeries = dispatchMa(slot.maType, `${slotId}/${slot.maType}`, close, slot.length);\n const atrSeries = atr(`${slotId}/atr`, slot.length);\n if (slot.outputs === null) {\n slot.outputs = Object.freeze({\n upper: makeSeriesView<number>(slot.upperBuffer),\n middle: middleSeries,\n lower: makeSeriesView<number>(slot.lowerBuffer),\n });\n }\n const mid = middleSeries.current;\n const atrValue = atrSeries.current;\n let upperValue: number;\n let lowerValue: number;\n if (Number.isFinite(mid) && Number.isFinite(atrValue)) {\n upperValue = mid + slot.multiplier * atrValue;\n lowerValue = mid - slot.multiplier * atrValue;\n } else {\n upperValue = Number.NaN;\n lowerValue = Number.NaN;\n }\n if (ctx.isTick) {\n slot.upperBuffer.replaceHead(upperValue);\n slot.lowerBuffer.replaceHead(lowerValue);\n } else {\n slot.upperBuffer.append(upperValue);\n slot.lowerBuffer.append(lowerValue);\n }\n return slot.outputs;\n}\n"]}
|
package/dist/ta/klinger.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/klinger.ts
|
|
5
5
|
// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
|
|
6
|
-
// Re-licensed MIT for chartlang.
|
|
7
|
-
//
|
|
6
|
+
// Re-licensed MIT for chartlang. The math is the reference, the code
|
|
7
|
+
// style is not.
|
|
8
8
|
// Structural choices (callsite-id slot, Series<T> proxy, replaceHead
|
|
9
9
|
// mode) follow chartlang's primitive shape — NOT invinite's
|
|
10
10
|
// IndicatorPlugin shape. Composition: three `ta.ema` sub-slots
|
package/dist/ta/klinger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"klinger.js","sourceRoot":"","sources":["../../src/ta/klinger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"klinger.js","sourceRoot":"","sources":["../../src/ta/klinger.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/klinger.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape. Composition: three `ta.ema` sub-slots\n// (`${slotId}/fastEma`, `${slotId}/slowEma`, `${slotId}/signalEma`).\n// The Volume Force accumulator (trend / cm / dm) is bespoke\n// per-primitive state — no registry helper expresses VF.\n\nimport type { KlingerOpts, KlingerResult, Series } from \"@invinite-org/chartlang-core\";\n\nimport { Float64RingBuffer } from \"../ringBuffer.js\";\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView } from \"../seriesView.js\";\nimport { ema } from \"./ema.js\";\n\nconst DEFAULT_FAST_LENGTH = 34;\nconst DEFAULT_SLOW_LENGTH = 55;\nconst DEFAULT_SIGNAL_LENGTH = 13;\n\ntype KlingerSlot = {\n result: KlingerResult | null;\n readonly klingerBuf: Float64RingBuffer;\n readonly klingerSeries: Series<number>;\n /** Active per-bar accumulator (closed-side, post most-recent close). */\n prevHlc: number;\n prevTrend: number;\n prevCm: number;\n prevDm: number;\n /** Snapshot BEFORE the most recent close — used by tick replay. */\n prevClosedHlc: number;\n prevClosedTrend: number;\n prevClosedCm: number;\n prevClosedDm: number;\n barCount: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.klinger called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(capacity: number): KlingerSlot {\n const klingerBuf = new Float64RingBuffer(capacity);\n return {\n result: null,\n klingerBuf,\n klingerSeries: makeSeriesView<number>(klingerBuf),\n prevHlc: Number.NaN,\n prevTrend: 0,\n prevCm: 0,\n prevDm: 0,\n prevClosedHlc: Number.NaN,\n prevClosedTrend: 0,\n prevClosedCm: 0,\n prevClosedDm: 0,\n barCount: 0,\n };\n}\n\n/**\n * Volume Force given the bar OHLCV + the prior bar's (hlc, trend, cm,\n * dm) snapshot. Returns the new (vf, trend, cm, dm) tuple.\n *\n * `vf = volume · |2 · (dm / cm − 1)| · trend · 100` when `cm` is\n * finite and non-zero; else `vf = 0`. NaN price inputs hold the prior\n * state forward (vf = 0).\n */\nfunction computeVf(\n high: number,\n low: number,\n close: number,\n volume: number,\n baseHlc: number,\n baseTrend: number,\n baseCm: number,\n baseDm: number,\n): { vf: number; hlc: number; trend: number; cm: number; dm: number } {\n if (!Number.isFinite(high) || !Number.isFinite(low) || !Number.isFinite(close)) {\n return { vf: 0, hlc: baseHlc, trend: baseTrend, cm: baseCm, dm: baseDm };\n }\n const hlc = high + low + close;\n const dm = high - low;\n let trend: number;\n if (!Number.isFinite(baseHlc)) {\n // First bar — no prior HLC. Seed trend = 0 (matches invinite's\n // initialisation: `prevTrend = 0`), emit vf = 0, propagate\n // baseDm = dm (subsequent bar's cm starts from this dm).\n return { vf: 0, hlc, trend: 0, cm: 0, dm };\n }\n if (hlc > baseHlc) trend = 1;\n else if (hlc < baseHlc) trend = -1;\n else trend = baseTrend;\n const cm = trend === baseTrend ? baseCm + dm : baseDm + dm;\n // Defensive: volume / vf-finite guards. Outer call site has already\n // checked high / low / close are finite; volume can still be NaN on\n // some exchanges, but the runtime feeds a finite default elsewhere.\n /* c8 ignore next */\n const volumeFinite = Number.isFinite(volume) ? volume : 0;\n let vf = 0;\n if (cm !== 0 && Number.isFinite(cm)) {\n vf = volumeFinite * Math.abs(2 * (dm / cm - 1)) * trend * 100;\n /* c8 ignore next */\n if (!Number.isFinite(vf)) vf = 0;\n }\n return { vf, hlc, trend, cm, dm };\n}\n\n/**\n * Klinger Volume Oscillator. Per-bar Volume Force accumulator drives\n * the difference of two EMAs (`fastLength` / `slowLength`); the\n * signal line is a third EMA over the Klinger line. Defaults\n * `(34, 55, 13)`. Composes 3 `ta.ema` sub-slots (`${slotId}/fastEma`,\n * `${slotId}/slowEma`, `${slotId}/signalEma`). The user-facing\n * `signal` Series IS the signalEma sub-slot's own Series view.\n *\n * Zero-volume bars emit `vf = 0` (no contribution); this matches\n * invinite's `safeVolume`-style shape and the task spec's \"no VF\n * update\" wording — zero-VF still flows into the EMAs, it just adds\n * zero. The first bar emits `vf = 0` (seed only — no prior HLC to\n * difference against).\n *\n * @formula hlc[t] = high + low + close ;\n * trend = hlc > prevHlc ? +1 : hlc < prevHlc ? −1 : prevTrend ;\n * dm = high − low ; cm = trend === prevTrend ? prevCm + dm : prevDm + dm ;\n * vf = cm ≠ 0 ? volume · |2·(dm/cm − 1)| · trend · 100 : 0 ;\n * klinger = ema(vf, fastLength) − ema(vf, slowLength) ;\n * signal = ema(klinger, signalLength)\n * @warmup slowLength + signalLength − 2\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-runtime\";\n * // const k = ta.klinger(\"slot\");\n * // plot(k.klinger); plot(k.signal);\n */\nexport function klinger(slotId: string, opts?: KlingerOpts): KlingerResult {\n const ctx = getCtx();\n const fastLength = opts?.fastLength ?? DEFAULT_FAST_LENGTH;\n const slowLength = opts?.slowLength ?? DEFAULT_SLOW_LENGTH;\n const signalLength = opts?.signalLength ?? DEFAULT_SIGNAL_LENGTH;\n\n let slot = ctx.stream.taSlots.get(slotId) as KlingerSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n\n const { high, low, close, volume } = ctx.stream.bar;\n\n let vf: number;\n if (ctx.isTick) {\n // Replay the head's VF against the prior-close snapshot.\n const step = computeVf(\n high,\n low,\n close,\n volume,\n slot.prevClosedHlc,\n slot.prevClosedTrend,\n slot.prevClosedCm,\n slot.prevClosedDm,\n );\n vf = step.vf;\n } else {\n // Close-side. Snapshot prior-close BEFORE folding in.\n slot.prevClosedHlc = slot.prevHlc;\n slot.prevClosedTrend = slot.prevTrend;\n slot.prevClosedCm = slot.prevCm;\n slot.prevClosedDm = slot.prevDm;\n const step = computeVf(\n high,\n low,\n close,\n volume,\n slot.prevHlc,\n slot.prevTrend,\n slot.prevCm,\n slot.prevDm,\n );\n vf = step.vf;\n slot.prevHlc = step.hlc;\n slot.prevTrend = step.trend;\n slot.prevCm = step.cm;\n slot.prevDm = step.dm;\n slot.barCount += 1;\n }\n\n const fastSeries = ema(`${slotId}/fastEma`, vf, fastLength);\n const slowSeries = ema(`${slotId}/slowEma`, vf, slowLength);\n const fa = fastSeries.current;\n const sa = slowSeries.current;\n const klingerValue = Number.isFinite(fa) && Number.isFinite(sa) ? fa - sa : Number.NaN;\n\n if (ctx.isTick) slot.klingerBuf.replaceHead(klingerValue);\n else slot.klingerBuf.append(klingerValue);\n\n const signalSeries = ema(`${slotId}/signalEma`, klingerValue, signalLength);\n\n if (slot.result === null) {\n slot.result = Object.freeze({\n klinger: slot.klingerSeries,\n signal: signalSeries,\n });\n }\n return slot.result;\n}\n"]}
|
package/dist/ta/kst.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/kst.ts
|
|
5
5
|
// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
|
|
6
|
-
// Re-licensed MIT for chartlang.
|
|
7
|
-
//
|
|
6
|
+
// Re-licensed MIT for chartlang. The math is the reference, the code
|
|
7
|
+
// style is not.
|
|
8
8
|
// Structural choices (callsite-id slot, Series<T> proxy, replaceHead
|
|
9
9
|
// mode) follow chartlang's primitive shape — NOT invinite's
|
|
10
10
|
// IndicatorPlugin shape. Composition: four `ta.sma` sub-slots (one per
|
package/dist/ta/kst.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kst.js","sourceRoot":"","sources":["../../src/ta/kst.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kst.js","sourceRoot":"","sources":["../../src/ta/kst.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/kst.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape. Composition: four `ta.sma` sub-slots (one per\n// smoothed ROC) + one `ta.sma` sub-slot for the signal line. The four\n// percentage ROCs are computed inline against the parent's source\n// ring (same convention as `coppock.ts` — `ta.change` emits absolute\n// deltas, while KST needs percentage rate-of-change).\n\nimport type { KstOpts, KstResult, Series } from \"@invinite-org/chartlang-core\";\n\nimport { Float64RingBuffer } from \"../ringBuffer.js\";\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView } from \"../seriesView.js\";\nimport { sma } from \"./sma.js\";\nimport { type ScalarOrSeries, readSourceValue } from \"./lib/sourceValue.js\";\n\nconst DEFAULT_ROC1_LENGTH = 10;\nconst DEFAULT_ROC2_LENGTH = 15;\nconst DEFAULT_ROC3_LENGTH = 20;\nconst DEFAULT_ROC4_LENGTH = 30;\nconst DEFAULT_ROC1_SMOOTH = 10;\nconst DEFAULT_ROC2_SMOOTH = 10;\nconst DEFAULT_ROC3_SMOOTH = 10;\nconst DEFAULT_ROC4_SMOOTH = 15;\nconst DEFAULT_SIGNAL_LENGTH = 9;\n\ntype KstSlot = {\n result: KstResult | null;\n readonly kstBuf: Float64RingBuffer;\n readonly kstSeries: Series<number>;\n readonly roc1Length: number;\n readonly roc2Length: number;\n readonly roc3Length: number;\n readonly roc4Length: number;\n /**\n * Last `max(rocN) + 1` closed source values; `at(0)` is the head.\n * Shared by all four percentage-ROC computations.\n */\n readonly sourceWindow: Float64RingBuffer;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.kst called outside an active script step\");\n }\n return ctx;\n}\n\nfunction pctRoc(current: number, lookback: number): number {\n if (!Number.isFinite(lookback) || lookback === 0 || !Number.isFinite(current)) {\n return Number.NaN;\n }\n return (100 * (current - lookback)) / lookback;\n}\n\nfunction rocFromWindow(window: Float64RingBuffer, src: number, length: number): number {\n if (window.length <= length) return Number.NaN;\n return pctRoc(src, window.at(length));\n}\n\n/**\n * Know Sure Thing (Martin Pring, 1992). Weighted sum of four SMA-\n * smoothed percentage rate-of-change series plus an SMA signal line.\n * Defaults `(10, 15, 20, 30, 10, 10, 10, 15, 9)` match Pring's\n * canonical settings. Composes 4 `ta.sma` sub-slots\n * (`${slotId}/r1Sma` .. `${slotId}/r4Sma`) for the smoothing layer\n * plus one `ta.sma` sub-slot (`${slotId}/signalSma`) for the signal\n * line. The percentage-ROC math is inline (mirrors `ta.coppock` —\n * `ta.change` emits absolute deltas, not percentages).\n *\n * The user-facing `signal` Series IS the signalSma sub-slot's own\n * Series view (no extra output buffer on the parent slot). The\n * `kst` Series wraps the parent's own `kstBuf` ring. Result identity\n * is captured on the first call and returned by reference thereafter.\n *\n * @formula rN[t] = sma(pctRoc(source[t], source[t − rocNLength]), rocNSmooth) for N in 1..4 ;\n * kst[t] = r1 + 2·r2 + 3·r3 + 4·r4 ; NaN if any rN NaN ;\n * signal = sma(kst, signalLength)\n * @warmup max_N(rocNLength + rocNSmooth) + signalLength − 2\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-runtime\";\n * // const k = ta.kst(\"slot\", bar.close);\n * // plot(k.kst); plot(k.signal);\n */\nexport function kst(slotId: string, source: ScalarOrSeries, opts?: KstOpts): KstResult {\n const ctx = getCtx();\n const roc1Length = opts?.roc1Length ?? DEFAULT_ROC1_LENGTH;\n const roc2Length = opts?.roc2Length ?? DEFAULT_ROC2_LENGTH;\n const roc3Length = opts?.roc3Length ?? DEFAULT_ROC3_LENGTH;\n const roc4Length = opts?.roc4Length ?? DEFAULT_ROC4_LENGTH;\n const roc1Smooth = opts?.roc1Smooth ?? DEFAULT_ROC1_SMOOTH;\n const roc2Smooth = opts?.roc2Smooth ?? DEFAULT_ROC2_SMOOTH;\n const roc3Smooth = opts?.roc3Smooth ?? DEFAULT_ROC3_SMOOTH;\n const roc4Smooth = opts?.roc4Smooth ?? DEFAULT_ROC4_SMOOTH;\n const signalLength = opts?.signalLength ?? DEFAULT_SIGNAL_LENGTH;\n\n const src = readSourceValue(source);\n\n let slot = ctx.stream.taSlots.get(slotId) as KstSlot | undefined;\n if (slot === undefined) {\n const capacity = ctx.stream.ohlcv.close.capacity;\n const kstBuf = new Float64RingBuffer(capacity);\n const lookbackCap = Math.max(roc1Length, roc2Length, roc3Length, roc4Length) + 1;\n slot = {\n result: null,\n kstBuf,\n kstSeries: makeSeriesView<number>(kstBuf),\n roc1Length,\n roc2Length,\n roc3Length,\n roc4Length,\n sourceWindow: new Float64RingBuffer(lookbackCap),\n };\n ctx.stream.taSlots.set(slotId, slot);\n }\n\n if (ctx.isTick) {\n slot.sourceWindow.replaceHead(src);\n } else {\n slot.sourceWindow.append(src);\n }\n\n const roc1 = rocFromWindow(slot.sourceWindow, src, slot.roc1Length);\n const roc2 = rocFromWindow(slot.sourceWindow, src, slot.roc2Length);\n const roc3 = rocFromWindow(slot.sourceWindow, src, slot.roc3Length);\n const roc4 = rocFromWindow(slot.sourceWindow, src, slot.roc4Length);\n\n const r1Series = sma(`${slotId}/r1Sma`, roc1, roc1Smooth);\n const r2Series = sma(`${slotId}/r2Sma`, roc2, roc2Smooth);\n const r3Series = sma(`${slotId}/r3Sma`, roc3, roc3Smooth);\n const r4Series = sma(`${slotId}/r4Sma`, roc4, roc4Smooth);\n\n const r1 = r1Series.current;\n const r2 = r2Series.current;\n const r3 = r3Series.current;\n const r4 = r4Series.current;\n\n const kstValue =\n Number.isFinite(r1) && Number.isFinite(r2) && Number.isFinite(r3) && Number.isFinite(r4)\n ? r1 + 2 * r2 + 3 * r3 + 4 * r4\n : Number.NaN;\n\n if (ctx.isTick) {\n slot.kstBuf.replaceHead(kstValue);\n } else {\n slot.kstBuf.append(kstValue);\n }\n\n const signalSeries = sma(`${slotId}/signalSma`, kstValue, signalLength);\n\n if (slot.result === null) {\n slot.result = Object.freeze({\n kst: slot.kstSeries,\n signal: signalSeries,\n });\n }\n return slot.result;\n}\n"]}
|
package/dist/ta/lib/adxFromDi.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/lib/adx-from-di.ts
|
|
5
5
|
// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
|
|
6
|
-
// Re-licensed MIT for chartlang.
|
|
7
|
-
//
|
|
6
|
+
// Re-licensed MIT for chartlang. The math is the reference, the code
|
|
7
|
+
// style is not.
|
|
8
8
|
import { wilderStep } from "./wilderSmoothing.js";
|
|
9
9
|
/**
|
|
10
10
|
* Wilder ADX from a pre-computed `+DI` / `-DI` pair. Computes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adxFromDi.js","sourceRoot":"","sources":["../../../src/ta/lib/adxFromDi.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,kFAAkF;AAClF,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"adxFromDi.js","sourceRoot":"","sources":["../../../src/ta/lib/adxFromDi.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,kFAAkF;AAClF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,SAAS,CACrB,MAAoB,EACpB,OAAqB,EACrB,MAAc;IAEd,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC;QACnE,OAAO,GAAG,CAAC;IACf,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,SAAS;QACzD,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC1D,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IACpC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACpC,OAAO,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,mEAAmE;IACnE,qEAAqE;IACrE,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IAEpD,KAAK,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACpC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/lib/adx-from-di.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\nimport { wilderStep } from \"./wilderSmoothing.js\";\n\n/**\n * Wilder ADX from a pre-computed `+DI` / `-DI` pair. Computes\n * `DX = 100 * |+DI - -DI| / (+DI + -DI)` per bar (falls back to `0`\n * when both DIs are zero), then Wilder-smooths `DX` over `length`\n * via the shared `wilderStep`.\n *\n * Warmup: `2 * length - 1`. Slots `[0, length - 1]` carry the DI\n * warmup (callers feed NaN there); slots `[length, 2*length - 2]`\n * accumulate the ADX seed sum; `out[2*length - 1]` is the first\n * defined ADX value (mean of the first `length` DX samples).\n *\n * Mismatched input lengths or `length <= 0` yields an all-NaN\n * buffer. Any non-finite DI in the seed window leaves the output\n * NaN past the warmup — the Wilder recurrence cannot resume past\n * a NaN seed.\n *\n * @formula dx[i] = 100 * |+DI - -DI| / (+DI + -DI) ;\n * seed = mean(dx[length .. 2*length - 1]) ;\n * out[i] = wilderStep(out[i-1], dx[i], length) ;\n * outputs are clamped to [0, 100]\n * @warmup 2 * length - 1\n * @since 0.2\n * @stable\n * @example\n * // import { adxFromDi } from \"./adxFromDi\";\n * // const adx = adxFromDi(plusDi, minusDi, 14);\n */\nexport function adxFromDi(\n plusDi: Float64Array,\n minusDi: Float64Array,\n length: number,\n): Float64Array {\n const n = plusDi.length;\n const out = new Float64Array(n);\n out.fill(Number.NaN);\n if (length <= 0 || n === 0 || minusDi.length !== n || n < 2 * length) {\n return out;\n }\n\n const dx = new Float64Array(n);\n dx.fill(Number.NaN);\n for (let i = 0; i < n; i += 1) {\n const p = plusDi[i];\n const m = minusDi[i];\n if (!Number.isFinite(p) || !Number.isFinite(m)) continue;\n const sum = p + m;\n dx[i] = sum === 0 ? 0 : (100 * Math.abs(p - m)) / sum;\n }\n\n const firstSeedIdx = 2 * length - 1;\n let seedSum = 0;\n for (let i = length; i <= firstSeedIdx; i += 1) {\n const v = dx[i];\n if (!Number.isFinite(v)) return out;\n seedSum += v;\n }\n // dx is bounded by [0, 100] in exact arithmetic, but the seed mean\n // and the Wilder recurrence can overshoot 100 by a few ulps — clamp.\n out[firstSeedIdx] = Math.min(100, seedSum / length);\n\n for (let i = firstSeedIdx + 1; i < n; i += 1) {\n const v = dx[i];\n if (!Number.isFinite(v)) return out;\n out[i] = Math.min(100, wilderStep(out[i - 1], v, length));\n }\n\n return out;\n}\n"]}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/lib/apply-offset.ts
|
|
5
5
|
// (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).
|
|
6
|
-
// Re-licensed MIT for chartlang.
|
|
7
|
-
//
|
|
6
|
+
// Re-licensed MIT for chartlang. The math is the reference, the code
|
|
7
|
+
// style is not.
|
|
8
8
|
/**
|
|
9
9
|
* TradingView-parity bar-shift helper. `offset === 0` returns the
|
|
10
10
|
* same array reference so callers can keep a no-shift call in the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyOffset.js","sourceRoot":"","sources":["../../../src/ta/lib/applyOffset.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,mFAAmF;AACnF,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"applyOffset.js","sourceRoot":"","sources":["../../../src/ta/lib/applyOffset.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,mFAAmF;AACnF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAoB,EAAE,MAAc;IACpE,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACvD,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC;QACvB,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/lib/apply-offset.ts\n// (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\n/**\n * TradingView-parity bar-shift helper. `offset === 0` returns the\n * same array reference so callers can keep a no-shift call in the\n * fast path without an allocation. Positive `offset` shifts forward\n * in time (output[i] = values[i − offset], NaN where out of range);\n * negative shifts backward.\n *\n * Phase 1 always passes `offset = 0` — the helper exists so Phase 4's\n * universal `opts.offset` (§9.1) is a zero-line wire-up.\n *\n * @formula out[i] = values[i − offset] (NaN when i − offset ∉ [0, n))\n * @since 0.1\n * @stable\n * @example\n * // import { applyOffsetToSeries } from \"./applyOffset\";\n * // const shifted = applyOffsetToSeries(values, 2);\n */\nexport function applyOffsetToSeries(values: Float64Array, offset: number): Float64Array {\n if (offset === 0 || values.length === 0) return values;\n const n = values.length;\n const out = new Float64Array(n);\n out.fill(Number.NaN);\n for (let i = 0; i < n; i += 1) {\n const src = i - offset;\n if (src >= 0 && src < n) out[i] = values[src];\n }\n return out;\n}\n"]}
|
package/dist/ta/lib/computeMa.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/lib/compute-ma.ts
|
|
5
5
|
// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
|
|
6
|
-
// Re-licensed MIT for chartlang.
|
|
7
|
-
//
|
|
6
|
+
// Re-licensed MIT for chartlang. The math is the reference, the code
|
|
7
|
+
// style is not.
|
|
8
8
|
import { computeMaOfFloat64 } from "./computeMaOfFloat64.js";
|
|
9
9
|
import { vwmaFloat64 } from "./vwmaFloat64.js";
|
|
10
10
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computeMa.js","sourceRoot":"","sources":["../../../src/ta/lib/computeMa.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,iFAAiF;AACjF,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"computeMa.js","sourceRoot":"","sources":["../../../src/ta/lib/computeMa.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,iFAAiF;AACjF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAS/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,SAAS,CACrB,IAAY,EACZ,MAAoB,EACpB,MAAc,EACd,MAA2B;IAE3B,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAClB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,IAAI,SAAS,CACrB,kDAAkD,CAC1B,CAAC;YAC7B,GAAG,CAAC,IAAI,GAAG,6BAA6B,CAAC;YACzC,MAAM,GAAG,CAAC;QACd,CAAC;QACD,OAAO,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/lib/compute-ma.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\nimport { computeMaOfFloat64 } from \"./computeMaOfFloat64.js\";\nimport type { MaType } from \"./maTypes.js\";\nimport { vwmaFloat64 } from \"./vwmaFloat64.js\";\n\n/**\n * Error thrown by {@link computeMa} when `kind === \"vwma\"` is called\n * with `volume === null`. Carries a stable `code` for programmatic\n * dispatch: `\"ta-lib-vwma-requires-volume\"`.\n */\ntype VwmaRequiresVolumeError = TypeError & { code: \"ta-lib-vwma-requires-volume\" };\n\n/**\n * Volume-aware MA dispatcher over a `Float64Array` input. Routes\n * `\"vwma\"` through {@link vwmaFloat64} (requires a parallel volume\n * array); every other kind routes through {@link computeMaOfFloat64}.\n * Mirrors invinite's `computeMaSeries`, but operates on flat\n * `Float64Array` source + volume instead of `ChartCandle[]` so the\n * helper stays decoupled from the bar-shape.\n *\n * Throws a `TypeError` with `code = \"ta-lib-vwma-requires-volume\"` if\n * `kind === \"vwma\"` and `volume === null` — calling VWMA without a\n * volume stream is a programmer error, not a runtime data condition.\n * For non-VWMA kinds, `volume` is ignored.\n *\n * @formula kind === \"vwma\" → vwmaFloat64(source, volume, length) ;\n * otherwise → computeMaOfFloat64(kind, source, length)\n * @since 0.2\n * @stable\n * @example\n * // import { computeMa } from \"./computeMa\";\n * // const ma = computeMa(\"vwma\", close, volume, 20);\n * // const sma20 = computeMa(\"sma\", close, null, 20);\n */\nexport function computeMa(\n kind: MaType,\n source: Float64Array,\n length: number,\n volume: Float64Array | null,\n): Float64Array {\n if (kind === \"vwma\") {\n if (volume === null) {\n const err = new TypeError(\n \"computeMa: vwma requires a non-null volume array\",\n ) as VwmaRequiresVolumeError;\n err.code = \"ta-lib-vwma-requires-volume\";\n throw err;\n }\n return vwmaFloat64(source, volume, length);\n }\n return computeMaOfFloat64(kind, source, length);\n}\n"]}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/lib/compute-ma-of-float64.ts
|
|
5
5
|
// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
|
|
6
|
-
// Re-licensed MIT for chartlang.
|
|
7
|
-
//
|
|
6
|
+
// Re-licensed MIT for chartlang. The math is the reference, the code
|
|
7
|
+
// style is not.
|
|
8
8
|
import { computeEmaOfFloat64 } from "./emaFloat64.js";
|
|
9
9
|
import { computeSmaOfFloat64 } from "./smaFloat64.js";
|
|
10
10
|
import { smmaFloat64 } from "./smmaFloat64.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computeMaOfFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/computeMaOfFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,4FAA4F;AAC5F,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"computeMaOfFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/computeMaOfFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,4FAA4F;AAC5F,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,kBAAkB,CAC9B,IAAoB,EACpB,MAAoB,EACpB,MAAc;IAEd,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,KAAK;YACN,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,KAAK,KAAK;YACN,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,KAAK,KAAK;YACN,OAAO,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,KAAK,MAAM;YACP,OAAO,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;AACL,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/lib/compute-ma-of-float64.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\nimport { computeEmaOfFloat64 } from \"./emaFloat64.js\";\nimport type { MaTypeNoVolume } from \"./maTypes.js\";\nimport { computeSmaOfFloat64 } from \"./smaFloat64.js\";\nimport { smmaFloat64 } from \"./smmaFloat64.js\";\nimport { wmaFloat64 } from \"./wmaFloat64.js\";\n\n/**\n * Chained-MA dispatcher over a `Float64Array` input. Routes by\n * `MaTypeNoVolume` to the matching per-kind core — never re-implements\n * the math. Consumed by chained MAs (MACD signal-of-MACD, PPO /\n * PVO signal-of-oscillator, RSI smoothing-MA over RSI) and by every\n * primitive that exposes an `maType` opt over a derived Float64 source\n * (BB middle override, Keltner middle, Envelope middle, Chop\n * denominator, Donchian midpoint).\n *\n * `\"vwma\"` is excluded at the type level: VWMA needs a parallel\n * volume array and derived Float64 chain inputs carry no matching\n * volume stream. Volume-aware callers route through {@link computeMa}.\n *\n * @formula kind switch over MaTypeNoVolume → delegates to\n * {sma,ema,wma,smma}Float64(source, length)\n * @since 0.2\n * @stable\n * @example\n * // import { computeMaOfFloat64 } from \"./computeMaOfFloat64\";\n * // const sig = computeMaOfFloat64(\"ema\", macdLine, 9);\n */\nexport function computeMaOfFloat64(\n kind: MaTypeNoVolume,\n source: Float64Array,\n length: number,\n): Float64Array {\n switch (kind) {\n case \"sma\":\n return computeSmaOfFloat64(source, length);\n case \"ema\":\n return computeEmaOfFloat64(source, length);\n case \"wma\":\n return wmaFloat64(source, length);\n case \"smma\":\n return smmaFloat64(source, length);\n }\n}\n"]}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/lib/directionalState.ts
|
|
5
5
|
// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
|
|
6
|
-
// Re-licensed MIT for chartlang.
|
|
7
|
-
//
|
|
6
|
+
// Re-licensed MIT for chartlang. The math is the reference, the code
|
|
7
|
+
// style is not.
|
|
8
8
|
import { wilderStep } from "./wilderSmoothing.js";
|
|
9
9
|
/**
|
|
10
10
|
* Allocate a fresh directional-state record. Shared by `ta.dmi` and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directionalState.js","sourceRoot":"","sources":["../../../src/ta/lib/directionalState.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,uFAAuF;AACvF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAEzE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAyClD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IAC/C,OAAO;QACH,MAAM;QACN,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC,GAAG;QACpB,OAAO,EAAE,MAAM,CAAC,GAAG;QACnB,SAAS,EAAE,MAAM,CAAC,GAAG;QACrB,YAAY,EAAE,MAAM,CAAC,GAAG;QACxB,WAAW,EAAE,MAAM,CAAC,GAAG;QACvB,aAAa,EAAE,MAAM,CAAC,GAAG;QACzB,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,CAAC;QACd,MAAM,EAAE,CAAC;QACT,cAAc,EAAE,MAAM,CAAC,GAAG;QAC1B,eAAe,EAAE,MAAM,CAAC,GAAG;QAC3B,UAAU,EAAE,MAAM,CAAC,GAAG;QACtB,wBAAwB,EAAE,MAAM,CAAC,GAAG;QACpC,yBAAyB,EAAE,MAAM,CAAC,GAAG;QACrC,oBAAoB,EAAE,MAAM,CAAC,GAAG;QAChC,MAAM,EAAE,MAAM,CAAC,GAAG;QAClB,OAAO,EAAE,MAAM,CAAC,GAAG;KACtB,CAAC;AACN,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,GAAW,EAAE,SAAiB;IAC3D,kEAAkE;IAClE,mEAAmE;IACnE,kEAAkE;IAClE,gEAAgE;IAChE,oBAAoB;IACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,GAAG,GAAG,CAAC;IACnD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,sBAAsB,CAC3B,IAAY,EACZ,GAAW,EACX,QAAgB,EAChB,OAAe;IAEf,MAAM,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC;IAC/B,MAAM,QAAQ,GAAG,OAAO,GAAG,GAAG,CAAC;IAC/B,MAAM,GAAG,GAAG,MAAM,GAAG,QAAQ,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,QAAQ,GAAG,MAAM,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,uBAAuB,CACnC,QAA0B,EAC1B,IAAY,EACZ,GAAW,EACX,KAAa;IAEb,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7E,gEAAgE;QAChE,iEAAiE;QACjE,8DAA8D;QAC9D,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;IAClE,CAAC;IAED,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC;IAEvB,IAAI,QAAQ,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,4DAA4D;QAC5D,8DAA8D;QAC9D,mDAAmD;QACnD,+CAA+C;QAC/C,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAC1C,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC;QACxC,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC5C,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;QACzB,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC;QACvB,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,QAAQ,CAAC,MAAM,IAAI,IAAI,GAAG,GAAG,CAAC;QAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE5F,mEAAmE;IACnE,gCAAgC;IAChC,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAC1C,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC;IACxC,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC5C,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC;IACvB,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;IAE3B,IAAI,QAAQ,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC;QAC9B,4DAA4D;QAC5D,6DAA6D;QAC7D,uCAAuC;QACvC,QAAQ,CAAC,UAAU,IAAI,GAAG,CAAC;QAC3B,QAAQ,CAAC,WAAW,IAAI,GAAG,CAAC;QAC5B,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;IACvD,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,KAAK,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,8DAA8D;QAC9D,sDAAsD;QACtD,6DAA6D;QAC7D,8DAA8D;QAC9D,+BAA+B;QAC/B,QAAQ,CAAC,wBAAwB,GAAG,QAAQ,CAAC,UAAU,CAAC;QACxD,QAAQ,CAAC,yBAAyB,GAAG,QAAQ,CAAC,WAAW,CAAC;QAC1D,QAAQ,CAAC,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC;QAChD,QAAQ,CAAC,UAAU,IAAI,GAAG,CAAC;QAC3B,QAAQ,CAAC,WAAW,IAAI,GAAG,CAAC;QAC5B,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;QACtB,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC;QAC9C,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC;QAChD,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;QACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC;QAChC,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC;QACrE,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC;QACvE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;QAC3B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED,2CAA2C;IAC3C,QAAQ,CAAC,wBAAwB,GAAG,QAAQ,CAAC,cAAc,CAAC;IAC5D,QAAQ,CAAC,yBAAyB,GAAG,QAAQ,CAAC,eAAe,CAAC;IAC9D,QAAQ,CAAC,oBAAoB,GAAG,QAAQ,CAAC,UAAU,CAAC;IACpD,QAAQ,CAAC,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3E,QAAQ,CAAC,eAAe,GAAG,UAAU,CAAC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7E,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC;IAChC,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC;IACrE,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC;IACvE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAC3B,QAA0B,EAC1B,IAAY,EACZ,GAAW,EACX,KAAa;IAEb,IAAI,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7E,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;IAClE,CAAC;IACD,mEAAmE;IACnE,kEAAkE;IAClE,+DAA+D;IAC/D,mEAAmE;IACnE,4DAA4D;IAC5D,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,sBAAsB,CACvC,IAAI,EACJ,GAAG,EACH,QAAQ,CAAC,YAAY,EACrB,QAAQ,CAAC,WAAW,CACvB,CAAC;IAEF,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,2CAA2C;QAC3C,2DAA2D;QAC3D,qDAAqD;QACrD,4BAA4B;QAC5B,MAAM,UAAU,GAAG,QAAQ,CAAC,wBAAwB,GAAG,GAAG,CAAC;QAC3D,MAAM,WAAW,GAAG,QAAQ,CAAC,yBAAyB,GAAG,GAAG,CAAC;QAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAClD,+DAA+D;QAC/D,oEAAoE;QACpE,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,MAAM,CAAC;QACnF,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,MAAM,CAAC;QACrF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC/B,CAAC;IACD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvF,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,oBAAoB,EAAE,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC7E,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;IAC/E,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC"}
|
|
1
|
+
{"version":3,"file":"directionalState.js","sourceRoot":"","sources":["../../../src/ta/lib/directionalState.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/lib/directionalState.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\nimport { wilderStep } from \"./wilderSmoothing.js\";\n\n/**\n * Incremental Wilder-directional state shared by `ta.dmi` and\n * `ta.adx`. Tracks the seed-window accumulators + the smoothed\n * running values, plus the \"previous-previous\" snapshots the tick\n * replay needs to recompute the head against the prior closed bar.\n *\n * @formula N/A — record type for {@link initDirectionalState}\n * @since 0.2\n * @stable\n * @example\n * // const s: DirectionalState = initDirectionalState(14);\n */\nexport type DirectionalState = {\n readonly length: number;\n /** Number of CLOSED bars seen so far (counts every close-side step). */\n barCount: number;\n prevHigh: number;\n prevLow: number;\n prevClose: number;\n /** `prevHigh` / `prevLow` / `prevClose` as of the bar before the\n * current bar — frozen by the prior close-side advance so tick\n * replay can recompute against the previous closed state. */\n prevPrevHigh: number;\n prevPrevLow: number;\n prevPrevClose: number;\n seedPlusDm: number;\n seedMinusDm: number;\n seedTr: number;\n smoothedPlusDm: number;\n smoothedMinusDm: number;\n smoothedTr: number;\n /** Smoothed state captured at the prior close — used by tick replay. */\n prevClosedSmoothedPlusDm: number;\n prevClosedSmoothedMinusDm: number;\n prevClosedSmoothedTr: number;\n plusDi: number;\n minusDi: number;\n};\n\n/**\n * Allocate a fresh directional-state record. Shared by `ta.dmi` and\n * `ta.adx`. Exported so the ADX primitive can fold onto the same\n * recurrence without duplicating the field set.\n *\n * @formula N/A — state constructor (zero / NaN initializers)\n * @since 0.2\n * @stable\n * @example\n * // const s = initDirectionalState(14);\n */\nexport function initDirectionalState(length: number): DirectionalState {\n return {\n length,\n barCount: 0,\n prevHigh: Number.NaN,\n prevLow: Number.NaN,\n prevClose: Number.NaN,\n prevPrevHigh: Number.NaN,\n prevPrevLow: Number.NaN,\n prevPrevClose: Number.NaN,\n seedPlusDm: 0,\n seedMinusDm: 0,\n seedTr: 0,\n smoothedPlusDm: Number.NaN,\n smoothedMinusDm: Number.NaN,\n smoothedTr: Number.NaN,\n prevClosedSmoothedPlusDm: Number.NaN,\n prevClosedSmoothedMinusDm: Number.NaN,\n prevClosedSmoothedTr: Number.NaN,\n plusDi: Number.NaN,\n minusDi: Number.NaN,\n };\n}\n\nfunction trueRange(high: number, low: number, prevClose: number): number {\n // Defensive: `trueRange` is only called from bar 1 onwards (bar 0\n // accumulates `high - low` inline via `seedTr += high - low`), and\n // by then `prevClose` has been set to a finite value by the prior\n // close-side advance. NaN-prevClose fallback kept for symmetry.\n /* c8 ignore next */\n if (!Number.isFinite(prevClose)) return high - low;\n return Math.max(high - low, Math.abs(high - prevClose), Math.abs(low - prevClose));\n}\n\nfunction rawDirectionalMovement(\n high: number,\n low: number,\n prevHigh: number,\n prevLow: number,\n): { pDm: number; mDm: number } {\n const upMove = high - prevHigh;\n const downMove = prevLow - low;\n const pDm = upMove > downMove && upMove > 0 ? upMove : 0;\n const mDm = downMove > upMove && downMove > 0 ? downMove : 0;\n return { pDm, mDm };\n}\n\n/**\n * Fold the new closed bar into the directional state. Mutates\n * `dirState` in place and returns the freshly computed `+DI` /\n * `-DI` pair (NaN until the seed window completes). Shared by\n * `ta.dmi` and `ta.adx`. The returned pair is also written back\n * to `dirState.plusDi` / `dirState.minusDi` for the consumer's\n * downstream DX computation.\n *\n * @formula See {@link wilderDirectional} (lib/) for the per-step\n * +DM / -DM / TR formulas; this routine inlines the same\n * recurrence in a single-pass mutable form.\n * @warmup length + 1 (first defined DI at barCount === length + 1)\n * @since 0.2\n * @stable\n * @example\n * // const { plusDi, minusDi } = advanceDirectionalClose(s, h, l, c);\n */\nexport function advanceDirectionalClose(\n dirState: DirectionalState,\n high: number,\n low: number,\n close: number,\n): { plusDi: number; minusDi: number } {\n const { length } = dirState;\n\n if (!Number.isFinite(high) || !Number.isFinite(low) || !Number.isFinite(close)) {\n // Hold prior values forward, do not advance the seed / smoothed\n // state. Matches `atr.ts`'s NaN-input semantics — the recurrence\n // cannot resume past a NaN, so we keep the last known values.\n return { plusDi: dirState.plusDi, minusDi: dirState.minusDi };\n }\n\n dirState.barCount += 1;\n\n if (dirState.barCount === 1) {\n // First bar: seed prev-* snapshots and accumulate the bar-0\n // range as the initial TR contribution. Matches the reference\n // `lib/wilderDirectional` whose `seedTr` starts at\n // `high[0] - low[0]`. No DM yet (no prevHigh).\n dirState.prevPrevHigh = dirState.prevHigh;\n dirState.prevPrevLow = dirState.prevLow;\n dirState.prevPrevClose = dirState.prevClose;\n dirState.prevHigh = high;\n dirState.prevLow = low;\n dirState.prevClose = close;\n dirState.seedTr += high - low;\n return { plusDi: Number.NaN, minusDi: Number.NaN };\n }\n\n const tr = trueRange(high, low, dirState.prevClose);\n const { pDm, mDm } = rawDirectionalMovement(high, low, dirState.prevHigh, dirState.prevLow);\n\n // Capture prev-prev BEFORE overwriting prev (tick replay needs the\n // bar-before-current snapshot).\n dirState.prevPrevHigh = dirState.prevHigh;\n dirState.prevPrevLow = dirState.prevLow;\n dirState.prevPrevClose = dirState.prevClose;\n dirState.prevHigh = high;\n dirState.prevLow = low;\n dirState.prevClose = close;\n\n if (dirState.barCount <= length) {\n // Seed window: barCount in [2, length] inclusive accumulate\n // pDm + mDm + tr; barCount === length + 1 completes the seed\n // and emits the first defined DI pair.\n dirState.seedPlusDm += pDm;\n dirState.seedMinusDm += mDm;\n dirState.seedTr += tr;\n return { plusDi: Number.NaN, minusDi: Number.NaN };\n }\n\n if (dirState.barCount === length + 1) {\n // Seed completes at the (length + 1)-th close — first defined\n // slot is bar index `length` (zero-based; matches the\n // full-recompute reference). Capture the pre-completion seed\n // sums on `prevClosedSmoothed*` so tick replay can substitute\n // the head bar's contribution.\n dirState.prevClosedSmoothedPlusDm = dirState.seedPlusDm;\n dirState.prevClosedSmoothedMinusDm = dirState.seedMinusDm;\n dirState.prevClosedSmoothedTr = dirState.seedTr;\n dirState.seedPlusDm += pDm;\n dirState.seedMinusDm += mDm;\n dirState.seedTr += tr;\n dirState.smoothedPlusDm = dirState.seedPlusDm;\n dirState.smoothedMinusDm = dirState.seedMinusDm;\n dirState.smoothedTr = dirState.seedTr;\n const tr0 = dirState.smoothedTr;\n const plusDi = tr0 === 0 ? 0 : (100 * dirState.smoothedPlusDm) / tr0;\n const minusDi = tr0 === 0 ? 0 : (100 * dirState.smoothedMinusDm) / tr0;\n dirState.plusDi = plusDi;\n dirState.minusDi = minusDi;\n return { plusDi, minusDi };\n }\n\n // Post-seed: Wilder-smooth +DM / -DM / TR.\n dirState.prevClosedSmoothedPlusDm = dirState.smoothedPlusDm;\n dirState.prevClosedSmoothedMinusDm = dirState.smoothedMinusDm;\n dirState.prevClosedSmoothedTr = dirState.smoothedTr;\n dirState.smoothedPlusDm = wilderStep(dirState.smoothedPlusDm, pDm, length);\n dirState.smoothedMinusDm = wilderStep(dirState.smoothedMinusDm, mDm, length);\n dirState.smoothedTr = wilderStep(dirState.smoothedTr, tr, length);\n const tr1 = dirState.smoothedTr;\n const plusDi = tr1 === 0 ? 0 : (100 * dirState.smoothedPlusDm) / tr1;\n const minusDi = tr1 === 0 ? 0 : (100 * dirState.smoothedMinusDm) / tr1;\n dirState.plusDi = plusDi;\n dirState.minusDi = minusDi;\n return { plusDi, minusDi };\n}\n\n/**\n * Replay the latest TR / DM / DI against the FROZEN prior-closed\n * smoothed state. Does NOT mutate `dirState` (the consumer's\n * close-side advance owns mutation). Returns the head DI pair the\n * primitive should write to its output buffer.\n *\n * @formula Same recurrence as {@link advanceDirectionalClose}, but\n * applied against `prevClosedSmoothed*` snapshots so the\n * current bar can be replaced rather than appended.\n * @since 0.2\n * @stable\n * @example\n * // const di = tickDirectional(s, h, l, c);\n */\nexport function tickDirectional(\n dirState: DirectionalState,\n high: number,\n low: number,\n close: number,\n): { plusDi: number; minusDi: number } {\n if (dirState.barCount < dirState.length + 1) {\n return { plusDi: Number.NaN, minusDi: Number.NaN };\n }\n if (!Number.isFinite(high) || !Number.isFinite(low) || !Number.isFinite(close)) {\n return { plusDi: dirState.plusDi, minusDi: dirState.minusDi };\n }\n // Tick replay reads against the bar-before-current (prevPrevHigh /\n // prevPrevLow / prevPrevClose) — the values captured at the prior\n // close. The current closed bar's contribution to the smoothed\n // state has already been folded; we reverse-undo it by reading off\n // `prevClosedSmoothed*` and applying one fresh Wilder step.\n const tr = trueRange(high, low, dirState.prevPrevClose);\n const { pDm, mDm } = rawDirectionalMovement(\n high,\n low,\n dirState.prevPrevHigh,\n dirState.prevPrevLow,\n );\n\n if (dirState.barCount === dirState.length + 1) {\n // We just seeded on the current close; the\n // `prevClosedSmoothed*` snapshots are the seed sums BEFORE\n // this close's contribution. Re-seed with the tick's\n // contribution substituted.\n const seedPlusDm = dirState.prevClosedSmoothedPlusDm + pDm;\n const seedMinusDm = dirState.prevClosedSmoothedMinusDm + mDm;\n const seedTr = dirState.prevClosedSmoothedTr + tr;\n // Defensive: seedTr === 0 only on a perfectly-flat seed window\n // (every bar high === low === prev close). Real data never hits it.\n const plusDi = /* c8 ignore next */ seedTr === 0 ? 0 : (100 * seedPlusDm) / seedTr;\n const minusDi = /* c8 ignore next */ seedTr === 0 ? 0 : (100 * seedMinusDm) / seedTr;\n return { plusDi, minusDi };\n }\n const plusDmSm = wilderStep(dirState.prevClosedSmoothedPlusDm, pDm, dirState.length);\n const minusDmSm = wilderStep(dirState.prevClosedSmoothedMinusDm, mDm, dirState.length);\n const trSm = wilderStep(dirState.prevClosedSmoothedTr, tr, dirState.length);\n const plusDi = /* c8 ignore next */ trSm === 0 ? 0 : (100 * plusDmSm) / trSm;\n const minusDi = /* c8 ignore next */ trSm === 0 ? 0 : (100 * minusDmSm) / trSm;\n return { plusDi, minusDi };\n}\n"]}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/lib/donchian-mid.ts
|
|
5
5
|
// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
|
|
6
|
-
// Re-licensed MIT for chartlang.
|
|
7
|
-
//
|
|
6
|
+
// Re-licensed MIT for chartlang. The math is the reference, the code
|
|
7
|
+
// style is not.
|
|
8
8
|
/**
|
|
9
9
|
* Donchian midpoint over a trailing `length`-bar window of `high` /
|
|
10
10
|
* `low` Float64Arrays: `(max(high) + min(low)) / 2`. Warmup slots
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"donchianMid.js","sourceRoot":"","sources":["../../../src/ta/lib/donchianMid.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,mFAAmF;AACnF,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"donchianMid.js","sourceRoot":"","sources":["../../../src/ta/lib/donchianMid.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,mFAAmF;AACnF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,WAAW,CAAC,IAAkB,EAAE,GAAiB,EAAE,MAAc;IAC7E,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEzE,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvE,IAAI,YAAY,EAAE,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7C,YAAY,GAAG,KAAK,CAAC;oBACrB,MAAM;gBACV,CAAC;gBACD,IAAI,CAAC,GAAG,OAAO;oBAAE,OAAO,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC,GAAG,MAAM;oBAAE,MAAM,GAAG,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC;QACD,IAAI,YAAY;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/lib/donchian-mid.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\n/**\n * Donchian midpoint over a trailing `length`-bar window of `high` /\n * `low` Float64Arrays: `(max(high) + min(low)) / 2`. Warmup slots\n * `[0, length - 2]` are `NaN`; a NaN inside the window propagates\n * `NaN` at that slot only. Mismatched input lengths return an\n * all-NaN buffer. Consumed by `ta.donchian` (channel midpoint) and\n * `ta.ichimoku` (Tenkan / Kijun / Senkou B raw).\n *\n * O(length) per slot — the per-bar scan is fine for the consumer\n * primitives, which keep their own incremental state.\n *\n * @formula mid[i] = (max(high[i - length + 1 ..= i]) + min(low[i - length + 1 ..= i])) / 2\n * @warmup length - 1\n * @since 0.2\n * @stable\n * @example\n * // import { donchianMid } from \"./donchianMid\";\n * // const mid = donchianMid(highs, lows, 20);\n */\nexport function donchianMid(high: Float64Array, low: Float64Array, length: number): Float64Array {\n const n = high.length;\n const out = new Float64Array(n);\n out.fill(Number.NaN);\n if (length <= 0 || n === 0 || n < length || low.length !== n) return out;\n\n for (let i = length - 1; i < n; i += 1) {\n let highest = high[i];\n let lowest = low[i];\n let windowFinite = Number.isFinite(highest) && Number.isFinite(lowest);\n if (windowFinite) {\n for (let j = i - length + 1; j < i; j += 1) {\n const h = high[j];\n const l = low[j];\n if (!Number.isFinite(h) || !Number.isFinite(l)) {\n windowFinite = false;\n break;\n }\n if (h > highest) highest = h;\n if (l < lowest) lowest = l;\n }\n }\n if (windowFinite) out[i] = (highest + lowest) / 2;\n }\n return out;\n}\n"]}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/lib/ema-of-float64.ts
|
|
5
5
|
// (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).
|
|
6
|
-
// Re-licensed MIT for chartlang.
|
|
7
|
-
//
|
|
6
|
+
// Re-licensed MIT for chartlang. The math is the reference, the code
|
|
7
|
+
// style is not.
|
|
8
8
|
/**
|
|
9
9
|
* EMA over a `Float64Array` input. Walks past any leading-NaN prefix,
|
|
10
10
|
* seeds with the simple mean of the next `length` finite values, then
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emaFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/emaFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,qFAAqF;AACrF,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"emaFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/emaFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,qFAAqF;AACrF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAmB,EAAE,MAAc;IACnE,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEvC,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACV,CAAC;IACL,CAAC;IACD,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC;IAEhE,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,aAAa,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,GAAG,MAAM,GAAG,CAAC,CAAC;IAC3C,GAAG,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC;IAEhC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpB,SAAS;QACb,CAAC;QACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/lib/ema-of-float64.ts\n// (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\n/**\n * EMA over a `Float64Array` input. Walks past any leading-NaN prefix,\n * seeds with the simple mean of the next `length` finite values, then\n * runs the recurrence `out[i] = src[i] * k + out[i − 1] * (1 − k)`\n * with `k = 2 / (length + 1)`. A mid-stream NaN holds the previous\n * value forward — keeps the output continuous past gaps. The\n * incremental `ta.ema` primitive and the property tests share this\n * helper as their reference.\n *\n * Warmup `[0, length − 2]` is `NaN`; `out[length − 1]` is the first\n * defined value.\n *\n * @formula k = 2 / (length + 1) ;\n * out[i] = input[i] * k + out[i − 1] * (1 − k)\n * @since 0.1\n * @stable\n * @example\n * // import { computeEmaOfFloat64 } from \"./emaFloat64\";\n * // const out = computeEmaOfFloat64(new Float64Array([1, 2, 3, 4]), 2);\n */\nexport function computeEmaOfFloat64(input: Float64Array, length: number): Float64Array {\n const n = input.length;\n const out = new Float64Array(n);\n out.fill(Number.NaN);\n if (length <= 0 || n === 0) return out;\n\n let firstValidIdx = -1;\n for (let i = 0; i < n; i += 1) {\n if (Number.isFinite(input[i])) {\n firstValidIdx = i;\n break;\n }\n }\n if (firstValidIdx < 0 || n - firstValidIdx < length) return out;\n\n let seedSum = 0;\n for (let i = firstValidIdx; i < firstValidIdx + length; i += 1) {\n seedSum += input[i];\n }\n const seedIdx = firstValidIdx + length - 1;\n out[seedIdx] = seedSum / length;\n\n const k = 2 / (length + 1);\n for (let i = seedIdx + 1; i < n; i += 1) {\n const v = input[i];\n if (!Number.isFinite(v)) {\n out[i] = out[i - 1];\n continue;\n }\n out[i] = v * k + out[i - 1] * (1 - k);\n }\n return out;\n}\n"]}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/lib/linear-regression.ts
|
|
5
5
|
// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
|
|
6
|
-
// Re-licensed MIT for chartlang.
|
|
7
|
-
//
|
|
6
|
+
// Re-licensed MIT for chartlang. The math is the reference, the code
|
|
7
|
+
// style is not.
|
|
8
8
|
/**
|
|
9
9
|
* Rolling ordinary-least-squares fit of `y = a + b·x` over each
|
|
10
10
|
* trailing `length`-bar window, with `x = 0 .. length - 1` (bar
|