@tradejs/cli 2.0.17 → 2.0.19
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 +6122 -12724
- package/dist/lib/aiExport.js +1 -1607
- package/dist/lib/binanceMarketContextBackfill.js +7 -6
- package/dist/lib/coinMarketCapContextBackfill.js +19 -18
- package/dist/lib/derivativesContextBackfill.js +10 -9
- package/dist/lib/hyperliquidWhaleBackfill.js +8 -8
- package/dist/lib/hyperliquidWhaleStream.js +4 -4
- package/dist/lib/marketContextPrepare.js +83 -1686
- package/dist/lib/runEnvironment.js +14 -1666
- package/dist/lib/runFormatting.js +1 -1607
- package/dist/lib/runtimeDebugEvidence.js +2 -48
- package/dist/lib/runtimeEvidenceArtifacts.js +13 -1
- package/dist/lib/runtimeRedis.js +6 -57
- package/dist/lib/runtimeStrategyBacktest.js +2 -48
- package/dist/scripts/aiExport.js +1 -1607
- package/dist/scripts/aiPocketSearch.js +1 -1607
- package/dist/scripts/aiTrain.js +17 -1623
- package/dist/scripts/backtest.js +110 -1759
- package/dist/scripts/binanceMarketIngest.js +5 -4
- package/dist/scripts/candlesMigrateProvider.js +6 -5186
- package/dist/scripts/cleanupMarketContext.js +4 -3
- package/dist/scripts/continuity.js +4 -3
- package/dist/scripts/derivativesIngest.js +6 -4
- package/dist/scripts/derivativesIngestCoinalyzeAll.js +5 -4
- package/dist/scripts/doctor.js +2 -5184
- package/dist/scripts/hyperliquidWhaleBackfill.js +8 -8
- package/dist/scripts/hyperliquidWhaleIngest.js +4 -4
- package/dist/scripts/hyperliquidWhalesUpdate.js +1 -1
- package/dist/scripts/migration.js +3 -3
- package/dist/scripts/mlExport.js +1 -1607
- package/dist/scripts/replay.js +291 -1807
- package/dist/scripts/replayRunner.js +291 -1807
- package/dist/scripts/replayRuntimeEvidence.js +2 -48
- package/dist/scripts/researchAuto.js +3 -49
- package/dist/scripts/results.js +1 -1607
- package/dist/scripts/runtimeEvidence.js +15 -49
- package/dist/scripts/runtimeParity.js +121 -1746
- package/dist/scripts/signals.js +1057 -2647
- package/dist/scripts/signalsDaemon.js +1051 -2608
- package/dist/scripts/signalsSummary.js +4 -26
- package/dist/workers/testerWorker.js +2 -2
- package/package.json +11 -9
|
@@ -46,17 +46,7 @@ var import_redis3 = require("@tradejs/infra/redis");
|
|
|
46
46
|
// src/lib/runtimeRedis.ts
|
|
47
47
|
var import_redis = require("@tradejs/infra/redis");
|
|
48
48
|
var import_time = require("@tradejs/core/time");
|
|
49
|
-
var
|
|
50
|
-
var RESERVED_CONFIG_IDS = /* @__PURE__ */ new Set(["results"]);
|
|
51
|
-
var resolveStrategyConfigIdentityByKey = (userName, key) => {
|
|
52
|
-
const parts = key.split(":");
|
|
53
|
-
if (parts.length !== 5) return null;
|
|
54
|
-
const [users, keyUserName, strategiesKey, strategyName, configId] = parts;
|
|
55
|
-
if (users !== "users" || keyUserName !== userName || strategiesKey !== "strategies" || !strategyName || !configId || RESERVED_STRATEGY_NAMES.has(strategyName) || RESERVED_CONFIG_IDS.has(configId) || !/^[a-zA-Z0-9_-]+$/.test(configId)) {
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
return { strategyName, configId };
|
|
59
|
-
};
|
|
49
|
+
var import_runtimeStrategyConfigs = require("@tradejs/infra/runtimeStrategyConfigs");
|
|
60
50
|
var isRuntimeTradeRecord = (value) => {
|
|
61
51
|
if (!value || typeof value !== "object") {
|
|
62
52
|
return false;
|
|
@@ -64,42 +54,6 @@ var isRuntimeTradeRecord = (value) => {
|
|
|
64
54
|
const record = value;
|
|
65
55
|
return typeof record.orderId === "string" && typeof record.strategy === "string" && typeof record.symbol === "string" && typeof record.entryTimestamp === "number" && typeof record.entryPrice === "number" && typeof record.qty === "number" && (record.direction === "LONG" || record.direction === "SHORT");
|
|
66
56
|
};
|
|
67
|
-
var resolveStrategyNameByConfigKey = (userName, key) => {
|
|
68
|
-
return resolveStrategyConfigIdentityByKey(userName, key)?.strategyName ?? null;
|
|
69
|
-
};
|
|
70
|
-
var getRuntimeStrategyConfigKeys = async (userName) => {
|
|
71
|
-
const keys = await (0, import_redis.getKeys)(`${import_redis.redisKeys.strategies(userName)}:`);
|
|
72
|
-
return keys.filter((key) => resolveStrategyConfigIdentityByKey(userName, key)).sort((left, right) => left.localeCompare(right));
|
|
73
|
-
};
|
|
74
|
-
var loadRuntimeStrategyConfigs = async (userName, {
|
|
75
|
-
onInvalidConfig
|
|
76
|
-
} = {}) => {
|
|
77
|
-
const configKeys = await getRuntimeStrategyConfigKeys(userName);
|
|
78
|
-
const strategyConfigs = await Promise.all(
|
|
79
|
-
configKeys.map(async (key) => {
|
|
80
|
-
const strategyName = resolveStrategyNameByConfigKey(userName, key);
|
|
81
|
-
const identity = resolveStrategyConfigIdentityByKey(userName, key);
|
|
82
|
-
if (!strategyName || !identity) {
|
|
83
|
-
return null;
|
|
84
|
-
}
|
|
85
|
-
const strategyConfig = await (0, import_redis.getData)(
|
|
86
|
-
key,
|
|
87
|
-
null
|
|
88
|
-
);
|
|
89
|
-
if (!strategyConfig || typeof strategyConfig !== "object" || Array.isArray(strategyConfig)) {
|
|
90
|
-
onInvalidConfig?.(key);
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
return {
|
|
94
|
-
key,
|
|
95
|
-
strategyName,
|
|
96
|
-
configId: identity.configId,
|
|
97
|
-
strategyConfig
|
|
98
|
-
};
|
|
99
|
-
})
|
|
100
|
-
);
|
|
101
|
-
return strategyConfigs.filter(Boolean);
|
|
102
|
-
};
|
|
103
57
|
var loadRuntimeTrades = async (userName, {
|
|
104
58
|
startTime,
|
|
105
59
|
endTime
|
|
@@ -350,7 +304,7 @@ var collectRuntimeDebugEvidence = async ({
|
|
|
350
304
|
loadRuntimeSignals(userName, { startTime, endTime }),
|
|
351
305
|
loadRuntimeSignalEvaluations(userName, { startTime, endTime }),
|
|
352
306
|
loadRuntimeSignalEvaluationStatsBuckets(userName),
|
|
353
|
-
loadRuntimeStrategyConfigs(userName)
|
|
307
|
+
(0, import_runtimeStrategyConfigs.loadRuntimeStrategyConfigs)(userName)
|
|
354
308
|
]);
|
|
355
309
|
const tradesByOrderId = new Map(
|
|
356
310
|
entryTrades.map((trade) => [trade.orderId, trade])
|
|
@@ -45,7 +45,7 @@ __export(researchAuto_exports, {
|
|
|
45
45
|
parseJsonOutput: () => parseJsonOutput,
|
|
46
46
|
releaseResearchAutoLock: () => releaseResearchAutoLock,
|
|
47
47
|
resolveHeapMbFromEnv: () => resolveHeapMbFromEnv,
|
|
48
|
-
resolveStrategyNameByConfigKey: () => resolveStrategyNameByConfigKey,
|
|
48
|
+
resolveStrategyNameByConfigKey: () => import_runtimeStrategyConfigs.resolveStrategyNameByConfigKey,
|
|
49
49
|
resolveTarget: () => resolveTarget,
|
|
50
50
|
runCliCommand: () => runCliCommand,
|
|
51
51
|
toStrategyConfigGrid: () => toStrategyConfigGrid,
|
|
@@ -67,57 +67,11 @@ var import_strategies = require("@tradejs/strategies");
|
|
|
67
67
|
// src/lib/runtimeRedis.ts
|
|
68
68
|
var import_redis = require("@tradejs/infra/redis");
|
|
69
69
|
var import_time = require("@tradejs/core/time");
|
|
70
|
-
var
|
|
71
|
-
var RESERVED_CONFIG_IDS = /* @__PURE__ */ new Set(["results"]);
|
|
72
|
-
var resolveStrategyConfigIdentityByKey = (userName, key) => {
|
|
73
|
-
const parts = key.split(":");
|
|
74
|
-
if (parts.length !== 5) return null;
|
|
75
|
-
const [users, keyUserName, strategiesKey, strategyName, configId] = parts;
|
|
76
|
-
if (users !== "users" || keyUserName !== userName || strategiesKey !== "strategies" || !strategyName || !configId || RESERVED_STRATEGY_NAMES.has(strategyName) || RESERVED_CONFIG_IDS.has(configId) || !/^[a-zA-Z0-9_-]+$/.test(configId)) {
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
return { strategyName, configId };
|
|
80
|
-
};
|
|
70
|
+
var import_runtimeStrategyConfigs = require("@tradejs/infra/runtimeStrategyConfigs");
|
|
81
71
|
var isRuntimeStrategyEnabled = (strategyConfig) => {
|
|
82
72
|
const enabled = strategyConfig.ENABLE;
|
|
83
73
|
return enabled !== false;
|
|
84
74
|
};
|
|
85
|
-
var resolveStrategyNameByConfigKey = (userName, key) => {
|
|
86
|
-
return resolveStrategyConfigIdentityByKey(userName, key)?.strategyName ?? null;
|
|
87
|
-
};
|
|
88
|
-
var getRuntimeStrategyConfigKeys = async (userName) => {
|
|
89
|
-
const keys = await (0, import_redis.getKeys)(`${import_redis.redisKeys.strategies(userName)}:`);
|
|
90
|
-
return keys.filter((key) => resolveStrategyConfigIdentityByKey(userName, key)).sort((left, right) => left.localeCompare(right));
|
|
91
|
-
};
|
|
92
|
-
var loadRuntimeStrategyConfigs = async (userName, {
|
|
93
|
-
onInvalidConfig
|
|
94
|
-
} = {}) => {
|
|
95
|
-
const configKeys = await getRuntimeStrategyConfigKeys(userName);
|
|
96
|
-
const strategyConfigs = await Promise.all(
|
|
97
|
-
configKeys.map(async (key) => {
|
|
98
|
-
const strategyName = resolveStrategyNameByConfigKey(userName, key);
|
|
99
|
-
const identity = resolveStrategyConfigIdentityByKey(userName, key);
|
|
100
|
-
if (!strategyName || !identity) {
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
const strategyConfig = await (0, import_redis.getData)(
|
|
104
|
-
key,
|
|
105
|
-
null
|
|
106
|
-
);
|
|
107
|
-
if (!strategyConfig || typeof strategyConfig !== "object" || Array.isArray(strategyConfig)) {
|
|
108
|
-
onInvalidConfig?.(key);
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
return {
|
|
112
|
-
key,
|
|
113
|
-
strategyName,
|
|
114
|
-
configId: identity.configId,
|
|
115
|
-
strategyConfig
|
|
116
|
-
};
|
|
117
|
-
})
|
|
118
|
-
);
|
|
119
|
-
return strategyConfigs.filter(Boolean);
|
|
120
|
-
};
|
|
121
75
|
|
|
122
76
|
// src/lib/runtimeStrategyBacktest.ts
|
|
123
77
|
var import_chalk = __toESM(require("chalk"));
|
|
@@ -413,7 +367,7 @@ var listMergedFiles = async (outDir, strategyName) => {
|
|
|
413
367
|
};
|
|
414
368
|
var getBacktestResultsPrefix = (userName, config) => `users:${userName}:backtests:results:${config}:`;
|
|
415
369
|
var listRuntimeStrategyNames = async (userName) => {
|
|
416
|
-
const strategyConfigs = await loadRuntimeStrategyConfigs(userName);
|
|
370
|
+
const strategyConfigs = await (0, import_runtimeStrategyConfigs.loadRuntimeStrategyConfigs)(userName);
|
|
417
371
|
return strategyConfigs.filter(({ strategyConfig }) => isRuntimeStrategyEnabled(strategyConfig)).map(({ strategyName }) => strategyName).sort((left, right) => left.localeCompare(right));
|
|
418
372
|
};
|
|
419
373
|
var toStrategyConfigGrid = (strategyConfig) => {
|