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/script/index.js
CHANGED
|
@@ -52,6 +52,7 @@ __export(script_exports, {
|
|
|
52
52
|
hlc3: () => hlc3,
|
|
53
53
|
hlcc4: () => hlcc4,
|
|
54
54
|
hline: () => hline,
|
|
55
|
+
holdDrawing: () => import_registry2.holdDrawing,
|
|
55
56
|
hour: () => hour,
|
|
56
57
|
inSession: () => inSession,
|
|
57
58
|
indicator: () => indicator,
|
|
@@ -76,6 +77,7 @@ __export(script_exports, {
|
|
|
76
77
|
plotshape: () => plotshape,
|
|
77
78
|
polyline: () => polyline,
|
|
78
79
|
position: () => import_types.position,
|
|
80
|
+
releaseDrawing: () => import_registry2.releaseDrawing,
|
|
79
81
|
request: () => request,
|
|
80
82
|
second: () => second,
|
|
81
83
|
seriesOf: () => seriesOf,
|
|
@@ -91,7 +93,9 @@ __export(script_exports, {
|
|
|
91
93
|
time_close: () => time_close,
|
|
92
94
|
time_tradingday: () => time_tradingday,
|
|
93
95
|
timeframe: () => timeframe,
|
|
96
|
+
timenow: () => timenow,
|
|
94
97
|
timestamp: () => timestamp,
|
|
98
|
+
varDrawing: () => import_registry2.varDrawing,
|
|
95
99
|
volume: () => volume,
|
|
96
100
|
weekofyear: () => weekofyear,
|
|
97
101
|
year: () => year
|
|
@@ -112,6 +116,7 @@ var chartPointCore = __toESM(require("../chartpoint/index.js"), 1);
|
|
|
112
116
|
var textCore = __toESM(require("../text/index.js"), 1);
|
|
113
117
|
var mathCore = __toESM(require("../math/index.js"), 1);
|
|
114
118
|
var import_registry = require("../drawing/registry.js");
|
|
119
|
+
var import_registry2 = require("../drawing/registry.js");
|
|
115
120
|
var import_output = require("../drawing/output.js");
|
|
116
121
|
var timeframeCore = __toESM(require("../timeframe/index.js"), 1);
|
|
117
122
|
var timeCore = __toESM(require("../time/index.js"), 1);
|
|
@@ -175,6 +180,7 @@ let scriptOptions = {};
|
|
|
175
180
|
function executeScript(body, barsInput, inputs = {}, chart2 = {}, options = {}) {
|
|
176
181
|
ctxBars.setAll(barsInput);
|
|
177
182
|
chartCtx = { ...chart2 };
|
|
183
|
+
runNow = chart2.now ?? Date.now();
|
|
178
184
|
scriptOptions = options;
|
|
179
185
|
ctx = freshCollector(inputs);
|
|
180
186
|
(0, import_registry.resetDrawings)();
|
|
@@ -356,9 +362,10 @@ const ta = {
|
|
|
356
362
|
/** `ta.lowestbars(source, length)` or `ta.lowestbars(length)` (source = low); offsets are 0 or negative. */
|
|
357
363
|
lowestbars: (sourceOrLength, length) => typeof sourceOrLength === "number" ? taSeries.lowestbars(low, sourceOrLength) : taSeries.lowestbars(sourceOrLength, length),
|
|
358
364
|
/** `ta.vwap(source, anchor?, stdev_mult?)` with the chart volume; the default anchor is a new trading
|
|
359
|
-
* day (`timeframe.change("1D")`), which needs the chart context (timeframe, time zone, session)
|
|
365
|
+
* day (`timeframe.change("1D")`), which needs the chart context (timeframe, time zone, session), and the
|
|
366
|
+
* first bar: as in PineScript, the first loaded bars (a day in progress) have a value. */
|
|
360
367
|
vwap: ((source, anchor, stdev_mult) => {
|
|
361
|
-
const a = anchor ?? changeOf("1D");
|
|
368
|
+
const a = anchor ?? changeOf("1D", true);
|
|
362
369
|
return stdev_mult === void 0 ? taSeries.vwap(source, volume, a) : taSeries.vwapBands(source, volume, a, stdev_mult);
|
|
363
370
|
}),
|
|
364
371
|
/** `ta.mfi(source, length)` with the chart volume (PineScript takes 2 arguments). */
|
|
@@ -758,6 +765,7 @@ function eachBar(fn) {
|
|
|
758
765
|
for (idx = 0; idx < b.length; idx++) {
|
|
759
766
|
if (pendingError && pendingError.bar === idx) throw new Error((0, import_series.historyError)(idx, pendingError.barsBack));
|
|
760
767
|
currentBar = idx;
|
|
768
|
+
(0, import_registry.setDrawingBar)(idx, idx === b.length - 1);
|
|
761
769
|
const r = fn(ctx2);
|
|
762
770
|
out[idx] = typeof r === "number" ? r : typeof r === "boolean" ? r ? 1 : 0 : NaN;
|
|
763
771
|
for (const buffer of buffers.values()) {
|
|
@@ -773,6 +781,7 @@ function eachBar(fn) {
|
|
|
773
781
|
}
|
|
774
782
|
} finally {
|
|
775
783
|
currentBar = -1;
|
|
784
|
+
(0, import_registry.setDrawingBar)(null);
|
|
776
785
|
}
|
|
777
786
|
return import_series.Series.fromArray(ctxBars, out);
|
|
778
787
|
}
|
|
@@ -988,6 +997,14 @@ function symbolProperty(key) {
|
|
|
988
997
|
}
|
|
989
998
|
return value;
|
|
990
999
|
}
|
|
1000
|
+
function chartText(key, name) {
|
|
1001
|
+
collector();
|
|
1002
|
+
const value = chartCtx[key];
|
|
1003
|
+
if (value === void 0) {
|
|
1004
|
+
throw new Error(`${name} is not known: pass it as executeScript(body, bars, inputs, { ${key} }).`);
|
|
1005
|
+
}
|
|
1006
|
+
return value;
|
|
1007
|
+
}
|
|
991
1008
|
function symbolScale() {
|
|
992
1009
|
collector();
|
|
993
1010
|
const { minmove, pricescale } = chartCtx;
|
|
@@ -1024,6 +1041,12 @@ const syminfo = {
|
|
|
1024
1041
|
get session() {
|
|
1025
1042
|
collector();
|
|
1026
1043
|
return chartCtx.sessionType ?? "regular";
|
|
1044
|
+
},
|
|
1045
|
+
get type() {
|
|
1046
|
+
return chartText("symbolType", "syminfo.type");
|
|
1047
|
+
},
|
|
1048
|
+
get currency() {
|
|
1049
|
+
return chartText("currency", "syminfo.currency");
|
|
1027
1050
|
}
|
|
1028
1051
|
};
|
|
1029
1052
|
function calendar(fn) {
|
|
@@ -1095,7 +1118,12 @@ function calendarFor(session2, timezone) {
|
|
|
1095
1118
|
return { bars: new import_bars.SessionBars(new import_calendar.TradingCalendar(tz, { session: toSpec(symbol).session }, "symbol"), bars2.chart.period), test: true };
|
|
1096
1119
|
}
|
|
1097
1120
|
const spec = session2 ? { session: session2 } : { session: toSpec(chartCtx.session).session };
|
|
1098
|
-
return {
|
|
1121
|
+
return {
|
|
1122
|
+
bars: new import_bars.SessionBars(new import_calendar.TradingCalendar(tz, spec, session2 ? "pine" : "symbol"), bars2.chart.period),
|
|
1123
|
+
test: true,
|
|
1124
|
+
// a PineScript session string: the rules of time.inSession (runs ending at 0000, days around a clock change)
|
|
1125
|
+
inside: session2 ? (time2) => timeCore.inSession(time2, session2, tz, timeframeCore.in_seconds(bars2.chart.period) * 1e3) : void 0
|
|
1126
|
+
};
|
|
1099
1127
|
}
|
|
1100
1128
|
function perBar(fn) {
|
|
1101
1129
|
const times = ctxBars.bars.map(barTime);
|
|
@@ -1108,25 +1136,28 @@ function callableSeries(series, fn) {
|
|
|
1108
1136
|
}
|
|
1109
1137
|
function timeFunction(tf, session2, timezone) {
|
|
1110
1138
|
collector();
|
|
1111
|
-
const { bars: bars2, test } = calendarFor(session2, timezone);
|
|
1139
|
+
const { bars: bars2, test, inside } = calendarFor(session2, timezone);
|
|
1112
1140
|
const timeframeString = tf || chartTimeframe().period;
|
|
1113
|
-
return perBar((t) => test && !bars2.inside(t) ? NaN : bars2.timeOf(t, timeframeString));
|
|
1141
|
+
return perBar((t) => test && !(inside ? inside(t) : bars2.inside(t)) ? NaN : bars2.timeOf(t, timeframeString));
|
|
1114
1142
|
}
|
|
1115
1143
|
function timeCloseFunction(tf, session2, timezone) {
|
|
1116
1144
|
collector();
|
|
1117
|
-
const { bars: bars2, test } = calendarFor(session2, timezone);
|
|
1145
|
+
const { bars: bars2, test, inside } = calendarFor(session2, timezone);
|
|
1118
1146
|
const timeframeString = tf || chartTimeframe().period;
|
|
1119
|
-
return perBar((t) => test && !bars2.inside(t) ? NaN : bars2.closeOf(t, timeframeString));
|
|
1147
|
+
return perBar((t) => test && !(inside ? inside(t) : bars2.inside(t)) ? NaN : bars2.closeOf(t, timeframeString));
|
|
1120
1148
|
}
|
|
1149
|
+
let runNow = NaN;
|
|
1150
|
+
const timenow = new import_series.Series(ctxBars, () => runNow);
|
|
1121
1151
|
const time = callableSeries(new import_series.Series(ctxBars, (b) => barTime(b)), timeFunction);
|
|
1122
1152
|
const time_close = callableSeries(
|
|
1123
1153
|
new import_series.Series(ctxBars, (_b, i) => sessionBars().bars.closeOf(barTime(ctxBars.bars[i]), chartTimeframe().period)),
|
|
1124
1154
|
timeCloseFunction
|
|
1125
1155
|
);
|
|
1126
1156
|
const time_tradingday = new import_series.Series(ctxBars, (b) => sessionBars().bars.tradingDayTime(barTime(b)));
|
|
1127
|
-
function changeOf(tf) {
|
|
1157
|
+
function changeOf(tf, firstBar = false) {
|
|
1128
1158
|
const { bars: bars2 } = sessionBars();
|
|
1129
|
-
|
|
1159
|
+
const changed = (a, b) => !Number.isNaN(a) && !Number.isNaN(b) && a !== b;
|
|
1160
|
+
return perBar((t, i, times) => (i > 0 ? changed(bars2.timeOf(t, tf), bars2.timeOf(times[i - 1], tf)) : firstBar) ? 1 : 0);
|
|
1130
1161
|
}
|
|
1131
1162
|
function flag(key) {
|
|
1132
1163
|
const { bars: bars2, regular } = sessionBars();
|
|
@@ -1308,6 +1339,14 @@ const table = {
|
|
|
1308
1339
|
};
|
|
1309
1340
|
const text = { ...textCore };
|
|
1310
1341
|
const chart = {
|
|
1342
|
+
/** Chart foreground colour (PineScript `chart.fg_color`), from the chart context. */
|
|
1343
|
+
get fg_color() {
|
|
1344
|
+
return chartText("foregroundColor", "chart.fg_color");
|
|
1345
|
+
},
|
|
1346
|
+
/** Chart background colour (PineScript `chart.bg_color`), from the chart context. */
|
|
1347
|
+
get bg_color() {
|
|
1348
|
+
return chartText("backgroundColor", "chart.bg_color");
|
|
1349
|
+
},
|
|
1311
1350
|
point: {
|
|
1312
1351
|
...chartPointCore,
|
|
1313
1352
|
now(price) {
|