oakscriptjs 0.11.4 → 0.11.5

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.
Files changed (104) hide show
  1. package/dist/cjs/index.d.ts +2 -2
  2. package/dist/cjs/index.d.ts.map +1 -1
  3. package/dist/cjs/index.js +2 -1
  4. package/dist/cjs/index.js.map +2 -2
  5. package/dist/cjs/input.d.ts +19 -3
  6. package/dist/cjs/input.d.ts.map +1 -1
  7. package/dist/cjs/input.js +24 -1
  8. package/dist/cjs/input.js.map +2 -2
  9. package/dist/cjs/lib/zigzag/zigzag.d.ts +8 -3
  10. package/dist/cjs/lib/zigzag/zigzag.d.ts.map +1 -1
  11. package/dist/cjs/lib/zigzag/zigzag.js +16 -3
  12. package/dist/cjs/lib/zigzag/zigzag.js.map +2 -2
  13. package/dist/cjs/runtime/index.d.ts +1 -1
  14. package/dist/cjs/runtime/index.d.ts.map +1 -1
  15. package/dist/cjs/runtime/index.js +1 -0
  16. package/dist/cjs/runtime/index.js.map +2 -2
  17. package/dist/cjs/runtime/inputs.d.ts +9 -0
  18. package/dist/cjs/runtime/inputs.d.ts.map +1 -1
  19. package/dist/cjs/runtime/inputs.js +8 -0
  20. package/dist/cjs/runtime/inputs.js.map +2 -2
  21. package/dist/cjs/runtime/types.d.ts +4 -3
  22. package/dist/cjs/runtime/types.d.ts.map +1 -1
  23. package/dist/cjs/runtime/types.js.map +1 -1
  24. package/dist/cjs/script/index.d.ts +35 -3
  25. package/dist/cjs/script/index.d.ts.map +1 -1
  26. package/dist/cjs/script/index.js +40 -4
  27. package/dist/cjs/script/index.js.map +3 -3
  28. package/dist/cjs/security/other.d.ts +2 -1
  29. package/dist/cjs/security/other.d.ts.map +1 -1
  30. package/dist/cjs/security/other.js +1 -1
  31. package/dist/cjs/security/other.js.map +2 -2
  32. package/dist/cjs/ta/index.d.ts +1 -0
  33. package/dist/cjs/ta/index.d.ts.map +1 -1
  34. package/dist/cjs/ta/index.js +1 -1
  35. package/dist/cjs/ta/index.js.map +2 -2
  36. package/dist/cjs/time/index.d.ts +2 -0
  37. package/dist/cjs/time/index.d.ts.map +1 -1
  38. package/dist/cjs/time/index.js +1 -1
  39. package/dist/cjs/time/index.js.map +2 -2
  40. package/dist/cjs/types/index.d.ts +1 -0
  41. package/dist/cjs/types/index.d.ts.map +1 -1
  42. package/dist/cjs/types/index.js.map +2 -2
  43. package/dist/cjs/utils/index.d.ts +5 -3
  44. package/dist/cjs/utils/index.d.ts.map +1 -1
  45. package/dist/cjs/utils/index.js +6 -0
  46. package/dist/cjs/utils/index.js.map +2 -2
  47. package/dist/esm/index.d.ts +2 -2
  48. package/dist/esm/index.d.ts.map +1 -1
  49. package/dist/esm/index.js +2 -2
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/input.d.ts +19 -3
  52. package/dist/esm/input.d.ts.map +1 -1
  53. package/dist/esm/input.js +24 -1
  54. package/dist/esm/input.js.map +1 -1
  55. package/dist/esm/lib/zigzag/zigzag.d.ts +8 -3
  56. package/dist/esm/lib/zigzag/zigzag.d.ts.map +1 -1
  57. package/dist/esm/lib/zigzag/zigzag.js +19 -4
  58. package/dist/esm/lib/zigzag/zigzag.js.map +1 -1
  59. package/dist/esm/runtime/index.d.ts +1 -1
  60. package/dist/esm/runtime/index.d.ts.map +1 -1
  61. package/dist/esm/runtime/index.js +1 -1
  62. package/dist/esm/runtime/index.js.map +1 -1
  63. package/dist/esm/runtime/inputs.d.ts +9 -0
  64. package/dist/esm/runtime/inputs.d.ts.map +1 -1
  65. package/dist/esm/runtime/inputs.js +15 -0
  66. package/dist/esm/runtime/inputs.js.map +1 -1
  67. package/dist/esm/runtime/types.d.ts +4 -3
  68. package/dist/esm/runtime/types.d.ts.map +1 -1
  69. package/dist/esm/script/index.d.ts +35 -3
  70. package/dist/esm/script/index.d.ts.map +1 -1
  71. package/dist/esm/script/index.js +49 -2
  72. package/dist/esm/script/index.js.map +1 -1
  73. package/dist/esm/security/other.d.ts +2 -1
  74. package/dist/esm/security/other.d.ts.map +1 -1
  75. package/dist/esm/security/other.js +4 -2
  76. package/dist/esm/security/other.js.map +1 -1
  77. package/dist/esm/ta/index.d.ts +1 -0
  78. package/dist/esm/ta/index.d.ts.map +1 -1
  79. package/dist/esm/ta/index.js +3 -1
  80. package/dist/esm/ta/index.js.map +1 -1
  81. package/dist/esm/time/index.d.ts +2 -0
  82. package/dist/esm/time/index.d.ts.map +1 -1
  83. package/dist/esm/time/index.js +4 -1
  84. package/dist/esm/time/index.js.map +1 -1
  85. package/dist/esm/types/index.d.ts +1 -0
  86. package/dist/esm/types/index.d.ts.map +1 -1
  87. package/dist/esm/types/index.js.map +1 -1
  88. package/dist/esm/utils/index.d.ts +5 -3
  89. package/dist/esm/utils/index.d.ts.map +1 -1
  90. package/dist/esm/utils/index.js +5 -1
  91. package/dist/esm/utils/index.js.map +1 -1
  92. package/package.json +1 -1
  93. package/src/index.ts +2 -1
  94. package/src/input.ts +28 -4
  95. package/src/lib/zigzag/zigzag.ts +20 -6
  96. package/src/runtime/index.ts +1 -0
  97. package/src/runtime/inputs.ts +16 -0
  98. package/src/runtime/types.ts +4 -3
  99. package/src/script/index.ts +71 -4
  100. package/src/security/other.ts +5 -2
  101. package/src/ta/index.ts +3 -1
  102. package/src/time/index.ts +4 -1
  103. package/src/types/index.ts +1 -0
  104. package/src/utils/index.ts +8 -3
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oakscriptjs",
3
- "version": "0.11.4",
3
+ "version": "0.11.5",
4
4
  "type": "module",
