@livefolio/sdk 0.2.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.
Files changed (70) hide show
  1. package/README.md +191 -0
  2. package/dist/auth/client.d.ts +4 -0
  3. package/dist/auth/client.d.ts.map +1 -0
  4. package/dist/auth/client.js +37 -0
  5. package/dist/auth/client.js.map +1 -0
  6. package/dist/auth/index.d.ts +3 -0
  7. package/dist/auth/index.d.ts.map +1 -0
  8. package/dist/auth/index.js +6 -0
  9. package/dist/auth/index.js.map +1 -0
  10. package/dist/auth/types.d.ts +9 -0
  11. package/dist/auth/types.d.ts.map +1 -0
  12. package/dist/auth/types.js +3 -0
  13. package/dist/auth/types.js.map +1 -0
  14. package/dist/index.d.ts +23 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +55 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/market/client.d.ts +4 -0
  19. package/dist/market/client.d.ts.map +1 -0
  20. package/dist/market/client.js +65 -0
  21. package/dist/market/client.js.map +1 -0
  22. package/dist/market/index.d.ts +3 -0
  23. package/dist/market/index.d.ts.map +1 -0
  24. package/dist/market/index.js +6 -0
  25. package/dist/market/index.js.map +1 -0
  26. package/dist/market/types.d.ts +20 -0
  27. package/dist/market/types.d.ts.map +1 -0
  28. package/dist/market/types.js +3 -0
  29. package/dist/market/types.js.map +1 -0
  30. package/dist/portfolio/client.d.ts +4 -0
  31. package/dist/portfolio/client.d.ts.map +1 -0
  32. package/dist/portfolio/client.js +7 -0
  33. package/dist/portfolio/client.js.map +1 -0
  34. package/dist/portfolio/index.d.ts +3 -0
  35. package/dist/portfolio/index.d.ts.map +1 -0
  36. package/dist/portfolio/index.js +6 -0
  37. package/dist/portfolio/index.js.map +1 -0
  38. package/dist/portfolio/types.d.ts +3 -0
  39. package/dist/portfolio/types.d.ts.map +1 -0
  40. package/dist/portfolio/types.js +3 -0
  41. package/dist/portfolio/types.js.map +1 -0
  42. package/dist/strategy/client.d.ts +4 -0
  43. package/dist/strategy/client.d.ts.map +1 -0
  44. package/dist/strategy/client.js +350 -0
  45. package/dist/strategy/client.js.map +1 -0
  46. package/dist/strategy/evaluate.d.ts +10 -0
  47. package/dist/strategy/evaluate.d.ts.map +1 -0
  48. package/dist/strategy/evaluate.js +498 -0
  49. package/dist/strategy/evaluate.js.map +1 -0
  50. package/dist/strategy/index.d.ts +6 -0
  51. package/dist/strategy/index.d.ts.map +1 -0
  52. package/dist/strategy/index.js +20 -0
  53. package/dist/strategy/index.js.map +1 -0
  54. package/dist/strategy/symbols.d.ts +4 -0
  55. package/dist/strategy/symbols.d.ts.map +1 -0
  56. package/dist/strategy/symbols.js +41 -0
  57. package/dist/strategy/symbols.js.map +1 -0
  58. package/dist/strategy/time.d.ts +9 -0
  59. package/dist/strategy/time.d.ts.map +1 -0
  60. package/dist/strategy/time.js +28 -0
  61. package/dist/strategy/time.js.map +1 -0
  62. package/dist/strategy/types.d.ts +107 -0
  63. package/dist/strategy/types.d.ts.map +1 -0
  64. package/dist/strategy/types.js +3 -0
  65. package/dist/strategy/types.js.map +1 -0
  66. package/dist/types.d.ts +4 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +3 -0
  69. package/dist/types.js.map +1 -0
  70. package/package.json +47 -0
