@backtest-kit/cli 6.5.0 → 6.5.2
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 +42 -20
- package/build/index.mjs +42 -20
- package/package.json +1 -1
- package/template/project/package.mustache +2 -2
package/build/index.cjs
CHANGED
|
@@ -750,8 +750,13 @@ class BacktestMainService {
|
|
|
750
750
|
}
|
|
751
751
|
}
|
|
752
752
|
|
|
753
|
+
var WalkerName;
|
|
754
|
+
(function (WalkerName) {
|
|
755
|
+
WalkerName["DefaultWalker"] = "default_walker";
|
|
756
|
+
})(WalkerName || (WalkerName = {}));
|
|
757
|
+
var WalkerName$1 = WalkerName;
|
|
758
|
+
|
|
753
759
|
const DEFAULT_CACHE_LIST = ["1m", "15m", "30m", "1h", "4h"];
|
|
754
|
-
const WALKER_NAME = "cli-walker";
|
|
755
760
|
const GET_CACHE_INTERVAL_LIST_FN = () => {
|
|
756
761
|
const { values } = getArgs();
|
|
757
762
|
if (!values.cacheInterval) {
|
|
@@ -774,9 +779,17 @@ class WalkerMainService {
|
|
|
774
779
|
const strategyMap = new Map();
|
|
775
780
|
const cwd = process.cwd();
|
|
776
781
|
for (const entryPoint of payload.entryPoints) {
|
|
782
|
+
process.chdir(cwd);
|
|
777
783
|
const absolutePath = path.resolve(entryPoint);
|
|
784
|
+
await fs$1.access(absolutePath, fs.constants.F_OK | fs.constants.R_OK);
|
|
778
785
|
const moduleRoot = path.dirname(absolutePath);
|
|
786
|
+
process.chdir(moduleRoot);
|
|
787
|
+
{
|
|
788
|
+
Setup.clear();
|
|
789
|
+
Setup.enable();
|
|
790
|
+
}
|
|
779
791
|
{
|
|
792
|
+
cwd !== moduleRoot && BacktestKit.Log.useJsonl();
|
|
780
793
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
781
794
|
dotenv.config({ path: path.join(moduleRoot, '.env'), override: true, quiet: true });
|
|
782
795
|
}
|
|
@@ -831,14 +844,15 @@ class WalkerMainService {
|
|
|
831
844
|
if (!entryPoint) {
|
|
832
845
|
return;
|
|
833
846
|
}
|
|
847
|
+
process.chdir(cwd);
|
|
848
|
+
const absolutePath = path.resolve(entryPoint);
|
|
849
|
+
const moduleRoot = path.dirname(absolutePath);
|
|
850
|
+
process.chdir(moduleRoot);
|
|
834
851
|
{
|
|
835
852
|
Setup.clear();
|
|
836
853
|
Setup.enable();
|
|
837
854
|
}
|
|
838
|
-
const absolutePath = path.resolve(entryPoint);
|
|
839
|
-
const moduleRoot = path.dirname(absolutePath);
|
|
840
855
|
{
|
|
841
|
-
process.chdir(moduleRoot);
|
|
842
856
|
cwd !== moduleRoot && BacktestKit.Log.useJsonl();
|
|
843
857
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
844
858
|
dotenv.config({ path: path.join(moduleRoot, '.env'), override: true, quiet: true });
|
|
@@ -853,7 +867,7 @@ class WalkerMainService {
|
|
|
853
867
|
},
|
|
854
868
|
};
|
|
855
869
|
BacktestKit.addWalkerSchema({
|
|
856
|
-
walkerName:
|
|
870
|
+
walkerName: WalkerName$1.DefaultWalker,
|
|
857
871
|
exchangeName,
|
|
858
872
|
frameName,
|
|
859
873
|
strategies: strategyNames,
|
|
@@ -872,7 +886,7 @@ class WalkerMainService {
|
|
|
872
886
|
}
|
|
873
887
|
if (payload.verbose) {
|
|
874
888
|
BacktestKit.overrideWalkerSchema({
|
|
875
|
-
walkerName:
|
|
889
|
+
walkerName: WalkerName$1.DefaultWalker,
|
|
876
890
|
callbacks: {
|
|
877
891
|
async onStrategyStart(strategyName, symbol) {
|
|
878
892
|
console.log(`Strategy started: ${strategyName} for symbol: ${symbol}`);
|
|
@@ -890,7 +904,7 @@ class WalkerMainService {
|
|
|
890
904
|
}
|
|
891
905
|
});
|
|
892
906
|
}
|
|
893
|
-
BacktestKit.Walker.background(symbol, { walkerName:
|
|
907
|
+
BacktestKit.Walker.background(symbol, { walkerName: WalkerName$1.DefaultWalker });
|
|
894
908
|
const [awaiter, { resolve: res }] = functoolsKit.createAwaiter();
|
|
895
909
|
const unWalker = BacktestKit.listenDoneWalker(() => {
|
|
896
910
|
console.log("Walker comparison finished");
|
|
@@ -907,7 +921,7 @@ class WalkerMainService {
|
|
|
907
921
|
const dumpDir = path.join(process.cwd(), "dump");
|
|
908
922
|
if (payload.json) {
|
|
909
923
|
const filePath = path.resolve(dumpDir, `${dumpName}.json`);
|
|
910
|
-
const data = await BacktestKit.Walker.getData(symbol, { walkerName:
|
|
924
|
+
const data = await BacktestKit.Walker.getData(symbol, { walkerName: WalkerName$1.DefaultWalker });
|
|
911
925
|
await fs$1.mkdir(dumpDir, { recursive: true });
|
|
912
926
|
await fs$1.writeFile(filePath, JSON.stringify(data, null, 2), "utf-8");
|
|
913
927
|
console.log(`Saved: ${filePath}`);
|
|
@@ -916,14 +930,14 @@ class WalkerMainService {
|
|
|
916
930
|
}
|
|
917
931
|
if (payload.markdown) {
|
|
918
932
|
const filePath = path.resolve(dumpDir, `${dumpName}.md`);
|
|
919
|
-
const report = await BacktestKit.Walker.getReport(symbol, { walkerName:
|
|
933
|
+
const report = await BacktestKit.Walker.getReport(symbol, { walkerName: WalkerName$1.DefaultWalker });
|
|
920
934
|
await fs$1.mkdir(dumpDir, { recursive: true });
|
|
921
935
|
await fs$1.writeFile(filePath, report, "utf-8");
|
|
922
936
|
console.log(`Saved: ${filePath}`);
|
|
923
937
|
process.exit(0);
|
|
924
938
|
return;
|
|
925
939
|
}
|
|
926
|
-
const report = await BacktestKit.Walker.getReport(symbol, { walkerName:
|
|
940
|
+
const report = await BacktestKit.Walker.getReport(symbol, { walkerName: WalkerName$1.DefaultWalker });
|
|
927
941
|
console.log(report);
|
|
928
942
|
process.exit(0);
|
|
929
943
|
});
|
|
@@ -2141,13 +2155,12 @@ const GET_EXT_VARIANTS_FN = (fileName) => {
|
|
|
2141
2155
|
const base = ext ? fileName.slice(0, -ext.length) : fileName;
|
|
2142
2156
|
const result = [];
|
|
2143
2157
|
{
|
|
2144
|
-
result.push(
|
|
2145
|
-
result.push(
|
|
2146
|
-
result.push(
|
|
2147
|
-
result.push(
|
|
2148
|
-
result.push(
|
|
2149
|
-
result.push(
|
|
2150
|
-
result.push(`${base}.json`);
|
|
2158
|
+
result.push(path.join(fileName, `index.cjs`));
|
|
2159
|
+
result.push(path.join(fileName, `index.mjs`));
|
|
2160
|
+
result.push(path.join(fileName, `index.ts`));
|
|
2161
|
+
result.push(path.join(fileName, `index.tsx`));
|
|
2162
|
+
result.push(path.join(fileName, `index.js`));
|
|
2163
|
+
result.push(path.join(fileName, `index.json`));
|
|
2151
2164
|
}
|
|
2152
2165
|
{
|
|
2153
2166
|
result.push(`${fileName}`);
|
|
@@ -2158,6 +2171,15 @@ const GET_EXT_VARIANTS_FN = (fileName) => {
|
|
|
2158
2171
|
result.push(`${fileName}.js`);
|
|
2159
2172
|
result.push(`${fileName}.json`);
|
|
2160
2173
|
}
|
|
2174
|
+
{
|
|
2175
|
+
result.push(`${base}`);
|
|
2176
|
+
result.push(`${base}.cjs`);
|
|
2177
|
+
result.push(`${base}.mjs`);
|
|
2178
|
+
result.push(`${base}.ts`);
|
|
2179
|
+
result.push(`${base}.tsx`);
|
|
2180
|
+
result.push(`${base}.js`);
|
|
2181
|
+
result.push(`${base}.json`);
|
|
2182
|
+
}
|
|
2161
2183
|
return result;
|
|
2162
2184
|
};
|
|
2163
2185
|
const GET_RESOLVED_EXT_FN = (filePath) => {
|
|
@@ -2515,7 +2537,7 @@ const main$b = async () => {
|
|
|
2515
2537
|
if (MODES.some((mode) => values[mode])) {
|
|
2516
2538
|
return;
|
|
2517
2539
|
}
|
|
2518
|
-
process.stdout.write(`@backtest-kit/cli ${"6.5.
|
|
2540
|
+
process.stdout.write(`@backtest-kit/cli ${"6.5.2"}\n`);
|
|
2519
2541
|
process.stdout.write("\n");
|
|
2520
2542
|
process.stdout.write(`Run with --help to see available commands.\n`);
|
|
2521
2543
|
process.stdout.write("\n");
|
|
@@ -3083,7 +3105,7 @@ const main$1 = async () => {
|
|
|
3083
3105
|
if (!values.help) {
|
|
3084
3106
|
return;
|
|
3085
3107
|
}
|
|
3086
|
-
process.stdout.write(`@backtest-kit/cli ${"6.5.
|
|
3108
|
+
process.stdout.write(`@backtest-kit/cli ${"6.5.2"}\n\n`);
|
|
3087
3109
|
process.stdout.write(HELP_TEXT);
|
|
3088
3110
|
process.exit(0);
|
|
3089
3111
|
};
|
|
@@ -3097,7 +3119,7 @@ const main = async () => {
|
|
|
3097
3119
|
if (!values.version) {
|
|
3098
3120
|
return;
|
|
3099
3121
|
}
|
|
3100
|
-
process.stdout.write(`@backtest-kit/cli ${"6.5.
|
|
3122
|
+
process.stdout.write(`@backtest-kit/cli ${"6.5.2"}\n`);
|
|
3101
3123
|
process.exit(0);
|
|
3102
3124
|
};
|
|
3103
3125
|
main();
|
package/build/index.mjs
CHANGED
|
@@ -725,8 +725,13 @@ class BacktestMainService {
|
|
|
725
725
|
}
|
|
726
726
|
}
|
|
727
727
|
|
|
728
|
+
var WalkerName;
|
|
729
|
+
(function (WalkerName) {
|
|
730
|
+
WalkerName["DefaultWalker"] = "default_walker";
|
|
731
|
+
})(WalkerName || (WalkerName = {}));
|
|
732
|
+
var WalkerName$1 = WalkerName;
|
|
733
|
+
|
|
728
734
|
const DEFAULT_CACHE_LIST = ["1m", "15m", "30m", "1h", "4h"];
|
|
729
|
-
const WALKER_NAME = "cli-walker";
|
|
730
735
|
const GET_CACHE_INTERVAL_LIST_FN = () => {
|
|
731
736
|
const { values } = getArgs();
|
|
732
737
|
if (!values.cacheInterval) {
|
|
@@ -749,9 +754,17 @@ class WalkerMainService {
|
|
|
749
754
|
const strategyMap = new Map();
|
|
750
755
|
const cwd = process.cwd();
|
|
751
756
|
for (const entryPoint of payload.entryPoints) {
|
|
757
|
+
process.chdir(cwd);
|
|
752
758
|
const absolutePath = path.resolve(entryPoint);
|
|
759
|
+
await access(absolutePath, constants.F_OK | constants.R_OK);
|
|
753
760
|
const moduleRoot = path.dirname(absolutePath);
|
|
761
|
+
process.chdir(moduleRoot);
|
|
762
|
+
{
|
|
763
|
+
Setup.clear();
|
|
764
|
+
Setup.enable();
|
|
765
|
+
}
|
|
754
766
|
{
|
|
767
|
+
cwd !== moduleRoot && Log.useJsonl();
|
|
755
768
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
756
769
|
dotenv.config({ path: path.join(moduleRoot, '.env'), override: true, quiet: true });
|
|
757
770
|
}
|
|
@@ -806,14 +819,15 @@ class WalkerMainService {
|
|
|
806
819
|
if (!entryPoint) {
|
|
807
820
|
return;
|
|
808
821
|
}
|
|
822
|
+
process.chdir(cwd);
|
|
823
|
+
const absolutePath = path.resolve(entryPoint);
|
|
824
|
+
const moduleRoot = path.dirname(absolutePath);
|
|
825
|
+
process.chdir(moduleRoot);
|
|
809
826
|
{
|
|
810
827
|
Setup.clear();
|
|
811
828
|
Setup.enable();
|
|
812
829
|
}
|
|
813
|
-
const absolutePath = path.resolve(entryPoint);
|
|
814
|
-
const moduleRoot = path.dirname(absolutePath);
|
|
815
830
|
{
|
|
816
|
-
process.chdir(moduleRoot);
|
|
817
831
|
cwd !== moduleRoot && Log.useJsonl();
|
|
818
832
|
dotenv.config({ path: path.join(cwd, '.env'), override: true, quiet: true });
|
|
819
833
|
dotenv.config({ path: path.join(moduleRoot, '.env'), override: true, quiet: true });
|
|
@@ -828,7 +842,7 @@ class WalkerMainService {
|
|
|
828
842
|
},
|
|
829
843
|
};
|
|
830
844
|
addWalkerSchema({
|
|
831
|
-
walkerName:
|
|
845
|
+
walkerName: WalkerName$1.DefaultWalker,
|
|
832
846
|
exchangeName,
|
|
833
847
|
frameName,
|
|
834
848
|
strategies: strategyNames,
|
|
@@ -847,7 +861,7 @@ class WalkerMainService {
|
|
|
847
861
|
}
|
|
848
862
|
if (payload.verbose) {
|
|
849
863
|
overrideWalkerSchema({
|
|
850
|
-
walkerName:
|
|
864
|
+
walkerName: WalkerName$1.DefaultWalker,
|
|
851
865
|
callbacks: {
|
|
852
866
|
async onStrategyStart(strategyName, symbol) {
|
|
853
867
|
console.log(`Strategy started: ${strategyName} for symbol: ${symbol}`);
|
|
@@ -865,7 +879,7 @@ class WalkerMainService {
|
|
|
865
879
|
}
|
|
866
880
|
});
|
|
867
881
|
}
|
|
868
|
-
Walker.background(symbol, { walkerName:
|
|
882
|
+
Walker.background(symbol, { walkerName: WalkerName$1.DefaultWalker });
|
|
869
883
|
const [awaiter, { resolve: res }] = createAwaiter();
|
|
870
884
|
const unWalker = listenDoneWalker(() => {
|
|
871
885
|
console.log("Walker comparison finished");
|
|
@@ -882,7 +896,7 @@ class WalkerMainService {
|
|
|
882
896
|
const dumpDir = join(process.cwd(), "dump");
|
|
883
897
|
if (payload.json) {
|
|
884
898
|
const filePath = resolve(dumpDir, `${dumpName}.json`);
|
|
885
|
-
const data = await Walker.getData(symbol, { walkerName:
|
|
899
|
+
const data = await Walker.getData(symbol, { walkerName: WalkerName$1.DefaultWalker });
|
|
886
900
|
await mkdir(dumpDir, { recursive: true });
|
|
887
901
|
await writeFile(filePath, JSON.stringify(data, null, 2), "utf-8");
|
|
888
902
|
console.log(`Saved: ${filePath}`);
|
|
@@ -891,14 +905,14 @@ class WalkerMainService {
|
|
|
891
905
|
}
|
|
892
906
|
if (payload.markdown) {
|
|
893
907
|
const filePath = resolve(dumpDir, `${dumpName}.md`);
|
|
894
|
-
const report = await Walker.getReport(symbol, { walkerName:
|
|
908
|
+
const report = await Walker.getReport(symbol, { walkerName: WalkerName$1.DefaultWalker });
|
|
895
909
|
await mkdir(dumpDir, { recursive: true });
|
|
896
910
|
await writeFile(filePath, report, "utf-8");
|
|
897
911
|
console.log(`Saved: ${filePath}`);
|
|
898
912
|
process.exit(0);
|
|
899
913
|
return;
|
|
900
914
|
}
|
|
901
|
-
const report = await Walker.getReport(symbol, { walkerName:
|
|
915
|
+
const report = await Walker.getReport(symbol, { walkerName: WalkerName$1.DefaultWalker });
|
|
902
916
|
console.log(report);
|
|
903
917
|
process.exit(0);
|
|
904
918
|
});
|
|
@@ -2112,13 +2126,12 @@ const GET_EXT_VARIANTS_FN = (fileName) => {
|
|
|
2112
2126
|
const base = ext ? fileName.slice(0, -ext.length) : fileName;
|
|
2113
2127
|
const result = [];
|
|
2114
2128
|
{
|
|
2115
|
-
result.push(
|
|
2116
|
-
result.push(
|
|
2117
|
-
result.push(
|
|
2118
|
-
result.push(
|
|
2119
|
-
result.push(
|
|
2120
|
-
result.push(
|
|
2121
|
-
result.push(`${base}.json`);
|
|
2129
|
+
result.push(path.join(fileName, `index.cjs`));
|
|
2130
|
+
result.push(path.join(fileName, `index.mjs`));
|
|
2131
|
+
result.push(path.join(fileName, `index.ts`));
|
|
2132
|
+
result.push(path.join(fileName, `index.tsx`));
|
|
2133
|
+
result.push(path.join(fileName, `index.js`));
|
|
2134
|
+
result.push(path.join(fileName, `index.json`));
|
|
2122
2135
|
}
|
|
2123
2136
|
{
|
|
2124
2137
|
result.push(`${fileName}`);
|
|
@@ -2129,6 +2142,15 @@ const GET_EXT_VARIANTS_FN = (fileName) => {
|
|
|
2129
2142
|
result.push(`${fileName}.js`);
|
|
2130
2143
|
result.push(`${fileName}.json`);
|
|
2131
2144
|
}
|
|
2145
|
+
{
|
|
2146
|
+
result.push(`${base}`);
|
|
2147
|
+
result.push(`${base}.cjs`);
|
|
2148
|
+
result.push(`${base}.mjs`);
|
|
2149
|
+
result.push(`${base}.ts`);
|
|
2150
|
+
result.push(`${base}.tsx`);
|
|
2151
|
+
result.push(`${base}.js`);
|
|
2152
|
+
result.push(`${base}.json`);
|
|
2153
|
+
}
|
|
2132
2154
|
return result;
|
|
2133
2155
|
};
|
|
2134
2156
|
const GET_RESOLVED_EXT_FN = (filePath) => {
|
|
@@ -2486,7 +2508,7 @@ const main$b = async () => {
|
|
|
2486
2508
|
if (MODES.some((mode) => values[mode])) {
|
|
2487
2509
|
return;
|
|
2488
2510
|
}
|
|
2489
|
-
process.stdout.write(`@backtest-kit/cli ${"6.5.
|
|
2511
|
+
process.stdout.write(`@backtest-kit/cli ${"6.5.2"}\n`);
|
|
2490
2512
|
process.stdout.write("\n");
|
|
2491
2513
|
process.stdout.write(`Run with --help to see available commands.\n`);
|
|
2492
2514
|
process.stdout.write("\n");
|
|
@@ -3054,7 +3076,7 @@ const main$1 = async () => {
|
|
|
3054
3076
|
if (!values.help) {
|
|
3055
3077
|
return;
|
|
3056
3078
|
}
|
|
3057
|
-
process.stdout.write(`@backtest-kit/cli ${"6.5.
|
|
3079
|
+
process.stdout.write(`@backtest-kit/cli ${"6.5.2"}\n\n`);
|
|
3058
3080
|
process.stdout.write(HELP_TEXT);
|
|
3059
3081
|
process.exit(0);
|
|
3060
3082
|
};
|
|
@@ -3068,7 +3090,7 @@ const main = async () => {
|
|
|
3068
3090
|
if (!values.version) {
|
|
3069
3091
|
return;
|
|
3070
3092
|
}
|
|
3071
|
-
process.stdout.write(`@backtest-kit/cli ${"6.5.
|
|
3093
|
+
process.stdout.write(`@backtest-kit/cli ${"6.5.2"}\n`);
|
|
3072
3094
|
process.exit(0);
|
|
3073
3095
|
};
|
|
3074
3096
|
main();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backtest-kit/cli",
|
|
3
|
-
"version": "6.5.
|
|
3
|
+
"version": "6.5.2",
|
|
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",
|
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
"license": "ISC",
|
|
13
13
|
"type": "commonjs",
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@backtest-kit/cli": "^6.5.
|
|
15
|
+
"@backtest-kit/cli": "^6.5.2",
|
|
16
16
|
"@backtest-kit/graph": "^6.5.0",
|
|
17
17
|
"@backtest-kit/pinets": "^6.5.0",
|
|
18
18
|
"@backtest-kit/ui": "^6.5.0",
|
|
19
|
-
"agent-swarm-kit": "^1.3.
|
|
19
|
+
"agent-swarm-kit": "^1.3.2",
|
|
20
20
|
"backtest-kit": "^6.5.0",
|
|
21
21
|
"functools-kit": "^1.0.95",
|
|
22
22
|
"garch": "^1.2.3",
|