5
5
  "description": "PineScript v6 compatible technical analysis library for JavaScript/TypeScript",
6
6
  "main": "./dist/cjs/index.js",
package/src/index.ts CHANGED
@@ -179,6 +179,7 @@ export {
179
179
  input_float,
180
180
  input_bool,
181
181
  input_string,
182
+ input_text_area,
182
183
  input_source,
183
184
  input_timeframe,
184
185
  input_session,
@@ -218,7 +219,7 @@ export type { LightweightSeriesDefinitions } from './runtime/adapters/Lightweigh
218
219
  export { SimpleInputAdapter } from './runtime/adapters/SimpleInputAdapter.js';
219
220
 
220
221
  // Version
221
- export const VERSION = '0.11.4';
222
+ export const VERSION = '0.11.5';
222
223
 
223
224
  /**
224
225
  * Library information
package/src/input.ts CHANGED
@@ -9,7 +9,7 @@
9
9
  */
10
10
  export interface InputValue<T> {
11
11
  /** Input type identifier */
12
- type: 'int' | 'float' | 'source' | 'bool' | 'string' | 'timeframe' | 'session' | 'time' | 'symbol';
12
+ type: 'int' | 'float' | 'source' | 'bool' | 'string' | 'text_area' | 'timeframe' | 'session' | 'time' | 'symbol';
13
13
  /** Default value */
14
14
  defaultValue: T;
15
15
  /** Current value (initially equals defaultValue) */
@@ -89,9 +89,9 @@ export interface TimeInputOptions {
89
89
  }
90
90
 
91
91
  /**
92
- * Source type for price data
92
+ * Source type for price data (PineScript `input.source` built-in sources, `volume` included)
93
93
  */
94
- export type SourceType = 'open' | 'high' | 'low' | 'close' | 'hl2' | 'hlc3' | 'ohlc4' | 'hlcc4';
94
+ export type SourceType = 'open' | 'high' | 'low' | 'close' | 'hl2' | 'hlc3' | 'ohlc4' | 'hlcc4' | 'volume';
95
95
 
96
96
  /**
97
97
  * Input helper functions for creating indicator parameters
@@ -163,7 +163,7 @@ export const input = {
163
163
  defaultValue,
164
164
  value: defaultValue,
165
165
  title: options.title,
166
- options: ['open', 'high', 'low', 'close', 'hl2', 'hlc3', 'ohlc4', 'hlcc4'],
166
+ options: ['open', 'high', 'low', 'close', 'hl2', 'hlc3', 'ohlc4', 'hlcc4', 'volume'],
167
167
  };
168
168
  },
169
169
 
@@ -210,6 +210,30 @@ export const input = {
210
210
  };
211
211
  },
212
212
 
213
+ /**
214
+ * Create a multi-line text input parameter (PineScript `input.text_area`, #184)
215
+ * @param defaultValue - Default text; lines are separated by "
216
+ "
217
+ * @param options - Additional options (title)
218
+ * @returns Input value object
219
+ *
220
+ * @example
221
+ * ```typescript
222
+ * const list = input.text_area('AAPL, MSFT
223
+ BTCUSD', { title: 'Symbol list' });
224
+ * console.log(list.value); // 'AAPL, MSFT
225
+ BTCUSD'
226
+ * ```
227
+ */
228
+ text_area(defaultValue: string, options: TimeInputOptions = {}): InputValue<string> {
229
+ return {
230
+ type: 'text_area' as const,
231
+ defaultValue,
232
+ value: defaultValue,
233
+ title: options.title,
234
+ };
235
+ },
236
+
213
237
  /**
214
238
  * Create a timeframe input parameter (PineScript `input.timeframe`)
215
239
  * @param defaultValue - Default timeframe string ("60", "1D", "W"); "" means the chart timeframe
@@ -8,6 +8,7 @@
8
8
  */
9
9
 
10
10
  import type { Bar } from '../../types/index.js';
11
+ import { RunningSum, isNa } from '../../ta/running-sum.js';
11
12
 
12
13
  // ============ Types ============
13
14
 
@@ -44,9 +45,9 @@ export interface ZigZagPoint {
44
45
  export interface ZigZagPivot {
45
46
  /** True if this is a pivot high, false for pivot low */
46
47
  isHigh: boolean;
47
- /** Cumulative volume from start to end */
48
+ /** Cumulative volume from start to end: the sum of `volume[depth]` over the bars that built the pivot */
48
49
  volume: number;
49
- /** Starting point of this segment */
50
+ /** Starting point of this segment (the first pivot starts on its own end point) */
50
51
  start: ZigZagPoint;
51
52
  /** Ending point (the pivot) of this segment */
52
53
  end: ZigZagPoint;
@@ -83,7 +84,11 @@ export class ZigZag {
83
84
  private highBuffer: number[] = [];
84
85
  private lowBuffer: number[] = [];
85
86
  private timeBuffer: number[] = [];
87
+ private volumeBuffer: number[] = [];
86
88
  private barCount: number = 0;
89
+ /** math.sum(volume, max(depth, 1)) of the current bar, for the extension */
90
+ private remVol: number = NaN;
91
+ private readonly remVolSum = new RunningSum();
87
92
 
88
93
  constructor(settings?: Partial<ZigZagSettings>) {
89
94
  this.settings = { ...defaultSettings, ...settings };
@@ -99,10 +104,17 @@ export class ZigZag {
99
104
  this.highBuffer.push(bar.high);
100
105
  this.lowBuffer.push(bar.low);
101
106
  this.timeBuffer.push(bar.time);
107
+ const volume = bar.volume ?? NaN;
108
+ this.volumeBuffer.push(volume);
102
109
  this.barCount++;
103
110
 
104
111
  const depth = Math.max(2, Math.floor(this.settings.depth / 2));
105
- this.sumVol += bar.volume ?? 0;
112
+ // PineScript: sumVol += nz(volume[depth]); the extension adds math.sum(volume, max(depth, 1)) (#184)
113
+ const pastVolume = this.volumeBuffer[this.volumeBuffer.length - 1 - depth];
114
+ this.sumVol += pastVolume === undefined || Number.isNaN(pastVolume) ? 0 : pastVolume;
115
+ const sumLength = Math.max(depth, 1);
116
+ this.remVol = isNa(volume) ? this.remVolSum.stepNa(sumLength) : this.remVolSum.step(volume, sumLength);
117
+ this.remVolSum.commit();
106
118
 
107
119
  // Need enough bars for pivot detection (depth bars before and after)
108
120
  if (this.barCount < depth * 2 + 1) return false;
@@ -128,7 +140,8 @@ export class ZigZag {
128
140
  }
129
141
 
130
142
  /**
131
- * Get extension line to current bar (if extendLast enabled)
143
+ * Get extension line to current bar (if extendLast enabled). Call it after {@link update} of `currentBar`: its
144
+ * volume is the cumulative volume plus the volume of the last max(depth, 1) bars (na before that many bars).
132
145
  */
133
146
  getExtension(currentBar: Bar, barIndex: number): ZigZagPivot | null {
134
147
  if (!this.settings.extendLast) return null;
@@ -142,7 +155,7 @@ export class ZigZag {
142
155
 
143
156
  return {
144
157
  isHigh,
145
- volume: this.sumVol,
158
+ volume: this.sumVol + this.remVol,
146
159
  start: last.end,
147
160
  end: { time: currentBar.time, barIndex, price },
148
161
  };
@@ -250,7 +263,8 @@ export class ZigZag {
250
263
  : point.price < last.end.price;
251
264
 
252
265
  if (isMoreExtreme) {
253
- // Update the existing pivot to the new extreme
266
+ // Update the existing pivot to the new extreme; the first pivot moves its start with its end (#184)
267
+ if (this.pivots.length === 1) last.start = point;
254
268
  last.end = point;
255
269
  last.volume += this.sumVol;
256
270
  this.sumVol = 0;
@@ -24,6 +24,7 @@ export {
24
24
  input_float,
25
25
  input_bool,
26
26
  input_string,
27
+ input_text_area,
27
28
  input_source,
28
29
  input_timeframe,
29
30
  input_session,
@@ -245,6 +245,22 @@ function registerOnce(config: InputConfig): unknown {
245
245
  return context.inputs.getValue(config.id);
246
246
  }
247
247
 
248
+ /**
249
+ * Register a multi-line text input (PineScript `input.text_area`, #184)
250
+ * First call registers with defval, subsequent calls return current value
251
+ * @param defval - Default text; lines are separated by "
252
+ "
253
+ * @param title - Display title (optional)
254
+ * @returns Current text
255
+ */
256
+ export function input_text_area(defval: string, title?: string): string {
257
+ if (!getContext()) {
258
+ return defval;
259
+ }
260
+ const value = registerOnce({ id: generateInputId(title, defval, 'text_area'), type: 'text_area', defval, title });
261
+ return typeof value === 'string' ? value : defval;
262
+ }
263
+
248
264
  /**
249
265
  * Register a timeframe input (PineScript `input.timeframe`)
250
266
  * First call registers with defval, subsequent calls return current value
@@ -70,9 +70,10 @@ export interface InputConfig {
70
70
  id: string;
71
71
  /**
72
72
  * Type of input. `timeframe` and `session` values are strings ("60", "1D", "0930-1600:23456";
73
- * an empty timeframe means the chart timeframe), `time` values are UNIX times in milliseconds.
73
+ * an empty timeframe means the chart timeframe), `time` values are UNIX times in milliseconds. A `text_area`
74
+ * value is a string that can hold several lines.
74
75
  */
75
- type: 'int' | 'float' | 'bool' | 'string' | 'source' | 'color' | 'timeframe' | 'session' | 'time' | 'symbol';
76
+ type: 'int' | 'float' | 'bool' | 'string' | 'text_area' | 'source' | 'color' | 'timeframe' | 'session' | 'time' | 'symbol';
76
77
  /** Default value */
77
78
  defval: unknown;
78
79
  /** Display title */
@@ -95,7 +96,7 @@ export interface InputConfig {
95
96
  confirm?: boolean;
96
97
  /**
97
98
  * Where the input value is shown (PineScript `display`); not set means the PineScript default: 'none' for
98
- * bool, color and time inputs, 'all' for the others
99
+ * bool, color, time and text_area inputs, 'all' for the others
99
100
  */
100
101
  display?: 'all' | 'none' | 'data_window' | 'status_line';
101
102
  /**
@@ -13,7 +13,7 @@
13
13
  *
14
14
  * Execution model: the host calls {@link executeScript} with the script body,
15
15
  * the bars and the current input values. Declaration calls (indicator, input.*,
16
- * plot, hline, fill, alertcondition) run as the body executes and are collected
16
+ * plot, hline, fill, alertcondition, alert) run as the body executes and are collected
17
17
  * into a {@link ScriptRunResult}: the declarative configs (inputConfig,
18
18
  * plotConfig, hlineConfig, fillConfig) plus an IndicatorResult with the plot
19
19
  * data. Re-running the body with new bars or inputs is PineScript's
@@ -145,7 +145,10 @@ export interface ScriptRunResult {
145
145
  * colours, candles and bars, and the drawings (labels, lines, boxes, linefills, polylines, tables) alive after the
146
146
  * last bar.
147
147
  */
148
- result: IndicatorResult & { alerts?: AlertState[] };
148
+ result: IndicatorResult & { alerts?: AlertState[]; alertCalls?: AlertCall[] };
149
+ /** The script called alert() during the run (PineScript `hasAlertFunction` is known at compile time: a host that
150
+ * needs it before any bar runs reads the source). */
151
+ hasAlertFunction: boolean;
149
152
  }
150
153
 
151
154
  export interface AlertConditionConfig {
@@ -164,6 +167,16 @@ export interface AlertState {
164
167
  times: number[];
165
168
  }
166
169
 
170
+ /** How often an alert() call may trigger the alert (PineScript `alert.freq_*`). */
171
+ export type AlertFrequency = 'all' | 'once_per_bar' | 'once_per_bar_close';
172
+
173
+ /** One alert() call: the time of the bar it ran on (as given in the input bars), its message and frequency. */
174
+ export interface AlertCall {
175
+ time: number;
176
+ message: string;
177
+ freq: AlertFrequency;
178
+ }
179
+
167
180
  /** Handle returned by plot()/hline() so fill() can reference them. */
168
181
  export interface PlotHandle {
169
182
  id: string;
@@ -198,6 +211,8 @@ interface Collector {
198
211
  plotBars: Record<string, PlotBarData[]>;
199
212
  alertConfig: AlertConditionConfig[];
200
213
  alerts: AlertState[];
214
+ alertCalls: AlertCall[];
215
+ hasAlertFunction: boolean;
201
216
  strategy?: StrategyRun;
202
217
  }
203
218
 
@@ -252,6 +267,8 @@ function freshCollector(inputValues: Record<string, unknown>): Collector {
252
267
  plotBars: {},
253
268
  alertConfig: [],
254
269
  alerts: [],
270
+ alertCalls: [],
271
+ hasAlertFunction: false,
255
272
  };
256
273
  }
257
274
 
@@ -341,7 +358,9 @@ export function executeScript(
341
358
  plotBars: Object.keys(c.plotBars).length ? c.plotBars : undefined,
342
359
  ...drawingOutputs(ctxBars.bars, chartCtx.timeUnit),
343
360
  alerts: c.alerts.length ? c.alerts : undefined,
361
+ alertCalls: c.alertCalls.length ? c.alertCalls : undefined,
344
362
  },
363
+ hasAlertFunction: c.hasAlertFunction,
345
364
  };
346
365
  } finally {
347
366
  ctx = null;
@@ -459,6 +478,11 @@ export const input = {
459
478
  string(defval: string, title?: string, opts: StringInputOptions = {}): string {
460
479
  return registerInput<string>({ type: 'string', defval, title, options: opts.options, ...common(opts) }, 'input_string');
461
480
  },
481
+ /** Multi-line text ("
482
+ " between the lines), e.g. a list a script parses (#184). */
483
+ text_area(defval: string, title?: string, opts: InputOptions = {}): string {
484
+ return registerInput<string>({ type: 'text_area', defval, title, ...common(opts) }, 'input_text_area');
485
+ },
462
486
  /**
463
487
  * Declares a colour input. As in PineScript, the default keeps an alpha of 2 decimals: an input default
464
488
  * `color.new(c, 90)` has the alpha byte 26 (25 in the script). A value given by the host is not changed.
@@ -1573,6 +1597,8 @@ export interface ChartContext {
1573
1597
  basecurrency?: string;
1574
1598
  /** Root of the symbol (PineScript `syminfo.root`): "BTC" for CME:BTC1!, "ES" for CME_MINI:ES1!, "AAPL" for NASDAQ:AAPL (#180) */
1575
1599
  root?: string;
1600
+ /** Description of the symbol (PineScript `syminfo.description`): "Apple Inc." for NASDAQ:AAPL, "Bitcoin / U.S. dollar" for BITSTAMP:BTCUSD (#184) */
1601
+ description?: string;
1576
1602
  /** Chart foreground colour (PineScript `chart.fg_color`), e.g. "#DBDBDB" on a dark chart */
1577
1603
  foregroundColor?: string;
1578
1604
  /** Chart background colour (PineScript `chart.bg_color`), e.g. "#0F0F0F" on a dark chart */
@@ -1617,6 +1643,7 @@ export type SymbolInfo = Pick<
1617
1643
  | 'currency'
1618
1644
  | 'basecurrency'
1619
1645
  | 'root'
1646
+ | 'description'
1620
1647
  >;
1621
1648
 
1622
1649
  /** A request of `request.security` for another symbol whose bars the host has not given. */
@@ -1723,7 +1750,10 @@ function symbolProperty(key: 'mintick' | 'pointvalue' | 'mincontract'): number {
1723
1750
  }
1724
1751
 
1725
1752
  /** A text value of the chart or the symbol that the host passes in the chart context. */
1726
- function chartText(key: 'symbolType' | 'currency' | 'basecurrency' | 'root' | 'foregroundColor' | 'backgroundColor', name: string): string {
1753
+ function chartText(
1754
+ key: 'symbolType' | 'currency' | 'basecurrency' | 'root' | 'description' | 'foregroundColor' | 'backgroundColor',
1755
+ name: string
1756
+ ): string {
1727
1757
  collector();
1728
1758
  const value = chartCtx[key];
1729
1759
  if (value === undefined) {
@@ -1744,7 +1774,7 @@ function symbolScale(): [number, number] {
1744
1774
  /**
1745
1775
  * PineScript `syminfo.timezone`, `syminfo.tickerid`, `syminfo.session` (session type), `syminfo.mintick`,
1746
1776
  * `syminfo.minmove`, `syminfo.pricescale`, `syminfo.pointvalue`, `syminfo.mincontract`, `syminfo.type`,
1747
- * `syminfo.currency`, `syminfo.basecurrency` and `syminfo.root`, from the chart context.
1777
+ * `syminfo.currency`, `syminfo.basecurrency`, `syminfo.root` and `syminfo.description`, from the chart context.
1748
1778
  */
1749
1779
  export const syminfo = {
1750
1780
  get mintick(): number {
@@ -1788,6 +1818,9 @@ export const syminfo = {
1788
1818
  get root(): string {
1789
1819
  return chartText('root', 'syminfo.root');
1790
1820
  },
1821
+ get description(): string {
1822
+ return chartText('description', 'syminfo.description');
1823
+ },
1791
1824
  };
1792
1825
 
1793
1826
  /** A calendar function: `(time, timezone?)` on a UNIX time or on a Series of times. */
@@ -2202,6 +2235,7 @@ function runExternal<T extends SecurityValue>(
2202
2235
  currency: info.currency,
2203
2236
  basecurrency: info.basecurrency,
2204
2237
  root: info.root,
2238
+ description: info.description,
2205
2239
  };
2206
2240
  try {
2207
2241
  result = expression();
@@ -2392,6 +2426,39 @@ export function alertcondition(condition: Series, title: string, message?: strin
2392
2426
  c.alerts.push({ id, title, message, triggered: !isNA(last) && last !== 0, times });
2393
2427
  }
2394
2428
 
2429
+ const ALERT_FREQUENCIES: readonly AlertFrequency[] = ['all', 'once_per_bar', 'once_per_bar_close'];
2430
+
2431
+ /**
2432
+ * PineScript `alert(message, freq)`, with the `alert.freq_*` constants: the calls are collected per bar with their
2433
+ * message and frequency (`result.alertCalls`) for the host's alert engine, which fires the ones made on the realtime
2434
+ * bar. Called inside eachBar() / strategy.eachBar() it is a call on the current bar; at the top level of the script
2435
+ * (which PineScript runs on every bar) it is a call on every bar, `message` then being a text or one text per bar
2436
+ * (a bar whose text is na makes no call). Default frequency: `alert.freq_once_per_bar`.
2437
+ */
2438
+ function alertImpl(message: string | ReadonlyArray<string | undefined>, freq: AlertFrequency = 'once_per_bar'): void {
2439
+ const c = collector();
2440
+ if (!ALERT_FREQUENCIES.includes(freq)) {
2441
+ throw new Error(`alert(): freq must be alert.freq_all, alert.freq_once_per_bar or alert.freq_once_per_bar_close, not ${String(freq)}.`);
2442
+ }
2443
+ c.hasAlertFunction = true;
2444
+ const b = ctxBars.bars;
2445
+ const textAt = (i: number): string | undefined => (typeof message === 'string' ? message : message[i]);
2446
+ const call = (i: number): void => {
2447
+ const text = textAt(i);
2448
+ if (text === undefined || text === null) return;
2449
+ c.alertCalls.push({ time: b[i]!.time as number, message: String(text), freq });
2450
+ };
2451
+ if (currentBar >= 0) call(currentBar);
2452
+ else for (let i = 0; i < b.length; i++) call(i);
2453
+ }
2454
+
2455
+ /** PineScript `alert()` with the `alert.freq_*` constants: `alert('Crossed', alert.freq_once_per_bar_close)`. */
2456
+ export const alert = Object.assign(alertImpl, {
2457
+ freq_all: 'all',
2458
+ freq_once_per_bar: 'once_per_bar',
2459
+ freq_once_per_bar_close: 'once_per_bar_close',
2460
+ } as const);
2461
+
2395
2462
  // ── Convenience re-exports ───────────────────────────────────────────────────
2396
2463
 
2397
2464
  export { Series, BarData, isNA as na, nz };
@@ -18,7 +18,8 @@
18
18
  * holidays, closed hours), gaps off repeats the last value
19
19
  * - gaps on: a value only on the chart bar where the shown bar changes (and on the first chart bar), na on the others
20
20
  * - the last bar while it is open (`lastBarConfirmed` false) with gaps off: the realtime update shows the bar given by
21
- * lookahead on (the open bar of a higher timeframe), with lookahead off as well
21
+ * lookahead on (the open bar of a higher timeframe), with lookahead off as well; a lower timeframe keeps the rules
22
+ * above (the last lower bar so far with lookahead off, the first one of the chart bar with lookahead on)
22
23
  *
23
24
  * Close times, trading days and time zones come from the exchange calendars of the chart and of the other symbol
24
25
  * (time zone and session, read by the session functions). Without them:
@@ -212,7 +213,9 @@ export function securityOther(
212
213
 
213
214
  // by trading day when both timeframes are D / W / M; by open time with an intraday side (#181)
214
215
  const daily = timeframe.info(chartTf).isdwm && timeframe.info(otherTf).isdwm;
215
- const realtime = chart.lastBarConfirmed === false && !options.gaps;
216
+ // a lower timeframe keeps its rule on the open last bar: the last lower bar so far, not the first one (#184)
217
+ const realtime =
218
+ chart.lastBarConfirmed === false && !options.gaps && timeframe.in_seconds(otherTf) >= timeframe.in_seconds(chartTf);
216
219
  let on: number[] = [];
217
220
  if (options.lookahead || realtime) {
218
221
  if (daily) {
package/src/ta/index.ts CHANGED
@@ -1088,6 +1088,7 @@ export function falling(source: Source, length: simple_int): series_bool {
1088
1088
  * - Equivalent to: `100 * (source - source[length]) / source[length]`
1089
1089
  * - Returns percentage change, e.g., 5.0 means 5% increase
1090
1090
  * - `na` values in the source series are included in calculations and will produce an `na` result
1091
+ * - A zero `source[length]` gives +/-Infinity (NaN when `source` is 0 too), as in PineScript
1091
1092
  * - Useful for momentum analysis and trend strength measurement
1092
1093
  *
1093
1094
  * @example
@@ -1106,9 +1107,10 @@ export function roc(source: Source, length: simple_int): series_float {
1106
1107
  result.push(NaN);
1107
1108
  } else {
1108
1109
  const oldValue = source[i - length]!;
1109
- if (oldValue === 0 || isNaN(oldValue) || isNaN(source[i]!)) {
1110
+ if (isNaN(oldValue) || isNaN(source[i]!)) {
1110
1111
  result.push(NaN);
1111
1112
  } else {
1113
+ // a zero base divides by zero as in PineScript: +/-Infinity, NaN for 0 / 0 (#184)
1112
1114
  const changeValue = source[i]! - oldValue;
1113
1115
  result.push((100 * changeValue) / oldValue);
1114
1116
  }
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) ? NaN : pick(zonedFields(time, timezone));
79
+ return pick(zonedFields(Number.isNaN(time) ? 0 : time, timezone));
77
80
  }
78
81
 
79
82
  /**
@@ -348,6 +348,7 @@ export interface OHLC {
348
348
  high: series_float;
349
349
  low: series_float;
350
350
  close: series_float;
351
+ volume?: series_float;
351
352
  }
352
353
 
353
354
  // Constants
@@ -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: 'close' | 'open' | 'high' | 'low' | 'hl2' | 'hlc3' | 'ohlc4' | 'hlcc4' = 'close'
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: 'open' | 'high' | 'low' | 'close' | 'hl2' | 'hlc3' | 'ohlc4' | 'hlcc4' = 'close'
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
  }