@livefolio/sdk 0.2.13 → 0.3.1

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 (110) hide show
  1. package/README.md +277 -84
  2. package/dist/index.d.ts +397 -23
  3. package/dist/index.js +1440 -51
  4. package/dist/index.js.map +1 -1
  5. package/package.json +36 -35
  6. package/dist/auth/client.d.ts +0 -4
  7. package/dist/auth/client.d.ts.map +0 -1
  8. package/dist/auth/client.js +0 -37
  9. package/dist/auth/client.js.map +0 -1
  10. package/dist/auth/index.d.ts +0 -3
  11. package/dist/auth/index.d.ts.map +0 -1
  12. package/dist/auth/index.js +0 -6
  13. package/dist/auth/index.js.map +0 -1
  14. package/dist/auth/types.d.ts +0 -9
  15. package/dist/auth/types.d.ts.map +0 -1
  16. package/dist/auth/types.js +0 -3
  17. package/dist/auth/types.js.map +0 -1
  18. package/dist/index.d.ts.map +0 -1
  19. package/dist/market/client.d.ts +0 -4
  20. package/dist/market/client.d.ts.map +0 -1
  21. package/dist/market/client.js +0 -137
  22. package/dist/market/client.js.map +0 -1
  23. package/dist/market/index.d.ts +0 -5
  24. package/dist/market/index.d.ts.map +0 -1
  25. package/dist/market/index.js +0 -9
  26. package/dist/market/index.js.map +0 -1
  27. package/dist/market/trackedTickers.d.ts +0 -4
  28. package/dist/market/trackedTickers.d.ts.map +0 -1
  29. package/dist/market/trackedTickers.js +0 -256
  30. package/dist/market/trackedTickers.js.map +0 -1
  31. package/dist/market/types.d.ts +0 -29
  32. package/dist/market/types.d.ts.map +0 -1
  33. package/dist/market/types.js +0 -3
  34. package/dist/market/types.js.map +0 -1
  35. package/dist/portfolio/client.d.ts +0 -4
  36. package/dist/portfolio/client.d.ts.map +0 -1
  37. package/dist/portfolio/client.js +0 -13
  38. package/dist/portfolio/client.js.map +0 -1
  39. package/dist/portfolio/index.d.ts +0 -5
  40. package/dist/portfolio/index.d.ts.map +0 -1
  41. package/dist/portfolio/index.js +0 -26
  42. package/dist/portfolio/index.js.map +0 -1
  43. package/dist/portfolio/rebalance.d.ts +0 -62
  44. package/dist/portfolio/rebalance.d.ts.map +0 -1
  45. package/dist/portfolio/rebalance.js +0 -205
  46. package/dist/portfolio/rebalance.js.map +0 -1
  47. package/dist/portfolio/symbols.d.ts +0 -13
  48. package/dist/portfolio/symbols.d.ts.map +0 -1
  49. package/dist/portfolio/symbols.js +0 -112
  50. package/dist/portfolio/symbols.js.map +0 -1
  51. package/dist/portfolio/types.d.ts +0 -13
  52. package/dist/portfolio/types.d.ts.map +0 -1
  53. package/dist/portfolio/types.js +0 -3
  54. package/dist/portfolio/types.js.map +0 -1
  55. package/dist/strategy/backtest.d.ts +0 -6
  56. package/dist/strategy/backtest.d.ts.map +0 -1
  57. package/dist/strategy/backtest.js +0 -698
  58. package/dist/strategy/backtest.js.map +0 -1
  59. package/dist/strategy/cache.d.ts +0 -8
  60. package/dist/strategy/cache.d.ts.map +0 -1
  61. package/dist/strategy/cache.js +0 -336
  62. package/dist/strategy/cache.js.map +0 -1
  63. package/dist/strategy/client.d.ts +0 -4
  64. package/dist/strategy/client.d.ts.map +0 -1
  65. package/dist/strategy/client.js +0 -29
  66. package/dist/strategy/client.js.map +0 -1
  67. package/dist/strategy/evaluate.d.ts +0 -12
  68. package/dist/strategy/evaluate.d.ts.map +0 -1
  69. package/dist/strategy/evaluate.js +0 -562
  70. package/dist/strategy/evaluate.js.map +0 -1
  71. package/dist/strategy/get.d.ts +0 -5
  72. package/dist/strategy/get.d.ts.map +0 -1
  73. package/dist/strategy/get.js +0 -25
  74. package/dist/strategy/get.js.map +0 -1
  75. package/dist/strategy/index.d.ts +0 -14
  76. package/dist/strategy/index.d.ts.map +0 -1
  77. package/dist/strategy/index.js +0 -44
  78. package/dist/strategy/index.js.map +0 -1
  79. package/dist/strategy/livefolio.d.ts +0 -25
  80. package/dist/strategy/livefolio.d.ts.map +0 -1
  81. package/dist/strategy/livefolio.js +0 -67
  82. package/dist/strategy/livefolio.js.map +0 -1
  83. package/dist/strategy/performance.d.ts +0 -17
  84. package/dist/strategy/performance.d.ts.map +0 -1
  85. package/dist/strategy/performance.js +0 -57
  86. package/dist/strategy/performance.js.map +0 -1
  87. package/dist/strategy/rules.d.ts +0 -3
  88. package/dist/strategy/rules.d.ts.map +0 -1
  89. package/dist/strategy/rules.js +0 -95
  90. package/dist/strategy/rules.js.map +0 -1
  91. package/dist/strategy/stream.d.ts +0 -5
  92. package/dist/strategy/stream.d.ts.map +0 -1
  93. package/dist/strategy/stream.js +0 -58
  94. package/dist/strategy/stream.js.map +0 -1
  95. package/dist/strategy/symbols.d.ts +0 -4
  96. package/dist/strategy/symbols.d.ts.map +0 -1
  97. package/dist/strategy/symbols.js +0 -41
  98. package/dist/strategy/symbols.js.map +0 -1
  99. package/dist/strategy/time.d.ts +0 -10
  100. package/dist/strategy/time.d.ts.map +0 -1
  101. package/dist/strategy/time.js +0 -33
  102. package/dist/strategy/time.js.map +0 -1
  103. package/dist/strategy/types.d.ts +0 -200
  104. package/dist/strategy/types.d.ts.map +0 -1
  105. package/dist/strategy/types.js +0 -3
  106. package/dist/strategy/types.js.map +0 -1
  107. package/dist/types.d.ts +0 -4
  108. package/dist/types.d.ts.map +0 -1
  109. package/dist/types.js +0 -3
  110. package/dist/types.js.map +0 -1
