@tradejs/cli 2.0.18 → 2.0.20
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 +14522 -15704
- package/dist/lib/aiExport.js +15 -1608
- package/dist/lib/aiPocketSearch.js +499 -67
- package/dist/lib/aiPocketSearchCli.js +113 -0
- package/dist/lib/aiTrainCharts.js +14 -1
- package/dist/lib/aiTrainMetrics.js +4 -1
- package/dist/lib/aiTrainResearch.js +88 -54
- package/dist/lib/binanceMarketContextBackfill.js +7 -6
- package/dist/lib/coinMarketCapContextBackfill.js +19 -18
- package/dist/lib/coreResearch.js +2738 -0
- package/dist/lib/derivativesContextBackfill.js +10 -9
- package/dist/lib/executionCalibration.js +6 -3
- 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/runtimeLineage.js +81 -48
- package/dist/lib/runtimeRedis.js +6 -57
- package/dist/lib/runtimeScorecard.js +153 -10
- package/dist/lib/runtimeStrategyBacktest.js +2 -48
- package/dist/lib/strategyGateFingerprint.js +80 -0
- package/dist/lib/strategyRelease.js +1365 -0
- package/dist/scripts/aiExport.js +17 -1610
- package/dist/scripts/aiPocketSearch.js +1070 -1770
- package/dist/scripts/aiTrain.js +108 -1688
- package/dist/scripts/backtest.js +120 -1760
- 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/coreResearch.js +2830 -0
- package/dist/scripts/derivativesIngest.js +6 -4
- package/dist/scripts/derivativesIngestCoinalyzeAll.js +5 -4
- package/dist/scripts/doctor.js +2 -5184
- package/dist/scripts/executionCalibration.js +6 -3
- 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 +239 -1855
- package/dist/scripts/replayRunner.js +239 -1855
- package/dist/scripts/replayRuntimeEvidence.js +29 -62
- package/dist/scripts/researchAuto.js +3 -49
- package/dist/scripts/results.js +1 -1607
- package/dist/scripts/runtimeEvidence.js +18 -56
- package/dist/scripts/runtimeParity.js +121 -1746
- package/dist/scripts/runtimeScorecard.js +883 -29
- package/dist/scripts/signals.js +1178 -2724
- package/dist/scripts/signalsDaemon.js +1183 -2696
- package/dist/scripts/signalsSummary.js +4 -26
- package/dist/scripts/strategyRelease.js +1469 -0
- package/dist/workers/testerWorker.js +2 -2
- package/package.json +13 -9
|
@@ -34,8 +34,8 @@ __export(runtimeEvidence_exports, {
|
|
|
34
34
|
runtimeEvidence: () => runtimeEvidence
|
|
35
35
|
});
|
|
36
36
|
module.exports = __toCommonJS(runtimeEvidence_exports);
|
|
37
|
-
var
|
|
38
|
-
var
|
|
37
|
+
var import_promises4 = __toESM(require("fs/promises"));
|
|
38
|
+
var import_node_path4 = __toESM(require("path"));
|
|
39
39
|
var import_args = __toESM(require("args"));
|
|
40
40
|
var import_chalk = __toESM(require("chalk"));
|
|
41
41
|
|
|
@@ -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])
|
|
@@ -605,13 +559,21 @@ var verifyRuntimeEvidenceBundle = async (bundleDir) => {
|
|
|
605
559
|
|
|
606
560
|
// src/lib/runtimeLineage.ts
|
|
607
561
|
var import_node_child_process = require("child_process");
|
|
562
|
+
var import_node_crypto3 = require("crypto");
|
|
563
|
+
var import_promises3 = __toESM(require("fs/promises"));
|
|
564
|
+
var import_node_path3 = __toESM(require("path"));
|
|
565
|
+
var import_types = require("@tradejs/types");
|
|
566
|
+
var import_strategies = require("@tradejs/node/strategies");
|
|
567
|
+
|
|
568
|
+
// src/lib/strategyGateFingerprint.ts
|
|
608
569
|
var import_node_crypto2 = require("crypto");
|
|
609
570
|
var import_promises2 = __toESM(require("fs/promises"));
|
|
610
571
|
var import_node_path2 = __toESM(require("path"));
|
|
611
|
-
|
|
612
|
-
|
|
572
|
+
|
|
573
|
+
// src/lib/runtimeLineage.ts
|
|
613
574
|
var runtimeLineageKey = (lineage) => [
|
|
614
575
|
lineage.schemaVersion,
|
|
576
|
+
lineage.compositionId ?? "unbound-composition",
|
|
615
577
|
lineage.gitSha ?? "unknown",
|
|
616
578
|
lineage.gitDirty == null ? "unknown" : lineage.gitDirty ? "dirty" : "clean",
|
|
617
579
|
lineage.gateFingerprint,
|
|
@@ -729,13 +691,13 @@ var runtimeEvidence = async () => {
|
|
|
729
691
|
strategies,
|
|
730
692
|
runtime
|
|
731
693
|
};
|
|
732
|
-
const outPath =
|
|
733
|
-
await
|
|
734
|
-
await
|
|
694
|
+
const outPath = import_node_path4.default.resolve(projectRoot, String(flags.out));
|
|
695
|
+
await import_promises4.default.mkdir(import_node_path4.default.dirname(outPath), { recursive: true });
|
|
696
|
+
await import_promises4.default.writeFile(outPath, `${JSON.stringify(artifact, null, 2)}
|
|
735
697
|
`, "utf8");
|
|
736
698
|
const publishDir = String(flags.publishDir ?? "").trim();
|
|
737
699
|
const published = publishDir ? await publishRuntimeEvidenceBundle({
|
|
738
|
-
publishRoot:
|
|
700
|
+
publishRoot: import_node_path4.default.resolve(projectRoot, publishDir),
|
|
739
701
|
deploymentId: String(flags.deployment),
|
|
740
702
|
userName: String(flags.user),
|
|
741
703
|
startTime,
|