@backtest-kit/cli 6.2.1 → 6.5.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 +122 -62
- package/build/index.mjs +123 -64
- package/package.json +13 -13
- package/template/project/package.mustache +5 -5
- package/types.d.ts +7 -1
package/build/index.cjs
CHANGED
|
@@ -87,64 +87,6 @@ var BacktestKitSignals__namespace = /*#__PURE__*/_interopNamespaceDefault(Backte
|
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
{
|
|
91
|
-
BacktestKit.Storage.enable();
|
|
92
|
-
BacktestKit.Notification.enable();
|
|
93
|
-
}
|
|
94
|
-
{
|
|
95
|
-
BacktestKit.Markdown.enable();
|
|
96
|
-
BacktestKit.Report.enable();
|
|
97
|
-
BacktestKit.Dump.enable();
|
|
98
|
-
BacktestKit.Memory.enable();
|
|
99
|
-
}
|
|
100
|
-
{
|
|
101
|
-
BacktestKit.Dump.useMarkdown();
|
|
102
|
-
BacktestKit.Memory.usePersist();
|
|
103
|
-
}
|
|
104
|
-
{
|
|
105
|
-
BacktestKit.StorageLive.usePersist();
|
|
106
|
-
BacktestKit.StorageBacktest.useMemory();
|
|
107
|
-
}
|
|
108
|
-
{
|
|
109
|
-
BacktestKit.NotificationLive.usePersist();
|
|
110
|
-
BacktestKit.NotificationBacktest.useMemory();
|
|
111
|
-
}
|
|
112
|
-
{
|
|
113
|
-
BacktestKit.Markdown.useDummy();
|
|
114
|
-
}
|
|
115
|
-
BacktestKit.setConfig({
|
|
116
|
-
CC_MAX_NOTIFICATIONS: 5000,
|
|
117
|
-
CC_MAX_SIGNALS: 750,
|
|
118
|
-
});
|
|
119
|
-
BacktestKit.setConfig({
|
|
120
|
-
CC_ENABLE_DCA_EVERYWHERE: true,
|
|
121
|
-
CC_ENABLE_PPPL_EVERYWHERE: true,
|
|
122
|
-
CC_ENABLE_TRAILING_EVERYWHERE: true,
|
|
123
|
-
});
|
|
124
|
-
BacktestKit.setConfig({
|
|
125
|
-
CC_MAX_SIGNAL_GENERATION_SECONDS: 15 * 60,
|
|
126
|
-
});
|
|
127
|
-
BacktestKit.setConfig({
|
|
128
|
-
CC_MAX_BACKTEST_MARKDOWN_ROWS: 1000,
|
|
129
|
-
CC_MAX_BREAKEVEN_MARKDOWN_ROWS: 1000,
|
|
130
|
-
CC_MAX_HEATMAP_MARKDOWN_ROWS: 1000,
|
|
131
|
-
CC_MAX_HIGHEST_PROFIT_MARKDOWN_ROWS: 1000,
|
|
132
|
-
CC_MAX_LIVE_MARKDOWN_ROWS: 1000,
|
|
133
|
-
CC_MAX_PARTIAL_MARKDOWN_ROWS: 1000,
|
|
134
|
-
CC_MAX_RISK_MARKDOWN_ROWS: 1000,
|
|
135
|
-
CC_MAX_SCHEDULE_MARKDOWN_ROWS: 1000,
|
|
136
|
-
CC_MAX_STRATEGY_MARKDOWN_ROWS: 1000,
|
|
137
|
-
CC_MAX_SYNC_MARKDOWN_ROWS: 1000,
|
|
138
|
-
CC_MAX_PERFORMANCE_MARKDOWN_ROWS: 1000,
|
|
139
|
-
});
|
|
140
|
-
BacktestKit.setConfig({
|
|
141
|
-
CC_MAX_SIGNAL_LIFETIME_MINUTES: Infinity,
|
|
142
|
-
});
|
|
143
|
-
BacktestKit.setConfig({
|
|
144
|
-
CC_WALKER_MARKDOWN_TOP_N: 10,
|
|
145
|
-
});
|
|
146
|
-
BacktestKit.Log.useJsonl();
|
|
147
|
-
|
|
148
90
|
const ERROR_HANDLER_INSTALLED = Symbol.for("error-handler-installed");
|
|
149
91
|
function dumpStackTrace() {
|
|
150
92
|
const trace = stackTrace__namespace.get();
|
|
@@ -830,7 +772,14 @@ class WalkerMainService {
|
|
|
830
772
|
this.run = functoolsKit.singleshot(async (payload) => {
|
|
831
773
|
this.loggerService.log("walkerMainService run", { payload });
|
|
832
774
|
const strategyMap = new Map();
|
|
775
|
+
const cwd = process.cwd();
|
|
833
776
|
for (const entryPoint of payload.entryPoints) {
|
|
777
|
+
const absolutePath = path.resolve(entryPoint);
|
|
778
|
+
const moduleRoot = path.dirname(absolutePath);
|
|
779
|
+
{
|
|
780
|
+
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
781
|
+
dotenv.config({ path: path.join(moduleRoot, '.env'), override: true, quiet: true });
|
|
782
|
+
}
|
|
834
783
|
await this.resolveService.attachStrategy(entryPoint);
|
|
835
784
|
for (const { strategyName } of await BacktestKit.listStrategySchema()) {
|
|
836
785
|
if (strategyMap.has(strategyName)) {
|
|
@@ -838,6 +787,7 @@ class WalkerMainService {
|
|
|
838
787
|
}
|
|
839
788
|
strategyMap.set(strategyName, entryPoint);
|
|
840
789
|
}
|
|
790
|
+
BacktestKit.Cache.clear();
|
|
841
791
|
}
|
|
842
792
|
await this.moduleConnectionService.loadModule("./walker.module");
|
|
843
793
|
{
|
|
@@ -874,7 +824,6 @@ class WalkerMainService {
|
|
|
874
824
|
if (!frameName) {
|
|
875
825
|
throw new Error("Frame name is required");
|
|
876
826
|
}
|
|
877
|
-
const cwd = process.cwd();
|
|
878
827
|
const self = this;
|
|
879
828
|
const callbacks = {
|
|
880
829
|
async onStrategyStart(strategyName) {
|
|
@@ -882,6 +831,10 @@ class WalkerMainService {
|
|
|
882
831
|
if (!entryPoint) {
|
|
883
832
|
return;
|
|
884
833
|
}
|
|
834
|
+
{
|
|
835
|
+
Setup.clear();
|
|
836
|
+
Setup.enable();
|
|
837
|
+
}
|
|
885
838
|
const absolutePath = path.resolve(entryPoint);
|
|
886
839
|
const moduleRoot = path.dirname(absolutePath);
|
|
887
840
|
{
|
|
@@ -2441,6 +2394,112 @@ const cli = {
|
|
|
2441
2394
|
};
|
|
2442
2395
|
init();
|
|
2443
2396
|
|
|
2397
|
+
class SetupUtils {
|
|
2398
|
+
constructor() {
|
|
2399
|
+
this.enable = functoolsKit.singleshot(() => {
|
|
2400
|
+
cli.loggerService.debug("SetupUtils enable");
|
|
2401
|
+
{
|
|
2402
|
+
BacktestKit.Storage.enable();
|
|
2403
|
+
BacktestKit.Notification.enable();
|
|
2404
|
+
}
|
|
2405
|
+
{
|
|
2406
|
+
BacktestKit.Markdown.enable();
|
|
2407
|
+
BacktestKit.Report.enable();
|
|
2408
|
+
BacktestKit.Dump.enable();
|
|
2409
|
+
BacktestKit.Memory.enable();
|
|
2410
|
+
}
|
|
2411
|
+
{
|
|
2412
|
+
BacktestKit.Dump.useMarkdown();
|
|
2413
|
+
BacktestKit.Memory.usePersist();
|
|
2414
|
+
}
|
|
2415
|
+
{
|
|
2416
|
+
BacktestKit.StorageLive.usePersist();
|
|
2417
|
+
BacktestKit.StorageBacktest.useMemory();
|
|
2418
|
+
}
|
|
2419
|
+
{
|
|
2420
|
+
BacktestKit.NotificationLive.usePersist();
|
|
2421
|
+
BacktestKit.NotificationBacktest.useMemory();
|
|
2422
|
+
}
|
|
2423
|
+
{
|
|
2424
|
+
BacktestKit.Markdown.useDummy();
|
|
2425
|
+
BacktestKit.Log.useJsonl();
|
|
2426
|
+
}
|
|
2427
|
+
});
|
|
2428
|
+
this.clear = () => {
|
|
2429
|
+
cli.loggerService.debug("SetupUtils clear");
|
|
2430
|
+
if (!this.enable.hasValue()) {
|
|
2431
|
+
return;
|
|
2432
|
+
}
|
|
2433
|
+
this.enable.clear();
|
|
2434
|
+
{
|
|
2435
|
+
BacktestKit.PersistSignalAdapter.clear();
|
|
2436
|
+
BacktestKit.PersistRiskAdapter.clear();
|
|
2437
|
+
BacktestKit.PersistScheduleAdapter.clear();
|
|
2438
|
+
BacktestKit.PersistPartialAdapter.clear();
|
|
2439
|
+
BacktestKit.PersistBreakevenAdapter.clear();
|
|
2440
|
+
BacktestKit.PersistCandleAdapter.clear();
|
|
2441
|
+
BacktestKit.PersistStorageAdapter.clear();
|
|
2442
|
+
BacktestKit.PersistNotificationAdapter.clear();
|
|
2443
|
+
BacktestKit.PersistLogAdapter.clear();
|
|
2444
|
+
BacktestKit.PersistMeasureAdapter.clear();
|
|
2445
|
+
BacktestKit.PersistMemoryAdapter.clear();
|
|
2446
|
+
}
|
|
2447
|
+
{
|
|
2448
|
+
BacktestKit.Dump.clear();
|
|
2449
|
+
BacktestKit.Log.clear();
|
|
2450
|
+
BacktestKit.Markdown.clear();
|
|
2451
|
+
BacktestKit.Memory.clear();
|
|
2452
|
+
BacktestKit.Report.clear();
|
|
2453
|
+
}
|
|
2454
|
+
{
|
|
2455
|
+
BacktestKit.StorageLive.clear();
|
|
2456
|
+
BacktestKit.StorageBacktest.clear();
|
|
2457
|
+
}
|
|
2458
|
+
{
|
|
2459
|
+
BacktestKit.NotificationLive.clear();
|
|
2460
|
+
BacktestKit.NotificationBacktest.clear();
|
|
2461
|
+
}
|
|
2462
|
+
{
|
|
2463
|
+
BacktestKit.Cache.clear();
|
|
2464
|
+
}
|
|
2465
|
+
};
|
|
2466
|
+
}
|
|
2467
|
+
}
|
|
2468
|
+
const Setup = new SetupUtils();
|
|
2469
|
+
|
|
2470
|
+
Setup.enable();
|
|
2471
|
+
BacktestKit.setConfig({
|
|
2472
|
+
CC_MAX_NOTIFICATIONS: 5000,
|
|
2473
|
+
CC_MAX_SIGNALS: 750,
|
|
2474
|
+
});
|
|
2475
|
+
BacktestKit.setConfig({
|
|
2476
|
+
CC_ENABLE_DCA_EVERYWHERE: true,
|
|
2477
|
+
CC_ENABLE_PPPL_EVERYWHERE: true,
|
|
2478
|
+
CC_ENABLE_TRAILING_EVERYWHERE: true,
|
|
2479
|
+
});
|
|
2480
|
+
BacktestKit.setConfig({
|
|
2481
|
+
CC_MAX_SIGNAL_GENERATION_SECONDS: 15 * 60,
|
|
2482
|
+
});
|
|
2483
|
+
BacktestKit.setConfig({
|
|
2484
|
+
CC_MAX_BACKTEST_MARKDOWN_ROWS: 1000,
|
|
2485
|
+
CC_MAX_BREAKEVEN_MARKDOWN_ROWS: 1000,
|
|
2486
|
+
CC_MAX_HEATMAP_MARKDOWN_ROWS: 1000,
|
|
2487
|
+
CC_MAX_HIGHEST_PROFIT_MARKDOWN_ROWS: 1000,
|
|
2488
|
+
CC_MAX_LIVE_MARKDOWN_ROWS: 1000,
|
|
2489
|
+
CC_MAX_PARTIAL_MARKDOWN_ROWS: 1000,
|
|
2490
|
+
CC_MAX_RISK_MARKDOWN_ROWS: 1000,
|
|
2491
|
+
CC_MAX_SCHEDULE_MARKDOWN_ROWS: 1000,
|
|
2492
|
+
CC_MAX_STRATEGY_MARKDOWN_ROWS: 1000,
|
|
2493
|
+
CC_MAX_SYNC_MARKDOWN_ROWS: 1000,
|
|
2494
|
+
CC_MAX_PERFORMANCE_MARKDOWN_ROWS: 1000,
|
|
2495
|
+
});
|
|
2496
|
+
BacktestKit.setConfig({
|
|
2497
|
+
CC_MAX_SIGNAL_LIFETIME_MINUTES: Infinity,
|
|
2498
|
+
});
|
|
2499
|
+
BacktestKit.setConfig({
|
|
2500
|
+
CC_WALKER_MARKDOWN_TOP_N: 10,
|
|
2501
|
+
});
|
|
2502
|
+
|
|
2444
2503
|
const MODES = ["backtest", "walker", "paper", "live", "pine", "dump", "init", "help", "version"];
|
|
2445
2504
|
const ENTRY_PATH$1 = "./node_modules/@backtest-kit/cli/build/index.mjs";
|
|
2446
2505
|
const HELP_TEXT$1 = `
|
|
@@ -2456,7 +2515,7 @@ const main$b = async () => {
|
|
|
2456
2515
|
if (MODES.some((mode) => values[mode])) {
|
|
2457
2516
|
return;
|
|
2458
2517
|
}
|
|
2459
|
-
process.stdout.write(`@backtest-kit/cli ${"6.
|
|
2518
|
+
process.stdout.write(`@backtest-kit/cli ${"6.5.0"}\n`);
|
|
2460
2519
|
process.stdout.write("\n");
|
|
2461
2520
|
process.stdout.write(`Run with --help to see available commands.\n`);
|
|
2462
2521
|
process.stdout.write("\n");
|
|
@@ -3024,7 +3083,7 @@ const main$1 = async () => {
|
|
|
3024
3083
|
if (!values.help) {
|
|
3025
3084
|
return;
|
|
3026
3085
|
}
|
|
3027
|
-
process.stdout.write(`@backtest-kit/cli ${"6.
|
|
3086
|
+
process.stdout.write(`@backtest-kit/cli ${"6.5.0"}\n\n`);
|
|
3028
3087
|
process.stdout.write(HELP_TEXT);
|
|
3029
3088
|
process.exit(0);
|
|
3030
3089
|
};
|
|
@@ -3038,7 +3097,7 @@ const main = async () => {
|
|
|
3038
3097
|
if (!values.version) {
|
|
3039
3098
|
return;
|
|
3040
3099
|
}
|
|
3041
|
-
process.stdout.write(`@backtest-kit/cli ${"6.
|
|
3100
|
+
process.stdout.write(`@backtest-kit/cli ${"6.5.0"}\n`);
|
|
3042
3101
|
process.exit(0);
|
|
3043
3102
|
};
|
|
3044
3103
|
main();
|
|
@@ -3076,6 +3135,7 @@ async function run(mode, args) {
|
|
|
3076
3135
|
throw new Error(`Invalid mode: ${mode}`);
|
|
3077
3136
|
}
|
|
3078
3137
|
|
|
3138
|
+
exports.Setup = Setup;
|
|
3079
3139
|
exports.cli = cli;
|
|
3080
3140
|
exports.run = run;
|
|
3081
3141
|
exports.setLogger = setLogger;
|
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 {
|
|
3
|
+
import { Log, listExchangeSchema, addExchangeSchema, roundTicks, listFrameSchema, addFrameSchema, listenDoneLive, listenDoneBacktest, shutdown, listenSignal, listStrategySchema, overrideExchangeSchema, Backtest, Cache, alignToInterval, addWalkerSchema, overrideWalkerSchema, Walker, listenDoneWalker, Live, getCandles, checkCandles, warmCandles, listenRisk, listenStrategyCommit, listenSync, Storage, Notification, Markdown, Report, Dump, Memory, StorageLive, StorageBacktest, NotificationLive, NotificationBacktest, PersistSignalAdapter, PersistRiskAdapter, PersistScheduleAdapter, PersistPartialAdapter, PersistBreakevenAdapter, PersistCandleAdapter, PersistStorageAdapter, PersistNotificationAdapter, PersistLogAdapter, PersistMeasureAdapter, PersistMemoryAdapter, setConfig, Exchange } from 'backtest-kit';
|
|
4
4
|
import { getErrorMessage, errorData, singleshot, str, BehaviorSubject, compose, createAwaiter, execpool, queued, sleep, randomString, TIMEOUT_SYMBOL, typo, retry, trycatch, memoize } from 'functools-kit';
|
|
5
5
|
import fs, { constants } from 'fs';
|
|
6
6
|
import * as stackTrace from 'stack-trace';
|
|
@@ -62,64 +62,6 @@ import { spawn } from 'child_process';
|
|
|
62
62
|
});
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
{
|
|
66
|
-
Storage.enable();
|
|
67
|
-
Notification.enable();
|
|
68
|
-
}
|
|
69
|
-
{
|
|
70
|
-
Markdown.enable();
|
|
71
|
-
Report.enable();
|
|
72
|
-
Dump.enable();
|
|
73
|
-
Memory.enable();
|
|
74
|
-
}
|
|
75
|
-
{
|
|
76
|
-
Dump.useMarkdown();
|
|
77
|
-
Memory.usePersist();
|
|
78
|
-
}
|
|
79
|
-
{
|
|
80
|
-
StorageLive.usePersist();
|
|
81
|
-
StorageBacktest.useMemory();
|
|
82
|
-
}
|
|
83
|
-
{
|
|
84
|
-
NotificationLive.usePersist();
|
|
85
|
-
NotificationBacktest.useMemory();
|
|
86
|
-
}
|
|
87
|
-
{
|
|
88
|
-
Markdown.useDummy();
|
|
89
|
-
}
|
|
90
|
-
setConfig({
|
|
91
|
-
CC_MAX_NOTIFICATIONS: 5000,
|
|
92
|
-
CC_MAX_SIGNALS: 750,
|
|
93
|
-
});
|
|
94
|
-
setConfig({
|
|
95
|
-
CC_ENABLE_DCA_EVERYWHERE: true,
|
|
96
|
-
CC_ENABLE_PPPL_EVERYWHERE: true,
|
|
97
|
-
CC_ENABLE_TRAILING_EVERYWHERE: true,
|
|
98
|
-
});
|
|
99
|
-
setConfig({
|
|
100
|
-
CC_MAX_SIGNAL_GENERATION_SECONDS: 15 * 60,
|
|
101
|
-
});
|
|
102
|
-
setConfig({
|
|
103
|
-
CC_MAX_BACKTEST_MARKDOWN_ROWS: 1000,
|
|
104
|
-
CC_MAX_BREAKEVEN_MARKDOWN_ROWS: 1000,
|
|
105
|
-
CC_MAX_HEATMAP_MARKDOWN_ROWS: 1000,
|
|
106
|
-
CC_MAX_HIGHEST_PROFIT_MARKDOWN_ROWS: 1000,
|
|
107
|
-
CC_MAX_LIVE_MARKDOWN_ROWS: 1000,
|
|
108
|
-
CC_MAX_PARTIAL_MARKDOWN_ROWS: 1000,
|
|
109
|
-
CC_MAX_RISK_MARKDOWN_ROWS: 1000,
|
|
110
|
-
CC_MAX_SCHEDULE_MARKDOWN_ROWS: 1000,
|
|
111
|
-
CC_MAX_STRATEGY_MARKDOWN_ROWS: 1000,
|
|
112
|
-
CC_MAX_SYNC_MARKDOWN_ROWS: 1000,
|
|
113
|
-
CC_MAX_PERFORMANCE_MARKDOWN_ROWS: 1000,
|
|
114
|
-
});
|
|
115
|
-
setConfig({
|
|
116
|
-
CC_MAX_SIGNAL_LIFETIME_MINUTES: Infinity,
|
|
117
|
-
});
|
|
118
|
-
setConfig({
|
|
119
|
-
CC_WALKER_MARKDOWN_TOP_N: 10,
|
|
120
|
-
});
|
|
121
|
-
Log.useJsonl();
|
|
122
|
-
|
|
123
65
|
const ERROR_HANDLER_INSTALLED = Symbol.for("error-handler-installed");
|
|
124
66
|
function dumpStackTrace() {
|
|
125
67
|
const trace = stackTrace.get();
|
|
@@ -805,7 +747,14 @@ class WalkerMainService {
|
|
|
805
747
|
this.run = singleshot(async (payload) => {
|
|
806
748
|
this.loggerService.log("walkerMainService run", { payload });
|
|
807
749
|
const strategyMap = new Map();
|
|
750
|
+
const cwd = process.cwd();
|
|
808
751
|
for (const entryPoint of payload.entryPoints) {
|
|
752
|
+
const absolutePath = path.resolve(entryPoint);
|
|
753
|
+
const moduleRoot = path.dirname(absolutePath);
|
|
754
|
+
{
|
|
755
|
+
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
756
|
+
dotenv.config({ path: path.join(moduleRoot, '.env'), override: true, quiet: true });
|
|
757
|
+
}
|
|
809
758
|
await this.resolveService.attachStrategy(entryPoint);
|
|
810
759
|
for (const { strategyName } of await listStrategySchema()) {
|
|
811
760
|
if (strategyMap.has(strategyName)) {
|
|
@@ -813,6 +762,7 @@ class WalkerMainService {
|
|
|
813
762
|
}
|
|
814
763
|
strategyMap.set(strategyName, entryPoint);
|
|
815
764
|
}
|
|
765
|
+
Cache.clear();
|
|
816
766
|
}
|
|
817
767
|
await this.moduleConnectionService.loadModule("./walker.module");
|
|
818
768
|
{
|
|
@@ -849,7 +799,6 @@ class WalkerMainService {
|
|
|
849
799
|
if (!frameName) {
|
|
850
800
|
throw new Error("Frame name is required");
|
|
851
801
|
}
|
|
852
|
-
const cwd = process.cwd();
|
|
853
802
|
const self = this;
|
|
854
803
|
const callbacks = {
|
|
855
804
|
async onStrategyStart(strategyName) {
|
|
@@ -857,6 +806,10 @@ class WalkerMainService {
|
|
|
857
806
|
if (!entryPoint) {
|
|
858
807
|
return;
|
|
859
808
|
}
|
|
809
|
+
{
|
|
810
|
+
Setup.clear();
|
|
811
|
+
Setup.enable();
|
|
812
|
+
}
|
|
860
813
|
const absolutePath = path.resolve(entryPoint);
|
|
861
814
|
const moduleRoot = path.dirname(absolutePath);
|
|
862
815
|
{
|
|
@@ -2412,6 +2365,112 @@ const cli = {
|
|
|
2412
2365
|
};
|
|
2413
2366
|
init();
|
|
2414
2367
|
|
|
2368
|
+
class SetupUtils {
|
|
2369
|
+
constructor() {
|
|
2370
|
+
this.enable = singleshot(() => {
|
|
2371
|
+
cli.loggerService.debug("SetupUtils enable");
|
|
2372
|
+
{
|
|
2373
|
+
Storage.enable();
|
|
2374
|
+
Notification.enable();
|
|
2375
|
+
}
|
|
2376
|
+
{
|
|
2377
|
+
Markdown.enable();
|
|
2378
|
+
Report.enable();
|
|
2379
|
+
Dump.enable();
|
|
2380
|
+
Memory.enable();
|
|
2381
|
+
}
|
|
2382
|
+
{
|
|
2383
|
+
Dump.useMarkdown();
|
|
2384
|
+
Memory.usePersist();
|
|
2385
|
+
}
|
|
2386
|
+
{
|
|
2387
|
+
StorageLive.usePersist();
|
|
2388
|
+
StorageBacktest.useMemory();
|
|
2389
|
+
}
|
|
2390
|
+
{
|
|
2391
|
+
NotificationLive.usePersist();
|
|
2392
|
+
NotificationBacktest.useMemory();
|
|
2393
|
+
}
|
|
2394
|
+
{
|
|
2395
|
+
Markdown.useDummy();
|
|
2396
|
+
Log.useJsonl();
|
|
2397
|
+
}
|
|
2398
|
+
});
|
|
2399
|
+
this.clear = () => {
|
|
2400
|
+
cli.loggerService.debug("SetupUtils clear");
|
|
2401
|
+
if (!this.enable.hasValue()) {
|
|
2402
|
+
return;
|
|
2403
|
+
}
|
|
2404
|
+
this.enable.clear();
|
|
2405
|
+
{
|
|
2406
|
+
PersistSignalAdapter.clear();
|
|
2407
|
+
PersistRiskAdapter.clear();
|
|
2408
|
+
PersistScheduleAdapter.clear();
|
|
2409
|
+
PersistPartialAdapter.clear();
|
|
2410
|
+
PersistBreakevenAdapter.clear();
|
|
2411
|
+
PersistCandleAdapter.clear();
|
|
2412
|
+
PersistStorageAdapter.clear();
|
|
2413
|
+
PersistNotificationAdapter.clear();
|
|
2414
|
+
PersistLogAdapter.clear();
|
|
2415
|
+
PersistMeasureAdapter.clear();
|
|
2416
|
+
PersistMemoryAdapter.clear();
|
|
2417
|
+
}
|
|
2418
|
+
{
|
|
2419
|
+
Dump.clear();
|
|
2420
|
+
Log.clear();
|
|
2421
|
+
Markdown.clear();
|
|
2422
|
+
Memory.clear();
|
|
2423
|
+
Report.clear();
|
|
2424
|
+
}
|
|
2425
|
+
{
|
|
2426
|
+
StorageLive.clear();
|
|
2427
|
+
StorageBacktest.clear();
|
|
2428
|
+
}
|
|
2429
|
+
{
|
|
2430
|
+
NotificationLive.clear();
|
|
2431
|
+
NotificationBacktest.clear();
|
|
2432
|
+
}
|
|
2433
|
+
{
|
|
2434
|
+
Cache.clear();
|
|
2435
|
+
}
|
|
2436
|
+
};
|
|
2437
|
+
}
|
|
2438
|
+
}
|
|
2439
|
+
const Setup = new SetupUtils();
|
|
2440
|
+
|
|
2441
|
+
Setup.enable();
|
|
2442
|
+
setConfig({
|
|
2443
|
+
CC_MAX_NOTIFICATIONS: 5000,
|
|
2444
|
+
CC_MAX_SIGNALS: 750,
|
|
2445
|
+
});
|
|
2446
|
+
setConfig({
|
|
2447
|
+
CC_ENABLE_DCA_EVERYWHERE: true,
|
|
2448
|
+
CC_ENABLE_PPPL_EVERYWHERE: true,
|
|
2449
|
+
CC_ENABLE_TRAILING_EVERYWHERE: true,
|
|
2450
|
+
});
|
|
2451
|
+
setConfig({
|
|
2452
|
+
CC_MAX_SIGNAL_GENERATION_SECONDS: 15 * 60,
|
|
2453
|
+
});
|
|
2454
|
+
setConfig({
|
|
2455
|
+
CC_MAX_BACKTEST_MARKDOWN_ROWS: 1000,
|
|
2456
|
+
CC_MAX_BREAKEVEN_MARKDOWN_ROWS: 1000,
|
|
2457
|
+
CC_MAX_HEATMAP_MARKDOWN_ROWS: 1000,
|
|
2458
|
+
CC_MAX_HIGHEST_PROFIT_MARKDOWN_ROWS: 1000,
|
|
2459
|
+
CC_MAX_LIVE_MARKDOWN_ROWS: 1000,
|
|
2460
|
+
CC_MAX_PARTIAL_MARKDOWN_ROWS: 1000,
|
|
2461
|
+
CC_MAX_RISK_MARKDOWN_ROWS: 1000,
|
|
2462
|
+
CC_MAX_SCHEDULE_MARKDOWN_ROWS: 1000,
|
|
2463
|
+
CC_MAX_STRATEGY_MARKDOWN_ROWS: 1000,
|
|
2464
|
+
CC_MAX_SYNC_MARKDOWN_ROWS: 1000,
|
|
2465
|
+
CC_MAX_PERFORMANCE_MARKDOWN_ROWS: 1000,
|
|
2466
|
+
});
|
|
2467
|
+
setConfig({
|
|
2468
|
+
CC_MAX_SIGNAL_LIFETIME_MINUTES: Infinity,
|
|
2469
|
+
});
|
|
2470
|
+
setConfig({
|
|
2471
|
+
CC_WALKER_MARKDOWN_TOP_N: 10,
|
|
2472
|
+
});
|
|
2473
|
+
|
|
2415
2474
|
const MODES = ["backtest", "walker", "paper", "live", "pine", "dump", "init", "help", "version"];
|
|
2416
2475
|
const ENTRY_PATH$1 = "./node_modules/@backtest-kit/cli/build/index.mjs";
|
|
2417
2476
|
const HELP_TEXT$1 = `
|
|
@@ -2427,7 +2486,7 @@ const main$b = async () => {
|
|
|
2427
2486
|
if (MODES.some((mode) => values[mode])) {
|
|
2428
2487
|
return;
|
|
2429
2488
|
}
|
|
2430
|
-
process.stdout.write(`@backtest-kit/cli ${"6.
|
|
2489
|
+
process.stdout.write(`@backtest-kit/cli ${"6.5.0"}\n`);
|
|
2431
2490
|
process.stdout.write("\n");
|
|
2432
2491
|
process.stdout.write(`Run with --help to see available commands.\n`);
|
|
2433
2492
|
process.stdout.write("\n");
|
|
@@ -2995,7 +3054,7 @@ const main$1 = async () => {
|
|
|
2995
3054
|
if (!values.help) {
|
|
2996
3055
|
return;
|
|
2997
3056
|
}
|
|
2998
|
-
process.stdout.write(`@backtest-kit/cli ${"6.
|
|
3057
|
+
process.stdout.write(`@backtest-kit/cli ${"6.5.0"}\n\n`);
|
|
2999
3058
|
process.stdout.write(HELP_TEXT);
|
|
3000
3059
|
process.exit(0);
|
|
3001
3060
|
};
|
|
@@ -3009,7 +3068,7 @@ const main = async () => {
|
|
|
3009
3068
|
if (!values.version) {
|
|
3010
3069
|
return;
|
|
3011
3070
|
}
|
|
3012
|
-
process.stdout.write(`@backtest-kit/cli ${"6.
|
|
3071
|
+
process.stdout.write(`@backtest-kit/cli ${"6.5.0"}\n`);
|
|
3013
3072
|
process.exit(0);
|
|
3014
3073
|
};
|
|
3015
3074
|
main();
|
|
@@ -3047,4 +3106,4 @@ async function run(mode, args) {
|
|
|
3047
3106
|
throw new Error(`Invalid mode: ${mode}`);
|
|
3048
3107
|
}
|
|
3049
3108
|
|
|
3050
|
-
export { cli, run, setLogger };
|
|
3109
|
+
export { Setup, cli, run, setLogger };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backtest-kit/cli",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.5.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",
|
|
@@ -61,11 +61,11 @@
|
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@babel/plugin-transform-modules-umd": "7.27.1",
|
|
63
63
|
"@babel/standalone": "7.29.1",
|
|
64
|
-
"@backtest-kit/ui": "6.
|
|
65
|
-
"@backtest-kit/graph": "6.
|
|
66
|
-
"@backtest-kit/ollama": "6.
|
|
67
|
-
"@backtest-kit/pinets": "6.
|
|
68
|
-
"@backtest-kit/signals": "6.
|
|
64
|
+
"@backtest-kit/ui": "6.5.0",
|
|
65
|
+
"@backtest-kit/graph": "6.5.0",
|
|
66
|
+
"@backtest-kit/ollama": "6.5.0",
|
|
67
|
+
"@backtest-kit/pinets": "6.5.0",
|
|
68
|
+
"@backtest-kit/signals": "6.5.0",
|
|
69
69
|
"@rollup/plugin-replace": "6.0.3",
|
|
70
70
|
"@rollup/plugin-typescript": "11.1.6",
|
|
71
71
|
"@types/image-size": "0.7.0",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"@types/mustache": "4.2.6",
|
|
74
74
|
"@types/node": "22.9.0",
|
|
75
75
|
"@types/stack-trace": "0.0.33",
|
|
76
|
-
"backtest-kit": "6.
|
|
76
|
+
"backtest-kit": "6.5.0",
|
|
77
77
|
"glob": "11.0.1",
|
|
78
78
|
"markdown-it": "14.1.1",
|
|
79
79
|
"rimraf": "6.0.1",
|
|
@@ -88,12 +88,12 @@
|
|
|
88
88
|
"peerDependencies": {
|
|
89
89
|
"@babel/plugin-transform-modules-umd": "^7.27.1",
|
|
90
90
|
"@babel/standalone": "^7.29.1",
|
|
91
|
-
"@backtest-kit/ui": "^6.
|
|
92
|
-
"@backtest-kit/graph": "^6.
|
|
93
|
-
"@backtest-kit/ollama": "^6.
|
|
94
|
-
"@backtest-kit/pinets": "^6.
|
|
95
|
-
"@backtest-kit/signals": "^6.
|
|
96
|
-
"backtest-kit": "^6.
|
|
91
|
+
"@backtest-kit/ui": "^6.5.0",
|
|
92
|
+
"@backtest-kit/graph": "^6.5.0",
|
|
93
|
+
"@backtest-kit/ollama": "^6.5.0",
|
|
94
|
+
"@backtest-kit/pinets": "^6.5.0",
|
|
95
|
+
"@backtest-kit/signals": "^6.5.0",
|
|
96
|
+
"backtest-kit": "^6.5.0",
|
|
97
97
|
"markdown-it": "^14.1.1",
|
|
98
98
|
"typescript": "^5.0.0"
|
|
99
99
|
},
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
"license": "ISC",
|
|
13
13
|
"type": "commonjs",
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@backtest-kit/cli": "^6.
|
|
16
|
-
"@backtest-kit/graph": "^6.
|
|
17
|
-
"@backtest-kit/pinets": "^6.
|
|
18
|
-
"@backtest-kit/ui": "^6.
|
|
15
|
+
"@backtest-kit/cli": "^6.5.0",
|
|
16
|
+
"@backtest-kit/graph": "^6.5.0",
|
|
17
|
+
"@backtest-kit/pinets": "^6.5.0",
|
|
18
|
+
"@backtest-kit/ui": "^6.5.0",
|
|
19
19
|
"agent-swarm-kit": "^1.3.0",
|
|
20
|
-
"backtest-kit": "^6.
|
|
20
|
+
"backtest-kit": "^6.5.0",
|
|
21
21
|
"functools-kit": "^1.0.95",
|
|
22
22
|
"garch": "^1.2.3",
|
|
23
23
|
"get-moment-stamp": "^1.1.2",
|
package/types.d.ts
CHANGED
|
@@ -266,6 +266,12 @@ declare const cli: {
|
|
|
266
266
|
quickchartApiService: QuickchartApiService;
|
|
267
267
|
};
|
|
268
268
|
|
|
269
|
+
declare class SetupUtils {
|
|
270
|
+
enable: (() => void) & functools_kit.ISingleshotClearable;
|
|
271
|
+
clear: () => void;
|
|
272
|
+
}
|
|
273
|
+
declare const Setup: SetupUtils;
|
|
274
|
+
|
|
269
275
|
interface ILoader {
|
|
270
276
|
import(filePath: string): any;
|
|
271
277
|
check(filePath: string): boolean;
|
|
@@ -288,4 +294,4 @@ type Mode = "backtest" | "live" | "paper";
|
|
|
288
294
|
type Args = Partial<PayloadBacktest> | Partial<PayloadPaper> | Partial<PayloadLive>;
|
|
289
295
|
declare function run(mode: Mode, args: Args): Promise<void>;
|
|
290
296
|
|
|
291
|
-
export { ExchangeName, FrameName, type IBabel, type ILoader, type ILogger, cli, run, setLogger };
|
|
297
|
+
export { ExchangeName, FrameName, type IBabel, type ILoader, type ILogger, Setup, cli, run, setLogger };
|