oakscriptjs 0.11.4 → 0.11.6
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/index.d.ts +2 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/input.d.ts +19 -3
- package/dist/cjs/input.d.ts.map +1 -1
- package/dist/cjs/input.js +24 -1
- package/dist/cjs/input.js.map +2 -2
- package/dist/cjs/lib/zigzag/zigzag.d.ts +8 -3
- package/dist/cjs/lib/zigzag/zigzag.d.ts.map +1 -1
- package/dist/cjs/lib/zigzag/zigzag.js +16 -3
- package/dist/cjs/lib/zigzag/zigzag.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 +4 -3
- 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 +50 -4
- package/dist/cjs/script/index.d.ts.map +1 -1
- package/dist/cjs/script/index.js +60 -4
- package/dist/cjs/script/index.js.map +3 -3
- package/dist/cjs/security/other.d.ts +2 -1
- package/dist/cjs/security/other.d.ts.map +1 -1
- package/dist/cjs/security/other.js +1 -1
- package/dist/cjs/security/other.js.map +2 -2
- package/dist/cjs/ta/index.d.ts +1 -0
- package/dist/cjs/ta/index.d.ts.map +1 -1
- package/dist/cjs/ta/index.js +1 -1
- package/dist/cjs/ta/index.js.map +2 -2
- package/dist/cjs/time/index.d.ts +2 -0
- package/dist/cjs/time/index.d.ts.map +1 -1
- package/dist/cjs/time/index.js +1 -1
- package/dist/cjs/time/index.js.map +2 -2
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/cjs/utils/index.d.ts +5 -3
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +6 -0
- package/dist/cjs/utils/index.js.map +2 -2
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input.d.ts +19 -3
- package/dist/esm/input.d.ts.map +1 -1
- package/dist/esm/input.js +24 -1
- package/dist/esm/input.js.map +1 -1
- package/dist/esm/lib/zigzag/zigzag.d.ts +8 -3
- package/dist/esm/lib/zigzag/zigzag.d.ts.map +1 -1
- package/dist/esm/lib/zigzag/zigzag.js +19 -4
- package/dist/esm/lib/zigzag/zigzag.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 +4 -3
- package/dist/esm/runtime/types.d.ts.map +1 -1
- package/dist/esm/script/index.d.ts +50 -4
- package/dist/esm/script/index.d.ts.map +1 -1
- package/dist/esm/script/index.js +73 -2
- package/dist/esm/script/index.js.map +1 -1
- package/dist/esm/security/other.d.ts +2 -1
- package/dist/esm/security/other.d.ts.map +1 -1
- package/dist/esm/security/other.js +4 -2
- package/dist/esm/security/other.js.map +1 -1
- package/dist/esm/ta/index.d.ts +1 -0
- package/dist/esm/ta/index.d.ts.map +1 -1
- package/dist/esm/ta/index.js +3 -1
- package/dist/esm/ta/index.js.map +1 -1
- package/dist/esm/time/index.d.ts +2 -0
- package/dist/esm/time/index.d.ts.map +1 -1
- package/dist/esm/time/index.js +4 -1
- package/dist/esm/time/index.js.map +1 -1
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.d.ts.map +1 -1
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/index.d.ts +5 -3
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +5 -1
- package/dist/esm/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +2 -1
- package/src/input.ts +28 -4
- package/src/lib/zigzag/zigzag.ts +20 -6
- package/src/runtime/index.ts +1 -0
- package/src/runtime/inputs.ts +16 -0
- package/src/runtime/types.ts +4 -3
- package/src/script/index.ts +111 -5
- package/src/security/other.ts +5 -2
- package/src/ta/index.ts +3 -1
- package/src/time/index.ts +4 -1
- package/src/types/index.ts +1 -0
- package/src/utils/index.ts +8 -3
package/src/time/index.ts
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
* Every function takes an explicit time zone: UTC/GMT offset notation ("UTC-5",
|
|
6
6
|
* "GMT+0530", "UTC+05:30") or an IANA name ("America/New_York"). The PineScript
|
|
7
7
|
* default time zone (the exchange time zone, `syminfo.timezone`) is not known here.
|
|
8
|
+
* As in PineScript, the calendar fields (`year` ... `second`) of an na time are those
|
|
9
|
+
* of time 0 in the time zone.
|
|
8
10
|
*/
|
|
9
11
|
|
|
10
12
|
import type { int, simple_int } from '../types/index.js';
|
|
@@ -72,8 +74,9 @@ export function timestamp(first: string | simple_int, ...rest: Array<simple_int
|
|
|
72
74
|
|
|
73
75
|
// ── Calendar fields ──────────────────────────────────────────────────────────
|
|
74
76
|
|
|
77
|
+
// PineScript reads an na time as 0: year(na) is 1970 in UTC, 1969 in America/New_York (#184)
|
|
75
78
|
function field(time: number, timezone: string, pick: (f: ReturnType<typeof zonedFields>) => number): int {
|
|
76
|
-
return Number.isNaN(time) ?
|
|
79
|
+
return pick(zonedFields(Number.isNaN(time) ? 0 : time, timezone));
|
|
77
80
|
}
|
|
78
81
|
|
|
79
82
|
/**
|
package/src/types/index.ts
CHANGED
package/src/utils/index.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { series_float, int, float, Source, Bar, OHLC } from '../types/index.js';
|
|
7
7
|
import { sma, ema, wma, rma } from '../ta/index.js';
|
|
8
8
|
import { Series } from '../runtime/series.js';
|
|
9
|
+
import type { SourceType } from '../input.js';
|
|
9
10
|
import { isDeleted } from '../drawing/registry.js';
|
|
10
11
|
|
|
11
12
|
/**
|
|
@@ -165,7 +166,8 @@ export function getOpen(ohlc: OHLC): series_float {
|
|
|
165
166
|
* Extract a specific source from OHLC data or bar array
|
|
166
167
|
*
|
|
167
168
|
* @param data - Bar array or OHLC data
|
|
168
|
-
* @param source - Source type: 'close', 'open', 'high', 'low', 'hl2', 'hlc3', 'ohlc4'
|
|
169
|
+
* @param source - Source type: 'close', 'open', 'high', 'low', 'hl2', 'hlc3', 'ohlc4', 'hlcc4', 'volume' (NaN for a
|
|
170
|
+
* bar without volume)
|
|
169
171
|
* @returns Series of the requested source
|
|
170
172
|
*
|
|
171
173
|
* @example
|
|
@@ -177,7 +179,7 @@ export function getOpen(ohlc: OHLC): series_float {
|
|
|
177
179
|
*/
|
|
178
180
|
export function getSource(
|
|
179
181
|
data: Bar[] | OHLC,
|
|
180
|
-
source:
|
|
182
|
+
source: SourceType = 'close'
|
|
181
183
|
): series_float {
|
|
182
184
|
// Check if data is OHLC structure
|
|
183
185
|
const isOHLC = 'open' in data && Array.isArray(data.open);
|
|
@@ -193,6 +195,7 @@ export function getSource(
|
|
|
193
195
|
case 'hlc3': return ohlc.high.map((h, i) => (h + ohlc.low[i]! + ohlc.close[i]!) / 3);
|
|
194
196
|
case 'ohlc4': return ohlc.open.map((o, i) => (o + ohlc.high[i]! + ohlc.low[i]! + ohlc.close[i]!) / 4);
|
|
195
197
|
case 'hlcc4': return ohlc.high.map((h, i) => (h + ohlc.low[i]! + ohlc.close[i]! + ohlc.close[i]!) / 4);
|
|
198
|
+
case 'volume': return ohlc.volume ?? ohlc.close.map(() => NaN);
|
|
196
199
|
}
|
|
197
200
|
} else {
|
|
198
201
|
const bars = data as Bar[];
|
|
@@ -205,6 +208,7 @@ export function getSource(
|
|
|
205
208
|
case 'hlc3': return bars.map(b => (b.high + b.low + b.close) / 3);
|
|
206
209
|
case 'ohlc4': return bars.map(b => (b.open + b.high + b.low + b.close) / 4);
|
|
207
210
|
case 'hlcc4': return bars.map(b => (b.high + b.low + b.close + b.close) / 4);
|
|
211
|
+
case 'volume': return bars.map(b => b.volume ?? NaN);
|
|
208
212
|
}
|
|
209
213
|
}
|
|
210
214
|
}
|
|
@@ -227,7 +231,7 @@ export function getSource(
|
|
|
227
231
|
*/
|
|
228
232
|
export function getSourceSeries(
|
|
229
233
|
bars: Bar[],
|
|
230
|
-
source:
|
|
234
|
+
source: SourceType = 'close'
|
|
231
235
|
): Series {
|
|
232
236
|
const open = new Series(bars, (bar) => bar.open);
|
|
233
237
|
const high = new Series(bars, (bar) => bar.high);
|
|
@@ -243,6 +247,7 @@ export function getSourceSeries(
|
|
|
243
247
|
case 'hlc3': return high.add(low).add(close).div(3);
|
|
244
248
|
case 'ohlc4': return open.add(high).add(low).add(close).div(4);
|
|
245
249
|
case 'hlcc4': return high.add(low).add(close).add(close).div(4);
|
|
250
|
+
case 'volume': return Series.fromBars(bars, 'volume');
|
|
246
251
|
default: return close;
|
|
247
252
|
}
|
|
248
253
|
}
|