@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/ta/tsi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tsi.js","sourceRoot":"","sources":["../../src/ta/tsi.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"tsi.js","sourceRoot":"","sources":["../../src/ta/tsi.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/tsi.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\nimport type { TsiOpts, TsiResult } 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 { ema } from \"./ema.js\";\nimport { type ScalarOrSeries, readSourceValue } from \"./lib/sourceValue.js\";\n\nconst DEFAULT_FIRST = 25;\nconst DEFAULT_SECOND = 13;\nconst DEFAULT_SIGNAL = 13;\n\ntype TsiSlot = {\n readonly result: TsiResult;\n readonly tsiBuf: Float64RingBuffer;\n readonly signalBuf: Float64RingBuffer;\n readonly shiftedResults: Map<number, TsiResult>;\n prevSrc: number;\n prevClosedSrc: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.tsi called outside an active script step\");\n }\n return ctx;\n}\n\nfunction resultForOffset(slot: TsiSlot, offset: number): TsiResult {\n if (offset === 0) return slot.result;\n let cached = slot.shiftedResults.get(offset);\n if (cached === undefined) {\n cached = Object.freeze({\n tsi: makeShiftedSeriesView<number>(slot.tsiBuf, offset),\n signal: makeShiftedSeriesView<number>(slot.signalBuf, offset),\n });\n slot.shiftedResults.set(offset, cached);\n }\n return cached;\n}\n\nfunction tsiValue(num: number, den: number): number {\n if (!Number.isFinite(num) || !Number.isFinite(den) || den === 0) return Number.NaN;\n return (100 * num) / den;\n}\n\n/**\n * True Strength Index (William Blau). Double-EMA-smoothed ratio of\n * one-bar price changes vs their absolute values, scaled ×100. Per\n * TradingView's published formula:\n *\n * `mom = source[t] − source[t-1]`\n * `absMom = |mom|`\n * `ema1 = EMA(firstSmoothing)(mom)`\n * `ema2 = EMA(secondSmoothing)(ema1)`\n * `absEma1 = EMA(firstSmoothing)(absMom)`\n * `absEma2 = EMA(secondSmoothing)(absEma1)`\n * `tsi = 100 × ema2 / absEma2`\n * `signal = EMA(signalLength)(tsi)`\n *\n * Bounded `[-100, 100]` by construction (when defined). Flat-input\n * windows where `absEma2` collapses to zero emit NaN at `tsi` (and\n * propagate to `signal`). Defaults `(firstSmoothing, secondSmoothing,\n * signalLength) = (25, 13, 13)`.\n *\n * Note: Pine's `ta.tsi()` returns the raw `ema2 / absEma2` ratio\n * (no ×100). chartlang follows TradingView's published TSI study\n * (×100); for the raw ratio, divide by 100.\n *\n * @formula see above\n * @warmup firstSmoothing + secondSmoothing + signalLength − 3\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-runtime\";\n * // const t = ta.tsi(\"slot\", bar.close);\n * // plot(t.tsi); plot(t.signal);\n */\nexport function tsi(slotId: string, source: ScalarOrSeries, opts?: TsiOpts): TsiResult {\n const ctx = getCtx();\n const firstSmoothing = opts?.firstSmoothing ?? DEFAULT_FIRST;\n const secondSmoothing = opts?.secondSmoothing ?? DEFAULT_SECOND;\n const signalLength = opts?.signalLength ?? DEFAULT_SIGNAL;\n const offset = opts?.offset ?? 0;\n const signalSlotId = `${slotId}/signal`;\n const isTick = ctx.isTick;\n const src = readSourceValue(source);\n\n let slot = ctx.stream.taSlots.get(slotId) as TsiSlot | undefined;\n // The `?? Number.NaN` fallbacks below are defensive: the runner\n // always close-side advances before tick, so `slot` exists by the\n // time `isTick` is true; on close-side the first-bar `slot` is\n // still undefined and we want NaN momentum (no prior bar).\n const prevForDiff = isTick\n ? /* c8 ignore next */ (slot?.prevClosedSrc ?? Number.NaN)\n : (slot?.prevSrc ?? Number.NaN);\n const mom =\n Number.isFinite(src) && Number.isFinite(prevForDiff) ? src - prevForDiff : Number.NaN;\n const absMom = Number.isFinite(mom) ? Math.abs(mom) : Number.NaN;\n\n const momEma1 = ema(`${slotId}/momEma1`, mom, firstSmoothing).current;\n const momEma2 = ema(`${slotId}/momEma2`, momEma1, secondSmoothing).current;\n const absEma1 = ema(`${slotId}/absMomEma1`, absMom, firstSmoothing).current;\n const absEma2 = ema(`${slotId}/absMomEma2`, absEma1, secondSmoothing).current;\n const tsiOut = tsiValue(momEma2, absEma2);\n\n const signalSeries = ema(signalSlotId, tsiOut, signalLength);\n\n if (slot === undefined) {\n const tsiBuf = new Float64RingBuffer(ctx.stream.ohlcv.close.capacity);\n const emaSlot = ctx.stream.taSlots.get(signalSlotId) as {\n outBuffer: Float64RingBuffer;\n };\n slot = {\n result: Object.freeze({\n tsi: makeSeriesView<number>(tsiBuf),\n signal: signalSeries,\n }),\n tsiBuf,\n signalBuf: emaSlot.outBuffer,\n shiftedResults: new Map(),\n prevSrc: src,\n prevClosedSrc: Number.NaN,\n };\n ctx.stream.taSlots.set(slotId, slot);\n slot.tsiBuf.append(tsiOut);\n return resultForOffset(slot, offset);\n }\n\n if (isTick) {\n slot.tsiBuf.replaceHead(tsiOut);\n } else {\n slot.tsiBuf.append(tsiOut);\n slot.prevClosedSrc = slot.prevSrc;\n slot.prevSrc = src;\n }\n\n return resultForOffset(slot, offset);\n}\n"]}
|
package/dist/ta/ulcerIndex.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/ulcer-index.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. Composes `ta.highest` via the sub-slot id
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ulcerIndex.js","sourceRoot":"","sources":["../../src/ta/ulcerIndex.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,8EAA8E;AAC9E,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"ulcerIndex.js","sourceRoot":"","sources":["../../src/ta/ulcerIndex.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,8EAA8E;AAC9E,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAChB,qEAAqE;AACrE,4DAA4D;AAC5D,mEAAmE;AACnE,2DAA2D;AAI3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAuB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAuB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAiB5E,SAAS,MAAM;IACX,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,MAAc,EAAE,QAAgB;IAC9D,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,OAAO;QACH,SAAS;QACT,MAAM,EAAE,cAAc,CAAS,SAAS,CAAC;QACzC,MAAM;QACN,UAAU,EAAE,GAAG,MAAM,UAAU;QAC/B,gBAAgB,EAAE,IAAI,iBAAiB,CAAC,MAAM,CAAC;QAC/C,aAAa,EAAE,CAAC;KACnB,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,GAAW,EAAE,MAAc;IAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACpE,OAAO,MAAM,CAAC,GAAG,CAAC;IACtB,CAAC;IACD,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;IAC3C,OAAO,EAAE,GAAG,EAAE,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,IAAoB,EAAE,GAAW,EAAE,MAAc;IACjE,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,4DAA4D;QAC5D,4DAA4D;QAC5D,qCAAqC;QACrC,OAAO,MAAM,CAAC,GAAG,CAAC;IACtB,CAAC;IACD,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/C,+CAA+C;QAC/C,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;IAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,SAAS,CAAC,IAAoB,EAAE,GAAW,EAAE,MAAc;IAChE,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC1D,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC9C,8DAA8D;IAC9D,oEAAoE;IACpE,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,GAAG,MAAM,GAAG,IAAI,CAAC;IAClD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,UAAU,CACtB,MAAc,EACd,MAAsB,EACtB,MAAc,EACd,KAAsB;IAEtB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAA+B,CAAC;IACxE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACjE,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,+DAA+D;IAC/D,6BAA6B;IAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;IACjC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,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/ulcer-index.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. Composes `ta.highest` via the sub-slot id\n// `${slotId}/highest` so a fix to `highest` flows through.\n\nimport type { Series, UlcerIndexOpts } 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 { highest } from \"./highest.js\";\nimport { type ScalarOrSeries, readSourceValue } from \"./lib/sourceValue.js\";\n\ntype UlcerIndexSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n readonly length: number;\n /** Sub-slot id passed to `ta.highest` for the rolling-max term. */\n readonly highestSub: string;\n /**\n * Closed-bar `drawdown_pct^2` values across the trailing `length`\n * bars (capacity `length`). `at(0)` is the head; older slots index\n * upward.\n */\n readonly drawdownSqWindow: Float64RingBuffer;\n sumDrawdownSq: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.ulcerIndex called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(slotId: string, length: number, capacity: number): UlcerIndexSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n length,\n highestSub: `${slotId}/highest`,\n drawdownSqWindow: new Float64RingBuffer(length),\n sumDrawdownSq: 0,\n };\n}\n\nfunction drawdownSquared(src: number, maxSrc: number): number {\n if (!Number.isFinite(src) || !Number.isFinite(maxSrc) || maxSrc === 0) {\n return Number.NaN;\n }\n const dd = (100 * (src - maxSrc)) / maxSrc;\n return dd * dd;\n}\n\nfunction closeValue(slot: UlcerIndexSlot, src: number, maxSrc: number): number {\n const ddSq = drawdownSquared(src, maxSrc);\n if (!Number.isFinite(ddSq)) {\n // Per task spec §6 (NaN handling): NaN source → NaN output.\n // Do NOT advance the window — preserves the previous closed\n // state for the next bar to consume.\n return Number.NaN;\n }\n if (slot.drawdownSqWindow.length === slot.length) {\n // Window full: evict the oldest before append.\n slot.sumDrawdownSq -= slot.drawdownSqWindow.at(slot.length - 1);\n }\n slot.drawdownSqWindow.append(ddSq);\n slot.sumDrawdownSq += ddSq;\n return Math.sqrt(slot.sumDrawdownSq / slot.drawdownSqWindow.length);\n}\n\nfunction tickValue(slot: UlcerIndexSlot, src: number, maxSrc: number): number {\n if (slot.drawdownSqWindow.length === 0) return Number.NaN;\n const ddSq = drawdownSquared(src, maxSrc);\n if (!Number.isFinite(ddSq)) return Number.NaN;\n // Substitute the tick's ddSq for the head slot's ddSq without\n // mutating the closed window. Hypothetical sum = sum − head + tick.\n const headSq = slot.drawdownSqWindow.at(0);\n const hypSum = slot.sumDrawdownSq - headSq + ddSq;\n return Math.sqrt(hypSum / slot.drawdownSqWindow.length);\n}\n\n/**\n * Ulcer Index — drawdown-based volatility. The trailing-window RMS of\n * `drawdown_pct[t] = 100 · (source[t] − highest(source, length)[t]) /\n * highest(source, length)[t]`. Composes `ta.highest` via the sub-slot\n * id `${slotId}/highest` so a fix to `highest` flows through. Always\n * non-negative.\n *\n * NaN sources (or zero rolling-max) emit NaN and do NOT advance the\n * window — the next bar's drawdown is computed against the still-valid\n * prior state.\n *\n * **Warmup ramp.** The first defined output lands at bar `length − 1`\n * (when `highest(source, length)` first emits). Up to bar `2·(length −\n * 1)` the window is partially populated and the RMS divides by the\n * actual `window.length`; from bar `2·(length − 1)` onward the window\n * is fully warm and the RMS uses the full `length` denominator. This\n * matches the task spec's `length − 1` warmup pin.\n *\n * @formula highVal[t] = max(source[t − length + 1 .. t]) ;\n * dd[t] = 100 · (source[t] − highVal[t]) / highVal[t] ;\n * out[t] = sqrt(mean(dd^2 over the last `length` finite bars))\n * @warmup length − 1\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const ui = ta.ulcerIndex(bar.close, 14);\n * // plot(ui);\n */\nexport function ulcerIndex(\n slotId: string,\n source: ScalarOrSeries,\n length: number,\n _opts?: UlcerIndexOpts,\n): Series<number> {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as UlcerIndexSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(slotId, length, ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const src = readSourceValue(source);\n // Compose: `highest` respects `ctx.isTick`. The sub-slot id is\n // stable per parent slot id.\n const maxSeries = highest(slot.highestSub, source, length);\n const maxSrc = maxSeries.current;\n if (ctx.isTick) {\n slot.outBuffer.replaceHead(tickValue(slot, src, maxSrc));\n } else {\n slot.outBuffer.append(closeValue(slot, src, maxSrc));\n }\n return slot.series;\n}\n"]}
|
package/dist/ta/ultimateOsc.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/ultimate-osc.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. Ultimate Oscillator derives from
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ultimateOsc.js","sourceRoot":"","sources":["../../src/ta/ultimateOsc.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ultimateOsc.js","sourceRoot":"","sources":["../../src/ta/ultimateOsc.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/ultimate-osc.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. Ultimate Oscillator derives from\n// `bar.high` / `bar.low` / `bar.close` directly (no `source` arg).\n// Three pairs of (buying-pressure, true-range) ring buffers + running\n// sums — one pair per (shortLength | mediumLength | longLength)\n// window. Zero-TR-window emits `NaN`.\n\nimport type { Series, UltimateOscOpts } 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_SHORT_LENGTH = 7;\nconst DEFAULT_MEDIUM_LENGTH = 14;\nconst DEFAULT_LONG_LENGTH = 28;\n\ntype UltimateOscSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n readonly shortLength: number;\n readonly mediumLength: number;\n readonly longLength: number;\n readonly bpShort: Float64RingBuffer;\n readonly bpMedium: Float64RingBuffer;\n readonly bpLong: Float64RingBuffer;\n readonly trShort: Float64RingBuffer;\n readonly trMedium: Float64RingBuffer;\n readonly trLong: Float64RingBuffer;\n sumBpShort: number;\n sumBpMedium: number;\n sumBpLong: number;\n sumTrShort: number;\n sumTrMedium: number;\n sumTrLong: number;\n /** Number of closed bars folded into the slot so far. */\n barCount: number;\n /** Close of the most recent closed bar — used by tick mode. */\n prevClose: number;\n /** Close of the bar before the most recent closed bar — used by tick mode. */\n prevPrevClose: number;\n /** bp / tr of the most recent closed bar (per window) — used by tick mode. */\n headBpShort: number;\n headBpMedium: number;\n headBpLong: number;\n headTrShort: number;\n headTrMedium: number;\n headTrLong: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.ultimateOsc called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(\n shortLength: number,\n mediumLength: number,\n longLength: number,\n capacity: number,\n): UltimateOscSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n shortLength,\n mediumLength,\n longLength,\n bpShort: new Float64RingBuffer(shortLength),\n bpMedium: new Float64RingBuffer(mediumLength),\n bpLong: new Float64RingBuffer(longLength),\n trShort: new Float64RingBuffer(shortLength),\n trMedium: new Float64RingBuffer(mediumLength),\n trLong: new Float64RingBuffer(longLength),\n sumBpShort: 0,\n sumBpMedium: 0,\n sumBpLong: 0,\n sumTrShort: 0,\n sumTrMedium: 0,\n sumTrLong: 0,\n barCount: 0,\n prevClose: Number.NaN,\n prevPrevClose: Number.NaN,\n headBpShort: 0,\n headBpMedium: 0,\n headBpLong: 0,\n headTrShort: 0,\n headTrMedium: 0,\n headTrLong: 0,\n };\n}\n\nfunction computeBpTr(\n high: number,\n low: number,\n close: number,\n prevClose: number,\n): [number, number] {\n // First bar (no prevClose) — invinite seeds bp = tr = 0 so the\n // running sums kick off at zero. We mirror that.\n if (!Number.isFinite(prevClose)) return [0, 0];\n const trueLow = Math.min(low, prevClose);\n const trueHigh = Math.max(high, prevClose);\n return [close - trueLow, trueHigh - trueLow];\n}\n\nfunction pushToWindow(\n ring: Float64RingBuffer,\n sum: number,\n incoming: number,\n capacity: number,\n): { newSum: number; outgoing: number } {\n let outgoing = 0;\n if (ring.length >= capacity) {\n outgoing = ring.at(capacity - 1);\n }\n ring.append(incoming);\n return { newSum: sum + incoming - outgoing, outgoing };\n}\n\nfunction uoFromSums(\n sumBpShort: number,\n sumTrShort: number,\n sumBpMedium: number,\n sumTrMedium: number,\n sumBpLong: number,\n sumTrLong: number,\n): number {\n if (sumTrShort === 0 || sumTrMedium === 0 || sumTrLong === 0) return Number.NaN;\n const avgShort = sumBpShort / sumTrShort;\n const avgMedium = sumBpMedium / sumTrMedium;\n const avgLong = sumBpLong / sumTrLong;\n return (100 * (4 * avgShort + 2 * avgMedium + avgLong)) / 7;\n}\n\nfunction closeValue(slot: UltimateOscSlot, high: number, low: number, close: number): number {\n if (!Number.isFinite(high) || !Number.isFinite(low) || !Number.isFinite(close)) {\n // Hold prior — do not advance window state; emit NaN if unwarmed.\n /* c8 ignore next */\n if (slot.barCount < slot.longLength) return Number.NaN;\n return uoFromSums(\n slot.sumBpShort,\n slot.sumTrShort,\n slot.sumBpMedium,\n slot.sumTrMedium,\n slot.sumBpLong,\n slot.sumTrLong,\n );\n }\n const [bp, tr] = computeBpTr(high, low, close, slot.prevClose);\n const short = pushToWindow(slot.bpShort, slot.sumBpShort, bp, slot.shortLength);\n slot.sumBpShort = short.newSum;\n const medium = pushToWindow(slot.bpMedium, slot.sumBpMedium, bp, slot.mediumLength);\n slot.sumBpMedium = medium.newSum;\n const long = pushToWindow(slot.bpLong, slot.sumBpLong, bp, slot.longLength);\n slot.sumBpLong = long.newSum;\n const trShort = pushToWindow(slot.trShort, slot.sumTrShort, tr, slot.shortLength);\n slot.sumTrShort = trShort.newSum;\n const trMedium = pushToWindow(slot.trMedium, slot.sumTrMedium, tr, slot.mediumLength);\n slot.sumTrMedium = trMedium.newSum;\n const trLong = pushToWindow(slot.trLong, slot.sumTrLong, tr, slot.longLength);\n slot.sumTrLong = trLong.newSum;\n\n slot.prevPrevClose = slot.prevClose;\n slot.prevClose = close;\n slot.barCount += 1;\n\n // Capture the new head's bp/tr per window for tick-mode replay.\n slot.headBpShort = bp;\n slot.headBpMedium = bp;\n slot.headBpLong = bp;\n slot.headTrShort = tr;\n slot.headTrMedium = tr;\n slot.headTrLong = tr;\n\n if (slot.barCount < slot.longLength) return Number.NaN;\n return uoFromSums(\n slot.sumBpShort,\n slot.sumTrShort,\n slot.sumBpMedium,\n slot.sumTrMedium,\n slot.sumBpLong,\n slot.sumTrLong,\n );\n}\n\nfunction tickValue(slot: UltimateOscSlot, high: number, low: number, close: number): number {\n if (slot.barCount < slot.longLength) return Number.NaN;\n if (!Number.isFinite(high) || !Number.isFinite(low) || !Number.isFinite(close)) {\n return uoFromSums(\n slot.sumBpShort,\n slot.sumTrShort,\n slot.sumBpMedium,\n slot.sumTrMedium,\n slot.sumBpLong,\n slot.sumTrLong,\n );\n }\n // The head bar's bp/tr were computed against prevPrevClose (the\n // close two bars ago). Replaying the head with the tick uses the\n // same prevPrevClose baseline.\n const [tickBp, tickTr] = computeBpTr(high, low, close, slot.prevPrevClose);\n return uoFromSums(\n slot.sumBpShort - slot.headBpShort + tickBp,\n slot.sumTrShort - slot.headTrShort + tickTr,\n slot.sumBpMedium - slot.headBpMedium + tickBp,\n slot.sumTrMedium - slot.headTrMedium + tickTr,\n slot.sumBpLong - slot.headBpLong + tickBp,\n slot.sumTrLong - slot.headTrLong + tickTr,\n );\n}\n\n/**\n * Larry Williams' Ultimate Oscillator. Sources from `bar.high` /\n * `bar.low` / `bar.close` directly (no `source` arg — matches Pine).\n * Weighted average of three buying-pressure / true-range ratios over\n * `shortLength` / `mediumLength` / `longLength` windows (defaults\n * `7` / `14` / `28`). Output bounded `[0, 100]` (or `NaN`).\n *\n * Zero-TR window (flat-line input over the long window) emits `NaN`.\n * The registry records `yDomain: { kind: \"fixed\", min: 0, max: 100 }`\n * via `TA_REGISTRY_METADATA`.\n *\n * @formula bp = close − min(low, prevClose) ;\n * tr = max(high, prevClose) − min(low, prevClose) ;\n * avgN = Σ bp[t − N + 1 .. t] / Σ tr[t − N + 1 .. t] ;\n * uo = 100 · (4 · avgShort + 2 · avgMedium + avgLong) / 7\n * @warmup longLength\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-runtime\";\n * // const u = ta.ultimateOsc(\"slot\");\n * // plot(u);\n */\nexport function ultimateOsc(slotId: string, opts?: UltimateOscOpts): Series<number> {\n const ctx = getCtx();\n const shortLength = opts?.shortLength ?? DEFAULT_SHORT_LENGTH;\n const mediumLength = opts?.mediumLength ?? DEFAULT_MEDIUM_LENGTH;\n const longLength = opts?.longLength ?? DEFAULT_LONG_LENGTH;\n let slot = ctx.stream.taSlots.get(slotId) as UltimateOscSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(shortLength, mediumLength, longLength, 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 slot.series;\n}\n"]}
|
package/dist/ta/valuewhen.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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
3
|
//
|
|
4
|
-
// No invinite source — semantics per Pine `ta.valuewhen`.
|
|
4
|
+
// No invinite source — semantics per Pine `ta.valuewhen`.
|
|
5
5
|
// Structural choices (callsite-id slot, Series<T> proxy, replaceHead
|
|
6
6
|
// mode) follow chartlang's primitive shape.
|
|
7
7
|
import { Float64RingBuffer } from "../ringBuffer.js";
|
package/dist/ta/valuewhen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valuewhen.js","sourceRoot":"","sources":["../../src/ta/valuewhen.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"valuewhen.js","sourceRoot":"","sources":["../../src/ta/valuewhen.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// No invinite source — semantics per Pine `ta.valuewhen`.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape.\n\nimport type { Series, ValuewhenOpts } 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\ntype ValuewhenSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n readonly shiftedSeries: Map<number, Series<number>>;\n readonly occurrence: number;\n readonly capacity: number;\n /**\n * Oldest-first source values at the last `occurrence + 1` matching\n * bars. Length grows to `capacity = occurrence + 1` and then the\n * front is shifted on each subsequent match.\n */\n ring: number[];\n /** Total matches ever seen across the stream. */\n matchCount: number;\n /** Snapshot of `ring` BEFORE the most recent close-side update. */\n prevRing: ReadonlyArray<number>;\n /** Snapshot of `matchCount` BEFORE the most recent close-side update. */\n prevMatchCount: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.valuewhen called outside an active script step\");\n }\n return ctx;\n}\n\nfunction readBoolean(condition: Series<boolean>): boolean {\n return condition.current;\n}\n\nfunction initSlot(occurrence: number, capacity: number): ValuewhenSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n const ringCapacity = occurrence + 1;\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n shiftedSeries: new Map(),\n occurrence,\n capacity: ringCapacity,\n ring: [],\n matchCount: 0,\n prevRing: [],\n prevMatchCount: 0,\n };\n}\n\nfunction emitFromState(\n occurrence: number,\n ring: ReadonlyArray<number>,\n matchCount: number,\n): number {\n if (matchCount < occurrence + 1) return Number.NaN;\n // The ring is oldest-first within its capacity (occurrence + 1).\n // The `occurrence`-th most recent match is the OLDEST entry in a\n // full ring — i.e. ring[0].\n return ring[0];\n}\n\nfunction closeValue(slot: ValuewhenSlot, src: number, fired: boolean): number {\n slot.prevRing = slot.ring.slice();\n slot.prevMatchCount = slot.matchCount;\n if (fired) {\n slot.ring.push(src);\n if (slot.ring.length > slot.capacity) slot.ring.shift();\n slot.matchCount += 1;\n }\n return emitFromState(slot.occurrence, slot.ring, slot.matchCount);\n}\n\nfunction tickValue(slot: ValuewhenSlot, src: number, fired: boolean): number {\n // Replay against the snapshot taken before the most recent close.\n const ring = slot.prevRing.slice();\n let count = slot.prevMatchCount;\n if (fired) {\n ring.push(src);\n if (ring.length > slot.capacity) ring.shift();\n count += 1;\n }\n return emitFromState(slot.occurrence, ring, count);\n}\n\n/**\n * Source value at the bar of the n-th most recent `condition === true`.\n * `occurrence === 0` returns the value at the most recent match;\n * `occurrence === 1` the second most recent; etc. NaN until\n * `occurrence + 1` matches have been seen.\n *\n * NaN-source at the matching bar produces NaN in the ring entry, which\n * surfaces as NaN once that entry is the one emitted. Matches NaN-source\n * semantics in Pine.\n *\n * @formula out[t] = source[bar of n-th most recent condition true],\n * NaN until `occurrence + 1` matches\n * @warmup bar of the `occurrence + 1`-th match (data-dependent)\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const fast = ta.sma(bar.close, 10);\n * // const slow = ta.sma(bar.close, 30);\n * // const onCross = ta.valuewhen(ta.crossover(fast, slow), bar.close);\n * // plot(onCross);\n */\nexport function valuewhen(\n slotId: string,\n condition: Series<boolean>,\n source: ScalarOrSeries,\n occurrence = 0,\n opts: ValuewhenOpts = {},\n): Series<number> {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as ValuewhenSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(occurrence, ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const fired = readBoolean(condition);\n const src = readSourceValue(source);\n if (ctx.isTick) {\n slot.outBuffer.replaceHead(tickValue(slot, src, fired));\n } else {\n slot.outBuffer.append(closeValue(slot, src, fired));\n }\n const offset = opts.offset ?? 0;\n if (offset === 0) return slot.series;\n const shifted = slot.shiftedSeries.get(offset);\n if (shifted !== undefined) return shifted;\n const next = makeShiftedSeriesView<number>(slot.outBuffer, offset);\n slot.shiftedSeries.set(offset, next);\n return next;\n}\n"]}
|
|
@@ -4,10 +4,10 @@ import type { VisibleRangeVolumeProfileOpts, VisibleRangeVolumeProfileResult } f
|
|
|
4
4
|
* volume by price, emits a `horizontal-histogram`, and returns cached
|
|
5
5
|
* POC / VAH / VAL series.
|
|
6
6
|
*
|
|
7
|
-
* The
|
|
7
|
+
* The runtime supplies the visible range through
|
|
8
8
|
* `bar.viewport`, populated as the latest 100 bars ending at the
|
|
9
9
|
* current head. Real chart viewport injection is deferred to adapter
|
|
10
|
-
* integrations
|
|
10
|
+
* integrations.
|
|
11
11
|
*
|
|
12
12
|
* @formula Port of invinite visible-range-vp: slice visible candles,
|
|
13
13
|
* bucket volume by price, then derive POC / value-area high /
|
|
@@ -70,10 +70,10 @@ function collectBars(ctx) {
|
|
|
70
70
|
* volume by price, emits a `horizontal-histogram`, and returns cached
|
|
71
71
|
* POC / VAH / VAL series.
|
|
72
72
|
*
|
|
73
|
-
* The
|
|
73
|
+
* The runtime supplies the visible range through
|
|
74
74
|
* `bar.viewport`, populated as the latest 100 bars ending at the
|
|
75
75
|
* current head. Real chart viewport injection is deferred to adapter
|
|
76
|
-
* integrations
|
|
76
|
+
* integrations.
|
|
77
77
|
*
|
|
78
78
|
* @formula Port of invinite visible-range-vp: slice visible candles,
|
|
79
79
|
* bucket volume by price, then derive POC / value-area high /
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visibleRangeVolumeProfile.js","sourceRoot":"","sources":["../../src/ta/visibleRangeVolumeProfile.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"visibleRangeVolumeProfile.js","sourceRoot":"","sources":["../../src/ta/visibleRangeVolumeProfile.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/visible-range-volume-profile.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — Series<T> shape, opts.offset, JSDoc.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport type {\n VisibleRangeVolumeProfileOpts,\n VisibleRangeVolumeProfileResult,\n} from \"@invinite-org/chartlang-core\";\n\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView, makeShiftedSeriesView } from \"../seriesView.js\";\nimport {\n type VolumeProfileBar,\n type VolumeProfileCore,\n commitVolumeProfileSnapshot,\n createVolumeProfileCore,\n emitVolumeProfileHistogram,\n resolveVolumeProfileSnapshot,\n volumeProfileConfigFromOpts,\n} from \"./lib/volume-profile/index.js\";\n\ntype VisibleRangeVolumeProfileSlot = VolumeProfileCore & {\n readonly result: VisibleRangeVolumeProfileResult;\n readonly shiftedResults: Map<number, VisibleRangeVolumeProfileResult>;\n};\n\ntype MutableVisibleRangeVolumeProfileSlot = Omit<VisibleRangeVolumeProfileSlot, \"result\"> & {\n result: VisibleRangeVolumeProfileResult;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.visibleRangeVolumeProfile called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(capacity: number): VisibleRangeVolumeProfileSlot {\n const core = createVolumeProfileCore(capacity);\n const slot: MutableVisibleRangeVolumeProfileSlot = {\n ...core,\n result: Object.freeze({\n get buckets() {\n return slot.buckets;\n },\n poc: makeSeriesView<number>(core.pocBuffer),\n valHigh: makeSeriesView<number>(core.valHighBuffer),\n valLow: makeSeriesView<number>(core.valLowBuffer),\n }),\n shiftedResults: new Map(),\n };\n return slot;\n}\n\nfunction resultForOffset(\n slot: VisibleRangeVolumeProfileSlot,\n offset: number,\n): VisibleRangeVolumeProfileResult {\n if (offset === 0) return slot.result;\n let cached = slot.shiftedResults.get(offset);\n if (cached === undefined) {\n cached = Object.freeze({\n get buckets() {\n return slot.buckets;\n },\n poc: makeShiftedSeriesView<number>(slot.pocBuffer, offset),\n valHigh: makeShiftedSeriesView<number>(slot.valHighBuffer, offset),\n valLow: makeShiftedSeriesView<number>(slot.valLowBuffer, offset),\n });\n slot.shiftedResults.set(offset, cached);\n }\n return cached;\n}\n\nfunction collectBars(ctx: RuntimeContext): ReadonlyArray<VolumeProfileBar> {\n const { ohlcv } = ctx.stream;\n const { fromTime, toTime } = ctx.stream.bar.viewport;\n const bars: VolumeProfileBar[] = [];\n for (let lookback = ohlcv.close.length - 1; lookback >= 0; lookback -= 1) {\n const time = ohlcv.time.at(lookback);\n if (time < fromTime || time > toTime) continue;\n bars.push({\n close: ohlcv.close.at(lookback),\n high: ohlcv.high.at(lookback),\n low: ohlcv.low.at(lookback),\n open: ohlcv.open.at(lookback),\n time,\n volume: ohlcv.volume.at(lookback),\n });\n }\n return bars;\n}\n\n/**\n * Visible-Range Volume Profile — buckets the current visible range's\n * volume by price, emits a `horizontal-histogram`, and returns cached\n * POC / VAH / VAL series.\n *\n * The runtime supplies the visible range through\n * `bar.viewport`, populated as the latest 100 bars ending at the\n * current head. Real chart viewport injection is deferred to adapter\n * integrations.\n *\n * @formula Port of invinite visible-range-vp: slice visible candles,\n * bucket volume by price, then derive POC / value-area high /\n * value-area low via the shared volume-profile pipeline.\n * @anchors Visible range = `(bar.viewport.fromTime, bar.viewport.toTime)`.\n * @warmup First 2 bars for non-degenerate bucketization; constant-price\n * positive-volume input emits a one-bucket fallback.\n * @since 0.5\n * @stable\n * @example\n * // import { ta, plot } from \"@invinite-org/chartlang-core\";\n * // const vp = ta.visibleRangeVolumeProfile({ rowSize: 24 });\n * // plot(vp.poc, { title: \"VRVP POC\" });\n */\nexport function visibleRangeVolumeProfile(\n slotId: string,\n opts?: VisibleRangeVolumeProfileOpts,\n): VisibleRangeVolumeProfileResult {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as VisibleRangeVolumeProfileSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n\n const snapshot = resolveVolumeProfileSnapshot({\n bars: collectBars(ctx),\n bucketColor: opts?.bucketColor,\n config: volumeProfileConfigFromOpts(opts ?? {}),\n });\n commitVolumeProfileSnapshot(slot, ctx.isTick, snapshot);\n emitVolumeProfileHistogram(\n ctx,\n slotId,\n \"Visible Range Volume Profile\",\n snapshot.poc,\n snapshot.buckets,\n );\n return resultForOffset(slot, opts?.offset ?? 0);\n}\n"]}
|
package/dist/ta/vol.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/vol.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 { Float64RingBuffer } from "../ringBuffer.js";
|
|
9
9
|
import { ACTIVE_RUNTIME_CONTEXT } from "../runtimeContext.js";
|
|
10
10
|
import { makeSeriesView } from "../seriesView.js";
|
package/dist/ta/vol.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vol.js","sourceRoot":"","sources":["../../src/ta/vol.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"vol.js","sourceRoot":"","sources":["../../src/ta/vol.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAIhB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAuB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD,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,SAAS,QAAQ,CAAC,QAAgB;IAC9B,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAS,SAAS,CAAC,EAAE,CAAC;AACpE,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,KAAe;IAC/C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAwB,CAAC;IACjE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACjD,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;IACpC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,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/vol.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\nimport type { Series, VolOpts } 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 VolSlot = {\n readonly outBuffer: Float64RingBuffer;\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.vol called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(capacity: number): VolSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n return { outBuffer, series: makeSeriesView<number>(outBuffer) };\n}\n\n/**\n * Volume passthrough — emits `bar.volume` as a `Series<number>` so\n * script authors can compose it like any other primitive (e.g. plot\n * as a histogram). Stateless math; the slot exists purely to back\n * the cached `Series<T>` Proxy + the per-callsite output buffer the\n * compiler-injected slot id keys.\n *\n * Tick-mode reads the live `bar.volume`, replacing the head — volume\n * can change mid-bar in real time.\n *\n * @formula out[t] = bar.volume[t]\n * @warmup 0\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta, plot } from \"@invinite-org/chartlang-runtime\";\n * // const v = ta.vol(\"slot\");\n * // plot(v, { style: { kind: \"histogram\", baseline: 0 } });\n */\nexport function vol(slotId: string, _opts?: VolOpts): Series<number> {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as VolSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const value = ctx.stream.bar.volume;\n if (ctx.isTick) {\n slot.outBuffer.replaceHead(value);\n } else {\n slot.outBuffer.append(value);\n }\n return slot.series;\n}\n"]}
|
|
@@ -6,7 +6,7 @@ import type { VolatilityStopOpts, VolatilityStopResult } from "@invinite-org/cha
|
|
|
6
6
|
* to `src + multiplier · atr`. Trend down symmetric. Reads
|
|
7
7
|
* `bar.close` as source (Pine `ta.vstop` convention — invinite's
|
|
8
8
|
* `source` opt is omitted; a `source` opt could land in a follow-up).
|
|
9
|
-
* Composes
|
|
9
|
+
* Composes `ta.atr` at sub-slot `${slotId}/atr`. Returns a
|
|
10
10
|
* cached `{ value, direction }` record (same identity every bar).
|
|
11
11
|
*
|
|
12
12
|
* `direction` is `+1` (uptrend → stop is BELOW price), `-1`
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/volatility-stop.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. Volatility Stop composes Phase-1 `ta.atr` at
|
|
@@ -150,7 +150,7 @@ function tickStep(slot, src, atrValue) {
|
|
|
150
150
|
* to `src + multiplier · atr`. Trend down symmetric. Reads
|
|
151
151
|
* `bar.close` as source (Pine `ta.vstop` convention — invinite's
|
|
152
152
|
* `source` opt is omitted; a `source` opt could land in a follow-up).
|
|
153
|
-
* Composes
|
|
153
|
+
* Composes `ta.atr` at sub-slot `${slotId}/atr`. Returns a
|
|
154
154
|
* cached `{ value, direction }` record (same identity every bar).
|
|
155
155
|
*
|
|
156
156
|
* `direction` is `+1` (uptrend → stop is BELOW price), `-1`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"volatilityStop.js","sourceRoot":"","sources":["../../src/ta/volatilityStop.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"volatilityStop.js","sourceRoot":"","sources":["../../src/ta/volatilityStop.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/volatility-stop.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. Volatility Stop composes Phase-1 `ta.atr` at\n// sub-slot `${slotId}/atr` (mirrors Supertrend); the source is\n// hard-coded to `bar.close` (Pine `ta.vstop` convention; invinite's\n// `source` field is deliberately dropped). The recurrence runs\n// incrementally one bar at a time; tick-mode replays the recurrence\n// from a per-bar snapshot of the state at the start of the current\n// bar so a partial-bar tick doesn't pollute the next close's flip\n// detection.\n\nimport type { VolatilityStopOpts, VolatilityStopResult } 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\";\n\nconst DEFAULT_LENGTH = 20;\nconst DEFAULT_MULTIPLIER = 2;\n\nconst TREND_UP = 1;\nconst TREND_DOWN = -1;\nconst TREND_UNKNOWN = 0;\n\ntype Trend = 1 | -1 | 0;\n\ntype VolatilityStopSlot = {\n readonly outputs: VolatilityStopResult;\n readonly valueBuffer: Float64RingBuffer;\n readonly directionBuffer: Float64RingBuffer;\n readonly length: number;\n readonly multiplier: number;\n /** Number of CLOSED bars folded into the slot WITH FINITE ATR. */\n warmBarCount: number;\n direction: Trend;\n prevStop: number;\n prevSrc: number;\n // Snapshot (start-of-current-bar).\n prevClosedWarmBarCount: number;\n prevClosedDirection: Trend;\n prevClosedPrevStop: number;\n prevClosedPrevSrc: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.volatilityStop called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(capacity: number, length: number, multiplier: number): VolatilityStopSlot {\n const valueBuffer = new Float64RingBuffer(capacity);\n const directionBuffer = new Float64RingBuffer(capacity);\n return {\n outputs: Object.freeze({\n value: makeSeriesView<number>(valueBuffer),\n direction: makeSeriesView<number>(directionBuffer),\n }),\n valueBuffer,\n directionBuffer,\n length,\n multiplier,\n warmBarCount: 0,\n direction: TREND_UNKNOWN,\n prevStop: Number.NaN,\n prevSrc: Number.NaN,\n prevClosedWarmBarCount: 0,\n prevClosedDirection: TREND_UNKNOWN,\n prevClosedPrevStop: Number.NaN,\n prevClosedPrevSrc: Number.NaN,\n };\n}\n\nfunction snapshot(slot: VolatilityStopSlot): void {\n slot.prevClosedWarmBarCount = slot.warmBarCount;\n slot.prevClosedDirection = slot.direction;\n slot.prevClosedPrevStop = slot.prevStop;\n slot.prevClosedPrevSrc = slot.prevSrc;\n}\n\n/**\n * One step of the Volatility Stop recurrence given the prior CLOSED-\n * bar snapshot. Returns the new `(value, direction)` for this bar.\n * Used by both close-side (which mutates the slot) and tick-side\n * (which reads the snapshot, does NOT mutate the slot).\n */\nfunction recurrenceStep(\n src: number,\n atrValue: number,\n multiplier: number,\n prevDirection: Trend,\n prevStop: number,\n prevSrc: number,\n): { value: number; direction: number; nextDirection: Trend; nextStop: number } {\n if (prevDirection === TREND_UNKNOWN) {\n // Second warm bar — decide initial direction from src[i] vs\n // src[i-1]. Initial stop seeds from the deviation band.\n const newDirection: Trend = src >= prevSrc ? TREND_UP : TREND_DOWN;\n const stop =\n newDirection === TREND_UP ? src - multiplier * atrValue : src + multiplier * atrValue;\n return {\n value: stop,\n direction: newDirection,\n nextDirection: newDirection,\n nextStop: stop,\n };\n }\n if (prevDirection === TREND_UP) {\n let next = src - multiplier * atrValue;\n if (next < prevStop) next = prevStop;\n if (src < next) {\n next = src + multiplier * atrValue;\n return {\n value: next,\n direction: TREND_DOWN,\n nextDirection: TREND_DOWN,\n nextStop: next,\n };\n }\n return { value: next, direction: TREND_UP, nextDirection: TREND_UP, nextStop: next };\n }\n // prevDirection === TREND_DOWN.\n let next = src + multiplier * atrValue;\n if (next > prevStop) next = prevStop;\n if (src > next) {\n next = src - multiplier * atrValue;\n return {\n value: next,\n direction: TREND_UP,\n nextDirection: TREND_UP,\n nextStop: next,\n };\n }\n return { value: next, direction: TREND_DOWN, nextDirection: TREND_DOWN, nextStop: next };\n}\n\nfunction closeStep(\n slot: VolatilityStopSlot,\n src: number,\n atrValue: number,\n): { value: number; direction: number } {\n // NaN suspends state: don't advance live fields. Snapshot stays\n // pinned to the prior bar's state.\n if (!Number.isFinite(src) || !Number.isFinite(atrValue)) {\n return { value: Number.NaN, direction: Number.NaN };\n }\n snapshot(slot);\n if (slot.warmBarCount === 0) {\n // First warm bar — can't decide direction yet (need a prior\n // src to compare). Seed `prevSrc` and emit NaN.\n slot.warmBarCount = 1;\n slot.prevSrc = src;\n slot.direction = TREND_UNKNOWN;\n slot.prevStop = Number.NaN;\n return { value: Number.NaN, direction: Number.NaN };\n }\n const step = recurrenceStep(\n src,\n atrValue,\n slot.multiplier,\n slot.direction,\n slot.prevStop,\n slot.prevSrc,\n );\n slot.warmBarCount += 1;\n slot.direction = step.nextDirection;\n slot.prevStop = step.nextStop;\n slot.prevSrc = src;\n return { value: step.value, direction: step.direction };\n}\n\nfunction tickStep(\n slot: VolatilityStopSlot,\n src: number,\n atrValue: number,\n): { value: number; direction: number } {\n if (!Number.isFinite(src) || !Number.isFinite(atrValue)) {\n return { value: Number.NaN, direction: Number.NaN };\n }\n if (slot.prevClosedWarmBarCount === 0) {\n // The current bar is the first warm bar — its tick replay is\n // the seed (NaN, NaN — direction undecided).\n return { value: Number.NaN, direction: Number.NaN };\n }\n const step = recurrenceStep(\n src,\n atrValue,\n slot.multiplier,\n slot.prevClosedDirection,\n slot.prevClosedPrevStop,\n slot.prevClosedPrevSrc,\n );\n return { value: step.value, direction: step.direction };\n}\n\n/**\n * Volatility Stop — PSAR-like trend-following stop driven by ATR\n * instead of acceleration factors. Trend up: `stop[i] = max(prevStop,\n * src − multiplier · atr)`; flip to down when `src < stop[i]`, reset\n * to `src + multiplier · atr`. Trend down symmetric. Reads\n * `bar.close` as source (Pine `ta.vstop` convention — invinite's\n * `source` opt is omitted; a `source` opt could land in a follow-up).\n * Composes `ta.atr` at sub-slot `${slotId}/atr`. Returns a\n * cached `{ value, direction }` record (same identity every bar).\n *\n * `direction` is `+1` (uptrend → stop is BELOW price), `-1`\n * (downtrend → stop is ABOVE price), NaN during warmup or NaN-\n * suspension. Warmup is `length` (ATR's warmup) — the FIRST warm bar\n * emits NaN (need a prior close to decide direction); the SECOND\n * warm bar seeds direction from `src[i] vs src[i-1]`.\n *\n * NaN ATR or NaN src → NaN outputs; local state freezes so the next\n * finite bar resumes from the prior closed state. Tick-mode replays\n * the recurrence from the snapshot captured at the start of the\n * current bar (mirrors PSAR / Supertrend).\n *\n * @formula up : value = max(prevStop, src − multiplier · atr) ; flip to down on src < value ;\n * down : value = min(prevStop, src + multiplier · atr) ; flip to up on src > value\n * @warmup length\n * @anchors length, multiplier\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const v = ta.volatilityStop({ length: 20, multiplier: 2 });\n * // plot(v.value);\n */\nexport function volatilityStop(slotId: string, opts?: VolatilityStopOpts): VolatilityStopResult {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as VolatilityStopSlot | undefined;\n if (slot === undefined) {\n const length = opts?.length ?? DEFAULT_LENGTH;\n const multiplier = opts?.multiplier ?? DEFAULT_MULTIPLIER;\n slot = initSlot(ctx.stream.ohlcv.close.capacity, length, multiplier);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const atrSeries = atr(`${slotId}/atr`, slot.length);\n const src = ctx.stream.bar.close;\n const atrValue = atrSeries.current;\n if (ctx.isTick) {\n const { value, direction } = tickStep(slot, src, atrValue);\n slot.valueBuffer.replaceHead(value);\n slot.directionBuffer.replaceHead(direction);\n } else {\n const { value, direction } = closeStep(slot, src, atrValue);\n slot.valueBuffer.append(value);\n slot.directionBuffer.append(direction);\n }\n return slot.outputs;\n}\n"]}
|
package/dist/ta/vortex.d.ts
CHANGED
|
@@ -17,8 +17,9 @@ import type { VortexOpts, VortexResult } from "@invinite-org/chartlang-core";
|
|
|
17
17
|
* @since 0.2
|
|
18
18
|
* @stable
|
|
19
19
|
*
|
|
20
|
-
* `opts.offset`
|
|
21
|
-
* `
|
|
20
|
+
* `opts.offset` is a presentation display shift carried to the plot
|
|
21
|
+
* emission as `xShift` for both series in lockstep (`+n` right / future,
|
|
22
|
+
* `−n` left / past); the series values are unshifted.
|
|
22
23
|
*
|
|
23
24
|
* @example
|
|
24
25
|
* // import { ta } from "@invinite-org/chartlang-runtime";
|
package/dist/ta/vortex.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vortex.d.ts","sourceRoot":"","sources":["../../src/ta/vortex.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AA4M7E
|
|
1
|
+
{"version":3,"file":"vortex.d.ts","sourceRoot":"","sources":["../../src/ta/vortex.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AA4M7E;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,YAAY,CAkBtF"}
|
package/dist/ta/vortex.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/vortex.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. Vortex reads `bar.high` / `bar.low` /
|
|
@@ -178,8 +178,9 @@ function tickStep(slot, high, low, close) {
|
|
|
178
178
|
* @since 0.2
|
|
179
179
|
* @stable
|
|
180
180
|
*
|
|
181
|
-
* `opts.offset`
|
|
182
|
-
* `
|
|
181
|
+
* `opts.offset` is a presentation display shift carried to the plot
|
|
182
|
+
* emission as `xShift` for both series in lockstep (`+n` right / future,
|
|
183
|
+
* `−n` left / past); the series values are unshifted.
|
|
183
184
|
*
|
|
184
185
|
* @example
|
|
185
186
|
* // import { ta } from "@invinite-org/chartlang-runtime";
|
package/dist/ta/vortex.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vortex.js","sourceRoot":"","sources":["../../src/ta/vortex.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vortex.js","sourceRoot":"","sources":["../../src/ta/vortex.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/vortex.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. Vortex reads `bar.high` / `bar.low` /\n// `bar.close` directly (mirrors Pine's `ta.vortex(length)` — no source\n// param) and maintains rolling running-sum windows over `vmPlus`,\n// `vmMinus`, and TR for O(1) per-bar updates. NaN-on-zero-TR semantics\n// per chartlang task spec §6 (invinite emits 0 on zero TR; chartlang\n// emits NaN to surface the degenerate window).\n\nimport type { VortexOpts, VortexResult } 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\";\n\ntype VortexSlot = {\n readonly result: VortexResult;\n readonly plusBuffer: Float64RingBuffer;\n readonly minusBuffer: Float64RingBuffer;\n readonly length: number;\n readonly vmPlusWindow: Float64RingBuffer;\n readonly vmMinusWindow: Float64RingBuffer;\n readonly trWindow: Float64RingBuffer;\n runningPlus: number;\n runningMinus: number;\n runningTr: number;\n prevHigh: number;\n prevLow: number;\n prevClose: number;\n /** Snapshots captured at the prior close so tick replay can read\n * against the bar-before-current. */\n prevPrevHigh: number;\n prevPrevLow: number;\n prevPrevClose: number;\n /** Running sums AS OF THE PRIOR CLOSE — used by tick replay to\n * substitute the tick's contribution. */\n prevClosedRunningPlus: number;\n prevClosedRunningMinus: number;\n prevClosedRunningTr: number;\n /** Tail values evicted on the current close (the\n * `length`-bars-ago slot at the moment the current close advanced\n * the window). Used by tick replay to recompute the running sum\n * with the tick's substituted contribution. */\n evictedPlus: number;\n evictedMinus: number;\n evictedTr: number;\n /** Number of CLOSED bars folded into the slot so far. */\n barCount: number;\n readonly shiftedResults: Map<number, VortexResult>;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.vortex called outside an active script step\");\n }\n return ctx;\n}\n\nfunction trueRange(high: number, low: number, prevClose: number): number {\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 initSlot(length: number, capacity: number): VortexSlot {\n const plusBuffer = new Float64RingBuffer(capacity);\n const minusBuffer = new Float64RingBuffer(capacity);\n return {\n result: Object.freeze({\n plus: makeSeriesView<number>(plusBuffer),\n minus: makeSeriesView<number>(minusBuffer),\n }),\n plusBuffer,\n minusBuffer,\n length,\n vmPlusWindow: new Float64RingBuffer(length),\n vmMinusWindow: new Float64RingBuffer(length),\n trWindow: new Float64RingBuffer(length),\n runningPlus: 0,\n runningMinus: 0,\n runningTr: 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 prevClosedRunningPlus: 0,\n prevClosedRunningMinus: 0,\n prevClosedRunningTr: 0,\n evictedPlus: 0,\n evictedMinus: 0,\n evictedTr: 0,\n barCount: 0,\n shiftedResults: new Map(),\n };\n}\n\nfunction resultForOffset(slot: VortexSlot, offset: number): VortexResult {\n if (offset === 0) return slot.result;\n let cached = slot.shiftedResults.get(offset);\n if (cached === undefined) {\n cached = Object.freeze({\n plus: makeShiftedSeriesView<number>(slot.plusBuffer, offset),\n minus: makeShiftedSeriesView<number>(slot.minusBuffer, offset),\n });\n slot.shiftedResults.set(offset, cached);\n }\n return cached;\n}\n\nfunction divide(num: number, den: number): number {\n // chartlang task spec §6: zero-TR window → NaN (degenerate; invinite\n // emits 0). Surface as NaN so script-author conditionals can branch.\n if (den === 0 || !Number.isFinite(den) || !Number.isFinite(num)) return Number.NaN;\n return num / den;\n}\n\nfunction closeStep(\n slot: VortexSlot,\n high: number,\n low: number,\n close: number,\n): { plus: number; minus: number } {\n if (!Number.isFinite(high) || !Number.isFinite(low) || !Number.isFinite(close)) {\n // Hold state forward; emit NaN.\n return { plus: Number.NaN, minus: Number.NaN };\n }\n\n slot.barCount += 1;\n\n // Snapshot prior running sums (post-prior-close state — these are\n // the values tick replay needs to re-derive the head against the\n // PRIOR closed bar).\n slot.prevClosedRunningPlus = slot.runningPlus;\n slot.prevClosedRunningMinus = slot.runningMinus;\n slot.prevClosedRunningTr = slot.runningTr;\n\n const tr = trueRange(high, low, slot.prevClose);\n const vmPlus = Number.isFinite(slot.prevLow) ? Math.abs(high - slot.prevLow) : 0;\n const vmMinus = Number.isFinite(slot.prevHigh) ? Math.abs(low - slot.prevHigh) : 0;\n\n // Capture prev-prev BEFORE overwriting prev (tick replay reads\n // against the bar-before-current).\n slot.prevPrevHigh = slot.prevHigh;\n slot.prevPrevLow = slot.prevLow;\n slot.prevPrevClose = slot.prevClose;\n slot.prevHigh = high;\n slot.prevLow = low;\n slot.prevClose = close;\n\n // Roll the windows; capture evicted tail values for tick replay.\n if (slot.vmPlusWindow.length >= slot.length) {\n slot.evictedPlus = slot.vmPlusWindow.at(slot.length - 1);\n slot.evictedMinus = slot.vmMinusWindow.at(slot.length - 1);\n slot.evictedTr = slot.trWindow.at(slot.length - 1);\n slot.runningPlus -= slot.evictedPlus;\n slot.runningMinus -= slot.evictedMinus;\n slot.runningTr -= slot.evictedTr;\n } else {\n slot.evictedPlus = 0;\n slot.evictedMinus = 0;\n slot.evictedTr = 0;\n }\n slot.vmPlusWindow.append(vmPlus);\n slot.vmMinusWindow.append(vmMinus);\n slot.trWindow.append(tr);\n slot.runningPlus += vmPlus;\n slot.runningMinus += vmMinus;\n slot.runningTr += tr;\n\n // Warmup: first defined output at `barCount === length + 1` (i.e.\n // bar index `length` zero-based). The seed window completes when\n // the `length`-th VM/TR triple has been folded in.\n if (slot.barCount <= slot.length) {\n return { plus: Number.NaN, minus: Number.NaN };\n }\n return {\n plus: divide(slot.runningPlus, slot.runningTr),\n minus: divide(slot.runningMinus, slot.runningTr),\n };\n}\n\nfunction tickStep(\n slot: VortexSlot,\n high: number,\n low: number,\n close: number,\n): { plus: number; minus: number } {\n if (slot.barCount <= slot.length) return { plus: Number.NaN, minus: Number.NaN };\n if (!Number.isFinite(high) || !Number.isFinite(low) || !Number.isFinite(close)) {\n return { plus: Number.NaN, minus: Number.NaN };\n }\n // Tick replay against the BAR BEFORE the current bar.\n const tr = trueRange(high, low, slot.prevPrevClose);\n // Defensive: `prevPrev*` is seeded by the prior close-side advance,\n // so by the time `barCount > length` (the guard above) these are\n // finite. The `: 0` fallback is defence-in-depth.\n /* c8 ignore next 2 */\n const vmPlus = Number.isFinite(slot.prevPrevLow) ? Math.abs(high - slot.prevPrevLow) : 0;\n const vmMinus = Number.isFinite(slot.prevPrevHigh) ? Math.abs(low - slot.prevPrevHigh) : 0;\n // Re-derive the running sums by starting from the prior closed\n // sums, subtracting the head bar's evicted tail (captured at the\n // close-side advance), and adding the tick's contribution.\n const runningPlus = slot.prevClosedRunningPlus - slot.evictedPlus + vmPlus;\n const runningMinus = slot.prevClosedRunningMinus - slot.evictedMinus + vmMinus;\n const runningTr = slot.prevClosedRunningTr - slot.evictedTr + tr;\n return {\n plus: divide(runningPlus, runningTr),\n minus: divide(runningMinus, runningTr),\n };\n}\n\n/**\n * Vortex Indicator (Botes & Siepman, 2010) — paired `+VI` / `−VI`\n * trend-direction lines. Reads `bar.high` / `bar.low` / `bar.close`\n * directly (mirrors Pine's `ta.vortex(length)` — no source param).\n * Maintains rolling running-sum windows over the per-bar `vmPlus`,\n * `vmMinus`, and TR series for O(1) per-bar updates. Returns a cached\n * `{ plus, minus }` record (same identity every bar).\n *\n * @formula TR[t] = max(high − low, |high − prevClose|, |low − prevClose|) ;\n * vmPlus[t] = |high[t] − low[t-1]| ;\n * vmMinus[t] = |low[t] − high[t-1]| ;\n * plus[t] = Σ(vmPlus, length) / Σ(TR, length) ;\n * minus[t] = Σ(vmMinus, length) / Σ(TR, length) ;\n * NaN when Σ(TR, length) === 0 (degenerate flat window).\n * @warmup length\n * @since 0.2\n * @stable\n *\n * `opts.offset` is a presentation display shift carried to the plot\n * emission as `xShift` for both series in lockstep (`+n` right / future,\n * `−n` left / past); the series values are unshifted.\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-runtime\";\n * // const v = ta.vortex(\"slot\", 14);\n * // plot(v.plus);\n * // plot(v.minus);\n */\nexport function vortex(slotId: string, length: number, opts?: VortexOpts): VortexResult {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as VortexSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(length, ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const bar = ctx.stream.bar;\n if (ctx.isTick) {\n const { plus, minus } = tickStep(slot, bar.high, bar.low, bar.close);\n slot.plusBuffer.replaceHead(plus);\n slot.minusBuffer.replaceHead(minus);\n } else {\n const { plus, minus } = closeStep(slot, bar.high, bar.low, bar.close);\n slot.plusBuffer.append(plus);\n slot.minusBuffer.append(minus);\n }\n return resultForOffset(slot, opts?.offset ?? 0);\n}\n"]}
|
package/dist/ta/vwap.d.ts
CHANGED
|
@@ -5,9 +5,9 @@ import type { Series, VwapOpts } from "@invinite-org/chartlang-core";
|
|
|
5
5
|
* the bars since the most recent UTC midnight; resets to NaN at the
|
|
6
6
|
* top of every UTC day. `source` defaults to `"hlc3"` per Pine.
|
|
7
7
|
*
|
|
8
|
-
* **
|
|
9
|
-
* `floor(bar.time / 86_400_000)` (the UTC calendar day).
|
|
10
|
-
* lifts session detection to `syminfo.session.regularStart` per
|
|
8
|
+
* **Session boundary.** The session reset keys off
|
|
9
|
+
* `floor(bar.time / 86_400_000)` (the UTC calendar day). A future
|
|
10
|
+
* release lifts session detection to `syminfo.session.regularStart` per
|
|
11
11
|
* invinite — until then VWAP behaves as a UTC-day-anchored VWAP.
|
|
12
12
|
*
|
|
13
13
|
* **NaN handling.** Bars with NaN source or non-positive / NaN volume
|
package/dist/ta/vwap.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/vwap.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.
|
|
@@ -84,9 +84,9 @@ function valueFromCum(cumPV, cumV) {
|
|
|
84
84
|
* the bars since the most recent UTC midnight; resets to NaN at the
|
|
85
85
|
* top of every UTC day. `source` defaults to `"hlc3"` per Pine.
|
|
86
86
|
*
|
|
87
|
-
* **
|
|
88
|
-
* `floor(bar.time / 86_400_000)` (the UTC calendar day).
|
|
89
|
-
* lifts session detection to `syminfo.session.regularStart` per
|
|
87
|
+
* **Session boundary.** The session reset keys off
|
|
88
|
+
* `floor(bar.time / 86_400_000)` (the UTC calendar day). A future
|
|
89
|
+
* release lifts session detection to `syminfo.session.regularStart` per
|
|
90
90
|
* invinite — until then VWAP behaves as a UTC-day-anchored VWAP.
|
|
91
91
|
*
|
|
92
92
|
* **NaN handling.** Bars with NaN source or non-positive / NaN volume
|
package/dist/ta/vwap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vwap.js","sourceRoot":"","sources":["../../src/ta/vwap.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vwap.js","sourceRoot":"","sources":["../../src/ta/vwap.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/vwap.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 { Series, VwapOpts } 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 VwapSource = NonNullable<VwapOpts[\"source\"]>;\n\nconst DEFAULT_SOURCE: VwapSource = \"hlc3\";\nconst MS_PER_DAY = 86_400_000;\n\ntype VwapSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n /** Active cumulative price·volume within the current UTC day. */\n cumPV: number;\n /** Active cumulative volume within the current UTC day. */\n cumV: number;\n /** UTC-day index of the most recent close: `floor(bar.time / 86_400_000)`. */\n currentDayKey: number;\n /** Snapshot of `cumPV` BEFORE the most recent close-side update. */\n prevClosedCumPV: number;\n /** Snapshot of `cumV` BEFORE the most recent close-side update. */\n prevClosedCumV: number;\n /** Snapshot of `currentDayKey` BEFORE the most recent close-side update. */\n prevClosedDayKey: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.vwap called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(capacity: number): VwapSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n cumPV: 0,\n cumV: 0,\n currentDayKey: Number.NaN,\n prevClosedCumPV: 0,\n prevClosedCumV: 0,\n prevClosedDayKey: Number.NaN,\n };\n}\n\nfunction readSource(ctx: RuntimeContext, source: VwapSource): number {\n switch (source) {\n case \"close\":\n return ctx.stream.bar.close;\n case \"hl2\":\n return ctx.stream.bar.hl2;\n case \"hlc3\":\n return ctx.stream.bar.hlc3;\n case \"ohlc4\":\n return ctx.stream.bar.ohlc4;\n case \"hlcc4\":\n return ctx.stream.bar.hlcc4;\n }\n}\n\nfunction dayKeyOf(time: number): number {\n return Math.floor(time / MS_PER_DAY);\n}\n\n/**\n * Fold one bar into a (cumPV, cumV, dayKey) accumulator and return\n * the post-fold tuple. The first arg is the accumulator state coming\n * in; the result is the state after consuming the bar.\n *\n * Resets the cumulative pair to zero when `dayKey` changes from the\n * incoming `inDayKey`. NaN source or NaN/non-finite volume contributes\n * zero (keeps the running average stable across data gaps); the day\n * boundary still triggers the reset.\n */\nfunction fold(\n inCumPV: number,\n inCumV: number,\n inDayKey: number,\n dayKey: number,\n src: number,\n volume: number,\n): { cumPV: number; cumV: number; dayKey: number } {\n let cumPV = inCumPV;\n let cumV = inCumV;\n if (inDayKey !== dayKey) {\n cumPV = 0;\n cumV = 0;\n }\n if (Number.isFinite(src) && Number.isFinite(volume) && volume > 0) {\n cumPV += src * volume;\n cumV += volume;\n }\n return { cumPV, cumV, dayKey };\n}\n\nfunction valueFromCum(cumPV: number, cumV: number): number {\n if (cumV === 0) return Number.NaN;\n return cumPV / cumV;\n}\n\n/**\n * Volume-Weighted Average Price (VWAP), session-anchored to the UTC\n * calendar day. Accumulates `Σ(source · volume) / Σ(volume)` over\n * the bars since the most recent UTC midnight; resets to NaN at the\n * top of every UTC day. `source` defaults to `\"hlc3\"` per Pine.\n *\n * **Session boundary.** The session reset keys off\n * `floor(bar.time / 86_400_000)` (the UTC calendar day). A future\n * release lifts session detection to `syminfo.session.regularStart` per\n * invinite — until then VWAP behaves as a UTC-day-anchored VWAP.\n *\n * **NaN handling.** Bars with NaN source or non-positive / NaN volume\n * contribute zero to the accumulator (the average stays well-defined\n * across data gaps). The first bar of every new day before any\n * volume accumulates yields NaN (`cumV === 0`).\n *\n * **Tick mode.** Replays the head bar's contribution against a\n * snapshot of the prior-close (cumPV, cumV, dayKey) tuple so a\n * partial-bar tick doesn't pollute the next close's accumulator.\n *\n * @formula vwap[t] = Σ_{u ∈ session(t)}(source[u] · volume[u]) / Σ_{u ∈ session(t)}(volume[u])\n * @warmup 0 (NaN until the first bar with cumV > 0 in the session)\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-runtime\";\n * // const v = ta.vwap(\"slot\", { source: \"hlc3\" });\n * // const head = v.current;\n */\nexport function vwap(slotId: string, opts?: VwapOpts): Series<number> {\n const ctx = getCtx();\n const source = opts?.source ?? DEFAULT_SOURCE;\n let slot = ctx.stream.taSlots.get(slotId) as VwapSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const src = readSource(ctx, source);\n const volume = ctx.stream.bar.volume;\n const dayKey = dayKeyOf(ctx.stream.bar.time);\n\n if (ctx.isTick) {\n const next = fold(\n slot.prevClosedCumPV,\n slot.prevClosedCumV,\n slot.prevClosedDayKey,\n dayKey,\n src,\n volume,\n );\n slot.outBuffer.replaceHead(valueFromCum(next.cumPV, next.cumV));\n return slot.series;\n }\n\n // Close-side: snapshot the prior-close state, then fold in the new bar.\n slot.prevClosedCumPV = slot.cumPV;\n slot.prevClosedCumV = slot.cumV;\n slot.prevClosedDayKey = slot.currentDayKey;\n const next = fold(slot.cumPV, slot.cumV, slot.currentDayKey, dayKey, src, volume);\n slot.cumPV = next.cumPV;\n slot.cumV = next.cumV;\n slot.currentDayKey = next.dayKey;\n slot.outBuffer.append(valueFromCum(slot.cumPV, slot.cumV));\n return slot.series;\n}\n"]}
|
package/dist/ta/vwma.js
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
// Ported from invinite/src/components/trading-chart/indicators/vwma.ts
|
|
5
5
|
// plus lib/vwma-of-float64.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.
|