@simahfud/pine-to-kline 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/PineInterpreter.d.ts +19 -0
- package/dist/PineInterpreter.d.ts.map +1 -0
- package/dist/PineInterpreter.js +89 -0
- package/dist/PineInterpreter.js.map +1 -0
- package/dist/adapter/FigureMapper.d.ts +8 -0
- package/dist/adapter/FigureMapper.d.ts.map +1 -0
- package/dist/adapter/FigureMapper.js +22 -0
- package/dist/adapter/FigureMapper.js.map +1 -0
- package/dist/adapter/KlineAdapter.d.ts +11 -0
- package/dist/adapter/KlineAdapter.d.ts.map +1 -0
- package/dist/adapter/KlineAdapter.js +88 -0
- package/dist/adapter/KlineAdapter.js.map +1 -0
- package/dist/adapter/StyleMapper.d.ts +10 -0
- package/dist/adapter/StyleMapper.d.ts.map +1 -0
- package/dist/adapter/StyleMapper.js +28 -0
- package/dist/adapter/StyleMapper.js.map +1 -0
- package/dist/builtins/color/constants.d.ts +7 -0
- package/dist/builtins/color/constants.d.ts.map +1 -0
- package/dist/builtins/color/constants.js +25 -0
- package/dist/builtins/color/constants.js.map +1 -0
- package/dist/builtins/color/functions.d.ts +21 -0
- package/dist/builtins/color/functions.d.ts.map +1 -0
- package/dist/builtins/color/functions.js +52 -0
- package/dist/builtins/color/functions.js.map +1 -0
- package/dist/builtins/index.d.ts +15 -0
- package/dist/builtins/index.d.ts.map +1 -0
- package/dist/builtins/index.js +32 -0
- package/dist/builtins/index.js.map +1 -0
- package/dist/builtins/input/functions.d.ts +28 -0
- package/dist/builtins/input/functions.d.ts.map +1 -0
- package/dist/builtins/input/functions.js +114 -0
- package/dist/builtins/input/functions.js.map +1 -0
- package/dist/builtins/math/functions.d.ts +9 -0
- package/dist/builtins/math/functions.d.ts.map +1 -0
- package/dist/builtins/math/functions.js +57 -0
- package/dist/builtins/math/functions.js.map +1 -0
- package/dist/builtins/ta/crossover.d.ts +18 -0
- package/dist/builtins/ta/crossover.d.ts.map +1 -0
- package/dist/builtins/ta/crossover.js +59 -0
- package/dist/builtins/ta/crossover.js.map +1 -0
- package/dist/builtins/ta/index.d.ts +12 -0
- package/dist/builtins/ta/index.d.ts.map +1 -0
- package/dist/builtins/ta/index.js +61 -0
- package/dist/builtins/ta/index.js.map +1 -0
- package/dist/builtins/ta/momentum.d.ts +22 -0
- package/dist/builtins/ta/momentum.d.ts.map +1 -0
- package/dist/builtins/ta/momentum.js +81 -0
- package/dist/builtins/ta/momentum.js.map +1 -0
- package/dist/builtins/ta/moving-averages.d.ts +24 -0
- package/dist/builtins/ta/moving-averages.d.ts.map +1 -0
- package/dist/builtins/ta/moving-averages.js +108 -0
- package/dist/builtins/ta/moving-averages.js.map +1 -0
- package/dist/builtins/ta/utility.d.ts +28 -0
- package/dist/builtins/ta/utility.d.ts.map +1 -0
- package/dist/builtins/ta/utility.js +156 -0
- package/dist/builtins/ta/utility.js.map +1 -0
- package/dist/builtins/ta/volatility.d.ts +21 -0
- package/dist/builtins/ta/volatility.d.ts.map +1 -0
- package/dist/builtins/ta/volatility.js +71 -0
- package/dist/builtins/ta/volatility.js.map +1 -0
- package/dist/index.d.ts +21 -695
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/lexer/Lexer.d.ts +40 -0
- package/dist/lexer/Lexer.d.ts.map +1 -0
- package/dist/lexer/Lexer.js +383 -0
- package/dist/lexer/Lexer.js.map +1 -0
- package/dist/lexer/Token.d.ts +16 -0
- package/dist/lexer/Token.d.ts.map +1 -0
- package/dist/lexer/Token.js +26 -0
- package/dist/lexer/Token.js.map +1 -0
- package/dist/lexer/TokenType.d.ts +74 -0
- package/dist/lexer/TokenType.d.ts.map +1 -0
- package/dist/lexer/TokenType.js +111 -0
- package/dist/lexer/TokenType.js.map +1 -0
- package/dist/parser/Parser.d.ts +55 -0
- package/dist/parser/Parser.d.ts.map +1 -0
- package/dist/parser/Parser.js +569 -0
- package/dist/parser/Parser.js.map +1 -0
- package/dist/parser/nodes/index.d.ts +215 -0
- package/dist/parser/nodes/index.d.ts.map +1 -0
- package/dist/parser/nodes/index.js +7 -0
- package/dist/parser/nodes/index.js.map +1 -0
- package/dist/plugin/KlineChartProPlugin.d.ts +43 -0
- package/dist/plugin/KlineChartProPlugin.d.ts.map +1 -0
- package/dist/plugin/KlineChartProPlugin.js +44 -0
- package/dist/plugin/KlineChartProPlugin.js.map +1 -0
- package/dist/runtime/BarContext.d.ts +23 -0
- package/dist/runtime/BarContext.d.ts.map +1 -0
- package/dist/runtime/BarContext.js +41 -0
- package/dist/runtime/BarContext.js.map +1 -0
- package/dist/runtime/PineRuntime.d.ts +51 -0
- package/dist/runtime/PineRuntime.d.ts.map +1 -0
- package/dist/runtime/PineRuntime.js +471 -0
- package/dist/runtime/PineRuntime.js.map +1 -0
- package/dist/runtime/SeriesEmulator.d.ts +21 -0
- package/dist/runtime/SeriesEmulator.d.ts.map +1 -0
- package/dist/runtime/SeriesEmulator.js +32 -0
- package/dist/runtime/SeriesEmulator.js.map +1 -0
- package/dist/runtime/VarPersistence.d.ts +20 -0
- package/dist/runtime/VarPersistence.d.ts.map +1 -0
- package/dist/runtime/VarPersistence.js +28 -0
- package/dist/runtime/VarPersistence.js.map +1 -0
- package/dist/types.d.ts +97 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/errors.d.ts +24 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +46 -0
- package/dist/utils/errors.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pine-to-kline — Input Functions
|
|
3
|
+
* Handles input.int(), input.float(), input.bool(), etc.
|
|
4
|
+
* These extract metadata for KlineChart calcParams.
|
|
5
|
+
* @license Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
let inputCounter = 0;
|
|
8
|
+
export function resetInputCounter() {
|
|
9
|
+
inputCounter = 0;
|
|
10
|
+
}
|
|
11
|
+
/** input.int(defval, title?, ...) */
|
|
12
|
+
export function inputInt(defval, title, options) {
|
|
13
|
+
return {
|
|
14
|
+
meta: {
|
|
15
|
+
id: `input_${inputCounter++}`,
|
|
16
|
+
type: 'int',
|
|
17
|
+
title: title ?? null,
|
|
18
|
+
defaultValue: defval,
|
|
19
|
+
minval: options?.minval,
|
|
20
|
+
maxval: options?.maxval,
|
|
21
|
+
step: options?.step ?? 1,
|
|
22
|
+
},
|
|
23
|
+
value: defval
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** input.float(defval, title?, ...) */
|
|
27
|
+
export function inputFloat(defval, title, options) {
|
|
28
|
+
return {
|
|
29
|
+
meta: {
|
|
30
|
+
id: `input_${inputCounter++}`,
|
|
31
|
+
type: 'float',
|
|
32
|
+
title: title ?? null,
|
|
33
|
+
defaultValue: defval,
|
|
34
|
+
minval: options?.minval,
|
|
35
|
+
maxval: options?.maxval,
|
|
36
|
+
step: options?.step ?? 0.1,
|
|
37
|
+
},
|
|
38
|
+
value: defval
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** input.bool(defval, title?) */
|
|
42
|
+
export function inputBool(defval, title) {
|
|
43
|
+
return {
|
|
44
|
+
meta: {
|
|
45
|
+
id: `input_${inputCounter++}`,
|
|
46
|
+
type: 'bool',
|
|
47
|
+
title: title ?? null,
|
|
48
|
+
defaultValue: defval,
|
|
49
|
+
},
|
|
50
|
+
value: defval
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/** input.string(defval, title?, options?) */
|
|
54
|
+
export function inputString(defval, title, options) {
|
|
55
|
+
return {
|
|
56
|
+
meta: {
|
|
57
|
+
id: `input_${inputCounter++}`,
|
|
58
|
+
type: 'string',
|
|
59
|
+
title: title ?? null,
|
|
60
|
+
defaultValue: defval,
|
|
61
|
+
options,
|
|
62
|
+
},
|
|
63
|
+
value: defval
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/** input.color(defval, title?) */
|
|
67
|
+
export function inputColor(defval, title) {
|
|
68
|
+
return {
|
|
69
|
+
meta: {
|
|
70
|
+
id: `input_${inputCounter++}`,
|
|
71
|
+
type: 'color',
|
|
72
|
+
title: title ?? null,
|
|
73
|
+
defaultValue: defval,
|
|
74
|
+
},
|
|
75
|
+
value: defval
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/** input.source(defval, title?) — typically resolves to 'close' */
|
|
79
|
+
export function inputSource(defval, title) {
|
|
80
|
+
return {
|
|
81
|
+
meta: {
|
|
82
|
+
id: `input_${inputCounter++}`,
|
|
83
|
+
type: 'source',
|
|
84
|
+
title: title ?? null,
|
|
85
|
+
defaultValue: defval,
|
|
86
|
+
},
|
|
87
|
+
value: defval
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/** input() — generic input (Pine v5 legacy) */
|
|
91
|
+
export function inputGeneric(defval, title) {
|
|
92
|
+
const type = typeof defval === 'number'
|
|
93
|
+
? (Number.isInteger(defval) ? 'int' : 'float')
|
|
94
|
+
: typeof defval === 'boolean' ? 'bool' : 'string';
|
|
95
|
+
return {
|
|
96
|
+
meta: {
|
|
97
|
+
id: `input_${inputCounter++}`,
|
|
98
|
+
type: type,
|
|
99
|
+
title: title ?? null,
|
|
100
|
+
defaultValue: defval,
|
|
101
|
+
},
|
|
102
|
+
value: defval
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
export const INPUT_REGISTRY = {
|
|
106
|
+
'input': inputGeneric,
|
|
107
|
+
'input.int': inputInt,
|
|
108
|
+
'input.float': inputFloat,
|
|
109
|
+
'input.bool': inputBool,
|
|
110
|
+
'input.string': inputString,
|
|
111
|
+
'input.color': inputColor,
|
|
112
|
+
'input.source': inputSource,
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../src/builtins/input/functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pine-to-kline — Math Namespace Functions
|
|
3
|
+
* Wraps JavaScript Math.* to match Pine's math.* namespace
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/** Math function registry for runtime resolution */
|
|
7
|
+
export declare const MATH_REGISTRY: Record<string, Function>;
|
|
8
|
+
export declare const MATH_CONSTANTS: Record<string, number>;
|
|
9
|
+
//# sourceMappingURL=functions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../src/builtins/math/functions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oDAAoD;AACpD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAqClD,CAAA;AAGD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKjD,CAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pine-to-kline — Math Namespace Functions
|
|
3
|
+
* Wraps JavaScript Math.* to match Pine's math.* namespace
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/** Math function registry for runtime resolution */
|
|
7
|
+
export const MATH_REGISTRY = {
|
|
8
|
+
'math.abs': (x) => Math.abs(x),
|
|
9
|
+
'math.ceil': (x) => Math.ceil(x),
|
|
10
|
+
'math.floor': (x) => Math.floor(x),
|
|
11
|
+
'math.round': (x, precision) => {
|
|
12
|
+
if (precision === undefined)
|
|
13
|
+
return Math.round(x);
|
|
14
|
+
const factor = Math.pow(10, precision);
|
|
15
|
+
return Math.round(x * factor) / factor;
|
|
16
|
+
},
|
|
17
|
+
'math.log': (x) => Math.log(x),
|
|
18
|
+
'math.log10': (x) => Math.log10(x),
|
|
19
|
+
'math.pow': (base, exp) => Math.pow(base, exp),
|
|
20
|
+
'math.sqrt': (x) => Math.sqrt(x),
|
|
21
|
+
'math.exp': (x) => Math.exp(x),
|
|
22
|
+
'math.max': (...args) => Math.max(...args),
|
|
23
|
+
'math.min': (...args) => Math.min(...args),
|
|
24
|
+
'math.sign': (x) => Math.sign(x),
|
|
25
|
+
'math.avg': (...args) => args.reduce((a, b) => a + b, 0) / args.length,
|
|
26
|
+
'math.sum': (source, length) => {
|
|
27
|
+
const result = [];
|
|
28
|
+
for (let i = 0; i < source.length; i++) {
|
|
29
|
+
if (i < length - 1) {
|
|
30
|
+
result.push(NaN);
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
let sum = 0;
|
|
34
|
+
for (let j = i - length + 1; j <= i; j++)
|
|
35
|
+
sum += source[j];
|
|
36
|
+
result.push(sum);
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
},
|
|
40
|
+
'math.sin': (x) => Math.sin(x),
|
|
41
|
+
'math.cos': (x) => Math.cos(x),
|
|
42
|
+
'math.tan': (x) => Math.tan(x),
|
|
43
|
+
'math.asin': (x) => Math.asin(x),
|
|
44
|
+
'math.acos': (x) => Math.acos(x),
|
|
45
|
+
'math.atan': (x) => Math.atan(x),
|
|
46
|
+
'math.random': () => Math.random(),
|
|
47
|
+
'math.todegrees': (rad) => rad * (180 / Math.PI),
|
|
48
|
+
'math.toradians': (deg) => deg * (Math.PI / 180),
|
|
49
|
+
};
|
|
50
|
+
// Also export Pine math constants
|
|
51
|
+
export const MATH_CONSTANTS = {
|
|
52
|
+
'math.pi': Math.PI,
|
|
53
|
+
'math.e': Math.E,
|
|
54
|
+
'math.phi': 1.618033988749895,
|
|
55
|
+
'math.rphi': 0.618033988749895,
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../src/builtins/math/functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pine-to-kline — Crossover Functions
|
|
3
|
+
* Implements: crossover, crossunder, cross
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/** ta.crossover(a, b) — a crosses above b */
|
|
7
|
+
export declare function crossover(a: number[], b: number[]): boolean[];
|
|
8
|
+
/** ta.crossunder(a, b) — a crosses below b */
|
|
9
|
+
export declare function crossunder(a: number[], b: number[]): boolean[];
|
|
10
|
+
/** ta.cross(a, b) — either crossover or crossunder */
|
|
11
|
+
export declare function cross(a: number[], b: number[]): boolean[];
|
|
12
|
+
/** ta.change() — difference from previous bar */
|
|
13
|
+
export declare function change(source: number[], length?: number): number[];
|
|
14
|
+
/** ta.rising() — true if source has been rising for `length` bars */
|
|
15
|
+
export declare function rising(source: number[], length: number): boolean[];
|
|
16
|
+
/** ta.falling() — true if source has been falling for `length` bars */
|
|
17
|
+
export declare function falling(source: number[], length: number): boolean[];
|
|
18
|
+
//# sourceMappingURL=crossover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crossover.d.ts","sourceRoot":"","sources":["../../../src/builtins/ta/crossover.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,6CAA6C;AAC7C,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAK7D;AAED,8CAA8C;AAC9C,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAK9D;AAED,sDAAsD;AACtD,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAMzD;AAED,iDAAiD;AACjD,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAE7D;AAED,qEAAqE;AACrE,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAQlE;AAED,uEAAuE;AACvE,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAQnE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pine-to-kline — Crossover Functions
|
|
3
|
+
* Implements: crossover, crossunder, cross
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/** ta.crossover(a, b) — a crosses above b */
|
|
7
|
+
export function crossover(a, b) {
|
|
8
|
+
return a.map((v, i) => {
|
|
9
|
+
if (i === 0)
|
|
10
|
+
return false;
|
|
11
|
+
return a[i - 1] <= b[i - 1] && v > b[i];
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
/** ta.crossunder(a, b) — a crosses below b */
|
|
15
|
+
export function crossunder(a, b) {
|
|
16
|
+
return a.map((v, i) => {
|
|
17
|
+
if (i === 0)
|
|
18
|
+
return false;
|
|
19
|
+
return a[i - 1] >= b[i - 1] && v < b[i];
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/** ta.cross(a, b) — either crossover or crossunder */
|
|
23
|
+
export function cross(a, b) {
|
|
24
|
+
return a.map((_, i) => {
|
|
25
|
+
if (i === 0)
|
|
26
|
+
return false;
|
|
27
|
+
return (a[i - 1] <= b[i - 1] && a[i] > b[i]) ||
|
|
28
|
+
(a[i - 1] >= b[i - 1] && a[i] < b[i]);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/** ta.change() — difference from previous bar */
|
|
32
|
+
export function change(source, length = 1) {
|
|
33
|
+
return source.map((v, i) => i < length ? NaN : v - source[i - length]);
|
|
34
|
+
}
|
|
35
|
+
/** ta.rising() — true if source has been rising for `length` bars */
|
|
36
|
+
export function rising(source, length) {
|
|
37
|
+
return source.map((_, i) => {
|
|
38
|
+
if (i < length)
|
|
39
|
+
return false;
|
|
40
|
+
for (let j = i - length + 1; j <= i; j++) {
|
|
41
|
+
if (source[j] <= source[j - 1])
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
return true;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/** ta.falling() — true if source has been falling for `length` bars */
|
|
48
|
+
export function falling(source, length) {
|
|
49
|
+
return source.map((_, i) => {
|
|
50
|
+
if (i < length)
|
|
51
|
+
return false;
|
|
52
|
+
for (let j = i - length + 1; j <= i; j++) {
|
|
53
|
+
if (source[j] >= source[j - 1])
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return true;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=crossover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crossover.js","sourceRoot":"","sources":["../../../src/builtins/ta/crossover.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pine-to-kline — TA Namespace Barrel Export
|
|
3
|
+
* @license Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
export * as ma from './moving-averages';
|
|
6
|
+
export * as momentum from './momentum';
|
|
7
|
+
export * as volatility from './volatility';
|
|
8
|
+
export * as crossover from './crossover';
|
|
9
|
+
export * as utility from './utility';
|
|
10
|
+
/** Registry map: 'ta.sma' → implementation function */
|
|
11
|
+
export declare const TA_REGISTRY: Record<string, Function>;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builtins/ta/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,SAAS,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAA;AASpC,uDAAuD;AACvD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CA+ChD,CAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pine-to-kline — TA Namespace Barrel Export
|
|
3
|
+
* @license Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
export * as ma from './moving-averages';
|
|
6
|
+
export * as momentum from './momentum';
|
|
7
|
+
export * as volatility from './volatility';
|
|
8
|
+
export * as crossover from './crossover';
|
|
9
|
+
export * as utility from './utility';
|
|
10
|
+
// Re-export flat for runtime resolution
|
|
11
|
+
import * as _ma from './moving-averages';
|
|
12
|
+
import * as _mom from './momentum';
|
|
13
|
+
import * as _vol from './volatility';
|
|
14
|
+
import * as _cross from './crossover';
|
|
15
|
+
import * as _util from './utility';
|
|
16
|
+
/** Registry map: 'ta.sma' → implementation function */
|
|
17
|
+
export const TA_REGISTRY = {
|
|
18
|
+
// Moving averages
|
|
19
|
+
'ta.sma': _ma.sma,
|
|
20
|
+
'ta.ema': _ma.ema,
|
|
21
|
+
'ta.rma': _ma.rma,
|
|
22
|
+
'ta.wma': _ma.wma,
|
|
23
|
+
'ta.hma': _ma.hma,
|
|
24
|
+
'ta.vwma': _ma.vwma,
|
|
25
|
+
'ta.swma': _ma.swma,
|
|
26
|
+
'ta.dema': _ma.dema,
|
|
27
|
+
'ta.tema': _ma.tema,
|
|
28
|
+
// Momentum
|
|
29
|
+
'ta.rsi': _mom.rsi,
|
|
30
|
+
'ta.macd': _mom.macd,
|
|
31
|
+
'ta.stoch': _mom.stoch,
|
|
32
|
+
'ta.cci': _mom.cci,
|
|
33
|
+
'ta.mom': _mom.mom,
|
|
34
|
+
'ta.roc': _mom.roc,
|
|
35
|
+
// Volatility
|
|
36
|
+
'ta.atr': _vol.atr,
|
|
37
|
+
'ta.bb': _vol.bb,
|
|
38
|
+
'ta.kc': _vol.kc,
|
|
39
|
+
'ta.donchian': _vol.donchian,
|
|
40
|
+
'ta.tr': _vol.tr,
|
|
41
|
+
// Crossover
|
|
42
|
+
'ta.crossover': _cross.crossover,
|
|
43
|
+
'ta.crossunder': _cross.crossunder,
|
|
44
|
+
'ta.cross': _cross.cross,
|
|
45
|
+
'ta.change': _cross.change,
|
|
46
|
+
'ta.rising': _cross.rising,
|
|
47
|
+
'ta.falling': _cross.falling,
|
|
48
|
+
// Utility
|
|
49
|
+
'ta.highest': _util.highest,
|
|
50
|
+
'ta.lowest': _util.lowest,
|
|
51
|
+
'ta.highestbars': _util.highestbars,
|
|
52
|
+
'ta.lowestbars': _util.lowestbars,
|
|
53
|
+
'ta.barssince': _util.barssince,
|
|
54
|
+
'ta.valuewhen': _util.valuewhen,
|
|
55
|
+
'ta.pivothigh': _util.pivothigh,
|
|
56
|
+
'ta.pivotlow': _util.pivotlow,
|
|
57
|
+
'ta.cum': _util.cum,
|
|
58
|
+
'ta.stdev': _util.stdev,
|
|
59
|
+
'ta.percentrank': _util.percentrank,
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/builtins/ta/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,SAAS,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAA;AAEpC,wCAAwC;AACxC,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAA;AACxC,OAAO,KAAK,IAAI,MAAM,YAAY,CAAA;AAClC,OAAO,KAAK,IAAI,MAAM,cAAc,CAAA;AACpC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,WAAW,CAAA;AAElC,uDAAuD;AACvD,MAAM,CAAC,MAAM,WAAW,GAA6B;IACnD,kBAAkB;IAClB,QAAQ,EAAI,GAAG,CAAC,GAAG;IACnB,QAAQ,EAAI,GAAG,CAAC,GAAG;IACnB,QAAQ,EAAI,GAAG,CAAC,GAAG;IACnB,QAAQ,EAAI,GAAG,CAAC,GAAG;IACnB,QAAQ,EAAI,GAAG,CAAC,GAAG;IACnB,SAAS,EAAG,GAAG,CAAC,IAAI;IACpB,SAAS,EAAG,GAAG,CAAC,IAAI;IACpB,SAAS,EAAG,GAAG,CAAC,IAAI;IACpB,SAAS,EAAG,GAAG,CAAC,IAAI;IAEpB,WAAW;IACX,QAAQ,EAAI,IAAI,CAAC,GAAG;IACpB,SAAS,EAAG,IAAI,CAAC,IAAI;IACrB,UAAU,EAAE,IAAI,CAAC,KAAK;IACtB,QAAQ,EAAI,IAAI,CAAC,GAAG;IACpB,QAAQ,EAAI,IAAI,CAAC,GAAG;IACpB,QAAQ,EAAI,IAAI,CAAC,GAAG;IAEpB,aAAa;IACb,QAAQ,EAAO,IAAI,CAAC,GAAG;IACvB,OAAO,EAAQ,IAAI,CAAC,EAAE;IACtB,OAAO,EAAQ,IAAI,CAAC,EAAE;IACtB,aAAa,EAAE,IAAI,CAAC,QAAQ;IAC5B,OAAO,EAAQ,IAAI,CAAC,EAAE;IAEtB,YAAY;IACZ,cAAc,EAAG,MAAM,CAAC,SAAS;IACjC,eAAe,EAAE,MAAM,CAAC,UAAU;IAClC,UAAU,EAAO,MAAM,CAAC,KAAK;IAC7B,WAAW,EAAM,MAAM,CAAC,MAAM;IAC9B,WAAW,EAAM,MAAM,CAAC,MAAM;IAC9B,YAAY,EAAK,MAAM,CAAC,OAAO;IAE/B,UAAU;IACV,YAAY,EAAM,KAAK,CAAC,OAAO;IAC/B,WAAW,EAAO,KAAK,CAAC,MAAM;IAC9B,gBAAgB,EAAE,KAAK,CAAC,WAAW;IACnC,eAAe,EAAG,KAAK,CAAC,UAAU;IAClC,cAAc,EAAI,KAAK,CAAC,SAAS;IACjC,cAAc,EAAI,KAAK,CAAC,SAAS;IACjC,cAAc,EAAI,KAAK,CAAC,SAAS;IACjC,aAAa,EAAK,KAAK,CAAC,QAAQ;IAChC,QAAQ,EAAU,KAAK,CAAC,GAAG;IAC3B,UAAU,EAAQ,KAAK,CAAC,KAAK;IAC7B,gBAAgB,EAAE,KAAK,CAAC,WAAW;CACpC,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pine-to-kline — Momentum Indicators
|
|
3
|
+
* Implements: rsi, macd, stoch, cci, mom, roc
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/** ta.rsi() — Relative Strength Index (Wilder's method) */
|
|
7
|
+
export declare function rsi(source: number[], length: number): number[];
|
|
8
|
+
/** ta.macd() — MACD with signal and histogram */
|
|
9
|
+
export declare function macd(source: number[], fastLen?: number, slowLen?: number, signalLen?: number): {
|
|
10
|
+
macd: number[];
|
|
11
|
+
signal: number[];
|
|
12
|
+
hist: number[];
|
|
13
|
+
};
|
|
14
|
+
/** ta.stoch() — Stochastic %K */
|
|
15
|
+
export declare function stoch(close: number[], high: number[], low: number[], length: number): number[];
|
|
16
|
+
/** ta.cci() — Commodity Channel Index */
|
|
17
|
+
export declare function cci(source: number[], length: number): number[];
|
|
18
|
+
/** ta.mom() — Momentum */
|
|
19
|
+
export declare function mom(source: number[], length: number): number[];
|
|
20
|
+
/** ta.roc() — Rate of Change */
|
|
21
|
+
export declare function roc(source: number[], length: number): number[];
|
|
22
|
+
//# sourceMappingURL=momentum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"momentum.d.ts","sourceRoot":"","sources":["../../../src/builtins/ta/momentum.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,2DAA2D;AAC3D,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAe9D;AAED,iDAAiD;AACjD,wBAAgB,IAAI,CAClB,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,SAAK,EACZ,OAAO,SAAK,EACZ,SAAS,SAAI,GACZ;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAOtD;AAED,iCAAiC;AACjC,wBAAgB,KAAK,CACnB,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EAAE,EACb,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CAWV;AAED,yCAAyC;AACzC,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAY9D;AAED,0BAA0B;AAC1B,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9D;AAED,gCAAgC;AAChC,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAM9D"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pine-to-kline — Momentum Indicators
|
|
3
|
+
* Implements: rsi, macd, stoch, cci, mom, roc
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { rma, ema, sma } from './moving-averages';
|
|
7
|
+
/** ta.rsi() — Relative Strength Index (Wilder's method) */
|
|
8
|
+
export function rsi(source, length) {
|
|
9
|
+
const gains = [0];
|
|
10
|
+
const losses = [0];
|
|
11
|
+
for (let i = 1; i < source.length; i++) {
|
|
12
|
+
const diff = source[i] - source[i - 1];
|
|
13
|
+
gains.push(diff > 0 ? diff : 0);
|
|
14
|
+
losses.push(diff < 0 ? Math.abs(diff) : 0);
|
|
15
|
+
}
|
|
16
|
+
const avgGains = rma(gains, length);
|
|
17
|
+
const avgLoss = rma(losses, length);
|
|
18
|
+
return source.map((_, i) => {
|
|
19
|
+
if (isNaN(avgGains[i]) || isNaN(avgLoss[i]))
|
|
20
|
+
return NaN;
|
|
21
|
+
if (avgLoss[i] === 0)
|
|
22
|
+
return 100;
|
|
23
|
+
return 100 - (100 / (1 + avgGains[i] / avgLoss[i]));
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/** ta.macd() — MACD with signal and histogram */
|
|
27
|
+
export function macd(source, fastLen = 12, slowLen = 26, signalLen = 9) {
|
|
28
|
+
const fast = ema(source, fastLen);
|
|
29
|
+
const slow = ema(source, slowLen);
|
|
30
|
+
const macdLine = fast.map((v, i) => v - slow[i]);
|
|
31
|
+
const signalLine = ema(macdLine, signalLen);
|
|
32
|
+
const hist = macdLine.map((v, i) => v - signalLine[i]);
|
|
33
|
+
return { macd: macdLine, signal: signalLine, hist };
|
|
34
|
+
}
|
|
35
|
+
/** ta.stoch() — Stochastic %K */
|
|
36
|
+
export function stoch(close, high, low, length) {
|
|
37
|
+
return close.map((_, i) => {
|
|
38
|
+
if (i < length - 1)
|
|
39
|
+
return NaN;
|
|
40
|
+
let highest = -Infinity, lowest = Infinity;
|
|
41
|
+
for (let j = i - length + 1; j <= i; j++) {
|
|
42
|
+
if (high[j] > highest)
|
|
43
|
+
highest = high[j];
|
|
44
|
+
if (low[j] < lowest)
|
|
45
|
+
lowest = low[j];
|
|
46
|
+
}
|
|
47
|
+
if (highest === lowest)
|
|
48
|
+
return 0;
|
|
49
|
+
return ((close[i] - lowest) / (highest - lowest)) * 100;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/** ta.cci() — Commodity Channel Index */
|
|
53
|
+
export function cci(source, length) {
|
|
54
|
+
const smaVals = sma(source, length);
|
|
55
|
+
return source.map((_, i) => {
|
|
56
|
+
if (i < length - 1)
|
|
57
|
+
return NaN;
|
|
58
|
+
let meanDev = 0;
|
|
59
|
+
for (let j = i - length + 1; j <= i; j++) {
|
|
60
|
+
meanDev += Math.abs(source[j] - smaVals[i]);
|
|
61
|
+
}
|
|
62
|
+
meanDev /= length;
|
|
63
|
+
if (meanDev === 0)
|
|
64
|
+
return 0;
|
|
65
|
+
return (source[i] - smaVals[i]) / (0.015 * meanDev);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/** ta.mom() — Momentum */
|
|
69
|
+
export function mom(source, length) {
|
|
70
|
+
return source.map((v, i) => i < length ? NaN : v - source[i - length]);
|
|
71
|
+
}
|
|
72
|
+
/** ta.roc() — Rate of Change */
|
|
73
|
+
export function roc(source, length) {
|
|
74
|
+
return source.map((v, i) => {
|
|
75
|
+
if (i < length)
|
|
76
|
+
return NaN;
|
|
77
|
+
const prev = source[i - length];
|
|
78
|
+
return prev === 0 ? 0 : ((v - prev) / prev) * 100;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=momentum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"momentum.js","sourceRoot":"","sources":["../../../src/builtins/ta/momentum.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pine-to-kline — Moving Average Functions
|
|
3
|
+
* Implements: sma, ema, rma, wma, hma, vwma, swma, dema, tema
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/** ta.sma() — Simple Moving Average */
|
|
7
|
+
export declare function sma(source: number[], length: number): number[];
|
|
8
|
+
/** ta.ema() — Exponential Moving Average */
|
|
9
|
+
export declare function ema(source: number[], length: number): number[];
|
|
10
|
+
/** ta.rma() — Wilder's Running Moving Average (used in RSI, ATR) */
|
|
11
|
+
export declare function rma(source: number[], length: number): number[];
|
|
12
|
+
/** ta.wma() — Weighted Moving Average */
|
|
13
|
+
export declare function wma(source: number[], length: number): number[];
|
|
14
|
+
/** ta.hma() — Hull Moving Average */
|
|
15
|
+
export declare function hma(source: number[], length: number): number[];
|
|
16
|
+
/** ta.vwma() — Volume Weighted Moving Average */
|
|
17
|
+
export declare function vwma(source: number[], volume: number[], length: number): number[];
|
|
18
|
+
/** ta.swma() — Symmetrically Weighted Moving Average (fixed length=4) */
|
|
19
|
+
export declare function swma(source: number[]): number[];
|
|
20
|
+
/** ta.dema() — Double Exponential Moving Average */
|
|
21
|
+
export declare function dema(source: number[], length: number): number[];
|
|
22
|
+
/** ta.tema() — Triple Exponential Moving Average */
|
|
23
|
+
export declare function tema(source: number[], length: number): number[];
|
|
24
|
+
//# sourceMappingURL=moving-averages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moving-averages.d.ts","sourceRoot":"","sources":["../../../src/builtins/ta/moving-averages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uCAAuC;AACvC,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAO9D;AAED,4CAA4C;AAC5C,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ9D;AAED,oEAAoE;AACpE,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAc9D;AAED,yCAAyC;AACzC,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAU9D;AAED,qCAAqC;AACrC,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAO9D;AAED,iDAAiD;AACjD,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAUjF;AAED,yEAAyE;AACzE,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAM/C;AAED,oDAAoD;AACpD,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAI/D;AAED,oDAAoD;AACpD,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAK/D"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pine-to-kline — Moving Average Functions
|
|
3
|
+
* Implements: sma, ema, rma, wma, hma, vwma, swma, dema, tema
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/** ta.sma() — Simple Moving Average */
|
|
7
|
+
export function sma(source, length) {
|
|
8
|
+
return source.map((_, i) => {
|
|
9
|
+
if (i < length - 1)
|
|
10
|
+
return NaN;
|
|
11
|
+
let sum = 0;
|
|
12
|
+
for (let j = i - length + 1; j <= i; j++)
|
|
13
|
+
sum += source[j];
|
|
14
|
+
return sum / length;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
/** ta.ema() — Exponential Moving Average */
|
|
18
|
+
export function ema(source, length) {
|
|
19
|
+
const k = 2 / (length + 1);
|
|
20
|
+
const out = [];
|
|
21
|
+
for (let i = 0; i < source.length; i++) {
|
|
22
|
+
if (i === 0) {
|
|
23
|
+
out.push(source[i]);
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
out.push(source[i] * k + out[i - 1] * (1 - k));
|
|
27
|
+
}
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
30
|
+
/** ta.rma() — Wilder's Running Moving Average (used in RSI, ATR) */
|
|
31
|
+
export function rma(source, length) {
|
|
32
|
+
const alpha = 1 / length;
|
|
33
|
+
const out = [];
|
|
34
|
+
for (let i = 0; i < source.length; i++) {
|
|
35
|
+
if (i < length - 1) {
|
|
36
|
+
out.push(NaN);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (i === length - 1) {
|
|
40
|
+
let sum = 0;
|
|
41
|
+
for (let j = 0; j < length; j++)
|
|
42
|
+
sum += source[j];
|
|
43
|
+
out.push(sum / length);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
out.push(alpha * source[i] + (1 - alpha) * out[i - 1]);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
/** ta.wma() — Weighted Moving Average */
|
|
52
|
+
export function wma(source, length) {
|
|
53
|
+
const denom = (length * (length + 1)) / 2;
|
|
54
|
+
return source.map((_, i) => {
|
|
55
|
+
if (i < length - 1)
|
|
56
|
+
return NaN;
|
|
57
|
+
let sum = 0;
|
|
58
|
+
for (let j = 0; j < length; j++) {
|
|
59
|
+
sum += source[i - j] * (length - j);
|
|
60
|
+
}
|
|
61
|
+
return sum / denom;
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/** ta.hma() — Hull Moving Average */
|
|
65
|
+
export function hma(source, length) {
|
|
66
|
+
const halfLen = Math.floor(length / 2);
|
|
67
|
+
const sqrtLen = Math.round(Math.sqrt(length));
|
|
68
|
+
const wma1 = wma(source, halfLen);
|
|
69
|
+
const wma2 = wma(source, length);
|
|
70
|
+
const diff = wma1.map((v, i) => 2 * v - wma2[i]);
|
|
71
|
+
return wma(diff, sqrtLen);
|
|
72
|
+
}
|
|
73
|
+
/** ta.vwma() — Volume Weighted Moving Average */
|
|
74
|
+
export function vwma(source, volume, length) {
|
|
75
|
+
return source.map((_, i) => {
|
|
76
|
+
if (i < length - 1)
|
|
77
|
+
return NaN;
|
|
78
|
+
let sumPV = 0, sumV = 0;
|
|
79
|
+
for (let j = i - length + 1; j <= i; j++) {
|
|
80
|
+
sumPV += source[j] * volume[j];
|
|
81
|
+
sumV += volume[j];
|
|
82
|
+
}
|
|
83
|
+
return sumV === 0 ? NaN : sumPV / sumV;
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/** ta.swma() — Symmetrically Weighted Moving Average (fixed length=4) */
|
|
87
|
+
export function swma(source) {
|
|
88
|
+
return source.map((_, i) => {
|
|
89
|
+
if (i < 3)
|
|
90
|
+
return NaN;
|
|
91
|
+
return source[i] * (1 / 6) + source[i - 1] * (2 / 6) +
|
|
92
|
+
source[i - 2] * (2 / 6) + source[i - 3] * (1 / 6);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/** ta.dema() — Double Exponential Moving Average */
|
|
96
|
+
export function dema(source, length) {
|
|
97
|
+
const ema1 = ema(source, length);
|
|
98
|
+
const ema2 = ema(ema1, length);
|
|
99
|
+
return ema1.map((v, i) => 2 * v - ema2[i]);
|
|
100
|
+
}
|
|
101
|
+
/** ta.tema() — Triple Exponential Moving Average */
|
|
102
|
+
export function tema(source, length) {
|
|
103
|
+
const ema1 = ema(source, length);
|
|
104
|
+
const ema2 = ema(ema1, length);
|
|
105
|
+
const ema3 = ema(ema2, length);
|
|
106
|
+
return ema1.map((v, i) => 3 * v - 3 * ema2[i] + ema3[i]);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=moving-averages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moving-averages.js","sourceRoot":"","sources":["../../../src/builtins/ta/moving-averages.ts"],"names":[],"mappings":"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"}
|