oakscriptjs 0.11.0 → 0.11.2
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.js +6 -6
- package/dist/cjs/box/index.js.map +2 -2
- package/dist/cjs/callsite/index.d.ts.map +1 -1
- package/dist/cjs/callsite/index.js +6 -3
- package/dist/cjs/callsite/index.js.map +2 -2
- package/dist/cjs/drawing/registry.d.ts +15 -6
- package/dist/cjs/drawing/registry.d.ts.map +1 -1
- package/dist/cjs/drawing/registry.js +16 -2
- package/dist/cjs/drawing/registry.js.map +2 -2
- package/dist/cjs/index.d.ts +4 -3
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +7 -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.js +3 -3
- 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 +10 -27
- 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/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 +66 -13
- package/dist/cjs/script/index.d.ts.map +1 -1
- package/dist/cjs/script/index.js +139 -35
- 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 +10 -1
- package/dist/cjs/session/bars.d.ts.map +1 -1
- package/dist/cjs/session/bars.js +16 -2
- package/dist/cjs/session/bars.js.map +2 -2
- package/dist/cjs/session/calendar.d.ts +4 -1
- package/dist/cjs/session/calendar.d.ts.map +1 -1
- package/dist/cjs/session/calendar.js +12 -7
- package/dist/cjs/session/calendar.js.map +2 -2
- package/dist/cjs/session/context.d.ts +22 -5
- package/dist/cjs/session/context.d.ts.map +1 -1
- package/dist/cjs/session/context.js +67 -6
- package/dist/cjs/session/context.js.map +2 -2
- 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 -3
- package/dist/cjs/str/index.d.ts.map +1 -1
- package/dist/cjs/str/index.js +1 -1
- package/dist/cjs/str/index.js.map +2 -2
- package/dist/cjs/str/numberformat.d.ts +6 -4
- package/dist/cjs/str/numberformat.d.ts.map +1 -1
- package/dist/cjs/str/numberformat.js +3 -2
- package/dist/cjs/str/numberformat.js.map +2 -2
- package/dist/cjs/ta/index.d.ts +64 -45
- package/dist/cjs/ta/index.d.ts.map +1 -1
- package/dist/cjs/ta/index.js +140 -126
- package/dist/cjs/ta/index.js.map +3 -3
- package/dist/cjs/ta/limits.d.ts +11 -0
- package/dist/cjs/ta/limits.d.ts.map +1 -1
- package/dist/cjs/ta/limits.js +15 -1
- package/dist/cjs/ta/limits.js.map +2 -2
- package/dist/cjs/ta/running-sum.js +1 -1
- package/dist/cjs/ta/running-sum.js.map +2 -2
- package/dist/cjs/ta-series.d.ts +1 -1
- package/dist/cjs/ta-series.d.ts.map +1 -1
- package/dist/cjs/ta-series.js +1 -1
- package/dist/cjs/ta-series.js.map +2 -2
- package/dist/cjs/table/index.d.ts +10 -3
- package/dist/cjs/table/index.d.ts.map +1 -1
- package/dist/cjs/table/index.js +11 -1
- package/dist/cjs/table/index.js.map +3 -3
- package/dist/cjs/time/session.d.ts +9 -0
- package/dist/cjs/time/session.d.ts.map +1 -1
- package/dist/cjs/time/session.js +42 -14
- 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 +1 -1
- 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.js +6 -6
- package/dist/esm/box/index.js.map +1 -1
- package/dist/esm/callsite/index.d.ts.map +1 -1
- package/dist/esm/callsite/index.js +6 -3
- package/dist/esm/callsite/index.js.map +1 -1
- package/dist/esm/drawing/registry.d.ts +15 -6
- package/dist/esm/drawing/registry.d.ts.map +1 -1
- package/dist/esm/drawing/registry.js +30 -7
- package/dist/esm/drawing/registry.js.map +1 -1
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +8 -5
- 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.js +3 -3
- 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 +20 -64
- 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/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 +66 -13
- package/dist/esm/script/index.d.ts.map +1 -1
- package/dist/esm/script/index.js +187 -54
- 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 +10 -1
- package/dist/esm/session/bars.d.ts.map +1 -1
- package/dist/esm/session/bars.js +26 -1
- package/dist/esm/session/bars.js.map +1 -1
- package/dist/esm/session/calendar.d.ts +4 -1
- package/dist/esm/session/calendar.d.ts.map +1 -1
- package/dist/esm/session/calendar.js +23 -7
- package/dist/esm/session/calendar.js.map +1 -1
- package/dist/esm/session/context.d.ts +22 -5
- package/dist/esm/session/context.d.ts.map +1 -1
- package/dist/esm/session/context.js +86 -10
- package/dist/esm/session/context.js.map +1 -1
- 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 -3
- package/dist/esm/str/index.d.ts.map +1 -1
- package/dist/esm/str/index.js +6 -5
- package/dist/esm/str/index.js.map +1 -1
- package/dist/esm/str/numberformat.d.ts +6 -4
- package/dist/esm/str/numberformat.d.ts.map +1 -1
- package/dist/esm/str/numberformat.js +9 -5
- package/dist/esm/str/numberformat.js.map +1 -1
- package/dist/esm/ta/index.d.ts +64 -45
- package/dist/esm/ta/index.d.ts.map +1 -1
- package/dist/esm/ta/index.js +198 -228
- package/dist/esm/ta/index.js.map +1 -1
- package/dist/esm/ta/limits.d.ts +11 -0
- package/dist/esm/ta/limits.d.ts.map +1 -1
- package/dist/esm/ta/limits.js +27 -2
- package/dist/esm/ta/limits.js.map +1 -1
- package/dist/esm/ta/running-sum.js +1 -1
- package/dist/esm/ta/running-sum.js.map +1 -1
- package/dist/esm/ta-series.d.ts +1 -1
- package/dist/esm/ta-series.d.ts.map +1 -1
- package/dist/esm/ta-series.js +2 -1
- package/dist/esm/ta-series.js.map +1 -1
- package/dist/esm/table/index.d.ts +10 -3
- package/dist/esm/table/index.d.ts.map +1 -1
- package/dist/esm/table/index.js +23 -3
- package/dist/esm/table/index.js.map +1 -1
- package/dist/esm/time/session.d.ts +9 -0
- package/dist/esm/time/session.d.ts.map +1 -1
- package/dist/esm/time/session.js +53 -15
- 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 +1 -1
- 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 +6 -6
- package/src/callsite/index.ts +6 -3
- package/src/drawing/registry.ts +30 -7
- package/src/index.ts +16 -3
- package/src/input.ts +18 -1
- package/src/label/index.ts +3 -3
- package/src/line/index.ts +20 -68
- package/src/linefill/index.ts +20 -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 +262 -58
- package/src/security/other.ts +269 -0
- package/src/session/bars.ts +24 -1
- package/src/session/calendar.ts +26 -7
- package/src/session/context.ts +104 -10
- package/src/str/floatingdecimal.ts +268 -0
- package/src/str/index.ts +6 -5
- package/src/str/numberformat.ts +11 -6
- package/src/ta/index.ts +200 -225
- package/src/ta/limits.ts +28 -1
- package/src/ta/running-sum.ts +1 -1
- package/src/ta-series.ts +3 -2
- package/src/table/index.ts +22 -3
- package/src/time/session.ts +58 -16
- package/src/time/timezone.ts +9 -2
- package/src/types/metadata.ts +1 -1
package/dist/cjs/ta/limits.d.ts
CHANGED
|
@@ -21,4 +21,15 @@ export declare function windowError(name: string, length: number, bar?: number,
|
|
|
21
21
|
export declare function checkWindowLength(name: string, length: number, bar?: number, max?: number): void;
|
|
22
22
|
/** Throws RE10004 for a function of {@link SUM_FUNCTIONS} ("ta.sma", ...) with a length above 5,000. */
|
|
23
23
|
export declare function checkSumLength(name: string, length: number, bar?: number): void;
|
|
24
|
+
/**
|
|
25
|
+
* PineScript's runtime error RE10001 text for a length that is 0 or negative. `name` is the function, or a call path
|
|
26
|
+
* "atr->rma" (printed 'atr'->'rma'); the value prints as a float ("0.0", "-1.0").
|
|
27
|
+
*/
|
|
28
|
+
export declare function lengthError(name: string, value: number, bar?: number, arg?: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Throws RE10001 when the (truncated) length is 0 or negative, as PineScript does for every window function on the
|
|
31
|
+
* bar of the call (#175): `ta.sma(close, 0)` stops on bar 0, a series length that becomes 0 on the bar where it
|
|
32
|
+
* does. `ta.hma(src, 1)` stops in its inner `wma(src, 0)`. An na length is not checked here.
|
|
33
|
+
*/
|
|
34
|
+
export declare function checkPositiveLength(name: string, length: number, bar?: number, arg?: string): void;
|
|
24
35
|
//# sourceMappingURL=limits.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../../src/ta/limits.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yFAAyF;AACzF,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AAEvC,sFAAsF;AACtF,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,kGAAkG;AAClG,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMhD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,SAAoB,GAAG,MAAM,CAMvG;AAED,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,SAAoB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../../src/ta/limits.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yFAAyF;AACzF,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AAEvC,sFAAsF;AACtF,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,kGAAkG;AAClG,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMhD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,SAAoB,GAAG,MAAM,CAMvG;AAED,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,SAAoB,GAAG,IAAI,CAI3G;AAED,wGAAwG;AACxG,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAM/E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,SAAW,GAAG,MAAM,CAO7F;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,SAAW,GAAG,IAAI,CAGpG"}
|
package/dist/cjs/ta/limits.js
CHANGED
|
@@ -21,8 +21,10 @@ __export(limits_exports, {
|
|
|
21
21
|
MAX_SUM_LENGTH: () => MAX_SUM_LENGTH,
|
|
22
22
|
MAX_WINDOW_LENGTH: () => MAX_WINDOW_LENGTH,
|
|
23
23
|
SUM_FUNCTIONS: () => SUM_FUNCTIONS,
|
|
24
|
+
checkPositiveLength: () => checkPositiveLength,
|
|
24
25
|
checkSumLength: () => checkSumLength,
|
|
25
26
|
checkWindowLength: () => checkWindowLength,
|
|
27
|
+
lengthError: () => lengthError,
|
|
26
28
|
windowError: () => windowError
|
|
27
29
|
});
|
|
28
30
|
module.exports = __toCommonJS(limits_exports);
|
|
@@ -41,10 +43,22 @@ function windowError(name, length, bar, max = MAX_WINDOW_LENGTH) {
|
|
|
41
43
|
}
|
|
42
44
|
function checkWindowLength(name, length, bar, max = MAX_WINDOW_LENGTH) {
|
|
43
45
|
const len = Math.trunc(length);
|
|
46
|
+
if (len <= 0) throw new Error(lengthError(name, len, bar));
|
|
44
47
|
if (len > max) throw new Error(windowError(name, len, bar, max));
|
|
45
48
|
}
|
|
46
49
|
function checkSumLength(name, length, bar) {
|
|
47
50
|
const fn = SUM_FUNCTIONS[name];
|
|
48
|
-
if (fn
|
|
51
|
+
if (fn === void 0) return;
|
|
52
|
+
checkPositiveLength(name === "ta.bb" ? "bb" : fn, length, bar);
|
|
53
|
+
checkWindowLength(fn, length, bar, MAX_SUM_LENGTH);
|
|
54
|
+
}
|
|
55
|
+
function lengthError(name, value, bar, arg = "length") {
|
|
56
|
+
const fn = name.split("->").map((part) => `'${part}'`).join("->");
|
|
57
|
+
const text = Number.isInteger(value) ? value.toFixed(1) : String(value);
|
|
58
|
+
return (bar === void 0 ? "" : `Error on bar ${bar}: `) + `Invalid value of the '${arg}' argument (${text}) in the ${fn} function. It must be > 0.`;
|
|
59
|
+
}
|
|
60
|
+
function checkPositiveLength(name, length, bar, arg = "length") {
|
|
61
|
+
const len = Math.trunc(length);
|
|
62
|
+
if (len <= 0) throw new Error(lengthError(name, len, bar, arg));
|
|
49
63
|
}
|
|
50
64
|
//# sourceMappingURL=limits.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/ta/limits.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * History limits of the window functions.\n *\n * PineScript stops a script when `ta.highest` / `ta.lowest` / `ta.highestbars` / `ta.lowestbars` ask for more than\n * 15,000 bars (runtime error RE10004): with a constant length on the first bar, with a length that changes on the\n * bar where it passes the limit. `math.sum`, `ta.sma`, `ta.variance`, `ta.stdev` and `ta.bb` have the same error\n * above 5,000 bars; the message names the function that keeps the window ('stdev'->'variance', 'bb'->'sma').\n */\n\n/** Largest length of `ta.highest` / `ta.lowest` / `ta.highestbars` / `ta.lowestbars`. */\nexport const MAX_WINDOW_LENGTH = 15000;\n\n/** Largest length of `math.sum` / `ta.sma` / `ta.variance` / `ta.stdev` / `ta.bb`. */\nexport const MAX_SUM_LENGTH = 5000;\n\n/** Names of the PineScript message for the functions with the 5,000 limit (\"a->b\": a calls b). */\nexport const SUM_FUNCTIONS: Record<string, string> = {\n 'math.sum': 'sum',\n 'ta.sma': 'sma',\n 'ta.variance': 'variance',\n 'ta.stdev': 'stdev->variance',\n 'ta.bb': 'bb->sma',\n};\n\n/**\n * PineScript's runtime error RE10004 text; `bar` is the bar index of the call when it is known. `name` is the\n * function, or a call path \"stdev->variance\" (printed 'stdev'->'variance').\n */\nexport function windowError(name: string, length: number, bar?: number, max = MAX_WINDOW_LENGTH): string {\n const fn = name.split('->').map((part) => `'${part}'`).join('->');\n return (\n (bar === undefined ? '' : `Error on bar ${bar}: `) +\n `The ${fn} function references too many historical candles (${length}), the limit is ${max}.`\n );\n}\n\n/** Throws RE10004 when the (truncated) length of a window function is above the limit. */\nexport function checkWindowLength(name: string, length: number, bar?: number, max = MAX_WINDOW_LENGTH): void {\n const len = Math.trunc(length);\n if (len > max) throw new Error(windowError(name, len, bar, max));\n}\n\n/** Throws RE10004 for a function of {@link SUM_FUNCTIONS} (\"ta.sma\", ...) with a length above 5,000. */\nexport function checkSumLength(name: string, length: number, bar?: number): void {\n const fn = SUM_FUNCTIONS[name];\n if (fn
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUO,MAAM,oBAAoB;AAG1B,MAAM,iBAAiB;AAGvB,MAAM,gBAAwC;AAAA,EACnD,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,SAAS;AACX;AAMO,SAAS,YAAY,MAAc,QAAgB,KAAc,MAAM,mBAA2B;AACvG,QAAM,KAAK,KAAK,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI;AAChE,UACG,QAAQ,SAAY,KAAK,gBAAgB,GAAG,QAC7C,OAAO,EAAE,qDAAqD,MAAM,mBAAmB,GAAG;AAE9F;AAGO,SAAS,kBAAkB,MAAc,QAAgB,KAAc,MAAM,mBAAyB;AAC3G,QAAM,MAAM,KAAK,MAAM,MAAM;AAC7B,MAAI,MAAM,IAAK,OAAM,IAAI,MAAM,YAAY,MAAM,KAAK,KAAK,GAAG,CAAC;AACjE;AAGO,SAAS,eAAe,MAAc,QAAgB,KAAoB;AAC/E,QAAM,KAAK,cAAc,IAAI;AAC7B,MAAI,OAAO,OAAW,
|
|
4
|
+
"sourcesContent": ["/**\n * History limits of the window functions.\n *\n * PineScript stops a script when `ta.highest` / `ta.lowest` / `ta.highestbars` / `ta.lowestbars` ask for more than\n * 15,000 bars (runtime error RE10004): with a constant length on the first bar, with a length that changes on the\n * bar where it passes the limit. `math.sum`, `ta.sma`, `ta.variance`, `ta.stdev` and `ta.bb` have the same error\n * above 5,000 bars; the message names the function that keeps the window ('stdev'->'variance', 'bb'->'sma').\n */\n\n/** Largest length of `ta.highest` / `ta.lowest` / `ta.highestbars` / `ta.lowestbars`. */\nexport const MAX_WINDOW_LENGTH = 15000;\n\n/** Largest length of `math.sum` / `ta.sma` / `ta.variance` / `ta.stdev` / `ta.bb`. */\nexport const MAX_SUM_LENGTH = 5000;\n\n/** Names of the PineScript message for the functions with the 5,000 limit (\"a->b\": a calls b). */\nexport const SUM_FUNCTIONS: Record<string, string> = {\n 'math.sum': 'sum',\n 'ta.sma': 'sma',\n 'ta.variance': 'variance',\n 'ta.stdev': 'stdev->variance',\n 'ta.bb': 'bb->sma',\n};\n\n/**\n * PineScript's runtime error RE10004 text; `bar` is the bar index of the call when it is known. `name` is the\n * function, or a call path \"stdev->variance\" (printed 'stdev'->'variance').\n */\nexport function windowError(name: string, length: number, bar?: number, max = MAX_WINDOW_LENGTH): string {\n const fn = name.split('->').map((part) => `'${part}'`).join('->');\n return (\n (bar === undefined ? '' : `Error on bar ${bar}: `) +\n `The ${fn} function references too many historical candles (${length}), the limit is ${max}.`\n );\n}\n\n/** Throws RE10004 when the (truncated) length of a window function is above the limit. */\nexport function checkWindowLength(name: string, length: number, bar?: number, max = MAX_WINDOW_LENGTH): void {\n const len = Math.trunc(length);\n if (len <= 0) throw new Error(lengthError(name, len, bar));\n if (len > max) throw new Error(windowError(name, len, bar, max));\n}\n\n/** Throws RE10004 for a function of {@link SUM_FUNCTIONS} (\"ta.sma\", ...) with a length above 5,000. */\nexport function checkSumLength(name: string, length: number, bar?: number): void {\n const fn = SUM_FUNCTIONS[name];\n if (fn === undefined) return;\n // RE10001 names 'bb' itself, RE10004 its inner 'sma'\n checkPositiveLength(name === 'ta.bb' ? 'bb' : fn, length, bar);\n checkWindowLength(fn, length, bar, MAX_SUM_LENGTH);\n}\n\n/**\n * PineScript's runtime error RE10001 text for a length that is 0 or negative. `name` is the function, or a call path\n * \"atr->rma\" (printed 'atr'->'rma'); the value prints as a float (\"0.0\", \"-1.0\").\n */\nexport function lengthError(name: string, value: number, bar?: number, arg = 'length'): string {\n const fn = name.split('->').map((part) => `'${part}'`).join('->');\n const text = Number.isInteger(value) ? value.toFixed(1) : String(value);\n return (\n (bar === undefined ? '' : `Error on bar ${bar}: `) +\n `Invalid value of the '${arg}' argument (${text}) in the ${fn} function. It must be > 0.`\n );\n}\n\n/**\n * Throws RE10001 when the (truncated) length is 0 or negative, as PineScript does for every window function on the\n * bar of the call (#175): `ta.sma(close, 0)` stops on bar 0, a series length that becomes 0 on the bar where it\n * does. `ta.hma(src, 1)` stops in its inner `wma(src, 0)`. An na length is not checked here.\n */\nexport function checkPositiveLength(name: string, length: number, bar?: number, arg = 'length'): void {\n const len = Math.trunc(length);\n if (len <= 0) throw new Error(lengthError(name, len, bar, arg));\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUO,MAAM,oBAAoB;AAG1B,MAAM,iBAAiB;AAGvB,MAAM,gBAAwC;AAAA,EACnD,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,SAAS;AACX;AAMO,SAAS,YAAY,MAAc,QAAgB,KAAc,MAAM,mBAA2B;AACvG,QAAM,KAAK,KAAK,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI;AAChE,UACG,QAAQ,SAAY,KAAK,gBAAgB,GAAG,QAC7C,OAAO,EAAE,qDAAqD,MAAM,mBAAmB,GAAG;AAE9F;AAGO,SAAS,kBAAkB,MAAc,QAAgB,KAAc,MAAM,mBAAyB;AAC3G,QAAM,MAAM,KAAK,MAAM,MAAM;AAC7B,MAAI,OAAO,EAAG,OAAM,IAAI,MAAM,YAAY,MAAM,KAAK,GAAG,CAAC;AACzD,MAAI,MAAM,IAAK,OAAM,IAAI,MAAM,YAAY,MAAM,KAAK,KAAK,GAAG,CAAC;AACjE;AAGO,SAAS,eAAe,MAAc,QAAgB,KAAoB;AAC/E,QAAM,KAAK,cAAc,IAAI;AAC7B,MAAI,OAAO,OAAW;AAEtB,sBAAoB,SAAS,UAAU,OAAO,IAAI,QAAQ,GAAG;AAC7D,oBAAkB,IAAI,QAAQ,KAAK,cAAc;AACnD;AAMO,SAAS,YAAY,MAAc,OAAe,KAAc,MAAM,UAAkB;AAC7F,QAAM,KAAK,KAAK,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI;AAChE,QAAM,OAAO,OAAO,UAAU,KAAK,IAAI,MAAM,QAAQ,CAAC,IAAI,OAAO,KAAK;AACtE,UACG,QAAQ,SAAY,KAAK,gBAAgB,GAAG,QAC7C,yBAAyB,GAAG,eAAe,IAAI,YAAY,EAAE;AAEjE;AAOO,SAAS,oBAAoB,MAAc,QAAgB,KAAc,MAAM,UAAgB;AACpG,QAAM,MAAM,KAAK,MAAM,MAAM;AAC7B,MAAI,OAAO,EAAG,OAAM,IAAI,MAAM,YAAY,MAAM,KAAK,KAAK,GAAG,CAAC;AAChE;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -152,8 +152,8 @@ function seriesLengths(lengths, count, name) {
|
|
|
152
152
|
}
|
|
153
153
|
return Array.from({ length: count }, (_, i) => {
|
|
154
154
|
const len = Math.floor(lengths[i]);
|
|
155
|
-
if (!(len >= 1)) throw new Error(`${name}: length must be at least 1 (bar ${i}: ${lengths[i]})`);
|
|
156
155
|
(0, import_limits.checkSumLength)(name, len, i);
|
|
156
|
+
if (!(len >= 1)) throw new Error(`${name}: length must be at least 1 (bar ${i}: ${lengths[i]})`);
|
|
157
157
|
return len;
|
|
158
158
|
});
|
|
159
159
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/ta/running-sum.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Running window sum with the floating-point behaviour of PineScript `math.sum` / `ta.sma` / `ta.stdev` /\n * `ta.variance` (bit for bit).\n *\n * PineScript does not sum the window again on each bar. It keeps a compensated (Kahan) running sum:\n * - each bar first removes, with a Kahan step, the compensated value that was added for the value that leaves the\n * window, then adds the new value with a Kahan step and keeps its compensated value;\n * - when the compensation of the previous step would be lost when applied to the new value, the sum is computed\n * again from the window values (newest first) and the compensation is reset. The test moves the new value toward\n * +infinity by the size of the compensation, in floating point (#136, #142).\n *\n * So the result can differ from the exact window sum in the last bits (e.g. a small residue on a window of zeros),\n * as in PineScript.\n *\n * @internal\n */\nimport { checkSumLength } from './limits.js';\n\n/**\n * Whether the compensation `c` is (partly) lost when it is applied to `x`: `x + |c|` in floating point moves `x` by\n * less than `|c|`. Moving toward +infinity uses the grid above `x` (the coarser binade just below a power of two, the\n * finer binade for a negative power of two), as PineScript (measured bit for bit, #142).\n */\nfunction compensationLost(x: number, c: number): boolean {\n if (c === 0 || x === 0) return false;\n const size = Math.abs(c);\n return Math.abs(x + size - x) < size;\n}\n\n/** A value PineScript treats as na in window functions (also +/-Infinity). */\nexport function isNa(v: number | null | undefined): boolean {\n return v === undefined || v === null || !Number.isFinite(v);\n}\n\n/**\n * Running sum state, one value at a time. {@link step} computes the sum with a new value from the kept state without\n * changing it; {@link commit} keeps the last step. So several candidate values can be tried on one bar and only the\n * last one kept (a ta.* call in a loop).\n *\n * The length can change from one step to the next (a series length). PineScript then first moves the kept sum to the\n * new length with Kahan steps of the raw values (not the stored compensated values): a smaller length removes the\n * values that leave the window, oldest first; a larger length adds back the values from the one before the old window\n * down to the one `length` values back, newest first (one more than the window needs). Then the usual step runs with\n * the new length: it removes the stored value of the one `length` values back and adds the new value.\n */\nexport class RunningSum {\n private readonly values: number[] = [];\n private readonly stored: number[] = [];\n private keptLength = NaN;\n private s = 0;\n private c = 0;\n private stepLength = NaN;\n private stepX = NaN;\n private stepY = NaN;\n private stepS = 0;\n private stepC = 0;\n\n /** Kahan steps that move the kept sum from the kept length to `len`; the result goes to stepS / stepC. */\n private resize(len: number): void {\n const values = this.values;\n const n = values.length;\n const kept = this.keptLength;\n let s = this.s;\n let c = this.c;\n const add = (v: number) => {\n const y = v - c;\n const t = s + y;\n c = (t - s) - y;\n s = t;\n };\n if (len < kept) {\n for (let k = Math.max(0, n - kept); k <= n - len - 1; k++) add(-values[k]!);\n } else if (len > kept) {\n for (let k = n - kept - 1; k >= Math.max(0, n - len); k--) add(values[k]!);\n }\n this.stepS = s;\n this.stepC = c;\n }\n\n /**\n * The running sum of the last `length` values with the (not na) value `x` added, from the kept state; the state is\n * unchanged until {@link commit}.\n *\n * @returns The sum, or NaN while fewer than `length` values exist (with `x`)\n */\n step(x: number, length: number): number {\n const len = length;\n const values = this.values;\n this.resize(len);\n let s = this.stepS;\n let c = this.stepC;\n const c0 = c;\n const n = values.length;\n if (n >= len) {\n const y = -this.stored[n - len]! - c;\n const t = s + y;\n c = (t - s) - y;\n s = t;\n }\n if (compensationLost(x, c0)) {\n let fresh = x;\n for (let k = n - 1; k >= Math.max(0, n + 1 - len); k--) fresh += values[k]!;\n s = fresh;\n c = 0;\n this.stepY = x;\n } else {\n const y = x - c;\n const t = s + y;\n c = (t - s) - y;\n s = t;\n this.stepY = y;\n }\n this.stepLength = len;\n this.stepX = x;\n this.stepS = s;\n this.stepC = c;\n return n + 1 >= len ? s : NaN;\n }\n\n /**\n * The running sum of the last `length` values on a bar with an na value (no value added), from the kept state; the\n * state is unchanged until {@link commit}. With an unchanged length, it is the previous result.\n *\n * @returns The sum, or NaN while fewer than `length` values exist\n */\n stepNa(length: number): number {\n this.resize(length);\n this.stepLength = length;\n this.stepX = NaN;\n const n = this.values.length;\n return n > 0 && n >= length ? this.stepS : NaN;\n }\n\n /** Keeps the state of the last {@link step} or {@link stepNa}. */\n commit(): void {\n if (!Number.isNaN(this.stepX)) {\n this.values.push(this.stepX);\n this.stored.push(this.stepY);\n }\n this.keptLength = this.stepLength;\n this.s = this.stepS;\n this.c = this.stepC;\n }\n}\n\n/** The running sums of `source` with the length `lengthAt(i)` on bar `i`. */\nfunction sumWindows(source: ArrayLike<number | null | undefined>, lengthAt: (i: number) => number): number[] {\n const out: number[] = new Array<number>(source.length);\n const sum = new RunningSum();\n for (let i = 0; i < source.length; i++) {\n const v = source[i];\n const len = lengthAt(i);\n out[i] = isNa(v) ? sum.stepNa(len) : sum.step(v as number, len);\n sum.commit();\n }\n return out;\n}\n\n/**\n * The sum of the last `length` non-na values on each bar, as PineScript computes it.\n *\n * @param source - Values (na: NaN, null, undefined or +/-Infinity, skipped)\n * @param length - Number of non-na values in the window\n * @returns The running sum per bar: NaN until `length` non-na values exist; a bar with an na value keeps the\n * previous result\n */\nexport function runningSum(source: ArrayLike<number | null | undefined>, length: number): number[] {\n const len = Math.floor(length);\n if (!(len >= 1)) return new Array<number>(source.length).fill(NaN);\n return sumWindows(source, () => len);\n}\n\n/** The values of a series length, floored, checked to be at least 1 on every bar. */\nfunction seriesLengths(lengths: ArrayLike<number>, count: number, name: string): number[] {\n if (lengths.length < count) {\n throw new Error(`${name}: the length series has ${lengths.length} values for ${count} bars`);\n }\n return Array.from({ length: count }, (_, i) => {\n const len = Math.floor(lengths[i]!);\n if (!(len >= 1)) throw new Error(`${name}: length must be at least 1 (bar ${i}: ${lengths[i]})`);\n
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["/**\n * Running window sum with the floating-point behaviour of PineScript `math.sum` / `ta.sma` / `ta.stdev` /\n * `ta.variance` (bit for bit).\n *\n * PineScript does not sum the window again on each bar. It keeps a compensated (Kahan) running sum:\n * - each bar first removes, with a Kahan step, the compensated value that was added for the value that leaves the\n * window, then adds the new value with a Kahan step and keeps its compensated value;\n * - when the compensation of the previous step would be lost when applied to the new value, the sum is computed\n * again from the window values (newest first) and the compensation is reset. The test moves the new value toward\n * +infinity by the size of the compensation, in floating point (#136, #142).\n *\n * So the result can differ from the exact window sum in the last bits (e.g. a small residue on a window of zeros),\n * as in PineScript.\n *\n * @internal\n */\nimport { checkSumLength } from './limits.js';\n\n/**\n * Whether the compensation `c` is (partly) lost when it is applied to `x`: `x + |c|` in floating point moves `x` by\n * less than `|c|`. Moving toward +infinity uses the grid above `x` (the coarser binade just below a power of two, the\n * finer binade for a negative power of two), as PineScript (measured bit for bit, #142).\n */\nfunction compensationLost(x: number, c: number): boolean {\n if (c === 0 || x === 0) return false;\n const size = Math.abs(c);\n return Math.abs(x + size - x) < size;\n}\n\n/** A value PineScript treats as na in window functions (also +/-Infinity). */\nexport function isNa(v: number | null | undefined): boolean {\n return v === undefined || v === null || !Number.isFinite(v);\n}\n\n/**\n * Running sum state, one value at a time. {@link step} computes the sum with a new value from the kept state without\n * changing it; {@link commit} keeps the last step. So several candidate values can be tried on one bar and only the\n * last one kept (a ta.* call in a loop).\n *\n * The length can change from one step to the next (a series length). PineScript then first moves the kept sum to the\n * new length with Kahan steps of the raw values (not the stored compensated values): a smaller length removes the\n * values that leave the window, oldest first; a larger length adds back the values from the one before the old window\n * down to the one `length` values back, newest first (one more than the window needs). Then the usual step runs with\n * the new length: it removes the stored value of the one `length` values back and adds the new value.\n */\nexport class RunningSum {\n private readonly values: number[] = [];\n private readonly stored: number[] = [];\n private keptLength = NaN;\n private s = 0;\n private c = 0;\n private stepLength = NaN;\n private stepX = NaN;\n private stepY = NaN;\n private stepS = 0;\n private stepC = 0;\n\n /** Kahan steps that move the kept sum from the kept length to `len`; the result goes to stepS / stepC. */\n private resize(len: number): void {\n const values = this.values;\n const n = values.length;\n const kept = this.keptLength;\n let s = this.s;\n let c = this.c;\n const add = (v: number) => {\n const y = v - c;\n const t = s + y;\n c = (t - s) - y;\n s = t;\n };\n if (len < kept) {\n for (let k = Math.max(0, n - kept); k <= n - len - 1; k++) add(-values[k]!);\n } else if (len > kept) {\n for (let k = n - kept - 1; k >= Math.max(0, n - len); k--) add(values[k]!);\n }\n this.stepS = s;\n this.stepC = c;\n }\n\n /**\n * The running sum of the last `length` values with the (not na) value `x` added, from the kept state; the state is\n * unchanged until {@link commit}.\n *\n * @returns The sum, or NaN while fewer than `length` values exist (with `x`)\n */\n step(x: number, length: number): number {\n const len = length;\n const values = this.values;\n this.resize(len);\n let s = this.stepS;\n let c = this.stepC;\n const c0 = c;\n const n = values.length;\n if (n >= len) {\n const y = -this.stored[n - len]! - c;\n const t = s + y;\n c = (t - s) - y;\n s = t;\n }\n if (compensationLost(x, c0)) {\n let fresh = x;\n for (let k = n - 1; k >= Math.max(0, n + 1 - len); k--) fresh += values[k]!;\n s = fresh;\n c = 0;\n this.stepY = x;\n } else {\n const y = x - c;\n const t = s + y;\n c = (t - s) - y;\n s = t;\n this.stepY = y;\n }\n this.stepLength = len;\n this.stepX = x;\n this.stepS = s;\n this.stepC = c;\n return n + 1 >= len ? s : NaN;\n }\n\n /**\n * The running sum of the last `length` values on a bar with an na value (no value added), from the kept state; the\n * state is unchanged until {@link commit}. With an unchanged length, it is the previous result.\n *\n * @returns The sum, or NaN while fewer than `length` values exist\n */\n stepNa(length: number): number {\n this.resize(length);\n this.stepLength = length;\n this.stepX = NaN;\n const n = this.values.length;\n return n > 0 && n >= length ? this.stepS : NaN;\n }\n\n /** Keeps the state of the last {@link step} or {@link stepNa}. */\n commit(): void {\n if (!Number.isNaN(this.stepX)) {\n this.values.push(this.stepX);\n this.stored.push(this.stepY);\n }\n this.keptLength = this.stepLength;\n this.s = this.stepS;\n this.c = this.stepC;\n }\n}\n\n/** The running sums of `source` with the length `lengthAt(i)` on bar `i`. */\nfunction sumWindows(source: ArrayLike<number | null | undefined>, lengthAt: (i: number) => number): number[] {\n const out: number[] = new Array<number>(source.length);\n const sum = new RunningSum();\n for (let i = 0; i < source.length; i++) {\n const v = source[i];\n const len = lengthAt(i);\n out[i] = isNa(v) ? sum.stepNa(len) : sum.step(v as number, len);\n sum.commit();\n }\n return out;\n}\n\n/**\n * The sum of the last `length` non-na values on each bar, as PineScript computes it.\n *\n * @param source - Values (na: NaN, null, undefined or +/-Infinity, skipped)\n * @param length - Number of non-na values in the window\n * @returns The running sum per bar: NaN until `length` non-na values exist; a bar with an na value keeps the\n * previous result\n */\nexport function runningSum(source: ArrayLike<number | null | undefined>, length: number): number[] {\n const len = Math.floor(length);\n if (!(len >= 1)) return new Array<number>(source.length).fill(NaN);\n return sumWindows(source, () => len);\n}\n\n/** The values of a series length, floored, checked to be at least 1 on every bar. */\nfunction seriesLengths(lengths: ArrayLike<number>, count: number, name: string): number[] {\n if (lengths.length < count) {\n throw new Error(`${name}: the length series has ${lengths.length} values for ${count} bars`);\n }\n return Array.from({ length: count }, (_, i) => {\n const len = Math.floor(lengths[i]!);\n checkSumLength(name, len, i);\n if (!(len >= 1)) throw new Error(`${name}: length must be at least 1 (bar ${i}: ${lengths[i]})`);\n return len;\n });\n}\n\n/**\n * The sum of the last `lengths[i]` non-na values on each bar `i` (a series length), as PineScript computes it (see\n * {@link RunningSum}). A bar with an na value gives the sum of the last `lengths[i]` earlier values.\n *\n * @param name - Function name for the error messages\n */\nexport function runningSumSeries(\n source: ArrayLike<number | null | undefined>,\n lengths: ArrayLike<number>,\n name = 'math.sum'\n): number[] {\n const lens = seriesLengths(lengths, source.length, name);\n return sumWindows(source, (i) => lens[i]!);\n}\n\n/** Variance from the running sums of the values and of their squares; rules in {@link runningVariance}. */\nfunction varianceFromSums(\n source: ArrayLike<number | null | undefined>,\n sumOf: (src: ArrayLike<number | null | undefined>) => number[],\n lengthAt: (i: number) => number,\n biased: boolean\n): number[] {\n const squares = Array.from({ length: source.length }, (_, i) => {\n const v = source[i];\n return isNa(v) ? NaN : (v as number) * (v as number);\n });\n const sums = sumOf(source);\n const sumSquares = sumOf(squares);\n return sums.map((sum, i) => {\n const len = lengthAt(i);\n const mean = sum / len;\n const sq = sumSquares[i]!;\n return biased ? sq / len - mean * mean : sq / (len - 1) - (mean * sum) / (len - 1);\n });\n}\n\n/**\n * Window variance from the running sums of the values and of their squares, as PineScript computes it:\n * biased `sumSq / n - mean * mean`, unbiased `sumSq / (n - 1) - mean * sum / (n - 1)`, with `mean = sum / n`.\n */\nexport function runningVariance(\n source: ArrayLike<number | null | undefined>,\n length: number,\n biased: boolean\n): number[] {\n const len = Math.floor(length);\n return varianceFromSums(source, (src) => runningSum(src, len), () => len, biased);\n}\n\n/** {@link runningVariance} with a series length (the length of bar `i` is `lengths[i]`). */\nexport function runningVarianceSeries(\n source: ArrayLike<number | null | undefined>,\n lengths: ArrayLike<number>,\n biased: boolean,\n name = 'ta.variance'\n): number[] {\n const lens = seriesLengths(lengths, source.length, name);\n return varianceFromSums(source, (src) => sumWindows(src, (i) => lens[i]!), (i) => lens[i]!, biased);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/cjs/ta-series.d.ts
CHANGED
|
@@ -39,7 +39,7 @@ export declare function rma(source: Series, length: number): Series;
|
|
|
39
39
|
* @param length - Period length
|
|
40
40
|
* @returns Series with RSI values
|
|
41
41
|
*/
|
|
42
|
-
export declare function rsi(source: Series, length: number): Series;
|
|
42
|
+
export declare function rsi(source: Series, length: number | Series): Series;
|
|
43
43
|
/**
|
|
44
44
|
* Moving Average Convergence Divergence
|
|
45
45
|
* @param source - Source series
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ta-series.d.ts","sourceRoot":"","sources":["../../src/ta-series.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAKnE;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAKnE;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"ta-series.d.ts","sourceRoot":"","sources":["../../src/ta-series.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/ta-series.js
CHANGED
|
@@ -129,7 +129,7 @@ function rma(source, length) {
|
|
|
129
129
|
function rsi(source, length) {
|
|
130
130
|
const bars = source.bars;
|
|
131
131
|
const sourceValues = source.toArray();
|
|
132
|
-
const result = taCore.rsi(sourceValues, length);
|
|
132
|
+
const result = length instanceof import_series.Series ? taCore.rsi(sourceValues, length.toArray()) : taCore.rsi(sourceValues, length);
|
|
133
133
|
return import_series.Series.fromArray(bars, result);
|
|
134
134
|
}
|
|
135
135
|
function macd(source, fastLength, slowLength, signalLength) {
|
|
@@ -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): 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 {\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): 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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",
|
|
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,9 @@
|
|
|
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 and pane: `table.new` or `table.set_position` at the position of a live table with
|
|
16
|
+
* the same `force_overlay` deletes that table (#176, #182); a table with `force_overlay = true` and one without
|
|
17
|
+
* keep each their own position, also in an overlay script
|
|
15
18
|
*
|
|
16
19
|
* @version 6
|
|
17
20
|
*/
|
|
@@ -21,7 +24,8 @@ type HAlign = 'left' | 'center' | 'right';
|
|
|
21
24
|
type VAlign = 'top' | 'center' | 'bottom';
|
|
22
25
|
type FontFamily = 'default' | 'monospace';
|
|
23
26
|
/**
|
|
24
|
-
* Creates a new table (PineScript `table.new`).
|
|
27
|
+
* Creates a new table (PineScript `table.new`). A live table at the same position with the same `force_overlay` is
|
|
28
|
+
* deleted, as PineScript keeps one table per position and pane (#176, #182).
|
|
25
29
|
*
|
|
26
30
|
* @example
|
|
27
31
|
* ```typescript
|
|
@@ -66,8 +70,11 @@ export declare function merge_cells(table_id: Table, start_column: number, start
|
|
|
66
70
|
* the start cell), and the merges that start in that range.
|
|
67
71
|
*/
|
|
68
72
|
export declare function clear(table_id: Table, start_column: number, start_row: number, end_column?: number, end_row?: number): void;
|
|
69
|
-
/**
|
|
70
|
-
|
|
73
|
+
/**
|
|
74
|
+
* Moves the table to another position (`position.*`). A live table at that position with the same `force_overlay` is
|
|
75
|
+
* deleted (#182).
|
|
76
|
+
*/
|
|
77
|
+
export declare function set_position(table_id: Table, position: TablePosition): void;
|
|
71
78
|
/** Sets the background colour of the table. */
|
|
72
79
|
export declare const set_bgcolor: (table_id: Table, value: color | undefined) => void;
|
|
73
80
|
/** Sets the colour of the outer frame. */
|
|
@@ -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
|
@@ -46,7 +46,13 @@ __export(table_exports, {
|
|
|
46
46
|
});
|
|
47
47
|
module.exports = __toCommonJS(table_exports);
|
|
48
48
|
var import_registry = require("../drawing/registry.js");
|
|
49
|
+
function freePosition(position, force_overlay, keep) {
|
|
50
|
+
for (const old of (0, import_registry.all)("table")) {
|
|
51
|
+
if (old !== keep && old.position === position && (old.force_overlay ?? false) === force_overlay) (0, import_registry.remove)("table", old);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
49
54
|
function new_table(position, columns, rows, bgcolor, frame_color, frame_width, border_color, border_width, force_overlay) {
|
|
55
|
+
freePosition(position, force_overlay ?? false);
|
|
50
56
|
return (0, import_registry.register)("table", {
|
|
51
57
|
position,
|
|
52
58
|
columns,
|
|
@@ -135,7 +141,11 @@ function setTable(field) {
|
|
|
135
141
|
table_id[field] = value;
|
|
136
142
|
};
|
|
137
143
|
}
|
|
138
|
-
|
|
144
|
+
function set_position(table_id, position) {
|
|
145
|
+
if ((0, import_registry.isDeleted)(table_id)) return;
|
|
146
|
+
freePosition(position, table_id.force_overlay ?? false, table_id);
|
|
147
|
+
table_id.position = position;
|
|
148
|
+
}
|
|
139
149
|
const set_bgcolor = setTable("bgcolor");
|
|
140
150
|
const set_frame_color = setTable("frame_color");
|
|
141
151
|
const set_frame_width = setTable("frame_width");
|