@backtest-kit/cli 19.5.0 → 19.7.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/build/index.cjs CHANGED
@@ -146,6 +146,7 @@ function treeKill(pid, signalOrCallback, callback) {
146
146
  }
147
147
 
148
148
  const DRAIN_MAX_AWAIT = 250;
149
+ const KILL_SYMBOL = Symbol.for("backtest-kit-kill");
149
150
  const drainStream = (stream) => new Promise((resolve) => {
150
151
  if (stream.writableLength === 0) {
151
152
  stream.write("", () => resolve());
@@ -164,6 +165,7 @@ const flushStream = (stream) => {
164
165
  return drainStream(stream);
165
166
  };
166
167
  const kill = functoolsKit.singleshot(async (code = -1) => {
168
+ globalThis[KILL_SYMBOL] = 1;
167
169
  await Promise.race([
168
170
  Promise.all([
169
171
  flushStream(process.stdout),
@@ -276,6 +278,18 @@ const timeNow = () => {
276
278
  class ErrorService {
277
279
  constructor() {
278
280
  this.handleGlobalError = async (error) => {
281
+ if (BacktestKit.OrderDeletedError.isOrderDeletedError(error)) {
282
+ return;
283
+ }
284
+ if (BacktestKit.OrderRejectedError.isOrderRejectedError(error)) {
285
+ return;
286
+ }
287
+ if (BacktestKit.OrderTransientError.isOrderTransientError(error)) {
288
+ return;
289
+ }
290
+ if (BacktestKit.GeneralExpectedError.isGeneralExpectedError(error)) {
291
+ return;
292
+ }
279
293
  const today = new Date();
280
294
  const dd = String(today.getDate()).padStart(2, "0");
281
295
  const mm = String(today.getMonth() + 1).padStart(2, "0");
@@ -290,10 +304,34 @@ class ErrorService {
290
304
  };
291
305
  this._listenForError = () => {
292
306
  process.on("uncaughtException", (err) => {
307
+ if (BacktestKit.OrderDeletedError.isOrderDeletedError(err)) {
308
+ return;
309
+ }
310
+ if (BacktestKit.OrderRejectedError.isOrderRejectedError(err)) {
311
+ return;
312
+ }
313
+ if (BacktestKit.OrderTransientError.isOrderTransientError(err)) {
314
+ return;
315
+ }
316
+ if (BacktestKit.GeneralExpectedError.isGeneralExpectedError(err)) {
317
+ return;
318
+ }
293
319
  console.log(err);
294
320
  this.handleGlobalError(err);
295
321
  });
296
322
  process.on("unhandledRejection", (err) => {
323
+ if (BacktestKit.OrderDeletedError.isOrderDeletedError(err)) {
324
+ return;
325
+ }
326
+ if (BacktestKit.OrderRejectedError.isOrderRejectedError(err)) {
327
+ return;
328
+ }
329
+ if (BacktestKit.OrderTransientError.isOrderTransientError(err)) {
330
+ return;
331
+ }
332
+ if (BacktestKit.GeneralExpectedError.isGeneralExpectedError(err)) {
333
+ return;
334
+ }
297
335
  console.log(err);
298
336
  this.handleGlobalError(err);
299
337
  });
@@ -426,6 +464,10 @@ const SETUP_ADAPTER_FN = () => {
426
464
  BacktestKit.StateLive.usePersist();
427
465
  BacktestKit.StateBacktest.useLocal();
428
466
  }
467
+ {
468
+ BacktestKit.DictionaryLive.usePersist();
469
+ BacktestKit.DictionaryBacktest.useLocal();
470
+ }
429
471
  {
430
472
  BacktestKit.Markdown.useDummy();
431
473
  BacktestKit.Log.useJsonl();
@@ -451,6 +493,7 @@ class SetupUtils {
451
493
  BacktestKit.Report.enable();
452
494
  BacktestKit.Dump.enable();
453
495
  BacktestKit.State.enable();
496
+ BacktestKit.Dictionary.enable();
454
497
  BacktestKit.Memory.enable();
455
498
  }
456
499
  if (!cli.configConnectionService.hasConfig("setup.config")) {
@@ -476,6 +519,7 @@ class SetupUtils {
476
519
  BacktestKit.Report.disable();
477
520
  BacktestKit.Dump.disable();
478
521
  BacktestKit.State.disable();
522
+ BacktestKit.Dictionary.disable();
479
523
  BacktestKit.Memory.disable();
480
524
  }
481
525
  {
@@ -499,6 +543,7 @@ class SetupUtils {
499
543
  BacktestKit.PersistMemoryAdapter.clear();
500
544
  BacktestKit.PersistRecentAdapter.clear();
501
545
  BacktestKit.PersistStateAdapter.clear();
546
+ BacktestKit.PersistDictionaryAdapter.clear();
502
547
  BacktestKit.PersistSessionAdapter.clear();
503
548
  BacktestKit.PersistStrategyAdapter.clear();
504
549
  }
@@ -3695,7 +3740,7 @@ const main$j = async () => {
3695
3740
  if (MODES.some((mode) => values[mode])) {
3696
3741
  return;
3697
3742
  }
3698
- process.stdout.write(`@backtest-kit/cli ${"19.5.0"}\n`);
3743
+ process.stdout.write(`@backtest-kit/cli ${"19.7.0"}\n`);
3699
3744
  process.stdout.write("\n");
3700
3745
  process.stdout.write(`Run with --help to see available commands.\n`);
3701
3746
  process.stdout.write("\n");
@@ -5625,7 +5670,7 @@ const main$1 = async () => {
5625
5670
  if (!values.help) {
5626
5671
  return;
5627
5672
  }
5628
- process.stdout.write(`@backtest-kit/cli ${"19.5.0"}\n\n`);
5673
+ process.stdout.write(`@backtest-kit/cli ${"19.7.0"}\n\n`);
5629
5674
  process.stdout.write(HELP_TEXT);
5630
5675
  process.exit(0);
5631
5676
  };
@@ -5639,7 +5684,7 @@ const main = async () => {
5639
5684
  if (!values.version) {
5640
5685
  return;
5641
5686
  }
5642
- process.stdout.write(`@backtest-kit/cli ${"19.5.0"}\n`);
5687
+ process.stdout.write(`@backtest-kit/cli ${"19.7.0"}\n`);
5643
5688
  process.exit(0);
5644
5689
  };
5645
5690
  main();
package/build/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import * as BacktestKit from 'backtest-kit';
3
- import { setConfig, listenExit, emitters, Notification, Cron, Recent, Storage, Markdown, Report, Dump, State, Memory, MarkdownWriter, ReportWriter, PersistSignalAdapter, PersistRiskAdapter, PersistScheduleAdapter, PersistPartialAdapter, PersistBreakevenAdapter, PersistCandleAdapter, PersistStorageAdapter, PersistNotificationAdapter, PersistLogAdapter, PersistMeasureAdapter, PersistIntervalAdapter, PersistMemoryAdapter, PersistRecentAdapter, PersistStateAdapter, PersistSessionAdapter, PersistStrategyAdapter, Log, StorageLive, StorageBacktest, NotificationLive, NotificationBacktest, RecentLive, RecentBacktest, Broker, SessionLive, SessionBacktest, MemoryLive, MemoryBacktest, StateLive, StateBacktest, listExchangeSchema, addExchangeSchema, roundTicks, listFrameSchema, addFrameSchema, listenDoneLive, listenDoneBacktest, shutdown, listenSignal, listStrategySchema, overrideExchangeSchema, Backtest, System, Cache, Interval, alignToInterval, addWalkerSchema, overrideWalkerSchema, Walker, listenDoneWalker, Live, getCandles, checkCandles, warmCandles, listenRisk, listenStrategyCommit, listenOrderFill, listenOrderReject, listenOrderContinue, listenOrderStop, listenSignalNotify, Exchange, runInMockContext, addSweepSchema, Sweep } from 'backtest-kit';
3
+ import { setConfig, listenExit, emitters, OrderDeletedError, OrderRejectedError, OrderTransientError, GeneralExpectedError, Notification, Cron, Recent, Storage, Markdown, Report, Dump, State, Dictionary, Memory, MarkdownWriter, ReportWriter, PersistSignalAdapter, PersistRiskAdapter, PersistScheduleAdapter, PersistPartialAdapter, PersistBreakevenAdapter, PersistCandleAdapter, PersistStorageAdapter, PersistNotificationAdapter, PersistLogAdapter, PersistMeasureAdapter, PersistIntervalAdapter, PersistMemoryAdapter, PersistRecentAdapter, PersistStateAdapter, PersistDictionaryAdapter, PersistSessionAdapter, PersistStrategyAdapter, Log, StorageLive, StorageBacktest, NotificationLive, NotificationBacktest, RecentLive, RecentBacktest, Broker, SessionLive, SessionBacktest, MemoryLive, MemoryBacktest, StateLive, StateBacktest, DictionaryLive, DictionaryBacktest, listExchangeSchema, addExchangeSchema, roundTicks, listFrameSchema, addFrameSchema, listenDoneLive, listenDoneBacktest, shutdown, listenSignal, listStrategySchema, overrideExchangeSchema, Backtest, System, Cache, Interval, alignToInterval, addWalkerSchema, overrideWalkerSchema, Walker, listenDoneWalker, Live, getCandles, checkCandles, warmCandles, listenRisk, listenStrategyCommit, listenOrderFill, listenOrderReject, listenOrderContinue, listenOrderStop, listenSignalNotify, Exchange, runInMockContext, addSweepSchema, Sweep } from 'backtest-kit';
4
4
  import { singleshot, sleep, getErrorMessage, errorData, BehaviorSubject, Subject, str, compose, createAwaiter, execpool, queued, randomString, TIMEOUT_SYMBOL, typo, retry, trycatch, ttl, Source, memoize, isObject } from 'functools-kit';
5
5
  import { exec, spawn } from 'child_process';
6
6
  import fs, { constants, realpathSync } from 'fs';
@@ -121,6 +121,7 @@ function treeKill(pid, signalOrCallback, callback) {
121
121
  }
122
122
 
123
123
  const DRAIN_MAX_AWAIT = 250;
124
+ const KILL_SYMBOL = Symbol.for("backtest-kit-kill");
124
125
  const drainStream = (stream) => new Promise((resolve) => {
125
126
  if (stream.writableLength === 0) {
126
127
  stream.write("", () => resolve());
@@ -139,6 +140,7 @@ const flushStream = (stream) => {
139
140
  return drainStream(stream);
140
141
  };
141
142
  const kill = singleshot(async (code = -1) => {
143
+ globalThis[KILL_SYMBOL] = 1;
142
144
  await Promise.race([
143
145
  Promise.all([
144
146
  flushStream(process.stdout),
@@ -251,6 +253,18 @@ const timeNow = () => {
251
253
  class ErrorService {
252
254
  constructor() {
253
255
  this.handleGlobalError = async (error) => {
256
+ if (OrderDeletedError.isOrderDeletedError(error)) {
257
+ return;
258
+ }
259
+ if (OrderRejectedError.isOrderRejectedError(error)) {
260
+ return;
261
+ }
262
+ if (OrderTransientError.isOrderTransientError(error)) {
263
+ return;
264
+ }
265
+ if (GeneralExpectedError.isGeneralExpectedError(error)) {
266
+ return;
267
+ }
254
268
  const today = new Date();
255
269
  const dd = String(today.getDate()).padStart(2, "0");
256
270
  const mm = String(today.getMonth() + 1).padStart(2, "0");
@@ -265,10 +279,34 @@ class ErrorService {
265
279
  };
266
280
  this._listenForError = () => {
267
281
  process.on("uncaughtException", (err) => {
282
+ if (OrderDeletedError.isOrderDeletedError(err)) {
283
+ return;
284
+ }
285
+ if (OrderRejectedError.isOrderRejectedError(err)) {
286
+ return;
287
+ }
288
+ if (OrderTransientError.isOrderTransientError(err)) {
289
+ return;
290
+ }
291
+ if (GeneralExpectedError.isGeneralExpectedError(err)) {
292
+ return;
293
+ }
268
294
  console.log(err);
269
295
  this.handleGlobalError(err);
270
296
  });
271
297
  process.on("unhandledRejection", (err) => {
298
+ if (OrderDeletedError.isOrderDeletedError(err)) {
299
+ return;
300
+ }
301
+ if (OrderRejectedError.isOrderRejectedError(err)) {
302
+ return;
303
+ }
304
+ if (OrderTransientError.isOrderTransientError(err)) {
305
+ return;
306
+ }
307
+ if (GeneralExpectedError.isGeneralExpectedError(err)) {
308
+ return;
309
+ }
272
310
  console.log(err);
273
311
  this.handleGlobalError(err);
274
312
  });
@@ -401,6 +439,10 @@ const SETUP_ADAPTER_FN = () => {
401
439
  StateLive.usePersist();
402
440
  StateBacktest.useLocal();
403
441
  }
442
+ {
443
+ DictionaryLive.usePersist();
444
+ DictionaryBacktest.useLocal();
445
+ }
404
446
  {
405
447
  Markdown.useDummy();
406
448
  Log.useJsonl();
@@ -426,6 +468,7 @@ class SetupUtils {
426
468
  Report.enable();
427
469
  Dump.enable();
428
470
  State.enable();
471
+ Dictionary.enable();
429
472
  Memory.enable();
430
473
  }
431
474
  if (!cli.configConnectionService.hasConfig("setup.config")) {
@@ -451,6 +494,7 @@ class SetupUtils {
451
494
  Report.disable();
452
495
  Dump.disable();
453
496
  State.disable();
497
+ Dictionary.disable();
454
498
  Memory.disable();
455
499
  }
456
500
  {
@@ -474,6 +518,7 @@ class SetupUtils {
474
518
  PersistMemoryAdapter.clear();
475
519
  PersistRecentAdapter.clear();
476
520
  PersistStateAdapter.clear();
521
+ PersistDictionaryAdapter.clear();
477
522
  PersistSessionAdapter.clear();
478
523
  PersistStrategyAdapter.clear();
479
524
  }
@@ -3663,7 +3708,7 @@ const main$j = async () => {
3663
3708
  if (MODES.some((mode) => values[mode])) {
3664
3709
  return;
3665
3710
  }
3666
- process.stdout.write(`@backtest-kit/cli ${"19.5.0"}\n`);
3711
+ process.stdout.write(`@backtest-kit/cli ${"19.7.0"}\n`);
3667
3712
  process.stdout.write("\n");
3668
3713
  process.stdout.write(`Run with --help to see available commands.\n`);
3669
3714
  process.stdout.write("\n");
@@ -5593,7 +5638,7 @@ const main$1 = async () => {
5593
5638
  if (!values.help) {
5594
5639
  return;
5595
5640
  }
5596
- process.stdout.write(`@backtest-kit/cli ${"19.5.0"}\n\n`);
5641
+ process.stdout.write(`@backtest-kit/cli ${"19.7.0"}\n\n`);
5597
5642
  process.stdout.write(HELP_TEXT);
5598
5643
  process.exit(0);
5599
5644
  };
@@ -5607,7 +5652,7 @@ const main = async () => {
5607
5652
  if (!values.version) {
5608
5653
  return;
5609
5654
  }
5610
- process.stdout.write(`@backtest-kit/cli ${"19.5.0"}\n`);
5655
+ process.stdout.write(`@backtest-kit/cli ${"19.7.0"}\n`);
5611
5656
  process.exit(0);
5612
5657
  };
5613
5658
  main();
@@ -15,17 +15,17 @@
15
15
  "@types/node": "25.6.0"
16
16
  },
17
17
  "dependencies": {
18
- "@backtest-kit/cli": "19.5.0",
19
- "@backtest-kit/graph": "19.5.0",
20
- "@backtest-kit/pinets": "19.5.0",
21
- "@backtest-kit/signals": "19.5.0",
22
- "@backtest-kit/ui": "19.5.0",
18
+ "@backtest-kit/cli": "19.7.0",
19
+ "@backtest-kit/graph": "19.7.0",
20
+ "@backtest-kit/pinets": "19.7.0",
21
+ "@backtest-kit/signals": "19.7.0",
22
+ "@backtest-kit/ui": "19.7.0",
23
23
  "@tavily/core": "0.7.2",
24
24
  "@tensorflow/tfjs": "4.22.0",
25
25
  "@tensorflow/tfjs-backend-wasm": "4.22.0",
26
26
  "@tensorflow/tfjs-core": "4.22.0",
27
27
  "agent-swarm-kit": "6.0.0",
28
- "backtest-kit": "19.5.0",
28
+ "backtest-kit": "19.7.0",
29
29
  "dayjs": "1.11.20",
30
30
  "functools-kit": "5.0.0",
31
31
  "garch": "2.0.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backtest-kit/cli",
3
- "version": "19.5.0",
3
+ "version": "19.7.0",
4
4
  "description": "Zero-boilerplate CLI runner for backtest-kit strategies. Run backtests, paper trading, and live bots with candle cache warming, web dashboard, and Telegram notifications — no setup code required.",
5
5
  "author": {
6
6
  "name": "Petr Tripolsky",
@@ -63,11 +63,11 @@
63
63
  "devDependencies": {
64
64
  "@babel/plugin-transform-modules-umd": "7.27.1",
65
65
  "@babel/standalone": "7.29.1",
66
- "@backtest-kit/graph": "19.5.0",
67
- "@backtest-kit/ollama": "19.5.0",
68
- "@backtest-kit/pinets": "19.5.0",
69
- "@backtest-kit/signals": "19.5.0",
70
- "@backtest-kit/ui": "19.5.0",
66
+ "@backtest-kit/graph": "19.7.0",
67
+ "@backtest-kit/ollama": "19.7.0",
68
+ "@backtest-kit/pinets": "19.7.0",
69
+ "@backtest-kit/signals": "19.7.0",
70
+ "@backtest-kit/ui": "19.7.0",
71
71
  "@rollup/plugin-replace": "6.0.3",
72
72
  "@rollup/plugin-typescript": "11.1.6",
73
73
  "@types/image-size": "0.7.0",
@@ -75,7 +75,7 @@
75
75
  "@types/mustache": "4.2.6",
76
76
  "@types/node": "22.9.0",
77
77
  "@types/stack-trace": "0.0.33",
78
- "backtest-kit": "19.5.0",
78
+ "backtest-kit": "19.7.0",
79
79
  "glob": "11.0.1",
80
80
  "markdown-it": "14.1.1",
81
81
  "rimraf": "6.0.1",
@@ -85,21 +85,21 @@
85
85
  "ts-morph": "27.0.2",
86
86
  "tslib": "2.7.0",
87
87
  "typedoc": "0.27.9",
88
- "pinets": "0.9.33",
88
+ "pinets": "0.9.34",
89
89
  "ccxt": "4.5.39",
90
90
  "worker-testbed": "4.0.0"
91
91
  },
92
92
  "peerDependencies": {
93
93
  "@babel/plugin-transform-modules-umd": "^7.27.1",
94
94
  "@babel/standalone": "^7.29.1",
95
- "@backtest-kit/graph": "^19.5.0",
96
- "@backtest-kit/ollama": "^19.5.0",
97
- "@backtest-kit/pinets": "^19.5.0",
98
- "@backtest-kit/signals": "^19.5.0",
99
- "@backtest-kit/ui": "^19.5.0",
100
- "pinets": "^0.9.33",
95
+ "@backtest-kit/graph": "^19.7.0",
96
+ "@backtest-kit/ollama": "^19.7.0",
97
+ "@backtest-kit/pinets": "^19.7.0",
98
+ "@backtest-kit/signals": "^19.7.0",
99
+ "@backtest-kit/ui": "^19.7.0",
100
+ "pinets": "^0.9.34",
101
101
  "ccxt": "^4.5.39",
102
- "backtest-kit": "^19.5.0",
102
+ "backtest-kit": "^19.7.0",
103
103
  "markdown-it": "^14.1.1",
104
104
  "typescript": "^5.0.0"
105
105
  },
@@ -13,12 +13,12 @@
13
13
  "license": "ISC",
14
14
  "type": "commonjs",
15
15
  "dependencies": {
16
- "@backtest-kit/cli": "^19.5.0",
17
- "@backtest-kit/graph": "^19.5.0",
18
- "@backtest-kit/pinets": "^19.5.0",
19
- "@backtest-kit/ui": "^19.5.0",
16
+ "@backtest-kit/cli": "^19.7.0",
17
+ "@backtest-kit/graph": "^19.7.0",
18
+ "@backtest-kit/pinets": "^19.7.0",
19
+ "@backtest-kit/ui": "^19.7.0",
20
20
  "agent-swarm-kit": "^6.0.0",
21
- "backtest-kit": "^19.5.0",
21
+ "backtest-kit": "^19.7.0",
22
22
  "functools-kit": "^5.0.0",
23
23
  "garch": "^2.0.0",
24
24
  "get-moment-stamp": "^3.0.0",