@qtsurfer/api-client 0.14.0 → 0.15.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/dist/index.d.ts CHANGED
@@ -14,6 +14,10 @@ type ResponseError = {
14
14
  */
15
15
  message: string;
16
16
  };
17
+ /**
18
+ * A scalar strategy property value for one execution.
19
+ */
20
+ type ScalarStrategyParamValue = number | string | boolean;
17
21
  /**
18
22
  * Exchange instrument identifier (e.g. a currency pair)
19
23
  */
@@ -212,14 +216,22 @@ type PrepareRequest = {
212
216
  */
213
217
  to: string;
214
218
  /**
215
- * Output bar cadence for the prepared range. Defaults to the publisher's
216
- * native cadence (`1s`); coarser cadences are produced on demand via
217
- * resampling and stored alongside the native blob in cache. Coarser-than-
218
- * source values must be exact multiples of the source cadence — invalid
219
- * labels return `400`.
219
+ * Output bar cadence for the prepared range. Coarser cadences are produced on demand by
220
+ * resampling the source and stored alongside the native blob in cache. A target finer
221
+ * than the source, or not an exact multiple of it, returns `400`. What's accepted, and
222
+ * what omitting it means, depends on the source:
223
+ *
224
+ * * Managed exchange — one of `1s`, `5s`, `1m`, `3m`, `5m`, `15m`, `30m`, `1h`, `2h`,
225
+ * `4h`, `8h`, `12h`, `1d`, `1w`, `1q`; any other label returns `400`. Omitted = `1s`,
226
+ * the publisher's native cadence.
227
+ * * Dataset (`exchangeId: user`) — omitted = the dataset version's own discovered
228
+ * `cadence` (see `DatasetVersion.cadence`), served as-is. Any cadence equal to or
229
+ * coarser than it and an exact multiple of it is accepted, including ones outside the
230
+ * managed-exchange list (e.g. `15s`); an `rt` dataset can be resampled to any fixed
231
+ * cadence.
220
232
  *
221
233
  */
222
- cadence?: "1s" | "5s" | "1m" | "3m" | "5m" | "15m" | "30m" | "1h" | "2h" | "4h" | "8h" | "12h" | "1d" | "1w" | "1q";
234
+ cadence?: string;
223
235
  };
224
236
  /**
225
237
  * Information about a single job
@@ -233,7 +245,8 @@ type JobState = {
233
245
  * Current status of the job. Treat `Completed | Aborted | Failed` as
234
246
  * terminal; `New | Started` mean keep polling. A single-instrument prepare
235
247
  * is always terminal (`Completed`) — decide from
236
- * `PrepareJobState.coverageRatio`, not by polling.
248
+ * `PrepareJobState.coverageRatio` (or `dataFrom`/`dataTo` against an `rt` dataset,
249
+ * which has no ratio), not by polling.
237
250
  *
238
251
  */
239
252
  status: "New" | "Started" | "Completed" | "Aborted" | "Failed";
