@tradejs/cli 2.0.8 → 2.0.10
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/cli.js +437 -171
- package/dist/lib/aiPocketSearchCli.js +54 -0
- package/dist/lib/marketContextPrepare.js +2 -2
- package/dist/lib/runtimeDebugEvidence.js +2 -1
- package/dist/lib/runtimeRedis.js +11 -0
- package/dist/scripts/aiPocketSearch.js +56 -8
- package/dist/scripts/backtest.js +2 -2
- package/dist/scripts/replay.js +2 -2
- package/dist/scripts/replayRunner.js +2 -2
- package/dist/scripts/replayRuntimeEvidence.js +2 -1
- package/dist/scripts/runtimeEvidence.js +2 -1
- package/dist/scripts/runtimeParity.js +2 -2
- package/dist/scripts/signals.js +233 -125
- package/dist/scripts/signalsDaemon.js +233 -125
- package/dist/scripts/signalsSummary.js +138 -35
- package/package.json +9 -9
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/lib/aiPocketSearchCli.ts
|
|
21
|
+
var aiPocketSearchCli_exports = {};
|
|
22
|
+
__export(aiPocketSearchCli_exports, {
|
|
23
|
+
AI_POCKET_SEARCH_CLI_DECIMAL_DEFAULTS: () => AI_POCKET_SEARCH_CLI_DECIMAL_DEFAULTS,
|
|
24
|
+
readAiPocketSearchCliOption: () => readAiPocketSearchCliOption
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(aiPocketSearchCli_exports);
|
|
27
|
+
var AI_POCKET_SEARCH_CLI_DECIMAL_DEFAULTS = {
|
|
28
|
+
minProfitFactor: "1.2",
|
|
29
|
+
minWinRate: "0",
|
|
30
|
+
minTotalProfit: "0",
|
|
31
|
+
validationSplit: "0.25"
|
|
32
|
+
};
|
|
33
|
+
var readAiPocketSearchCliOption = ({
|
|
34
|
+
argv,
|
|
35
|
+
longName,
|
|
36
|
+
shortName
|
|
37
|
+
}) => {
|
|
38
|
+
const longPrefix = `--${longName}=`;
|
|
39
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
40
|
+
const arg = argv[index];
|
|
41
|
+
if (arg.startsWith(longPrefix)) {
|
|
42
|
+
return arg.slice(longPrefix.length);
|
|
43
|
+
}
|
|
44
|
+
if (arg === `--${longName}` || shortName != null && arg === `-${shortName}`) {
|
|
45
|
+
return argv[index + 1];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return void 0;
|
|
49
|
+
};
|
|
50
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
51
|
+
0 && (module.exports = {
|
|
52
|
+
AI_POCKET_SEARCH_CLI_DECIMAL_DEFAULTS,
|
|
53
|
+
readAiPocketSearchCliOption
|
|
54
|
+
});
|
|
@@ -4551,7 +4551,7 @@ var buildCoinMarketCapBackfillParams = (params) => ({
|
|
|
4551
4551
|
userName: params.userName,
|
|
4552
4552
|
startMs: params.startMs,
|
|
4553
4553
|
endMs: params.endMs,
|
|
4554
|
-
preloadStartMs: params.preloadStartMs
|
|
4554
|
+
preloadStartMs: params.mode === "signals" ? void 0 : params.preloadStartMs
|
|
4555
4555
|
});
|
|
4556
4556
|
var buildBinanceMarketBackfillParams = (params) => ({
|
|
4557
4557
|
userName: params.userName,
|
|
@@ -4560,7 +4560,7 @@ var buildBinanceMarketBackfillParams = (params) => ({
|
|
|
4560
4560
|
interval: params.interval,
|
|
4561
4561
|
startMs: params.startMs,
|
|
4562
4562
|
endMs: params.endMs,
|
|
4563
|
-
preloadStartMs: params.preloadStartMs
|
|
4563
|
+
preloadStartMs: params.mode === "signals" ? void 0 : params.preloadStartMs
|
|
4564
4564
|
});
|
|
4565
4565
|
var buildDerivativesBackfillParams = (params) => ({
|
|
4566
4566
|
userName: params.userName,
|
|
@@ -382,7 +382,8 @@ var buildRuntimeDebugReportPayload = async ({
|
|
|
382
382
|
);
|
|
383
383
|
const activeTradeKey = import_redis3.redisKeys.runtimeActiveTrade(
|
|
384
384
|
userName,
|
|
385
|
-
trade.symbol
|
|
385
|
+
trade.symbol,
|
|
386
|
+
trade.deploymentId ?? trade.accountId
|
|
386
387
|
);
|
|
387
388
|
const signalKey = trade.signalId != null ? import_redis3.redisKeys.storeSignal(trade.symbol, trade.signalId) : null;
|
|
388
389
|
const evaluationBucketKey = import_redis3.redisKeys.runtimeSignalEvaluationBucket(
|
package/dist/lib/runtimeRedis.js
CHANGED
|
@@ -23,6 +23,7 @@ __export(runtimeRedis_exports, {
|
|
|
23
23
|
getRuntimeStrategyConfigKeys: () => getRuntimeStrategyConfigKeys,
|
|
24
24
|
isRuntimeStrategyEnabled: () => isRuntimeStrategyEnabled,
|
|
25
25
|
isRuntimeTradeRecord: () => isRuntimeTradeRecord,
|
|
26
|
+
loadRuntimeActiveTradeOrderIds: () => loadRuntimeActiveTradeOrderIds,
|
|
26
27
|
loadRuntimeStrategyConfigs: () => loadRuntimeStrategyConfigs,
|
|
27
28
|
loadRuntimeStrategyNames: () => loadRuntimeStrategyNames,
|
|
28
29
|
loadRuntimeTrades: () => loadRuntimeTrades,
|
|
@@ -131,6 +132,15 @@ var loadRuntimeTrades = async (userName, {
|
|
|
131
132
|
const trades = await Promise.all(keys.map((key) => (0, import_redis.getData)(key, null)));
|
|
132
133
|
return trades.filter(isRuntimeTradeRecord).filter(filterByWindow).sort((left, right) => left.entryTimestamp - right.entryTimestamp);
|
|
133
134
|
};
|
|
135
|
+
var loadRuntimeActiveTradeOrderIds = async (userName) => {
|
|
136
|
+
const keys = await (0, import_redis.getKeys)(import_redis.redisKeys.runtimeActiveTrades(userName));
|
|
137
|
+
const refs = await Promise.all(keys.map((key) => (0, import_redis.getData)(key, null)));
|
|
138
|
+
return new Set(
|
|
139
|
+
refs.map(
|
|
140
|
+
(ref) => ref && typeof ref === "object" && "orderId" in ref && typeof ref.orderId === "string" && ref.orderId.trim() ? ref.orderId.trim() : null
|
|
141
|
+
).filter((orderId) => orderId != null)
|
|
142
|
+
);
|
|
143
|
+
};
|
|
134
144
|
var loadStrategyResultSymbols = async ({
|
|
135
145
|
userName,
|
|
136
146
|
strategy
|
|
@@ -148,6 +158,7 @@ var loadStrategyResultSymbols = async ({
|
|
|
148
158
|
getRuntimeStrategyConfigKeys,
|
|
149
159
|
isRuntimeStrategyEnabled,
|
|
150
160
|
isRuntimeTradeRecord,
|
|
161
|
+
loadRuntimeActiveTradeOrderIds,
|
|
151
162
|
loadRuntimeStrategyConfigs,
|
|
152
163
|
loadRuntimeStrategyNames,
|
|
153
164
|
loadRuntimeTrades,
|
|
@@ -3314,6 +3314,31 @@ var buildAiPocketMarkdownReport = ({
|
|
|
3314
3314
|
`;
|
|
3315
3315
|
};
|
|
3316
3316
|
|
|
3317
|
+
// src/lib/aiPocketSearchCli.ts
|
|
3318
|
+
var AI_POCKET_SEARCH_CLI_DECIMAL_DEFAULTS = {
|
|
3319
|
+
minProfitFactor: "1.2",
|
|
3320
|
+
minWinRate: "0",
|
|
3321
|
+
minTotalProfit: "0",
|
|
3322
|
+
validationSplit: "0.25"
|
|
3323
|
+
};
|
|
3324
|
+
var readAiPocketSearchCliOption = ({
|
|
3325
|
+
argv,
|
|
3326
|
+
longName,
|
|
3327
|
+
shortName
|
|
3328
|
+
}) => {
|
|
3329
|
+
const longPrefix = `--${longName}=`;
|
|
3330
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
3331
|
+
const arg = argv[index];
|
|
3332
|
+
if (arg.startsWith(longPrefix)) {
|
|
3333
|
+
return arg.slice(longPrefix.length);
|
|
3334
|
+
}
|
|
3335
|
+
if (arg === `--${longName}` || shortName != null && arg === `-${shortName}`) {
|
|
3336
|
+
return argv[index + 1];
|
|
3337
|
+
}
|
|
3338
|
+
}
|
|
3339
|
+
return void 0;
|
|
3340
|
+
};
|
|
3341
|
+
|
|
3317
3342
|
// src/scripts/aiPocketSearch.ts
|
|
3318
3343
|
var ListIt = require_list_it();
|
|
3319
3344
|
import_args.default.example(
|
|
@@ -3368,17 +3393,17 @@ import_args.default.option(["m", "minSupport"], "Minimum rows required for a poc
|
|
|
3368
3393
|
import_args.default.option(
|
|
3369
3394
|
["F", "minProfitFactor"],
|
|
3370
3395
|
"Minimum profit factor required for positive pockets",
|
|
3371
|
-
|
|
3396
|
+
AI_POCKET_SEARCH_CLI_DECIMAL_DEFAULTS.minProfitFactor
|
|
3372
3397
|
);
|
|
3373
3398
|
import_args.default.option(
|
|
3374
3399
|
["W", "minWinRate"],
|
|
3375
3400
|
"Minimum win rate required for positive pockets",
|
|
3376
|
-
|
|
3401
|
+
AI_POCKET_SEARCH_CLI_DECIMAL_DEFAULTS.minWinRate
|
|
3377
3402
|
);
|
|
3378
3403
|
import_args.default.option(
|
|
3379
3404
|
["R", "minTotalProfit"],
|
|
3380
3405
|
"Minimum total PnL required for positive pockets",
|
|
3381
|
-
|
|
3406
|
+
AI_POCKET_SEARCH_CLI_DECIMAL_DEFAULTS.minTotalProfit
|
|
3382
3407
|
);
|
|
3383
3408
|
import_args.default.option(
|
|
3384
3409
|
["a", "maxAtomicPredicates"],
|
|
@@ -3393,7 +3418,7 @@ import_args.default.option(
|
|
|
3393
3418
|
import_args.default.option(
|
|
3394
3419
|
["V", "validationSplit"],
|
|
3395
3420
|
"Trailing time-ordered scope share reserved for validation (0 disables)",
|
|
3396
|
-
|
|
3421
|
+
AI_POCKET_SEARCH_CLI_DECIMAL_DEFAULTS.validationSplit
|
|
3397
3422
|
);
|
|
3398
3423
|
import_args.default.option(
|
|
3399
3424
|
["N", "minValidationSupport"],
|
|
@@ -3810,17 +3835,40 @@ var main = async () => {
|
|
|
3810
3835
|
const maxDepth = normalizePositiveInt(flags.maxDepth, 2);
|
|
3811
3836
|
const minSupport = normalizePositiveInt(flags.minSupport, 20);
|
|
3812
3837
|
const minProfitFactor = normalizeNonNegativeNumber(
|
|
3813
|
-
|
|
3838
|
+
readAiPocketSearchCliOption({
|
|
3839
|
+
argv: process.argv,
|
|
3840
|
+
longName: "minProfitFactor",
|
|
3841
|
+
shortName: "F"
|
|
3842
|
+
}) ?? flags.minProfitFactor,
|
|
3814
3843
|
1.2
|
|
3815
3844
|
);
|
|
3816
|
-
const minWinRate = normalizeNonNegativeNumber(
|
|
3817
|
-
|
|
3845
|
+
const minWinRate = normalizeNonNegativeNumber(
|
|
3846
|
+
readAiPocketSearchCliOption({
|
|
3847
|
+
argv: process.argv,
|
|
3848
|
+
longName: "minWinRate",
|
|
3849
|
+
shortName: "W"
|
|
3850
|
+
}) ?? flags.minWinRate,
|
|
3851
|
+
0
|
|
3852
|
+
);
|
|
3853
|
+
const minTotalProfitValue = readAiPocketSearchCliOption({
|
|
3854
|
+
argv: process.argv,
|
|
3855
|
+
longName: "minTotalProfit",
|
|
3856
|
+
shortName: "R"
|
|
3857
|
+
}) ?? flags.minTotalProfit;
|
|
3858
|
+
const minTotalProfit = Number.isFinite(Number(minTotalProfitValue)) ? Number(minTotalProfitValue) : 0;
|
|
3818
3859
|
const maxAtomicPredicates = normalizePositiveInt(
|
|
3819
3860
|
flags.maxAtomicPredicates,
|
|
3820
3861
|
180
|
|
3821
3862
|
);
|
|
3822
3863
|
const maxCombinations = normalizePositiveInt(flags.maxCombinations, 6e4);
|
|
3823
|
-
const validationSplit = hasCliOption2("validationSplit", "V") ? normalizeRatio(
|
|
3864
|
+
const validationSplit = hasCliOption2("validationSplit", "V") ? normalizeRatio(
|
|
3865
|
+
readAiPocketSearchCliOption({
|
|
3866
|
+
argv: process.argv,
|
|
3867
|
+
longName: "validationSplit",
|
|
3868
|
+
shortName: "V"
|
|
3869
|
+
}) ?? flags.validationSplit,
|
|
3870
|
+
0.25
|
|
3871
|
+
) : 0.25;
|
|
3824
3872
|
const explicitMinValidationSupport = normalizeInt(
|
|
3825
3873
|
flags.minValidationSupport,
|
|
3826
3874
|
0
|
package/dist/scripts/backtest.js
CHANGED
|
@@ -4594,7 +4594,7 @@ var buildCoinMarketCapBackfillParams = (params) => ({
|
|
|
4594
4594
|
userName: params.userName,
|
|
4595
4595
|
startMs: params.startMs,
|
|
4596
4596
|
endMs: params.endMs,
|
|
4597
|
-
preloadStartMs: params.preloadStartMs
|
|
4597
|
+
preloadStartMs: params.mode === "signals" ? void 0 : params.preloadStartMs
|
|
4598
4598
|
});
|
|
4599
4599
|
var buildBinanceMarketBackfillParams = (params) => ({
|
|
4600
4600
|
userName: params.userName,
|
|
@@ -4603,7 +4603,7 @@ var buildBinanceMarketBackfillParams = (params) => ({
|
|
|
4603
4603
|
interval: params.interval,
|
|
4604
4604
|
startMs: params.startMs,
|
|
4605
4605
|
endMs: params.endMs,
|
|
4606
|
-
preloadStartMs: params.preloadStartMs
|
|
4606
|
+
preloadStartMs: params.mode === "signals" ? void 0 : params.preloadStartMs
|
|
4607
4607
|
});
|
|
4608
4608
|
var buildDerivativesBackfillParams = (params) => ({
|
|
4609
4609
|
userName: params.userName,
|
package/dist/scripts/replay.js
CHANGED
|
@@ -5235,7 +5235,7 @@ var buildCoinMarketCapBackfillParams = (params) => ({
|
|
|
5235
5235
|
userName: params.userName,
|
|
5236
5236
|
startMs: params.startMs,
|
|
5237
5237
|
endMs: params.endMs,
|
|
5238
|
-
preloadStartMs: params.preloadStartMs
|
|
5238
|
+
preloadStartMs: params.mode === "signals" ? void 0 : params.preloadStartMs
|
|
5239
5239
|
});
|
|
5240
5240
|
var buildBinanceMarketBackfillParams = (params) => ({
|
|
5241
5241
|
userName: params.userName,
|
|
@@ -5244,7 +5244,7 @@ var buildBinanceMarketBackfillParams = (params) => ({
|
|
|
5244
5244
|
interval: params.interval,
|
|
5245
5245
|
startMs: params.startMs,
|
|
5246
5246
|
endMs: params.endMs,
|
|
5247
|
-
preloadStartMs: params.preloadStartMs
|
|
5247
|
+
preloadStartMs: params.mode === "signals" ? void 0 : params.preloadStartMs
|
|
5248
5248
|
});
|
|
5249
5249
|
var buildDerivativesBackfillParams = (params) => ({
|
|
5250
5250
|
userName: params.userName,
|
|
@@ -5238,7 +5238,7 @@ var buildCoinMarketCapBackfillParams = (params) => ({
|
|
|
5238
5238
|
userName: params.userName,
|
|
5239
5239
|
startMs: params.startMs,
|
|
5240
5240
|
endMs: params.endMs,
|
|
5241
|
-
preloadStartMs: params.preloadStartMs
|
|
5241
|
+
preloadStartMs: params.mode === "signals" ? void 0 : params.preloadStartMs
|
|
5242
5242
|
});
|
|
5243
5243
|
var buildBinanceMarketBackfillParams = (params) => ({
|
|
5244
5244
|
userName: params.userName,
|
|
@@ -5247,7 +5247,7 @@ var buildBinanceMarketBackfillParams = (params) => ({
|
|
|
5247
5247
|
interval: params.interval,
|
|
5248
5248
|
startMs: params.startMs,
|
|
5249
5249
|
endMs: params.endMs,
|
|
5250
|
-
preloadStartMs: params.preloadStartMs
|
|
5250
|
+
preloadStartMs: params.mode === "signals" ? void 0 : params.preloadStartMs
|
|
5251
5251
|
});
|
|
5252
5252
|
var buildDerivativesBackfillParams = (params) => ({
|
|
5253
5253
|
userName: params.userName,
|
|
@@ -382,7 +382,8 @@ var buildRuntimeDebugReportPayload = async ({
|
|
|
382
382
|
);
|
|
383
383
|
const activeTradeKey = import_redis3.redisKeys.runtimeActiveTrade(
|
|
384
384
|
userName,
|
|
385
|
-
trade.symbol
|
|
385
|
+
trade.symbol,
|
|
386
|
+
trade.deploymentId ?? trade.accountId
|
|
386
387
|
);
|
|
387
388
|
const signalKey = trade.signalId != null ? import_redis3.redisKeys.storeSignal(trade.symbol, trade.signalId) : null;
|
|
388
389
|
const evaluationBucketKey = import_redis3.redisKeys.runtimeSignalEvaluationBucket(
|
|
@@ -381,7 +381,8 @@ var buildRuntimeDebugReportPayload = async ({
|
|
|
381
381
|
);
|
|
382
382
|
const activeTradeKey = import_redis3.redisKeys.runtimeActiveTrade(
|
|
383
383
|
userName,
|
|
384
|
-
trade.symbol
|
|
384
|
+
trade.symbol,
|
|
385
|
+
trade.deploymentId ?? trade.accountId
|
|
385
386
|
);
|
|
386
387
|
const signalKey = trade.signalId != null ? import_redis3.redisKeys.storeSignal(trade.symbol, trade.signalId) : null;
|
|
387
388
|
const evaluationBucketKey = import_redis3.redisKeys.runtimeSignalEvaluationBucket(
|
|
@@ -5240,7 +5240,7 @@ var buildCoinMarketCapBackfillParams = (params) => ({
|
|
|
5240
5240
|
userName: params.userName,
|
|
5241
5241
|
startMs: params.startMs,
|
|
5242
5242
|
endMs: params.endMs,
|
|
5243
|
-
preloadStartMs: params.preloadStartMs
|
|
5243
|
+
preloadStartMs: params.mode === "signals" ? void 0 : params.preloadStartMs
|
|
5244
5244
|
});
|
|
5245
5245
|
var buildBinanceMarketBackfillParams = (params) => ({
|
|
5246
5246
|
userName: params.userName,
|
|
@@ -5249,7 +5249,7 @@ var buildBinanceMarketBackfillParams = (params) => ({
|
|
|
5249
5249
|
interval: params.interval,
|
|
5250
5250
|
startMs: params.startMs,
|
|
5251
5251
|
endMs: params.endMs,
|
|
5252
|
-
preloadStartMs: params.preloadStartMs
|
|
5252
|
+
preloadStartMs: params.mode === "signals" ? void 0 : params.preloadStartMs
|
|
5253
5253
|
});
|
|
5254
5254
|
var buildDerivativesBackfillParams = (params) => ({
|
|
5255
5255
|
userName: params.userName,
|