@invinite-org/chartlang-runtime 1.1.0 → 1.2.0
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 +245 -0
- package/README.md +1 -2
- package/dist/barPoint.d.ts +20 -0
- package/dist/barPoint.d.ts.map +1 -0
- package/dist/barPoint.js +72 -0
- package/dist/barPoint.js.map +1 -0
- package/dist/bufferSnapshot.d.ts +102 -0
- package/dist/bufferSnapshot.d.ts.map +1 -0
- package/dist/bufferSnapshot.js +119 -0
- package/dist/bufferSnapshot.js.map +1 -0
- package/dist/buildComputeContext.js.map +1 -1
- package/dist/createScriptRunner.d.ts +6 -3
- package/dist/createScriptRunner.d.ts.map +1 -1
- package/dist/createScriptRunner.js +29 -5
- package/dist/createScriptRunner.js.map +1 -1
- package/dist/dep/DepOutputStore.js.map +1 -1
- package/dist/dep/DepRunner.d.ts.map +1 -1
- package/dist/dep/DepRunner.js +1 -0
- package/dist/dep/DepRunner.js.map +1 -1
- package/dist/dep/depOutput.js.map +1 -1
- package/dist/dep/emissionFilter.js.map +1 -1
- package/dist/dep/index.js.map +1 -1
- package/dist/emit/alert.js.map +1 -1
- package/dist/emit/alertConditionEmission.js.map +1 -1
- package/dist/emit/applyPlotOverride.js.map +1 -1
- 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/fillBetween.d.ts +45 -0
- package/dist/emit/draw/boxes/fillBetween.d.ts.map +1 -0
- package/dist/emit/draw/boxes/fillBetween.js +36 -0
- package/dist/emit/draw/boxes/fillBetween.js.map +1 -0
- 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 +11 -2
- package/dist/emit/draw/handle.d.ts.map +1 -1
- package/dist/emit/draw/handle.js +67 -12
- 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 +5 -4
- package/dist/emit/draw/namespace.d.ts.map +1 -1
- package/dist/emit/draw/namespace.js +7 -4
- 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.js.map +1 -1
- package/dist/emit/index.js.map +1 -1
- package/dist/emit/logEmission.js.map +1 -1
- package/dist/emit/paneResolver.js.map +1 -1
- package/dist/emit/plot.d.ts +7 -0
- package/dist/emit/plot.d.ts.map +1 -1
- package/dist/emit/plot.js +13 -0
- 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 +16 -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.js.map +1 -1
- package/dist/execution/onBarTick.js.map +1 -1
- package/dist/execution/onHistory.js.map +1 -1
- package/dist/execution/runComputeStep.d.ts.map +1 -1
- package/dist/execution/runComputeStep.js +10 -1
- package/dist/execution/runComputeStep.js.map +1 -1
- package/dist/execution/secondaryStream.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -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.js.map +1 -1
- package/dist/persistentStateStore.js.map +1 -1
- package/dist/persistentStateStore.runtime.d.ts.map +1 -1
- package/dist/persistentStateStore.runtime.js +21 -7
- package/dist/persistentStateStore.runtime.js.map +1 -1
- 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.d.ts +2 -1
- package/dist/request/index.d.ts.map +1 -1
- package/dist/request/index.js +2 -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.d.ts.map +1 -1
- package/dist/request/requestNamespace.js +16 -3
- package/dist/request/requestNamespace.js.map +1 -1
- package/dist/request/security.d.ts +20 -1
- package/dist/request/security.d.ts.map +1 -1
- package/dist/request/security.js +62 -23
- package/dist/request/security.js.map +1 -1
- package/dist/request/securityExprRunner.d.ts +133 -0
- package/dist/request/securityExprRunner.d.ts.map +1 -0
- package/dist/request/securityExprRunner.js +235 -0
- package/dist/request/securityExprRunner.js.map +1 -0
- package/dist/request/streamBars.d.ts +14 -1
- package/dist/request/streamBars.d.ts.map +1 -1
- package/dist/request/streamBars.js +39 -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 +51 -3
- package/dist/runtimeContext.d.ts.map +1 -1
- package/dist/runtimeContext.js.map +1 -1
- package/dist/seriesView.d.ts +43 -18
- package/dist/seriesView.d.ts.map +1 -1
- package/dist/seriesView.js +66 -43
- package/dist/seriesView.js.map +1 -1
- package/dist/state/index.d.ts +2 -1
- package/dist/state/index.d.ts.map +1 -1
- package/dist/state/index.js +2 -1
- package/dist/state/index.js.map +1 -1
- package/dist/state/lifecycle.d.ts +40 -0
- package/dist/state/lifecycle.d.ts.map +1 -1
- package/dist/state/lifecycle.js +53 -0
- package/dist/state/lifecycle.js.map +1 -1
- package/dist/state/seriesPersistence.d.ts +48 -0
- package/dist/state/seriesPersistence.d.ts.map +1 -0
- package/dist/state/seriesPersistence.js +87 -0
- package/dist/state/seriesPersistence.js.map +1 -0
- package/dist/state/seriesSlot.d.ts +105 -0
- package/dist/state/seriesSlot.d.ts.map +1 -0
- package/dist/state/seriesSlot.js +123 -0
- package/dist/state/seriesSlot.js.map +1 -0
- package/dist/state/stateNamespace.d.ts.map +1 -1
- package/dist/state/stateNamespace.js +28 -0
- package/dist/state/stateNamespace.js.map +1 -1
- package/dist/state/stateSlot.js.map +1 -1
- package/dist/stateStore.d.ts +2 -2
- package/dist/stateStore.js.map +1 -1
- package/dist/streamState.d.ts +26 -20
- package/dist/streamState.d.ts.map +1 -1
- package/dist/streamState.js +41 -67
- 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 +3 -2
- package/dist/ta/adx.d.ts.map +1 -1
- package/dist/ta/adx.js +5 -4
- package/dist/ta/adx.js.map +1 -1
- package/dist/ta/alma.d.ts +6 -4
- package/dist/ta/alma.d.ts.map +1 -1
- package/dist/ta/alma.js +21 -8
- 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 +3 -2
- package/dist/ta/atr.d.ts.map +1 -1
- package/dist/ta/atr.js +5 -4
- 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 +3 -2
- package/dist/ta/bb.d.ts.map +1 -1
- package/dist/ta/bb.js +5 -4
- 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 +3 -2
- package/dist/ta/chaikinOsc.d.ts.map +1 -1
- package/dist/ta/chaikinOsc.js +5 -4
- 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 +3 -2
- package/dist/ta/crossover.d.ts.map +1 -1
- package/dist/ta/crossover.js +4 -3
- package/dist/ta/crossover.js.map +1 -1
- package/dist/ta/crossunder.d.ts +3 -2
- package/dist/ta/crossunder.d.ts.map +1 -1
- package/dist/ta/crossunder.js +4 -3
- 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 +4 -3
- package/dist/ta/dmi.d.ts.map +1 -1
- package/dist/ta/dmi.js +6 -5
- 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 +3 -2
- package/dist/ta/ema.d.ts.map +1 -1
- package/dist/ta/ema.js +5 -4
- 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 +3 -1
- package/dist/ta/eom.d.ts.map +1 -1
- package/dist/ta/eom.js +5 -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/highestbars.d.ts +25 -0
- package/dist/ta/highestbars.d.ts.map +1 -0
- package/dist/ta/highestbars.js +106 -0
- package/dist/ta/highestbars.js.map +1 -0
- package/dist/ta/historicalVolatility.d.ts +3 -2
- package/dist/ta/historicalVolatility.d.ts.map +1 -1
- package/dist/ta/historicalVolatility.js +5 -4
- 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 +3 -1
- package/dist/ta/ichimoku.d.ts.map +1 -1
- package/dist/ta/ichimoku.js +5 -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/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/lowestbars.d.ts +25 -0
- package/dist/ta/lowestbars.d.ts.map +1 -0
- package/dist/ta/lowestbars.js +102 -0
- package/dist/ta/lowestbars.js.map +1 -0
- 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 +3 -2
- package/dist/ta/macd.d.ts.map +1 -1
- package/dist/ta/macd.js +6 -5
- package/dist/ta/macd.js.map +1 -1
- package/dist/ta/massIndex.d.ts +3 -2
- package/dist/ta/massIndex.d.ts.map +1 -1
- package/dist/ta/massIndex.js +5 -4
- 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 +3 -1
- package/dist/ta/mfi.d.ts.map +1 -1
- package/dist/ta/mfi.js +5 -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 +3 -1
- package/dist/ta/netVolume.d.ts.map +1 -1
- package/dist/ta/netVolume.js +5 -3
- package/dist/ta/netVolume.js.map +1 -1
- package/dist/ta/nvi.d.ts +3 -1
- package/dist/ta/nvi.d.ts.map +1 -1
- package/dist/ta/nvi.js +5 -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.d.ts.map +1 -1
- package/dist/ta/persistence.js +1 -40
- 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 +3 -2
- package/dist/ta/ppo.d.ts.map +1 -1
- package/dist/ta/ppo.js +5 -4
- 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 +3 -1
- package/dist/ta/pvi.d.ts.map +1 -1
- package/dist/ta/pvi.js +5 -3
- package/dist/ta/pvi.js.map +1 -1
- package/dist/ta/pvo.d.ts +3 -1
- package/dist/ta/pvo.d.ts.map +1 -1
- package/dist/ta/pvo.js +5 -3
- package/dist/ta/pvo.js.map +1 -1
- package/dist/ta/pvt.d.ts +3 -1
- package/dist/ta/pvt.d.ts.map +1 -1
- package/dist/ta/pvt.js +5 -3
- package/dist/ta/pvt.js.map +1 -1
- package/dist/ta/registry.d.ts +7 -1
- package/dist/ta/registry.d.ts.map +1 -1
- package/dist/ta/registry.js +4 -0
- 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 +3 -2
- package/dist/ta/rsi.d.ts.map +1 -1
- package/dist/ta/rsi.js +5 -4
- 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 +3 -2
- package/dist/ta/rvi.d.ts.map +1 -1
- package/dist/ta/rvi.js +5 -4
- package/dist/ta/rvi.js.map +1 -1
- package/dist/ta/sessionVolumeProfile.js.map +1 -1
- package/dist/ta/sma.d.ts +6 -3
- package/dist/ta/sma.d.ts.map +1 -1
- package/dist/ta/sma.js +8 -5
- 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 +3 -2
- package/dist/ta/stdev.d.ts.map +1 -1
- package/dist/ta/stdev.js +5 -4
- 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 +4 -3
- package/dist/ta/trendStrengthIndex.d.ts.map +1 -1
- package/dist/ta/trendStrengthIndex.js +6 -5
- package/dist/ta/trendStrengthIndex.js.map +1 -1
- package/dist/ta/trix.d.ts +4 -3
- package/dist/ta/trix.d.ts.map +1 -1
- package/dist/ta/trix.js +6 -5
- 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 +3 -2
- package/dist/ta/vortex.d.ts.map +1 -1
- package/dist/ta/vortex.js +5 -4
- 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 +3 -3
- package/dist/ta/lib/applyOffset.d.ts +0 -19
- package/dist/ta/lib/applyOffset.d.ts.map +0 -1
- package/dist/ta/lib/applyOffset.js +0 -38
- package/dist/ta/lib/applyOffset.js.map +0 -1
package/dist/streamState.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Copyright (c) 2026 Invinite. Licensed under the MIT License.
|
|
2
2
|
// See the LICENSE file in the repo root for full license text.
|
|
3
|
+
import { resolveBarPoint } from "./barPoint.js";
|
|
3
4
|
import { Float64RingBuffer } from "./ringBuffer.js";
|
|
4
5
|
import { makeSeriesView } from "./seriesView.js";
|
|
5
6
|
function deriveBarSources(rawBar) {
|
|
@@ -60,7 +61,7 @@ function recomputeDerivedBuffers(ohlcv, snapshot) {
|
|
|
60
61
|
}
|
|
61
62
|
/**
|
|
62
63
|
* Construct a fresh `StreamState`. The ring-buffer capacity is the
|
|
63
|
-
* compiler-emitted `manifest.maxLookback + 1`
|
|
64
|
+
* compiler-emitted `manifest.maxLookback + 1`
|
|
64
65
|
* (caller must enforce `capacity >= 1`). All buffers start empty;
|
|
65
66
|
* the `BarView` starts with `NaN` prices, `0` time and volume, and the
|
|
66
67
|
* supplied `symbol` / `interval` constants. `taSlots` is an empty map.
|
|
@@ -90,21 +91,6 @@ export function createStreamState(args) {
|
|
|
90
91
|
ohlc4: new Float64RingBuffer(capacity),
|
|
91
92
|
hlcc4: new Float64RingBuffer(capacity),
|
|
92
93
|
};
|
|
93
|
-
const bar = {
|
|
94
|
-
time: 0,
|
|
95
|
-
open: Number.NaN,
|
|
96
|
-
high: Number.NaN,
|
|
97
|
-
low: Number.NaN,
|
|
98
|
-
close: Number.NaN,
|
|
99
|
-
volume: 0,
|
|
100
|
-
hl2: Number.NaN,
|
|
101
|
-
hlc3: Number.NaN,
|
|
102
|
-
ohlc4: Number.NaN,
|
|
103
|
-
hlcc4: Number.NaN,
|
|
104
|
-
symbol,
|
|
105
|
-
interval,
|
|
106
|
-
viewport: Object.freeze({ fromTime: 0, toTime: 0 }),
|
|
107
|
-
};
|
|
108
94
|
const seriesViews = {
|
|
109
95
|
time: makeSeriesView(ohlcv.time),
|
|
110
96
|
open: makeSeriesView(ohlcv.open),
|
|
@@ -117,6 +103,31 @@ export function createStreamState(args) {
|
|
|
117
103
|
ohlc4: makeSeriesView(ohlcv.ohlc4),
|
|
118
104
|
hlcc4: makeSeriesView(ohlcv.hlcc4),
|
|
119
105
|
};
|
|
106
|
+
// The OHLCV + derived bar fields ARE the cached series views (one identity
|
|
107
|
+
// per ring buffer): the views are number-coercible, so `bar.close` works
|
|
108
|
+
// as a scalar (`+bar.close` / arithmetic reads the live head) and as an
|
|
109
|
+
// index (`bar.close[1]` reads a prior bar). No per-bar scalar copy is
|
|
110
|
+
// needed — the views read the buffer head directly, including mid-tick.
|
|
111
|
+
const bar = {
|
|
112
|
+
time: 0,
|
|
113
|
+
open: seriesViews.open,
|
|
114
|
+
high: seriesViews.high,
|
|
115
|
+
low: seriesViews.low,
|
|
116
|
+
close: seriesViews.close,
|
|
117
|
+
volume: seriesViews.volume,
|
|
118
|
+
hl2: seriesViews.hl2,
|
|
119
|
+
hlc3: seriesViews.hlc3,
|
|
120
|
+
ohlc4: seriesViews.ohlc4,
|
|
121
|
+
hlcc4: seriesViews.hlcc4,
|
|
122
|
+
symbol,
|
|
123
|
+
interval,
|
|
124
|
+
viewport: Object.freeze({ fromTime: 0, toTime: 0 }),
|
|
125
|
+
// Closes over the stream's time history + the live scalar `bar.time` /
|
|
126
|
+
// `bar.interval` so offset-anchored drawings resolve against the real /
|
|
127
|
+
// extrapolated time at compute time. The `WorldPoint` it returns is the
|
|
128
|
+
// only persisted anchor frame — `bar.point` adds no new wire shape.
|
|
129
|
+
point: (offset, price) => resolveBarPoint(ohlcv.time, bar.interval, bar.time, offset, price),
|
|
130
|
+
};
|
|
120
131
|
const stream = {
|
|
121
132
|
interval,
|
|
122
133
|
ohlcv,
|
|
@@ -150,31 +161,13 @@ export function createStreamState(args) {
|
|
|
150
161
|
});
|
|
151
162
|
}
|
|
152
163
|
recomputeDerivedBuffers(ohlcv, snapshot);
|
|
164
|
+
// The OHLCV + derived `bar.*` fields are the series views over the
|
|
165
|
+
// ring buffers just restored above, so they reflect the restored
|
|
166
|
+
// head with no scalar copy. Only the scalar `time` / `interval`
|
|
167
|
+
// need writing.
|
|
153
168
|
const current = snapshot.headIndex;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
bar.open = Number.NaN;
|
|
157
|
-
bar.high = Number.NaN;
|
|
158
|
-
bar.low = Number.NaN;
|
|
159
|
-
bar.close = Number.NaN;
|
|
160
|
-
bar.volume = 0;
|
|
161
|
-
bar.hl2 = Number.NaN;
|
|
162
|
-
bar.hlc3 = Number.NaN;
|
|
163
|
-
bar.ohlc4 = Number.NaN;
|
|
164
|
-
bar.hlcc4 = Number.NaN;
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
bar.time = valueAt(snapshot.buffers.time, current);
|
|
168
|
-
bar.open = valueAt(snapshot.buffers.open, current);
|
|
169
|
-
bar.high = valueAt(snapshot.buffers.high, current);
|
|
170
|
-
bar.low = valueAt(snapshot.buffers.low, current);
|
|
171
|
-
bar.close = valueAt(snapshot.buffers.close, current);
|
|
172
|
-
bar.volume = valueAt(snapshot.buffers.volume, current);
|
|
173
|
-
bar.hl2 = (bar.high + bar.low) / 2;
|
|
174
|
-
bar.hlc3 = (bar.high + bar.low + bar.close) / 3;
|
|
175
|
-
bar.ohlc4 = (bar.open + bar.high + bar.low + bar.close) / 4;
|
|
176
|
-
bar.hlcc4 = (bar.high + bar.low + bar.close + bar.close) / 4;
|
|
177
|
-
}
|
|
169
|
+
bar.time =
|
|
170
|
+
snapshot.filled === 0 || current < 0 ? 0 : valueAt(snapshot.buffers.time, current);
|
|
178
171
|
bar.interval = snapshot.interval;
|
|
179
172
|
},
|
|
180
173
|
};
|
|
@@ -203,16 +196,10 @@ export function appendBarToStream(stream, rawBar) {
|
|
|
203
196
|
ohlcv.hlc3.append(values.hlc3);
|
|
204
197
|
ohlcv.ohlc4.append(values.ohlc4);
|
|
205
198
|
ohlcv.hlcc4.append(values.hlcc4);
|
|
199
|
+
// OHLCV + derived bar fields read the buffer head live (they ARE the
|
|
200
|
+
// series views), so only the scalar `time` / `symbol` / `interval` are
|
|
201
|
+
// copied onto the `BarView`.
|
|
206
202
|
bar.time = rawBar.time;
|
|
207
|
-
bar.open = rawBar.open;
|
|
208
|
-
bar.high = rawBar.high;
|
|
209
|
-
bar.low = rawBar.low;
|
|
210
|
-
bar.close = rawBar.close;
|
|
211
|
-
bar.volume = rawBar.volume;
|
|
212
|
-
bar.hl2 = values.hl2;
|
|
213
|
-
bar.hlc3 = values.hlc3;
|
|
214
|
-
bar.ohlc4 = values.ohlc4;
|
|
215
|
-
bar.hlcc4 = values.hlcc4;
|
|
216
203
|
bar.symbol = rawBar.symbol;
|
|
217
204
|
bar.interval = rawBar.interval;
|
|
218
205
|
}
|
|
@@ -244,16 +231,8 @@ export function replaceStreamHead(stream, rawBar) {
|
|
|
244
231
|
ohlcv.hlc3.replaceHead(values.hlc3);
|
|
245
232
|
ohlcv.ohlc4.replaceHead(values.ohlc4);
|
|
246
233
|
ohlcv.hlcc4.replaceHead(values.hlcc4);
|
|
234
|
+
// See appendBarToStream — the OHLCV/derived views read the head live.
|
|
247
235
|
bar.time = rawBar.time;
|
|
248
|
-
bar.open = rawBar.open;
|
|
249
|
-
bar.high = rawBar.high;
|
|
250
|
-
bar.low = rawBar.low;
|
|
251
|
-
bar.close = rawBar.close;
|
|
252
|
-
bar.volume = rawBar.volume;
|
|
253
|
-
bar.hl2 = values.hl2;
|
|
254
|
-
bar.hlc3 = values.hlc3;
|
|
255
|
-
bar.ohlc4 = values.ohlc4;
|
|
256
|
-
bar.hlcc4 = values.hlcc4;
|
|
257
236
|
bar.symbol = rawBar.symbol;
|
|
258
237
|
bar.interval = rawBar.interval;
|
|
259
238
|
}
|
|
@@ -270,7 +249,7 @@ export function replaceStreamHead(stream, rawBar) {
|
|
|
270
249
|
*/
|
|
271
250
|
export function replaceTickHead(stream, rawBar) {
|
|
272
251
|
const values = deriveBarSources(rawBar);
|
|
273
|
-
const { ohlcv
|
|
252
|
+
const { ohlcv } = stream;
|
|
274
253
|
ohlcv.close.replaceHead(rawBar.close);
|
|
275
254
|
ohlcv.high.replaceHead(rawBar.high);
|
|
276
255
|
ohlcv.low.replaceHead(rawBar.low);
|
|
@@ -279,14 +258,9 @@ export function replaceTickHead(stream, rawBar) {
|
|
|
279
258
|
ohlcv.hlc3.replaceHead(values.hlc3);
|
|
280
259
|
ohlcv.ohlc4.replaceHead(values.ohlc4);
|
|
281
260
|
ohlcv.hlcc4.replaceHead(values.hlcc4);
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
bar.volume = rawBar.volume;
|
|
286
|
-
bar.hl2 = values.hl2;
|
|
287
|
-
bar.hlc3 = values.hlc3;
|
|
288
|
-
bar.ohlc4 = values.ohlc4;
|
|
289
|
-
bar.hlcc4 = values.hlcc4;
|
|
261
|
+
// The close-side / derived `bar.*` fields are the series views over these
|
|
262
|
+
// buffers, so replacing the buffer head is the whole update — no scalar
|
|
263
|
+
// copy. `time` / `open` are intentionally untouched (tick invariant).
|
|
290
264
|
}
|
|
291
265
|
/**
|
|
292
266
|
* Refresh the stream's fallback visible range to the latest `limit`
|
package/dist/streamState.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamState.js","sourceRoot":"","sources":["../src/streamState.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"streamState.js","sourceRoot":"","sources":["../src/streamState.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\nimport type {\n Bar,\n BarViewport,\n Price,\n PriceSeries,\n Series,\n StreamSnapshot,\n VolumeSeries,\n WorldPoint,\n} from \"@invinite-org/chartlang-core\";\n\nimport { resolveBarPoint } from \"./barPoint.js\";\nimport { Float64RingBuffer } from \"./ringBuffer.js\";\nimport { makeSeriesView } from \"./seriesView.js\";\n\ntype DerivedBarValues = Readonly<{\n hl2: number;\n hlc3: number;\n ohlc4: number;\n hlcc4: number;\n}>;\n\nfunction deriveBarSources(rawBar: Bar): DerivedBarValues {\n return {\n hl2: (rawBar.high + rawBar.low) / 2,\n hlc3: (rawBar.high + rawBar.low + rawBar.close) / 3,\n ohlc4: (rawBar.open + rawBar.high + rawBar.low + rawBar.close) / 4,\n hlcc4: (rawBar.high + rawBar.low + rawBar.close + rawBar.close) / 4,\n };\n}\n\n/**\n * The per-stream OHLCV ring-buffer set. Each field is a\n * `Float64RingBuffer` of identical capacity. Derived sources\n * (`hl2`, `hlc3`, `ohlc4`, `hlcc4`) are pre-computed by Task 6's\n * execution loop alongside the raw OHLCV fields so primitives can\n * read them as plain `Series<number>` without re-computing per\n * lookup.\n *\n * @since 0.1\n * @example\n * // import { createStreamState } from \"@invinite-org/chartlang-runtime\";\n * // const { ohlcv } = createStreamState({\n * // interval: \"1D\",\n * // capacity: 5,\n * // symbol: \"AAPL\",\n * // });\n * // ohlcv.close.capacity; // 5\n */\nexport type OhlcvBuffers = {\n readonly time: Float64RingBuffer;\n readonly open: Float64RingBuffer;\n readonly high: Float64RingBuffer;\n readonly low: Float64RingBuffer;\n readonly close: Float64RingBuffer;\n readonly volume: Float64RingBuffer;\n readonly hl2: Float64RingBuffer;\n readonly hlc3: Float64RingBuffer;\n readonly ohlc4: Float64RingBuffer;\n readonly hlcc4: Float64RingBuffer;\n};\n\n/**\n * View of the current bar handed to `compute`. Identity stays stable across\n * the run. The OHLCV + derived price/volume fields are the stream's cached\n * number-coercible `Series` views (one identity per ring buffer) — they read\n * the live buffer head, so a script can both use `bar.close` as a scalar\n * (`bar.close * 2`) and index it (`bar.close[1]`) without the runtime copying\n * scalars per bar. `time` stays a mutable scalar (the timestamp axis the\n * emit/draw pipeline consumes as a raw number); `symbol` / `interval` are\n * constant strings for a given `StreamState`.\n *\n * Before the first bar the buffers are empty, so `bar.close[0]` / `+bar.close`\n * read `NaN` and `bar.close.length` is `0`.\n *\n * @since 0.1\n * @example\n * // import { createStreamState } from \"@invinite-org/chartlang-runtime\";\n * // const { bar } = createStreamState({\n * // interval: \"1D\",\n * // capacity: 5,\n * // symbol: \"AAPL\",\n * // });\n * // bar.symbol; // \"AAPL\"\n * // bar.interval; // \"1D\"\n * // +bar.close; // NaN until the first bar\n * // bar.close.length; // 0 until the first bar\n */\nexport type BarView = {\n time: number;\n open: PriceSeries;\n high: PriceSeries;\n low: PriceSeries;\n close: PriceSeries;\n volume: VolumeSeries;\n hl2: PriceSeries;\n hlc3: PriceSeries;\n ohlc4: PriceSeries;\n hlcc4: PriceSeries;\n symbol: string;\n interval: string;\n viewport: BarViewport;\n point(offset: number, price: Price): WorldPoint;\n};\n\n/**\n * Everything the runtime owns for a single interval stream — the OHLCV\n * ring buffers, the mutable `BarView`, cached `Series<number>` Proxies\n * for each source field (one identity per buffer for the lifetime of\n * the stream), and a `taSlots` map keyed by compiler-assigned slot id\n * that stateful primitives in Task 7 use as their hidden-state\n * scratchpad.\n *\n * Phase 1 ships single-stream scripts; secondary streams via\n * `request.security` arrive in Phase 5 and reuse this exact shape per\n * interval.\n *\n * @since 0.1\n * @example\n * // import { createStreamState } from \"@invinite-org/chartlang-runtime\";\n * // const stream = createStreamState({\n * // interval: \"1D\",\n * // capacity: 21,\n * // symbol: \"AAPL\",\n * // });\n * // stream.taSlots.size; // 0\n */\nexport type StreamState = {\n readonly interval: string;\n readonly ohlcv: OhlcvBuffers;\n readonly bar: BarView;\n readonly seriesViews: {\n readonly time: Series<number>;\n readonly open: Series<number>;\n readonly high: Series<number>;\n readonly low: Series<number>;\n readonly close: Series<number>;\n readonly volume: Series<number>;\n readonly hl2: Series<number>;\n readonly hlc3: Series<number>;\n readonly ohlc4: Series<number>;\n readonly hlcc4: Series<number>;\n };\n readonly taSlots: Map<string, unknown>;\n serialiseSnapshot(): StreamSnapshot;\n restoreFromSnapshot(snapshot: StreamSnapshot): void;\n};\n\nconst rawBufferKeys = [\"time\", \"open\", \"high\", \"low\", \"close\", \"volume\"] as const;\n\ntype RawBufferKey = (typeof rawBufferKeys)[number];\n\nfunction rawBuffers(ohlcv: OhlcvBuffers): Readonly<Record<RawBufferKey, Float64RingBuffer>> {\n return {\n time: ohlcv.time,\n open: ohlcv.open,\n high: ohlcv.high,\n low: ohlcv.low,\n close: ohlcv.close,\n volume: ohlcv.volume,\n };\n}\n\nfunction valueAt(values: ReadonlyArray<number | null>, index: number): number {\n const value = values[index];\n return value === null || value === undefined ? Number.NaN : value;\n}\n\nfunction recomputeDerivedBuffers(ohlcv: OhlcvBuffers, snapshot: StreamSnapshot): void {\n const { headIndex, filled, buffers } = snapshot;\n const capacity = ohlcv.hl2.capacity;\n const derived = {\n hl2: new Array<number | null>(capacity),\n hlc3: new Array<number | null>(capacity),\n ohlc4: new Array<number | null>(capacity),\n hlcc4: new Array<number | null>(capacity),\n };\n for (let i = 0; i < capacity; i += 1) {\n const high = valueAt(buffers.high, i);\n const low = valueAt(buffers.low, i);\n const open = valueAt(buffers.open, i);\n const close = valueAt(buffers.close, i);\n derived.hl2[i] = Number.isNaN(high) || Number.isNaN(low) ? null : (high + low) / 2;\n derived.hlc3[i] =\n Number.isNaN(high) || Number.isNaN(low) || Number.isNaN(close)\n ? null\n : (high + low + close) / 3;\n derived.ohlc4[i] =\n Number.isNaN(open) || Number.isNaN(high) || Number.isNaN(low) || Number.isNaN(close)\n ? null\n : (open + high + low + close) / 4;\n derived.hlcc4[i] =\n Number.isNaN(high) || Number.isNaN(low) || Number.isNaN(close)\n ? null\n : (high + low + close + close) / 4;\n }\n ohlcv.hl2.restoreFromSnapshotBuffer({ headIndex, filled, values: derived.hl2 });\n ohlcv.hlc3.restoreFromSnapshotBuffer({ headIndex, filled, values: derived.hlc3 });\n ohlcv.ohlc4.restoreFromSnapshotBuffer({ headIndex, filled, values: derived.ohlc4 });\n ohlcv.hlcc4.restoreFromSnapshotBuffer({ headIndex, filled, values: derived.hlcc4 });\n}\n\n/**\n * Construct a fresh `StreamState`. The ring-buffer capacity is the\n * compiler-emitted `manifest.maxLookback + 1`\n * (caller must enforce `capacity >= 1`). All buffers start empty;\n * the `BarView` starts with `NaN` prices, `0` time and volume, and the\n * supplied `symbol` / `interval` constants. `taSlots` is an empty map.\n *\n * @since 0.1\n * @example\n * // import { createStreamState } from \"@invinite-org/chartlang-runtime\";\n * // const stream = createStreamState({\n * // interval: \"5m\",\n * // capacity: 12,\n * // symbol: \"BTCUSD\",\n * // });\n * // stream.bar.close; // NaN\n * // stream.ohlcv.close.length; // 0\n */\nexport function createStreamState(args: {\n interval: string;\n capacity: number;\n symbol: string;\n}): StreamState {\n const { interval, capacity, symbol } = args;\n const ohlcv: OhlcvBuffers = {\n time: new Float64RingBuffer(capacity),\n open: new Float64RingBuffer(capacity),\n high: new Float64RingBuffer(capacity),\n low: new Float64RingBuffer(capacity),\n close: new Float64RingBuffer(capacity),\n volume: new Float64RingBuffer(capacity),\n hl2: new Float64RingBuffer(capacity),\n hlc3: new Float64RingBuffer(capacity),\n ohlc4: new Float64RingBuffer(capacity),\n hlcc4: new Float64RingBuffer(capacity),\n };\n const seriesViews: StreamState[\"seriesViews\"] = {\n time: makeSeriesView<number>(ohlcv.time),\n open: makeSeriesView<number>(ohlcv.open),\n high: makeSeriesView<number>(ohlcv.high),\n low: makeSeriesView<number>(ohlcv.low),\n close: makeSeriesView<number>(ohlcv.close),\n volume: makeSeriesView<number>(ohlcv.volume),\n hl2: makeSeriesView<number>(ohlcv.hl2),\n hlc3: makeSeriesView<number>(ohlcv.hlc3),\n ohlc4: makeSeriesView<number>(ohlcv.ohlc4),\n hlcc4: makeSeriesView<number>(ohlcv.hlcc4),\n };\n // The OHLCV + derived bar fields ARE the cached series views (one identity\n // per ring buffer): the views are number-coercible, so `bar.close` works\n // as a scalar (`+bar.close` / arithmetic reads the live head) and as an\n // index (`bar.close[1]` reads a prior bar). No per-bar scalar copy is\n // needed — the views read the buffer head directly, including mid-tick.\n const bar: BarView = {\n time: 0,\n open: seriesViews.open as PriceSeries,\n high: seriesViews.high as PriceSeries,\n low: seriesViews.low as PriceSeries,\n close: seriesViews.close as PriceSeries,\n volume: seriesViews.volume as VolumeSeries,\n hl2: seriesViews.hl2 as PriceSeries,\n hlc3: seriesViews.hlc3 as PriceSeries,\n ohlc4: seriesViews.ohlc4 as PriceSeries,\n hlcc4: seriesViews.hlcc4 as PriceSeries,\n symbol,\n interval,\n viewport: Object.freeze({ fromTime: 0, toTime: 0 }),\n // Closes over the stream's time history + the live scalar `bar.time` /\n // `bar.interval` so offset-anchored drawings resolve against the real /\n // extrapolated time at compute time. The `WorldPoint` it returns is the\n // only persisted anchor frame — `bar.point` adds no new wire shape.\n point: (offset: number, price: Price): WorldPoint =>\n resolveBarPoint(ohlcv.time, bar.interval, bar.time, offset, price),\n };\n const stream: StreamState = {\n interval,\n ohlcv,\n bar,\n seriesViews,\n taSlots: new Map<string, unknown>(),\n serialiseSnapshot(): StreamSnapshot {\n const close = ohlcv.close.serialiseSnapshotBuffer();\n const buffers = rawBuffers(ohlcv);\n return Object.freeze({\n interval: bar.interval,\n headIndex: close.headIndex,\n filled: close.filled,\n buffers: Object.freeze({\n time: buffers.time.serialiseSnapshotBuffer().values,\n open: buffers.open.serialiseSnapshotBuffer().values,\n high: buffers.high.serialiseSnapshotBuffer().values,\n low: buffers.low.serialiseSnapshotBuffer().values,\n close: close.values,\n volume: buffers.volume.serialiseSnapshotBuffer().values,\n }),\n });\n },\n restoreFromSnapshot(snapshot: StreamSnapshot): void {\n const buffers = rawBuffers(ohlcv);\n for (const key of rawBufferKeys) {\n buffers[key].restoreFromSnapshotBuffer({\n headIndex: snapshot.headIndex,\n filled: snapshot.filled,\n values: snapshot.buffers[key],\n });\n }\n recomputeDerivedBuffers(ohlcv, snapshot);\n // The OHLCV + derived `bar.*` fields are the series views over the\n // ring buffers just restored above, so they reflect the restored\n // head with no scalar copy. Only the scalar `time` / `interval`\n // need writing.\n const current = snapshot.headIndex;\n bar.time =\n snapshot.filled === 0 || current < 0 ? 0 : valueAt(snapshot.buffers.time, current);\n bar.interval = snapshot.interval;\n },\n };\n return stream;\n}\n\n/**\n * Append a finalised candle to a stream — extends the OHLCV ring buffers\n * by one bar and writes every field of the mutable `BarView` (including\n * `time` / `open`). Used by both the main close path and secondary\n * stream history.\n *\n * @since 0.5\n * @example\n * // appendBarToStream(stream, rawBar);\n */\nexport function appendBarToStream(stream: StreamState, rawBar: Bar): void {\n const values = deriveBarSources(rawBar);\n const { ohlcv, bar } = stream;\n ohlcv.time.append(rawBar.time);\n ohlcv.open.append(rawBar.open);\n ohlcv.high.append(rawBar.high);\n ohlcv.low.append(rawBar.low);\n ohlcv.close.append(rawBar.close);\n ohlcv.volume.append(rawBar.volume);\n ohlcv.hl2.append(values.hl2);\n ohlcv.hlc3.append(values.hlc3);\n ohlcv.ohlc4.append(values.ohlc4);\n ohlcv.hlcc4.append(values.hlcc4);\n // OHLCV + derived bar fields read the buffer head live (they ARE the\n // series views), so only the scalar `time` / `symbol` / `interval` are\n // copied onto the `BarView`.\n bar.time = rawBar.time;\n bar.symbol = rawBar.symbol;\n bar.interval = rawBar.interval;\n}\n\n/**\n * Replace the head of every OHLCV ring buffer in a stream and write\n * every field of the `BarView`. Used by the secondary-stream replace\n * path — falls back to {@link appendBarToStream} for the empty-buffer\n * case so the first secondary bar arrives correctly even when delivered\n * as a replace.\n *\n * @since 0.5\n * @example\n * // replaceStreamHead(stream, rawBar);\n */\nexport function replaceStreamHead(stream: StreamState, rawBar: Bar): void {\n if (stream.ohlcv.close.length === 0) {\n appendBarToStream(stream, rawBar);\n return;\n }\n const values = deriveBarSources(rawBar);\n const { ohlcv, bar } = stream;\n ohlcv.time.replaceHead(rawBar.time);\n ohlcv.open.replaceHead(rawBar.open);\n ohlcv.high.replaceHead(rawBar.high);\n ohlcv.low.replaceHead(rawBar.low);\n ohlcv.close.replaceHead(rawBar.close);\n ohlcv.volume.replaceHead(rawBar.volume);\n ohlcv.hl2.replaceHead(values.hl2);\n ohlcv.hlc3.replaceHead(values.hlc3);\n ohlcv.ohlc4.replaceHead(values.ohlc4);\n ohlcv.hlcc4.replaceHead(values.hlcc4);\n // See appendBarToStream — the OHLCV/derived views read the head live.\n bar.time = rawBar.time;\n bar.symbol = rawBar.symbol;\n bar.interval = rawBar.interval;\n}\n\n/**\n * Replace the head of the close-side OHLCV ring buffers (close, high,\n * low, volume, derived sources) for a tick within the in-progress bar.\n * `time` and `open` are intentionally untouched — see\n * `packages/runtime/CLAUDE.md` \"onBarTick does NOT touch time / open\"\n * invariant. Mirrors the partial `BarView` update.\n *\n * @since 0.5\n * @example\n * // replaceTickHead(stream, tickBar);\n */\nexport function replaceTickHead(stream: StreamState, rawBar: Bar): void {\n const values = deriveBarSources(rawBar);\n const { ohlcv } = stream;\n ohlcv.close.replaceHead(rawBar.close);\n ohlcv.high.replaceHead(rawBar.high);\n ohlcv.low.replaceHead(rawBar.low);\n ohlcv.volume.replaceHead(rawBar.volume);\n ohlcv.hl2.replaceHead(values.hl2);\n ohlcv.hlc3.replaceHead(values.hlc3);\n ohlcv.ohlc4.replaceHead(values.ohlc4);\n ohlcv.hlcc4.replaceHead(values.hlcc4);\n // The close-side / derived `bar.*` fields are the series views over these\n // buffers, so replacing the buffer head is the whole update — no scalar\n // copy. `time` / `open` are intentionally untouched (tick invariant).\n}\n\n/**\n * Refresh the stream's fallback visible range to the latest `limit`\n * bars ending at the current head.\n *\n * @since 0.5\n * @example\n * // updateFallbackViewport(stream);\n */\nexport function updateFallbackViewport(stream: StreamState, limit = 100): void {\n const length = stream.ohlcv.time.length;\n if (length === 0) {\n stream.bar.viewport = Object.freeze({ fromTime: 0, toTime: 0 });\n return;\n }\n const lookback = Math.min(length - 1, Math.max(0, limit - 1));\n const fromTime = stream.ohlcv.time.at(lookback);\n const toTime = stream.ohlcv.time.at(0);\n stream.bar.viewport = Object.freeze({\n fromTime: Number.isFinite(fromTime) ? fromTime : toTime,\n toTime,\n });\n}\n"]}
|
package/dist/ta/adl.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/adl.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/adl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adl.js","sourceRoot":"","sources":["../../src/ta/adl.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"adl.js","sourceRoot":"","sources":["../../src/ta/adl.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/adl.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 { AdlOpts, 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\";\n\ntype AdlSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n /** Active cumulative ADL across the closed bars so far. */\n cumAdl: number;\n /** Snapshot of `cumAdl` BEFORE the most recent close-side update. */\n prevClosedCumAdl: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.adl called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(capacity: number): AdlSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n cumAdl: 0,\n prevClosedCumAdl: 0,\n };\n}\n\n/**\n * Per-bar Money-Flow Volume: CLV (close location value) `((close − low)\n * − (high − close)) / (high − low)` multiplied by volume. Returns 0\n * on a zero-range bar (matches invinite's defensive guard) and 0 on\n * any NaN OHLC / volume (matches `safeVolume(NaN) === 0`). The\n * cumulative accumulator stays well-defined across data gaps.\n */\nfunction mfvAt(close: number, high: number, low: number, volume: number): number {\n if (\n !Number.isFinite(close) ||\n !Number.isFinite(high) ||\n !Number.isFinite(low) ||\n !Number.isFinite(volume)\n ) {\n return 0;\n }\n const range = high - low;\n if (range === 0) return 0;\n const clv = (close - low - (high - close)) / range;\n return clv * volume;\n}\n\n/**\n * Accumulation Distribution Line — cumulative money-flow volume\n * `Σ CLV · volume`, where CLV is the close location value\n * `((C − L) − (H − C)) / (H − L)`. Zero-range bars (`high === low`)\n * contribute 0 (matches invinite's guard); NaN OHLC / volume bars\n * contribute 0 (carry the accumulator forward without polluting it).\n *\n * Renders in its own pane (volume category). No warmup — every slot\n * finite from bar 0.\n *\n * **Tick mode.** Replays the head bar's contribution against a\n * snapshot of the prior-close `cumAdl` so a partial-bar tick doesn't\n * pollute the next close's accumulator.\n *\n * @formula adl[t] = adl[t − 1] + ((C[t] − L[t]) − (H[t] − C[t])) / (H[t] − L[t]) · V[t]\n * @warmup 0\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta, plot } from \"@invinite-org/chartlang-core\";\n * // const a = ta.adl();\n * // plot(a);\n */\nexport function adl(slotId: string, _opts?: AdlOpts): Series<number> {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as AdlSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const { close, high, low, volume } = ctx.stream.bar;\n const mfv = mfvAt(close, high, low, volume);\n\n if (ctx.isTick) {\n slot.outBuffer.replaceHead(slot.prevClosedCumAdl + mfv);\n return slot.series;\n }\n\n slot.prevClosedCumAdl = slot.cumAdl;\n slot.cumAdl += mfv;\n slot.outBuffer.append(slot.cumAdl);\n return slot.series;\n}\n"]}
|
package/dist/ta/adr.d.ts
CHANGED
|
@@ -5,13 +5,13 @@ import type { AdrOpts, Series } from "@invinite-org/chartlang-core";
|
|
|
5
5
|
* TradingView. Reads `bar.high` / `bar.low` / `bar.time` directly
|
|
6
6
|
* (no `source` argument per the absolute-range formula).
|
|
7
7
|
*
|
|
8
|
-
* **Calendar-day boundary.**
|
|
8
|
+
* **Calendar-day boundary.** "daily" keys on the UTC midnight
|
|
9
9
|
* boundary (`Math.floor(time / 86_400_000)`). Bars sharing a day key
|
|
10
10
|
* are aggregated into a single `(dailyHigh, dailyLow)` pair; the day
|
|
11
11
|
* range commits to the rolling SMA when the next bar's day key differs.
|
|
12
12
|
* The in-progress (currently-aggregating) day is NEVER included in the
|
|
13
|
-
* average.
|
|
14
|
-
* non-UTC sessions can override the convention.
|
|
13
|
+
* average. A future release lifts this onto `syminfo.session` so symbols
|
|
14
|
+
* with non-UTC sessions can override the convention.
|
|
15
15
|
*
|
|
16
16
|
* **Tick mode.** Ticks within the in-progress bar do NOT shift the day
|
|
17
17
|
* boundary (per the runtime invariant that ticks happen inside the
|
package/dist/ta/adr.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/adr.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. ADR derives from `bar.high`/`bar.low`/
|
|
@@ -91,13 +91,13 @@ function closeStep(slot, high, low, time) {
|
|
|
91
91
|
* TradingView. Reads `bar.high` / `bar.low` / `bar.time` directly
|
|
92
92
|
* (no `source` argument per the absolute-range formula).
|
|
93
93
|
*
|
|
94
|
-
* **Calendar-day boundary.**
|
|
94
|
+
* **Calendar-day boundary.** "daily" keys on the UTC midnight
|
|
95
95
|
* boundary (`Math.floor(time / 86_400_000)`). Bars sharing a day key
|
|
96
96
|
* are aggregated into a single `(dailyHigh, dailyLow)` pair; the day
|
|
97
97
|
* range commits to the rolling SMA when the next bar's day key differs.
|
|
98
98
|
* The in-progress (currently-aggregating) day is NEVER included in the
|
|
99
|
-
* average.
|
|
100
|
-
* non-UTC sessions can override the convention.
|
|
99
|
+
* average. A future release lifts this onto `syminfo.session` so symbols
|
|
100
|
+
* with non-UTC sessions can override the convention.
|
|
101
101
|
*
|
|
102
102
|
* **Tick mode.** Ticks within the in-progress bar do NOT shift the day
|
|
103
103
|
* boundary (per the runtime invariant that ticks happen inside the
|
package/dist/ta/adr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adr.js","sourceRoot":"","sources":["../../src/ta/adr.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adr.js","sourceRoot":"","sources":["../../src/ta/adr.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/adr.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. ADR derives from `bar.high`/`bar.low`/\n// `bar.time` directly — no `source` argument per the absolute-range\n// formula. The Phase-2 calendar-day boundary keys on UTC midnight\n// (`floor(time / 86_400_000)`); Phase 4 lifts this onto\n// `syminfo.session`.\n\nimport type { AdrOpts, 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\";\n\nconst DEFAULT_LENGTH = 14;\nconst MS_PER_DAY = 86_400_000;\n\ntype AdrSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n readonly length: number;\n /**\n * Ring of the last `length` COMPLETED daily ranges\n * (`dailyHigh - dailyLow` per UTC calendar day). Capacity = `length`.\n */\n readonly completedRanges: Float64RingBuffer;\n /** Sum of the completed-range ring; refreshed on each commit. */\n sumRanges: number;\n /** Running daily high — folded across all bars sharing `currentDayKey`. */\n dailyHigh: number;\n /** Running daily low. */\n dailyLow: number;\n /**\n * UTC calendar-day key for the in-progress day, or `Number.NaN`\n * before the first bar with a finite time has been folded in.\n */\n currentDayKey: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.adr called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(length: number, capacity: number): AdrSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n length,\n completedRanges: new Float64RingBuffer(length),\n sumRanges: 0,\n dailyHigh: Number.NaN,\n dailyLow: Number.NaN,\n currentDayKey: Number.NaN,\n };\n}\n\nfunction commitDay(slot: AdrSlot): void {\n // Defensive: callers gate on `Number.isFinite(currentDayKey)` so by the\n // time we get here `dailyHigh` / `dailyLow` were set by a prior bar\n // with finite OHLC. Keep the early return as a safety net.\n /* c8 ignore next */\n if (!Number.isFinite(slot.dailyHigh) || !Number.isFinite(slot.dailyLow)) return;\n const range = slot.dailyHigh - slot.dailyLow;\n if (slot.completedRanges.length === slot.length) {\n // Evict the oldest range before append.\n slot.sumRanges -= slot.completedRanges.at(slot.length - 1);\n }\n slot.completedRanges.append(range);\n slot.sumRanges += range;\n}\n\nfunction emit(slot: AdrSlot): number {\n if (slot.completedRanges.length < slot.length) return Number.NaN;\n return slot.sumRanges / slot.length;\n}\n\nfunction closeStep(slot: AdrSlot, high: number, low: number, time: number): number {\n // NaN bars skipped from the daily aggregation per task spec §6.\n if (!Number.isFinite(high) || !Number.isFinite(low) || !Number.isFinite(time)) {\n return emit(slot);\n }\n const dayKey = Math.floor(time / MS_PER_DAY);\n if (Number.isNaN(slot.currentDayKey)) {\n slot.currentDayKey = dayKey;\n slot.dailyHigh = high;\n slot.dailyLow = low;\n return emit(slot);\n }\n if (dayKey !== slot.currentDayKey) {\n // Rollover: commit the prior in-progress day, then seed the new\n // day with the current bar's high/low.\n commitDay(slot);\n slot.currentDayKey = dayKey;\n slot.dailyHigh = high;\n slot.dailyLow = low;\n return emit(slot);\n }\n // Same day: extend the in-progress aggregate.\n if (high > slot.dailyHigh) slot.dailyHigh = high;\n if (low < slot.dailyLow) slot.dailyLow = low;\n return emit(slot);\n}\n\n/**\n * Average Daily Range — SMA of `high − low` across the trailing\n * `length` completed UTC calendar days. Default `length = 14` per\n * TradingView. Reads `bar.high` / `bar.low` / `bar.time` directly\n * (no `source` argument per the absolute-range formula).\n *\n * **Calendar-day boundary.** \"daily\" keys on the UTC midnight\n * boundary (`Math.floor(time / 86_400_000)`). Bars sharing a day key\n * are aggregated into a single `(dailyHigh, dailyLow)` pair; the day\n * range commits to the rolling SMA when the next bar's day key differs.\n * The in-progress (currently-aggregating) day is NEVER included in the\n * average. A future release lifts this onto `syminfo.session` so symbols\n * with non-UTC sessions can override the convention.\n *\n * **Tick mode.** Ticks within the in-progress bar do NOT shift the day\n * boundary (per the runtime invariant that ticks happen inside the\n * current bar); the emitted value is the cached SMA of the already-\n * committed days. The next close re-folds the bar into the in-progress\n * day aggregate.\n *\n * **NaN.** Bars with non-finite `high` / `low` / `time` are skipped\n * (no aggregation, no commit); the output reflects only the previously\n * committed days.\n *\n * @formula out[t] = mean( (dailyHigh − dailyLow) over the last `length`\n * completed UTC days, in price units )\n * @warmup length daily bars\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const r = ta.adr({ length: 14 });\n * // plot(r);\n */\nexport function adr(slotId: string, opts?: AdrOpts): Series<number> {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as AdrSlot | undefined;\n if (slot === undefined) {\n const length = opts?.length ?? DEFAULT_LENGTH;\n slot = initSlot(length, ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const { high, low, time } = ctx.stream.bar;\n if (ctx.isTick) {\n // Tick replay does NOT touch the day aggregate or the rolling\n // sum — those are snapshots of the last close. The output is the\n // committed SMA (NaN until warm).\n slot.outBuffer.replaceHead(emit(slot));\n } else {\n slot.outBuffer.append(closeStep(slot, high, low, time));\n }\n return slot.series;\n}\n"]}
|
package/dist/ta/adx.d.ts
CHANGED
|
@@ -18,8 +18,9 @@ import type { AdxOpts, Series } from "@invinite-org/chartlang-core";
|
|
|
18
18
|
* @since 0.2
|
|
19
19
|
* @stable
|
|
20
20
|
*
|
|
21
|
-
* `opts.offset`
|
|
22
|
-
* `
|
|
21
|
+
* `opts.offset` is a presentation display shift carried to the plot
|
|
22
|
+
* emission as `xShift` (`+n` right / future, `−n` left / past); the
|
|
23
|
+
* series value is unshifted.
|
|
23
24
|
*
|
|
24
25
|
* @example
|
|
25
26
|
* // import { ta } from "@invinite-org/chartlang-runtime";
|
package/dist/ta/adx.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adx.d.ts","sourceRoot":"","sources":["../../src/ta/adx.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AA0IpE
|
|
1
|
+
{"version":3,"file":"adx.d.ts","sourceRoot":"","sources":["../../src/ta/adx.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AA0IpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAelF"}
|
package/dist/ta/adx.js
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/adx.ts
|
|
5
5
|
// plus lib/wilder-directional.ts + lib/adx-from-di.ts
|
|
6
6
|
// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
|
|
7
|
-
// Re-licensed MIT for chartlang.
|
|
8
|
-
//
|
|
7
|
+
// Re-licensed MIT for chartlang. The math is the reference, the code
|
|
8
|
+
// style is not.
|
|
9
9
|
// Structural choices (callsite-id slot, Series<T> proxy, replaceHead
|
|
10
10
|
// mode) follow chartlang's primitive shape — NOT invinite's
|
|
11
11
|
// IndicatorPlugin shape. ADX reads `bar.high` / `bar.low` /
|
|
@@ -138,8 +138,9 @@ function tickValue(slot, high, low, close) {
|
|
|
138
138
|
* @since 0.2
|
|
139
139
|
* @stable
|
|
140
140
|
*
|
|
141
|
-
* `opts.offset`
|
|
142
|
-
* `
|
|
141
|
+
* `opts.offset` is a presentation display shift carried to the plot
|
|
142
|
+
* emission as `xShift` (`+n` right / future, `−n` left / past); the
|
|
143
|
+
* series value is unshifted.
|
|
143
144
|
*
|
|
144
145
|
* @example
|
|
145
146
|
* // import { ta } from "@invinite-org/chartlang-runtime";
|
package/dist/ta/adx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adx.js","sourceRoot":"","sources":["../../src/ta/adx.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adx.js","sourceRoot":"","sources":["../../src/ta/adx.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/adx.ts\n// plus lib/wilder-directional.ts + 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// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape. ADX reads `bar.high` / `bar.low` /\n// `bar.close` directly (mirrors Pine's `ta.adx(length)` — no source\n// param) and runs the Wilder DI smoothing AND the DX → Wilder-\n// smoothed ADX recurrence incrementally via `wilderStep` (the same\n// per-step recurrence the reference helpers\n// `lib/wilderDirectional.ts` + `lib/adxFromDi.ts` use internally).\n\nimport type { AdxOpts, Series } from \"@invinite-org/chartlang-core\";\n\nimport {\n advanceDirectionalClose,\n initDirectionalState,\n tickDirectional,\n} from \"./lib/directionalState.js\";\nimport { Float64RingBuffer } from \"../ringBuffer.js\";\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView, makeShiftedSeriesView } from \"../seriesView.js\";\nimport { wilderStep } from \"./lib/wilderSmoothing.js\";\n\nconst DEFAULT_SMOOTHING = 14;\n\ntype AdxSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n readonly smoothingLength: number;\n readonly dirState: ReturnType<typeof initDirectionalState>;\n /** Running sum of DX samples while the ADX seed window fills. */\n dxSeed: number;\n /** Number of DX samples folded into the seed (0..smoothingLength). */\n dxSeedCount: number;\n /** Wilder-smoothed ADX. NaN until the DX seed completes. */\n adx: number;\n /** ADX as of the prior closed bar — used by tick-mode replay. */\n prevClosedAdx: number;\n /** DX seed accumulator + count as of the prior closed bar — used by\n * tick replay when the seed window is still filling. */\n prevClosedDxSeed: number;\n prevClosedDxSeedCount: number;\n /** Per-offset Series-view cache; see `sma.ts` for the convention. */\n readonly shiftedViews: Map<number, Series<number>>;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.adx called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(length: number, smoothingLength: number, capacity: number): AdxSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n smoothingLength,\n dirState: initDirectionalState(length),\n dxSeed: 0,\n dxSeedCount: 0,\n adx: Number.NaN,\n prevClosedAdx: Number.NaN,\n prevClosedDxSeed: 0,\n prevClosedDxSeedCount: 0,\n shiftedViews: new Map(),\n };\n}\n\nfunction viewForOffset(slot: AdxSlot, offset: number): Series<number> {\n if (offset === 0) return slot.series;\n let view = slot.shiftedViews.get(offset);\n if (view === undefined) {\n view = makeShiftedSeriesView<number>(slot.outBuffer, offset);\n slot.shiftedViews.set(offset, view);\n }\n return view;\n}\n\nfunction dxFromDi(plusDi: number, minusDi: number): number {\n const sum = plusDi + minusDi;\n if (sum === 0) return 0;\n return (100 * Math.abs(plusDi - minusDi)) / sum;\n}\n\nfunction closeValue(slot: AdxSlot, high: number, low: number, close: number): number {\n if (!Number.isFinite(high) || !Number.isFinite(low) || !Number.isFinite(close)) {\n // NaN inputs: do not advance the DI / DX recurrence. Hold the\n // prior ADX forward (matches `atr.ts` / `rsi.ts` NaN-input\n // semantics). The DI helper's own NaN handling already returns\n // the held-forward DI, but folding the held-DI into a fresh DX\n // would falsely advance the ADX recurrence.\n return Number.isFinite(slot.adx) ? slot.adx : Number.NaN;\n }\n const { plusDi, minusDi } = advanceDirectionalClose(slot.dirState, high, low, close);\n if (!Number.isFinite(plusDi) || !Number.isFinite(minusDi)) {\n // DI still in warmup — capture prior state for tick replay.\n slot.prevClosedAdx = slot.adx;\n slot.prevClosedDxSeed = slot.dxSeed;\n slot.prevClosedDxSeedCount = slot.dxSeedCount;\n return Number.NaN;\n }\n const dx = dxFromDi(plusDi, minusDi);\n // Capture prior state BEFORE folding this close into the DX seed.\n slot.prevClosedAdx = slot.adx;\n slot.prevClosedDxSeed = slot.dxSeed;\n slot.prevClosedDxSeedCount = slot.dxSeedCount;\n\n if (slot.dxSeedCount < slot.smoothingLength) {\n slot.dxSeed += dx;\n slot.dxSeedCount += 1;\n if (slot.dxSeedCount === slot.smoothingLength) {\n slot.adx = slot.dxSeed / slot.smoothingLength;\n return slot.adx;\n }\n return Number.NaN;\n }\n slot.adx = wilderStep(slot.adx, dx, slot.smoothingLength);\n return slot.adx;\n}\n\nfunction tickValue(slot: AdxSlot, high: number, low: number, close: number): number {\n const { plusDi, minusDi } = tickDirectional(slot.dirState, high, low, close);\n if (!Number.isFinite(plusDi) || !Number.isFinite(minusDi)) {\n // Defensive: `tickDirectional` returns NaN only when the\n // directional-state warmup has not completed (barCount <\n // length + 1) — and at that point `slot.adx` is still NaN\n // (adx warms strictly later than DI). So `Number.isFinite(slot.adx)`\n // is always false on this branch; kept for safety.\n return /* c8 ignore next */ Number.isFinite(slot.adx) ? slot.adx : Number.NaN;\n }\n const dx = dxFromDi(plusDi, minusDi);\n // Defensive: the close-side advance runs first on every bar and\n // raises `prevClosedDxSeedCount` to `smoothingLength` once the\n // seed window completes. The tick-side never observes a partial\n // DX-seed window because the bar that completes it has already\n // committed its close-side increment by the time `tickValue` runs.\n /* c8 ignore start */\n if (slot.prevClosedDxSeedCount < slot.smoothingLength) {\n const provisionalCount = slot.prevClosedDxSeedCount + 1;\n if (provisionalCount < slot.smoothingLength) return Number.NaN;\n return (slot.prevClosedDxSeed + dx) / slot.smoothingLength;\n }\n /* c8 ignore stop */\n return wilderStep(slot.prevClosedAdx, dx, slot.smoothingLength);\n}\n\n/**\n * Wilder's Average Directional Index — single-line trend-strength\n * oscillator bounded in `[0, 100]`. Reads `bar.high` / `bar.low` /\n * `bar.close` directly (mirrors Pine's `ta.adx(length)` — no source\n * param). Composes onto the same Wilder directional-movement\n * recurrence `ta.dmi` runs (`+DI` / `−DI` from Wilder-smoothed `+DM`\n * / `−DM` / TR), then folds DX = `100 · |+DI − −DI| / (+DI + −DI)`\n * into a second Wilder-smoothing window of length\n * `opts.smoothing` (default `14`).\n *\n * @formula +DI, −DI per `ta.dmi(length)` ;\n * DX[t] = (+DI + −DI) === 0 ? 0 : 100 · |+DI − −DI| / (+DI + −DI) ;\n * seed at first defined ADX bar = mean(DX over `smoothing` samples) ;\n * ADX[t] = wilderStep(ADX[t−1], DX[t], smoothing)\n * @warmup length + smoothing − 1\n * @anchors length, smoothing\n * @since 0.2\n * @stable\n *\n * `opts.offset` is a presentation display shift carried to the plot\n * emission as `xShift` (`+n` right / future, `−n` left / past); the\n * series value is unshifted.\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-runtime\";\n * // const a = ta.adx(\"slot\", 14);\n * // plot(a);\n * // const lagged = ta.adx(\"slot2\", 14, { offset: 5 });\n */\nexport function adx(slotId: string, length: number, opts?: AdxOpts): Series<number> {\n const ctx = getCtx();\n const smoothingLength = opts?.smoothing ?? DEFAULT_SMOOTHING;\n let slot = ctx.stream.taSlots.get(slotId) as AdxSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(length, smoothingLength, ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const bar = ctx.stream.bar;\n if (ctx.isTick) {\n slot.outBuffer.replaceHead(tickValue(slot, bar.high, bar.low, bar.close));\n } else {\n slot.outBuffer.append(closeValue(slot, bar.high, bar.low, bar.close));\n }\n return viewForOffset(slot, opts?.offset ?? 0);\n}\n"]}
|
package/dist/ta/alma.d.ts
CHANGED
|
@@ -11,10 +11,12 @@ import { type ScalarOrSeries } from "./lib/sourceValue.js";
|
|
|
11
11
|
* weighted-window convention).
|
|
12
12
|
*
|
|
13
13
|
* **`opts.offset` is the Gaussian-centre position in `[0, 1]`**, NOT
|
|
14
|
-
* the universal bar-shift.
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* `
|
|
14
|
+
* the universal bar-shift. ALMA's universal shift lives on the distinct
|
|
15
|
+
* `opts.barShift` field: a presentation display shift (`+n` renders the
|
|
16
|
+
* series `n` bars right / future, `−n` `n` bars left / past) carried to
|
|
17
|
+
* the plot emission as `xShift`. It does not transform the series value —
|
|
18
|
+
* `series.current` is unshifted, matching every other primitive's
|
|
19
|
+
* `opts.offset`.
|
|
18
20
|
*
|
|
19
21
|
* @formula m = offset · (length − 1) ;
|
|
20
22
|
* s = length / sigma ;
|
package/dist/ta/alma.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alma.d.ts","sourceRoot":"","sources":["../../src/ta/alma.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAKrE,OAAO,EAAE,KAAK,cAAc,EAAmB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"alma.d.ts","sourceRoot":"","sources":["../../src/ta/alma.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAKrE,OAAO,EAAE,KAAK,cAAc,EAAmB,MAAM,sBAAsB,CAAC;AAoG5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,IAAI,CAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,QAAQ,GAChB,MAAM,CAAC,MAAM,CAAC,CAmBhB"}
|
package/dist/ta/alma.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/alma.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. The ALMA `offset` opt is the Gaussian centre
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// which lives on `opts.barShift`.
|
|
13
13
|
import { Float64RingBuffer } from "../ringBuffer.js";
|
|
14
14
|
import { ACTIVE_RUNTIME_CONTEXT } from "../runtimeContext.js";
|
|
15
|
-
import { makeSeriesView } from "../seriesView.js";
|
|
15
|
+
import { makeSeriesView, makeShiftedSeriesView } from "../seriesView.js";
|
|
16
16
|
import { readSourceValue } from "./lib/sourceValue.js";
|
|
17
17
|
const DEFAULT_OFFSET = 0.85;
|
|
18
18
|
const DEFAULT_SIGMA = 6;
|
|
@@ -42,8 +42,19 @@ function initSlot(length, offsetCentre, sigma, capacity) {
|
|
|
42
42
|
sourceWindow: new Float64RingBuffer(length),
|
|
43
43
|
weights,
|
|
44
44
|
normaliser,
|
|
45
|
+
shiftedViews: new Map(),
|
|
45
46
|
};
|
|
46
47
|
}
|
|
48
|
+
function viewForOffset(slot, barShift) {
|
|
49
|
+
if (barShift === 0)
|
|
50
|
+
return slot.series;
|
|
51
|
+
let view = slot.shiftedViews.get(barShift);
|
|
52
|
+
if (view === undefined) {
|
|
53
|
+
view = makeShiftedSeriesView(slot.outBuffer, barShift);
|
|
54
|
+
slot.shiftedViews.set(barShift, view);
|
|
55
|
+
}
|
|
56
|
+
return view;
|
|
57
|
+
}
|
|
47
58
|
function weightedFromWindow(slot, headOverride) {
|
|
48
59
|
let sum = 0;
|
|
49
60
|
for (let j = 0; j < slot.length; j += 1) {
|
|
@@ -82,10 +93,12 @@ function tickValue(slot, src) {
|
|
|
82
93
|
* weighted-window convention).
|
|
83
94
|
*
|
|
84
95
|
* **`opts.offset` is the Gaussian-centre position in `[0, 1]`**, NOT
|
|
85
|
-
* the universal bar-shift.
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* `
|
|
96
|
+
* the universal bar-shift. ALMA's universal shift lives on the distinct
|
|
97
|
+
* `opts.barShift` field: a presentation display shift (`+n` renders the
|
|
98
|
+
* series `n` bars right / future, `−n` `n` bars left / past) carried to
|
|
99
|
+
* the plot emission as `xShift`. It does not transform the series value —
|
|
100
|
+
* `series.current` is unshifted, matching every other primitive's
|
|
101
|
+
* `opts.offset`.
|
|
89
102
|
*
|
|
90
103
|
* @formula m = offset · (length − 1) ;
|
|
91
104
|
* s = length / sigma ;
|
|
@@ -116,6 +129,6 @@ export function alma(slotId, source, length, opts) {
|
|
|
116
129
|
else {
|
|
117
130
|
slot.outBuffer.append(closeValue(slot, src));
|
|
118
131
|
}
|
|
119
|
-
return slot
|
|
132
|
+
return viewForOffset(slot, opts?.barShift ?? 0);
|
|
120
133
|
}
|
|
121
134
|
//# sourceMappingURL=alma.js.map
|
package/dist/ta/alma.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alma.js","sourceRoot":"","sources":["../../src/ta/alma.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"alma.js","sourceRoot":"","sources":["../../src/ta/alma.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,uEAAuE;AACvE,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAChB,qEAAqE;AACrE,4DAA4D;AAC5D,sEAAsE;AACtE,oEAAoE;AACpE,kCAAkC;AAIlC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAuB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAuB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5E,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,aAAa,GAAG,CAAC,CAAC;AA6BxB,SAAS,MAAM;IACX,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,YAAoB,EAAE,KAAa,EAAE,QAAgB;IACnF,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,YAAY,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACf,UAAU,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO;QACH,SAAS;QACT,MAAM,EAAE,cAAc,CAAS,SAAS,CAAC;QACzC,MAAM;QACN,YAAY,EAAE,IAAI,iBAAiB,CAAC,MAAM,CAAC;QAC3C,OAAO;QACP,UAAU;QACV,YAAY,EAAE,IAAI,GAAG,EAAE;KAC1B,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CAAC,IAAc,EAAE,QAAgB;IACnD,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC;IACvC,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,IAAI,GAAG,qBAAqB,CAAS,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC/D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAc,EAAE,YAAqB;IAC7D,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,iEAAiE;QACjE,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,GACH,WAAW,KAAK,CAAC,IAAI,YAAY,KAAK,SAAS;YAC3C,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC;QAC3C,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,IAAc,EAAE,GAAW;IAC3C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC9D,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,SAAS,CAAC,IAAc,EAAE,GAAW;IAC1C,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC9D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC7C,OAAO,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,IAAI,CAChB,MAAc,EACd,MAAsB,EACtB,MAAc,EACd,IAAe;IAEf,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAyB,CAAC;IAClE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,IAAI,GAAG,QAAQ,CACX,MAAM,EACN,IAAI,EAAE,MAAM,IAAI,cAAc,EAC9B,IAAI,EAAE,KAAK,IAAI,aAAa,EAC5B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAClC,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,IAAI,CAAC,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/alma.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 ALMA `offset` opt is the Gaussian centre\n// in `[0, 1]` (default 0.85), distinct from the universal bar-shift\n// which lives on `opts.barShift`.\n\nimport type { AlmaOpts, Series } 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 { type ScalarOrSeries, readSourceValue } from \"./lib/sourceValue.js\";\n\nconst DEFAULT_OFFSET = 0.85;\nconst DEFAULT_SIGMA = 6;\n\ntype AlmaSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n readonly length: number;\n /**\n * Trailing `length` source values; `at(0)` is the head (most\n * recent), `at(length - 1)` is the oldest still in the window.\n */\n readonly sourceWindow: Float64RingBuffer;\n /**\n * Pre-computed Gaussian weights. `weights[j]` aligns with the\n * j-th OLDEST window entry (i.e. `window.at(length - 1 - j)`) so\n * `j = length - 1` weights the head and `j = 0` weights the\n * oldest — matches the invinite reference's `computeAlma` loop.\n */\n readonly weights: Float64Array;\n readonly normaliser: number;\n /**\n * Lazy cache of `barShift`-tagged Series views keyed by\n * `opts.barShift`. `barShift === 0` callers bypass this map and\n * return `series` directly — identity-preserving. ALMA's `opts.offset`\n * is the Gaussian centre, NOT the universal shift, so it is never\n * tagged here; the bidirectional display shift lives on `barShift`.\n */\n readonly shiftedViews: Map<number, Series<number>>;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.alma called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(length: number, offsetCentre: number, sigma: number, capacity: number): AlmaSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n const m = offsetCentre * (length - 1);\n const s = length / sigma;\n const weights = new Float64Array(length);\n let normaliser = 0;\n for (let j = 0; j < length; j += 1) {\n const d = j - m;\n const w = Math.exp(-(d * d) / (2 * s * s));\n weights[j] = w;\n normaliser += w;\n }\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n length,\n sourceWindow: new Float64RingBuffer(length),\n weights,\n normaliser,\n shiftedViews: new Map(),\n };\n}\n\nfunction viewForOffset(slot: AlmaSlot, barShift: number): Series<number> {\n if (barShift === 0) return slot.series;\n let view = slot.shiftedViews.get(barShift);\n if (view === undefined) {\n view = makeShiftedSeriesView<number>(slot.outBuffer, barShift);\n slot.shiftedViews.set(barShift, view);\n }\n return view;\n}\n\nfunction weightedFromWindow(slot: AlmaSlot, headOverride?: number): number {\n let sum = 0;\n for (let j = 0; j < slot.length; j += 1) {\n // j = 0 → oldest (window.at(length - 1)); j = length - 1 → head.\n const ageFromHead = slot.length - 1 - j;\n const v =\n ageFromHead === 0 && headOverride !== undefined\n ? headOverride\n : slot.sourceWindow.at(ageFromHead);\n if (!Number.isFinite(v)) return Number.NaN;\n sum += v * slot.weights[j];\n }\n return sum / slot.normaliser;\n}\n\nfunction closeValue(slot: AlmaSlot, src: number): number {\n slot.sourceWindow.append(src);\n if (slot.sourceWindow.length < slot.length) return Number.NaN;\n return weightedFromWindow(slot);\n}\n\nfunction tickValue(slot: AlmaSlot, src: number): number {\n if (slot.sourceWindow.length < slot.length) return Number.NaN;\n if (!Number.isFinite(src)) return Number.NaN;\n return weightedFromWindow(slot, src);\n}\n\n/**\n * Arnaud Legoux Moving Average — a Gaussian-weighted MA. Weights peak\n * at `offset · (length − 1)` (default `0.85 · (length − 1)`, near the\n * recent end of the window) and decay with standard deviation\n * `length / sigma` (default `length / 6`). Weights are pre-computed\n * once at slot init from `opts.offset` + `opts.sigma`; per-bar cost is\n * an O(length) window walk. A NaN anywhere in the window\n * short-circuits the output to NaN (matches the WMA full-recompute\n * weighted-window convention).\n *\n * **`opts.offset` is the Gaussian-centre position in `[0, 1]`**, NOT\n * the universal bar-shift. ALMA's universal shift lives on the distinct\n * `opts.barShift` field: a presentation display shift (`+n` renders the\n * series `n` bars right / future, `−n` `n` bars left / past) carried to\n * the plot emission as `xShift`. It does not transform the series value —\n * `series.current` is unshifted, matching every other primitive's\n * `opts.offset`.\n *\n * @formula m = offset · (length − 1) ;\n * s = length / sigma ;\n * w[j] = exp(−((j − m)² / (2 · s²))) for j = 0..length − 1 ;\n * norm = Σ w[j] ;\n * out[t] = (Σ_{j=0..length-1} w[j] · src[t − length + 1 + j]) / norm\n * @warmup length − 1\n * @anchors offset, sigma\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const a = ta.alma(bar.close, 9, { offset: 0.85, sigma: 6 });\n * // plot(a);\n */\nexport function alma(\n slotId: string,\n source: ScalarOrSeries,\n length: number,\n opts?: AlmaOpts,\n): Series<number> {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as AlmaSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(\n length,\n opts?.offset ?? DEFAULT_OFFSET,\n opts?.sigma ?? DEFAULT_SIGMA,\n ctx.stream.ohlcv.close.capacity,\n );\n ctx.stream.taSlots.set(slotId, slot);\n }\n const src = readSourceValue(source);\n if (ctx.isTick) {\n slot.outBuffer.replaceHead(tickValue(slot, src));\n } else {\n slot.outBuffer.append(closeValue(slot, src));\n }\n return viewForOffset(slot, opts?.barShift ?? 0);\n}\n"]}
|