@livefolio/sdk 0.2.12 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +277 -84
- package/dist/index.d.ts +397 -23
- package/dist/index.js +1375 -51
- package/dist/index.js.map +1 -1
- package/package.json +36 -35
- package/dist/auth/client.d.ts +0 -4
- package/dist/auth/client.d.ts.map +0 -1
- package/dist/auth/client.js +0 -37
- package/dist/auth/client.js.map +0 -1
- package/dist/auth/index.d.ts +0 -3
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -6
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/types.d.ts +0 -9
- package/dist/auth/types.d.ts.map +0 -1
- package/dist/auth/types.js +0 -3
- package/dist/auth/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/market/client.d.ts +0 -4
- package/dist/market/client.d.ts.map +0 -1
- package/dist/market/client.js +0 -137
- package/dist/market/client.js.map +0 -1
- package/dist/market/index.d.ts +0 -5
- package/dist/market/index.d.ts.map +0 -1
- package/dist/market/index.js +0 -9
- package/dist/market/index.js.map +0 -1
- package/dist/market/trackedTickers.d.ts +0 -4
- package/dist/market/trackedTickers.d.ts.map +0 -1
- package/dist/market/trackedTickers.js +0 -256
- package/dist/market/trackedTickers.js.map +0 -1
- package/dist/market/types.d.ts +0 -29
- package/dist/market/types.d.ts.map +0 -1
- package/dist/market/types.js +0 -3
- package/dist/market/types.js.map +0 -1
- package/dist/portfolio/client.d.ts +0 -4
- package/dist/portfolio/client.d.ts.map +0 -1
- package/dist/portfolio/client.js +0 -13
- package/dist/portfolio/client.js.map +0 -1
- package/dist/portfolio/index.d.ts +0 -5
- package/dist/portfolio/index.d.ts.map +0 -1
- package/dist/portfolio/index.js +0 -26
- package/dist/portfolio/index.js.map +0 -1
- package/dist/portfolio/rebalance.d.ts +0 -62
- package/dist/portfolio/rebalance.d.ts.map +0 -1
- package/dist/portfolio/rebalance.js +0 -205
- package/dist/portfolio/rebalance.js.map +0 -1
- package/dist/portfolio/symbols.d.ts +0 -13
- package/dist/portfolio/symbols.d.ts.map +0 -1
- package/dist/portfolio/symbols.js +0 -112
- package/dist/portfolio/symbols.js.map +0 -1
- package/dist/portfolio/types.d.ts +0 -13
- package/dist/portfolio/types.d.ts.map +0 -1
- package/dist/portfolio/types.js +0 -3
- package/dist/portfolio/types.js.map +0 -1
- package/dist/strategy/backtest.d.ts +0 -6
- package/dist/strategy/backtest.d.ts.map +0 -1
- package/dist/strategy/backtest.js +0 -698
- package/dist/strategy/backtest.js.map +0 -1
- package/dist/strategy/cache.d.ts +0 -8
- package/dist/strategy/cache.d.ts.map +0 -1
- package/dist/strategy/cache.js +0 -314
- package/dist/strategy/cache.js.map +0 -1
- package/dist/strategy/client.d.ts +0 -4
- package/dist/strategy/client.d.ts.map +0 -1
- package/dist/strategy/client.js +0 -29
- package/dist/strategy/client.js.map +0 -1
- package/dist/strategy/evaluate.d.ts +0 -10
- package/dist/strategy/evaluate.d.ts.map +0 -1
- package/dist/strategy/evaluate.js +0 -528
- package/dist/strategy/evaluate.js.map +0 -1
- package/dist/strategy/get.d.ts +0 -5
- package/dist/strategy/get.d.ts.map +0 -1
- package/dist/strategy/get.js +0 -25
- package/dist/strategy/get.js.map +0 -1
- package/dist/strategy/index.d.ts +0 -14
- package/dist/strategy/index.d.ts.map +0 -1
- package/dist/strategy/index.js +0 -42
- package/dist/strategy/index.js.map +0 -1
- package/dist/strategy/livefolio.d.ts +0 -25
- package/dist/strategy/livefolio.d.ts.map +0 -1
- package/dist/strategy/livefolio.js +0 -67
- package/dist/strategy/livefolio.js.map +0 -1
- package/dist/strategy/performance.d.ts +0 -17
- package/dist/strategy/performance.d.ts.map +0 -1
- package/dist/strategy/performance.js +0 -57
- package/dist/strategy/performance.js.map +0 -1
- package/dist/strategy/rules.d.ts +0 -3
- package/dist/strategy/rules.d.ts.map +0 -1
- package/dist/strategy/rules.js +0 -95
- package/dist/strategy/rules.js.map +0 -1
- package/dist/strategy/stream.d.ts +0 -5
- package/dist/strategy/stream.d.ts.map +0 -1
- package/dist/strategy/stream.js +0 -58
- package/dist/strategy/stream.js.map +0 -1
- package/dist/strategy/symbols.d.ts +0 -4
- package/dist/strategy/symbols.d.ts.map +0 -1
- package/dist/strategy/symbols.js +0 -41
- package/dist/strategy/symbols.js.map +0 -1
- package/dist/strategy/time.d.ts +0 -9
- package/dist/strategy/time.d.ts.map +0 -1
- package/dist/strategy/time.js +0 -28
- package/dist/strategy/time.js.map +0 -1
- package/dist/strategy/types.d.ts +0 -200
- package/dist/strategy/types.d.ts.map +0 -1
- package/dist/strategy/types.js +0 -3
- package/dist/strategy/types.js.map +0 -1
- package/dist/types.d.ts +0 -4
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,23 +1,397 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
1
|
+
interface MarketProvider {
|
|
2
|
+
fetchBars(symbol: string, from?: string): Promise<DailyBar[]>;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
type IndicatorType = 'Price' | 'SMA' | 'EMA' | 'RSI' | 'Return' | 'Volatility' | 'Drawdown' | 'VIX' | 'VIX3M' | 'T3M' | 'T6M' | 'T1Y' | 'T2Y' | 'T3Y' | 'T5Y' | 'T7Y' | 'T10Y' | 'T20Y' | 'T30Y' | 'Month' | 'Day of Week' | 'Day of Month' | 'Day of Year' | 'Threshold';
|
|
6
|
+
type TradingFreq = 'Daily' | 'Weekly' | 'Monthly' | 'Bi-monthly' | 'Quarterly' | 'Every 4 Months' | 'Semiannually' | 'Yearly';
|
|
7
|
+
type Comparison = '>' | '<' | '=';
|
|
8
|
+
type Unit = '%' | 'bps' | 'std';
|
|
9
|
+
interface StrategySeriesEntry {
|
|
10
|
+
date: string;
|
|
11
|
+
allocationId: number;
|
|
12
|
+
}
|
|
13
|
+
interface StrategyRuleDefinition {
|
|
14
|
+
signalIds?: number[];
|
|
15
|
+
allocationId: number;
|
|
16
|
+
}
|
|
17
|
+
interface StrategyDefinition {
|
|
18
|
+
linkId: string;
|
|
19
|
+
name: string;
|
|
20
|
+
freq: TradingFreq;
|
|
21
|
+
offset: number;
|
|
22
|
+
rules: StrategyRuleDefinition[];
|
|
23
|
+
}
|
|
24
|
+
interface StrategyReferenceData {
|
|
25
|
+
id: number;
|
|
26
|
+
name: string;
|
|
27
|
+
freq: TradingFreq;
|
|
28
|
+
offset: number;
|
|
29
|
+
rules: {
|
|
30
|
+
signals: {
|
|
31
|
+
id: number;
|
|
32
|
+
indicatorId1: number;
|
|
33
|
+
indicatorId2: number;
|
|
34
|
+
comparison: Comparison;
|
|
35
|
+
tolerance: number;
|
|
36
|
+
}[];
|
|
37
|
+
allocations: {
|
|
38
|
+
id: number;
|
|
39
|
+
holdings: Record<string, number>;
|
|
40
|
+
}[];
|
|
41
|
+
indicators: {
|
|
42
|
+
id: number;
|
|
43
|
+
type: IndicatorType;
|
|
44
|
+
tickerId: number | null;
|
|
45
|
+
lookback: number;
|
|
46
|
+
delay: number;
|
|
47
|
+
unit: Unit | null;
|
|
48
|
+
threshold: number | null;
|
|
49
|
+
}[];
|
|
50
|
+
tickers: {
|
|
51
|
+
id: number;
|
|
52
|
+
symbol: string;
|
|
53
|
+
leverage: number;
|
|
54
|
+
}[];
|
|
55
|
+
definition: StrategyRuleDefinition[];
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
declare class TickerHandle {
|
|
60
|
+
readonly symbol: string;
|
|
61
|
+
readonly leverage: number;
|
|
62
|
+
private _storage;
|
|
63
|
+
private _resolvedId;
|
|
64
|
+
private _resolving;
|
|
65
|
+
constructor(storage: StorageProvider, symbol: string, leverage?: number);
|
|
66
|
+
get id(): number;
|
|
67
|
+
resolve(): Promise<{
|
|
68
|
+
id: number;
|
|
69
|
+
}>;
|
|
70
|
+
static fromResolved(storage: StorageProvider, id: number, symbol: string, leverage: number): TickerHandle;
|
|
71
|
+
private _doResolve;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
interface DailyBar {
|
|
75
|
+
date: string;
|
|
76
|
+
value: number;
|
|
77
|
+
}
|
|
78
|
+
interface IndicatorIdentity {
|
|
79
|
+
type: IndicatorType;
|
|
80
|
+
ticker: TickerHandle | null;
|
|
81
|
+
lookback: number;
|
|
82
|
+
delay: number;
|
|
83
|
+
unit: Unit | null;
|
|
84
|
+
threshold: number | null;
|
|
85
|
+
}
|
|
86
|
+
interface DateRange {
|
|
87
|
+
from?: string;
|
|
88
|
+
to?: string;
|
|
89
|
+
}
|
|
90
|
+
declare class IndicatorHandle {
|
|
91
|
+
readonly type: IndicatorType;
|
|
92
|
+
readonly ticker: TickerHandle | null;
|
|
93
|
+
readonly lookback: number;
|
|
94
|
+
readonly delay: number;
|
|
95
|
+
readonly unit: Unit | null;
|
|
96
|
+
readonly threshold: number | null;
|
|
97
|
+
private _storage;
|
|
98
|
+
private _market;
|
|
99
|
+
private _resolvedId;
|
|
100
|
+
private _resolving;
|
|
101
|
+
private _cachedSeries;
|
|
102
|
+
private _cachedAsOf;
|
|
103
|
+
private _syncing;
|
|
104
|
+
constructor(storage: StorageProvider, market: MarketProvider, identity: IndicatorIdentity);
|
|
105
|
+
get id(): number;
|
|
106
|
+
resolve(): Promise<{
|
|
107
|
+
id: number;
|
|
108
|
+
}>;
|
|
109
|
+
static fromResolved(storage: StorageProvider, market: MarketProvider, id: number, identity: IndicatorIdentity): IndicatorHandle;
|
|
110
|
+
private _doResolve;
|
|
111
|
+
private _getLatestClosedTradingDay;
|
|
112
|
+
private _getLatestSeriesDate;
|
|
113
|
+
private _ensureFresh;
|
|
114
|
+
private _sync;
|
|
115
|
+
private _upsertSeries;
|
|
116
|
+
private _querySeriesFromDb;
|
|
117
|
+
series(range?: DateRange): Promise<DailyBar[]>;
|
|
118
|
+
private _syntheticThresholdSeries;
|
|
119
|
+
value(date?: string): Promise<number | null>;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
interface StorageProvider {
|
|
123
|
+
tickers: {
|
|
124
|
+
upsert(symbol: string, leverage: number): Promise<{
|
|
125
|
+
id: number;
|
|
126
|
+
}>;
|
|
127
|
+
findOrCreate(symbol: string, leverage: number): Promise<{
|
|
128
|
+
id: number;
|
|
129
|
+
}>;
|
|
130
|
+
};
|
|
131
|
+
indicators: {
|
|
132
|
+
upsert(identity: {
|
|
133
|
+
type: string;
|
|
134
|
+
tickerId: number | null;
|
|
135
|
+
lookback: number;
|
|
136
|
+
delay: number;
|
|
137
|
+
unit: string | null;
|
|
138
|
+
threshold: number | null;
|
|
139
|
+
}): Promise<{
|
|
140
|
+
id: number;
|
|
141
|
+
}>;
|
|
142
|
+
findOrCreate(identity: {
|
|
143
|
+
type: string;
|
|
144
|
+
tickerId: number | null;
|
|
145
|
+
lookback: number;
|
|
146
|
+
delay: number;
|
|
147
|
+
unit: string | null;
|
|
148
|
+
threshold: number | null;
|
|
149
|
+
}): Promise<{
|
|
150
|
+
id: number;
|
|
151
|
+
}>;
|
|
152
|
+
getSeries(indicatorId: number, range?: DateRange): Promise<DailyBar[]>;
|
|
153
|
+
writeSeries(indicatorId: number, bars: DailyBar[]): Promise<void>;
|
|
154
|
+
getLatestSeriesDate(indicatorId: number): Promise<string | null>;
|
|
155
|
+
getValue(indicatorId: number, date?: string): Promise<number | null>;
|
|
156
|
+
};
|
|
157
|
+
signals: {
|
|
158
|
+
upsert(identity: {
|
|
159
|
+
indicatorId1: number;
|
|
160
|
+
indicatorId2: number;
|
|
161
|
+
comparison: string;
|
|
162
|
+
tolerance: number;
|
|
163
|
+
}): Promise<{
|
|
164
|
+
id: number;
|
|
165
|
+
}>;
|
|
166
|
+
findOrCreate(identity: {
|
|
167
|
+
indicatorId1: number;
|
|
168
|
+
indicatorId2: number;
|
|
169
|
+
comparison: string;
|
|
170
|
+
tolerance: number;
|
|
171
|
+
}): Promise<{
|
|
172
|
+
id: number;
|
|
173
|
+
}>;
|
|
174
|
+
getSeries(signalId: number, range?: DateRange): Promise<DailyBar[]>;
|
|
175
|
+
writeSeries(signalId: number, bars: DailyBar[]): Promise<void>;
|
|
176
|
+
getLatestSeriesDate(signalId: number): Promise<string | null>;
|
|
177
|
+
getLastValue(signalId: number): Promise<number | null>;
|
|
178
|
+
};
|
|
179
|
+
allocations: {
|
|
180
|
+
findOrCreate(holdings: Record<string, number>): Promise<{
|
|
181
|
+
id: number;
|
|
182
|
+
}>;
|
|
183
|
+
};
|
|
184
|
+
strategies: {
|
|
185
|
+
create(definition: StrategyDefinition): Promise<{
|
|
186
|
+
id: number;
|
|
187
|
+
}>;
|
|
188
|
+
getSeries(strategyId: number, range?: DateRange): Promise<StrategySeriesEntry[]>;
|
|
189
|
+
writeSeries(strategyId: number, entries: StrategySeriesEntry[]): Promise<void>;
|
|
190
|
+
getLatestSeriesDate(strategyId: number): Promise<string | null>;
|
|
191
|
+
resolveReference(linkId: string): Promise<StrategyReferenceData>;
|
|
192
|
+
};
|
|
193
|
+
tradingDays: {
|
|
194
|
+
getRange(range?: DateRange): Promise<string[]>;
|
|
195
|
+
getLatestClosed(): Promise<string | null>;
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
interface SignalIdentity {
|
|
200
|
+
indicator1: IndicatorHandle;
|
|
201
|
+
indicator2: IndicatorHandle;
|
|
202
|
+
comparison: Comparison;
|
|
203
|
+
tolerance: number;
|
|
204
|
+
}
|
|
205
|
+
declare class SignalHandle {
|
|
206
|
+
readonly indicator1: IndicatorHandle;
|
|
207
|
+
readonly indicator2: IndicatorHandle;
|
|
208
|
+
readonly comparison: Comparison;
|
|
209
|
+
readonly tolerance: number;
|
|
210
|
+
private _storage;
|
|
211
|
+
private _market;
|
|
212
|
+
private _resolvedId;
|
|
213
|
+
private _resolving;
|
|
214
|
+
private _cachedSeries;
|
|
215
|
+
private _cachedAsOf;
|
|
216
|
+
private _syncing;
|
|
217
|
+
constructor(storage: StorageProvider, market: MarketProvider, identity: SignalIdentity);
|
|
218
|
+
get id(): number;
|
|
219
|
+
resolve(): Promise<{
|
|
220
|
+
id: number;
|
|
221
|
+
}>;
|
|
222
|
+
static fromResolved(storage: StorageProvider, market: MarketProvider, id: number, identity: SignalIdentity): SignalHandle;
|
|
223
|
+
private _doResolve;
|
|
224
|
+
private _getLatestClosedTradingDay;
|
|
225
|
+
private _getLatestSignalSeriesDate;
|
|
226
|
+
private _getLastSignalValue;
|
|
227
|
+
private _ensureFresh;
|
|
228
|
+
private _sync;
|
|
229
|
+
private _upsertSeries;
|
|
230
|
+
private _querySeriesFromDb;
|
|
231
|
+
series(range?: DateRange): Promise<DailyBar[]>;
|
|
232
|
+
value(date?: string): Promise<number | null>;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
declare class AllocationHandle {
|
|
236
|
+
readonly holdings: [TickerHandle, number][];
|
|
237
|
+
private _storage;
|
|
238
|
+
private _resolvedId;
|
|
239
|
+
private _resolving;
|
|
240
|
+
constructor(storage: StorageProvider, holdings: [TickerHandle, number][]);
|
|
241
|
+
get id(): number;
|
|
242
|
+
resolve(): Promise<{
|
|
243
|
+
id: number;
|
|
244
|
+
}>;
|
|
245
|
+
static fromResolved(storage: StorageProvider, id: number, holdings: [TickerHandle, number][]): AllocationHandle;
|
|
246
|
+
private _doResolve;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
declare class PortfolioHandle {
|
|
250
|
+
readonly holdings: [TickerHandle, number][];
|
|
251
|
+
constructor(holdings: [TickerHandle, number][]);
|
|
252
|
+
private _priceMap;
|
|
253
|
+
private _priceFor;
|
|
254
|
+
value(prices: [TickerHandle, number][]): number;
|
|
255
|
+
weights(prices: [TickerHandle, number][]): [TickerHandle, number][];
|
|
256
|
+
trades(target: AllocationHandle, prices: [TickerHandle, number][], date: string): Trade[];
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
interface SimulateOptions {
|
|
260
|
+
from: string;
|
|
261
|
+
to: string;
|
|
262
|
+
portfolio: PortfolioHandle;
|
|
263
|
+
}
|
|
264
|
+
interface Trade {
|
|
265
|
+
date: string;
|
|
266
|
+
symbol: string;
|
|
267
|
+
quantity: number;
|
|
268
|
+
price: number;
|
|
269
|
+
action: 'buy' | 'sell';
|
|
270
|
+
}
|
|
271
|
+
interface PortfolioSnapshot {
|
|
272
|
+
value: number;
|
|
273
|
+
holdings: [TickerHandle, number][];
|
|
274
|
+
weights: [TickerHandle, number][];
|
|
275
|
+
pendingTrades: Trade[];
|
|
276
|
+
}
|
|
277
|
+
interface FinalState {
|
|
278
|
+
portfolio: PortfolioHandle;
|
|
279
|
+
allocation: AllocationHandle;
|
|
280
|
+
closePrices: Record<string, number>;
|
|
281
|
+
leveragedPrices: Record<string, number>;
|
|
282
|
+
}
|
|
283
|
+
declare class SimulationHandle {
|
|
284
|
+
readonly series: DailyBar[];
|
|
285
|
+
readonly trades: Trade[];
|
|
286
|
+
readonly startingPortfolio: PortfolioHandle;
|
|
287
|
+
private _portfolio;
|
|
288
|
+
private _currentAllocation;
|
|
289
|
+
private _lastClosePrices;
|
|
290
|
+
private _lastLeveragedPrices;
|
|
291
|
+
private _currentLeveragedPrices;
|
|
292
|
+
private _lastDate;
|
|
293
|
+
constructor(series: DailyBar[], trades: Trade[], startingPortfolio: PortfolioHandle, finalState?: FinalState);
|
|
294
|
+
push(...prices: [TickerHandle, number][]): PortfolioSnapshot;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
interface StrategyRule {
|
|
298
|
+
when?: SignalHandle[];
|
|
299
|
+
hold: AllocationHandle;
|
|
300
|
+
}
|
|
301
|
+
interface StrategyBar {
|
|
302
|
+
date: string;
|
|
303
|
+
allocation: AllocationHandle;
|
|
304
|
+
}
|
|
305
|
+
interface StrategyOptions {
|
|
306
|
+
name: string;
|
|
307
|
+
freq?: TradingFreq;
|
|
308
|
+
offset?: number;
|
|
309
|
+
rules: StrategyRule[];
|
|
310
|
+
}
|
|
311
|
+
declare class StrategyHandle {
|
|
312
|
+
private _linkId;
|
|
313
|
+
private _name;
|
|
314
|
+
private _freq;
|
|
315
|
+
private _offset;
|
|
316
|
+
private _rules;
|
|
317
|
+
private _storage;
|
|
318
|
+
private _market;
|
|
319
|
+
private _resolvedId;
|
|
320
|
+
private _resolvedLinkId;
|
|
321
|
+
private _resolving;
|
|
322
|
+
private _allocationMap;
|
|
323
|
+
private _cache;
|
|
324
|
+
private _cachedAsOf;
|
|
325
|
+
private _syncing;
|
|
326
|
+
constructor(storage: StorageProvider, market: MarketProvider, optionsOrLinkId: StrategyOptions | string);
|
|
327
|
+
get id(): number;
|
|
328
|
+
get link(): string;
|
|
329
|
+
get name(): string | null;
|
|
330
|
+
get freq(): TradingFreq;
|
|
331
|
+
get offset(): number;
|
|
332
|
+
get rules(): StrategyRule[];
|
|
333
|
+
resolve(): Promise<{
|
|
334
|
+
id: number;
|
|
335
|
+
}>;
|
|
336
|
+
private _doResolveCreate;
|
|
337
|
+
private _doResolveReference;
|
|
338
|
+
private _getLatestClosedTradingDay;
|
|
339
|
+
private _getLatestStrategySeriesDate;
|
|
340
|
+
private _ensureFresh;
|
|
341
|
+
private _sync;
|
|
342
|
+
private _querySeriesFromDb;
|
|
343
|
+
series(range?: DateRange): Promise<StrategyBar[]>;
|
|
344
|
+
value(date?: string): Promise<AllocationHandle | null>;
|
|
345
|
+
simulate(options: SimulateOptions): Promise<SimulationHandle>;
|
|
346
|
+
private _fetchPricesForTickers;
|
|
347
|
+
private _fetchRawClosePrices;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
type TreasuryTenor = Extract<IndicatorType, 'T3M' | 'T6M' | 'T1Y' | 'T2Y' | 'T3Y' | 'T5Y' | 'T7Y' | 'T10Y' | 'T20Y' | 'T30Y'>;
|
|
351
|
+
type CalendarPeriod = Extract<IndicatorType, 'Month' | 'Day of Week' | 'Day of Month' | 'Day of Year'>;
|
|
352
|
+
interface IndicatorOpts {
|
|
353
|
+
delay?: number;
|
|
354
|
+
}
|
|
355
|
+
interface LivefolioClient {
|
|
356
|
+
ticker(symbol: string, leverage?: number): TickerHandle;
|
|
357
|
+
sma(ticker: TickerHandle, lookback: number, opts?: IndicatorOpts): IndicatorHandle;
|
|
358
|
+
ema(ticker: TickerHandle, lookback: number, opts?: IndicatorOpts): IndicatorHandle;
|
|
359
|
+
price(ticker: TickerHandle, opts?: IndicatorOpts): IndicatorHandle;
|
|
360
|
+
returns(ticker: TickerHandle, lookback: number, opts?: IndicatorOpts): IndicatorHandle;
|
|
361
|
+
volatility(ticker: TickerHandle, lookback: number, opts?: IndicatorOpts): IndicatorHandle;
|
|
362
|
+
drawdown(ticker: TickerHandle, lookback: number, opts?: IndicatorOpts): IndicatorHandle;
|
|
363
|
+
rsi(ticker: TickerHandle, lookback: number, opts?: IndicatorOpts): IndicatorHandle;
|
|
364
|
+
vix(opts?: IndicatorOpts): IndicatorHandle;
|
|
365
|
+
vix3m(opts?: IndicatorOpts): IndicatorHandle;
|
|
366
|
+
treasury(tenor: TreasuryTenor, opts?: IndicatorOpts): IndicatorHandle;
|
|
367
|
+
calendar(period: CalendarPeriod, opts?: IndicatorOpts): IndicatorHandle;
|
|
368
|
+
threshold(value: number, unit?: Unit): IndicatorHandle;
|
|
369
|
+
gt(ind1: IndicatorHandle, ind2: IndicatorHandle, tolerance?: number): SignalHandle;
|
|
370
|
+
lt(ind1: IndicatorHandle, ind2: IndicatorHandle, tolerance?: number): SignalHandle;
|
|
371
|
+
eq(ind1: IndicatorHandle, ind2: IndicatorHandle, tolerance?: number): SignalHandle;
|
|
372
|
+
allocation(...holdings: [TickerHandle, number][]): AllocationHandle;
|
|
373
|
+
portfolio(...holdings: [TickerHandle, number][]): PortfolioHandle;
|
|
374
|
+
strategy(linkId: string): StrategyHandle;
|
|
375
|
+
strategy(options: StrategyOptions): StrategyHandle;
|
|
376
|
+
strategy(optionsOrLinkId: string | StrategyOptions): StrategyHandle;
|
|
377
|
+
}
|
|
378
|
+
interface LivefolioClientOptions {
|
|
379
|
+
storage: StorageProvider;
|
|
380
|
+
market: MarketProvider;
|
|
381
|
+
}
|
|
382
|
+
declare function createClient(options: LivefolioClientOptions): LivefolioClient;
|
|
383
|
+
|
|
384
|
+
type StreamStatus = 'connected' | 'disconnected' | 'reconnecting';
|
|
385
|
+
interface PriceStream {
|
|
386
|
+
subscribe(...symbols: string[]): void;
|
|
387
|
+
unsubscribe(...symbols: string[]): void;
|
|
388
|
+
on(event: 'tick', cb: (symbol: string, price: number, time: string) => void): void;
|
|
389
|
+
on(event: 'status', cb: (status: StreamStatus) => void): void;
|
|
390
|
+
on(event: 'error', cb: (error: Error) => void): void;
|
|
391
|
+
off(event: 'tick', cb: (symbol: string, price: number, time: string) => void): void;
|
|
392
|
+
off(event: 'status', cb: (status: StreamStatus) => void): void;
|
|
393
|
+
off(event: 'error', cb: (error: Error) => void): void;
|
|
394
|
+
close(): void;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
export { AllocationHandle, type Comparison, type DailyBar, type DateRange, IndicatorHandle, type IndicatorIdentity, type IndicatorType, type LivefolioClient, type LivefolioClientOptions, type MarketProvider, PortfolioHandle, type PortfolioSnapshot, type PriceStream, SignalHandle, type SignalIdentity, type SimulateOptions, SimulationHandle, type StorageProvider, type StrategyBar, type StrategyDefinition, StrategyHandle, type StrategyOptions, type StrategyReferenceData, type StrategyRule, type StrategyRuleDefinition, type StrategySeriesEntry, type StreamStatus, TickerHandle, type Trade, type TradingFreq, type Unit, createClient };
|