@@ -0,0 +1,498 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.indicatorKey = indicatorKey;
4
+ exports.signalKey = signalKey;
5
+ exports.evaluateIndicator = evaluateIndicator;
6
+ exports.evaluateSignal = evaluateSignal;
7
+ exports.evaluateAllocation = evaluateAllocation;
8
+ exports.evaluate = evaluate;
9
+ exports.findAllSignals = findAllSignals;
10
+ exports.getEvaluationDate = getEvaluationDate;
11
+ const symbols_1 = require("./symbols");
12
+ const time_1 = require("./time");
13
+ function toInternalSeries(series) {
14
+ return series.map((o) => ({ timestamp: new Date(o.timestamp), price: o.value }));
15
+ }
16
+ // ---------------------------------------------------------------------------
17
+ // Indicator key (used for diagnostics + metadata lookup)
18
+ // ---------------------------------------------------------------------------
19
+ function indicatorKey(ind) {
20
+ if (ind.type === 'Threshold')
21
+ return `Threshold_${ind.threshold ?? 0}`;
22
+ const d = ind.delay ? `_d${ind.delay}` : '';
23
+ return `${ind.type}_${ind.ticker.symbol}_${ind.lookback}${d}`;
24
+ }
25
+ // ---------------------------------------------------------------------------
26
+ // Signal identity key (for previousSignalStates lookup)
27
+ // ---------------------------------------------------------------------------
28
+ function signalKey(signal) {
29
+ return `${indicatorKey(signal.left)}_${signal.comparison}_${indicatorKey(signal.right)}_t${signal.tolerance}`;
30
+ }
31
+ // ---------------------------------------------------------------------------
32
+ // Series picking
33
+ // ---------------------------------------------------------------------------
34
+ function pickSeries(batchSeries, ticker, at, lookback, delay) {
35
+ const source = toInternalSeries(batchSeries[ticker.symbol] ?? []);
36
+ let atIndex = source.length - 1;
37
+ for (let i = source.length - 1; i >= 0; i--) {
38
+ if (source[i].timestamp <= at) {
39
+ atIndex = i;
40
+ break;
41
+ }
42
+ }
43
+ const end = atIndex + 1 - delay;
44
+ const start = Math.max(0, end - lookback);
45
+ const obs = source.slice(start, end);
46
+ if (ticker.leverage === 1 || obs.length === 0) {
47
+ return obs;
48
+ }
49
+ const leveraged = [obs[0]];
50
+ for (let i = 1; i < obs.length; i++) {
51
+ const dailyReturn = (obs[i].price - obs[i - 1].price) / obs[i - 1].price;
52
+ const leveragedReturn = dailyReturn * ticker.leverage;
53
+ const leveragedPrice = leveraged[i - 1].price * (1 + leveragedReturn);
54
+ leveraged.push({ timestamp: obs[i].timestamp, price: leveragedPrice });
55
+ }
56
+ return leveraged;
57
+ }
58
+ // ---------------------------------------------------------------------------
59
+ // Math helpers
60
+ // ---------------------------------------------------------------------------
61
+ function mean(values) {
62
+ return values.reduce((a, b) => a + b, 0) / values.length;
63
+ }
64
+ function smooth(values, k) {
65
+ let avg = values[0];
66
+ for (let i = 1; i < values.length; i++) {
67
+ avg = values[i] * k + avg * (1 - k);
68
+ }
69
+ return avg;
70
+ }
71
+ function percentChange(a, b) {
72
+ return ((b - a) / a) * 100;
73
+ }
74
+ function makeResult(timestamp, value, metadata) {
75
+ return { timestamp: timestamp.toISOString(), value, ...(metadata !== undefined ? { metadata } : {}) };
76
+ }
77
+ const INDICATOR_FNS = {
78
+ SMA(batchSeries, ticker, at, lookback, delay) {
79
+ const obs = pickSeries(batchSeries, ticker, at, lookback, delay);
80
+ if (obs.length === 0) {
81
+ throw new Error(`SMA: No observations found for ${ticker.symbol} at ${at.toISOString()}.`);
82
+ }
83
+ const prices = obs.map((o) => o.price);
84
+ return makeResult(obs[obs.length - 1].timestamp, mean(prices));
85
+ },
86
+ EMA(batchSeries, ticker, at, lookback, delay, prevMeta) {
87
+ const k = 2 / (lookback + 1);
88
+ // Incremental path: if we have previous EMA value, compute O(1)
89
+ if (prevMeta && typeof prevMeta === 'object' && 'ema' in prevMeta) {
90
+ const prevEma = prevMeta.ema;
91
+ const obs = pickSeries(batchSeries, ticker, at, 1, delay);
92
+ if (obs.length > 0) {
93
+ const price = obs[obs.length - 1].price;
94
+ const newEma = price * k + prevEma * (1 - k);
95
+ return makeResult(obs[obs.length - 1].timestamp, newEma, { ema: newEma });
96
+ }
97
+ }
98
+ // Full series fallback
99
+ const obs = pickSeries(batchSeries, ticker, at, Infinity, delay);
100
+ if (obs.length === 0) {
101
+ throw new Error(`EMA: No observations found for ${ticker.symbol} at ${at.toISOString()}.`);
102
+ }
103
+ const prices = obs.map((o) => o.price);
104
+ const ema = smooth(prices, k);
105
+ return makeResult(obs[obs.length - 1].timestamp, ema, { ema });
106
+ },
107
+ Price(batchSeries, ticker, at, _lookback, delay) {
108
+ const obs = pickSeries(batchSeries, ticker, at, 1, delay);
109
+ if (obs.length === 0) {
110
+ throw new Error(`Price: No observations found for ${ticker.symbol} at ${at.toISOString()}.`);
111
+ }
112
+ return makeResult(obs[obs.length - 1].timestamp, obs[obs.length - 1].price);
113
+ },
114
+ Return(batchSeries, ticker, at, lookback, delay) {
115
+ const obs = pickSeries(batchSeries, ticker, at, lookback, delay);
116
+ if (obs.length === 0) {
117
+ throw new Error(`Return: No observations found for ${ticker.symbol} at ${at.toISOString()}.`);
118
+ }
119
+ return makeResult(obs[obs.length - 1].timestamp, percentChange(obs[0].price, obs[obs.length - 1].price));
120
+ },
121
+ Volatility(batchSeries, ticker, at, lookback, delay) {
122
+ const obs = pickSeries(batchSeries, ticker, at, lookback, delay);
123
+ if (obs.length === 0) {
124
+ throw new Error(`Volatility: No observations found for ${ticker.symbol} at ${at.toISOString()}.`);
125
+ }
126
+ const prices = obs.map((o) => o.price);
127
+ const returns = prices.slice(1).map((price, i) => (price - prices[i]) / prices[i]);
128
+ const meanReturn = mean(returns);
129
+ const variance = mean(returns.map((r) => Math.pow(r - meanReturn, 2)));
130
+ const sd = Math.sqrt(variance);
131
+ const annualized = sd * Math.sqrt(252) * 100;
132
+ return makeResult(obs[obs.length - 1].timestamp, annualized);
133
+ },
134
+ Drawdown(batchSeries, ticker, at, _lookback, delay, prevMeta) {
135
+ // Incremental peak tracking
136
+ if (prevMeta && typeof prevMeta === 'object' && 'peak' in prevMeta) {
137
+ const prevPeak = prevMeta.peak;
138
+ const obs = pickSeries(batchSeries, ticker, at, 1, delay);
139
+ if (obs.length > 0) {
140
+ const current = obs[obs.length - 1].price;
141
+ const peak = Math.max(prevPeak, current);
142
+ const dd = Math.abs(percentChange(peak, current));
143
+ return makeResult(obs[obs.length - 1].timestamp, dd, { peak });
144
+ }
145
+ }
146
+ // Full series fallback
147
+ const obs = pickSeries(batchSeries, ticker, at, Infinity, delay);
148
+ if (obs.length === 0) {
149
+ throw new Error(`Drawdown: No observations found for ${ticker.symbol} at ${at.toISOString()}.`);
150
+ }
151
+ const prices = obs.map((o) => o.price);
152
+ const current = prices[prices.length - 1];
153
+ const peak = Math.max(...prices);
154
+ const dd = Math.abs(percentChange(peak, current));
155
+ return makeResult(obs[obs.length - 1].timestamp, dd, { peak });
156
+ },
157
+ RSI(batchSeries, ticker, at, lookback, delay, prevMeta) {
158
+ const k = 1 / lookback;
159
+ // Incremental path
160
+ if (prevMeta && typeof prevMeta === 'object' && 'avgGain' in prevMeta && 'avgLoss' in prevMeta) {
161
+ const { avgGain: prevAvgGain, avgLoss: prevAvgLoss } = prevMeta;
162
+ const obs = pickSeries(batchSeries, ticker, at, 2, delay);
163
+ if (obs.length >= 2) {
164
+ const change = obs[obs.length - 1].price - obs[obs.length - 2].price;
165
+ const gain = change >= 0 ? change : 0;
166
+ const loss = change < 0 ? -change : 0;
167
+ const avgGain = gain * k + prevAvgGain * (1 - k);
168
+ const avgLoss = loss * k + prevAvgLoss * (1 - k);
169
+ const rsi = avgLoss === 0 ? (avgGain === 0 ? 50 : 100) : 100 - 100 / (1 + avgGain / avgLoss);
170
+ return makeResult(obs[obs.length - 1].timestamp, rsi, { avgGain, avgLoss });
171
+ }
172
+ }
173
+ // Full series fallback
174
+ const obs = pickSeries(batchSeries, ticker, at, Infinity, delay);
175
+ if (obs.length === 0) {
176
+ throw new Error(`RSI: No observations found for ${ticker.symbol} at ${at.toISOString()}.`);
177
+ }
178
+ const prices = obs.map((o) => o.price);
179
+ const returns = prices.slice(1).map((price, i) => price - prices[i]);
180
+ const gains = returns.map((delta) => (delta >= 0 ? delta : 0));
181
+ const losses = returns.map((delta) => (delta < 0 ? -delta : 0));
182
+ const avgGain = smooth(gains, k);
183
+ const avgLoss = smooth(losses, k);
184
+ const rsi = avgLoss === 0 ? (avgGain === 0 ? 50 : 100) : 100 - 100 / (1 + avgGain / avgLoss);
185
+ return makeResult(obs[obs.length - 1].timestamp, rsi, { avgGain, avgLoss });
186
+ },
187
+ VIX(batchSeries, _ticker, at, lookback, delay) {
188
+ return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['VIX'], leverage: 1 }, at, lookback, delay);
189
+ },
190
+ VIX3M(batchSeries, _ticker, at, lookback, delay) {
191
+ return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['VIX3M'], leverage: 1 }, at, lookback, delay);
192
+ },
193
+ T3M(batchSeries, _ticker, at, lookback, delay) {
194
+ return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T3M'], leverage: 1 }, at, lookback, delay);
195
+ },
196
+ T6M(batchSeries, _ticker, at, lookback, delay) {
197
+ return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T6M'], leverage: 1 }, at, lookback, delay);
198
+ },
199
+ T1Y(batchSeries, _ticker, at, lookback, delay) {
200
+ return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T1Y'], leverage: 1 }, at, lookback, delay);
201
+ },
202
+ T2Y(batchSeries, _ticker, at, lookback, delay) {
203
+ return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T2Y'], leverage: 1 }, at, lookback, delay);
204
+ },
205
+ T3Y(batchSeries, _ticker, at, lookback, delay) {
206
+ return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T3Y'], leverage: 1 }, at, lookback, delay);
207
+ },
208
+ T5Y(batchSeries, _ticker, at, lookback, delay) {
209
+ return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T5Y'], leverage: 1 }, at, lookback, delay);
210
+ },
211
+ T7Y(batchSeries, _ticker, at, lookback, delay) {
212
+ return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T7Y'], leverage: 1 }, at, lookback, delay);
213
+ },
214
+ T10Y(batchSeries, _ticker, at, lookback, delay) {
215
+ return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T10Y'], leverage: 1 }, at, lookback, delay);
216
+ },
217
+ T20Y(batchSeries, _ticker, at, lookback, delay) {
218
+ return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T20Y'], leverage: 1 }, at, lookback, delay);
219
+ },
220
+ T30Y(batchSeries, _ticker, at, lookback, delay) {
221
+ return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T30Y'], leverage: 1 }, at, lookback, delay);
222
+ },
223
+ Month(_batchSeries, _ticker, at, _lookback, delay) {
224
+ const date = new Date(at.getTime() - delay * 24 * 60 * 60 * 1000);
225
+ return makeResult(date, date.getUTCMonth() + 1);
226
+ },
227
+ 'Day of Week'(_batchSeries, _ticker, at, _lookback, delay) {
228
+ const date = new Date(at.getTime() - delay * 24 * 60 * 60 * 1000);
229
+ return makeResult(date, date.getUTCDay());
230
+ },
231
+ 'Day of Month'(_batchSeries, _ticker, at, _lookback, delay) {
232
+ const date = new Date(at.getTime() - delay * 24 * 60 * 60 * 1000);
233
+ return makeResult(date, date.getUTCDate());
234
+ },
235
+ 'Day of Year'(_batchSeries, _ticker, at, _lookback, delay) {
236
+ const date = new Date(at.getTime() - delay * 24 * 60 * 60 * 1000);
237
+ const utcDate = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
238
+ const utcYearStart = Date.UTC(date.getUTCFullYear(), 0, 0);
239
+ const dayOfYear = (utcDate - utcYearStart) / (24 * 60 * 60 * 1000);
240
+ return makeResult(date, dayOfYear);
241
+ },
242
+ Threshold() {
243
+ throw new Error('Threshold should not be evaluated as an indicator function.');
244
+ },
245
+ };
246
+ // ---------------------------------------------------------------------------
247
+ // Public evaluation functions
248
+ // ---------------------------------------------------------------------------
249
+ function evaluateIndicator(indicator, options) {
250
+ if (indicator.type === 'Threshold') {
251
+ return makeResult(options.at, indicator.threshold);
252
+ }
253
+ const delay = indicator.delay;
254
+ // Temporal indicators don't depend on series
255
+ if (['Month', 'Day of Week', 'Day of Month', 'Day of Year'].includes(indicator.type)) {
256
+ return INDICATOR_FNS[indicator.type](options.batchSeries, indicator.ticker, options.at, indicator.lookback, delay);
257
+ }
258
+ // Get previous metadata for incremental evaluation
259
+ const key = indicatorKey(indicator);
260
+ const prevMeta = options.previousIndicatorMetadata?.[key];
261
+ return INDICATOR_FNS[indicator.type](options.batchSeries, indicator.ticker, options.at, indicator.lookback, delay, prevMeta);
262
+ }
263
+ function evaluateSignal(signal, options) {
264
+ const left = evaluateIndicator(signal.left, options);
265
+ const right = evaluateIndicator(signal.right, options);
266
+ const tolerance = signal.tolerance ?? 0;
267
+ const rawToleranceDelta = signal.left.unit === '%' ? tolerance : Math.abs(right.value) * (tolerance / 100);
268
+ const toleranceDelta = Number.isFinite(rawToleranceDelta) ? Math.abs(rawToleranceDelta) : 0;
269
+ const lowerBound = Math.min(right.value - toleranceDelta, right.value + toleranceDelta);
270
+ const upperBound = Math.max(right.value - toleranceDelta, right.value + toleranceDelta);
271
+ const comparison = signal.comparison;
272
+ if (comparison === '=') {
273
+ return lowerBound <= left.value && left.value <= upperBound;
274
+ }
275
+ // Cold start: if no prior state exists for this signal, evaluate strict comparator.
276
+ const key = signalKey(signal);
277
+ const previous = options.previousSignalStates?.[key];
278
+ const hasPrevious = previous !== undefined;
279
+ // Zero tolerance means no dead band; preserve strict legacy behavior.
280
+ if (!hasPrevious || toleranceDelta === 0) {
281
+ return comparison === '>' ? left.value > right.value : left.value < right.value;
282
+ }
283
+ if (comparison === '>') {
284
+ return previous
285
+ ? left.value >= lowerBound // stay true inside band; turn off only fully below
286
+ : left.value > upperBound; // turn on only after fully crossing above
287
+ }
288
+ else {
289
+ return previous
290
+ ? left.value <= upperBound // stay true inside band; turn off only fully above
291
+ : left.value < lowerBound; // turn on only after fully crossing below
292
+ }
293
+ }
294
+ function evaluateAllocation(allocation, options) {
295
+ return evaluateCondition(allocation.condition, options);
296
+ }
297
+ function evaluateCondition(condition, options) {
298
+ switch (condition.kind) {
299
+ case 'or':
300
+ return condition.args.some((andExpr) => evaluateCondition(andExpr, options));
301
+ case 'and':
302
+ return condition.args.every((unaryExpr) => evaluateCondition(unaryExpr, options));
303
+ case 'not':
304
+ return !evaluateSignal(condition.signal, options);
305
+ case 'signal':
306
+ return evaluateSignal(condition.signal, options);
307
+ }
308
+ }
309
+ function evaluate(strategy, options) {
310
+ // Collect all unique signals from all allocations
311
+ const allSignals = getAllSignalsFromStrategy(strategy);
312
+ const indicatorsMap = new Map();
313
+ const indicatorsOrder = [];
314
+ for (const signal of allSignals) {
315
+ for (const ind of [signal.left, signal.right]) {
316
+ const key = indicatorKey(ind);
317
+ if (indicatorsMap.has(key))
318
+ continue;
319
+ const res = evaluateIndicator(ind, options);
320
+ indicatorsMap.set(key, res);
321
+ indicatorsOrder.push(key);
322
+ }
323
+ }
324
+ const indicators = {};
325
+ for (const k of indicatorsOrder)
326
+ indicators[k] = indicatorsMap.get(k);
327
+ const signals = {};
328
+ for (const signal of allSignals) {
329
+ signals[signalKey(signal)] = evaluateSignal(signal, options);
330
+ }
331
+ // Find first matching allocation (array is pre-sorted by position from DB)
332
+ const allocations = strategy.allocations;
333
+ let winning = allocations[allocations.length - 1];
334
+ for (const na of allocations) {
335
+ if (evaluateAllocation(na.allocation, options)) {
336
+ winning = na;
337
+ break;
338
+ }
339
+ }
340
+ const asOf = getEvaluationDate(strategy.trading, options);
341
+ return {
342
+ allocation: {
343
+ name: winning.name,
344
+ holdings: winning.allocation.holdings,
345
+ },
346
+ asOf,
347
+ signals,
348
+ indicators,
349
+ };
350
+ }
351
+ // ---------------------------------------------------------------------------
352
+ // Helpers
353
+ // ---------------------------------------------------------------------------
354
+ function getAllSignalsFromStrategy(strategy) {
355
+ const seen = new Set();
356
+ const out = [];
357
+ for (const na of strategy.allocations) {
358
+ for (const s of findAllSignals(na.allocation.condition)) {
359
+ const key = signalKey(s);
360
+ if (!seen.has(key)) {
361
+ seen.add(key);
362
+ out.push(s);
363
+ }
364
+ }
365
+ }
366
+ return out;
367
+ }
368
+ function findAllSignals(condition) {
369
+ const signals = [];
370
+ const seen = new Set();
371
+ function traverse(cond) {
372
+ switch (cond.kind) {
373
+ case 'or':
374
+ cond.args.forEach(traverse);
375
+ break;
376
+ case 'and':
377
+ cond.args.forEach(traverse);
378
+ break;
379
+ case 'not': {
380
+ const key = signalKey(cond.signal);
381
+ if (!seen.has(key)) {
382
+ seen.add(key);
383
+ signals.push(cond.signal);
384
+ }
385
+ break;
386
+ }
387
+ case 'signal': {
388
+ const key = signalKey(cond.signal);
389
+ if (!seen.has(key)) {
390
+ seen.add(key);
391
+ signals.push(cond.signal);
392
+ }
393
+ break;
394
+ }
395
+ }
396
+ }
397
+ traverse(condition);
398
+ return signals;
399
+ }
400
+ // ---------------------------------------------------------------------------
401
+ // Evaluation date (ported from evaluateLatestAllocationDate)
402
+ // ---------------------------------------------------------------------------
403
+ function getEvaluationDate(trading, options) {
404
+ const series = Object.values(options.batchSeries)[0];
405
+ if (!series || series.length === 0) {
406
+ return options.at;
407
+ }
408
+ const internalSeries = toInternalSeries(series);
409
+ const latestCloseObs = findLatestMarketCloseObs(internalSeries, options.at);
410
+ if (!latestCloseObs) {
411
+ return options.at;
412
+ }
413
+ let { start, end } = getPeriodBounds(latestCloseObs.timestamp, trading.frequency);
414
+ let periodObs = findObservationsInPeriod(internalSeries, start, end);
415
+ if (trading.frequency !== 'Daily') {
416
+ const lastPeriodObs = periodObs.at(-1);
417
+ if (lastPeriodObs) {
418
+ const lastObsDate = lastPeriodObs.timestamp.toISOString().slice(0, 10);
419
+ const endDate = end.toISOString().slice(0, 10);
420
+ if (lastObsDate < endDate) {
421
+ const prevPeriodDate = new Date(start);
422
+ prevPeriodDate.setUTCDate(prevPeriodDate.getUTCDate() - 1);
423
+ ({ start, end } = getPeriodBounds(prevPeriodDate, trading.frequency));
424
+ periodObs = findObservationsInPeriod(internalSeries, start, end);
425
+ }
426
+ }
427
+ }
428
+ const index = periodObs.length - 1 - trading.offset;
429
+ if (index < 0) {
430
+ return periodObs[0]?.timestamp ?? options.at;
431
+ }
432
+ return periodObs[index].timestamp;
433
+ }
434
+ function findLatestMarketCloseObs(series, cutoff) {
435
+ for (let i = series.length - 1; i >= 0 && i >= series.length - 100; i--) {
436
+ const obs = series[i];
437
+ if (obs.timestamp <= cutoff && (0, time_1.isAtMarketClose)(obs.timestamp)) {
438
+ return obs;
439
+ }
440
+ }
441
+ return undefined;
442
+ }
443
+ function findObservationsInPeriod(series, start, end) {
444
+ const result = [];
445
+ for (let i = series.length - 1; i >= 0; i--) {
446
+ const obs = series[i];
447
+ if (obs.timestamp < start)
448
+ break;
449
+ if (obs.timestamp >= start && obs.timestamp <= end && (0, time_1.isAtMarketClose)(obs.timestamp)) {
450
+ result.unshift(obs);
451
+ }
452
+ }
453
+ return result;
454
+ }
455
+ function getPeriodBounds(date, frequency) {
456
+ const year = date.getUTCFullYear();
457
+ const month = date.getUTCMonth();
458
+ const day = date.getUTCDate();
459
+ const startOfDayUTC = (y, m, d) => new Date(Date.UTC(y, m, d, 0, 0, 0, 0));
460
+ const endOfDayUTC = (y, m, d) => new Date(Date.UTC(y, m, d, 23, 59, 59, 999));
461
+ const lastDayOfMonth = (y, m) => new Date(Date.UTC(y, m + 1, 0)).getUTCDate();
462
+ switch (frequency) {
463
+ case 'Daily':
464
+ return { start: startOfDayUTC(year, month, day), end: endOfDayUTC(year, month, day) };
465
+ case 'Weekly': {
466
+ const dayOfWeek = date.getUTCDay();
467
+ const mondayOffset = (dayOfWeek + 6) % 7;
468
+ const monday = new Date(Date.UTC(year, month, day - mondayOffset));
469
+ const friday = new Date(Date.UTC(monday.getUTCFullYear(), monday.getUTCMonth(), monday.getUTCDate() + 4, 23, 59, 59, 999));
470
+ return { start: monday, end: friday };
471
+ }
472
+ case 'Monthly':
473
+ return { start: startOfDayUTC(year, month, 1), end: endOfDayUTC(year, month, lastDayOfMonth(year, month)) };
474
+ case 'Bi-monthly': {
475
+ const ps = Math.floor(month / 2) * 2;
476
+ const pe = ps + 1;
477
+ return { start: startOfDayUTC(year, ps, 1), end: endOfDayUTC(year, pe, lastDayOfMonth(year, pe)) };
478
+ }
479
+ case 'Quarterly': {
480
+ const ps = Math.floor(month / 3) * 3;
481
+ const pe = ps + 2;
482
+ return { start: startOfDayUTC(year, ps, 1), end: endOfDayUTC(year, pe, lastDayOfMonth(year, pe)) };
483
+ }
484
+ case 'Every 4 Months': {
485
+ const ps = Math.floor(month / 4) * 4;
486
+ const pe = ps + 3;
487
+ return { start: startOfDayUTC(year, ps, 1), end: endOfDayUTC(year, pe, lastDayOfMonth(year, pe)) };
488
+ }
489
+ case 'Semiannually': {
490
+ const ps = Math.floor(month / 6) * 6;
491
+ const pe = ps + 5;
492
+ return { start: startOfDayUTC(year, ps, 1), end: endOfDayUTC(year, pe, lastDayOfMonth(year, pe)) };
493
+ }
494
+ case 'Yearly':
495
+ return { start: startOfDayUTC(year, 0, 1), end: endOfDayUTC(year, 11, 31) };
496
+ }
497
+ }
498
+ //# sourceMappingURL=evaluate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/strategy/evaluate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type { StrategyModule, Strategy, NamedSignal, AllocationEvaluation, Signal, Allocation, Indicator, Ticker, Holding, Trading, Condition, SignalExpr, NotExpr, UnaryExpr, AndExpr, OrExpr, Comparison, IndicatorType, Frequency, Unit, EvaluationOptions, IndicatorEvaluation, StrategyEvaluation, BacktestOptions, BacktestResult, } from './types';
2
+ export { createStrategy } from './client';
3
+ export { evaluateIndicator, evaluateSignal, evaluateAllocation, evaluate, getEvaluationDate, indicatorKey, signalKey } from './evaluate';
4
+ export { extractSymbols, INDICATOR_SYMBOL_MAP } from './symbols';
5
+ export { utcToET, isAtMarketClose } from './time';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/strategy/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,QAAQ,EACR,WAAW,EACX,oBAAoB,EACpB,MAAM,EACN,UAAU,EACV,SAAS,EACT,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,EACT,UAAU,EACV,OAAO,EACP,SAAS,EACT,OAAO,EACP,MAAM,EACN,UAAU,EACV,aAAa,EACb,SAAS,EACT,IAAI,EACJ,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,cAAc,GACf,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACzI,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isAtMarketClose = exports.utcToET = exports.INDICATOR_SYMBOL_MAP = exports.extractSymbols = exports.signalKey = exports.indicatorKey = exports.getEvaluationDate = exports.evaluate = exports.evaluateAllocation = exports.evaluateSignal = exports.evaluateIndicator = exports.createStrategy = void 0;
4
+ var client_1 = require("./client");
5
+ Object.defineProperty(exports, "createStrategy", { enumerable: true, get: function () { return client_1.createStrategy; } });
6
+ var evaluate_1 = require("./evaluate");
7
+ Object.defineProperty(exports, "evaluateIndicator", { enumerable: true, get: function () { return evaluate_1.evaluateIndicator; } });
8
+ Object.defineProperty(exports, "evaluateSignal", { enumerable: true, get: function () { return evaluate_1.evaluateSignal; } });
9
+ Object.defineProperty(exports, "evaluateAllocation", { enumerable: true, get: function () { return evaluate_1.evaluateAllocation; } });
10
+ Object.defineProperty(exports, "evaluate", { enumerable: true, get: function () { return evaluate_1.evaluate; } });
11
+ Object.defineProperty(exports, "getEvaluationDate", { enumerable: true, get: function () { return evaluate_1.getEvaluationDate; } });
12
+ Object.defineProperty(exports, "indicatorKey", { enumerable: true, get: function () { return evaluate_1.indicatorKey; } });
13
+ Object.defineProperty(exports, "signalKey", { enumerable: true, get: function () { return evaluate_1.signalKey; } });
14
+ var symbols_1 = require("./symbols");
15
+ Object.defineProperty(exports, "extractSymbols", { enumerable: true, get: function () { return symbols_1.extractSymbols; } });
16
+ Object.defineProperty(exports, "INDICATOR_SYMBOL_MAP", { enumerable: true, get: function () { return symbols_1.INDICATOR_SYMBOL_MAP; } });
17
+ var time_1 = require("./time");
18
+ Object.defineProperty(exports, "utcToET", { enumerable: true, get: function () { return time_1.utcToET; } });
19
+ Object.defineProperty(exports, "isAtMarketClose", { enumerable: true, get: function () { return time_1.isAtMarketClose; } });
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/strategy/index.ts"],"names":[],"mappings":";;;AA4BA,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AACvB,uCAAyI;AAAhI,6GAAA,iBAAiB,OAAA;AAAE,0GAAA,cAAc,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAAE,wGAAA,YAAY,OAAA;AAAE,qGAAA,SAAS,OAAA;AACpH,qCAAiE;AAAxD,yGAAA,cAAc,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAC7C,+BAAkD;AAAzC,+FAAA,OAAO,OAAA;AAAE,uGAAA,eAAe,OAAA"}
@@ -0,0 +1,4 @@
1
+ import type { IndicatorType, Strategy } from './types';
2
+ export declare const INDICATOR_SYMBOL_MAP: Partial<Record<IndicatorType, string>>;
3
+ export declare function extractSymbols(strategy: Strategy): string[];
4
+ //# sourceMappingURL=symbols.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/strategy/symbols.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,aAAa,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAElE,eAAO,MAAM,oBAAoB,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAavE,CAAC;AAWF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,CAe3D"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.INDICATOR_SYMBOL_MAP = void 0;
4
+ exports.extractSymbols = extractSymbols;
5
+ exports.INDICATOR_SYMBOL_MAP = {
6
+ VIX: '^VIX',
7
+ VIX3M: '^VIX3M',
8
+ T3M: 'DGS3MO',
9
+ T6M: 'DGS6MO',
10
+ T1Y: 'DGS1',
11
+ T2Y: 'DGS2',
12
+ T3Y: 'DGS3',
13
+ T5Y: 'DGS5',
14
+ T7Y: 'DGS7',
15
+ T10Y: 'DGS10',
16
+ T20Y: 'DGS20',
17
+ T30Y: 'DGS30',
18
+ };
19
+ function addIndicatorSymbol(indicator, symbols) {
20
+ const mappedSymbol = exports.INDICATOR_SYMBOL_MAP[indicator.type];
21
+ if (mappedSymbol) {
22
+ symbols.add(mappedSymbol);
23
+ }
24
+ else if (indicator.type !== 'Threshold') {
25
+ symbols.add(indicator.ticker.symbol);
26
+ }
27
+ }
28
+ function extractSymbols(strategy) {
29
+ const symbols = new Set();
30
+ for (const ns of strategy.signals) {
31
+ addIndicatorSymbol(ns.signal.left, symbols);
32
+ addIndicatorSymbol(ns.signal.right, symbols);
33
+ }
34
+ for (const na of strategy.allocations) {
35
+ for (const holding of na.allocation.holdings) {
36
+ symbols.add(holding.ticker.symbol);
37
+ }
38
+ }
39
+ return [...symbols];
40
+ }
41
+ //# sourceMappingURL=symbols.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/strategy/symbols.ts"],"names":[],"mappings":";;;AA0BA,wCAeC;AAvCY,QAAA,oBAAoB,GAA2C;IAC1E,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,QAAQ;IACf,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,OAAO;CACd,CAAC;AAEF,SAAS,kBAAkB,CAAC,SAAoB,EAAE,OAAoB;IACpE,MAAM,YAAY,GAAG,4BAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;SAAM,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,QAAkB;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QAClC,kBAAkB,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,kBAAkB,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACtC,KAAK,MAAM,OAAO,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACtB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare function utcToET(date: Date): {
2
+ year: number;
3
+ month: number;
4
+ day: number;
5
+ hour: number;
6
+ minute: number;
7
+ };
8
+ export declare function isAtMarketClose(timestamp: Date): boolean;
9
+ //# sourceMappingURL=time.d.ts.map