oakscriptjs 0.10.1 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/array/index.d.ts +8 -2
- package/dist/cjs/array/index.d.ts.map +1 -1
- package/dist/cjs/array/index.js +2 -1
- package/dist/cjs/array/index.js.map +2 -2
- package/dist/cjs/box/index.d.ts.map +1 -1
- package/dist/cjs/box/index.js +7 -1
- package/dist/cjs/box/index.js.map +2 -2
- package/dist/cjs/callsite/index.d.ts +73 -32
- package/dist/cjs/callsite/index.d.ts.map +1 -1
- package/dist/cjs/callsite/index.js +69 -65
- package/dist/cjs/callsite/index.js.map +2 -2
- package/dist/cjs/drawing/registry.d.ts +84 -0
- package/dist/cjs/drawing/registry.d.ts.map +1 -1
- package/dist/cjs/drawing/registry.js +153 -6
- package/dist/cjs/drawing/registry.js.map +2 -2
- package/dist/cjs/index.d.ts +8 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +33 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/input.d.ts +9 -1
- package/dist/cjs/input.d.ts.map +1 -1
- package/dist/cjs/input.js +16 -0
- package/dist/cjs/input.js.map +2 -2
- package/dist/cjs/label/index.d.ts.map +1 -1
- package/dist/cjs/label/index.js +3 -0
- package/dist/cjs/label/index.js.map +2 -2
- package/dist/cjs/line/index.d.ts +10 -27
- package/dist/cjs/line/index.d.ts.map +1 -1
- package/dist/cjs/line/index.js +11 -22
- package/dist/cjs/line/index.js.map +2 -2
- package/dist/cjs/linefill/index.d.ts +3 -0
- package/dist/cjs/linefill/index.d.ts.map +1 -1
- package/dist/cjs/linefill/index.js +15 -1
- package/dist/cjs/linefill/index.js.map +3 -3
- package/dist/cjs/math/index.d.ts.map +1 -1
- package/dist/cjs/math/index.js +2 -0
- package/dist/cjs/math/index.js.map +2 -2
- package/dist/cjs/polyline/index.d.ts.map +1 -1
- package/dist/cjs/polyline/index.js +3 -0
- package/dist/cjs/polyline/index.js.map +2 -2
- package/dist/cjs/runtime/adapters/SimpleInputAdapter.js +1 -1
- package/dist/cjs/runtime/adapters/SimpleInputAdapter.js.map +2 -2
- package/dist/cjs/runtime/index.d.ts +1 -1
- package/dist/cjs/runtime/index.d.ts.map +1 -1
- package/dist/cjs/runtime/index.js +1 -0
- package/dist/cjs/runtime/index.js.map +2 -2
- package/dist/cjs/runtime/inputs.d.ts +9 -0
- package/dist/cjs/runtime/inputs.d.ts.map +1 -1
- package/dist/cjs/runtime/inputs.js +8 -0
- package/dist/cjs/runtime/inputs.js.map +2 -2
- package/dist/cjs/runtime/types.d.ts +1 -1
- package/dist/cjs/runtime/types.d.ts.map +1 -1
- package/dist/cjs/runtime/types.js.map +1 -1
- package/dist/cjs/script/index.d.ts +91 -21
- package/dist/cjs/script/index.d.ts.map +1 -1
- package/dist/cjs/script/index.js +207 -19
- package/dist/cjs/script/index.js.map +3 -3
- package/dist/cjs/security/other.d.ts +92 -0
- package/dist/cjs/security/other.d.ts.map +1 -0
- package/dist/cjs/security/other.js +164 -0
- package/dist/cjs/security/other.js.map +7 -0
- package/dist/cjs/session/bars.d.ts +24 -1
- package/dist/cjs/session/bars.d.ts.map +1 -1
- package/dist/cjs/session/bars.js +56 -7
- package/dist/cjs/session/bars.js.map +3 -3
- package/dist/cjs/session/calendar.d.ts +13 -2
- package/dist/cjs/session/calendar.d.ts.map +1 -1
- package/dist/cjs/session/calendar.js +39 -9
- package/dist/cjs/session/calendar.js.map +2 -2
- package/dist/cjs/session/context.d.ts +76 -0
- package/dist/cjs/session/context.d.ts.map +1 -0
- package/dist/cjs/session/context.js +114 -0
- package/dist/cjs/session/context.js.map +7 -0
- package/dist/cjs/str/floatingdecimal.d.ts +31 -0
- package/dist/cjs/str/floatingdecimal.d.ts.map +1 -0
- package/dist/cjs/str/floatingdecimal.js +298 -0
- package/dist/cjs/str/floatingdecimal.js.map +7 -0
- package/dist/cjs/str/index.d.ts +4 -1
- package/dist/cjs/str/index.d.ts.map +1 -1
- package/dist/cjs/str/index.js +2 -1
- package/dist/cjs/str/index.js.map +2 -2
- package/dist/cjs/str/numberformat.d.ts +7 -3
- package/dist/cjs/str/numberformat.d.ts.map +1 -1
- package/dist/cjs/str/numberformat.js +4 -3
- package/dist/cjs/str/numberformat.js.map +2 -2
- package/dist/cjs/ta/index.d.ts +67 -34
- package/dist/cjs/ta/index.d.ts.map +1 -1
- package/dist/cjs/ta/index.js +202 -145
- package/dist/cjs/ta/index.js.map +2 -2
- package/dist/cjs/ta/limits.d.ts +35 -0
- package/dist/cjs/ta/limits.d.ts.map +1 -0
- package/dist/cjs/ta/limits.js +64 -0
- package/dist/cjs/ta/limits.js.map +7 -0
- package/dist/cjs/ta/running-sum.d.ts +0 -16
- package/dist/cjs/ta/running-sum.d.ts.map +1 -1
- package/dist/cjs/ta/running-sum.js +2 -0
- package/dist/cjs/ta/running-sum.js.map +2 -2
- package/dist/cjs/ta-series.d.ts +8 -8
- package/dist/cjs/ta-series.d.ts.map +1 -1
- package/dist/cjs/ta-series.js +10 -8
- package/dist/cjs/ta-series.js.map +2 -2
- package/dist/cjs/table/index.d.ts +3 -1
- package/dist/cjs/table/index.d.ts.map +1 -1
- package/dist/cjs/table/index.js +1 -0
- package/dist/cjs/table/index.js.map +3 -3
- package/dist/cjs/time/index.d.ts +5 -2
- package/dist/cjs/time/index.d.ts.map +1 -1
- package/dist/cjs/time/index.js +2 -2
- package/dist/cjs/time/index.js.map +2 -2
- package/dist/cjs/time/session.d.ts +26 -1
- package/dist/cjs/time/session.d.ts.map +1 -1
- package/dist/cjs/time/session.js +94 -12
- package/dist/cjs/time/session.js.map +3 -3
- package/dist/cjs/time/timezone.d.ts +6 -1
- package/dist/cjs/time/timezone.d.ts.map +1 -1
- package/dist/cjs/time/timezone.js +2 -2
- package/dist/cjs/time/timezone.js.map +2 -2
- package/dist/cjs/types/metadata.d.ts +28 -4
- package/dist/cjs/types/metadata.d.ts.map +1 -1
- package/dist/cjs/types/metadata.js.map +1 -1
- package/dist/esm/array/index.d.ts +8 -2
- package/dist/esm/array/index.d.ts.map +1 -1
- package/dist/esm/array/index.js +12 -3
- package/dist/esm/array/index.js.map +1 -1
- package/dist/esm/box/index.d.ts.map +1 -1
- package/dist/esm/box/index.js +8 -2
- package/dist/esm/box/index.js.map +1 -1
- package/dist/esm/callsite/index.d.ts +73 -32
- package/dist/esm/callsite/index.d.ts.map +1 -1
- package/dist/esm/callsite/index.js +143 -106
- package/dist/esm/callsite/index.js.map +1 -1
- package/dist/esm/drawing/registry.d.ts +84 -0
- package/dist/esm/drawing/registry.d.ts.map +1 -1
- package/dist/esm/drawing/registry.js +260 -6
- package/dist/esm/drawing/registry.js.map +1 -1
- package/dist/esm/index.d.ts +8 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +13 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input.d.ts +9 -1
- package/dist/esm/input.d.ts.map +1 -1
- package/dist/esm/input.js +16 -0
- package/dist/esm/input.js.map +1 -1
- package/dist/esm/label/index.d.ts.map +1 -1
- package/dist/esm/label/index.js +4 -1
- package/dist/esm/label/index.js.map +1 -1
- package/dist/esm/line/index.d.ts +10 -27
- package/dist/esm/line/index.d.ts.map +1 -1
- package/dist/esm/line/index.js +22 -60
- package/dist/esm/line/index.js.map +1 -1
- package/dist/esm/linefill/index.d.ts +3 -0
- package/dist/esm/linefill/index.d.ts.map +1 -1
- package/dist/esm/linefill/index.js +20 -1
- package/dist/esm/linefill/index.js.map +1 -1
- package/dist/esm/math/index.d.ts.map +1 -1
- package/dist/esm/math/index.js +3 -0
- package/dist/esm/math/index.js.map +1 -1
- package/dist/esm/polyline/index.d.ts.map +1 -1
- package/dist/esm/polyline/index.js +5 -1
- package/dist/esm/polyline/index.js.map +1 -1
- package/dist/esm/runtime/adapters/SimpleInputAdapter.js +1 -1
- package/dist/esm/runtime/adapters/SimpleInputAdapter.js.map +1 -1
- package/dist/esm/runtime/index.d.ts +1 -1
- package/dist/esm/runtime/index.d.ts.map +1 -1
- package/dist/esm/runtime/index.js +1 -1
- package/dist/esm/runtime/index.js.map +1 -1
- package/dist/esm/runtime/inputs.d.ts +9 -0
- package/dist/esm/runtime/inputs.d.ts.map +1 -1
- package/dist/esm/runtime/inputs.js +15 -0
- package/dist/esm/runtime/inputs.js.map +1 -1
- package/dist/esm/runtime/types.d.ts +1 -1
- package/dist/esm/runtime/types.d.ts.map +1 -1
- package/dist/esm/script/index.d.ts +91 -21
- package/dist/esm/script/index.d.ts.map +1 -1
- package/dist/esm/script/index.js +259 -28
- package/dist/esm/script/index.js.map +1 -1
- package/dist/esm/security/other.d.ts +92 -0
- package/dist/esm/security/other.d.ts.map +1 -0
- package/dist/esm/security/other.js +211 -0
- package/dist/esm/security/other.js.map +1 -0
- package/dist/esm/session/bars.d.ts +24 -1
- package/dist/esm/session/bars.d.ts.map +1 -1
- package/dist/esm/session/bars.js +75 -6
- package/dist/esm/session/bars.js.map +1 -1
- package/dist/esm/session/calendar.d.ts +13 -2
- package/dist/esm/session/calendar.d.ts.map +1 -1
- package/dist/esm/session/calendar.js +54 -10
- package/dist/esm/session/calendar.js.map +1 -1
- package/dist/esm/session/context.d.ts +76 -0
- package/dist/esm/session/context.d.ts.map +1 -0
- package/dist/esm/session/context.js +124 -0
- package/dist/esm/session/context.js.map +1 -0
- package/dist/esm/str/floatingdecimal.d.ts +31 -0
- package/dist/esm/str/floatingdecimal.d.ts.map +1 -0
- package/dist/esm/str/floatingdecimal.js +272 -0
- package/dist/esm/str/floatingdecimal.js.map +1 -0
- package/dist/esm/str/index.d.ts +4 -1
- package/dist/esm/str/index.d.ts.map +1 -1
- package/dist/esm/str/index.js +9 -2
- package/dist/esm/str/index.js.map +1 -1
- package/dist/esm/str/numberformat.d.ts +7 -3
- package/dist/esm/str/numberformat.d.ts.map +1 -1
- package/dist/esm/str/numberformat.js +11 -5
- package/dist/esm/str/numberformat.js.map +1 -1
- package/dist/esm/ta/index.d.ts +67 -34
- package/dist/esm/ta/index.d.ts.map +1 -1
- package/dist/esm/ta/index.js +284 -240
- package/dist/esm/ta/index.js.map +1 -1
- package/dist/esm/ta/limits.d.ts +35 -0
- package/dist/esm/ta/limits.d.ts.map +1 -0
- package/dist/esm/ta/limits.js +67 -0
- package/dist/esm/ta/limits.js.map +1 -0
- package/dist/esm/ta/running-sum.d.ts +0 -16
- package/dist/esm/ta/running-sum.d.ts.map +1 -1
- package/dist/esm/ta/running-sum.js +2 -0
- package/dist/esm/ta/running-sum.js.map +1 -1
- package/dist/esm/ta-series.d.ts +8 -8
- package/dist/esm/ta-series.d.ts.map +1 -1
- package/dist/esm/ta-series.js +11 -8
- package/dist/esm/ta-series.js.map +1 -1
- package/dist/esm/table/index.d.ts +3 -1
- package/dist/esm/table/index.d.ts.map +1 -1
- package/dist/esm/table/index.js +6 -1
- package/dist/esm/table/index.js.map +1 -1
- package/dist/esm/time/index.d.ts +5 -2
- package/dist/esm/time/index.d.ts.map +1 -1
- package/dist/esm/time/index.js +6 -3
- package/dist/esm/time/index.js.map +1 -1
- package/dist/esm/time/session.d.ts +26 -1
- package/dist/esm/time/session.d.ts.map +1 -1
- package/dist/esm/time/session.js +141 -16
- package/dist/esm/time/session.js.map +1 -1
- package/dist/esm/time/timezone.d.ts +6 -1
- package/dist/esm/time/timezone.d.ts.map +1 -1
- package/dist/esm/time/timezone.js +8 -2
- package/dist/esm/time/timezone.js.map +1 -1
- package/dist/esm/types/metadata.d.ts +28 -4
- package/dist/esm/types/metadata.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/array/index.ts +11 -3
- package/src/box/index.ts +8 -2
- package/src/callsite/index.ts +150 -100
- package/src/drawing/registry.ts +278 -5
- package/src/index.ts +44 -1
- package/src/input.ts +18 -1
- package/src/label/index.ts +4 -1
- package/src/line/index.ts +22 -64
- package/src/linefill/index.ts +20 -1
- package/src/math/index.ts +2 -0
- package/src/polyline/index.ts +3 -1
- package/src/runtime/adapters/SimpleInputAdapter.ts +1 -1
- package/src/runtime/index.ts +1 -0
- package/src/runtime/inputs.ts +16 -0
- package/src/runtime/types.ts +1 -1
- package/src/script/index.ts +355 -34
- package/src/security/other.ts +269 -0
- package/src/session/bars.ts +70 -6
- package/src/session/calendar.ts +60 -10
- package/src/session/context.ts +162 -0
- package/src/str/floatingdecimal.ts +268 -0
- package/src/str/index.ts +8 -2
- package/src/str/numberformat.ts +13 -6
- package/src/ta/index.ts +304 -248
- package/src/ta/limits.ts +74 -0
- package/src/ta/running-sum.ts +2 -0
- package/src/ta-series.ts +19 -16
- package/src/table/index.ts +4 -1
- package/src/time/index.ts +6 -3
- package/src/time/session.ts +137 -15
- package/src/time/timezone.ts +9 -2
- package/src/types/metadata.ts +28 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/ta-series.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * @fileoverview Technical analysis functions that work with Series\n * Fixed wrappers around core ta.* functions with O(n) performance\n * @module ta-series\n */\n\nimport * as taCore from './ta/index.js';\nimport { Series } from './runtime/series.js';\nimport type { Bar } from './types/index.js';\n\n/**\n * Simple Moving Average\n * @param source - Source series\n * @param length - Period length\n * @returns Series with SMA values\n */\nexport function sma(source: Series, length: number | Series): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.sma(sourceValues, length instanceof Series ? length.toArray() : length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Exponential Moving Average\n * @param source - Source series\n * @param length - Period length\n * @returns Series with EMA values\n */\nexport function ema(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.ema(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Weighted Moving Average\n * @param source - Source series\n * @param length - Period length\n * @returns Series with WMA values\n */\nexport function wma(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.wma(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Relative Moving Average\n * @param source - Source series\n * @param length - Period length\n * @returns Series with RMA values\n */\nexport function rma(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.rma(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Relative Strength Index\n * @param source - Source series\n * @param length - Period length\n * @returns Series with RSI values\n */\nexport function rsi(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.rsi(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Moving Average Convergence Divergence\n * @param source - Source series\n * @param fastLength - Fast EMA period\n * @param slowLength - Slow EMA period\n * @param signalLength - Signal line period\n * @returns Tuple of [macdLine, signalLine, histogram] Series\n */\nexport function macd(\n source: Series,\n fastLength: number,\n slowLength: number,\n signalLength: number\n): [Series, Series, Series] {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const [macdVals, signalVals, histVals] = taCore.macd(sourceValues, fastLength, slowLength, signalLength);\n\n const macdSeries = Series.fromArray(bars, macdVals);\n const signalSeries = Series.fromArray(bars, signalVals);\n const histSeries = Series.fromArray(bars, histVals);\n\n return [macdSeries, signalSeries, histSeries];\n}\n\n/**\n * Bollinger Bands\n * @param source - Source series\n * @param length - Period length\n * @param mult - Standard deviation multiplier\n * @returns Tuple of [upper, basis, lower] Series\n */\nexport function bb(source: Series, length: number, mult: number): [Series, Series, Series] {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const [upperVals, basisVals, lowerVals] = taCore.bb(sourceValues, length, mult);\n\n const upperSeries = Series.fromArray(bars, upperVals);\n const basisSeries = Series.fromArray(bars, basisVals);\n const lowerSeries = Series.fromArray(bars, lowerVals);\n\n return [upperSeries, basisSeries, lowerSeries];\n}\n\n /**\n * Standard deviation (PineScript ta.stdev; biased by default)\n * @param source - Source series\n * @param length - Period length\n * @param biased - true (default): divide by length; false: by length - 1\n * @returns Series with standard deviation values\n */\n export function stdev(source: Series, length: number | Series, biased: boolean = true): Series {\n const bars = source.bars as Bar[];\n const len = length instanceof Series ? length.toArray() : length;\n return Series.fromArray(bars, taCore.stdev(source.toArray(), len, biased));\n }\n \n\n/**\n * Average True Range\n * @param bars - Bar data\n * @param length - Period length\n * @returns Series with ATR values\n */\nexport function atr(bars: Bar[], length: number): Series {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const result = taCore.atr(length, high, low, close);\n return Series.fromArray(bars, result);\n}\n\n/**\n * True Range\n * @param bars - Bar data\n * @param handle_na - How NaN values are handled (default: false)\n * @returns Series with TR values\n */\nexport function tr(bars: Bar[], handle_na: boolean = false): Series {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const result = taCore.tr(handle_na, high, low, close);\n return Series.fromArray(bars, result);\n}\n\n// Volume built-in variables. PineScript exposes them as variables of the chart bars\n// (`ta.obv`); here they take the bars.\n\nconst col = (bars: Bar[], f: 'open' | 'high' | 'low' | 'close' | 'volume'): number[] =>\n bars.map((b) => b[f] ?? NaN);\n\n/** On Balance Volume (PineScript `ta.obv`) */\nexport function obv(bars: Bar[]): Series {\n return Series.fromArray(bars, taCore.obv(col(bars, 'close'), col(bars, 'volume')));\n}\n\n/** Price-Volume Trend (PineScript `ta.pvt`) */\nexport function pvt(bars: Bar[]): Series {\n return Series.fromArray(bars, taCore.pvt(col(bars, 'close'), col(bars, 'volume')));\n}\n\n/** Accumulation/Distribution index (PineScript `ta.accdist`) */\nexport function accdist(bars: Bar[]): Series {\n return Series.fromArray(\n bars,\n taCore.accdist(col(bars, 'high'), col(bars, 'low'), col(bars, 'close'), col(bars, 'volume'))\n );\n}\n\n/** Negative Volume Index (PineScript `ta.nvi`) */\nexport function nvi(bars: Bar[]): Series {\n return Series.fromArray(bars, taCore.nvi(col(bars, 'close'), col(bars, 'volume')));\n}\n\n/** Positive Volume Index (PineScript `ta.pvi`) */\nexport function pvi(bars: Bar[]): Series {\n return Series.fromArray(bars, taCore.pvi(col(bars, 'close'), col(bars, 'volume')));\n}\n\n/** Intraday Intensity Index (PineScript `ta.iii`) */\nexport function iii(bars: Bar[]): Series {\n return Series.fromArray(\n bars,\n taCore.iii(col(bars, 'high'), col(bars, 'low'), col(bars, 'close'), col(bars, 'volume'))\n );\n}\n\n/** Williams Accumulation/Distribution (PineScript `ta.wad`) */\nexport function wad(bars: Bar[]): Series {\n return Series.fromArray(bars, taCore.wad(col(bars, 'high'), col(bars, 'low'), col(bars, 'close')));\n}\n\n/** Williams Variable Accumulation/Distribution (PineScript `ta.wvad`) */\nexport function wvad(bars: Bar[]): Series {\n return Series.fromArray(\n bars,\n taCore.wvad(col(bars, 'open'), col(bars, 'high'), col(bars, 'low'), col(bars, 'close'), col(bars, 'volume'))\n );\n}\n\n/**\n * Stochastic %K\n * @param source - Source series (typically close)\n * @param high - High series\n * @param low - Low series\n * @param length - Period length\n * @returns Series with stochastic values\n */\nexport function stoch(source: Series, high: Series, low: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const highValues = high.toArray();\n const lowValues = low.toArray();\n const result = taCore.stoch(sourceValues, highValues, lowValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Crossover detection\n * @param source1 - First series\n * @param source2 - Second series or number\n * @returns Series with 1 where crossover, 0 otherwise\n */\nexport function crossover(source1: Series, source2: Series | number): Series {\n const bars = source1.bars as Bar[];\n const vals1 = source1.toArray();\n const vals2 = typeof source2 === 'number'\n ? Array(bars.length).fill(source2)\n : source2.toArray();\n\n const result = taCore.crossover(vals1, vals2);\n // Convert boolean array to number array\n const numResult = result.map(b => b ? 1 : 0);\n return Series.fromArray(bars, numResult);\n}\n\n/**\n * Crossunder detection\n * @param source1 - First series\n * @param source2 - Second series or number\n * @returns Series with 1 where crossunder, 0 otherwise\n */\nexport function crossunder(source1: Series, source2: Series | number): Series {\n const bars = source1.bars as Bar[];\n const vals1 = source1.toArray();\n const vals2 = typeof source2 === 'number'\n ? Array(bars.length).fill(source2)\n : source2.toArray();\n\n const result = taCore.crossunder(vals1, vals2);\n // Convert boolean array to number array\n const numResult = result.map(b => b ? 1 : 0);\n return Series.fromArray(bars, numResult);\n}\n\n/**\n * Cross detection\n * @param source1 - First series\n * @param source2 - Second series or number\n * @returns Series with 1 where cross, 0 otherwise\n */\nexport function cross(source1: Series, source2: Series | number): Series {\n const bars = source1.bars as Bar[];\n const vals1 = source1.toArray();\n const vals2 = typeof source2 === 'number'\n ? Array(bars.length).fill(source2)\n : source2.toArray();\n\n const result = taCore.cross(vals1, vals2);\n // Convert boolean array to number array\n const numResult = result.map(b => b ? 1 : 0);\n return Series.fromArray(bars, numResult);\n}\n\n/**\n * Change (difference from previous value)\n * @param source - Source series\n * @param length - Lookback period\n * @returns Series with change values\n */\nexport function change(source: Series, length: number = 1): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.change(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Momentum\n * @param source - Source series\n * @param length - Lookback period\n * @returns Series with momentum values\n */\nexport function mom(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.mom(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Rate of Change\n * @param source - Source series\n * @param length - Lookback period\n * @returns Series with ROC values\n */\nexport function roc(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.roc(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Highest value in period\n * @param source - Source series\n * @param length - Period length\n * @returns Series with highest values\n */\nexport function highest(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.highest(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Lowest value in period\n * @param source - Source series\n * @param length - Period length\n * @returns Series with lowest values\n */\nexport function lowest(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.lowest(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Rising detection\n * @param source - Source series\n * @param length - Lookback period\n * @returns Series with 1 where rising, 0 otherwise\n */\nexport function rising(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.rising(sourceValues, length);\n // Convert boolean array to number array\n const numResult = result.map(b => b ? 1 : 0);\n return Series.fromArray(bars, numResult);\n}\n\n/**\n * Falling detection\n * @param source - Source series\n * @param length - Lookback period\n * @returns Series with 1 where falling, 0 otherwise\n */\nexport function falling(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.falling(sourceValues, length);\n // Convert boolean array to number array\n const numResult = result.map(b => b ? 1 : 0);\n return Series.fromArray(bars, numResult);\n}\n\n/**\n * Cumulative sum\n * @param source - Source series\n * @returns Series with cumulative sum values\n */\nexport function cum(source: Series): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.cum(sourceValues);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Supertrend indicator\n * @param bars - Bar data\n * @param factor - Multiplier factor\n * @param atrLength - ATR period length\n * @returns Tuple of [supertrend, direction] Series\n */\nexport function supertrend(bars: Bar[], factor: number, atrLength: number): [Series, Series] {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const [trendVals, dirVals] = taCore.supertrend(factor, atrLength, high, low, close);\n\n const trendSeries = Series.fromArray(bars, trendVals);\n const dirSeries = Series.fromArray(bars, dirVals);\n\n return [trendSeries, dirSeries];\n}\n\n /**\n * Volume Weighted Average Price (PineScript ta.vwap)\n * @param source - Source series\n * @param volume - Volume series\n * @param anchor - Reset condition (non-zero = reset); without it the sums never restart\n * @returns Series with VWAP values\n */\n export function vwap(source: Series, volume: Series, anchor?: Series): Series {\n const bars = source.bars as Bar[];\n return Series.fromArray(bars, taCore.vwap(source.toArray(), volume.toArray(), anchor?.toArray()));\n }\n\n /**\n * VWAP with standard deviation bands (PineScript `[vwap, upper, lower] = ta.vwap(source, anchor, stdev_mult)`)\n * @returns [vwap, upper, lower] Series\n */\n export function vwapBands(source: Series, volume: Series, anchor: Series | undefined, stdev_mult: number): [Series, Series, Series] {\n const bars = source.bars as Bar[];\n const [m, u, l] = taCore.vwap(source.toArray(), volume.toArray(), anchor?.toArray(), stdev_mult);\n return [Series.fromArray(bars, m), Series.fromArray(bars, u), Series.fromArray(bars, l)];\n }\n \n\n/**\n * Ichimoku Kinko Hyo (Ichimoku Cloud)\n * @param bars - Bar data\n * @param conversionPeriods - Period for Tenkan-sen (default: 9)\n * @param basePeriods - Period for Kijun-sen (default: 26)\n * @param laggingSpan2Periods - Period for Senkou Span B (default: 52)\n * @param displacement - Displacement for Senkou Spans and Chikou Span (default: 26)\n * @returns Tuple of [tenkanSen, kijunSen, senkouSpanA, senkouSpanB, chikouSpan] Series\n */\nexport function ichimoku(\n bars: Bar[],\n conversionPeriods: number,\n basePeriods: number,\n laggingSpan2Periods: number,\n displacement: number\n): [Series, Series, Series, Series, Series] {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const [tenkan, kijun, senkouA, senkouB, chikou] = taCore.ichimoku(\n conversionPeriods,\n basePeriods,\n laggingSpan2Periods,\n displacement,\n high,\n low,\n close\n );\n\n return [\n Series.fromArray(bars, tenkan),\n Series.fromArray(bars, kijun),\n Series.fromArray(bars, senkouA),\n Series.fromArray(bars, senkouB),\n Series.fromArray(bars, chikou),\n ];\n}\n\n/**\n * Volume Weighted Moving Average\n * @param source - Source series\n * @param length - Period length\n * @param volume - Volume series\n * @returns Series with VWMA values\n */\nexport function vwma(source: Series, length: number, volume: Series): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const volumeValues = volume.toArray();\n const result = taCore.vwma(sourceValues, length, volumeValues);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Linear Regression\n * @param source - Source series\n * @param length - Period length\n * @param offset - Offset (default: 0)\n * @returns Series with linear regression values\n */\nexport function linreg(source: Series, length: number, offset: number = 0): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.linreg(sourceValues, length, offset);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Arnaud Legoux Moving Average\n * @param source - Source series\n * @param length - Period length (default: 9)\n * @param offset - Controls tradeoff between smoothness and responsiveness (default: 0.85)\n * @param sigma - Standard deviation factor for sharpness (default: 6)\n * @param floor - Whether to floor the offset calculation (default: false)\n * @returns Series with ALMA values\n */\nexport function alma(source: Series, length: number = 9, offset: number = 0.85, sigma: number = 6, floor: boolean = false): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.alma(sourceValues, length, offset, sigma, floor);\n return Series.fromArray(bars, result);\n}\n\n/**\n * ZigZag indicator - identifies significant trend reversals\n * @param bars - Bar data\n * @param deviation - Minimum percentage price change to form a new pivot (default: 5.0)\n * @param depth - Minimum bars between pivots (default: 10)\n * @param backstep - Bars to look back for confirmation (default: 3)\n * @returns Tuple of [zigzag values, direction, isPivot flags] Series\n * @remarks\n * - The isPivot Series contains numeric values (1 for pivot, 0 for non-pivot)\n * converted from boolean for consistency with other Series-based functions\n * - The core ta.zigzag() function returns boolean isPivot values\n */\nexport function zigzag(\n bars: Bar[],\n deviation: number = 5,\n depth: number = 10,\n backstep: number = 3\n): [Series, Series, Series] {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n\n const [zigzagVals, dirVals, pivotVals] = taCore.zigzag(\n deviation, depth, backstep, undefined, high, low\n );\n\n // Convert boolean pivot flags to numbers (1/0) for Series compatibility\n return [\n Series.fromArray(bars, zigzagVals),\n Series.fromArray(bars, dirVals),\n Series.fromArray(bars, pivotVals.map(b => b ? 1 : 0)),\n ];\n}\n\n/**\n * Commodity Channel Index\n * @param source - Source series (typically hlc3)\n * @param length - Period length\n * @returns Series with CCI values\n */\nexport function cci(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.cci(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Parabolic SAR (Stop and Reverse)\n * @param bars - Bar data\n * @param start - Initial acceleration factor (default: 0.02)\n * @param inc - Acceleration factor increment (default: 0.02)\n * @param max - Maximum acceleration factor (default: 0.2)\n * @returns Series with SAR values\n */\nexport function sar(bars: Bar[], start: number = 0.02, inc: number = 0.02, max: number = 0.2): Series {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const result = taCore.sar(start, inc, max, high, low, close);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Deviation\n * @param source - Source series\n * @param length - Period length\n * @returns Series with deviation values\n */\nexport function dev(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.dev(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Variance\n * @param source - Source series\n * @param length - Period length\n * @param biased - Use biased estimation (default: true)\n * @returns Series with variance values\n */\nexport function variance(source: Series, length: number | Series, biased: boolean = true): Series {\n const bars = source.bars as Bar[];\n const result = taCore.variance(source.toArray(), length instanceof Series ? length.toArray() : length, biased);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Median\n * @param source - Source series\n * @param length - Period length\n * @returns Series with median values\n */\nexport function median(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.median(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Symmetrically Weighted Moving Average\n * @param source - Source series\n * @returns Series with SWMA values\n */\nexport function swma(source: Series): Series {\n const bars = source.bars as Bar[];\n const result = taCore.swma(source.toArray());\n return Series.fromArray(bars, result);\n}\n\n/**\n * Correlation\n * @param source1 - First source series\n * @param source2 - Second source series\n * @param length - Period length\n * @returns Series with correlation values\n */\nexport function correlation(source1: Series, source2: Series, length: number): Series {\n const bars = source1.bars as Bar[];\n const result = taCore.correlation(source1.toArray(), source2.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Percent Rank\n * @param source - Source series\n * @param length - Period length\n * @returns Series with percent rank values\n */\nexport function percentrank(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.percentrank(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Money Flow Index\n * @param source - Source series (typically hlc3)\n * @param length - Period length\n * @param volume - Volume series\n * @returns Series with MFI values\n */\nexport function mfi(source: Series, length: number, volume: Series): Series {\n const bars = source.bars as Bar[];\n const result = taCore.mfi(source.toArray(), length, volume.toArray());\n return Series.fromArray(bars, result);\n}\n\n/**\n * Hull Moving Average\n * @param source - Source series\n * @param length - Period length\n * @returns Series with HMA values\n */\nexport function hma(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.hma(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Pivot High\n * @param source - Source series\n * @param leftbars - Number of bars to the left of the pivot\n * @param rightbars - Number of bars to the right of the pivot\n * @returns Series with the pivot high value on the bar where the pivot is confirmed,\n * `rightbars` bars after the pivot bar (as in PineScript), NaN elsewhere\n */\nexport function pivothigh(source: Series, leftbars: number, rightbars: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.pivothigh(source.toArray(), leftbars, rightbars);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Pivot Low\n * @param source - Source series\n * @param leftbars - Number of bars to the left of the pivot\n * @param rightbars - Number of bars to the right of the pivot\n * @returns Series with the pivot low value on the bar where the pivot is confirmed,\n * `rightbars` bars after the pivot bar (as in PineScript), NaN elsewhere\n */\nexport function pivotlow(source: Series, leftbars: number, rightbars: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.pivotlow(source.toArray(), leftbars, rightbars);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Bars Since condition was true\n * @param condition - Boolean series (1/0 values)\n * @returns Series with bar count since condition was last true\n */\nexport function barssince(condition: Series): Series {\n const bars = condition.bars as Bar[];\n const boolValues = condition.toArray().map(v => v === 1);\n const result = taCore.barssince(boolValues);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Value When condition was true\n * @param condition - Boolean series (1/0 values)\n * @param source - Source series to extract values from\n * @param occurrence - Which occurrence to use (0 = most recent)\n * @returns Series with values from source when condition was true\n */\nexport function valuewhen(condition: Series, source: Series, occurrence: number): Series {\n const bars = condition.bars as Bar[];\n const boolValues = condition.toArray().map(v => v === 1);\n const result = taCore.valuewhen(boolValues, source.toArray(), occurrence);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Directional Movement Index\n * @param bars - Bar data\n * @param diLength - DI period length\n * @param adxSmoothing - ADX smoothing period\n * @returns Tuple of [plusDI, minusDI, adx] Series\n */\nexport function dmi(bars: Bar[], diLength: number, adxSmoothing: number): [Series, Series, Series] {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const [plusDI, minusDI, adx] = taCore.dmi(diLength, adxSmoothing, high, low, close);\n return [\n Series.fromArray(bars, plusDI),\n Series.fromArray(bars, minusDI),\n Series.fromArray(bars, adx),\n ];\n}\n\n/**\n * True Strength Index\n * @param source - Source series\n * @param shortLength - Short smoothing period\n * @param longLength - Long smoothing period\n * @returns Series with TSI values, in [-1, 1] as PineScript\n */\nexport function tsi(source: Series, shortLength: number, longLength: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.tsi(source.toArray(), shortLength, longLength);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Chande Momentum Oscillator\n * @param source - Source series\n * @param length - Period length\n * @returns Series with CMO values\n */\nexport function cmo(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.cmo(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Keltner Channel\n * @param bars - Bar data\n * @param source - Source series\n * @param length - Period length\n * @param mult - Multiplier\n * @param useTrueRange - Use true range (default: true)\n * @returns Tuple of [middle, upper, lower] Series\n */\nexport function kc(bars: Bar[], source: Series, length: number, mult: number, useTrueRange: boolean = true): [Series, Series, Series] {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const [middle, upper, lower] = taCore.kc(source.toArray(), length, mult, useTrueRange, high, low, close);\n return [\n Series.fromArray(bars, middle),\n Series.fromArray(bars, upper),\n Series.fromArray(bars, lower),\n ];\n}\n\n/**\n * Bollinger Bands Width\n * @param source - Source series\n * @param length - Period length\n * @param mult - Standard deviation multiplier\n * @returns Series with BBW values\n */\nexport function bbw(source: Series, length: number, mult: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.bbw(source.toArray(), length, mult);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Williams %R\n * @param bars - Bar data\n * @param length - Period length (default: 14)\n * @returns Series with Williams %R values\n */\nexport function wpr(bars: Bar[], length: number = 14): Series {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const result = taCore.wpr(high, low, close, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Keltner Channel Width\n * @param bars - Bar data\n * @param source - Source series\n * @param length - Period length (default: 20)\n * @param mult - Multiplier (default: 2)\n * @param useTrueRange - Use true range (default: true)\n * @returns Series with KCW values\n */\nexport function kcw(bars: Bar[], source: Series, length: number = 20, mult: number = 2, useTrueRange: boolean = true): Series {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const result = taCore.kcw(source.toArray(), length, mult, useTrueRange, high, low, close);\n return Series.fromArray(bars, result);\n}\n\n /**\n * Range: highest minus lowest value over the last `length` non-na values (PineScript ta.range)\n * @param source - Source series\n * @param length - Number of values\n * @returns Series with range values\n */\n export function range(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n return Series.fromArray(bars, taCore.range(source.toArray(), length));\n }\n \n\n/**\n * Highest Bars - offset to the highest value\n * @param source - Source series\n * @param length - Period length\n * @returns Series with bar offsets to highest value\n */\nexport function highestbars(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.highestbars(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Lowest Bars - offset to the lowest value\n * @param source - Source series\n * @param length - Period length\n * @returns Series with bar offsets to lowest value\n */\nexport function lowestbars(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.lowestbars(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n /**\n * All-time highest value (PineScript ta.max)\n * @param source - Source series\n * @returns Series with the highest value up to each bar\n */\n export function max(source: Series): Series {\n const bars = source.bars as Bar[];\n return Series.fromArray(bars, taCore.max(source.toArray()));\n }\n \n\n /**\n * All-time lowest value (PineScript ta.min)\n * @param source - Source series\n * @returns Series with the lowest value up to each bar\n */\n export function min(source: Series): Series {\n const bars = source.bars as Bar[];\n return Series.fromArray(bars, taCore.min(source.toArray()));\n }\n \n\n/**\n * Center of Gravity\n * @param source - Source series\n * @param length - Period length (default: 10)\n * @returns Series with COG values\n */\nexport function cog(source: Series, length: number = 10): Series {\n const bars = source.bars as Bar[];\n const result = taCore.cog(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Mode (most frequent value)\n * @param source - Source series\n * @param length - Period length\n * @returns Series with mode values\n */\nexport function mode(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.mode(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Percentile (linear interpolation)\n * @param source - Source series\n * @param length - Period length\n * @param percentage - Percentile percentage\n * @returns Series with percentile values\n */\nexport function percentile_linear_interpolation(source: Series, length: number, percentage: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.percentile_linear_interpolation(source.toArray(), length, percentage);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Percentile (nearest rank)\n * @param source - Source series\n * @param length - Period length\n * @param percentage - Percentile percentage\n * @returns Series with percentile values\n */\nexport function percentile_nearest_rank(source: Series, length: number, percentage: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.percentile_nearest_rank(source.toArray(), length, percentage);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Rank Correlation Index\n * @param source - Source series\n * @param length - Period length\n * @returns Series with RCI values\n */\nexport function rci(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.rci(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n// Export as namespace object to match PineScript ta.* syntax\nexport const ta = {\n sma,\n ema,\n wma,\n vwma,\n rma,\n rsi,\n macd,\n bb,\n stdev,\n atr,\n tr,\n stoch,\n crossover,\n crossunder,\n cross,\n change,\n mom,\n roc,\n highest,\n lowest,\n rising,\n falling,\n cum,\n supertrend,\n vwap,\n ichimoku,\n linreg,\n alma,\n zigzag,\n cci,\n sar,\n dev,\n variance,\n median,\n swma,\n correlation,\n percentrank,\n mfi,\n hma,\n pivothigh,\n pivotlow,\n barssince,\n valuewhen,\n dmi,\n tsi,\n cmo,\n kc,\n bbw,\n wpr,\n kcw,\n range,\n highestbars,\n lowestbars,\n max,\n min,\n vwapBands,\n obv,\n pvt,\n accdist,\n nvi,\n pvi,\n iii,\n wad,\n wvad,\n cog,\n mode,\n percentile_linear_interpolation,\n percentile_nearest_rank,\n rci,\n};\n"],
|
|
5
|
-
"mappings": "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GO,MAAM,KAAK;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
|
|
4
|
+
"sourcesContent": ["/**\n * @fileoverview Technical analysis functions that work with Series\n * Fixed wrappers around core ta.* functions with O(n) performance\n * @module ta-series\n */\n\nimport * as taCore from './ta/index.js';\nimport { Series } from './runtime/series.js';\nimport type { Bar } from './types/index.js';\n\n/**\n * Simple Moving Average\n * @param source - Source series\n * @param length - Period length\n * @returns Series with SMA values\n */\nexport function sma(source: Series, length: number | Series): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.sma(sourceValues, length instanceof Series ? length.toArray() : length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Exponential Moving Average\n * @param source - Source series\n * @param length - Period length\n * @returns Series with EMA values\n */\nexport function ema(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.ema(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Weighted Moving Average\n * @param source - Source series\n * @param length - Period length\n * @returns Series with WMA values\n */\nexport function wma(source: Series, length: number | Series): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.wma(sourceValues, length instanceof Series ? length.toArray() : length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Relative Moving Average\n * @param source - Source series\n * @param length - Period length\n * @returns Series with RMA values\n */\nexport function rma(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.rma(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Relative Strength Index\n * @param source - Source series\n * @param length - Period length\n * @returns Series with RSI values\n */\nexport function rsi(source: Series, length: number | Series): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n // a Series as second argument: PineScript v4 rsi(x, y) of two averages (#180)\n const result = length instanceof Series ? taCore.rsi(sourceValues, length.toArray()) : taCore.rsi(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Moving Average Convergence Divergence\n * @param source - Source series\n * @param fastLength - Fast EMA period\n * @param slowLength - Slow EMA period\n * @param signalLength - Signal line period\n * @returns Tuple of [macdLine, signalLine, histogram] Series\n */\nexport function macd(\n source: Series,\n fastLength: number,\n slowLength: number,\n signalLength: number\n): [Series, Series, Series] {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const [macdVals, signalVals, histVals] = taCore.macd(sourceValues, fastLength, slowLength, signalLength);\n\n const macdSeries = Series.fromArray(bars, macdVals);\n const signalSeries = Series.fromArray(bars, signalVals);\n const histSeries = Series.fromArray(bars, histVals);\n\n return [macdSeries, signalSeries, histSeries];\n}\n\n/**\n * Bollinger Bands\n * @param source - Source series\n * @param length - Period length\n * @param mult - Standard deviation multiplier\n * @returns Tuple of [upper, basis, lower] Series\n */\nexport function bb(source: Series, length: number, mult: number): [Series, Series, Series] {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const [upperVals, basisVals, lowerVals] = taCore.bb(sourceValues, length, mult);\n\n const upperSeries = Series.fromArray(bars, upperVals);\n const basisSeries = Series.fromArray(bars, basisVals);\n const lowerSeries = Series.fromArray(bars, lowerVals);\n\n return [upperSeries, basisSeries, lowerSeries];\n}\n\n /**\n * Standard deviation (PineScript ta.stdev; biased by default)\n * @param source - Source series\n * @param length - Period length\n * @param biased - true (default): divide by length; false: by length - 1\n * @returns Series with standard deviation values\n */\n export function stdev(source: Series, length: number | Series, biased: boolean = true): Series {\n const bars = source.bars as Bar[];\n const len = length instanceof Series ? length.toArray() : length;\n return Series.fromArray(bars, taCore.stdev(source.toArray(), len, biased));\n }\n \n\n/**\n * Average True Range\n * @param bars - Bar data\n * @param length - Period length\n * @returns Series with ATR values\n */\nexport function atr(bars: Bar[], length: number): Series {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const result = taCore.atr(length, high, low, close);\n return Series.fromArray(bars, result);\n}\n\n/**\n * True Range\n * @param bars - Bar data\n * @param handle_na - How NaN values are handled (default: false)\n * @returns Series with TR values\n */\nexport function tr(bars: Bar[], handle_na: boolean = false): Series {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const result = taCore.tr(handle_na, high, low, close);\n return Series.fromArray(bars, result);\n}\n\n// Volume built-in variables. PineScript exposes them as variables of the chart bars\n// (`ta.obv`); here they take the bars.\n\nconst col = (bars: Bar[], f: 'open' | 'high' | 'low' | 'close' | 'volume'): number[] =>\n bars.map((b) => b[f] ?? NaN);\n\n/** On Balance Volume (PineScript `ta.obv`) */\nexport function obv(bars: Bar[]): Series {\n return Series.fromArray(bars, taCore.obv(col(bars, 'close'), col(bars, 'volume')));\n}\n\n/** Price-Volume Trend (PineScript `ta.pvt`) */\nexport function pvt(bars: Bar[]): Series {\n return Series.fromArray(bars, taCore.pvt(col(bars, 'close'), col(bars, 'volume')));\n}\n\n/** Accumulation/Distribution index (PineScript `ta.accdist`) */\nexport function accdist(bars: Bar[]): Series {\n return Series.fromArray(\n bars,\n taCore.accdist(col(bars, 'high'), col(bars, 'low'), col(bars, 'close'), col(bars, 'volume'))\n );\n}\n\n/** Negative Volume Index (PineScript `ta.nvi`) */\nexport function nvi(bars: Bar[]): Series {\n return Series.fromArray(bars, taCore.nvi(col(bars, 'close'), col(bars, 'volume')));\n}\n\n/** Positive Volume Index (PineScript `ta.pvi`) */\nexport function pvi(bars: Bar[]): Series {\n return Series.fromArray(bars, taCore.pvi(col(bars, 'close'), col(bars, 'volume')));\n}\n\n/** Intraday Intensity Index (PineScript `ta.iii`) */\nexport function iii(bars: Bar[]): Series {\n return Series.fromArray(\n bars,\n taCore.iii(col(bars, 'high'), col(bars, 'low'), col(bars, 'close'), col(bars, 'volume'))\n );\n}\n\n/** Williams Accumulation/Distribution (PineScript `ta.wad`) */\nexport function wad(bars: Bar[]): Series {\n return Series.fromArray(bars, taCore.wad(col(bars, 'high'), col(bars, 'low'), col(bars, 'close')));\n}\n\n/** Williams Variable Accumulation/Distribution (PineScript `ta.wvad`) */\nexport function wvad(bars: Bar[]): Series {\n return Series.fromArray(\n bars,\n taCore.wvad(col(bars, 'open'), col(bars, 'high'), col(bars, 'low'), col(bars, 'close'), col(bars, 'volume'))\n );\n}\n\n/**\n * Stochastic %K\n * @param source - Source series (typically close)\n * @param high - High series\n * @param low - Low series\n * @param length - Period length\n * @returns Series with stochastic values\n */\nexport function stoch(source: Series, high: Series, low: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const highValues = high.toArray();\n const lowValues = low.toArray();\n const result = taCore.stoch(sourceValues, highValues, lowValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Crossover detection\n * @param source1 - First series\n * @param source2 - Second series or number\n * @returns Series with 1 where crossover, 0 otherwise\n */\nexport function crossover(source1: Series, source2: Series | number): Series {\n const bars = source1.bars as Bar[];\n const vals1 = source1.toArray();\n const vals2 = typeof source2 === 'number'\n ? Array(bars.length).fill(source2)\n : source2.toArray();\n\n const result = taCore.crossover(vals1, vals2);\n // Convert boolean array to number array\n const numResult = result.map(b => b ? 1 : 0);\n return Series.fromArray(bars, numResult);\n}\n\n/**\n * Crossunder detection\n * @param source1 - First series\n * @param source2 - Second series or number\n * @returns Series with 1 where crossunder, 0 otherwise\n */\nexport function crossunder(source1: Series, source2: Series | number): Series {\n const bars = source1.bars as Bar[];\n const vals1 = source1.toArray();\n const vals2 = typeof source2 === 'number'\n ? Array(bars.length).fill(source2)\n : source2.toArray();\n\n const result = taCore.crossunder(vals1, vals2);\n // Convert boolean array to number array\n const numResult = result.map(b => b ? 1 : 0);\n return Series.fromArray(bars, numResult);\n}\n\n/**\n * Cross detection\n * @param source1 - First series\n * @param source2 - Second series or number\n * @returns Series with 1 where cross, 0 otherwise\n */\nexport function cross(source1: Series, source2: Series | number): Series {\n const bars = source1.bars as Bar[];\n const vals1 = source1.toArray();\n const vals2 = typeof source2 === 'number'\n ? Array(bars.length).fill(source2)\n : source2.toArray();\n\n const result = taCore.cross(vals1, vals2);\n // Convert boolean array to number array\n const numResult = result.map(b => b ? 1 : 0);\n return Series.fromArray(bars, numResult);\n}\n\n/**\n * Change (difference from previous value)\n * @param source - Source series\n * @param length - Lookback period\n * @returns Series with change values\n */\nexport function change(source: Series, length: number = 1): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.change(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Momentum\n * @param source - Source series\n * @param length - Lookback period\n * @returns Series with momentum values\n */\nexport function mom(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.mom(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Rate of Change\n * @param source - Source series\n * @param length - Lookback period\n * @returns Series with ROC values\n */\nexport function roc(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.roc(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Highest value in period\n * @param source - Source series\n * @param length - Period length\n * @returns Series with highest values\n */\nexport function highest(source: Series, length: number | Series): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.highest(sourceValues, length instanceof Series ? length.toArray() : length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Lowest value in period\n * @param source - Source series\n * @param length - Period length\n * @returns Series with lowest values\n */\nexport function lowest(source: Series, length: number | Series): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.lowest(sourceValues, length instanceof Series ? length.toArray() : length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Rising detection\n * @param source - Source series\n * @param length - Lookback period\n * @returns Series with 1 where rising, 0 otherwise\n */\nexport function rising(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.rising(sourceValues, length);\n // Convert boolean array to number array\n const numResult = result.map(b => b ? 1 : 0);\n return Series.fromArray(bars, numResult);\n}\n\n/**\n * Falling detection\n * @param source - Source series\n * @param length - Lookback period\n * @returns Series with 1 where falling, 0 otherwise\n */\nexport function falling(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.falling(sourceValues, length);\n // Convert boolean array to number array\n const numResult = result.map(b => b ? 1 : 0);\n return Series.fromArray(bars, numResult);\n}\n\n/**\n * Cumulative sum\n * @param source - Source series\n * @returns Series with cumulative sum values\n */\nexport function cum(source: Series): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.cum(sourceValues);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Supertrend indicator\n * @param bars - Bar data\n * @param factor - Multiplier factor\n * @param atrLength - ATR period length\n * @returns Tuple of [supertrend, direction] Series\n */\nexport function supertrend(bars: Bar[], factor: number, atrLength: number): [Series, Series] {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const [trendVals, dirVals] = taCore.supertrend(factor, atrLength, high, low, close);\n\n const trendSeries = Series.fromArray(bars, trendVals);\n const dirSeries = Series.fromArray(bars, dirVals);\n\n return [trendSeries, dirSeries];\n}\n\n /**\n * Volume Weighted Average Price (PineScript ta.vwap)\n * @param source - Source series\n * @param volume - Volume series\n * @param anchor - Reset condition (non-zero = reset); without it the sums never restart\n * @returns Series with VWAP values\n */\n export function vwap(source: Series, volume: Series, anchor?: Series): Series {\n const bars = source.bars as Bar[];\n return Series.fromArray(bars, taCore.vwap(source.toArray(), volume.toArray(), anchor?.toArray()));\n }\n\n /**\n * VWAP with standard deviation bands (PineScript `[vwap, upper, lower] = ta.vwap(source, anchor, stdev_mult)`)\n * @returns [vwap, upper, lower] Series\n */\n export function vwapBands(source: Series, volume: Series, anchor: Series | undefined, stdev_mult: number): [Series, Series, Series] {\n const bars = source.bars as Bar[];\n const [m, u, l] = taCore.vwap(source.toArray(), volume.toArray(), anchor?.toArray(), stdev_mult);\n return [Series.fromArray(bars, m), Series.fromArray(bars, u), Series.fromArray(bars, l)];\n }\n \n\n/**\n * Ichimoku Kinko Hyo (Ichimoku Cloud)\n * @param bars - Bar data\n * @param conversionPeriods - Period for Tenkan-sen (default: 9)\n * @param basePeriods - Period for Kijun-sen (default: 26)\n * @param laggingSpan2Periods - Period for Senkou Span B (default: 52)\n * @param displacement - Displacement for Senkou Spans and Chikou Span (default: 26)\n * @returns Tuple of [tenkanSen, kijunSen, senkouSpanA, senkouSpanB, chikouSpan] Series\n */\nexport function ichimoku(\n bars: Bar[],\n conversionPeriods: number,\n basePeriods: number,\n laggingSpan2Periods: number,\n displacement: number\n): [Series, Series, Series, Series, Series] {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const [tenkan, kijun, senkouA, senkouB, chikou] = taCore.ichimoku(\n conversionPeriods,\n basePeriods,\n laggingSpan2Periods,\n displacement,\n high,\n low,\n close\n );\n\n return [\n Series.fromArray(bars, tenkan),\n Series.fromArray(bars, kijun),\n Series.fromArray(bars, senkouA),\n Series.fromArray(bars, senkouB),\n Series.fromArray(bars, chikou),\n ];\n}\n\n/**\n * Volume Weighted Moving Average\n * @param source - Source series\n * @param length - Period length\n * @param volume - Volume series\n * @returns Series with VWMA values\n */\nexport function vwma(source: Series, length: number, volume: Series): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const volumeValues = volume.toArray();\n const result = taCore.vwma(sourceValues, length, volumeValues);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Linear Regression\n * @param source - Source series\n * @param length - Period length\n * @param offset - Offset (default: 0)\n * @returns Series with linear regression values\n */\nexport function linreg(source: Series, length: number, offset: number = 0): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.linreg(sourceValues, length, offset);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Arnaud Legoux Moving Average\n * @param source - Source series\n * @param length - Period length (default: 9)\n * @param offset - Controls tradeoff between smoothness and responsiveness (default: 0.85)\n * @param sigma - Standard deviation factor for sharpness (default: 6)\n * @param floor - Whether to floor the offset calculation (default: false)\n * @returns Series with ALMA values\n */\nexport function alma(source: Series, length: number = 9, offset: number = 0.85, sigma: number = 6, floor: boolean = false): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.alma(sourceValues, length, offset, sigma, floor);\n return Series.fromArray(bars, result);\n}\n\n/**\n * ZigZag indicator - identifies significant trend reversals\n * @param bars - Bar data\n * @param deviation - Minimum percentage price change to form a new pivot (default: 5.0)\n * @param depth - Minimum bars between pivots (default: 10)\n * @param backstep - Bars to look back for confirmation (default: 3)\n * @returns Tuple of [zigzag values, direction, isPivot flags] Series\n * @remarks\n * - The isPivot Series contains numeric values (1 for pivot, 0 for non-pivot)\n * converted from boolean for consistency with other Series-based functions\n * - The core ta.zigzag() function returns boolean isPivot values\n */\nexport function zigzag(\n bars: Bar[],\n deviation: number = 5,\n depth: number = 10,\n backstep: number = 3\n): [Series, Series, Series] {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n\n const [zigzagVals, dirVals, pivotVals] = taCore.zigzag(\n deviation, depth, backstep, undefined, high, low\n );\n\n // Convert boolean pivot flags to numbers (1/0) for Series compatibility\n return [\n Series.fromArray(bars, zigzagVals),\n Series.fromArray(bars, dirVals),\n Series.fromArray(bars, pivotVals.map(b => b ? 1 : 0)),\n ];\n}\n\n/**\n * Commodity Channel Index\n * @param source - Source series (typically hlc3)\n * @param length - Period length\n * @returns Series with CCI values\n */\nexport function cci(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const sourceValues = source.toArray();\n const result = taCore.cci(sourceValues, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Parabolic SAR (Stop and Reverse)\n * @param bars - Bar data\n * @param start - Initial acceleration factor (default: 0.02)\n * @param inc - Acceleration factor increment (default: 0.02)\n * @param max - Maximum acceleration factor (default: 0.2)\n * @returns Series with SAR values\n */\nexport function sar(bars: Bar[], start: number = 0.02, inc: number = 0.02, max: number = 0.2): Series {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const result = taCore.sar(start, inc, max, high, low, close);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Deviation\n * @param source - Source series\n * @param length - Period length\n * @returns Series with deviation values\n */\nexport function dev(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.dev(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Variance\n * @param source - Source series\n * @param length - Period length\n * @param biased - Use biased estimation (default: true)\n * @returns Series with variance values\n */\nexport function variance(source: Series, length: number | Series, biased: boolean = true): Series {\n const bars = source.bars as Bar[];\n const result = taCore.variance(source.toArray(), length instanceof Series ? length.toArray() : length, biased);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Median\n * @param source - Source series\n * @param length - Period length\n * @returns Series with median values\n */\nexport function median(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.median(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Symmetrically Weighted Moving Average\n * @param source - Source series\n * @returns Series with SWMA values\n */\nexport function swma(source: Series): Series {\n const bars = source.bars as Bar[];\n const result = taCore.swma(source.toArray());\n return Series.fromArray(bars, result);\n}\n\n/**\n * Correlation\n * @param source1 - First source series\n * @param source2 - Second source series\n * @param length - Period length\n * @returns Series with correlation values\n */\nexport function correlation(source1: Series, source2: Series, length: number): Series {\n const bars = source1.bars as Bar[];\n const result = taCore.correlation(source1.toArray(), source2.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Percent Rank\n * @param source - Source series\n * @param length - Period length\n * @returns Series with percent rank values\n */\nexport function percentrank(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.percentrank(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Money Flow Index\n * @param source - Source series (typically hlc3)\n * @param length - Period length\n * @param volume - Volume series\n * @returns Series with MFI values\n */\nexport function mfi(source: Series, length: number, volume: Series): Series {\n const bars = source.bars as Bar[];\n const result = taCore.mfi(source.toArray(), length, volume.toArray());\n return Series.fromArray(bars, result);\n}\n\n/**\n * Hull Moving Average\n * @param source - Source series\n * @param length - Period length\n * @returns Series with HMA values\n */\nexport function hma(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.hma(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Pivot High\n * @param source - Source series\n * @param leftbars - Number of bars to the left of the pivot\n * @param rightbars - Number of bars to the right of the pivot\n * @returns Series with the pivot high value on the bar where the pivot is confirmed,\n * `rightbars` bars after the pivot bar (as in PineScript), NaN elsewhere\n */\nexport function pivothigh(source: Series, leftbars: number | Series, rightbars: number | Series): Series {\n const bars = source.bars as Bar[];\n const arr = (v: number | Series) => (v instanceof Series ? v.toArray() : v);\n const result = taCore.pivothigh(source.toArray(), arr(leftbars), arr(rightbars));\n return Series.fromArray(bars, result);\n}\n\n/**\n * Pivot Low\n * @param source - Source series\n * @param leftbars - Number of bars to the left of the pivot\n * @param rightbars - Number of bars to the right of the pivot\n * @returns Series with the pivot low value on the bar where the pivot is confirmed,\n * `rightbars` bars after the pivot bar (as in PineScript), NaN elsewhere\n */\nexport function pivotlow(source: Series, leftbars: number | Series, rightbars: number | Series): Series {\n const bars = source.bars as Bar[];\n const arr = (v: number | Series) => (v instanceof Series ? v.toArray() : v);\n const result = taCore.pivotlow(source.toArray(), arr(leftbars), arr(rightbars));\n return Series.fromArray(bars, result);\n}\n\n/**\n * Bars Since condition was true\n * @param condition - Boolean series (1/0 values)\n * @returns Series with bar count since condition was last true\n */\nexport function barssince(condition: Series): Series {\n const bars = condition.bars as Bar[];\n const boolValues = condition.toArray().map(v => v === 1);\n const result = taCore.barssince(boolValues);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Value When condition was true\n * @param condition - Boolean series (1/0 values)\n * @param source - Source series to extract values from\n * @param occurrence - Which occurrence to use (0 = most recent)\n * @returns Series with values from source when condition was true\n */\nexport function valuewhen(condition: Series, source: Series, occurrence: number): Series {\n const bars = condition.bars as Bar[];\n const boolValues = condition.toArray().map(v => v === 1);\n const result = taCore.valuewhen(boolValues, source.toArray(), occurrence);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Directional Movement Index\n * @param bars - Bar data\n * @param diLength - DI period length\n * @param adxSmoothing - ADX smoothing period\n * @returns Tuple of [plusDI, minusDI, adx] Series\n */\nexport function dmi(bars: Bar[], diLength: number, adxSmoothing: number): [Series, Series, Series] {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const [plusDI, minusDI, adx] = taCore.dmi(diLength, adxSmoothing, high, low, close);\n return [\n Series.fromArray(bars, plusDI),\n Series.fromArray(bars, minusDI),\n Series.fromArray(bars, adx),\n ];\n}\n\n/**\n * True Strength Index\n * @param source - Source series\n * @param shortLength - Short smoothing period\n * @param longLength - Long smoothing period\n * @returns Series with TSI values, in [-1, 1] as PineScript\n */\nexport function tsi(source: Series, shortLength: number, longLength: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.tsi(source.toArray(), shortLength, longLength);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Chande Momentum Oscillator\n * @param source - Source series\n * @param length - Period length\n * @returns Series with CMO values\n */\nexport function cmo(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.cmo(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Keltner Channel\n * @param bars - Bar data\n * @param source - Source series\n * @param length - Period length\n * @param mult - Multiplier\n * @param useTrueRange - Use true range (default: true)\n * @returns Tuple of [middle, upper, lower] Series\n */\nexport function kc(bars: Bar[], source: Series, length: number, mult: number, useTrueRange: boolean = true): [Series, Series, Series] {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const [middle, upper, lower] = taCore.kc(source.toArray(), length, mult, useTrueRange, high, low, close);\n return [\n Series.fromArray(bars, middle),\n Series.fromArray(bars, upper),\n Series.fromArray(bars, lower),\n ];\n}\n\n/**\n * Bollinger Bands Width\n * @param source - Source series\n * @param length - Period length\n * @param mult - Standard deviation multiplier\n * @returns Series with BBW values\n */\nexport function bbw(source: Series, length: number, mult: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.bbw(source.toArray(), length, mult);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Williams %R\n * @param bars - Bar data\n * @param length - Period length (default: 14)\n * @returns Series with Williams %R values\n */\nexport function wpr(bars: Bar[], length: number = 14): Series {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const result = taCore.wpr(high, low, close, length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Keltner Channel Width\n * @param bars - Bar data\n * @param source - Source series\n * @param length - Period length (default: 20)\n * @param mult - Multiplier (default: 2)\n * @param useTrueRange - Use true range (default: true)\n * @returns Series with KCW values\n */\nexport function kcw(bars: Bar[], source: Series, length: number = 20, mult: number = 2, useTrueRange: boolean = true): Series {\n const high = bars.map(b => b.high);\n const low = bars.map(b => b.low);\n const close = bars.map(b => b.close);\n const result = taCore.kcw(source.toArray(), length, mult, useTrueRange, high, low, close);\n return Series.fromArray(bars, result);\n}\n\n /**\n * Range: highest minus lowest value over the last `length` non-na values (PineScript ta.range)\n * @param source - Source series\n * @param length - Number of values\n * @returns Series with range values\n */\n export function range(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n return Series.fromArray(bars, taCore.range(source.toArray(), length));\n }\n \n\n/**\n * Highest Bars - offset to the highest value\n * @param source - Source series\n * @param length - Period length\n * @returns Series with bar offsets to highest value\n */\nexport function highestbars(source: Series, length: number | Series): Series {\n const bars = source.bars as Bar[];\n const result = taCore.highestbars(source.toArray(), length instanceof Series ? length.toArray() : length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Lowest Bars - offset to the lowest value\n * @param source - Source series\n * @param length - Period length\n * @returns Series with bar offsets to lowest value\n */\nexport function lowestbars(source: Series, length: number | Series): Series {\n const bars = source.bars as Bar[];\n const result = taCore.lowestbars(source.toArray(), length instanceof Series ? length.toArray() : length);\n return Series.fromArray(bars, result);\n}\n\n /**\n * All-time highest value (PineScript ta.max)\n * @param source - Source series\n * @returns Series with the highest value up to each bar\n */\n export function max(source: Series): Series {\n const bars = source.bars as Bar[];\n return Series.fromArray(bars, taCore.max(source.toArray()));\n }\n \n\n /**\n * All-time lowest value (PineScript ta.min)\n * @param source - Source series\n * @returns Series with the lowest value up to each bar\n */\n export function min(source: Series): Series {\n const bars = source.bars as Bar[];\n return Series.fromArray(bars, taCore.min(source.toArray()));\n }\n \n\n/**\n * Center of Gravity\n * @param source - Source series\n * @param length - Period length (default: 10)\n * @returns Series with COG values\n */\nexport function cog(source: Series, length: number = 10): Series {\n const bars = source.bars as Bar[];\n const result = taCore.cog(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Mode (most frequent value)\n * @param source - Source series\n * @param length - Period length\n * @returns Series with mode values\n */\nexport function mode(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.mode(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Percentile (linear interpolation)\n * @param source - Source series\n * @param length - Period length\n * @param percentage - Percentile percentage\n * @returns Series with percentile values\n */\nexport function percentile_linear_interpolation(source: Series, length: number, percentage: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.percentile_linear_interpolation(source.toArray(), length, percentage);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Percentile (nearest rank)\n * @param source - Source series\n * @param length - Period length\n * @param percentage - Percentile percentage\n * @returns Series with percentile values\n */\nexport function percentile_nearest_rank(source: Series, length: number, percentage: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.percentile_nearest_rank(source.toArray(), length, percentage);\n return Series.fromArray(bars, result);\n}\n\n/**\n * Rank Correlation Index\n * @param source - Source series\n * @param length - Period length\n * @returns Series with RCI values\n */\nexport function rci(source: Series, length: number): Series {\n const bars = source.bars as Bar[];\n const result = taCore.rci(source.toArray(), length);\n return Series.fromArray(bars, result);\n}\n\n// Export as namespace object to match PineScript ta.* syntax\nexport const ta = {\n sma,\n ema,\n wma,\n vwma,\n rma,\n rsi,\n macd,\n bb,\n stdev,\n atr,\n tr,\n stoch,\n crossover,\n crossunder,\n cross,\n change,\n mom,\n roc,\n highest,\n lowest,\n rising,\n falling,\n cum,\n supertrend,\n vwap,\n ichimoku,\n linreg,\n alma,\n zigzag,\n cci,\n sar,\n dev,\n variance,\n median,\n swma,\n correlation,\n percentrank,\n mfi,\n hma,\n pivothigh,\n pivotlow,\n barssince,\n valuewhen,\n dmi,\n tsi,\n cmo,\n kc,\n bbw,\n wpr,\n kcw,\n range,\n highestbars,\n lowestbars,\n max,\n min,\n vwapBands,\n obv,\n pvt,\n accdist,\n nvi,\n pvi,\n iii,\n wad,\n wvad,\n cog,\n mode,\n percentile_linear_interpolation,\n percentile_nearest_rank,\n rci,\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["max"]
|
|
7
7
|
}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* - `table.cell_set_*` changes one property of a cell (a cell that was not defined is created)
|
|
13
13
|
* - a column or row outside the table is a runtime error
|
|
14
14
|
* - a deleted table is `na`: its functions do nothing
|
|
15
|
+
* - one live table per position: `table.new` at the position of a live table deletes that table (#176)
|
|
15
16
|
*
|
|
16
17
|
* @version 6
|
|
17
18
|
*/
|
|
@@ -21,7 +22,8 @@ type HAlign = 'left' | 'center' | 'right';
|
|
|
21
22
|
type VAlign = 'top' | 'center' | 'bottom';
|
|
22
23
|
type FontFamily = 'default' | 'monospace';
|
|
23
24
|
/**
|
|
24
|
-
* Creates a new table (PineScript `table.new`).
|
|
25
|
+
* Creates a new table (PineScript `table.new`). A live table at the same position is deleted, as PineScript keeps
|
|
26
|
+
* one table per position (#176).
|
|
25
27
|
*
|
|
26
28
|
* @example
|
|
27
29
|
* ```typescript
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/table/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/table/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/table/index.js
CHANGED
|
@@ -47,6 +47,7 @@ __export(table_exports, {
|
|
|
47
47
|
module.exports = __toCommonJS(table_exports);
|
|
48
48
|
var import_registry = require("../drawing/registry.js");
|
|
49
49
|
function new_table(position, columns, rows, bgcolor, frame_color, frame_width, border_color, border_width, force_overlay) {
|
|
50
|
+
for (const old of (0, import_registry.all)("table")) if (old.position === position) (0, import_registry.remove)("table", old);
|
|
50
51
|
return (0, import_registry.register)("table", {
|
|
51
52
|
position,
|
|
52
53
|
columns,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/table/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Table namespace\n * Functions for creating and filling table drawing objects.\n *\n * @remarks\n * A table is drawn at a fixed position of the pane (`position.*`), not at a bar. Tables have no getters in\n * PineScript; the script API returns the live tables in `result.tables`.\n *\n * PineScript rules:\n * - `table.cell` defines a cell: the arguments it does not give get their default, a previous definition of the\n * cell is replaced\n * - `table.cell_set_*` changes one property of a cell (a cell that was not defined is created)\n * - a column or row outside the table is a runtime error\n * - a deleted table is `na`: its functions do nothing\n *\n * @version 6\n */\n\nimport { all as allDrawings, isDeleted, register, remove } from '../drawing/registry.js';\nimport type { Table, TableCell, color } from '../types/index.js';\n\ntype TablePosition = Table['position'];\ntype HAlign = 'left' | 'center' | 'right';\ntype VAlign = 'top' | 'center' | 'bottom';\ntype FontFamily = 'default' | 'monospace';\n\n/**\n * Creates a new table (PineScript `table.new`).\n *\n * @example\n * ```typescript\n * const t = table.new(position.top_right, 2, 3, '#131722', '#787B86', 1);\n * table.cell(t, 0, 0, 'RSI', 0, 0, '#FFFFFF');\n * ```\n */\nexport function new_table(\n position: TablePosition,\n columns: number,\n rows: number,\n bgcolor?: color,\n frame_color?: color,\n frame_width?: number,\n border_color?: color,\n border_width?: number,\n force_overlay?: boolean\n): Table {\n return register('table', {\n position,\n columns,\n rows,\n bgcolor,\n frame_color,\n frame_width,\n border_color,\n border_width,\n force_overlay: force_overlay ?? false,\n cells: new Map(),\n merges: [],\n });\n}\n\nfunction checkCell(caller: string, id: Table, column: number, row: number): void {\n if (!(column >= 0 && column < id.columns && row >= 0 && row < id.rows)) {\n throw new RangeError(\n `${caller}: column ${column}, row ${row} is outside the table (${id.columns} columns, ${id.rows} rows).`\n );\n }\n}\n\nconst key = (column: number, row: number): string => `${column},${row}`;\n\n/** The cell at column / row, created when it was not defined. */\nfunction cellOf(caller: string, id: Table, column: number, row: number): TableCell {\n checkCell(caller, id, column, row);\n const cells = (id.cells ??= new Map());\n let cell = cells.get(key(column, row));\n if (!cell) cells.set(key(column, row), (cell = { text: '' }));\n return cell;\n}\n\n/**\n * Defines a cell (PineScript `table.cell`): its text and properties. Omitted properties get their default.\n */\nexport function cell(\n table_id: Table,\n column: number,\n row: number,\n text?: string,\n width?: number,\n height?: number,\n text_color?: color,\n text_halign?: HAlign,\n text_valign?: VAlign,\n text_size?: string | number,\n bgcolor?: color,\n tooltip?: string,\n text_font_family?: FontFamily,\n text_formatting?: number\n): void {\n if (isDeleted(table_id)) return;\n checkCell('table.cell()', table_id, column, row);\n (table_id.cells ??= new Map()).set(key(column, row), {\n text: text ?? '',\n width,\n height,\n text_color,\n text_halign,\n text_valign,\n text_size,\n bgcolor,\n tooltip,\n text_font_family,\n text_formatting,\n });\n}\n\nfunction setCell<K extends keyof TableCell>(name: string, field: K) {\n return (table_id: Table, column: number, row: number, value: TableCell[K]): void => {\n if (isDeleted(table_id)) return;\n cellOf(`table.${name}()`, table_id, column, row)[field] = value;\n };\n}\n\n/** Sets the text of a cell. */\nexport const cell_set_text = setCell('cell_set_text', 'text');\n/** Sets the width of a cell (% of the chart width; 0 fits the text). */\nexport const cell_set_width = setCell('cell_set_width', 'width');\n/** Sets the height of a cell (% of the chart height; 0 fits the text). */\nexport const cell_set_height = setCell('cell_set_height', 'height');\n/** Sets the text colour of a cell. */\nexport const cell_set_text_color = setCell('cell_set_text_color', 'text_color');\n/** Sets the horizontal text alignment of a cell. */\nexport const cell_set_text_halign = setCell('cell_set_text_halign', 'text_halign');\n/** Sets the vertical text alignment of a cell. */\nexport const cell_set_text_valign = setCell('cell_set_text_valign', 'text_valign');\n/** Sets the text size of a cell. */\nexport const cell_set_text_size = setCell('cell_set_text_size', 'text_size');\n/** Sets the background colour of a cell. */\nexport const cell_set_bgcolor = setCell('cell_set_bgcolor', 'bgcolor');\n/** Sets the tooltip of a cell. */\nexport const cell_set_tooltip = setCell('cell_set_tooltip', 'tooltip');\n/** Sets the font family of a cell. */\nexport const cell_set_text_font_family = setCell('cell_set_text_font_family', 'text_font_family');\n/** Sets the text formatting of a cell (`text.format_*` flags). */\nexport const cell_set_text_formatting = setCell('cell_set_text_formatting', 'text_formatting');\n\n/**\n * Merges the cells from start_column / start_row to end_column / end_row (PineScript `table.merge_cells`). The\n * merged cell shows the content of the start cell.\n */\nexport function merge_cells(\n table_id: Table,\n start_column: number,\n start_row: number,\n end_column: number,\n end_row: number\n): void {\n if (isDeleted(table_id)) return;\n checkCell('table.merge_cells()', table_id, start_column, start_row);\n checkCell('table.merge_cells()', table_id, end_column, end_row);\n if (end_column < start_column || end_row < start_row) {\n throw new RangeError('table.merge_cells(): the end cell is before the start cell.');\n }\n (table_id.merges ??= []).push({ start_column, start_row, end_column, end_row });\n}\n\n/**\n * Removes the cells from start_column / start_row to end_column / end_row (PineScript `table.clear`; default end:\n * the start cell), and the merges that start in that range.\n */\nexport function clear(\n table_id: Table,\n start_column: number,\n start_row: number,\n end_column: number = start_column,\n end_row: number = start_row\n): void {\n if (isDeleted(table_id)) return;\n checkCell('table.clear()', table_id, start_column, start_row);\n checkCell('table.clear()', table_id, end_column, end_row);\n const inside = (column: number, row: number): boolean =>\n column >= start_column && column <= end_column && row >= start_row && row <= end_row;\n for (let column = start_column; column <= end_column; column++) {\n for (let row = start_row; row <= end_row; row++) table_id.cells?.delete(key(column, row));\n }\n if (table_id.merges) table_id.merges = table_id.merges.filter((m) => !inside(m.start_column, m.start_row));\n}\n\nfunction setTable<K extends keyof Table>(field: K) {\n return (table_id: Table, value: Table[K]): void => {\n if (isDeleted(table_id)) return;\n table_id[field] = value;\n };\n}\n\n/** Moves the table to another position (`position.*`). */\nexport const set_position = setTable('position');\n/** Sets the background colour of the table. */\nexport const set_bgcolor = setTable('bgcolor');\n/** Sets the colour of the outer frame. */\nexport const set_frame_color = setTable('frame_color');\n/** Sets the width of the outer frame. */\nexport const set_frame_width = setTable('frame_width');\n/** Sets the colour of the cell borders. */\nexport const set_border_color = setTable('border_color');\n/** Sets the width of the cell borders. */\nexport const set_border_width = setTable('border_width');\n\n/** Deletes the table (PineScript `table.delete`). */\nexport function delete_table(table_id: Table): void {\n remove('table', table_id);\n}\n\n/** All live tables, in creation order (PineScript `table.all`). A new array. */\nexport function all(): Table[] {\n return allDrawings('table');\n}\n\n// Alias to match PineScript API\nexport { new_table as new };\nexport { delete_table as delete };\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
6
|
-
"names": ["
|
|
4
|
+
"sourcesContent": ["/**\n * Table namespace\n * Functions for creating and filling table drawing objects.\n *\n * @remarks\n * A table is drawn at a fixed position of the pane (`position.*`), not at a bar. Tables have no getters in\n * PineScript; the script API returns the live tables in `result.tables`.\n *\n * PineScript rules:\n * - `table.cell` defines a cell: the arguments it does not give get their default, a previous definition of the\n * cell is replaced\n * - `table.cell_set_*` changes one property of a cell (a cell that was not defined is created)\n * - a column or row outside the table is a runtime error\n * - a deleted table is `na`: its functions do nothing\n * - one live table per position: `table.new` at the position of a live table deletes that table (#176)\n *\n * @version 6\n */\n\nimport { all as allDrawings, isDeleted, register, remove } from '../drawing/registry.js';\nimport type { Table, TableCell, color } from '../types/index.js';\n\ntype TablePosition = Table['position'];\ntype HAlign = 'left' | 'center' | 'right';\ntype VAlign = 'top' | 'center' | 'bottom';\ntype FontFamily = 'default' | 'monospace';\n\n/**\n * Creates a new table (PineScript `table.new`). A live table at the same position is deleted, as PineScript keeps\n * one table per position (#176).\n *\n * @example\n * ```typescript\n * const t = table.new(position.top_right, 2, 3, '#131722', '#787B86', 1);\n * table.cell(t, 0, 0, 'RSI', 0, 0, '#FFFFFF');\n * ```\n */\nexport function new_table(\n position: TablePosition,\n columns: number,\n rows: number,\n bgcolor?: color,\n frame_color?: color,\n frame_width?: number,\n border_color?: color,\n border_width?: number,\n force_overlay?: boolean\n): Table {\n for (const old of allDrawings('table')) if (old.position === position) remove('table', old);\n return register('table', {\n position,\n columns,\n rows,\n bgcolor,\n frame_color,\n frame_width,\n border_color,\n border_width,\n force_overlay: force_overlay ?? false,\n cells: new Map(),\n merges: [],\n });\n}\n\nfunction checkCell(caller: string, id: Table, column: number, row: number): void {\n if (!(column >= 0 && column < id.columns && row >= 0 && row < id.rows)) {\n throw new RangeError(\n `${caller}: column ${column}, row ${row} is outside the table (${id.columns} columns, ${id.rows} rows).`\n );\n }\n}\n\nconst key = (column: number, row: number): string => `${column},${row}`;\n\n/** The cell at column / row, created when it was not defined. */\nfunction cellOf(caller: string, id: Table, column: number, row: number): TableCell {\n checkCell(caller, id, column, row);\n const cells = (id.cells ??= new Map());\n let cell = cells.get(key(column, row));\n if (!cell) cells.set(key(column, row), (cell = { text: '' }));\n return cell;\n}\n\n/**\n * Defines a cell (PineScript `table.cell`): its text and properties. Omitted properties get their default.\n */\nexport function cell(\n table_id: Table,\n column: number,\n row: number,\n text?: string,\n width?: number,\n height?: number,\n text_color?: color,\n text_halign?: HAlign,\n text_valign?: VAlign,\n text_size?: string | number,\n bgcolor?: color,\n tooltip?: string,\n text_font_family?: FontFamily,\n text_formatting?: number\n): void {\n if (isDeleted(table_id)) return;\n checkCell('table.cell()', table_id, column, row);\n (table_id.cells ??= new Map()).set(key(column, row), {\n text: text ?? '',\n width,\n height,\n text_color,\n text_halign,\n text_valign,\n text_size,\n bgcolor,\n tooltip,\n text_font_family,\n text_formatting,\n });\n}\n\nfunction setCell<K extends keyof TableCell>(name: string, field: K) {\n return (table_id: Table, column: number, row: number, value: TableCell[K]): void => {\n if (isDeleted(table_id)) return;\n cellOf(`table.${name}()`, table_id, column, row)[field] = value;\n };\n}\n\n/** Sets the text of a cell. */\nexport const cell_set_text = setCell('cell_set_text', 'text');\n/** Sets the width of a cell (% of the chart width; 0 fits the text). */\nexport const cell_set_width = setCell('cell_set_width', 'width');\n/** Sets the height of a cell (% of the chart height; 0 fits the text). */\nexport const cell_set_height = setCell('cell_set_height', 'height');\n/** Sets the text colour of a cell. */\nexport const cell_set_text_color = setCell('cell_set_text_color', 'text_color');\n/** Sets the horizontal text alignment of a cell. */\nexport const cell_set_text_halign = setCell('cell_set_text_halign', 'text_halign');\n/** Sets the vertical text alignment of a cell. */\nexport const cell_set_text_valign = setCell('cell_set_text_valign', 'text_valign');\n/** Sets the text size of a cell. */\nexport const cell_set_text_size = setCell('cell_set_text_size', 'text_size');\n/** Sets the background colour of a cell. */\nexport const cell_set_bgcolor = setCell('cell_set_bgcolor', 'bgcolor');\n/** Sets the tooltip of a cell. */\nexport const cell_set_tooltip = setCell('cell_set_tooltip', 'tooltip');\n/** Sets the font family of a cell. */\nexport const cell_set_text_font_family = setCell('cell_set_text_font_family', 'text_font_family');\n/** Sets the text formatting of a cell (`text.format_*` flags). */\nexport const cell_set_text_formatting = setCell('cell_set_text_formatting', 'text_formatting');\n\n/**\n * Merges the cells from start_column / start_row to end_column / end_row (PineScript `table.merge_cells`). The\n * merged cell shows the content of the start cell.\n */\nexport function merge_cells(\n table_id: Table,\n start_column: number,\n start_row: number,\n end_column: number,\n end_row: number\n): void {\n if (isDeleted(table_id)) return;\n checkCell('table.merge_cells()', table_id, start_column, start_row);\n checkCell('table.merge_cells()', table_id, end_column, end_row);\n if (end_column < start_column || end_row < start_row) {\n throw new RangeError('table.merge_cells(): the end cell is before the start cell.');\n }\n (table_id.merges ??= []).push({ start_column, start_row, end_column, end_row });\n}\n\n/**\n * Removes the cells from start_column / start_row to end_column / end_row (PineScript `table.clear`; default end:\n * the start cell), and the merges that start in that range.\n */\nexport function clear(\n table_id: Table,\n start_column: number,\n start_row: number,\n end_column: number = start_column,\n end_row: number = start_row\n): void {\n if (isDeleted(table_id)) return;\n checkCell('table.clear()', table_id, start_column, start_row);\n checkCell('table.clear()', table_id, end_column, end_row);\n const inside = (column: number, row: number): boolean =>\n column >= start_column && column <= end_column && row >= start_row && row <= end_row;\n for (let column = start_column; column <= end_column; column++) {\n for (let row = start_row; row <= end_row; row++) table_id.cells?.delete(key(column, row));\n }\n if (table_id.merges) table_id.merges = table_id.merges.filter((m) => !inside(m.start_column, m.start_row));\n}\n\nfunction setTable<K extends keyof Table>(field: K) {\n return (table_id: Table, value: Table[K]): void => {\n if (isDeleted(table_id)) return;\n table_id[field] = value;\n };\n}\n\n/** Moves the table to another position (`position.*`). */\nexport const set_position = setTable('position');\n/** Sets the background colour of the table. */\nexport const set_bgcolor = setTable('bgcolor');\n/** Sets the colour of the outer frame. */\nexport const set_frame_color = setTable('frame_color');\n/** Sets the width of the outer frame. */\nexport const set_frame_width = setTable('frame_width');\n/** Sets the colour of the cell borders. */\nexport const set_border_color = setTable('border_color');\n/** Sets the width of the cell borders. */\nexport const set_border_width = setTable('border_width');\n\n/** Deletes the table (PineScript `table.delete`). */\nexport function delete_table(table_id: Table): void {\n remove('table', table_id);\n}\n\n/** All live tables, in creation order (PineScript `table.all`). A new array. */\nexport function all(): Table[] {\n return allDrawings('table');\n}\n\n// Alias to match PineScript API\nexport { new_table as new };\nexport { delete_table as delete };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["allDrawings", "cell"]
|
|
7
7
|
}
|
package/dist/cjs/time/index.d.ts
CHANGED
|
@@ -83,7 +83,10 @@ export declare function second(time: int, timezone: string): int;
|
|
|
83
83
|
* ":" (1 = Sunday ... 7 = Saturday), e.g. "0930-1600:23456" or "1000-1100,1400-1500".
|
|
84
84
|
* Without days, one period covers every day and several periods cover Monday to Friday.
|
|
85
85
|
* A period includes its start and excludes its end. An overnight period ("1800-0930")
|
|
86
|
-
* belongs to the day it ends. "0000-0000" and "24x7" cover the whole day.
|
|
86
|
+
* belongs to the day it ends. "0000-0000" and "24x7" cover the whole day. A period that ends at 0000 ends at 24:00 of
|
|
87
|
+
* the day it starts. On the days around a clock change the periods are placed as PineScript places them (see
|
|
88
|
+
* time/session.ts); `barMs`, the duration of the bars in ms, is needed for one of these rules (the day before the
|
|
89
|
+
* clocks go back).
|
|
87
90
|
*/
|
|
88
|
-
export declare function inSession(time: int, session: string, timezone: string): boolean;
|
|
91
|
+
export declare function inSession(time: int, session: string, timezone: string, barMs?: number): boolean;
|
|
89
92
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/time/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKzD;;GAEG;AACH,wBAAgB,GAAG,IAAI,GAAG,CAEzB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC;AACnD,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,UAAU,EACf,IAAI,CAAC,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,UAAU,EACnB,MAAM,CAAC,EAAE,UAAU,GAClB,GAAG,CAAC;AACP,wBAAgB,SAAS,CACvB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,UAAU,EACf,IAAI,CAAC,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,UAAU,EACnB,MAAM,CAAC,EAAE,UAAU,GAClB,GAAG,CAAC;AAmBP;;GAEG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAErD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAEtD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAE3D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAE1D;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAQ3D;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAErD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAEvD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAEvD;AAID
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/time/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKzD;;GAEG;AACH,wBAAgB,GAAG,IAAI,GAAG,CAEzB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC;AACnD,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,UAAU,EACf,IAAI,CAAC,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,UAAU,EACnB,MAAM,CAAC,EAAE,UAAU,GAClB,GAAG,CAAC;AACP,wBAAgB,SAAS,CACvB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,UAAU,EACf,IAAI,CAAC,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,UAAU,EACnB,MAAM,CAAC,EAAE,UAAU,GAClB,GAAG,CAAC;AAmBP;;GAEG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAErD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAEtD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAE3D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAE1D;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAQ3D;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAErD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAEvD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAEvD;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAE/F"}
|
package/dist/cjs/time/index.js
CHANGED
|
@@ -80,7 +80,7 @@ function minute(time, timezone) {
|
|
|
80
80
|
function second(time, timezone) {
|
|
81
81
|
return field(time, timezone, (f) => f.second);
|
|
82
82
|
}
|
|
83
|
-
function inSession(time, session, timezone) {
|
|
84
|
-
return (0, import_session.inSession)(time, session, timezone);
|
|
83
|
+
function inSession(time, session, timezone, barMs) {
|
|
84
|
+
return (0, import_session.inSession)(time, session, timezone, barMs);
|
|
85
85
|
}
|
|
86
86
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/time/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Time namespace\n * Mirrors PineScript's time and calendar functions.\n *\n * Every function takes an explicit time zone: UTC/GMT offset notation (\"UTC-5\",\n * \"GMT+0530\", \"UTC+05:30\") or an IANA name (\"America/New_York\"). The PineScript\n * default time zone (the exchange time zone, `syminfo.timezone`) is not known here.\n */\n\nimport type { int, simple_int } from '../types/index.js';\nimport { zonedFields, zonedToUnix } from './timezone.js';\nimport { parseDateString } from './datestring.js';\nimport { inSession as sessionContains } from './session.js';\n\n/**\n * Returns the current time in milliseconds\n */\nexport function now(): int {\n return Date.now();\n}\n\n/**\n * Returns the UNIX time (ms) of a date and time.\n *\n * - `timestamp(dateString)`: RFC 2822 or ISO 8601 date string (\"20 Feb 2020\",\n * \"2020-02-20T14:48:00\", \"2024-01-01 09:30 +0000\", \"04 Dec 1995 00:12:00 GMT+5\").\n * Without a time the time is 00:00; without a time zone the time zone is GMT+0.\n * - `timestamp(timezone, year, month, day, hour?, minute?, second?)`: calendar fields in `timezone`.\n * A wall-clock time that occurs twice resolves to the later instant; a missing one is\n * shifted forward by the gap (as in PineScript).\n * - `timestamp(year, month, day, hour?, minute?, second?)`: calendar fields in the time zone\n * of the host. PineScript reads them in the exchange time zone, which is not known here:\n * use the `timezone` form for PineScript values.\n *\n * Out-of-range fields roll over (month 13 is January of the next year).\n *\n * @example\n * ```typescript\n * time.timestamp('2024-01-02'); // 1704153600000\n * time.timestamp('America/New_York', 2024, 1, 2, 9, 30); // 1704205800000\n * ```\n */\nexport function timestamp(dateString: string): int;\nexport function timestamp(\n timezone: string,\n year: simple_int,\n month: simple_int,\n day: simple_int,\n hour?: simple_int,\n minute?: simple_int,\n second?: simple_int\n): int;\nexport function timestamp(\n year: simple_int,\n month: simple_int,\n day: simple_int,\n hour?: simple_int,\n minute?: simple_int,\n second?: simple_int\n): int;\nexport function timestamp(first: string | simple_int, ...rest: Array<simple_int | undefined>): int {\n if (typeof first === 'string') {\n if (rest.length === 0) return parseDateString(first);\n // PineScript: an na field counts as 0 (day na of January 2020 is 2019-12-31)\n const f = (v: number | undefined) => (v === undefined || v === null || Number.isNaN(v) ? 0 : v);\n const [year, month, day, hour, minute, second] = rest as [number, number, number, number?, number?, number?];\n return zonedToUnix(first, f(year), f(month), f(day), f(hour), f(minute), f(second));\n }\n const [month, day, hour, minute, second] = rest as [number, number, number?, number?, number?];\n return new Date(first, month - 1, day, hour || 0, minute || 0, second || 0).getTime();\n}\n\n// \u2500\u2500 Calendar fields \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction field(time: number, timezone: string, pick: (f: ReturnType<typeof zonedFields>) => number): int {\n return Number.isNaN(time) ? NaN : pick(zonedFields(time, timezone));\n}\n\n/**\n * Year of a UNIX time (ms) in `timezone`.\n */\nexport function year(time: int, timezone: string): int {\n return field(time, timezone, (f) => f.year);\n}\n\n/**\n * Month (1-12) of a UNIX time (ms) in `timezone`.\n */\nexport function month(time: int, timezone: string): int {\n return field(time, timezone, (f) => f.month);\n}\n\n/**\n * Day of the month (1-31) of a UNIX time (ms) in `timezone`.\n */\nexport function dayofmonth(time: int, timezone: string): int {\n return field(time, timezone, (f) => f.day);\n}\n\n/**\n * Day of the week of a UNIX time (ms) in `timezone`: 1 = Sunday, 2 = Monday ... 7 = Saturday\n * (PineScript `dayofweek.sunday` ... `dayofweek.saturday`).\n */\nexport function dayofweek(time: int, timezone: string): int {\n return field(time, timezone, (f) => f.dayOfWeek);\n}\n\n/**\n * Week number of the year of a UNIX time (ms) in `timezone`.\n *\n * Weeks start on Monday and follow ISO 8601: week 1 is the week that contains the\n * first Thursday of the year, so the first days of January can be in week 52 or 53\n * of the previous year. The PineScript reference does not define the rule.\n */\nexport function weekofyear(time: int, timezone: string): int {\n return field(time, timezone, (f) => {\n const date = Date.UTC(f.year, f.month - 1, f.day);\n const mondayBased = (f.dayOfWeek + 5) % 7; // Monday = 0 ... Sunday = 6\n const thursday = new Date(date + (3 - mondayBased) * 86_400_000);\n const yearStart = Date.UTC(thursday.getUTCFullYear(), 0, 1);\n return 1 + Math.floor((thursday.getTime() - yearStart) / (7 * 86_400_000));\n });\n}\n\n/**\n * Hour (0-23) of a UNIX time (ms) in `timezone`.\n */\nexport function hour(time: int, timezone: string): int {\n return field(time, timezone, (f) => f.hour);\n}\n\n/**\n * Minute (0-59) of a UNIX time (ms) in `timezone`.\n */\nexport function minute(time: int, timezone: string): int {\n return field(time, timezone, (f) => f.minute);\n}\n\n/**\n * Second (0-59) of a UNIX time (ms) in `timezone`.\n */\nexport function second(time: int, timezone: string): int {\n return field(time, timezone, (f) => f.second);\n}\n\n// \u2500\u2500 Sessions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * True when a bar opening at `time` is inside `session`, with the session hours read in `timezone`.\n *\n * This is the session test of PineScript `time(timeframe, session, timezone)`, which returns\n * `na` for bars outside the session: `na(time(\"1\", \"0930-1600\", \"America/New_York\"))` is\n * `!time.inSession(barTime, \"0930-1600\", \"America/New_York\")`.\n *\n * Session format: \"HHmm-HHmm\", several periods separated by commas, optional days after\n * \":\" (1 = Sunday ... 7 = Saturday), e.g. \"0930-1600:23456\" or \"1000-1100,1400-1500\".\n * Without days, one period covers every day and several periods cover Monday to Friday.\n * A period includes its start and excludes its end. An overnight period (\"1800-0930\")\n * belongs to the day it ends. \"0000-0000\" and \"24x7\" cover the whole day.\n */\nexport function inSession(time: int, session: string, timezone: string): boolean {\n return sessionContains(time, session, timezone);\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,sBAAyC;AACzC,wBAAgC;AAChC,qBAA6C;AAKtC,SAAS,MAAW;AACzB,SAAO,KAAK,IAAI;AAClB;AAyCO,SAAS,UAAU,UAA+B,MAA0C;AACjG,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,KAAK,WAAW,EAAG,YAAO,mCAAgB,KAAK;AAEnD,UAAM,IAAI,CAAC,MAA2B,MAAM,UAAa,MAAM,QAAQ,OAAO,MAAM,CAAC,IAAI,IAAI;AAC7F,UAAM,CAACA,OAAMC,QAAOC,MAAKC,OAAMC,SAAQC,OAAM,IAAI;AACjD,eAAO,6BAAY,OAAO,EAAEL,KAAI,GAAG,EAAEC,MAAK,GAAG,EAAEC,IAAG,GAAG,EAAEC,KAAI,GAAG,EAAEC,OAAM,GAAG,EAAEC,OAAM,CAAC;AAAA,EACpF;AACA,QAAM,CAACJ,QAAO,KAAKE,OAAMC,SAAQC,OAAM,IAAI;AAC3C,SAAO,IAAI,KAAK,OAAOJ,SAAQ,GAAG,KAAKE,SAAQ,GAAGC,WAAU,GAAGC,WAAU,CAAC,EAAE,QAAQ;AACtF;AAIA,SAAS,MAAM,MAAc,UAAkB,MAA0D;AACvG,SAAO,OAAO,MAAM,IAAI,IAAI,MAAM,SAAK,6BAAY,MAAM,QAAQ,CAAC;AACpE;AAKO,SAAS,KAAK,MAAW,UAAuB;AACrD,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI;AAC5C;AAKO,SAAS,MAAM,MAAW,UAAuB;AACtD,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK;AAC7C;AAKO,SAAS,WAAW,MAAW,UAAuB;AAC3D,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,GAAG;AAC3C;AAMO,SAAS,UAAU,MAAW,UAAuB;AAC1D,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,SAAS;AACjD;AASO,SAAS,WAAW,MAAW,UAAuB;AAC3D,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM;AAClC,UAAM,OAAO,KAAK,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAG,EAAE,GAAG;AAChD,UAAM,eAAe,EAAE,YAAY,KAAK;AACxC,UAAM,WAAW,IAAI,KAAK,QAAQ,IAAI,eAAe,KAAU;AAC/D,UAAM,YAAY,KAAK,IAAI,SAAS,eAAe,GAAG,GAAG,CAAC;AAC1D,WAAO,IAAI,KAAK,OAAO,SAAS,QAAQ,IAAI,cAAc,IAAI,MAAW;AAAA,EAC3E,CAAC;AACH;AAKO,SAAS,KAAK,MAAW,UAAuB;AACrD,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI;AAC5C;AAKO,SAAS,OAAO,MAAW,UAAuB;AACvD,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM;AAC9C;AAKO,SAAS,OAAO,MAAW,UAAuB;AACvD,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM;AAC9C;
|
|
4
|
+
"sourcesContent": ["/**\n * Time namespace\n * Mirrors PineScript's time and calendar functions.\n *\n * Every function takes an explicit time zone: UTC/GMT offset notation (\"UTC-5\",\n * \"GMT+0530\", \"UTC+05:30\") or an IANA name (\"America/New_York\"). The PineScript\n * default time zone (the exchange time zone, `syminfo.timezone`) is not known here.\n */\n\nimport type { int, simple_int } from '../types/index.js';\nimport { zonedFields, zonedToUnix } from './timezone.js';\nimport { parseDateString } from './datestring.js';\nimport { inSession as sessionContains } from './session.js';\n\n/**\n * Returns the current time in milliseconds\n */\nexport function now(): int {\n return Date.now();\n}\n\n/**\n * Returns the UNIX time (ms) of a date and time.\n *\n * - `timestamp(dateString)`: RFC 2822 or ISO 8601 date string (\"20 Feb 2020\",\n * \"2020-02-20T14:48:00\", \"2024-01-01 09:30 +0000\", \"04 Dec 1995 00:12:00 GMT+5\").\n * Without a time the time is 00:00; without a time zone the time zone is GMT+0.\n * - `timestamp(timezone, year, month, day, hour?, minute?, second?)`: calendar fields in `timezone`.\n * A wall-clock time that occurs twice resolves to the later instant; a missing one is\n * shifted forward by the gap (as in PineScript).\n * - `timestamp(year, month, day, hour?, minute?, second?)`: calendar fields in the time zone\n * of the host. PineScript reads them in the exchange time zone, which is not known here:\n * use the `timezone` form for PineScript values.\n *\n * Out-of-range fields roll over (month 13 is January of the next year).\n *\n * @example\n * ```typescript\n * time.timestamp('2024-01-02'); // 1704153600000\n * time.timestamp('America/New_York', 2024, 1, 2, 9, 30); // 1704205800000\n * ```\n */\nexport function timestamp(dateString: string): int;\nexport function timestamp(\n timezone: string,\n year: simple_int,\n month: simple_int,\n day: simple_int,\n hour?: simple_int,\n minute?: simple_int,\n second?: simple_int\n): int;\nexport function timestamp(\n year: simple_int,\n month: simple_int,\n day: simple_int,\n hour?: simple_int,\n minute?: simple_int,\n second?: simple_int\n): int;\nexport function timestamp(first: string | simple_int, ...rest: Array<simple_int | undefined>): int {\n if (typeof first === 'string') {\n if (rest.length === 0) return parseDateString(first);\n // PineScript: an na field counts as 0 (day na of January 2020 is 2019-12-31)\n const f = (v: number | undefined) => (v === undefined || v === null || Number.isNaN(v) ? 0 : v);\n const [year, month, day, hour, minute, second] = rest as [number, number, number, number?, number?, number?];\n return zonedToUnix(first, f(year), f(month), f(day), f(hour), f(minute), f(second));\n }\n const [month, day, hour, minute, second] = rest as [number, number, number?, number?, number?];\n return new Date(first, month - 1, day, hour || 0, minute || 0, second || 0).getTime();\n}\n\n// \u2500\u2500 Calendar fields \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction field(time: number, timezone: string, pick: (f: ReturnType<typeof zonedFields>) => number): int {\n return Number.isNaN(time) ? NaN : pick(zonedFields(time, timezone));\n}\n\n/**\n * Year of a UNIX time (ms) in `timezone`.\n */\nexport function year(time: int, timezone: string): int {\n return field(time, timezone, (f) => f.year);\n}\n\n/**\n * Month (1-12) of a UNIX time (ms) in `timezone`.\n */\nexport function month(time: int, timezone: string): int {\n return field(time, timezone, (f) => f.month);\n}\n\n/**\n * Day of the month (1-31) of a UNIX time (ms) in `timezone`.\n */\nexport function dayofmonth(time: int, timezone: string): int {\n return field(time, timezone, (f) => f.day);\n}\n\n/**\n * Day of the week of a UNIX time (ms) in `timezone`: 1 = Sunday, 2 = Monday ... 7 = Saturday\n * (PineScript `dayofweek.sunday` ... `dayofweek.saturday`).\n */\nexport function dayofweek(time: int, timezone: string): int {\n return field(time, timezone, (f) => f.dayOfWeek);\n}\n\n/**\n * Week number of the year of a UNIX time (ms) in `timezone`.\n *\n * Weeks start on Monday and follow ISO 8601: week 1 is the week that contains the\n * first Thursday of the year, so the first days of January can be in week 52 or 53\n * of the previous year. The PineScript reference does not define the rule.\n */\nexport function weekofyear(time: int, timezone: string): int {\n return field(time, timezone, (f) => {\n const date = Date.UTC(f.year, f.month - 1, f.day);\n const mondayBased = (f.dayOfWeek + 5) % 7; // Monday = 0 ... Sunday = 6\n const thursday = new Date(date + (3 - mondayBased) * 86_400_000);\n const yearStart = Date.UTC(thursday.getUTCFullYear(), 0, 1);\n return 1 + Math.floor((thursday.getTime() - yearStart) / (7 * 86_400_000));\n });\n}\n\n/**\n * Hour (0-23) of a UNIX time (ms) in `timezone`.\n */\nexport function hour(time: int, timezone: string): int {\n return field(time, timezone, (f) => f.hour);\n}\n\n/**\n * Minute (0-59) of a UNIX time (ms) in `timezone`.\n */\nexport function minute(time: int, timezone: string): int {\n return field(time, timezone, (f) => f.minute);\n}\n\n/**\n * Second (0-59) of a UNIX time (ms) in `timezone`.\n */\nexport function second(time: int, timezone: string): int {\n return field(time, timezone, (f) => f.second);\n}\n\n// \u2500\u2500 Sessions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * True when a bar opening at `time` is inside `session`, with the session hours read in `timezone`.\n *\n * This is the session test of PineScript `time(timeframe, session, timezone)`, which returns\n * `na` for bars outside the session: `na(time(\"1\", \"0930-1600\", \"America/New_York\"))` is\n * `!time.inSession(barTime, \"0930-1600\", \"America/New_York\")`.\n *\n * Session format: \"HHmm-HHmm\", several periods separated by commas, optional days after\n * \":\" (1 = Sunday ... 7 = Saturday), e.g. \"0930-1600:23456\" or \"1000-1100,1400-1500\".\n * Without days, one period covers every day and several periods cover Monday to Friday.\n * A period includes its start and excludes its end. An overnight period (\"1800-0930\")\n * belongs to the day it ends. \"0000-0000\" and \"24x7\" cover the whole day. A period that ends at 0000 ends at 24:00 of\n * the day it starts. On the days around a clock change the periods are placed as PineScript places them (see\n * time/session.ts); `barMs`, the duration of the bars in ms, is needed for one of these rules (the day before the\n * clocks go back).\n */\nexport function inSession(time: int, session: string, timezone: string, barMs?: number): boolean {\n return sessionContains(time, session, timezone, barMs);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,sBAAyC;AACzC,wBAAgC;AAChC,qBAA6C;AAKtC,SAAS,MAAW;AACzB,SAAO,KAAK,IAAI;AAClB;AAyCO,SAAS,UAAU,UAA+B,MAA0C;AACjG,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,KAAK,WAAW,EAAG,YAAO,mCAAgB,KAAK;AAEnD,UAAM,IAAI,CAAC,MAA2B,MAAM,UAAa,MAAM,QAAQ,OAAO,MAAM,CAAC,IAAI,IAAI;AAC7F,UAAM,CAACA,OAAMC,QAAOC,MAAKC,OAAMC,SAAQC,OAAM,IAAI;AACjD,eAAO,6BAAY,OAAO,EAAEL,KAAI,GAAG,EAAEC,MAAK,GAAG,EAAEC,IAAG,GAAG,EAAEC,KAAI,GAAG,EAAEC,OAAM,GAAG,EAAEC,OAAM,CAAC;AAAA,EACpF;AACA,QAAM,CAACJ,QAAO,KAAKE,OAAMC,SAAQC,OAAM,IAAI;AAC3C,SAAO,IAAI,KAAK,OAAOJ,SAAQ,GAAG,KAAKE,SAAQ,GAAGC,WAAU,GAAGC,WAAU,CAAC,EAAE,QAAQ;AACtF;AAIA,SAAS,MAAM,MAAc,UAAkB,MAA0D;AACvG,SAAO,OAAO,MAAM,IAAI,IAAI,MAAM,SAAK,6BAAY,MAAM,QAAQ,CAAC;AACpE;AAKO,SAAS,KAAK,MAAW,UAAuB;AACrD,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI;AAC5C;AAKO,SAAS,MAAM,MAAW,UAAuB;AACtD,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK;AAC7C;AAKO,SAAS,WAAW,MAAW,UAAuB;AAC3D,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,GAAG;AAC3C;AAMO,SAAS,UAAU,MAAW,UAAuB;AAC1D,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,SAAS;AACjD;AASO,SAAS,WAAW,MAAW,UAAuB;AAC3D,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM;AAClC,UAAM,OAAO,KAAK,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAG,EAAE,GAAG;AAChD,UAAM,eAAe,EAAE,YAAY,KAAK;AACxC,UAAM,WAAW,IAAI,KAAK,QAAQ,IAAI,eAAe,KAAU;AAC/D,UAAM,YAAY,KAAK,IAAI,SAAS,eAAe,GAAG,GAAG,CAAC;AAC1D,WAAO,IAAI,KAAK,OAAO,SAAS,QAAQ,IAAI,cAAc,IAAI,MAAW;AAAA,EAC3E,CAAC;AACH;AAKO,SAAS,KAAK,MAAW,UAAuB;AACrD,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI;AAC5C;AAKO,SAAS,OAAO,MAAW,UAAuB;AACvD,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM;AAC9C;AAKO,SAAS,OAAO,MAAW,UAAuB;AACvD,SAAO,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM;AAC9C;AAoBO,SAAS,UAAU,MAAW,SAAiB,UAAkB,OAAyB;AAC/F,aAAO,eAAAC,WAAgB,MAAM,SAAS,UAAU,KAAK;AACvD;",
|
|
6
6
|
"names": ["year", "month", "day", "hour", "minute", "second", "sessionContains"]
|
|
7
7
|
}
|
|
@@ -12,6 +12,10 @@
|
|
|
12
12
|
* - a trailing ",", ":" or "|" ends its list ("1100-1400," is "1100-1400" Monday to Friday)
|
|
13
13
|
* - an end before the start is an overnight run that belongs to the day it ends; equal ends are 24 hours;
|
|
14
14
|
* "0000-0000" and "24x7" are the whole day, every day
|
|
15
|
+
* - a run that ends at 0000 ("2000-0000") ends at 24:00 of the day it starts and belongs to that day
|
|
16
|
+
* ("2000-0000:6" is Friday 20:00 to midnight)
|
|
17
|
+
* - "F" after the start moves it one day before the day the run ends on ("1700F-1900:2": Sunday 17:00 to Monday
|
|
18
|
+
* 19:00; "1900-1900:3456|1700F-1900:2" is the TVC:DXY symbol session) (#173)
|
|
15
19
|
* - a string that is empty or does not start with a digit ("regular", "extended") is the symbol's own session
|
|
16
20
|
* - a malformed string ("1100 -1400", "0930-16", ":8") is an error, as the PineScript runtime error
|
|
17
21
|
*/
|
|
@@ -20,6 +24,8 @@ export interface SessionRange {
|
|
|
20
24
|
start: number;
|
|
21
25
|
end: number;
|
|
22
26
|
days: Set<number>;
|
|
27
|
+
/** Days between the start and the day the run ends on, given by "F" after the start (absent otherwise) */
|
|
28
|
+
startDays?: number;
|
|
23
29
|
}
|
|
24
30
|
/**
|
|
25
31
|
* Runs of a PineScript session string, or null for the symbol's own session (empty or not starting with a digit).
|
|
@@ -29,8 +35,27 @@ export declare function parsePineSession(session: string): SessionRange[] | null
|
|
|
29
35
|
/**
|
|
30
36
|
* True when `time` falls inside `session`, with the session hours read in `timezone`.
|
|
31
37
|
* A run includes its start minute and excludes its end minute.
|
|
38
|
+
*
|
|
39
|
+
* On the days around a clock change PineScript does not read the wall clock of each bar; it places each run of
|
|
40
|
+
* each local day (measured on 15- and 5-minute bars, clocks going forward and back, four time zones):
|
|
41
|
+
* - a wall time of the day is placed with the offset before the change when it is before the wall time of the
|
|
42
|
+
* change (02:00 for 02:00 -> 03:00, 03:00 for 03:00 -> 02:00), with the offset after it otherwise. Forward
|
|
43
|
+
* change: "0100-0300" lasts one hour and "0130-0230" is empty; back change: "0230-0330" lasts two hours
|
|
44
|
+
* - a run that ends exactly on the wall time of the change is placed with the offset after the change at both ends
|
|
45
|
+
* (forward change: "0100-0200" is one hour earlier than the wall clock says)
|
|
46
|
+
* - clocks going back: a run that ends inside the repeated hour also covers its second pass
|
|
47
|
+
* - clocks going back, the day BEFORE the change: a run with a start or an end on the wall time of the change is
|
|
48
|
+
* also true one hour (the amount of the change) later, from one bar after its usual end. This needs the bar
|
|
49
|
+
* duration `barMs`; without it the rule is not applied
|
|
50
|
+
*
|
|
51
|
+
* @param barMs - Duration of the bars in ms (the chart timeframe); only used by the last rule
|
|
32
52
|
* @throws Error for the symbol's own session ("regular", "extended", ""), which this function does not know: use
|
|
33
53
|
* `time(timeframe, session)` in a script with the chart session
|
|
34
54
|
*/
|
|
35
|
-
export declare function inSession(time: number, session: string, timezone: string): boolean;
|
|
55
|
+
export declare function inSession(time: number, session: string, timezone: string, barMs?: number): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* The run of `session` that contains `time`, as [start, end) UNIX times (ms), or null outside the session; rules in
|
|
58
|
+
* {@link inSession}. PineScript aligns the intraday periods of `time(tf, session)` on the start of this run (#173).
|
|
59
|
+
*/
|
|
60
|
+
export declare function sessionRun(time: number, session: string, timezone: string, barMs?: number): [number, number] | null;
|
|
36
61
|
//# sourceMappingURL=session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/time/session.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/time/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,iHAAiH;AACjH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB,0GAA0G;IAC1G,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0CD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,GAAG,IAAI,CAuCvE;AAuBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAElG;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CA+EnH"}
|