@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
|
@@ -45,17 +45,7 @@ var import_redis3 = require("@tradejs/infra/redis");
|
|
|
45
45
|
// src/lib/runtimeRedis.ts
|
|
46
46
|
var import_redis = require("@tradejs/infra/redis");
|
|
47
47
|
var import_time = require("@tradejs/core/time");
|
|
48
|
-
var
|
|
49
|
-
var RESERVED_CONFIG_IDS = /* @__PURE__ */ new Set(["results"]);
|
|
50
|
-
var resolveStrategyConfigIdentityByKey = (userName, key) => {
|
|
51
|
-
const parts = key.split(":");
|
|
52
|
-
if (parts.length !== 5) return null;
|
|
53
|
-
const [users, keyUserName, strategiesKey, strategyName, configId] = parts;
|
|
54
|
-
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)) {
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
return { strategyName, configId };
|
|
58
|
-
};
|
|
48
|
+
var import_runtimeStrategyConfigs = require("@tradejs/infra/runtimeStrategyConfigs");
|
|
59
49
|
var isRuntimeTradeRecord = (value) => {
|
|
60
50
|
if (!value || typeof value !== "object") {
|
|
61
51
|
return false;
|
|
@@ -63,42 +53,6 @@ var isRuntimeTradeRecord = (value) => {
|
|
|
63
53
|
const record = value;
|
|
64
54
|
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");
|
|
65
55
|
};
|
|
66
|
-
var resolveStrategyNameByConfigKey = (userName, key) => {
|
|
67
|
-
return resolveStrategyConfigIdentityByKey(userName, key)?.strategyName ?? null;
|
|
68
|
-
};
|
|
69
|
-
var getRuntimeStrategyConfigKeys = async (userName) => {
|
|
70
|
-
const keys = await (0, import_redis.getKeys)(`${import_redis.redisKeys.strategies(userName)}:`);
|
|
71
|
-
return keys.filter((key) => resolveStrategyConfigIdentityByKey(userName, key)).sort((left, right) => left.localeCompare(right));
|
|
72
|
-
};
|
|
73
|
-
var loadRuntimeStrategyConfigs = async (userName, {
|
|
74
|
-
onInvalidConfig
|
|
75
|
-
} = {}) => {
|
|
76
|
-
const configKeys = await getRuntimeStrategyConfigKeys(userName);
|
|
77
|
-
const strategyConfigs = await Promise.all(
|
|
78
|
-
configKeys.map(async (key) => {
|
|
79
|
-
const strategyName = resolveStrategyNameByConfigKey(userName, key);
|
|
80
|
-
const identity = resolveStrategyConfigIdentityByKey(userName, key);
|
|
81
|
-
if (!strategyName || !identity) {
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
const strategyConfig = await (0, import_redis.getData)(
|
|
85
|
-
key,
|
|
86
|
-
null
|
|
87
|
-
);
|
|
88
|
-
if (!strategyConfig || typeof strategyConfig !== "object" || Array.isArray(strategyConfig)) {
|
|
89
|
-
onInvalidConfig?.(key);
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
return {
|
|
93
|
-
key,
|
|
94
|
-
strategyName,
|
|
95
|
-
configId: identity.configId,
|
|
96
|
-
strategyConfig
|
|
97
|
-
};
|
|
98
|
-
})
|
|
99
|
-
);
|
|
100
|
-
return strategyConfigs.filter(Boolean);
|
|
101
|
-
};
|
|
102
56
|
var loadRuntimeTrades = async (userName, {
|
|
103
57
|
startTime,
|
|
104
58
|
endTime
|
|
@@ -349,7 +303,7 @@ var collectRuntimeDebugEvidence = async ({
|
|
|
349
303
|
loadRuntimeSignals(userName, { startTime, endTime }),
|
|
350
304
|
loadRuntimeSignalEvaluations(userName, { startTime, endTime }),
|
|
351
305
|
loadRuntimeSignalEvaluationStatsBuckets(userName),
|
|
352
|
-
loadRuntimeStrategyConfigs(userName)
|
|
306
|
+
(0, import_runtimeStrategyConfigs.loadRuntimeStrategyConfigs)(userName)
|
|
353
307
|
]);
|
|
354
308
|
const tradesByOrderId = new Map(
|
|
355
309
|
entryTrades.map((trade) => [trade.orderId, trade])
|
|
@@ -417,6 +371,17 @@ var RUNTIME_EVIDENCE_PAYLOAD_FILE = "runtime-evidence.json";
|
|
|
417
371
|
var RUNTIME_EVIDENCE_COMPLETE_FILE = ".complete";
|
|
418
372
|
var asRecord = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
419
373
|
var sha256 = (value) => (0, import_node_crypto.createHash)("sha256").update(value).digest("hex");
|
|
374
|
+
var runtimeEvidenceIdentitySha256 = (artifact) => {
|
|
375
|
+
const identityArtifact = { ...artifact };
|
|
376
|
+
delete identityArtifact.generatedAt;
|
|
377
|
+
const runtime = asRecord(identityArtifact.runtime);
|
|
378
|
+
if (runtime) {
|
|
379
|
+
const identityRuntime = { ...runtime };
|
|
380
|
+
delete identityRuntime.generatedAt;
|
|
381
|
+
identityArtifact.runtime = identityRuntime;
|
|
382
|
+
}
|
|
383
|
+
return sha256(JSON.stringify(identityArtifact));
|
|
384
|
+
};
|
|
420
385
|
var isExistingDestinationError = (error) => {
|
|
421
386
|
const code = error.code;
|
|
422
387
|
return code === "EEXIST" || code === "ENOTEMPTY";
|
|
@@ -487,11 +452,12 @@ var publishRuntimeEvidenceBundle = async ({
|
|
|
487
452
|
const payload = `${JSON.stringify(artifact, null, 2)}
|
|
488
453
|
`;
|
|
489
454
|
const payloadSha256 = sha256(payload);
|
|
455
|
+
const identitySha256 = runtimeEvidenceIdentitySha256(artifact);
|
|
490
456
|
const safeDeploymentId = safeSegment(deploymentId, "default");
|
|
491
457
|
const artifactId = [
|
|
492
458
|
compactTimestamp(startTime),
|
|
493
459
|
compactTimestamp(endTime),
|
|
494
|
-
|
|
460
|
+
identitySha256.slice(0, 16)
|
|
495
461
|
].join("_");
|
|
496
462
|
const createdAt = Date.now();
|
|
497
463
|
const manifest = {
|