@@ -270,8 +283,10 @@ type JobState = {
270
283
  * dataset-backed prepare (`exchangeId: user`), coverage is reported on the dataset's own
271
284
  * cadence grid instead — hour-walking a daily dataset would report `1/24` and read as
272
285
  * broken — via `cadence`/`gaps`/`largestGapSteps`; `totalHours`/`hoursWithData`/
273
- * `hoursWithoutData` are absent in that case. `dataFrom`/`dataTo`/`coverageRatio` are present
274
- * either way, computed accordingly.
286
+ * `hoursWithoutData` are absent in that case. `dataFrom`/`dataTo` are present either way, and
287
+ * `coverageRatio` too, computed accordingly — except against a dataset whose `cadence` is `rt`:
288
+ * with no fixed step there is no expected row count to measure against, so `coverageRatio`
289
+ * is absent and `gaps`/`largestGapSteps` are `0`.
275
290
  *
276
291
  */
277
292
  type PrepareJobState = JobState & {
@@ -288,7 +303,8 @@ type PrepareJobState = JobState & {
288
303
  * `totalHours` is 0), the fraction of hours in the requested range that have served
289
304
  * data. Against a dataset (`exchangeId: user`): `rows / expectedStepsAtCadence`
290
305
  * over the dataset version's own range — echoing what ingest computed once, not
291
- * recomputed against a narrower prepare request.
306
+ * recomputed against a narrower prepare request. Absent for an `rt` dataset (no
307
+ * fixed step, so no expected row count).
292
308
  *
293
309
  */
294
310
  coverageRatio?: number;
@@ -305,20 +321,21 @@ type PrepareJobState = JobState & {
305
321
  */
306
322
  hoursWithData?: number;
307
323
  /**
308
- * The dataset version's own discovered cadence (e.g. `1m`, `1h`). Only present for a
309
- * dataset-backed prepare (`exchangeId: user`).
324
+ * The dataset version's own discovered cadence — a fixed grid (e.g. `1m`, `1h`) or
325
+ * `rt` (see `DatasetVersion.cadence`). Only present for a dataset-backed prepare
326
+ * (`exchangeId: user`).
310
327
  *
311
328
  */
312
329
  cadence?: string;
313
330
  /**
314
331
  * Number of gaps in the dataset version at its own cadence, as discovered at ingest
315
- * time. Only present for a dataset-backed prepare.
332
+ * time. `0` for `rt`. Only present for a dataset-backed prepare.
316
333
  *
317
334
  */
318
335
  gaps?: number;
319
336
  /**
320
- * The largest gap in the dataset version, in units of its own cadence step. Only
321
- * present for a dataset-backed prepare.
337
+ * The largest gap in the dataset version, in units of its own cadence step. `0` for
338
+ * `rt`. Only present for a dataset-backed prepare.
322
339
  *
323
340
  */
324
341
  largestGapSteps?: number;
@@ -527,7 +544,7 @@ type SweepRunRow = {
527
544
  */
528
545
  neighbourCount?: number;
529
546
  /**
530
- * Probability that this run's Sharpe reflects real edge rather than the best draw from however many parameter vectors were tried. Above ~0.95 the result survives the multiple-testing correction; near 0.5 or below it is indistinguishable from the best of a pile of coin flips. Absent on aborted runs, and on sweeps with too few trials to establish any dispersion to deflate against.
547
+ * Probability that this run's Sharpe reflects real edge rather than the best draw from however many parameter vectors were tried. Above ~0.95 the result survives the multiple-testing correction; near 0.5 or below it is indistinguishable from the best of a pile of coin flips. Absent on aborted runs, on sweeps with too few trials to establish any dispersion to deflate against, on runs with fewer than 3 period returns, and on a degenerate (near-constant) return series — all cases where the underlying statistic isn't meaningfully computable, rather than genuinely zero. A present value is the computed probability, however small.
531
548
  */
532
549
  deflatedSharpe?: number;
533
550
  params: {
@@ -560,7 +577,10 @@ type SweepRunRow = {
560
577
  aborted: boolean;
561
578
  runtimeMs: number;
562
579
  /**
563
- * Present only when this trial's curve was selected (`equityCurve.mode` was `topN`/`topPct` on the request, and this row ranked among the winners) — absent, not null, otherwise; a run that was never spilled and one that was spilled but not selected look identical here. Always a pointer today (`url` present, no inline points): a sweep's curves live in a spill store, not the response, until fetched separately. `GET` the `url` to fetch the curve itself; its own `meta` there is the real, possibly size-guarded outcome, while this outer `meta` is a raw, untransformed preview from selection time and can differ.
580
+ * Present whenever this trial actually has a curve — which is any completed run of a sweep that requested curves at all (`equityCurve.mode` `topN`/`topPct`), not only the ranked winners. Absent, not null, when there is genuinely nothing: the run aborted, it made no trades, or the sweep never retained curves (`mode` `auto`/`none`).
581
+ * Selection decides how the curve travels, not whether it exists. A row may carry `url` alone, or `url` together with the points inline.
582
+ * **Read `points`/`equities` to tell whether the curve is inline — never the presence of this object, and never the absence of `url`.** Both mislead, and in opposite directions: this object is present on rows that carry only a pointer, and `url` stays present alongside an inline curve so a caller can still re-request a different transform. An inline curve is emitted on the materialisation view (`?order=natural`), where each row is read once; the ranked view keeps the pointer, being polled.
583
+ * When only a pointer is present, `GET` the `url` for the curve. Its own `meta` there is the real, possibly size-guarded outcome. This outer `meta` may be a declaration rather than a measurement — for a row whose curve was not promoted, the point count is derived from the trade count (one equity point per closed trade) instead of being read from the store, to keep a polled response from doing per-row work.
564
584
  */
565
585
  equityCurve?: EquityCurveResult;
566
586
  };
@@ -660,7 +680,8 @@ type ExecuteSweepResult = {
660
680
  * The same `JobState` shape a single-execute `BacktestJobResult` carries — not a sweep-specific lookalike, the actual type, so field names and timestamp formatting match exactly.
661
681
  * `state.status` uses `JobState`'s own vocabulary (`New`/`Started`/`Completed`/ `Aborted`/`Failed`), mapped from the sweep's `status` field above rather than copying it: `PARTIAL` and `CANCELLED` both map to `Aborted`, because a sweep's `PARTIAL` is already terminal (some shards finished, some failed, nothing more is coming) unlike a single job's non-terminal `Partial`, which has no equivalent here at all.
662
682
  * `state.completed` is real ticks processed on a plain sweep. On a `walkForward` sweep it is currently always `0` — the walk-forward fold runner was not wired to count ticks when this shipped, unlike the plain shard path.
663
- * `state.size` is always `0` on every path (single execute, plain sweep, walk-forward alike) — nothing populates it anywhere yet. That is a known gap across the whole API, not a sweep-specific omission.
683
+ * `state.size` is an upfront estimate — range x the prepare's target cadence, set before any data is even loaded, not a query against loaded data — on a single execute and a plain sweep alike. A plain sweep's value is the sum of every shard's own `size` (each shard's per-run estimate x its own vector slice), the same additive shape `state.completed` already used above. `0` means the prepare context behind the job predates this field (a job whose prepare ran before the estimate existed) — never a guessed cadence standing in for a real one.
684
+ * On a `walkForward` sweep, `state.size` is still always `0`: fold runs were out of scope for the estimate the same way they are for `state.completed` above — a fold's `size` is simply never set, so the sum stays honest at `0` rather than needing a special case.
664
685
  */
665
686
  state: JobState;
666
687
  };
@@ -830,7 +851,7 @@ type ResultMap = {
830
851
  * The strategy properties this run was given, echoed back as sent. Absent when the request carried none, so its presence is what distinguishes a parameterised run from one at the declared defaults — a stored result cannot otherwise say which vector produced it, and this endpoint is meant to be called repeatedly over one prepare.
831
852
  */
832
853
  params?: {
833
- [key: string]: number | string | boolean;
854
+ [key: string]: ScalarStrategyParamValue;
834
855
  };
835
856
  /**
836
857
  * Number of signals emitted during strategy execution
@@ -1111,9 +1132,12 @@ type Dataset = {
1111
1132
  */
1112
1133
  name: string;
1113
1134
  /**
1114
- * Always `ticker` in v1.
1135
+ * `ticker` for an upload or a `dex` import with no `cadence` requested (native per-trade
1136
+ * data). `klines` for a `dex` import that requested a candle `cadence` — pre-aggregated
1137
+ * bars rather than raw ticks. Purely informational; both shapes are read the same way.
1138
+ *
1115
1139
  */
1116
- type: "ticker";
1140
+ type: "ticker" | "klines";
1117
1141
  instrument: Instrument;
1118
1142
  /**
1119
1143
  * When the dataset was created.
@@ -1142,8 +1166,8 @@ type Dataset = {
1142
1166
  */
1143
1167
  to?: string;
1144
1168
  /**
1145
- * `currentVersionId`'s own discovered bar cadence (e.g. `1s`, `1m`, `1h`). Absent until a
1146
- * version exists.
1169
+ * `currentVersionId`'s own discovered cadence — a fixed grid (e.g. `1s`, `1m`, `1h`) or
1170
+ * `rt` (see `DatasetVersion.cadence`). Absent until a version exists.
1147
1171
  *
1148
1172
  */
1149
1173
  cadence?: string;
@@ -1152,6 +1176,23 @@ type Dataset = {
1152
1176
  * A `Dataset` plus a self link. Returned by `GET /datasets/{datasetId}`.
1153
1177
  */
1154
1178
  type DatasetWithLinks = Dataset & {
1179
+ /**
1180
+ * Presigned GET URL to the current version's stored file — see `dataFormat` for
1181
+ * which format it's actually in. Present only once the current version's status is
1182
+ * `ready`. Long-lived (day-scale, not permanent): a DuckDB-WASM/`lastra-ts`-style
1183
+ * reader issues HTTP range requests against it lazily over an extended viewing
1184
+ * session, not in one shot like a browser upload.
1185
+ *
1186
+ */
1187
+ dataUrl?: string;
1188
+ /**
1189
+ * Which format `dataUrl` is actually in — check this rather than assuming it
1190
+ * matches how you uploaded it. `lastra` — our native columnar format — for a CSV (or
1191
+ * gzip/zip of one) upload, always converted on ingest. `parquet` for a parquet
1192
+ * upload, stored as-is today.
1193
+ *
1194
+ */
1195
+ dataFormat?: "lastra" | "parquet";
1155
1196
  _links?: {
1156
1197
  self?: {
1157
1198
  href?: string;
@@ -1163,8 +1204,9 @@ type DatasetWithLinks = Dataset & {
1163
1204
  */
1164
1205
  type DatasetUploadTarget = {
1165
1206
  /**
1166
- * Presigned URL. `PUT` the raw CSV file here directly — no `Authorization` header,
1167
- * no other API credentials.
1207
+ * Presigned URL. `PUT` the file here directly — the CSV or parquet itself, or a `.gz`/`.zip` of it
1208
+ * (see `createDataset`'s own description) — no `Authorization` header, no other API
1209
+ * credentials.
1168
1210
  *
1169
1211
  */
1170
1212
  url: string;
@@ -1222,7 +1264,7 @@ type DatasetVersion = {
1222
1264
  */
1223
1265
  id?: string;
1224
1266
  /**
1225
- * Size of the uploaded file.
1267
+ * Size of the stored file `dataUrl` points at — a converted `lastra` for a CSV/gzip/zip upload, or the parquet file itself, unconverted, for a parquet upload. Not the size of the bytes originally PUT to storage; see `dataFormat`.
1226
1268
  */
1227
1269
  bytes?: number;
1228
1270
  /**
@@ -1230,7 +1272,13 @@ type DatasetVersion = {
1230
1272
  */
1231
1273
  rows?: number;
1232
1274
  /**
1233
- * The discovered bar cadence (e.g. `1s`, `1m`, `1h`).
1275
+ * The cadence discovered from the data's own timestamps. Either a fixed grid — `1s`,
1276
+ * `5s`, `15s`, `1m`, `5m`, `15m`, `30m`, `1h`, `4h`, `1d` — when at least half the
1277
+ * intervals between consecutive rows fall on that step (small clock jitter tolerated), or
1278
+ * `rt`: native data at the rate it was captured, each row at its own timestamp with no
1279
+ * fixed step — per-trade on-chain swaps, block-spaced or sub-second ticks, irregular
1280
+ * intervals. An `rt` dataset can be resampled to any fixed cadence at prepare time.
1281
+ *
1234
1282
  */
1235
1283
  cadence?: string;
1236
1284
  /**
@@ -1240,16 +1288,32 @@ type DatasetVersion = {
1240
1288
  */
1241
1289
  timestampUnit?: "iso" | "s" | "ms" | "us";
1242
1290
  /**
1243
- * Number of gaps at the discovered cadence.
1291
+ * Number of gaps at the discovered cadence. Always `0` for `rt`.
1244
1292
  */
1245
1293
  gaps?: number;
1246
1294
  /**
1247
- * The largest gap, in units of the discovered cadence step.
1295
+ * The largest gap, in units of the discovered cadence step. Always `0` for `rt`.
1248
1296
  */
1249
1297
  largestGapSteps?: number;
1298
+ /**
1299
+ * Presigned GET URL to the stored file — see `dataFormat` for which format it's in.
1300
+ * Present once the version is `ready`. Long-lived (day-scale, not permanent): a
1301
+ * DuckDB-WASM/`lastra-ts`-style reader issues HTTP range requests against it lazily over
1302
+ * an extended viewing session, not in one shot like a browser upload.
1303
+ *
1304
+ */
1305
+ dataUrl?: string;
1306
+ /**
1307
+ * Which format `dataUrl` is actually in — check this rather than assuming it matches
1308
+ * how you uploaded it. `lastra` — our native columnar format — for a CSV (or gzip/zip
1309
+ * of one) upload, always converted on ingest. `parquet` for a parquet upload, stored
1310
+ * as-is today.
1311
+ *
1312
+ */
1313
+ dataFormat?: "lastra" | "parquet";
1250
1314
  };
1251
1315
  /**
1252
- * Progress of one upload, from staged through ingest. Postgres-backed once a version exists,
1316
+ * Progress of one upload, from staged through ingest. Durably recorded once a version exists,
1253
1317
  * so `ready`/`failed` are permanent answers; `uploading`/`ingesting` reflect in-flight state
1254
1318
  * that can itself age out — see the `404` case on `GET .../uploads/{uploadId}`.
1255
1319
  *
@@ -1261,7 +1325,8 @@ type DatasetUploadState = {
1261
1325
  * called yet.
1262
1326
  * * `ingesting` — `finalize` was called; the worker is parsing and validating the file.
1263
1327
  * * `ready` — ingested successfully. `version` carries the result.
1264
- * * `failed` — ingest rejected the file (e.g. bad CSV contract, mixed timestamp units).
1328
+ * * `failed` — ingest rejected the file (e.g. bad CSV contract, mixed timestamp units, a
1329
+ * `.zip` with no file inside or more than one).
1265
1330
  *
1266
1331
  */
1267
1332
  status: "uploading" | "ingesting" | "ready" | "failed";
@@ -1269,6 +1334,150 @@ type DatasetUploadState = {
1269
1334
  * The ingest job id, while `status` is `ingesting`.
1270
1335
  */
1271
1336
  jobId?: string;
1337
+ /**
1338
+ * A human-readable reason, present when `status` is `failed` (e.g. bad CSV contract,
1339
+ * mixed timestamp units, a `.zip` with no file inside or more than one). Durably
1340
+ * recorded alongside the failure itself, so it stays available however long after the
1341
+ * fact you poll — not tied to how recently the failure happened.
1342
+ *
1343
+ */
1344
+ error?: string;
1345
+ /**
1346
+ * Present when `status` is `ready` or `failed`.
1347
+ */
1348
+ version?: DatasetVersion;
1349
+ };
1350
+ /**
1351
+ * `POST /datasets/imports`'s request body. A common block plus one type-specific block,
1352
+ * selected by `type` — `dex` is the only value today.
1353
+ *
1354
+ */
1355
+ type DatasetImportRequest = {
1356
+ /**
1357
+ * A name unique among your datasets. `409` if already taken.
1358
+ */
1359
+ name: string;
1360
+ instrument: Instrument;
1361
+ /**
1362
+ * Start of the range to fetch, inclusive. Must be before `to`.
1363
+ */
1364
+ from: string;
1365
+ /**
1366
+ * End of the range to fetch, exclusive. The total span is capped by your tier — a
1367
+ * request wider than that ceiling is `400`, regardless of source type.
1368
+ *
1369
+ */
1370
+ to: string;
1371
+ /**
1372
+ * Optional. Omitted/blank keeps native per-trade event cadence — each swap at its own
1373
+ * timestamp, so the resulting version's `cadence` is `rt` unless the swaps happen to sit
1374
+ * on a fixed grid (see `DatasetVersion.cadence`). Set to `1s`, `1m` or
1375
+ * `5m` instead to get pre-aggregated candles at that width rather than raw trades (the
1376
+ * resulting dataset's `type` becomes `klines`); any other value is `400`. Not every
1377
+ * network supports every cadence — an unsupported combination fails asynchronously, not
1378
+ * at request time (see `DatasetImportState.error`).
1379
+ *
1380
+ */
1381
+ cadence?: "1s" | "1m" | "5m";
1382
+ /**
1383
+ * The source to fetch from. `dex` is the only value today.
1384
+ */
1385
+ type: "dex";
1386
+ dex?: DatasetImportDexRequest;
1387
+ };
1388
+ /**
1389
+ * The `dex` source's own fields — required when `type` is `dex`. `id`/`version` are required
1390
+ * for a plain (native-cadence) import; both are ignored if the top-level `cadence` requested
1391
+ * pre-aggregated candles instead, since that path needs neither a protocol nor a version
1392
+ * distinction.
1393
+ *
1394
+ */
1395
+ type DatasetImportDexRequest = {
1396
+ /**
1397
+ * Which chain the pool/pair lives on.
1398
+ */
1399
+ network: "ethereum" | "robinhood";
1400
+ /**
1401
+ * Which on-chain DEX protocol `contract` implements. Required unless the top-level
1402
+ * `cadence` requested pre-aggregated candles, in which case it's ignored.
1403
+ *
1404
+ */
1405
+ id?: "uniswap";
1406
+ /**
1407
+ * Uniswap version the pool/pair contract implements. Required unless the top-level
1408
+ * `cadence` requested pre-aggregated candles, in which case it's ignored.
1409
+ *
1410
+ */
1411
+ version?: "v2" | "v3";
1412
+ /**
1413
+ * The pool (v3) or pair (v2) contract address.
1414
+ */
1415
+ contract: string;
1416
+ /**
1417
+ * The factory that deployed `contract`. Optional — when omitted, it is discovered
1418
+ * on-chain from `contract` itself at fetch time. Supply it explicitly only if you
1419
+ * already know it, or the pool/pair belongs to a factory other than the canonical one
1420
+ * for `network`/`version`. Either way, the pool/pair is validated against whichever
1421
+ * factory is used before anything is fetched — a wrong or unrelated factory fails the
1422
+ * import rather than silently fetching from the wrong pool. Ignored if the top-level
1423
+ * `cadence` requested pre-aggregated candles.
1424
+ *
1425
+ */
1426
+ factory?: string;
1427
+ };
1428
+ /**
1429
+ * The response to `POST /datasets/imports` — the dataset now exists, and its fetch has started.
1430
+ */
1431
+ type DatasetImportCreated = {
1432
+ /**
1433
+ * Opaque id of the newly created dataset — same id space as `POST /datasets`.
1434
+ */
1435
+ datasetId: string;
1436
+ /**
1437
+ * Identifies this import. Pass to `GET /datasets/{datasetId}/imports/{importId}` to poll
1438
+ * it — there is no separate "finalize" step the way an upload has.
1439
+ *
1440
+ */
1441
+ importId: string;
1442
+ /**
1443
+ * The fetch/ingest job id.
1444
+ */
1445
+ jobId: string;
1446
+ /**
1447
+ * Always `fetching` in this response — the fetch has only just started.
1448
+ */
1449
+ status: "fetching";
1450
+ };
1451
+ /**
1452
+ * Progress of one import, from fetching through ingest. `fetching` is the one status only an
1453
+ * import ever reports — an upload's file already exists by the time you can poll it; an
1454
+ * import's doesn't, until this source finishes fetching it.
1455
+ *
1456
+ */
1457
+ type DatasetImportState = {
1458
+ importId: string;
1459
+ /**
1460
+ * * `fetching` — reading from the source; nothing staged yet.
1461
+ * * `ingesting` — fetch complete, staged, and re-entered the same ingest chain an
1462
+ * upload uses; the worker is parsing and validating it.
1463
+ * * `ready` — ingested successfully. `version` carries the result.
1464
+ * * `failed` — the fetch or the ingest that followed it was rejected. `error` names why.
1465
+ *
1466
+ */
1467
+ status: "fetching" | "ingesting" | "ready" | "failed";
1468
+ /**
1469
+ * The fetch/ingest job id, while `status` is `fetching` or `ingesting`.
1470
+ */
1471
+ jobId?: string;
1472
+ /**
1473
+ * A human-readable reason, present when `status` is `failed` — an unresolvable
1474
+ * pool/pair, no data in the requested range, a range older than the configured source
1475
+ * retains, the fetch exceeding your tier's time ceiling, or any of
1476
+ * `DatasetUploadState.error`'s own ingest-side reasons once fetching hands off to it.
1477
+ * Durably recorded, same as on the upload path.
1478
+ *
1479
+ */
1480
+ error?: string;
1272
1481
  /**
1273
1482
  * Present when `status` is `ready` or `failed`.
1274
1483
  */
@@ -1715,8 +1924,8 @@ type PrepareBacktestErrors = {
1715
1924
  * Invalid request or parameters. Also returned when `from` is older than the configured
1716
1925
  * lookback window or `to` is in the future. For `exchangeId: user`, also returned when
1717
1926
  * the dataset's current upload has not finished ingesting, or `cadence` asks for a finer
1718
- * granularity than the dataset's own discovered cadence, or the requested range exceeds
1719
- * your tier's range limit.
1927
+ * granularity than the dataset's own discovered cadence (or one that isn't an exact
1928
+ * multiple of it), or the requested range exceeds your tier's range limit.
1720
1929
  *
1721
1930
  */
1722
1931
  400: ResponseError;
@@ -1980,6 +2189,16 @@ type ExecuteBacktestData = {
1980
2189
  */
1981
2190
  storeSignals?: boolean;
1982
2191
  equityCurve?: EquityCurveOptions;
2192
+ /**
2193
+ * Capital/fee/position-size overrides for this one run — the same shape
2194
+ * `executeSweep`'s `baseConfig` accepts. Omit to run at the platform defaults
2195
+ * (`initialFunding: 100`, `feeRate: 0.001`). `buyFeeRate`/`sellFeeRate`/`feeLeg`
2196
+ * are accepted for shape compatibility with a sweep's `baseConfig`, but this
2197
+ * endpoint has one fee-rate slot: a value that implies asymmetric buy/sell fees,
2198
+ * or a non-default `feeLeg`, is rejected with `400`.
2199
+ *
2200
+ */
2201
+ baseConfig?: SweepBaseConfig;
1983
2202
  /**
1984
2203
  * Strategy properties to apply to this run. Omit to run the strategy's declared
1985
2204
  * defaults, which is exactly what a request without this field has always done.
@@ -2000,7 +2219,7 @@ type ExecuteBacktestData = {
2000
2219
  *
2001
2220
  */
2002
2221
  params?: {
2003
- [key: string]: number | string | boolean;
2222
+ [key: string]: ScalarStrategyParamValue;
2004
2223
  };
2005
2224
  };
2006
2225
  path: {
@@ -2327,6 +2546,75 @@ type GetDatasetUploadResponses = {
2327
2546
  200: DatasetUploadState;
2328
2547
  };
2329
2548
  type GetDatasetUploadResponse = GetDatasetUploadResponses[keyof GetDatasetUploadResponses];
2549
+ type ImportDatasetData = {
2550
+ /**
2551
+ * What to fetch, and where from
2552
+ */
2553
+ body: DatasetImportRequest;
2554
+ path?: never;
2555
+ query?: never;
2556
+ url: "/datasets/imports";
2557
+ };
2558
+ type ImportDatasetErrors = {
2559
+ /**
2560
+ * Invalid request; `instrument` isn't a plain spot pair; `from >= to`; `cadence` present
2561
+ * but not one of its supported values; the requested range exceeds your tier's import
2562
+ * range ceiling; the requested range's rough size estimate exceeds your tier's row limit;
2563
+ * `dex.network`/`dex.id` not one of their supported values; `dex.contract`/`dex.factory`
2564
+ * fail basic shape validation; or, when `cadence` is omitted, `dex.id`/`dex.version`
2565
+ * missing. Whether the pool/pair actually exists and resolves — and, for a candle
2566
+ * `cadence`, whether that combination is actually servable on the requested `network` —
2567
+ * is checked later, asynchronously — see the `failed` status on the poll endpoint below.
2568
+ *
2569
+ */
2570
+ 400: ResponseError;
2571
+ /**
2572
+ * You already have a dataset with this `name`
2573
+ */
2574
+ 409: ResponseError;
2575
+ /**
2576
+ * Your tier's dataset count limit is reached. Delete one, or upgrade.
2577
+ */
2578
+ 429: ResponseError;
2579
+ };
2580
+ type ImportDatasetError = ImportDatasetErrors[keyof ImportDatasetErrors];
2581
+ type ImportDatasetResponses = {
2582
+ /**
2583
+ * Dataset created, fetch started
2584
+ */
2585
+ 202: DatasetImportCreated;
2586
+ };
2587
+ type ImportDatasetResponse = ImportDatasetResponses[keyof ImportDatasetResponses];
2588
+ type GetDatasetImportData = {
2589
+ body?: never;
2590
+ path: {
2591
+ /**
2592
+ * The id returned by `POST /datasets/imports`
2593
+ */
2594
+ datasetId: string;
2595
+ /**
2596
+ * The `importId` returned by `POST /datasets/imports`
2597
+ */
2598
+ importId: string;
2599
+ };
2600
+ query?: never;
2601
+ url: "/datasets/{datasetId}/imports/{importId}";
2602
+ };
2603
+ type GetDatasetImportErrors = {
2604
+ /**
2605
+ * No such dataset for this user, or genuinely nothing is known about this `importId`.
2606
+ *
2607
+ */
2608
+ 404: ResponseError;
2609
+ };
2610
+ type GetDatasetImportError = GetDatasetImportErrors[keyof GetDatasetImportErrors];
2611
+ type GetDatasetImportResponses = {
2612
+ /**
2613
+ * Current fetch/ingest state
2614
+ */
2615
+ 200: DatasetImportState;
2616
+ };
2617
+ type GetDatasetImportResponse = GetDatasetImportResponses[keyof GetDatasetImportResponses];
2330
2618
  type ClientOptions = {
2331
2619
  baseUrl: "https://api.qtsurfer.net/v1" | "https://api.qtsurfer.com/v1" | (string & {});
2332
2620
  };
@@ -2673,15 +2961,22 @@ declare const getSweepRunEquityCurve: <ThrowOnError extends boolean = false>(opt
2673
2961
  * backtest result with the curve included.
2674
2962
  *
2675
2963
  * The same request (same `prepareJobId`, `strategyId`, `storeSignals`, `equityCurve`,
2676
- * `params`) always returns the same `jobId` (idempotent) — a request that omits `equityCurve`
2677
- * or `params` dedupes exactly as it did before those fields existed. Two different `params`
2678
- * vectors over one prepare are two different jobs, and `9` and `9.0` are the same one.
2964
+ * `baseConfig`, `params`) always returns the same `jobId` (idempotent) — a request that omits
2965
+ * `equityCurve`, `baseConfig` or `params` dedupes exactly as it did before those fields
2966
+ * existed. Two different `params` vectors over one prepare are two different jobs, and `9`
2967
+ * and `9.0` are the same one.
2679
2968
  *
2680
2969
  * The re-run is an independent execution rather than a replay of the sweep trial — the two
2681
2970
  * paths do not share a simulator — but they are pinned to agree: one vector run both ways
2682
2971
  * matches on every leaderboard metric, asserted as a regression test. Treat a difference as a
2683
2972
  * bug worth reporting, not as expected behaviour.
2684
2973
  *
2974
+ * Optionally takes `baseConfig`, the same `SweepBaseConfig` shape `executeSweep` accepts —
2975
+ * `initialFunding`, `feeRate`, `percentAmountToLock`, etc. — so the same object can be reused
2976
+ * against either endpoint. This endpoint has one effective fee rate rather than a sweep's
2977
+ * independent buy/sell legs: a `baseConfig` that resolves to different buy/sell rates, or sets
2978
+ * a non-default `feeLeg`, is rejected with `400` rather than silently collapsed to one side.
2979
+ *
2685
2980
  * Works unchanged for a dataset-backed prepare (`exchangeId: user`) — the request body is
2686
2981
  * identical either way, since the instrument and range are recovered from `prepareJobId`.
2687
2982
  *
@@ -2734,11 +3029,22 @@ declare const listDatasets: <ThrowOnError extends boolean = false>(options?: Opt
2734
3029
  * response. `instrument` must be a plain spot pair (`BASE/QUOTE`, exactly one `/`); derivative
2735
3030
  * forms (e.g. `BTC/USDT:USDT`) are rejected.
2736
3031
  *
2737
- * **Upload format.** A CSV with a header row. Required columns: `timestamp` (ISO-8601, or
2738
- * numeric epoch seconds/millis/micros — detected from the first row, then enforced for every
2739
- * later row), `close`. Optional columns: `open`, `high`, `low`, `volume`, `quoteVolume`,
2740
- * `bid`, `bidSize`, `ask`, `askSize`. Cadence and timestamp unit are discovered from the data,
2741
- * not declared.
3032
+ * **Upload format.** A CSV with a header row, or a parquet file with the same columns by
3033
+ * name. Required: `timestamp` (ISO-8601, or numeric epoch seconds/millis/micros — detected
3034
+ * from the first row, then enforced for every later row), `close`. Optional: `open`, `high`,
3035
+ * `low`, `volume`, `quoteVolume`, `bid`, `bidSize`, `ask`, `askSize`. Cadence and timestamp
3036
+ * unit are discovered from the data, not declared.
3037
+ *
3038
+ * A CSV upload is converted to our native columnar format (`lastra`) for storage. A parquet
3039
+ * upload is stored as-is today. Either way, always check `dataFormat` on
3040
+ * `GET /datasets/{datasetId}` and `GET /datasets/{datasetId}/uploads/{uploadId}` for which
3041
+ * one `dataUrl` actually is, rather than assuming from how you uploaded it.
3042
+ *
3043
+ * The bytes PUT to `upload.url` may be that file directly, gzipped (`.gz`), or zipped
3044
+ * (`.zip`, exactly one file inside — a dataset is one file regardless of how it travels).
3045
+ * Format is detected from the decompressed content itself: there is no filename or
3046
+ * `Content-Type` anywhere in this flow for a client to declare it with, so nothing needs to
3047
+ * be sent besides the bytes.
2742
3048
  *
2743
3049
  */
2744
3050
  declare const createDataset: <ThrowOnError extends boolean = false>(options: Options<CreateDatasetData, ThrowOnError>) => _hey_api_client_fetch.RequestResult<DatasetCreated, ResponseError, ThrowOnError>;
@@ -2794,7 +3100,41 @@ declare const finalizeDatasetUpload: <ThrowOnError extends boolean = false>(opti
2794
3100
  *
2795
3101
  */
2796
3102
  declare const getDatasetUpload: <ThrowOnError extends boolean = false>(options: Options<GetDatasetUploadData, ThrowOnError>) => _hey_api_client_fetch.RequestResult<DatasetUploadState, ResponseError, ThrowOnError>;
3103
+ /**
3104
+ * Create a dataset by importing history instead of uploading it
3105
+ * A second way to get data into a dataset, alongside `POST /datasets`: instead of `PUT`ting a
3106
+ * file yourself, ask the API to go fetch history on your behalf. Creates the dataset and
3107
+ * starts the fetch in the same call — there is no separate upload step, and the result lands
3108
+ * as a dataset version indistinguishable from an uploaded one once it's ready. Poll
3109
+ * `GET /datasets/{datasetId}/imports/{importId}` for progress.
3110
+ *
3111
+ * `type` selects the source. `dex` — history over a pool/pair's own on-chain market — is the
3112
+ * only value today; other source types join this same endpoint later.
3113
+ *
3114
+ * A `dex` import has two data shapes, chosen by the top-level `cadence`:
3115
+ *
3116
+ * * Omitted/blank (default) — on-chain swap history, replayed directly from the pool/pair's
3117
+ * own chain. Cadence is native, not resampled: each swap keeps the timestamp it happened
3118
+ * at rather than being bucketed into candles, so the resulting version's `cadence` is `rt`
3119
+ * unless the swaps happen to sit on a fixed grid (see `DatasetVersion.cadence`).
3120
+ * * One of `1s` / `1m` / `5m` — pre-aggregated candles at that width instead of raw trades.
3121
+ * The resulting dataset's `type` is `klines`, not `ticker`. Not every network supports every
3122
+ * cadence yet — an unsupported combination fails asynchronously, same as an unresolvable
3123
+ * pool (see the `failed` status on the poll endpoint below).
3124
+ *
3125
+ */
3126
+ declare const importDataset: <ThrowOnError extends boolean = false>(options: Options<ImportDatasetData, ThrowOnError>) => _hey_api_client_fetch.RequestResult<DatasetImportCreated, ResponseError, ThrowOnError>;
3127
+ /**
3128
+ * Get the state of an import/ingest
3129
+ * Poll after `POST /datasets/imports` until `status` is `ready` or `failed`. An import spends
3130
+ * real time fetching from its source before anything is even staged — `fetching` is the one
3131
+ * status only an import ever reports; `ingesting`/`ready`/`failed` mean exactly what they do
3132
+ * on `GET /datasets/{datasetId}/uploads/{uploadId}`, since an import re-enters that same
3133
+ * ingest chain once it has fetched and staged its data.
3134
+ *
3135
+ */
3136
+ declare const getDatasetImport: <ThrowOnError extends boolean = false>(options: Options<GetDatasetImportData, ThrowOnError>) => _hey_api_client_fetch.RequestResult<DatasetImportState, ResponseError, ThrowOnError>;
2797
3137
 
2798
3138
  declare const client: _hey_api_client_fetch.Client;
2799
3139
 
2800
- export { type AcceptedJob, type AuthTokenError, type AuthTokenResponse, type AuthenticateData, type AuthenticateError, type AuthenticateErrors, type AuthenticateResponse, type AuthenticateResponses, type BacktestJobResult, type CancelBacktestData, type CancelBacktestError, type CancelBacktestErrors, type CancelBacktestResponse, type CancelBacktestResponses, type CancelSweepData, type CancelSweepError, type CancelSweepErrors, type CancelSweepResponse, type CancelSweepResponses, type ClientOptions, type CompileStrategyData, type CompileStrategyError, type CompileStrategyErrors, type CompileStrategyResponse, type CompileStrategyResponses, type CoverageWindow, type CreateDatasetData, type CreateDatasetError, type CreateDatasetErrors, type CreateDatasetResponse, type CreateDatasetResponses, type DataSourceType, type Dataset, type DatasetCreated, type DatasetUploadSession, type DatasetUploadState, type DatasetUploadTarget, type DatasetVersion, type DatasetWithLinks, type DeclaredProperty, type DeleteDatasetData, type DeleteDatasetError, type DeleteDatasetErrors, type DeleteDatasetResponse, type DeleteDatasetResponses, type DeleteStrategyData, type DeleteStrategyError, type DeleteStrategyErrors, type DeleteStrategyResponse, type DeleteStrategyResponses, type DownloadKlinesData, type DownloadKlinesError, type DownloadKlinesErrors, type DownloadKlinesResponse, type DownloadKlinesResponses, type DownloadTickersData, type DownloadTickersError, type DownloadTickersErrors, type DownloadTickersResponse, type DownloadTickersResponses, type EquityCurveMeta, type EquityCurveOptions, type EquityCurveOutMode, type EquityCurveRequest, type EquityCurveResult, type EquityPoint, type Exchange, type ExecuteBacktestData, type ExecuteBacktestError, type ExecuteBacktestErrors, type ExecuteBacktestResponse, type ExecuteBacktestResponses, type ExecuteSweepAccepted, type ExecuteSweepData, type ExecuteSweepError, type ExecuteSweepErrors, type ExecuteSweepRequest, type ExecuteSweepResponse, type ExecuteSweepResponses, type ExecuteSweepResult, type FinalizeDatasetUploadData, type FinalizeDatasetUploadError, type FinalizeDatasetUploadErrors, type FinalizeDatasetUploadResponse, type FinalizeDatasetUploadResponses, type GetBacktestResultData, type GetBacktestResultError, type GetBacktestResultErrors, type GetBacktestResultResponse, type GetBacktestResultResponses, type GetDatasetData, type GetDatasetError, type GetDatasetErrors, type GetDatasetResponse, type GetDatasetResponses, type GetDatasetUploadData, type GetDatasetUploadError, type GetDatasetUploadErrors, type GetDatasetUploadResponse, type GetDatasetUploadResponses, type GetPrepareStatusData, type GetPrepareStatusError, type GetPrepareStatusErrors, type GetPrepareStatusResponse, type GetPrepareStatusResponses, type GetStrategyCodeData, type GetStrategyCodeError, type GetStrategyCodeErrors, type GetStrategyCodeResponse, type GetStrategyCodeResponses, type GetStrategyData, type GetStrategyError, type GetStrategyErrors, type GetStrategyResponse, type GetStrategyResponses, type GetSweepResultData, type GetSweepResultError, type GetSweepResultErrors, type GetSweepResultResponse, type GetSweepResultResponses, type GetSweepRunEquityCurveData, type GetSweepRunEquityCurveError, type GetSweepRunEquityCurveErrors, type GetSweepRunEquityCurveResponse, type GetSweepRunEquityCurveResponses, type GetSweepSensitivityData, type GetSweepSensitivityError, type GetSweepSensitivityErrors, type GetSweepSensitivityResponse, type GetSweepSensitivityResponses, type HalLink, type Instrument, type InstrumentCoverage, type InstrumentDetail, type InstrumentLinks, type InstrumentListMeta, type InstrumentListResponse, type JobState, type ListDatasetsData, type ListDatasetsResponse, type ListDatasetsResponses, type ListExchangesData, type ListExchangesResponse, type ListExchangesResponses, type ListInstrumentsData, type ListInstrumentsError, type ListInstrumentsErrors, type ListInstrumentsResponse, type ListInstrumentsResponses, type ListSegmentInstrumentsData, type ListSegmentInstrumentsError, type ListSegmentInstrumentsErrors, type ListSegmentInstrumentsResponse, type ListSegmentInstrumentsResponses, type ListStrategiesData, type ListStrategiesResponse, type ListStrategiesResponses, type Notice, type OpenDatasetUploadData, type OpenDatasetUploadError, type OpenDatasetUploadErrors, type OpenDatasetUploadResponse, type OpenDatasetUploadResponses, type Options, type PrepareBacktestData, type PrepareBacktestError, type PrepareBacktestErrors, type PrepareBacktestResponse, type PrepareBacktestResponses, type PrepareJobState, type PrepareRequest, type ResponseError, type ResultMap, type StrategyId, type StrategyLinks, type StrategyState, type StrategySummary, type SweepAxis, type SweepBaseConfig, type SweepHeatmap, type SweepHeatmapCell, type SweepMarginal, type SweepMarginalPoint, type SweepProgress, type SweepRunRow, type SweepSensitivity, type SweepSpecRequest, type ValidateStrategyData, type ValidateStrategyError, type ValidateStrategyErrors, type ValidateStrategyResponse, type ValidateStrategyResponses, type WalkForwardAccepted, type WalkForwardFold, type WalkForwardRequest, type WalkForwardResult, authenticate, cancelBacktest, cancelSweep, client, compileStrategy, createDataset, deleteDataset, deleteStrategy, downloadKlines, downloadTickers, executeBacktest, executeSweep, finalizeDatasetUpload, getBacktestResult, getDataset, getDatasetUpload, getPrepareStatus, getStrategy, getStrategyCode, getSweepResult, getSweepRunEquityCurve, getSweepSensitivity, listDatasets, listExchanges, listInstruments, listSegmentInstruments, listStrategies, openDatasetUpload, prepareBacktest, validateStrategy };
3140
+ export { type AcceptedJob, type AuthTokenError, type AuthTokenResponse, type AuthenticateData, type AuthenticateError, type AuthenticateErrors, type AuthenticateResponse, type AuthenticateResponses, type BacktestJobResult, type CancelBacktestData, type CancelBacktestError, type CancelBacktestErrors, type CancelBacktestResponse, type CancelBacktestResponses, type CancelSweepData, type CancelSweepError, type CancelSweepErrors, type CancelSweepResponse, type CancelSweepResponses, type ClientOptions, type CompileStrategyData, type CompileStrategyError, type CompileStrategyErrors, type CompileStrategyResponse, type CompileStrategyResponses, type CoverageWindow, type CreateDatasetData, type CreateDatasetError, type CreateDatasetErrors, type CreateDatasetResponse, type CreateDatasetResponses, type DataSourceType, type Dataset, type DatasetCreated, type DatasetImportCreated, type DatasetImportDexRequest, type DatasetImportRequest, type DatasetImportState, type DatasetUploadSession, type DatasetUploadState, type DatasetUploadTarget, type DatasetVersion, type DatasetWithLinks, type DeclaredProperty, type DeleteDatasetData, type DeleteDatasetError, type DeleteDatasetErrors, type DeleteDatasetResponse, type DeleteDatasetResponses, type DeleteStrategyData, type DeleteStrategyError, type DeleteStrategyErrors, type DeleteStrategyResponse, type DeleteStrategyResponses, type DownloadKlinesData, type DownloadKlinesError, type DownloadKlinesErrors, type DownloadKlinesResponse, type DownloadKlinesResponses, type DownloadTickersData, type DownloadTickersError, type DownloadTickersErrors, type DownloadTickersResponse, type DownloadTickersResponses, type EquityCurveMeta, type EquityCurveOptions, type EquityCurveOutMode, type EquityCurveRequest, type EquityCurveResult, type EquityPoint, type Exchange, type ExecuteBacktestData, type ExecuteBacktestError, type ExecuteBacktestErrors, type ExecuteBacktestResponse, type ExecuteBacktestResponses, type ExecuteSweepAccepted, type ExecuteSweepData, type ExecuteSweepError, type ExecuteSweepErrors, type ExecuteSweepRequest, type ExecuteSweepResponse, type ExecuteSweepResponses, type ExecuteSweepResult, type FinalizeDatasetUploadData, type FinalizeDatasetUploadError, type FinalizeDatasetUploadErrors, type FinalizeDatasetUploadResponse, type FinalizeDatasetUploadResponses, type GetBacktestResultData, type GetBacktestResultError, type GetBacktestResultErrors, type GetBacktestResultResponse, type GetBacktestResultResponses, type GetDatasetData, type GetDatasetError, type GetDatasetErrors, type GetDatasetImportData, type GetDatasetImportError, type GetDatasetImportErrors, type GetDatasetImportResponse, type GetDatasetImportResponses, type GetDatasetResponse, type GetDatasetResponses, type GetDatasetUploadData, type GetDatasetUploadError, type GetDatasetUploadErrors, type GetDatasetUploadResponse, type GetDatasetUploadResponses, type GetPrepareStatusData, type GetPrepareStatusError, type GetPrepareStatusErrors, type GetPrepareStatusResponse, type GetPrepareStatusResponses, type GetStrategyCodeData, type GetStrategyCodeError, type GetStrategyCodeErrors, type GetStrategyCodeResponse, type GetStrategyCodeResponses, type GetStrategyData, type GetStrategyError, type GetStrategyErrors, type GetStrategyResponse, type GetStrategyResponses, type GetSweepResultData, type GetSweepResultError, type GetSweepResultErrors, type GetSweepResultResponse, type GetSweepResultResponses, type GetSweepRunEquityCurveData, type GetSweepRunEquityCurveError, type GetSweepRunEquityCurveErrors, type GetSweepRunEquityCurveResponse, type GetSweepRunEquityCurveResponses, type GetSweepSensitivityData, type GetSweepSensitivityError, type GetSweepSensitivityErrors, type GetSweepSensitivityResponse, type GetSweepSensitivityResponses, type HalLink, type ImportDatasetData, type ImportDatasetError, type ImportDatasetErrors, type ImportDatasetResponse, type ImportDatasetResponses, type Instrument, type InstrumentCoverage, type InstrumentDetail, type InstrumentLinks, type InstrumentListMeta, type InstrumentListResponse, type JobState, type ListDatasetsData, type ListDatasetsResponse, type ListDatasetsResponses, type ListExchangesData, type ListExchangesResponse, type ListExchangesResponses, type ListInstrumentsData, type ListInstrumentsError, type ListInstrumentsErrors, type ListInstrumentsResponse, type ListInstrumentsResponses, type ListSegmentInstrumentsData, type ListSegmentInstrumentsError, type ListSegmentInstrumentsErrors, type ListSegmentInstrumentsResponse, type ListSegmentInstrumentsResponses, type ListStrategiesData, type ListStrategiesResponse, type ListStrategiesResponses, type Notice, type OpenDatasetUploadData, type OpenDatasetUploadError, type OpenDatasetUploadErrors, type OpenDatasetUploadResponse, type OpenDatasetUploadResponses, type Options, type PrepareBacktestData, type PrepareBacktestError, type PrepareBacktestErrors, type PrepareBacktestResponse, type PrepareBacktestResponses, type PrepareJobState, type PrepareRequest, type ResponseError, type ResultMap, type ScalarStrategyParamValue, type StrategyId, type StrategyLinks, type StrategyState, type StrategySummary, type SweepAxis, type SweepBaseConfig, type SweepHeatmap, type SweepHeatmapCell, type SweepMarginal, type SweepMarginalPoint, type SweepProgress, type SweepRunRow, type SweepSensitivity, type SweepSpecRequest, type ValidateStrategyData, type ValidateStrategyError, type ValidateStrategyErrors, type ValidateStrategyResponse, type ValidateStrategyResponses, type WalkForwardAccepted, type WalkForwardFold, type WalkForwardRequest, type WalkForwardResult, authenticate, cancelBacktest, cancelSweep, client, compileStrategy, createDataset, deleteDataset, deleteStrategy, downloadKlines, downloadTickers, executeBacktest, executeSweep, finalizeDatasetUpload, getBacktestResult, getDataset, getDatasetImport, getDatasetUpload, getPrepareStatus, getStrategy, getStrategyCode, getSweepResult, getSweepRunEquityCurve, getSweepSensitivity, importDataset, listDatasets, listExchanges, listInstruments, listSegmentInstruments, listStrategies, openDatasetUpload, prepareBacktest, validateStrategy };