@@ -1,562 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.filterByTradingDays = filterByTradingDays;
4
- exports.indicatorKey = indicatorKey;
5
- exports.signalKey = signalKey;
6
- exports.evaluateIndicator = evaluateIndicator;
7
- exports.evaluateSignal = evaluateSignal;
8
- exports.evaluateAllocation = evaluateAllocation;
9
- exports.evaluate = evaluate;
10
- exports.findAllSignals = findAllSignals;
11
- exports.getEvaluationDate = getEvaluationDate;
12
- const symbols_1 = require("./symbols");
13
- const time_1 = require("./time");
14
- const INTERNAL_SERIES_CACHE = new WeakMap();
15
- function toInternalSeries(series) {
16
- const cached = INTERNAL_SERIES_CACHE.get(series);
17
- if (cached)
18
- return cached;
19
- const normalized = series.map((o) => ({ timestamp: new Date(o.timestamp), price: o.value }));
20
- INTERNAL_SERIES_CACHE.set(series, normalized);
21
- return normalized;
22
- }
23
- // ---------------------------------------------------------------------------
24
- // Trading day filtering (matches App's filterSeriesByTradingCalendar)
25
- // ---------------------------------------------------------------------------
26
- const FILTERED_SERIES_CACHE = new WeakMap();
27
- function filterByTradingDays(series, tradingDays) {
28
- let byCalendar = FILTERED_SERIES_CACHE.get(series);
29
- if (!byCalendar) {
30
- byCalendar = new Map();
31
- FILTERED_SERIES_CACHE.set(series, byCalendar);
32
- }
33
- const cached = byCalendar.get(tradingDays);
34
- if (cached)
35
- return cached;
36
- const filtered = series.filter((obs) => tradingDays.has((0, time_1.toTradingDayKey)(new Date(obs.timestamp))));
37
- byCalendar.set(tradingDays, filtered);
38
- return filtered;
39
- }
40
- function filterBatchSeries(batchSeries, tradingDays) {
41
- const result = {};
42
- for (const [symbol, series] of Object.entries(batchSeries)) {
43
- result[symbol] = filterByTradingDays(series, tradingDays);
44
- }
45
- return result;
46
- }
47
- // ---------------------------------------------------------------------------
48
- // Indicator key (used for diagnostics + metadata lookup)
49
- // ---------------------------------------------------------------------------
50
- function indicatorKey(ind) {
51
- if (ind.type === 'Threshold')
52
- return `Threshold_${ind.threshold ?? 0}`;
53
- const d = ind.delay ? `_d${ind.delay}` : '';
54
- return `${ind.type}_${ind.ticker.symbol}_${ind.lookback}${d}`;
55
- }
56
- // ---------------------------------------------------------------------------
57
- // Signal identity key (for previousSignalStates lookup)
58
- // ---------------------------------------------------------------------------
59
- function signalKey(signal) {
60
- return `${indicatorKey(signal.left)}_${signal.comparison}_${indicatorKey(signal.right)}_t${signal.tolerance}`;
61
- }
62
- // ---------------------------------------------------------------------------
63
- // Series picking
64
- // ---------------------------------------------------------------------------
65
- function pickSeries(batchSeries, ticker, at, lookback, delay) {
66
- const source = toInternalSeries(batchSeries[ticker.symbol] ?? []);
67
- if (source.length === 0)
68
- return [];
69
- let lo = 0;
70
- let hi = source.length - 1;
71
- let atIndex = -1;
72
- while (lo <= hi) {
73
- const mid = (lo + hi) >> 1;
74
- if (source[mid].timestamp <= at) {
75
- atIndex = mid;
76
- lo = mid + 1;
77
- }
78
- else {
79
- hi = mid - 1;
80
- }
81
- }
82
- if (atIndex < 0)
83
- return [];
84
- const end = atIndex + 1 - delay;
85
- const start = Math.max(0, end - lookback);
86
- const obs = source.slice(start, end);
87
- if (ticker.leverage === 1 || obs.length === 0) {
88
- return obs;
89
- }
90
- const leveraged = [obs[0]];
91
- for (let i = 1; i < obs.length; i++) {
92
- const dailyReturn = (obs[i].price - obs[i - 1].price) / obs[i - 1].price;
93
- const leveragedReturn = dailyReturn * ticker.leverage;
94
- const leveragedPrice = leveraged[i - 1].price * (1 + leveragedReturn);
95
- leveraged.push({ timestamp: obs[i].timestamp, price: leveragedPrice });
96
- }
97
- return leveraged;
98
- }
99
- // ---------------------------------------------------------------------------
100
- // Math helpers
101
- // ---------------------------------------------------------------------------
102
- function mean(values) {
103
- return values.reduce((a, b) => a + b, 0) / values.length;
104
- }
105
- function smooth(values, k) {
106
- let avg = values[0];
107
- for (let i = 1; i < values.length; i++) {
108
- avg = values[i] * k + avg * (1 - k);
109
- }
110
- return avg;
111
- }
112
- function percentChange(a, b) {
113
- return ((b - a) / a) * 100;
114
- }
115
- function makeResult(timestamp, value, metadata) {
116
- return { timestamp: timestamp.toISOString(), value, ...(metadata !== undefined ? { metadata } : {}) };
117
- }
118
- const INDICATOR_FNS = {
119
- SMA(batchSeries, ticker, at, lookback, delay) {
120
- const obs = pickSeries(batchSeries, ticker, at, lookback, delay);
121
- if (obs.length === 0) {
122
- throw new Error(`SMA: No observations found for ${ticker.symbol} at ${at.toISOString()}.`);
123
- }
124
- const prices = obs.map((o) => o.price);
125
- return makeResult(obs[obs.length - 1].timestamp, mean(prices));
126
- },
127
- EMA(batchSeries, ticker, at, lookback, delay, prevMeta) {
128
- const k = 2 / (lookback + 1);
129
- // Incremental path: if we have previous EMA value, compute O(1)
130
- if (prevMeta && typeof prevMeta === 'object' && 'ema' in prevMeta) {
131
- const prevEma = prevMeta.ema;
132
- const obs = pickSeries(batchSeries, ticker, at, 1, delay);
133
- if (obs.length > 0) {
134
- const price = obs[obs.length - 1].price;
135
- const newEma = price * k + prevEma * (1 - k);
136
- return makeResult(obs[obs.length - 1].timestamp, newEma, { ema: newEma });
137
- }
138
- }
139
- // Full series fallback
140
- const obs = pickSeries(batchSeries, ticker, at, Infinity, delay);
141
- if (obs.length === 0) {
142
- throw new Error(`EMA: No observations found for ${ticker.symbol} at ${at.toISOString()}.`);
143
- }
144
- const prices = obs.map((o) => o.price);
145
- const ema = smooth(prices, k);
146
- return makeResult(obs[obs.length - 1].timestamp, ema, { ema });
147
- },
148
- Price(batchSeries, ticker, at, _lookback, delay) {
149
- const obs = pickSeries(batchSeries, ticker, at, 1, delay);
150
- if (obs.length === 0) {
151
- throw new Error(`Price: No observations found for ${ticker.symbol} at ${at.toISOString()}.`);
152
- }
153
- return makeResult(obs[obs.length - 1].timestamp, obs[obs.length - 1].price);
154
- },
155
- Return(batchSeries, ticker, at, lookback, delay) {
156
- const obs = pickSeries(batchSeries, ticker, at, lookback, delay);
157
- if (obs.length === 0) {
158
- throw new Error(`Return: No observations found for ${ticker.symbol} at ${at.toISOString()}.`);
159
- }
160
- return makeResult(obs[obs.length - 1].timestamp, percentChange(obs[0].price, obs[obs.length - 1].price));
161
- },
162
- Volatility(batchSeries, ticker, at, lookback, delay) {
163
- const obs = pickSeries(batchSeries, ticker, at, lookback, delay);
164
- if (obs.length === 0) {
165
- throw new Error(`Volatility: No observations found for ${ticker.symbol} at ${at.toISOString()}.`);
166
- }
167
- const prices = obs.map((o) => o.price);
168
- const returns = prices.slice(1).map((price, i) => (price - prices[i]) / prices[i]);
169
- const meanReturn = mean(returns);
170
- const variance = mean(returns.map((r) => Math.pow(r - meanReturn, 2)));
171
- const sd = Math.sqrt(variance);
172
- const annualized = sd * Math.sqrt(252) * 100;
173
- return makeResult(obs[obs.length - 1].timestamp, annualized);
174
- },
175
- Drawdown(batchSeries, ticker, at, _lookback, delay, prevMeta) {
176
- // Incremental peak tracking
177
- if (prevMeta && typeof prevMeta === 'object' && 'peak' in prevMeta) {
178
- const prevPeak = prevMeta.peak;
179
- const obs = pickSeries(batchSeries, ticker, at, 1, delay);
180
- if (obs.length > 0) {
181
- const current = obs[obs.length - 1].price;
182
- const peak = Math.max(prevPeak, current);
183
- const dd = Math.abs(percentChange(peak, current));
184
- return makeResult(obs[obs.length - 1].timestamp, dd, { peak });
185
- }
186
- }
187
- // Full series fallback
188
- const obs = pickSeries(batchSeries, ticker, at, Infinity, delay);
189
- if (obs.length === 0) {
190
- throw new Error(`Drawdown: No observations found for ${ticker.symbol} at ${at.toISOString()}.`);
191
- }
192
- const prices = obs.map((o) => o.price);
193
- const current = prices[prices.length - 1];
194
- const peak = Math.max(...prices);
195
- const dd = Math.abs(percentChange(peak, current));
196
- return makeResult(obs[obs.length - 1].timestamp, dd, { peak });
197
- },
198
- RSI(batchSeries, ticker, at, lookback, delay, prevMeta) {
199
- const k = 1 / lookback;
200
- // Incremental path
201
- if (prevMeta && typeof prevMeta === 'object' && 'avgGain' in prevMeta && 'avgLoss' in prevMeta) {
202
- const { avgGain: prevAvgGain, avgLoss: prevAvgLoss } = prevMeta;
203
- const obs = pickSeries(batchSeries, ticker, at, 2, delay);
204
- if (obs.length >= 2) {
205
- const change = obs[obs.length - 1].price - obs[obs.length - 2].price;
206
- const gain = change >= 0 ? change : 0;
207
- const loss = change < 0 ? -change : 0;
208
- const avgGain = gain * k + prevAvgGain * (1 - k);
209
- const avgLoss = loss * k + prevAvgLoss * (1 - k);
210
- const rsi = avgLoss === 0 ? (avgGain === 0 ? 50 : 100) : 100 - 100 / (1 + avgGain / avgLoss);
211
- return makeResult(obs[obs.length - 1].timestamp, rsi, { avgGain, avgLoss });
212
- }
213
- }
214
- // Full series fallback
215
- const obs = pickSeries(batchSeries, ticker, at, Infinity, delay);
216
- if (obs.length === 0) {
217
- throw new Error(`RSI: No observations found for ${ticker.symbol} at ${at.toISOString()}.`);
218
- }
219
- const prices = obs.map((o) => o.price);
220
- const returns = prices.slice(1).map((price, i) => price - prices[i]);
221
- const gains = returns.map((delta) => (delta >= 0 ? delta : 0));
222
- const losses = returns.map((delta) => (delta < 0 ? -delta : 0));
223
- const avgGain = smooth(gains, k);
224
- const avgLoss = smooth(losses, k);
225
- const rsi = avgLoss === 0 ? (avgGain === 0 ? 50 : 100) : 100 - 100 / (1 + avgGain / avgLoss);
226
- return makeResult(obs[obs.length - 1].timestamp, rsi, { avgGain, avgLoss });
227
- },
228
- VIX(batchSeries, _ticker, at, lookback, delay) {
229
- return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['VIX'], leverage: 1 }, at, lookback, delay);
230
- },
231
- VIX3M(batchSeries, _ticker, at, lookback, delay) {
232
- return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['VIX3M'], leverage: 1 }, at, lookback, delay);
233
- },
234
- T3M(batchSeries, _ticker, at, lookback, delay) {
235
- return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T3M'], leverage: 1 }, at, lookback, delay);
236
- },
237
- T6M(batchSeries, _ticker, at, lookback, delay) {
238
- return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T6M'], leverage: 1 }, at, lookback, delay);
239
- },
240
- T1Y(batchSeries, _ticker, at, lookback, delay) {
241
- return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T1Y'], leverage: 1 }, at, lookback, delay);
242
- },
243
- T2Y(batchSeries, _ticker, at, lookback, delay) {
244
- return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T2Y'], leverage: 1 }, at, lookback, delay);
245
- },
246
- T3Y(batchSeries, _ticker, at, lookback, delay) {
247
- return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T3Y'], leverage: 1 }, at, lookback, delay);
248
- },
249
- T5Y(batchSeries, _ticker, at, lookback, delay) {
250
- return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T5Y'], leverage: 1 }, at, lookback, delay);
251
- },
252
- T7Y(batchSeries, _ticker, at, lookback, delay) {
253
- return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T7Y'], leverage: 1 }, at, lookback, delay);
254
- },
255
- T10Y(batchSeries, _ticker, at, lookback, delay) {
256
- return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T10Y'], leverage: 1 }, at, lookback, delay);
257
- },
258
- T20Y(batchSeries, _ticker, at, lookback, delay) {
259
- return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T20Y'], leverage: 1 }, at, lookback, delay);
260
- },
261
- T30Y(batchSeries, _ticker, at, lookback, delay) {
262
- return INDICATOR_FNS.Price(batchSeries, { symbol: symbols_1.INDICATOR_SYMBOL_MAP['T30Y'], leverage: 1 }, at, lookback, delay);
263
- },
264
- Month(_batchSeries, _ticker, at, _lookback, delay) {
265
- const date = new Date(at.getTime() - delay * 24 * 60 * 60 * 1000);
266
- return makeResult(date, date.getUTCMonth() + 1);
267
- },
268
- 'Day of Week'(_batchSeries, _ticker, at, _lookback, delay) {
269
- const date = new Date(at.getTime() - delay * 24 * 60 * 60 * 1000);
270
- return makeResult(date, date.getUTCDay());
271
- },
272
- 'Day of Month'(_batchSeries, _ticker, at, _lookback, delay) {
273
- const date = new Date(at.getTime() - delay * 24 * 60 * 60 * 1000);
274
- return makeResult(date, date.getUTCDate());
275
- },
276
- 'Day of Year'(_batchSeries, _ticker, at, _lookback, delay) {
277
- const date = new Date(at.getTime() - delay * 24 * 60 * 60 * 1000);
278
- const utcDate = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
279
- const utcYearStart = Date.UTC(date.getUTCFullYear(), 0, 0);
280
- const dayOfYear = (utcDate - utcYearStart) / (24 * 60 * 60 * 1000);
281
- return makeResult(date, dayOfYear);
282
- },
283
- Threshold() {
284
- throw new Error('Threshold should not be evaluated as an indicator function.');
285
- },
286
- };
287
- // ---------------------------------------------------------------------------
288
- // Public evaluation functions
289
- // ---------------------------------------------------------------------------
290
- function evaluateIndicator(indicator, options) {
291
- if (indicator.type === 'Threshold') {
292
- return makeResult(options.at, indicator.threshold);
293
- }
294
- const delay = indicator.delay;
295
- // Pre-filter series by trading calendar when provided
296
- const batchSeries = options.tradingDays
297
- ? filterBatchSeries(options.batchSeries, options.tradingDays)
298
- : options.batchSeries;
299
- // Temporal indicators don't depend on series
300
- if (['Month', 'Day of Week', 'Day of Month', 'Day of Year'].includes(indicator.type)) {
301
- return INDICATOR_FNS[indicator.type](batchSeries, indicator.ticker, options.at, indicator.lookback, delay);
302
- }
303
- // Get previous metadata for incremental evaluation
304
- const key = indicatorKey(indicator);
305
- const prevMeta = options.previousIndicatorMetadata?.[key];
306
- return INDICATOR_FNS[indicator.type](batchSeries, indicator.ticker, options.at, indicator.lookback, delay, prevMeta);
307
- }
308
- function evaluateSignal(signal, options) {
309
- const left = evaluateIndicator(signal.left, options);
310
- const right = evaluateIndicator(signal.right, options);
311
- const tolerance = signal.tolerance ?? 0;
312
- const rawToleranceDelta = signal.left.unit === '%' ? tolerance : Math.abs(right.value) * (tolerance / 100);
313
- const toleranceDelta = Number.isFinite(rawToleranceDelta) ? Math.abs(rawToleranceDelta) : 0;
314
- const lowerBound = Math.min(right.value - toleranceDelta, right.value + toleranceDelta);
315
- const upperBound = Math.max(right.value - toleranceDelta, right.value + toleranceDelta);
316
- const comparison = signal.comparison;
317
- if (comparison === '=') {
318
- return lowerBound <= left.value && left.value <= upperBound;
319
- }
320
- // Cold start: if no prior state exists for this signal, evaluate strict comparator.
321
- const key = signalKey(signal);
322
- const previous = options.previousSignalStates?.[key];
323
- const hasPrevious = previous !== undefined;
324
- // Zero tolerance means no dead band; preserve strict legacy behavior.
325
- if (!hasPrevious || toleranceDelta === 0) {
326
- return comparison === '>' ? left.value > right.value : left.value < right.value;
327
- }
328
- if (comparison === '>') {
329
- return previous
330
- ? left.value >= lowerBound // stay true inside band; turn off only fully below
331
- : left.value > upperBound; // turn on only after fully crossing above
332
- }
333
- else {
334
- return previous
335
- ? left.value <= upperBound // stay true inside band; turn off only fully above
336
- : left.value < lowerBound; // turn on only after fully crossing below
337
- }
338
- }
339
- function evaluateAllocation(allocation, options) {
340
- return evaluateCondition(allocation.condition, options);
341
- }
342
- function evaluateCondition(condition, options) {
343
- switch (condition.kind) {
344
- case 'or':
345
- return condition.args.some((andExpr) => evaluateCondition(andExpr, options));
346
- case 'and':
347
- return condition.args.every((unaryExpr) => evaluateCondition(unaryExpr, options));
348
- case 'not':
349
- return !evaluateSignal(condition.signal, options);
350
- case 'signal':
351
- return evaluateSignal(condition.signal, options);
352
- }
353
- }
354
- function evaluate(strategy, options) {
355
- const allSignals = getAllSignalsFromStrategy(strategy);
356
- const indicatorsMap = new Map();
357
- const indicatorsOrder = [];
358
- for (const signal of allSignals) {
359
- for (const ind of [signal.left, signal.right]) {
360
- const key = indicatorKey(ind);
361
- if (indicatorsMap.has(key))
362
- continue;
363
- const res = evaluateIndicator(ind, options);
364
- indicatorsMap.set(key, res);
365
- indicatorsOrder.push(key);
366
- }
367
- }
368
- const indicators = {};
369
- for (const k of indicatorsOrder)
370
- indicators[k] = indicatorsMap.get(k);
371
- const signals = {};
372
- for (const signal of allSignals) {
373
- signals[signalKey(signal)] = evaluateSignal(signal, options);
374
- }
375
- // Find first matching allocation (insertion order = priority order from DB)
376
- const allocationEntries = Object.entries(strategy.allocations);
377
- const lastEntry = allocationEntries[allocationEntries.length - 1];
378
- let winningName = lastEntry[0];
379
- let winningAllocation = lastEntry[1];
380
- for (const [name, allocation] of allocationEntries) {
381
- if (evaluateConditionWithSignalValues(allocation.condition, signals)) {
382
- winningName = name;
383
- winningAllocation = allocation;
384
- break;
385
- }
386
- }
387
- const asOf = getEvaluationDate(strategy.trading, options);
388
- return {
389
- allocation: {
390
- name: winningName,
391
- holdings: winningAllocation.holdings,
392
- },
393
- asOf,
394
- signals,
395
- indicators,
396
- };
397
- }
398
- function evaluateConditionWithSignalValues(condition, signalValues) {
399
- switch (condition.kind) {
400
- case 'or':
401
- return condition.args.some((andExpr) => evaluateConditionWithSignalValues(andExpr, signalValues));
402
- case 'and':
403
- return condition.args.every((unaryExpr) => evaluateConditionWithSignalValues(unaryExpr, signalValues));
404
- case 'not':
405
- return !(signalValues[signalKey(condition.signal)] ?? false);
406
- case 'signal':
407
- return signalValues[signalKey(condition.signal)] ?? false;
408
- }
409
- }
410
- // ---------------------------------------------------------------------------
411
- // Helpers
412
- // ---------------------------------------------------------------------------
413
- function getAllSignalsFromStrategy(strategy) {
414
- const seen = new Set();
415
- const out = [];
416
- for (const allocation of Object.values(strategy.allocations)) {
417
- for (const s of findAllSignals(allocation.condition)) {
418
- const key = signalKey(s);
419
- if (!seen.has(key)) {
420
- seen.add(key);
421
- out.push(s);
422
- }
423
- }
424
- }
425
- return out;
426
- }
427
- function findAllSignals(condition) {
428
- const signals = [];
429
- const seen = new Set();
430
- function traverse(cond) {
431
- switch (cond.kind) {
432
- case 'or':
433
- cond.args.forEach(traverse);
434
- break;
435
- case 'and':
436
- cond.args.forEach(traverse);
437
- break;
438
- case 'not': {
439
- const key = signalKey(cond.signal);
440
- if (!seen.has(key)) {
441
- seen.add(key);
442
- signals.push(cond.signal);
443
- }
444
- break;
445
- }
446
- case 'signal': {
447
- const key = signalKey(cond.signal);
448
- if (!seen.has(key)) {
449
- seen.add(key);
450
- signals.push(cond.signal);
451
- }
452
- break;
453
- }
454
- }
455
- }
456
- traverse(condition);
457
- return signals;
458
- }
459
- // ---------------------------------------------------------------------------
460
- // Evaluation date (ported from evaluateLatestAllocationDate)
461
- // ---------------------------------------------------------------------------
462
- function getEvaluationDate(trading, options) {
463
- const rawSeries = Object.values(options.batchSeries)[0];
464
- if (!rawSeries || rawSeries.length === 0) {
465
- return options.at;
466
- }
467
- const series = options.tradingDays
468
- ? filterByTradingDays(rawSeries, options.tradingDays)
469
- : rawSeries;
470
- if (series.length === 0)
471
- return options.at;
472
- const internalSeries = toInternalSeries(series);
473
- const latestCloseObs = findLatestMarketCloseObs(internalSeries, options.at);
474
- if (!latestCloseObs) {
475
- return options.at;
476
- }
477
- let { start, end } = getPeriodBounds(latestCloseObs.timestamp, trading.frequency);
478
- let periodObs = findObservationsInPeriod(internalSeries, start, end);
479
- if (trading.frequency !== 'Daily') {
480
- const lastPeriodObs = periodObs.at(-1);
481
- if (lastPeriodObs) {
482
- const lastObsDate = lastPeriodObs.timestamp.toISOString().slice(0, 10);
483
- const endDate = end.toISOString().slice(0, 10);
484
- if (lastObsDate < endDate) {
485
- const prevPeriodDate = new Date(start);
486
- prevPeriodDate.setUTCDate(prevPeriodDate.getUTCDate() - 1);
487
- ({ start, end } = getPeriodBounds(prevPeriodDate, trading.frequency));
488
- periodObs = findObservationsInPeriod(internalSeries, start, end);
489
- }
490
- }
491
- }
492
- const index = periodObs.length - 1 - trading.offset;
493
- if (index < 0) {
494
- return periodObs[0]?.timestamp ?? options.at;
495
- }
496
- return periodObs[index].timestamp;
497
- }
498
- function findLatestMarketCloseObs(series, cutoff) {
499
- for (let i = series.length - 1; i >= 0 && i >= series.length - 100; i--) {
500
- const obs = series[i];
501
- if (obs.timestamp <= cutoff && (0, time_1.isAtMarketClose)(obs.timestamp)) {
502
- return obs;
503
- }
504
- }
505
- return undefined;
506
- }
507
- function findObservationsInPeriod(series, start, end) {
508
- const result = [];
509
- for (let i = series.length - 1; i >= 0; i--) {
510
- const obs = series[i];
511
- if (obs.timestamp < start)
512
- break;
513
- if (obs.timestamp >= start && obs.timestamp <= end && (0, time_1.isAtMarketClose)(obs.timestamp)) {
514
- result.unshift(obs);
515
- }
516
- }
517
- return result;
518
- }
519
- function getPeriodBounds(date, frequency) {
520
- const year = date.getUTCFullYear();
521
- const month = date.getUTCMonth();
522
- const day = date.getUTCDate();
523
- const startOfDayUTC = (y, m, d) => new Date(Date.UTC(y, m, d, 0, 0, 0, 0));
524
- const endOfDayUTC = (y, m, d) => new Date(Date.UTC(y, m, d, 23, 59, 59, 999));
525
- const lastDayOfMonth = (y, m) => new Date(Date.UTC(y, m + 1, 0)).getUTCDate();
526
- switch (frequency) {
527
- case 'Daily':
528
- return { start: startOfDayUTC(year, month, day), end: endOfDayUTC(year, month, day) };
529
- case 'Weekly': {
530
- const dayOfWeek = date.getUTCDay();
531
- const mondayOffset = (dayOfWeek + 6) % 7;
532
- const monday = new Date(Date.UTC(year, month, day - mondayOffset));
533
- const friday = new Date(Date.UTC(monday.getUTCFullYear(), monday.getUTCMonth(), monday.getUTCDate() + 4, 23, 59, 59, 999));
534
- return { start: monday, end: friday };
535
- }
536
- case 'Monthly':
537
- return { start: startOfDayUTC(year, month, 1), end: endOfDayUTC(year, month, lastDayOfMonth(year, month)) };
538
- case 'Bi-monthly': {
539
- const ps = Math.floor(month / 2) * 2;
540
- const pe = ps + 1;
541
- return { start: startOfDayUTC(year, ps, 1), end: endOfDayUTC(year, pe, lastDayOfMonth(year, pe)) };
542
- }
543
- case 'Quarterly': {
544
- const ps = Math.floor(month / 3) * 3;
545
- const pe = ps + 2;
546
- return { start: startOfDayUTC(year, ps, 1), end: endOfDayUTC(year, pe, lastDayOfMonth(year, pe)) };
547
- }
548
- case 'Every 4 Months': {
549
- const ps = Math.floor(month / 4) * 4;
550
- const pe = ps + 3;
551
- return { start: startOfDayUTC(year, ps, 1), end: endOfDayUTC(year, pe, lastDayOfMonth(year, pe)) };
552
- }
553
- case 'Semiannually': {
554
- const ps = Math.floor(month / 6) * 6;
555
- const pe = ps + 5;
556
- return { start: startOfDayUTC(year, ps, 1), end: endOfDayUTC(year, pe, lastDayOfMonth(year, pe)) };
557
- }
558
- case 'Yearly':
559
- return { start: startOfDayUTC(year, 0, 1), end: endOfDayUTC(year, 11, 31) };
560
- }
561
- }
562
- //# sourceMappingURL=evaluate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/strategy/evaluate.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import type { TypedSupabaseClient } from '../types';
2
- import type { Strategy } from './types';
3
- export declare function get(client: TypedSupabaseClient, linkId: string): Promise<Strategy | null>;
4
- export declare function getMany(client: TypedSupabaseClient, linkIds: string[]): Promise<Record<string, Strategy>>;
5
- //# sourceMappingURL=get.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../src/strategy/get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,wBAAsB,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAM/F;AAED,wBAAsB,OAAO,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAU/G"}
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.get = get;
4
- exports.getMany = getMany;
5
- async function get(client, linkId) {
6
- const { data, error } = await client.functions.invoke('strategy', {
7
- body: { linkId },
8
- });
9
- if (error || !data)
10
- return null;
11
- return data;
12
- }
13
- async function getMany(client, linkIds) {
14
- if (linkIds.length === 0)
15
- return {};
16
- const result = {};
17
- const promises = linkIds.map(async (id) => {
18
- const strategy = await get(client, id);
19
- if (strategy)
20
- result[id] = strategy;
21
- });
22
- await Promise.all(promises);
23
- return result;
24
- }
25
- //# sourceMappingURL=get.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/strategy/get.ts"],"names":[],"mappings":";;AAGA,kBAMC;AAED,0BAUC;AAlBM,KAAK,UAAU,GAAG,CAAC,MAA2B,EAAE,MAAc;IACnE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE;QAChE,IAAI,EAAE,EAAE,MAAM,EAAE;KACjB,CAAC,CAAC;IACH,IAAI,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,IAAgB,CAAC;AAC1B,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,MAA2B,EAAE,OAAiB;IAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,QAAQ;YAAE,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;IACtC,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC"}