tickatlas 0.1.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/CHANGELOG.md +57 -0
- package/LICENSE +21 -0
- package/README.md +351 -0
- package/dist/index.cjs +795 -0
- package/dist/index.d.cts +865 -0
- package/dist/index.d.ts +865 -0
- package/dist/index.mjs +768 -0
- package/package.json +74 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,865 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enums & constant catalogues for the TickAtlas API.
|
|
3
|
+
*
|
|
4
|
+
* Every constant object below is exported `as const` so that, in TypeScript,
|
|
5
|
+
* the union of its values is available as a type (see the companion type
|
|
6
|
+
* aliases). All methods that accept these values also accept raw strings, so
|
|
7
|
+
* these objects exist purely for discoverability / autocomplete.
|
|
8
|
+
*
|
|
9
|
+
* Source of truth: SPEC.md §6 ("Common enums & constants").
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Bar timeframes accepted by the indicator / indicators / summary / ohlc /
|
|
13
|
+
* multi / history / screener endpoints. Default everywhere is `H1`.
|
|
14
|
+
*/
|
|
15
|
+
declare const Timeframes: {
|
|
16
|
+
readonly M1: "M1";
|
|
17
|
+
readonly M5: "M5";
|
|
18
|
+
readonly M15: "M15";
|
|
19
|
+
readonly M30: "M30";
|
|
20
|
+
readonly H1: "H1";
|
|
21
|
+
readonly H4: "H4";
|
|
22
|
+
readonly D1: "D1";
|
|
23
|
+
};
|
|
24
|
+
type Timeframe = (typeof Timeframes)[keyof typeof Timeframes];
|
|
25
|
+
/**
|
|
26
|
+
* Timeframes accepted by the heatmap endpoint (note: different set — no
|
|
27
|
+
* intraday below H1, adds W1). Default is `H4`.
|
|
28
|
+
*/
|
|
29
|
+
declare const HeatmapTimeframes: {
|
|
30
|
+
readonly H1: "H1";
|
|
31
|
+
readonly H4: "H4";
|
|
32
|
+
readonly D1: "D1";
|
|
33
|
+
readonly W1: "W1";
|
|
34
|
+
};
|
|
35
|
+
type HeatmapTimeframe = (typeof HeatmapTimeframes)[keyof typeof HeatmapTimeframes];
|
|
36
|
+
/** Symbol categories. */
|
|
37
|
+
declare const SymbolCategories: {
|
|
38
|
+
readonly forex: "forex";
|
|
39
|
+
readonly metals: "metals";
|
|
40
|
+
readonly commodities: "commodities";
|
|
41
|
+
readonly indices: "indices";
|
|
42
|
+
readonly crypto: "crypto";
|
|
43
|
+
readonly stocks: "stocks";
|
|
44
|
+
};
|
|
45
|
+
type SymbolCategory = (typeof SymbolCategories)[keyof typeof SymbolCategories];
|
|
46
|
+
/** Spread statistic periods. Default is `24h`. */
|
|
47
|
+
declare const SpreadPeriods: {
|
|
48
|
+
readonly "1h": "1h";
|
|
49
|
+
readonly "24h": "24h";
|
|
50
|
+
readonly "7d": "7d";
|
|
51
|
+
readonly "30d": "30d";
|
|
52
|
+
};
|
|
53
|
+
type SpreadPeriod = (typeof SpreadPeriods)[keyof typeof SpreadPeriods];
|
|
54
|
+
/** Economic-calendar impact levels. */
|
|
55
|
+
declare const CalendarImpacts: {
|
|
56
|
+
readonly high: "high";
|
|
57
|
+
readonly medium: "medium";
|
|
58
|
+
readonly low: "low";
|
|
59
|
+
};
|
|
60
|
+
type CalendarImpact = (typeof CalendarImpacts)[keyof typeof CalendarImpacts];
|
|
61
|
+
/** Summary market-bias values. */
|
|
62
|
+
declare const Bias: {
|
|
63
|
+
readonly bullish: "bullish";
|
|
64
|
+
readonly bearish: "bearish";
|
|
65
|
+
readonly neutral: "neutral";
|
|
66
|
+
};
|
|
67
|
+
type BiasValue = (typeof Bias)[keyof typeof Bias];
|
|
68
|
+
/** Summary bias strength. */
|
|
69
|
+
declare const BiasStrengths: {
|
|
70
|
+
readonly normal: "normal";
|
|
71
|
+
readonly strong: "strong";
|
|
72
|
+
};
|
|
73
|
+
type BiasStrength = (typeof BiasStrengths)[keyof typeof BiasStrengths];
|
|
74
|
+
/** Heatmap mode. Default is `strength`. */
|
|
75
|
+
declare const HeatmapTypes: {
|
|
76
|
+
readonly strength: "strength";
|
|
77
|
+
readonly correlation: "correlation";
|
|
78
|
+
};
|
|
79
|
+
type HeatmapType = (typeof HeatmapTypes)[keyof typeof HeatmapTypes];
|
|
80
|
+
/** Indicator catalogue categories (used by `getIndicators` filtering). */
|
|
81
|
+
declare const IndicatorCategories: {
|
|
82
|
+
readonly trend: "trend";
|
|
83
|
+
readonly oscillator: "oscillator";
|
|
84
|
+
readonly volatility: "volatility";
|
|
85
|
+
readonly volume: "volume";
|
|
86
|
+
};
|
|
87
|
+
type IndicatorCategory = (typeof IndicatorCategories)[keyof typeof IndicatorCategories];
|
|
88
|
+
/** Account plans. */
|
|
89
|
+
declare const Plans: {
|
|
90
|
+
readonly free: "free";
|
|
91
|
+
readonly trial: "trial";
|
|
92
|
+
readonly starter: "starter";
|
|
93
|
+
readonly pro: "pro";
|
|
94
|
+
readonly enterprise: "enterprise";
|
|
95
|
+
readonly payg: "payg";
|
|
96
|
+
};
|
|
97
|
+
type Plan = (typeof Plans)[keyof typeof Plans];
|
|
98
|
+
/** Screener sort direction. Default is `asc`. */
|
|
99
|
+
declare const SortDirections: {
|
|
100
|
+
readonly asc: "asc";
|
|
101
|
+
readonly desc: "desc";
|
|
102
|
+
};
|
|
103
|
+
type SortDirection = (typeof SortDirections)[keyof typeof SortDirections];
|
|
104
|
+
/**
|
|
105
|
+
* The full, case-sensitive catalogue of 42 indicator identifiers accepted by
|
|
106
|
+
* the API (source of truth: server `INDICATOR_COLUMN_MAP`, SPEC.md §6).
|
|
107
|
+
*
|
|
108
|
+
* Use these verbatim — the docs occasionally use wrong names that 404 (e.g.
|
|
109
|
+
* `Parabolic_SAR`, `Tick_Volume`, `RSI_9`, `EMA_200`). The correct names are
|
|
110
|
+
* `SAR`, `Volumes`; `EMA` stops at `EMA_50`; only three Ichimoku keys exist.
|
|
111
|
+
*/
|
|
112
|
+
declare const Indicators: {
|
|
113
|
+
readonly SMA_10: "SMA_10";
|
|
114
|
+
readonly SMA_20: "SMA_20";
|
|
115
|
+
readonly SMA_50: "SMA_50";
|
|
116
|
+
readonly SMA_100: "SMA_100";
|
|
117
|
+
readonly SMA_200: "SMA_200";
|
|
118
|
+
readonly EMA_10: "EMA_10";
|
|
119
|
+
readonly EMA_20: "EMA_20";
|
|
120
|
+
readonly EMA_50: "EMA_50";
|
|
121
|
+
readonly MACD_main: "MACD_main";
|
|
122
|
+
readonly MACD_signal: "MACD_signal";
|
|
123
|
+
readonly MACD_hist: "MACD_hist";
|
|
124
|
+
readonly ADX: "ADX";
|
|
125
|
+
readonly ADX_plusDI: "ADX_plusDI";
|
|
126
|
+
readonly ADX_minusDI: "ADX_minusDI";
|
|
127
|
+
readonly Ichimoku_tenkan: "Ichimoku_tenkan";
|
|
128
|
+
readonly Ichimoku_kijun: "Ichimoku_kijun";
|
|
129
|
+
readonly Ichimoku_senkou_a: "Ichimoku_senkou_a";
|
|
130
|
+
readonly Alligator_jaw: "Alligator_jaw";
|
|
131
|
+
readonly Alligator_teeth: "Alligator_teeth";
|
|
132
|
+
readonly Alligator_lips: "Alligator_lips";
|
|
133
|
+
readonly SAR: "SAR";
|
|
134
|
+
readonly TEMA_20: "TEMA_20";
|
|
135
|
+
readonly DEMA_20: "DEMA_20";
|
|
136
|
+
readonly RSI_14: "RSI_14";
|
|
137
|
+
readonly Stochastic_K: "Stochastic_K";
|
|
138
|
+
readonly Stochastic_D: "Stochastic_D";
|
|
139
|
+
readonly CCI_14: "CCI_14";
|
|
140
|
+
readonly CCI_20: "CCI_20";
|
|
141
|
+
readonly WilliamsR_14: "WilliamsR_14";
|
|
142
|
+
readonly Momentum_14: "Momentum_14";
|
|
143
|
+
readonly DeMarker_14: "DeMarker_14";
|
|
144
|
+
readonly BB_upper: "BB_upper";
|
|
145
|
+
readonly BB_middle: "BB_middle";
|
|
146
|
+
readonly BB_lower: "BB_lower";
|
|
147
|
+
readonly BB_width: "BB_width";
|
|
148
|
+
readonly ATR_14: "ATR_14";
|
|
149
|
+
readonly ATR_7: "ATR_7";
|
|
150
|
+
readonly StdDev_20: "StdDev_20";
|
|
151
|
+
readonly OBV: "OBV";
|
|
152
|
+
readonly MFI_14: "MFI_14";
|
|
153
|
+
readonly AD: "AD";
|
|
154
|
+
readonly Volumes: "Volumes";
|
|
155
|
+
};
|
|
156
|
+
type Indicator = (typeof Indicators)[keyof typeof Indicators];
|
|
157
|
+
/** Indicators grouped by their catalogue category (4 + total 42). */
|
|
158
|
+
declare const IndicatorsByCategory: {
|
|
159
|
+
readonly trend: readonly ["SMA_10", "SMA_20", "SMA_50", "SMA_100", "SMA_200", "EMA_10", "EMA_20", "EMA_50", "MACD_main", "MACD_signal", "MACD_hist", "ADX", "ADX_plusDI", "ADX_minusDI", "Ichimoku_tenkan", "Ichimoku_kijun", "Ichimoku_senkou_a", "Alligator_jaw", "Alligator_teeth", "Alligator_lips", "SAR", "TEMA_20", "DEMA_20"];
|
|
160
|
+
readonly oscillator: readonly ["RSI_14", "Stochastic_K", "Stochastic_D", "CCI_14", "CCI_20", "WilliamsR_14", "Momentum_14", "DeMarker_14"];
|
|
161
|
+
readonly volatility: readonly ["BB_upper", "BB_middle", "BB_lower", "BB_width", "ATR_14", "ATR_7", "StdDev_20"];
|
|
162
|
+
readonly volume: readonly ["OBV", "MFI_14", "AD", "Volumes"];
|
|
163
|
+
};
|
|
164
|
+
/** Flat, ordered list of all 42 indicator identifiers. */
|
|
165
|
+
declare const ALL_INDICATORS: readonly Indicator[];
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Request-parameter objects and response models for every TickAtlas endpoint.
|
|
169
|
+
*
|
|
170
|
+
* Response models mirror the `data` payloads from SPEC.md §7 (the SDK unwraps
|
|
171
|
+
* the `{ success, data }` envelope and returns the typed `data`). All models
|
|
172
|
+
* tolerate unknown extra keys via index signatures where the API is explicitly
|
|
173
|
+
* forward-compatible; nullable fields use `| null` per the spec.
|
|
174
|
+
*/
|
|
175
|
+
|
|
176
|
+
/** A value that is accepted both as a typed enum member and as a raw string. */
|
|
177
|
+
type Loose$1<T extends string> = T | (string & {});
|
|
178
|
+
/** Standard offset/limit pagination block. */
|
|
179
|
+
interface Pagination {
|
|
180
|
+
offset: number;
|
|
181
|
+
limit: number;
|
|
182
|
+
total: number;
|
|
183
|
+
has_more: boolean;
|
|
184
|
+
}
|
|
185
|
+
interface GetSymbolsOptions {
|
|
186
|
+
category?: Loose$1<SymbolCategory>;
|
|
187
|
+
search?: string;
|
|
188
|
+
offset?: number;
|
|
189
|
+
limit?: number;
|
|
190
|
+
}
|
|
191
|
+
interface SymbolListItem {
|
|
192
|
+
symbol: string;
|
|
193
|
+
name: string | null;
|
|
194
|
+
category: string;
|
|
195
|
+
base_currency: string | null;
|
|
196
|
+
quote_currency: string | null;
|
|
197
|
+
digits: number;
|
|
198
|
+
tradable: boolean;
|
|
199
|
+
}
|
|
200
|
+
interface SymbolsData {
|
|
201
|
+
symbols: SymbolListItem[];
|
|
202
|
+
total: number;
|
|
203
|
+
pagination: Pagination;
|
|
204
|
+
}
|
|
205
|
+
interface TradingHours {
|
|
206
|
+
sunday: string;
|
|
207
|
+
monday: string;
|
|
208
|
+
tuesday: string;
|
|
209
|
+
wednesday: string;
|
|
210
|
+
thursday: string;
|
|
211
|
+
friday: string;
|
|
212
|
+
saturday: string;
|
|
213
|
+
[day: string]: string;
|
|
214
|
+
}
|
|
215
|
+
interface SymbolDetail {
|
|
216
|
+
symbol: string;
|
|
217
|
+
name: string | null;
|
|
218
|
+
category: string;
|
|
219
|
+
description: string | null;
|
|
220
|
+
base_currency: string | null;
|
|
221
|
+
quote_currency: string | null;
|
|
222
|
+
digits: number;
|
|
223
|
+
point: number;
|
|
224
|
+
contract_size: number;
|
|
225
|
+
min_volume: number;
|
|
226
|
+
max_volume: number;
|
|
227
|
+
volume_step: number;
|
|
228
|
+
swap_long: number | null;
|
|
229
|
+
swap_short: number | null;
|
|
230
|
+
margin_currency: string | null;
|
|
231
|
+
trading_hours: TradingHours;
|
|
232
|
+
}
|
|
233
|
+
interface GetQuoteOptions {
|
|
234
|
+
/** Include per-broker `sources[]`. */
|
|
235
|
+
includeSources?: boolean;
|
|
236
|
+
/** Force a specific broker source (debug). */
|
|
237
|
+
source?: string;
|
|
238
|
+
}
|
|
239
|
+
interface QuoteSource {
|
|
240
|
+
broker: string;
|
|
241
|
+
bid: number;
|
|
242
|
+
ask: number;
|
|
243
|
+
spread: number;
|
|
244
|
+
updated: string;
|
|
245
|
+
}
|
|
246
|
+
interface QuoteData {
|
|
247
|
+
symbol: string;
|
|
248
|
+
bid: number | null;
|
|
249
|
+
ask: number | null;
|
|
250
|
+
spread: number;
|
|
251
|
+
spread_pips: number | null;
|
|
252
|
+
timestamp: string;
|
|
253
|
+
source?: string;
|
|
254
|
+
best_bid?: number | null;
|
|
255
|
+
best_ask?: number | null;
|
|
256
|
+
best_spread?: number | null;
|
|
257
|
+
source_count?: number;
|
|
258
|
+
sources?: QuoteSource[];
|
|
259
|
+
}
|
|
260
|
+
/** Fields selectable on the batch-quotes endpoint. */
|
|
261
|
+
type QuoteField = "bid" | "ask" | "spread" | "spread_pips" | "timestamp";
|
|
262
|
+
interface BulkQuoteItem {
|
|
263
|
+
symbol: string;
|
|
264
|
+
bid?: number | null;
|
|
265
|
+
ask?: number | null;
|
|
266
|
+
spread?: number | null;
|
|
267
|
+
spread_pips?: number | null;
|
|
268
|
+
timestamp?: string;
|
|
269
|
+
}
|
|
270
|
+
interface BulkQuotesData {
|
|
271
|
+
quotes: BulkQuoteItem[];
|
|
272
|
+
count: number;
|
|
273
|
+
not_found: string[] | null;
|
|
274
|
+
timestamp: string;
|
|
275
|
+
}
|
|
276
|
+
interface GetOhlcOptions {
|
|
277
|
+
timeframe?: Loose$1<Timeframe>;
|
|
278
|
+
/** ISO 8601 start; defaults server-side to retention start. */
|
|
279
|
+
from?: string;
|
|
280
|
+
/** ISO 8601 end; defaults to now. */
|
|
281
|
+
to?: string;
|
|
282
|
+
/** 1..1000, default 100. */
|
|
283
|
+
limit?: number;
|
|
284
|
+
}
|
|
285
|
+
interface Candle {
|
|
286
|
+
time: string;
|
|
287
|
+
open: number;
|
|
288
|
+
high: number;
|
|
289
|
+
low: number;
|
|
290
|
+
close: number;
|
|
291
|
+
volume: number;
|
|
292
|
+
}
|
|
293
|
+
interface OHLCData {
|
|
294
|
+
symbol: string;
|
|
295
|
+
timeframe: string;
|
|
296
|
+
candles: Candle[];
|
|
297
|
+
count: number;
|
|
298
|
+
retention: string | null;
|
|
299
|
+
}
|
|
300
|
+
interface Tick {
|
|
301
|
+
time: string;
|
|
302
|
+
bid: number;
|
|
303
|
+
ask: number;
|
|
304
|
+
flags: number;
|
|
305
|
+
}
|
|
306
|
+
interface TicksData {
|
|
307
|
+
symbol: string;
|
|
308
|
+
ticks: Tick[];
|
|
309
|
+
count: number;
|
|
310
|
+
}
|
|
311
|
+
interface GetIndicatorOptions {
|
|
312
|
+
timeframe?: Loose$1<Timeframe>;
|
|
313
|
+
/** Force a broker source. */
|
|
314
|
+
source?: string;
|
|
315
|
+
}
|
|
316
|
+
interface IndicatorValue {
|
|
317
|
+
symbol: string;
|
|
318
|
+
timeframe: string;
|
|
319
|
+
indicator: string;
|
|
320
|
+
value: number | null;
|
|
321
|
+
bid: number | null;
|
|
322
|
+
ask: number | null;
|
|
323
|
+
updated_at: number;
|
|
324
|
+
server_time: string | null;
|
|
325
|
+
}
|
|
326
|
+
interface GetIndicatorsOptions {
|
|
327
|
+
timeframe?: Loose$1<Timeframe>;
|
|
328
|
+
category?: Loose$1<IndicatorCategory>;
|
|
329
|
+
}
|
|
330
|
+
interface OHLCV {
|
|
331
|
+
open: number;
|
|
332
|
+
high: number;
|
|
333
|
+
low: number;
|
|
334
|
+
close: number;
|
|
335
|
+
volume: number;
|
|
336
|
+
}
|
|
337
|
+
interface IndicatorsData {
|
|
338
|
+
symbol: string;
|
|
339
|
+
timeframe: string;
|
|
340
|
+
ohlcv: OHLCV | null;
|
|
341
|
+
bid: number | null;
|
|
342
|
+
ask: number | null;
|
|
343
|
+
indicators: Record<string, number | null>;
|
|
344
|
+
count: number;
|
|
345
|
+
updated_at: number;
|
|
346
|
+
}
|
|
347
|
+
interface IndicatorCatalogue {
|
|
348
|
+
indicators: Record<string, Record<string, string>>;
|
|
349
|
+
timeframes: string[];
|
|
350
|
+
categories: string[];
|
|
351
|
+
}
|
|
352
|
+
interface GetIndicatorHistoryOptions {
|
|
353
|
+
timeframe?: Loose$1<Timeframe>;
|
|
354
|
+
/** ISO 8601 start; defaults to `to − max_window`. */
|
|
355
|
+
from?: string;
|
|
356
|
+
/** ISO 8601 end; defaults to now. */
|
|
357
|
+
to?: string;
|
|
358
|
+
/** 1..5000, default 500 (also capped per-timeframe). */
|
|
359
|
+
limit?: number;
|
|
360
|
+
}
|
|
361
|
+
interface IndicatorHistoryPoint {
|
|
362
|
+
time: string;
|
|
363
|
+
value: number | null;
|
|
364
|
+
}
|
|
365
|
+
interface IndicatorHistoryData {
|
|
366
|
+
symbol: string;
|
|
367
|
+
indicator: string;
|
|
368
|
+
timeframe: string;
|
|
369
|
+
from: string | null;
|
|
370
|
+
to: string | null;
|
|
371
|
+
count: number;
|
|
372
|
+
max_window_hours: number | null;
|
|
373
|
+
series: IndicatorHistoryPoint[];
|
|
374
|
+
}
|
|
375
|
+
interface GetMultiOptions {
|
|
376
|
+
timeframe?: Loose$1<Timeframe>;
|
|
377
|
+
/** ISO 8601 start; its presence switches the endpoint to historical mode. */
|
|
378
|
+
from?: string;
|
|
379
|
+
/** ISO 8601 end (historical mode). */
|
|
380
|
+
to?: string;
|
|
381
|
+
}
|
|
382
|
+
/** Real-time response shape (no `from`/`to` supplied). */
|
|
383
|
+
interface MultiRealtimeData {
|
|
384
|
+
timeframe: string;
|
|
385
|
+
data: Record<string, Record<string, number | null>>;
|
|
386
|
+
not_found: string[] | null;
|
|
387
|
+
updated_at: number;
|
|
388
|
+
mode?: undefined;
|
|
389
|
+
}
|
|
390
|
+
/** Historical response shape (returned when `from` is supplied). */
|
|
391
|
+
interface MultiHistoricalData {
|
|
392
|
+
timeframe: string;
|
|
393
|
+
mode: "historical";
|
|
394
|
+
from: string;
|
|
395
|
+
to: string;
|
|
396
|
+
data: Record<string, Array<{
|
|
397
|
+
time: string;
|
|
398
|
+
} & Record<string, number | null | string>>>;
|
|
399
|
+
not_found: string[] | null;
|
|
400
|
+
}
|
|
401
|
+
type MultiData = MultiRealtimeData | MultiHistoricalData;
|
|
402
|
+
interface ScreenOptions {
|
|
403
|
+
/** Not validated server-side; still sent through. */
|
|
404
|
+
timeframe?: Loose$1<Timeframe>;
|
|
405
|
+
/** Inclusive lower bound. Serialised to `min_val`. */
|
|
406
|
+
minVal?: number;
|
|
407
|
+
/** Inclusive upper bound. Serialised to `max_val`. */
|
|
408
|
+
maxVal?: number;
|
|
409
|
+
/** `asc` (default) or `desc`. */
|
|
410
|
+
sort?: Loose$1<SortDirection>;
|
|
411
|
+
/** `≥ 0`, default 0. */
|
|
412
|
+
offset?: number;
|
|
413
|
+
/** 1..200, default 50. */
|
|
414
|
+
limit?: number;
|
|
415
|
+
}
|
|
416
|
+
interface ScreenerResult {
|
|
417
|
+
symbol: string;
|
|
418
|
+
value: number | null;
|
|
419
|
+
bid: number | null;
|
|
420
|
+
}
|
|
421
|
+
interface ScreenerData {
|
|
422
|
+
indicator: string;
|
|
423
|
+
timeframe: string;
|
|
424
|
+
filter: {
|
|
425
|
+
min: number | null;
|
|
426
|
+
max: number | null;
|
|
427
|
+
};
|
|
428
|
+
results: ScreenerResult[];
|
|
429
|
+
total_matches: number;
|
|
430
|
+
pagination: Pagination;
|
|
431
|
+
updated_at: number;
|
|
432
|
+
}
|
|
433
|
+
interface SummarySignals {
|
|
434
|
+
trend: string;
|
|
435
|
+
momentum: string;
|
|
436
|
+
volatility: string;
|
|
437
|
+
volume: string;
|
|
438
|
+
[key: string]: string;
|
|
439
|
+
}
|
|
440
|
+
interface SummaryKeyLevels {
|
|
441
|
+
resistance: number[];
|
|
442
|
+
support: number[];
|
|
443
|
+
}
|
|
444
|
+
interface SummaryKeyValues {
|
|
445
|
+
bid: number | null;
|
|
446
|
+
ask: number | null;
|
|
447
|
+
rsi_14: number | null;
|
|
448
|
+
macd_hist: number | null;
|
|
449
|
+
adx: number | null;
|
|
450
|
+
atr_14: number | null;
|
|
451
|
+
sma_20: number | null;
|
|
452
|
+
sma_50: number | null;
|
|
453
|
+
sma_200: number | null;
|
|
454
|
+
bb_upper: number | null;
|
|
455
|
+
bb_lower: number | null;
|
|
456
|
+
stochastic_k: number | null;
|
|
457
|
+
mfi_14: number | null;
|
|
458
|
+
[key: string]: number | null;
|
|
459
|
+
}
|
|
460
|
+
interface SummaryData {
|
|
461
|
+
symbol: string;
|
|
462
|
+
timeframe: string;
|
|
463
|
+
bias: BiasValue;
|
|
464
|
+
bias_strength: BiasStrength;
|
|
465
|
+
confidence: number;
|
|
466
|
+
trend_score: number;
|
|
467
|
+
momentum_score: number;
|
|
468
|
+
volatility_score: number;
|
|
469
|
+
signals: SummarySignals;
|
|
470
|
+
key_levels: SummaryKeyLevels;
|
|
471
|
+
bullish_signals: string[];
|
|
472
|
+
bearish_signals: string[];
|
|
473
|
+
neutral_signals: string[];
|
|
474
|
+
volatility_info: string[];
|
|
475
|
+
volume_info: string[];
|
|
476
|
+
summary: string;
|
|
477
|
+
recommendations: string[];
|
|
478
|
+
key_values: SummaryKeyValues;
|
|
479
|
+
updated_at: number;
|
|
480
|
+
}
|
|
481
|
+
interface SpreadCurrent {
|
|
482
|
+
spread_pips: number;
|
|
483
|
+
spread_points: number;
|
|
484
|
+
}
|
|
485
|
+
interface SpreadStatistics {
|
|
486
|
+
period: string;
|
|
487
|
+
avg_spread: number;
|
|
488
|
+
min_spread: number;
|
|
489
|
+
max_spread: number;
|
|
490
|
+
std_deviation: number;
|
|
491
|
+
}
|
|
492
|
+
interface SpreadBySession {
|
|
493
|
+
asian: number | null;
|
|
494
|
+
london: number | null;
|
|
495
|
+
new_york: number | null;
|
|
496
|
+
}
|
|
497
|
+
interface SpreadData {
|
|
498
|
+
symbol: string;
|
|
499
|
+
current: SpreadCurrent;
|
|
500
|
+
statistics: SpreadStatistics;
|
|
501
|
+
by_session: SpreadBySession;
|
|
502
|
+
}
|
|
503
|
+
interface SpreadCompareItem {
|
|
504
|
+
symbol: string;
|
|
505
|
+
current_pips: number | null;
|
|
506
|
+
avg_pips: number | null;
|
|
507
|
+
min_pips: number | null;
|
|
508
|
+
max_pips: number | null;
|
|
509
|
+
has_live_data: boolean;
|
|
510
|
+
}
|
|
511
|
+
interface SpreadCompareData {
|
|
512
|
+
period: string;
|
|
513
|
+
symbols: SpreadCompareItem[];
|
|
514
|
+
count: number;
|
|
515
|
+
}
|
|
516
|
+
interface SessionState {
|
|
517
|
+
status: "open" | "closed";
|
|
518
|
+
closes_in?: string;
|
|
519
|
+
opens_in?: string;
|
|
520
|
+
weekend?: boolean;
|
|
521
|
+
[key: string]: unknown;
|
|
522
|
+
}
|
|
523
|
+
interface SessionsData {
|
|
524
|
+
current_time: string;
|
|
525
|
+
active_sessions: string[];
|
|
526
|
+
sessions: {
|
|
527
|
+
sydney: SessionState;
|
|
528
|
+
tokyo: SessionState;
|
|
529
|
+
london: SessionState;
|
|
530
|
+
new_york: SessionState;
|
|
531
|
+
[name: string]: SessionState;
|
|
532
|
+
};
|
|
533
|
+
overlaps: string[];
|
|
534
|
+
next_major_event: {
|
|
535
|
+
event: string;
|
|
536
|
+
in: string;
|
|
537
|
+
} | null;
|
|
538
|
+
}
|
|
539
|
+
interface GetHeatmapOptions {
|
|
540
|
+
type?: Loose$1<HeatmapType>;
|
|
541
|
+
timeframe?: Loose$1<HeatmapTimeframe>;
|
|
542
|
+
/** `true` forces correlation mode (alternative to `type: "correlation"`). */
|
|
543
|
+
correlations?: boolean;
|
|
544
|
+
}
|
|
545
|
+
interface CurrencyStrength {
|
|
546
|
+
strength: number;
|
|
547
|
+
trend: BiasValue;
|
|
548
|
+
change: number;
|
|
549
|
+
pairs_analyzed: number;
|
|
550
|
+
}
|
|
551
|
+
interface HeatmapStrengthData {
|
|
552
|
+
type: "strength";
|
|
553
|
+
timeframe: string;
|
|
554
|
+
currencies: Record<string, CurrencyStrength>;
|
|
555
|
+
strongest: string | null;
|
|
556
|
+
weakest: string | null;
|
|
557
|
+
range: number;
|
|
558
|
+
timestamp: string;
|
|
559
|
+
}
|
|
560
|
+
interface HeatmapCorrelationData {
|
|
561
|
+
type: "correlation";
|
|
562
|
+
timeframe: string;
|
|
563
|
+
correlation_matrix: Record<string, Record<string, number>>;
|
|
564
|
+
available: boolean;
|
|
565
|
+
message?: string;
|
|
566
|
+
timestamp: string;
|
|
567
|
+
}
|
|
568
|
+
type HeatmapData = HeatmapStrengthData | HeatmapCorrelationData;
|
|
569
|
+
interface GetCalendarOptions {
|
|
570
|
+
/** Date/ISO; default today 00:00 UTC. */
|
|
571
|
+
from?: string;
|
|
572
|
+
/** Date/ISO; default from+7d; range ≤ 30 days. */
|
|
573
|
+
to?: string;
|
|
574
|
+
/** Comma-separated list, or string[] — e.g. ["USD","EUR"]. */
|
|
575
|
+
currencies?: string | string[];
|
|
576
|
+
/** Alias of `currencies`. */
|
|
577
|
+
country?: string | string[];
|
|
578
|
+
impact?: Loose$1<CalendarImpact>;
|
|
579
|
+
/** Title search, ≤100 chars. */
|
|
580
|
+
q?: string;
|
|
581
|
+
/** 1..168; overrides from/to. */
|
|
582
|
+
nextHours?: number;
|
|
583
|
+
offset?: number;
|
|
584
|
+
limit?: number;
|
|
585
|
+
}
|
|
586
|
+
interface CalendarEvent {
|
|
587
|
+
id: string;
|
|
588
|
+
/** ISO, naive-UTC, no suffix — treat as UTC. */
|
|
589
|
+
datetime: string;
|
|
590
|
+
currency: string;
|
|
591
|
+
event: string;
|
|
592
|
+
impact: string;
|
|
593
|
+
forecast: string | null;
|
|
594
|
+
previous: string | null;
|
|
595
|
+
actual: string | null;
|
|
596
|
+
}
|
|
597
|
+
interface CalendarData {
|
|
598
|
+
events: CalendarEvent[];
|
|
599
|
+
count: number;
|
|
600
|
+
pagination: Pagination;
|
|
601
|
+
range: {
|
|
602
|
+
from: string;
|
|
603
|
+
to: string;
|
|
604
|
+
};
|
|
605
|
+
}
|
|
606
|
+
interface AccountData {
|
|
607
|
+
name: string;
|
|
608
|
+
plan: Plan | string;
|
|
609
|
+
prepaid_credits: number;
|
|
610
|
+
/** `null` means unlimited. */
|
|
611
|
+
daily_quota: number | null;
|
|
612
|
+
daily_used: number;
|
|
613
|
+
}
|
|
614
|
+
interface LayoutData {
|
|
615
|
+
layout: unknown[] | null;
|
|
616
|
+
}
|
|
617
|
+
interface SaveLayoutData {
|
|
618
|
+
saved: true;
|
|
619
|
+
}
|
|
620
|
+
interface HealthComponent {
|
|
621
|
+
status?: string;
|
|
622
|
+
[key: string]: unknown;
|
|
623
|
+
}
|
|
624
|
+
interface HealthData {
|
|
625
|
+
status: string;
|
|
626
|
+
/** Per-dependency status, e.g. `{ redis: { status: "ok" }, postgres: {...} }`. */
|
|
627
|
+
components: Record<string, HealthComponent>;
|
|
628
|
+
[key: string]: unknown;
|
|
629
|
+
}
|
|
630
|
+
interface RateLimitInfo {
|
|
631
|
+
limit: number | null;
|
|
632
|
+
remaining: number | null;
|
|
633
|
+
reset: number | null;
|
|
634
|
+
requestId: string | null;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
type Loose<T extends string> = T | (string & {});
|
|
638
|
+
/** Options accepted by the {@link TickAtlas} constructor. */
|
|
639
|
+
interface TickAtlasOptions {
|
|
640
|
+
/**
|
|
641
|
+
* API key. If omitted, falls back to `process.env.TICKATLAS_API_KEY`
|
|
642
|
+
* (Node only), then throws {@link TickAtlasConfigError}.
|
|
643
|
+
*/
|
|
644
|
+
apiKey?: string;
|
|
645
|
+
/**
|
|
646
|
+
* Base URL. Precedence: this option → `TICKATLAS_BASE_URL` env →
|
|
647
|
+
* `https://tickatlas.com/v1`.
|
|
648
|
+
*/
|
|
649
|
+
baseURL?: string;
|
|
650
|
+
/** Per-request timeout in ms. Default 30000. */
|
|
651
|
+
timeout?: number;
|
|
652
|
+
/** Maximum retry attempts for 429/5xx/network. Default 3. */
|
|
653
|
+
maxRetries?: number;
|
|
654
|
+
/** Exponential-backoff base in ms. Default 500. */
|
|
655
|
+
backoffBase?: number;
|
|
656
|
+
/** Backoff cap in ms. Default 30000. */
|
|
657
|
+
backoffCap?: number;
|
|
658
|
+
/** Inject a custom fetch implementation (defaults to global `fetch`). */
|
|
659
|
+
fetch?: typeof fetch;
|
|
660
|
+
/** Inject a deterministic sleep (testing). */
|
|
661
|
+
sleep?: (ms: number) => Promise<void>;
|
|
662
|
+
/** Inject deterministic jitter in [0,1) (testing). */
|
|
663
|
+
jitter?: () => number;
|
|
664
|
+
}
|
|
665
|
+
declare class TickAtlas {
|
|
666
|
+
/** SDK version (e.g. for diagnostics). */
|
|
667
|
+
static readonly version = "0.1.0";
|
|
668
|
+
private readonly config;
|
|
669
|
+
constructor(options?: TickAtlasOptions);
|
|
670
|
+
/** 7.1 `GET /symbols` — list symbols (paginated). */
|
|
671
|
+
getSymbols(opts?: GetSymbolsOptions): Promise<SymbolsData>;
|
|
672
|
+
/** 7.2 `GET /symbols/{symbol}` — symbol contract spec. */
|
|
673
|
+
getSymbol(symbol: string): Promise<SymbolDetail>;
|
|
674
|
+
/** 7.3 `GET /quote` — single real-time quote. */
|
|
675
|
+
getQuote(symbol: string, opts?: GetQuoteOptions): Promise<QuoteData>;
|
|
676
|
+
/**
|
|
677
|
+
* 7.4 `POST /quotes` — batch quotes (1..100 symbols).
|
|
678
|
+
* `fields` ⊆ ["bid","ask","spread","spread_pips","timestamp"] (default all).
|
|
679
|
+
*/
|
|
680
|
+
getQuotes(symbols: string[], fields?: QuoteField[]): Promise<BulkQuotesData>;
|
|
681
|
+
/** 7.5 `GET /ohlc` — OHLC candles. */
|
|
682
|
+
getOhlc(symbol: string, opts?: GetOhlcOptions): Promise<OHLCData>;
|
|
683
|
+
/**
|
|
684
|
+
* 7.6 `GET /ticks` — tick data (plan: pro/enterprise).
|
|
685
|
+
* `from`/`to` are required ISO 8601; range must be ≤ 1 hour.
|
|
686
|
+
*/
|
|
687
|
+
getTicks(symbol: string, from: string, to: string): Promise<TicksData>;
|
|
688
|
+
/** 7.7 `GET /indicator` — single indicator value. */
|
|
689
|
+
getIndicator(symbol: string, indicator: Loose<Indicator>, opts?: GetIndicatorOptions): Promise<IndicatorValue>;
|
|
690
|
+
/** 7.8 `GET /indicators` — all indicators for a symbol. */
|
|
691
|
+
getIndicators(symbol: string, opts?: GetIndicatorsOptions): Promise<IndicatorsData>;
|
|
692
|
+
/** 7.9 `GET /indicators/list` — indicator catalogue. */
|
|
693
|
+
listIndicators(): Promise<IndicatorCatalogue>;
|
|
694
|
+
/**
|
|
695
|
+
* 7.10 `GET /indicator/history` — indicator series (plan: starter+).
|
|
696
|
+
*/
|
|
697
|
+
getIndicatorHistory(symbol: string, indicator: Loose<Indicator>, opts?: GetIndicatorHistoryOptions): Promise<IndicatorHistoryData>;
|
|
698
|
+
/**
|
|
699
|
+
* 7.11 `GET /multi` — batch indicators across symbols. Supplying `from`
|
|
700
|
+
* switches the server into historical mode (plan: starter+).
|
|
701
|
+
*/
|
|
702
|
+
getMulti(symbols: string[], indicators: Array<Loose<Indicator>>, opts?: GetMultiOptions): Promise<MultiData>;
|
|
703
|
+
/**
|
|
704
|
+
* 7.12 `GET /screener` — scan symbols by indicator.
|
|
705
|
+
* Note: `minVal`/`maxVal` serialise to `min_val`/`max_val` (the docs' `min`/
|
|
706
|
+
* `max` are silently ignored by the API — see SPEC §12 F2).
|
|
707
|
+
*/
|
|
708
|
+
screen(indicator: Loose<Indicator>, opts?: ScreenOptions): Promise<ScreenerData>;
|
|
709
|
+
/** 7.13 `GET /summary` — market-bias summary. */
|
|
710
|
+
getSummary(symbol: string, timeframe?: Loose<Timeframe>): Promise<SummaryData>;
|
|
711
|
+
/** 7.14 `GET /spread` — spread statistics. */
|
|
712
|
+
getSpread(symbol: string, period?: Loose<SpreadPeriod>): Promise<SpreadData>;
|
|
713
|
+
/** 7.15 `GET /spread/compare` — compare spread across symbols (≤20). */
|
|
714
|
+
compareSpread(symbols: string[], period?: Loose<SpreadPeriod>): Promise<SpreadCompareData>;
|
|
715
|
+
/** 7.16 `GET /sessions` — market session clock. */
|
|
716
|
+
getSessions(): Promise<SessionsData>;
|
|
717
|
+
/** 7.17 `GET /heatmap` — currency strength / correlation. */
|
|
718
|
+
getHeatmap(opts?: GetHeatmapOptions): Promise<HeatmapData>;
|
|
719
|
+
/** 7.18 `GET /calendar` — economic calendar. */
|
|
720
|
+
getCalendar(opts?: GetCalendarOptions): Promise<CalendarData>;
|
|
721
|
+
/** 7.19 `GET /monitor/account` — account identity & quota. */
|
|
722
|
+
getAccount(): Promise<AccountData>;
|
|
723
|
+
/** 7.20 `GET /monitor/layout` — saved dashboard layout. */
|
|
724
|
+
getLayout(): Promise<LayoutData>;
|
|
725
|
+
/**
|
|
726
|
+
* 7.21 `PUT /monitor/layout` — save dashboard layout (≤60 widgets).
|
|
727
|
+
*
|
|
728
|
+
* ADVANCED / WRITE: this is the only mutating endpoint in the SDK. It
|
|
729
|
+
* overwrites the user's saved dashboard layout for this API key. Use with care.
|
|
730
|
+
*/
|
|
731
|
+
saveLayout(layout: unknown[]): Promise<SaveLayoutData>;
|
|
732
|
+
/** `GET /health` — service health probe (no API key required server-side). */
|
|
733
|
+
health(): Promise<HealthData>;
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
/**
|
|
737
|
+
* Low-level HTTP transport for the TickAtlas SDK: a thin wrapper over the
|
|
738
|
+
* global `fetch` that handles auth headers, query serialisation, timeouts
|
|
739
|
+
* (via `AbortController`), envelope unwrapping, error mapping, and the retry
|
|
740
|
+
* policy from SPEC.md §5.
|
|
741
|
+
*
|
|
742
|
+
* Zero runtime dependencies: relies on the platform `fetch`/`AbortController`
|
|
743
|
+
* available in Node 18+ and modern browsers.
|
|
744
|
+
*/
|
|
745
|
+
|
|
746
|
+
/** SDK version — kept in sync with package.json. */
|
|
747
|
+
declare const SDK_VERSION = "0.1.0";
|
|
748
|
+
|
|
749
|
+
/**
|
|
750
|
+
* Typed exception hierarchy for the TickAtlas SDK.
|
|
751
|
+
*
|
|
752
|
+
* Mirrors SPEC.md §4 exactly:
|
|
753
|
+
*
|
|
754
|
+
* TickAtlasError (base for everything)
|
|
755
|
+
* ├── TickAtlasAPIError (server returned a structured error)
|
|
756
|
+
* │ ├── AuthenticationError HTTP 401
|
|
757
|
+
* │ ├── PermissionDeniedError HTTP 403
|
|
758
|
+
* │ ├── NotFoundError HTTP 404
|
|
759
|
+
* │ ├── ValidationError HTTP 400 & 422
|
|
760
|
+
* │ ├── RateLimitError HTTP 429 (carries retryAfter)
|
|
761
|
+
* │ └── ServerError HTTP 5xx
|
|
762
|
+
* └── TickAtlasNetworkError no HTTP response (connection/timeout/DNS)
|
|
763
|
+
*/
|
|
764
|
+
/** Shape of the normalised `error` object returned by the API envelope. */
|
|
765
|
+
interface ApiErrorBody {
|
|
766
|
+
code: string;
|
|
767
|
+
message?: string;
|
|
768
|
+
/** Present for `VALIDATION_ERROR` (HTTP 422). */
|
|
769
|
+
details?: unknown;
|
|
770
|
+
/** Forward-compatible: any additional context keys the API may attach. */
|
|
771
|
+
[key: string]: unknown;
|
|
772
|
+
}
|
|
773
|
+
/** Base class for every error thrown by the SDK. */
|
|
774
|
+
declare class TickAtlasError extends Error {
|
|
775
|
+
constructor(message: string, options?: {
|
|
776
|
+
cause?: unknown;
|
|
777
|
+
});
|
|
778
|
+
}
|
|
779
|
+
/** Options used to construct a {@link TickAtlasAPIError}. */
|
|
780
|
+
interface ApiErrorOptions {
|
|
781
|
+
statusCode: number;
|
|
782
|
+
code: string;
|
|
783
|
+
message: string;
|
|
784
|
+
details?: unknown;
|
|
785
|
+
requestId?: string | null;
|
|
786
|
+
/** The full raw `error` object from the response envelope. */
|
|
787
|
+
raw?: ApiErrorBody | null;
|
|
788
|
+
}
|
|
789
|
+
/**
|
|
790
|
+
* Raised when the server returned a structured error envelope
|
|
791
|
+
* (`{ success: false, error: { code, message, ... } }`).
|
|
792
|
+
*/
|
|
793
|
+
declare class TickAtlasAPIError extends TickAtlasError {
|
|
794
|
+
/** HTTP status code of the response. */
|
|
795
|
+
readonly statusCode: number;
|
|
796
|
+
/** Stable, machine-branchable `error.code` string. */
|
|
797
|
+
readonly code: string;
|
|
798
|
+
/** Validation detail payload (present on `VALIDATION_ERROR`). */
|
|
799
|
+
readonly details?: unknown;
|
|
800
|
+
/** `X-Request-ID` correlation id, if present. */
|
|
801
|
+
readonly requestId?: string | null;
|
|
802
|
+
/** The full raw `error` object (read context fields off this). */
|
|
803
|
+
readonly raw?: ApiErrorBody | null;
|
|
804
|
+
constructor(opts: ApiErrorOptions);
|
|
805
|
+
}
|
|
806
|
+
/** HTTP 401 — `MISSING_API_KEY`, `INVALID_API_KEY`. */
|
|
807
|
+
declare class AuthenticationError extends TickAtlasAPIError {
|
|
808
|
+
constructor(opts: ApiErrorOptions);
|
|
809
|
+
}
|
|
810
|
+
/**
|
|
811
|
+
* HTTP 403 — `API_KEY_DISABLED`, `API_KEY_EXPIRED`, `IP_NOT_ALLOWED`,
|
|
812
|
+
* `ACCOUNT_*`, `PERMISSION_DENIED`, `PLAN_UPGRADE_REQUIRED`.
|
|
813
|
+
*/
|
|
814
|
+
declare class PermissionDeniedError extends TickAtlasAPIError {
|
|
815
|
+
constructor(opts: ApiErrorOptions);
|
|
816
|
+
}
|
|
817
|
+
/** HTTP 404 — `SYMBOL_NOT_FOUND`, `DATA_NOT_FOUND`, `INDICATOR_NOT_FOUND`. */
|
|
818
|
+
declare class NotFoundError extends TickAtlasAPIError {
|
|
819
|
+
constructor(opts: ApiErrorOptions);
|
|
820
|
+
}
|
|
821
|
+
/**
|
|
822
|
+
* HTTP 400 & 422 — all `INVALID_*`, `RANGE_TOO_LARGE`, `OUTSIDE_RETENTION`,
|
|
823
|
+
* `TOO_MANY_SYMBOLS`, `NO_SYMBOLS`, `VALIDATION_ERROR`, `HTTP_400`, …
|
|
824
|
+
*/
|
|
825
|
+
declare class ValidationError extends TickAtlasAPIError {
|
|
826
|
+
constructor(opts: ApiErrorOptions);
|
|
827
|
+
}
|
|
828
|
+
/**
|
|
829
|
+
* HTTP 429 — `RATE_LIMIT_EXCEEDED`, `QUOTA_EXCEEDED`, `RATE_LIMITED`.
|
|
830
|
+
* Carries {@link retryAfter} (seconds), derived from the `Retry-After`
|
|
831
|
+
* header (fallback `X-RateLimit-Reset`, then `reset_in_seconds`).
|
|
832
|
+
*/
|
|
833
|
+
declare class RateLimitError extends TickAtlasAPIError {
|
|
834
|
+
/** Seconds to wait before retrying, if the server advertised one. */
|
|
835
|
+
readonly retryAfter?: number | null;
|
|
836
|
+
constructor(opts: ApiErrorOptions & {
|
|
837
|
+
retryAfter?: number | null;
|
|
838
|
+
});
|
|
839
|
+
}
|
|
840
|
+
/** HTTP 5xx — `INTERNAL_ERROR`, `SERVICE_UNAVAILABLE`. */
|
|
841
|
+
declare class ServerError extends TickAtlasAPIError {
|
|
842
|
+
constructor(opts: ApiErrorOptions);
|
|
843
|
+
}
|
|
844
|
+
/**
|
|
845
|
+
* Raised when no HTTP response was received at all — connection refused, DNS
|
|
846
|
+
* failure, TLS error, or a request that exceeded the configured `timeout`
|
|
847
|
+
* (aborted via `AbortController`).
|
|
848
|
+
*/
|
|
849
|
+
declare class TickAtlasNetworkError extends TickAtlasError {
|
|
850
|
+
/** True when the failure was caused by the request timing out. */
|
|
851
|
+
readonly isTimeout: boolean;
|
|
852
|
+
constructor(message: string, options?: {
|
|
853
|
+
cause?: unknown;
|
|
854
|
+
isTimeout?: boolean;
|
|
855
|
+
});
|
|
856
|
+
}
|
|
857
|
+
/**
|
|
858
|
+
* Raised before any request is made when the SDK is misconfigured (e.g. no API
|
|
859
|
+
* key could be resolved). This is a usage error, not an API error.
|
|
860
|
+
*/
|
|
861
|
+
declare class TickAtlasConfigError extends TickAtlasError {
|
|
862
|
+
constructor(message: string);
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
export { ALL_INDICATORS, type AccountData, type ApiErrorBody, type ApiErrorOptions, AuthenticationError, Bias, type BiasStrength, BiasStrengths, type BiasValue, type BulkQuoteItem, type BulkQuotesData, type CalendarData, type CalendarEvent, type CalendarImpact, CalendarImpacts, type Candle, type CurrencyStrength, type GetCalendarOptions, type GetHeatmapOptions, type GetIndicatorHistoryOptions, type GetIndicatorOptions, type GetIndicatorsOptions, type GetMultiOptions, type GetOhlcOptions, type GetQuoteOptions, type GetSymbolsOptions, type HealthData, type HeatmapCorrelationData, type HeatmapData, type HeatmapStrengthData, type HeatmapTimeframe, HeatmapTimeframes, type HeatmapType, HeatmapTypes, type Indicator, type IndicatorCatalogue, IndicatorCategories, type IndicatorCategory, type IndicatorHistoryData, type IndicatorHistoryPoint, type IndicatorValue, Indicators, IndicatorsByCategory, type IndicatorsData, type LayoutData, type MultiData, type MultiHistoricalData, type MultiRealtimeData, NotFoundError, type OHLCData, type OHLCV, type Pagination, PermissionDeniedError, type Plan, Plans, type QuoteData, type QuoteField, type QuoteSource, RateLimitError, type RateLimitInfo, SDK_VERSION, type SaveLayoutData, type ScreenOptions, type ScreenerData, type ScreenerResult, ServerError, type SessionState, type SessionsData, type SortDirection, SortDirections, type SpreadBySession, type SpreadCompareData, type SpreadCompareItem, type SpreadCurrent, type SpreadData, type SpreadPeriod, SpreadPeriods, type SpreadStatistics, type SummaryData, type SummaryKeyLevels, type SummaryKeyValues, type SummarySignals, SymbolCategories, type SymbolCategory, type SymbolDetail, type SymbolListItem, type SymbolsData, type Tick, TickAtlas, TickAtlasAPIError, TickAtlasConfigError, TickAtlasError, TickAtlasNetworkError, type TickAtlasOptions, type TicksData, type Timeframe, Timeframes, type TradingHours, ValidationError };
|