oakscriptjs 0.10.1 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/box/index.d.ts.map +1 -1
- package/dist/cjs/box/index.js +7 -1
- package/dist/cjs/box/index.js.map +2 -2
- package/dist/cjs/callsite/index.d.ts +73 -32
- package/dist/cjs/callsite/index.d.ts.map +1 -1
- package/dist/cjs/callsite/index.js +69 -65
- package/dist/cjs/callsite/index.js.map +2 -2
- package/dist/cjs/drawing/registry.d.ts +75 -0
- package/dist/cjs/drawing/registry.d.ts.map +1 -1
- package/dist/cjs/drawing/registry.js +139 -6
- package/dist/cjs/drawing/registry.js.map +2 -2
- package/dist/cjs/index.d.ts +6 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +28 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/label/index.d.ts.map +1 -1
- package/dist/cjs/label/index.js +3 -0
- package/dist/cjs/label/index.js.map +2 -2
- package/dist/cjs/line/index.d.ts.map +1 -1
- package/dist/cjs/line/index.js +7 -1
- package/dist/cjs/line/index.js.map +2 -2
- package/dist/cjs/math/index.d.ts.map +1 -1
- package/dist/cjs/math/index.js +2 -0
- package/dist/cjs/math/index.js.map +2 -2
- package/dist/cjs/polyline/index.d.ts.map +1 -1
- package/dist/cjs/polyline/index.js +3 -0
- package/dist/cjs/polyline/index.js.map +2 -2
- package/dist/cjs/script/index.d.ts +30 -13
- package/dist/cjs/script/index.d.ts.map +1 -1
- package/dist/cjs/script/index.js +48 -9
- package/dist/cjs/script/index.js.map +3 -3
- package/dist/cjs/session/bars.d.ts +15 -1
- package/dist/cjs/session/bars.d.ts.map +1 -1
- package/dist/cjs/session/bars.js +41 -6
- package/dist/cjs/session/bars.js.map +3 -3
- package/dist/cjs/session/calendar.d.ts +9 -1
- package/dist/cjs/session/calendar.d.ts.map +1 -1
- package/dist/cjs/session/calendar.js +28 -2
- package/dist/cjs/session/calendar.js.map +2 -2
- package/dist/cjs/session/context.d.ts +75 -0
- package/dist/cjs/session/context.d.ts.map +1 -0
- package/dist/cjs/session/context.js +113 -0
- package/dist/cjs/session/context.js.map +7 -0
- package/dist/cjs/str/index.d.ts +3 -1
- package/dist/cjs/str/index.d.ts.map +1 -1
- package/dist/cjs/str/index.js +2 -1
- package/dist/cjs/str/index.js.map +2 -2
- package/dist/cjs/str/numberformat.d.ts +4 -2
- package/dist/cjs/str/numberformat.d.ts.map +1 -1
- package/dist/cjs/str/numberformat.js +1 -1
- package/dist/cjs/str/numberformat.js.map +2 -2
- package/dist/cjs/ta/index.d.ts +33 -17
- package/dist/cjs/ta/index.d.ts.map +1 -1
- package/dist/cjs/ta/index.js +70 -29
- package/dist/cjs/ta/index.js.map +2 -2
- package/dist/cjs/ta/limits.d.ts +24 -0
- package/dist/cjs/ta/limits.d.ts.map +1 -0
- package/dist/cjs/ta/limits.js +50 -0
- package/dist/cjs/ta/limits.js.map +7 -0
- package/dist/cjs/ta/running-sum.d.ts +0 -16
- package/dist/cjs/ta/running-sum.d.ts.map +1 -1
- package/dist/cjs/ta/running-sum.js +2 -0
- package/dist/cjs/ta/running-sum.js.map +2 -2
- package/dist/cjs/ta-series.d.ts +7 -7
- package/dist/cjs/ta-series.d.ts.map +1 -1
- package/dist/cjs/ta-series.js +9 -7
- package/dist/cjs/ta-series.js.map +2 -2
- package/dist/cjs/time/index.d.ts +5 -2
- package/dist/cjs/time/index.d.ts.map +1 -1
- package/dist/cjs/time/index.js +2 -2
- package/dist/cjs/time/index.js.map +2 -2
- package/dist/cjs/time/session.d.ts +17 -1
- package/dist/cjs/time/session.d.ts.map +1 -1
- package/dist/cjs/time/session.js +61 -7
- package/dist/cjs/time/session.js.map +2 -2
- package/dist/cjs/types/metadata.d.ts +27 -3
- package/dist/cjs/types/metadata.d.ts.map +1 -1
- package/dist/cjs/types/metadata.js.map +1 -1
- package/dist/esm/box/index.d.ts.map +1 -1
- package/dist/esm/box/index.js +8 -2
- package/dist/esm/box/index.js.map +1 -1
- package/dist/esm/callsite/index.d.ts +73 -32
- package/dist/esm/callsite/index.d.ts.map +1 -1
- package/dist/esm/callsite/index.js +143 -106
- package/dist/esm/callsite/index.js.map +1 -1
- package/dist/esm/drawing/registry.d.ts +75 -0
- package/dist/esm/drawing/registry.d.ts.map +1 -1
- package/dist/esm/drawing/registry.js +237 -6
- package/dist/esm/drawing/registry.js.map +1 -1
- package/dist/esm/index.d.ts +6 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +10 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/label/index.d.ts.map +1 -1
- package/dist/esm/label/index.js +4 -1
- package/dist/esm/label/index.js.map +1 -1
- package/dist/esm/line/index.d.ts.map +1 -1
- package/dist/esm/line/index.js +8 -2
- package/dist/esm/line/index.js.map +1 -1
- package/dist/esm/math/index.d.ts.map +1 -1
- package/dist/esm/math/index.js +3 -0
- package/dist/esm/math/index.js.map +1 -1
- package/dist/esm/polyline/index.d.ts.map +1 -1
- package/dist/esm/polyline/index.js +5 -1
- package/dist/esm/polyline/index.js.map +1 -1
- package/dist/esm/script/index.d.ts +30 -13
- package/dist/esm/script/index.d.ts.map +1 -1
- package/dist/esm/script/index.js +54 -11
- package/dist/esm/script/index.js.map +1 -1
- package/dist/esm/session/bars.d.ts +15 -1
- package/dist/esm/session/bars.d.ts.map +1 -1
- package/dist/esm/session/bars.js +50 -6
- package/dist/esm/session/bars.js.map +1 -1
- package/dist/esm/session/calendar.d.ts +9 -1
- package/dist/esm/session/calendar.d.ts.map +1 -1
- package/dist/esm/session/calendar.js +35 -3
- package/dist/esm/session/calendar.js.map +1 -1
- package/dist/esm/session/context.d.ts +75 -0
- package/dist/esm/session/context.d.ts.map +1 -0
- package/dist/esm/session/context.js +122 -0
- package/dist/esm/session/context.js.map +1 -0
- package/dist/esm/str/index.d.ts +3 -1
- package/dist/esm/str/index.d.ts.map +1 -1
- package/dist/esm/str/index.js +8 -2
- package/dist/esm/str/index.js.map +1 -1
- package/dist/esm/str/numberformat.d.ts +4 -2
- package/dist/esm/str/numberformat.d.ts.map +1 -1
- package/dist/esm/str/numberformat.js +4 -2
- package/dist/esm/str/numberformat.js.map +1 -1
- package/dist/esm/ta/index.d.ts +33 -17
- package/dist/esm/ta/index.d.ts.map +1 -1
- package/dist/esm/ta/index.js +130 -56
- package/dist/esm/ta/index.js.map +1 -1
- package/dist/esm/ta/limits.d.ts +24 -0
- package/dist/esm/ta/limits.d.ts.map +1 -0
- package/dist/esm/ta/limits.js +42 -0
- package/dist/esm/ta/limits.js.map +1 -0
- package/dist/esm/ta/running-sum.d.ts +0 -16
- package/dist/esm/ta/running-sum.d.ts.map +1 -1
- package/dist/esm/ta/running-sum.js +2 -0
- package/dist/esm/ta/running-sum.js.map +1 -1
- package/dist/esm/ta-series.d.ts +7 -7
- package/dist/esm/ta-series.d.ts.map +1 -1
- package/dist/esm/ta-series.js +9 -7
- package/dist/esm/ta-series.js.map +1 -1
- package/dist/esm/time/index.d.ts +5 -2
- package/dist/esm/time/index.d.ts.map +1 -1
- package/dist/esm/time/index.js +6 -3
- package/dist/esm/time/index.js.map +1 -1
- package/dist/esm/time/session.d.ts +17 -1
- package/dist/esm/time/session.d.ts.map +1 -1
- package/dist/esm/time/session.js +97 -10
- package/dist/esm/time/session.js.map +1 -1
- package/dist/esm/types/metadata.d.ts +27 -3
- package/dist/esm/types/metadata.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/box/index.ts +8 -2
- package/src/callsite/index.ts +150 -100
- package/src/drawing/registry.ts +255 -5
- package/src/index.ts +34 -1
- package/src/label/index.ts +4 -1
- package/src/line/index.ts +8 -2
- package/src/math/index.ts +2 -0
- package/src/polyline/index.ts +3 -1
- package/src/script/index.ts +77 -18
- package/src/session/bars.ts +47 -6
- package/src/session/calendar.ts +37 -3
- package/src/session/context.ts +160 -0
- package/src/str/index.ts +7 -2
- package/src/str/numberformat.ts +5 -3
- package/src/ta/index.ts +148 -66
- package/src/ta/limits.ts +47 -0
- package/src/ta/running-sum.ts +2 -0
- package/src/ta-series.ts +16 -14
- package/src/time/index.ts +6 -3
- package/src/time/session.ts +89 -9
- package/src/types/metadata.ts +27 -3
package/dist/cjs/ta/index.js
CHANGED
|
@@ -91,12 +91,14 @@ __export(ta_exports, {
|
|
|
91
91
|
module.exports = __toCommonJS(ta_exports);
|
|
92
92
|
var import_compare = require("../compare/index.js");
|
|
93
93
|
var import_running_sum = require("./running-sum.js");
|
|
94
|
+
var import_limits = require("./limits.js");
|
|
94
95
|
function sma(source, length) {
|
|
95
96
|
if (typeof length !== "number") {
|
|
96
97
|
const sums = (0, import_running_sum.runningSumSeries)(source, length, "ta.sma");
|
|
97
98
|
return sums.map((sum, i) => sum / Math.floor(length[i]));
|
|
98
99
|
}
|
|
99
100
|
const len = Math.floor(length);
|
|
101
|
+
(0, import_limits.checkSumLength)("ta.sma", len, 0);
|
|
100
102
|
return (0, import_running_sum.runningSum)(source, len).map((sum) => sum / len);
|
|
101
103
|
}
|
|
102
104
|
function ema(source, length) {
|
|
@@ -169,6 +171,7 @@ function macd(source, fastLength, slowLength, signalLength) {
|
|
|
169
171
|
return [macdLine, signalLine, histogram];
|
|
170
172
|
}
|
|
171
173
|
function bb(series, length, mult) {
|
|
174
|
+
(0, import_limits.checkSumLength)("ta.bb", length, 0);
|
|
172
175
|
const basis = sma(series, length);
|
|
173
176
|
const dev2 = stdev(series, length);
|
|
174
177
|
const upper = [];
|
|
@@ -190,9 +193,9 @@ function lastValues(source, i, length) {
|
|
|
190
193
|
}
|
|
191
194
|
return values.length === length ? values : null;
|
|
192
195
|
}
|
|
193
|
-
function windowExtremes(source, length, lowest2) {
|
|
196
|
+
function windowExtremes(source, length, lowest2, newest = false) {
|
|
194
197
|
const n = source.length;
|
|
195
|
-
const span = length > 0 ? Math.
|
|
198
|
+
const span = length > 0 ? Math.trunc(length) : 0;
|
|
196
199
|
const at = new Int32Array(n).fill(-1);
|
|
197
200
|
const zeros = new Uint8Array(n);
|
|
198
201
|
const queue = new Int32Array(n);
|
|
@@ -210,7 +213,9 @@ function windowExtremes(source, length, lowest2) {
|
|
|
210
213
|
zeroCount = 0;
|
|
211
214
|
continue;
|
|
212
215
|
}
|
|
213
|
-
while (tail > head
|
|
216
|
+
while (tail > head) {
|
|
217
|
+
const last = source[queue[tail - 1]];
|
|
218
|
+
if (!(lowest2 ? last > x : last < x) && !(newest && last === x)) break;
|
|
214
219
|
if (isPreferredZero(queue[--tail])) zeroCount--;
|
|
215
220
|
}
|
|
216
221
|
queue[tail++] = i;
|
|
@@ -226,16 +231,57 @@ function windowExtremes(source, length, lowest2) {
|
|
|
226
231
|
}
|
|
227
232
|
return { at, zeros };
|
|
228
233
|
}
|
|
234
|
+
function keptValues(source) {
|
|
235
|
+
const values = [];
|
|
236
|
+
const bars = [];
|
|
237
|
+
const last = new Int32Array(source.length);
|
|
238
|
+
for (let i = 0; i < source.length; i++) {
|
|
239
|
+
const x = source[i];
|
|
240
|
+
if (!Number.isNaN(x)) {
|
|
241
|
+
values.push(x);
|
|
242
|
+
bars.push(i);
|
|
243
|
+
}
|
|
244
|
+
last[i] = values.length - 1;
|
|
245
|
+
}
|
|
246
|
+
return { values, bars, last };
|
|
247
|
+
}
|
|
248
|
+
function extremeSeriesLength(source, lengths, lowest2, offsets) {
|
|
249
|
+
const name = (lowest2 ? "lowest" : "highest") + (offsets ? "bars" : "");
|
|
250
|
+
const { values, bars, last } = keptValues(source);
|
|
251
|
+
return Array.from(source, (_, i) => {
|
|
252
|
+
const len = Math.trunc(lengths[i]);
|
|
253
|
+
(0, import_limits.checkWindowLength)(name, len, i);
|
|
254
|
+
const k = last[i];
|
|
255
|
+
if (!(len >= 1) || i < len - 1 || k < 0) return NaN;
|
|
256
|
+
let best = k;
|
|
257
|
+
for (let j = k - 1; j >= 0 && j > k - len; j--) {
|
|
258
|
+
if (lowest2 ? values[j] < values[best] : values[j] > values[best]) best = j;
|
|
259
|
+
}
|
|
260
|
+
return offsets ? -(i - bars[best]) : values[best];
|
|
261
|
+
});
|
|
262
|
+
}
|
|
229
263
|
function extremeOffset(source, length, lowest2) {
|
|
230
|
-
|
|
231
|
-
|
|
264
|
+
if (typeof length !== "number") return extremeSeriesLength(source, length, lowest2, true);
|
|
265
|
+
(0, import_limits.checkWindowLength)(lowest2 ? "lowestbars" : "highestbars", length, 0);
|
|
266
|
+
const { values, bars, last } = keptValues(source);
|
|
267
|
+
const { at } = windowExtremes(values, length, lowest2, true);
|
|
268
|
+
const len = Math.trunc(length);
|
|
269
|
+
return source.map((_, i) => {
|
|
270
|
+
const k = last[i];
|
|
271
|
+
return i < len - 1 || k < 0 || at[k] < 0 ? NaN : -(i - bars[at[k]]);
|
|
272
|
+
});
|
|
232
273
|
}
|
|
233
274
|
function extremeValue(source, length, lowest2) {
|
|
234
|
-
|
|
275
|
+
if (typeof length !== "number") return extremeSeriesLength(source, length, lowest2, false);
|
|
276
|
+
(0, import_limits.checkWindowLength)(lowest2 ? "lowest" : "highest", length, 0);
|
|
277
|
+
const { values, last } = keptValues(source);
|
|
278
|
+
const { at, zeros } = windowExtremes(values, length, lowest2);
|
|
279
|
+
const len = Math.trunc(length);
|
|
235
280
|
return source.map((_, i) => {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
281
|
+
const k = last[i];
|
|
282
|
+
if (i < len - 1 || k < 0 || at[k] < 0) return NaN;
|
|
283
|
+
const v = values[at[k]];
|
|
284
|
+
return v === 0 && zeros[k] ? lowest2 ? -0 : 0 : v;
|
|
239
285
|
});
|
|
240
286
|
}
|
|
241
287
|
function crossTest(series1, series2, test) {
|
|
@@ -392,7 +438,7 @@ function wmaAdd(a, b) {
|
|
|
392
438
|
}
|
|
393
439
|
function wma(source, length) {
|
|
394
440
|
const result = [];
|
|
395
|
-
const
|
|
441
|
+
const fixed = typeof length === "number" ? Math.floor(length) : NaN;
|
|
396
442
|
const filled = [];
|
|
397
443
|
let last = NaN;
|
|
398
444
|
let count = 0;
|
|
@@ -404,7 +450,8 @@ function wma(source, length) {
|
|
|
404
450
|
count++;
|
|
405
451
|
}
|
|
406
452
|
filled.push(last);
|
|
407
|
-
|
|
453
|
+
const len = typeof length === "number" ? fixed : Math.floor(length[i]);
|
|
454
|
+
if (isNa || !(len >= 1) || count < len) {
|
|
408
455
|
result.push(NaN);
|
|
409
456
|
continue;
|
|
410
457
|
}
|
|
@@ -516,6 +563,7 @@ function varianceOf(source, length, biased, name) {
|
|
|
516
563
|
return biased ? result : result.map((v, i) => Math.floor(length[i]) > 1 ? v : NaN);
|
|
517
564
|
}
|
|
518
565
|
const len = Math.floor(length);
|
|
566
|
+
(0, import_limits.checkSumLength)(name, len, 0);
|
|
519
567
|
if ((biased ? len : len - 1) <= 0) return source.map(() => NaN);
|
|
520
568
|
return (0, import_running_sum.runningVariance)(source, len, biased);
|
|
521
569
|
}
|
|
@@ -789,24 +837,17 @@ function sar(start, inc, max2, high, low, close) {
|
|
|
789
837
|
return result;
|
|
790
838
|
}
|
|
791
839
|
function pivot(source, leftbars, rightbars, isHigh) {
|
|
792
|
-
const
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
const
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
for (let j = 1; j
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
}
|
|
804
|
-
for (let j = 1; j <= rightbars; j++) {
|
|
805
|
-
const x = source[center + j];
|
|
806
|
-
if (Number.isNaN(x)) break;
|
|
807
|
-
if (beatsRight(x, v)) return NaN;
|
|
808
|
-
}
|
|
809
|
-
return v;
|
|
840
|
+
const { values, bars, last } = keptValues(source);
|
|
841
|
+
return Array.from(source, (_, i) => {
|
|
842
|
+
const left = Math.trunc(typeof leftbars === "number" ? leftbars : leftbars[i]);
|
|
843
|
+
const right = Math.trunc(typeof rightbars === "number" ? rightbars : rightbars[i]);
|
|
844
|
+
const k = last[i];
|
|
845
|
+
if (!(i >= left + right) || k < 0) return NaN;
|
|
846
|
+
let best = k;
|
|
847
|
+
for (let j = k - 1; j >= 0 && j >= k - left - right; j--) {
|
|
848
|
+
if (isHigh ? values[j] > values[best] : values[j] < values[best]) best = j;
|
|
849
|
+
}
|
|
850
|
+
return bars[best] === i - right ? values[best] : NaN;
|
|
810
851
|
});
|
|
811
852
|
}
|
|
812
853
|
function pivothigh(sourceOrLeftbars, leftbarsOrRightbars, rightbars, high) {
|