@backtest-kit/cli 9.2.0 → 9.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -6
- package/build/index.cjs +31 -18
- package/build/index.mjs +31 -18
- package/docker/package.json +6 -6
- package/package.json +13 -13
- package/template/project/package.mustache +5 -5
- package/types.d.ts +4 -0
package/README.md
CHANGED
|
@@ -728,11 +728,53 @@ Broker.useBrokerAdapter(MyBroker);
|
|
|
728
728
|
Broker.enable();
|
|
729
729
|
```
|
|
730
730
|
|
|
731
|
-
##
|
|
731
|
+
## ⚙️ Setup Hook (`config/setup.config`)
|
|
732
732
|
|
|
733
|
-
`@backtest-kit/cli`
|
|
733
|
+
`@backtest-kit/cli` loads a `{projectRoot}/config/setup.config` file once before any module hooks or strategy code run. Use it to perform one-time initialization that must happen before the first persistence call — registering a custom storage backend, configuring a logger, seeding global state, or anything else the process needs before `backtest-kit` starts.
|
|
734
734
|
|
|
735
|
-
|
|
735
|
+
### Example: MongoDB + Redis persistence via `@backtest-kit/mongo`
|
|
736
|
+
|
|
737
|
+
The most common use-case is swapping the default file-based persistence for a production-grade backend. Install `@backtest-kit/mongo` and call `setup()` — it registers all 15 persistence adapters in one call and reads connection parameters from environment variables:
|
|
738
|
+
|
|
739
|
+
```bash
|
|
740
|
+
npm install @backtest-kit/mongo
|
|
741
|
+
```
|
|
742
|
+
|
|
743
|
+
```ts
|
|
744
|
+
// config/setup.config.ts
|
|
745
|
+
import { setup } from '@backtest-kit/mongo';
|
|
746
|
+
|
|
747
|
+
setup();
|
|
748
|
+
```
|
|
749
|
+
|
|
750
|
+
```env
|
|
751
|
+
# .env
|
|
752
|
+
CC_MONGO_CONNECTION_STRING=mongodb://localhost:27017/backtest-kit
|
|
753
|
+
CC_REDIS_HOST=127.0.0.1
|
|
754
|
+
CC_REDIS_PORT=6379
|
|
755
|
+
```
|
|
756
|
+
|
|
757
|
+
Or pass connection parameters explicitly:
|
|
758
|
+
|
|
759
|
+
```ts
|
|
760
|
+
// config/setup.config.ts
|
|
761
|
+
import { setup } from '@backtest-kit/mongo';
|
|
762
|
+
|
|
763
|
+
setup({
|
|
764
|
+
CC_MONGO_CONNECTION_STRING: 'mongodb://mongo:27017/mydb',
|
|
765
|
+
CC_REDIS_HOST: 'redis',
|
|
766
|
+
CC_REDIS_PORT: 6379,
|
|
767
|
+
CC_REDIS_PASSWORD: 'secret',
|
|
768
|
+
});
|
|
769
|
+
```
|
|
770
|
+
|
|
771
|
+
No changes to strategy code are needed — `setup()` wires up the adapters transparently before `backtest-kit` makes its first persistence call.
|
|
772
|
+
|
|
773
|
+
## 🔀 Import Aliases (`config/alias.config`)
|
|
774
|
+
|
|
775
|
+
`@backtest-kit/cli` lets you override any nodejs module import — without touching the strategy code. Drop a `config/alias.config` file in your project root and export a mapping from module name to replacement module.
|
|
776
|
+
|
|
777
|
+
The alias table is loaded once (on the first `import` call) from `{projectRoot}/config/alias.config` and applied globally to every subsequent module load via `require`/ `import`.
|
|
736
778
|
|
|
737
779
|
**Use cases:**
|
|
738
780
|
|
|
@@ -740,19 +782,19 @@ The alias table is loaded once (on the first `import` call) from `{projectRoot}/
|
|
|
740
782
|
- Swap any external api for a mock during CI runs
|
|
741
783
|
|
|
742
784
|
```ts
|
|
743
|
-
// config/alias.
|
|
785
|
+
// config/alias.config.ts — named export
|
|
744
786
|
export const ccxt = require("./stubs/ccxt.stub.cjs");
|
|
745
787
|
```
|
|
746
788
|
|
|
747
789
|
```js
|
|
748
|
-
// config/alias.
|
|
790
|
+
// config/alias.config.cjs — default export
|
|
749
791
|
module.exports = {
|
|
750
792
|
ccxt: require("./stubs/ccxt.stub.cjs"),
|
|
751
793
|
};
|
|
752
794
|
```
|
|
753
795
|
|
|
754
796
|
```js
|
|
755
|
-
// config/alias.
|
|
797
|
+
// config/alias.config.mjs — default export
|
|
756
798
|
import ccxtStub from "./stubs/ccxt.stub.mjs";
|
|
757
799
|
|
|
758
800
|
export default {
|
package/build/index.cjs
CHANGED
|
@@ -892,6 +892,7 @@ class BacktestMainService {
|
|
|
892
892
|
this.frontendProviderService = inject(TYPES.frontendProviderService);
|
|
893
893
|
this.telegramProviderService = inject(TYPES.telegramProviderService);
|
|
894
894
|
this.moduleConnectionService = inject(TYPES.moduleConnectionService);
|
|
895
|
+
this.configConnectionService = inject(TYPES.configConnectionService);
|
|
895
896
|
this.run = functoolsKit.singleshot(async (payload) => {
|
|
896
897
|
this.loggerService.log("backtestMainService run", {
|
|
897
898
|
payload,
|
|
@@ -908,9 +909,10 @@ class BacktestMainService {
|
|
|
908
909
|
const cwd = process.cwd();
|
|
909
910
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
910
911
|
}
|
|
912
|
+
await this.configConnectionService.loadConfig("setup.config");
|
|
911
913
|
{
|
|
912
914
|
await this.resolveService.attachJavascript(payload.entryPoint);
|
|
913
|
-
await this.moduleConnectionService.loadModule("
|
|
915
|
+
await this.moduleConnectionService.loadModule("backtest.module");
|
|
914
916
|
}
|
|
915
917
|
{
|
|
916
918
|
this.exchangeSchemaService.addSchema();
|
|
@@ -1011,6 +1013,7 @@ class WalkerMainService {
|
|
|
1011
1013
|
this.symbolSchemaService = inject(TYPES.symbolSchemaService);
|
|
1012
1014
|
this.cacheLogicService = inject(TYPES.cacheLogicService);
|
|
1013
1015
|
this.moduleConnectionService = inject(TYPES.moduleConnectionService);
|
|
1016
|
+
this.configConnectionService = inject(TYPES.configConnectionService);
|
|
1014
1017
|
this.run = functoolsKit.singleshot(async (payload) => {
|
|
1015
1018
|
this.loggerService.log("walkerMainService run", { payload });
|
|
1016
1019
|
{
|
|
@@ -1050,7 +1053,8 @@ class WalkerMainService {
|
|
|
1050
1053
|
const cwd = process.cwd();
|
|
1051
1054
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
1052
1055
|
}
|
|
1053
|
-
await this.
|
|
1056
|
+
await this.configConnectionService.loadConfig("setup.config");
|
|
1057
|
+
await this.moduleConnectionService.loadModule("walker.module");
|
|
1054
1058
|
{
|
|
1055
1059
|
this.exchangeSchemaService.addSchema();
|
|
1056
1060
|
this.symbolSchemaService.addSchema();
|
|
@@ -1232,6 +1236,7 @@ class LiveMainService {
|
|
|
1232
1236
|
this.frontendProviderService = inject(TYPES.frontendProviderService);
|
|
1233
1237
|
this.telegramProviderService = inject(TYPES.telegramProviderService);
|
|
1234
1238
|
this.moduleConnectionService = inject(TYPES.moduleConnectionService);
|
|
1239
|
+
this.configConnectionService = inject(TYPES.configConnectionService);
|
|
1235
1240
|
this.run = functoolsKit.singleshot(async (payload) => {
|
|
1236
1241
|
this.loggerService.log("liveMainService run", {
|
|
1237
1242
|
payload,
|
|
@@ -1248,9 +1253,10 @@ class LiveMainService {
|
|
|
1248
1253
|
const cwd = process.cwd();
|
|
1249
1254
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
1250
1255
|
}
|
|
1256
|
+
await this.configConnectionService.loadConfig("setup.config");
|
|
1251
1257
|
{
|
|
1252
1258
|
await this.resolveService.attachJavascript(payload.entryPoint);
|
|
1253
|
-
await this.moduleConnectionService.loadModule("
|
|
1259
|
+
await this.moduleConnectionService.loadModule("live.module");
|
|
1254
1260
|
}
|
|
1255
1261
|
{
|
|
1256
1262
|
this.exchangeSchemaService.addSchema();
|
|
@@ -1318,6 +1324,7 @@ class PaperMainService {
|
|
|
1318
1324
|
this.frontendProviderService = inject(TYPES.frontendProviderService);
|
|
1319
1325
|
this.telegramProviderService = inject(TYPES.telegramProviderService);
|
|
1320
1326
|
this.moduleConnectionService = inject(TYPES.moduleConnectionService);
|
|
1327
|
+
this.configConnectionService = inject(TYPES.configConnectionService);
|
|
1321
1328
|
this.run = functoolsKit.singleshot(async (payload) => {
|
|
1322
1329
|
this.loggerService.log("paperMainService init");
|
|
1323
1330
|
{
|
|
@@ -1332,9 +1339,10 @@ class PaperMainService {
|
|
|
1332
1339
|
const cwd = process.cwd();
|
|
1333
1340
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
1334
1341
|
}
|
|
1342
|
+
await this.configConnectionService.loadConfig("setup.config");
|
|
1335
1343
|
{
|
|
1336
1344
|
await this.resolveService.attachJavascript(payload.entryPoint);
|
|
1337
|
-
await this.moduleConnectionService.loadModule("
|
|
1345
|
+
await this.moduleConnectionService.loadModule("paper.module");
|
|
1338
1346
|
}
|
|
1339
1347
|
{
|
|
1340
1348
|
this.exchangeSchemaService.addSchema();
|
|
@@ -2594,7 +2602,7 @@ class BabelService {
|
|
|
2594
2602
|
const IMPORT_ALIAS = {};
|
|
2595
2603
|
|
|
2596
2604
|
const USE_ESMODULE_DEFAULT = false;
|
|
2597
|
-
const IMPORT_PATHS_EXCLUDE = new Set(["dump", "logs", "modules", "node_modules"]);
|
|
2605
|
+
const IMPORT_PATHS_EXCLUDE = new Set(["dump", "logs", "modules", "config", "node_modules"]);
|
|
2598
2606
|
const TRANSPILE_FN = functoolsKit.memoize(([path]) => `${path}`, (path, code, self, require) => {
|
|
2599
2607
|
const __filename = self.__filename;
|
|
2600
2608
|
const __dirname = self.__dirname;
|
|
@@ -2819,10 +2827,10 @@ globalThis.BacktestKitSignals = BacktestKitSignals__namespace;
|
|
|
2819
2827
|
|
|
2820
2828
|
const GET_ALIAS_EXPORTS_FN = (self) => {
|
|
2821
2829
|
const instance = self.getInstance(self.resolveService.OVERRIDE_CONFIG_DIR);
|
|
2822
|
-
if (!instance.check("alias.
|
|
2830
|
+
if (!instance.check("alias.config")) {
|
|
2823
2831
|
return null;
|
|
2824
2832
|
}
|
|
2825
|
-
const exports = instance.import("alias.
|
|
2833
|
+
const exports = instance.import("alias.config");
|
|
2826
2834
|
return "default" in exports
|
|
2827
2835
|
? exports.default
|
|
2828
2836
|
: exports;
|
|
@@ -3067,7 +3075,7 @@ const main$g = async () => {
|
|
|
3067
3075
|
if (MODES.some((mode) => values[mode])) {
|
|
3068
3076
|
return;
|
|
3069
3077
|
}
|
|
3070
|
-
process.stdout.write(`@backtest-kit/cli ${"9.
|
|
3078
|
+
process.stdout.write(`@backtest-kit/cli ${"9.3.0"}\n`);
|
|
3071
3079
|
process.stdout.write("\n");
|
|
3072
3080
|
process.stdout.write(`Run with --help to see available commands.\n`);
|
|
3073
3081
|
process.stdout.write("\n");
|
|
@@ -3257,10 +3265,10 @@ const main$b = async () => {
|
|
|
3257
3265
|
main$b();
|
|
3258
3266
|
|
|
3259
3267
|
const MODE_MODULE = {
|
|
3260
|
-
backtest: "
|
|
3261
|
-
live: "
|
|
3262
|
-
paper: "
|
|
3263
|
-
walker: "
|
|
3268
|
+
backtest: "backtest.module",
|
|
3269
|
+
live: "live.module",
|
|
3270
|
+
paper: "paper.module",
|
|
3271
|
+
walker: "walker.module",
|
|
3264
3272
|
};
|
|
3265
3273
|
const resolveMode = (values) => {
|
|
3266
3274
|
const enabled = ["backtest", "live", "paper", "walker"].filter((mode) => Boolean(values[mode]));
|
|
@@ -3363,6 +3371,7 @@ const main$a = async () => {
|
|
|
3363
3371
|
const cwd = process.cwd();
|
|
3364
3372
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
3365
3373
|
}
|
|
3374
|
+
await cli.configConnectionService.loadConfig("setup.config");
|
|
3366
3375
|
await cli.moduleConnectionService.loadModule(MODE_MODULE[mode]);
|
|
3367
3376
|
listenFinish();
|
|
3368
3377
|
createGracefulShutdown(mode)();
|
|
@@ -3451,7 +3460,8 @@ const main$7 = async () => {
|
|
|
3451
3460
|
const cwd = process.cwd();
|
|
3452
3461
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
3453
3462
|
}
|
|
3454
|
-
await cli.
|
|
3463
|
+
await cli.configConnectionService.loadConfig("setup.config");
|
|
3464
|
+
await cli.moduleConnectionService.loadModule("pine.module");
|
|
3455
3465
|
{
|
|
3456
3466
|
await cli.exchangeSchemaService.addSchema();
|
|
3457
3467
|
await cli.symbolSchemaService.addSchema();
|
|
@@ -3536,7 +3546,8 @@ const main$6 = async () => {
|
|
|
3536
3546
|
const cwd = process.cwd();
|
|
3537
3547
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
3538
3548
|
}
|
|
3539
|
-
await cli.
|
|
3549
|
+
await cli.configConnectionService.loadConfig("setup.config");
|
|
3550
|
+
await cli.moduleConnectionService.loadModule("editor.module");
|
|
3540
3551
|
{
|
|
3541
3552
|
await cli.exchangeSchemaService.addSchema();
|
|
3542
3553
|
}
|
|
@@ -3569,7 +3580,8 @@ const main$5 = async () => {
|
|
|
3569
3580
|
const cwd = process.cwd();
|
|
3570
3581
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
3571
3582
|
}
|
|
3572
|
-
await cli.
|
|
3583
|
+
await cli.configConnectionService.loadConfig("setup.config");
|
|
3584
|
+
await cli.moduleConnectionService.loadModule("dump.module");
|
|
3573
3585
|
{
|
|
3574
3586
|
await cli.exchangeSchemaService.addSchema();
|
|
3575
3587
|
await cli.symbolSchemaService.addSchema();
|
|
@@ -3636,7 +3648,8 @@ const main$4 = async () => {
|
|
|
3636
3648
|
const cwd = process.cwd();
|
|
3637
3649
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
3638
3650
|
}
|
|
3639
|
-
await cli.
|
|
3651
|
+
await cli.configConnectionService.loadConfig("setup.config");
|
|
3652
|
+
await cli.moduleConnectionService.loadModule("pnldebug.module");
|
|
3640
3653
|
{
|
|
3641
3654
|
await cli.exchangeSchemaService.addSchema();
|
|
3642
3655
|
await cli.symbolSchemaService.addSchema();
|
|
@@ -4090,7 +4103,7 @@ const main$1 = async () => {
|
|
|
4090
4103
|
if (!values.help) {
|
|
4091
4104
|
return;
|
|
4092
4105
|
}
|
|
4093
|
-
process.stdout.write(`@backtest-kit/cli ${"9.
|
|
4106
|
+
process.stdout.write(`@backtest-kit/cli ${"9.3.0"}\n\n`);
|
|
4094
4107
|
process.stdout.write(HELP_TEXT);
|
|
4095
4108
|
process.exit(0);
|
|
4096
4109
|
};
|
|
@@ -4104,7 +4117,7 @@ const main = async () => {
|
|
|
4104
4117
|
if (!values.version) {
|
|
4105
4118
|
return;
|
|
4106
4119
|
}
|
|
4107
|
-
process.stdout.write(`@backtest-kit/cli ${"9.
|
|
4120
|
+
process.stdout.write(`@backtest-kit/cli ${"9.3.0"}\n`);
|
|
4108
4121
|
process.exit(0);
|
|
4109
4122
|
};
|
|
4110
4123
|
main();
|
package/build/index.mjs
CHANGED
|
@@ -867,6 +867,7 @@ class BacktestMainService {
|
|
|
867
867
|
this.frontendProviderService = inject(TYPES.frontendProviderService);
|
|
868
868
|
this.telegramProviderService = inject(TYPES.telegramProviderService);
|
|
869
869
|
this.moduleConnectionService = inject(TYPES.moduleConnectionService);
|
|
870
|
+
this.configConnectionService = inject(TYPES.configConnectionService);
|
|
870
871
|
this.run = singleshot(async (payload) => {
|
|
871
872
|
this.loggerService.log("backtestMainService run", {
|
|
872
873
|
payload,
|
|
@@ -883,9 +884,10 @@ class BacktestMainService {
|
|
|
883
884
|
const cwd = process.cwd();
|
|
884
885
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
885
886
|
}
|
|
887
|
+
await this.configConnectionService.loadConfig("setup.config");
|
|
886
888
|
{
|
|
887
889
|
await this.resolveService.attachJavascript(payload.entryPoint);
|
|
888
|
-
await this.moduleConnectionService.loadModule("
|
|
890
|
+
await this.moduleConnectionService.loadModule("backtest.module");
|
|
889
891
|
}
|
|
890
892
|
{
|
|
891
893
|
this.exchangeSchemaService.addSchema();
|
|
@@ -986,6 +988,7 @@ class WalkerMainService {
|
|
|
986
988
|
this.symbolSchemaService = inject(TYPES.symbolSchemaService);
|
|
987
989
|
this.cacheLogicService = inject(TYPES.cacheLogicService);
|
|
988
990
|
this.moduleConnectionService = inject(TYPES.moduleConnectionService);
|
|
991
|
+
this.configConnectionService = inject(TYPES.configConnectionService);
|
|
989
992
|
this.run = singleshot(async (payload) => {
|
|
990
993
|
this.loggerService.log("walkerMainService run", { payload });
|
|
991
994
|
{
|
|
@@ -1025,7 +1028,8 @@ class WalkerMainService {
|
|
|
1025
1028
|
const cwd = process.cwd();
|
|
1026
1029
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
1027
1030
|
}
|
|
1028
|
-
await this.
|
|
1031
|
+
await this.configConnectionService.loadConfig("setup.config");
|
|
1032
|
+
await this.moduleConnectionService.loadModule("walker.module");
|
|
1029
1033
|
{
|
|
1030
1034
|
this.exchangeSchemaService.addSchema();
|
|
1031
1035
|
this.symbolSchemaService.addSchema();
|
|
@@ -1207,6 +1211,7 @@ class LiveMainService {
|
|
|
1207
1211
|
this.frontendProviderService = inject(TYPES.frontendProviderService);
|
|
1208
1212
|
this.telegramProviderService = inject(TYPES.telegramProviderService);
|
|
1209
1213
|
this.moduleConnectionService = inject(TYPES.moduleConnectionService);
|
|
1214
|
+
this.configConnectionService = inject(TYPES.configConnectionService);
|
|
1210
1215
|
this.run = singleshot(async (payload) => {
|
|
1211
1216
|
this.loggerService.log("liveMainService run", {
|
|
1212
1217
|
payload,
|
|
@@ -1223,9 +1228,10 @@ class LiveMainService {
|
|
|
1223
1228
|
const cwd = process.cwd();
|
|
1224
1229
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
1225
1230
|
}
|
|
1231
|
+
await this.configConnectionService.loadConfig("setup.config");
|
|
1226
1232
|
{
|
|
1227
1233
|
await this.resolveService.attachJavascript(payload.entryPoint);
|
|
1228
|
-
await this.moduleConnectionService.loadModule("
|
|
1234
|
+
await this.moduleConnectionService.loadModule("live.module");
|
|
1229
1235
|
}
|
|
1230
1236
|
{
|
|
1231
1237
|
this.exchangeSchemaService.addSchema();
|
|
@@ -1293,6 +1299,7 @@ class PaperMainService {
|
|
|
1293
1299
|
this.frontendProviderService = inject(TYPES.frontendProviderService);
|
|
1294
1300
|
this.telegramProviderService = inject(TYPES.telegramProviderService);
|
|
1295
1301
|
this.moduleConnectionService = inject(TYPES.moduleConnectionService);
|
|
1302
|
+
this.configConnectionService = inject(TYPES.configConnectionService);
|
|
1296
1303
|
this.run = singleshot(async (payload) => {
|
|
1297
1304
|
this.loggerService.log("paperMainService init");
|
|
1298
1305
|
{
|
|
@@ -1307,9 +1314,10 @@ class PaperMainService {
|
|
|
1307
1314
|
const cwd = process.cwd();
|
|
1308
1315
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
1309
1316
|
}
|
|
1317
|
+
await this.configConnectionService.loadConfig("setup.config");
|
|
1310
1318
|
{
|
|
1311
1319
|
await this.resolveService.attachJavascript(payload.entryPoint);
|
|
1312
|
-
await this.moduleConnectionService.loadModule("
|
|
1320
|
+
await this.moduleConnectionService.loadModule("paper.module");
|
|
1313
1321
|
}
|
|
1314
1322
|
{
|
|
1315
1323
|
this.exchangeSchemaService.addSchema();
|
|
@@ -2569,7 +2577,7 @@ class BabelService {
|
|
|
2569
2577
|
const IMPORT_ALIAS = {};
|
|
2570
2578
|
|
|
2571
2579
|
const USE_ESMODULE_DEFAULT = false;
|
|
2572
|
-
const IMPORT_PATHS_EXCLUDE = new Set(["dump", "logs", "modules", "node_modules"]);
|
|
2580
|
+
const IMPORT_PATHS_EXCLUDE = new Set(["dump", "logs", "modules", "config", "node_modules"]);
|
|
2573
2581
|
const TRANSPILE_FN = memoize(([path]) => `${path}`, (path, code, self, require) => {
|
|
2574
2582
|
const __filename = self.__filename;
|
|
2575
2583
|
const __dirname = self.__dirname;
|
|
@@ -2790,10 +2798,10 @@ globalThis.BacktestKitSignals = BacktestKitSignals;
|
|
|
2790
2798
|
|
|
2791
2799
|
const GET_ALIAS_EXPORTS_FN = (self) => {
|
|
2792
2800
|
const instance = self.getInstance(self.resolveService.OVERRIDE_CONFIG_DIR);
|
|
2793
|
-
if (!instance.check("alias.
|
|
2801
|
+
if (!instance.check("alias.config")) {
|
|
2794
2802
|
return null;
|
|
2795
2803
|
}
|
|
2796
|
-
const exports = instance.import("alias.
|
|
2804
|
+
const exports = instance.import("alias.config");
|
|
2797
2805
|
return "default" in exports
|
|
2798
2806
|
? exports.default
|
|
2799
2807
|
: exports;
|
|
@@ -3038,7 +3046,7 @@ const main$g = async () => {
|
|
|
3038
3046
|
if (MODES.some((mode) => values[mode])) {
|
|
3039
3047
|
return;
|
|
3040
3048
|
}
|
|
3041
|
-
process.stdout.write(`@backtest-kit/cli ${"9.
|
|
3049
|
+
process.stdout.write(`@backtest-kit/cli ${"9.3.0"}\n`);
|
|
3042
3050
|
process.stdout.write("\n");
|
|
3043
3051
|
process.stdout.write(`Run with --help to see available commands.\n`);
|
|
3044
3052
|
process.stdout.write("\n");
|
|
@@ -3228,10 +3236,10 @@ const main$b = async () => {
|
|
|
3228
3236
|
main$b();
|
|
3229
3237
|
|
|
3230
3238
|
const MODE_MODULE = {
|
|
3231
|
-
backtest: "
|
|
3232
|
-
live: "
|
|
3233
|
-
paper: "
|
|
3234
|
-
walker: "
|
|
3239
|
+
backtest: "backtest.module",
|
|
3240
|
+
live: "live.module",
|
|
3241
|
+
paper: "paper.module",
|
|
3242
|
+
walker: "walker.module",
|
|
3235
3243
|
};
|
|
3236
3244
|
const resolveMode = (values) => {
|
|
3237
3245
|
const enabled = ["backtest", "live", "paper", "walker"].filter((mode) => Boolean(values[mode]));
|
|
@@ -3334,6 +3342,7 @@ const main$a = async () => {
|
|
|
3334
3342
|
const cwd = process.cwd();
|
|
3335
3343
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
3336
3344
|
}
|
|
3345
|
+
await cli.configConnectionService.loadConfig("setup.config");
|
|
3337
3346
|
await cli.moduleConnectionService.loadModule(MODE_MODULE[mode]);
|
|
3338
3347
|
listenFinish();
|
|
3339
3348
|
createGracefulShutdown(mode)();
|
|
@@ -3422,7 +3431,8 @@ const main$7 = async () => {
|
|
|
3422
3431
|
const cwd = process.cwd();
|
|
3423
3432
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
3424
3433
|
}
|
|
3425
|
-
await cli.
|
|
3434
|
+
await cli.configConnectionService.loadConfig("setup.config");
|
|
3435
|
+
await cli.moduleConnectionService.loadModule("pine.module");
|
|
3426
3436
|
{
|
|
3427
3437
|
await cli.exchangeSchemaService.addSchema();
|
|
3428
3438
|
await cli.symbolSchemaService.addSchema();
|
|
@@ -3507,7 +3517,8 @@ const main$6 = async () => {
|
|
|
3507
3517
|
const cwd = process.cwd();
|
|
3508
3518
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
3509
3519
|
}
|
|
3510
|
-
await cli.
|
|
3520
|
+
await cli.configConnectionService.loadConfig("setup.config");
|
|
3521
|
+
await cli.moduleConnectionService.loadModule("editor.module");
|
|
3511
3522
|
{
|
|
3512
3523
|
await cli.exchangeSchemaService.addSchema();
|
|
3513
3524
|
}
|
|
@@ -3540,7 +3551,8 @@ const main$5 = async () => {
|
|
|
3540
3551
|
const cwd = process.cwd();
|
|
3541
3552
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
3542
3553
|
}
|
|
3543
|
-
await cli.
|
|
3554
|
+
await cli.configConnectionService.loadConfig("setup.config");
|
|
3555
|
+
await cli.moduleConnectionService.loadModule("dump.module");
|
|
3544
3556
|
{
|
|
3545
3557
|
await cli.exchangeSchemaService.addSchema();
|
|
3546
3558
|
await cli.symbolSchemaService.addSchema();
|
|
@@ -3607,7 +3619,8 @@ const main$4 = async () => {
|
|
|
3607
3619
|
const cwd = process.cwd();
|
|
3608
3620
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
3609
3621
|
}
|
|
3610
|
-
await cli.
|
|
3622
|
+
await cli.configConnectionService.loadConfig("setup.config");
|
|
3623
|
+
await cli.moduleConnectionService.loadModule("pnldebug.module");
|
|
3611
3624
|
{
|
|
3612
3625
|
await cli.exchangeSchemaService.addSchema();
|
|
3613
3626
|
await cli.symbolSchemaService.addSchema();
|
|
@@ -4061,7 +4074,7 @@ const main$1 = async () => {
|
|
|
4061
4074
|
if (!values.help) {
|
|
4062
4075
|
return;
|
|
4063
4076
|
}
|
|
4064
|
-
process.stdout.write(`@backtest-kit/cli ${"9.
|
|
4077
|
+
process.stdout.write(`@backtest-kit/cli ${"9.3.0"}\n\n`);
|
|
4065
4078
|
process.stdout.write(HELP_TEXT);
|
|
4066
4079
|
process.exit(0);
|
|
4067
4080
|
};
|
|
@@ -4075,7 +4088,7 @@ const main = async () => {
|
|
|
4075
4088
|
if (!values.version) {
|
|
4076
4089
|
return;
|
|
4077
4090
|
}
|
|
4078
|
-
process.stdout.write(`@backtest-kit/cli ${"9.
|
|
4091
|
+
process.stdout.write(`@backtest-kit/cli ${"9.3.0"}\n`);
|
|
4079
4092
|
process.exit(0);
|
|
4080
4093
|
};
|
|
4081
4094
|
main();
|
package/docker/package.json
CHANGED
|
@@ -15,17 +15,17 @@
|
|
|
15
15
|
"@types/node": "25.6.0"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@backtest-kit/cli": "9.
|
|
19
|
-
"@backtest-kit/graph": "9.
|
|
20
|
-
"@backtest-kit/pinets": "9.
|
|
21
|
-
"@backtest-kit/signals": "9.
|
|
22
|
-
"@backtest-kit/ui": "9.
|
|
18
|
+
"@backtest-kit/cli": "9.3.0",
|
|
19
|
+
"@backtest-kit/graph": "9.3.0",
|
|
20
|
+
"@backtest-kit/pinets": "9.3.0",
|
|
21
|
+
"@backtest-kit/signals": "9.3.0",
|
|
22
|
+
"@backtest-kit/ui": "9.3.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": "2.6.0",
|
|
28
|
-
"backtest-kit": "9.
|
|
28
|
+
"backtest-kit": "9.3.0",
|
|
29
29
|
"dayjs": "1.11.20",
|
|
30
30
|
"functools-kit": "2.3.0",
|
|
31
31
|
"garch": "1.2.3",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backtest-kit/cli",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.3.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": "9.
|
|
67
|
-
"@backtest-kit/ollama": "9.
|
|
68
|
-
"@backtest-kit/pinets": "9.
|
|
69
|
-
"@backtest-kit/signals": "9.
|
|
70
|
-
"@backtest-kit/ui": "9.
|
|
66
|
+
"@backtest-kit/graph": "9.3.0",
|
|
67
|
+
"@backtest-kit/ollama": "9.3.0",
|
|
68
|
+
"@backtest-kit/pinets": "9.3.0",
|
|
69
|
+
"@backtest-kit/signals": "9.3.0",
|
|
70
|
+
"@backtest-kit/ui": "9.3.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": "9.
|
|
78
|
+
"backtest-kit": "9.3.0",
|
|
79
79
|
"glob": "11.0.1",
|
|
80
80
|
"markdown-it": "14.1.1",
|
|
81
81
|
"rimraf": "6.0.1",
|
|
@@ -90,12 +90,12 @@
|
|
|
90
90
|
"peerDependencies": {
|
|
91
91
|
"@babel/plugin-transform-modules-umd": "^7.27.1",
|
|
92
92
|
"@babel/standalone": "^7.29.1",
|
|
93
|
-
"@backtest-kit/graph": "^9.
|
|
94
|
-
"@backtest-kit/ollama": "^9.
|
|
95
|
-
"@backtest-kit/pinets": "^9.
|
|
96
|
-
"@backtest-kit/signals": "^9.
|
|
97
|
-
"@backtest-kit/ui": "^9.
|
|
98
|
-
"backtest-kit": "^9.
|
|
93
|
+
"@backtest-kit/graph": "^9.3.0",
|
|
94
|
+
"@backtest-kit/ollama": "^9.3.0",
|
|
95
|
+
"@backtest-kit/pinets": "^9.3.0",
|
|
96
|
+
"@backtest-kit/signals": "^9.3.0",
|
|
97
|
+
"@backtest-kit/ui": "^9.3.0",
|
|
98
|
+
"backtest-kit": "^9.3.0",
|
|
99
99
|
"markdown-it": "^14.1.1",
|
|
100
100
|
"typescript": "^5.0.0"
|
|
101
101
|
},
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
"license": "ISC",
|
|
14
14
|
"type": "commonjs",
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@backtest-kit/cli": "^9.
|
|
17
|
-
"@backtest-kit/graph": "^9.
|
|
18
|
-
"@backtest-kit/pinets": "^9.
|
|
19
|
-
"@backtest-kit/ui": "^9.
|
|
16
|
+
"@backtest-kit/cli": "^9.3.0",
|
|
17
|
+
"@backtest-kit/graph": "^9.3.0",
|
|
18
|
+
"@backtest-kit/pinets": "^9.3.0",
|
|
19
|
+
"@backtest-kit/ui": "^9.3.0",
|
|
20
20
|
"agent-swarm-kit": "^2.6.0",
|
|
21
|
-
"backtest-kit": "^9.
|
|
21
|
+
"backtest-kit": "^9.3.0",
|
|
22
22
|
"functools-kit": "^2.3.0",
|
|
23
23
|
"garch": "^1.2.3",
|
|
24
24
|
"get-moment-stamp": "^1.1.2",
|
package/types.d.ts
CHANGED
|
@@ -33,6 +33,7 @@ declare class PaperMainService {
|
|
|
33
33
|
private frontendProviderService;
|
|
34
34
|
private telegramProviderService;
|
|
35
35
|
private moduleConnectionService;
|
|
36
|
+
private configConnectionService;
|
|
36
37
|
run: ((payload: {
|
|
37
38
|
entryPoint: string;
|
|
38
39
|
symbol: string;
|
|
@@ -58,6 +59,7 @@ declare class LiveMainService {
|
|
|
58
59
|
private frontendProviderService;
|
|
59
60
|
private telegramProviderService;
|
|
60
61
|
private moduleConnectionService;
|
|
62
|
+
private configConnectionService;
|
|
61
63
|
run: ((payload: {
|
|
62
64
|
entryPoint: string;
|
|
63
65
|
symbol: string;
|
|
@@ -85,6 +87,7 @@ declare class BacktestMainService {
|
|
|
85
87
|
private frontendProviderService;
|
|
86
88
|
private telegramProviderService;
|
|
87
89
|
private moduleConnectionService;
|
|
90
|
+
private configConnectionService;
|
|
88
91
|
run: ((payload: {
|
|
89
92
|
entryPoint: string;
|
|
90
93
|
symbol: string;
|
|
@@ -115,6 +118,7 @@ declare class WalkerMainService {
|
|
|
115
118
|
private symbolSchemaService;
|
|
116
119
|
private cacheLogicService;
|
|
117
120
|
private moduleConnectionService;
|
|
121
|
+
private configConnectionService;
|
|
118
122
|
run: ((payload: {
|
|
119
123
|
entryPoints: string[];
|
|
120
124
|
symbol: string;
|