@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.
Files changed (42) hide show
  1. package/dist/cli.js +6122 -12724
  2. package/dist/lib/aiExport.js +1 -1607
  3. package/dist/lib/binanceMarketContextBackfill.js +7 -6
  4. package/dist/lib/coinMarketCapContextBackfill.js +19 -18
  5. package/dist/lib/derivativesContextBackfill.js +10 -9
  6. package/dist/lib/hyperliquidWhaleBackfill.js +8 -8
  7. package/dist/lib/hyperliquidWhaleStream.js +4 -4
  8. package/dist/lib/marketContextPrepare.js +83 -1686
  9. package/dist/lib/runEnvironment.js +14 -1666
  10. package/dist/lib/runFormatting.js +1 -1607
  11. package/dist/lib/runtimeDebugEvidence.js +2 -48
  12. package/dist/lib/runtimeEvidenceArtifacts.js +13 -1
  13. package/dist/lib/runtimeRedis.js +6 -57
  14. package/dist/lib/runtimeStrategyBacktest.js +2 -48
  15. package/dist/scripts/aiExport.js +1 -1607
  16. package/dist/scripts/aiPocketSearch.js +1 -1607
  17. package/dist/scripts/aiTrain.js +17 -1623
  18. package/dist/scripts/backtest.js +110 -1759
  19. package/dist/scripts/binanceMarketIngest.js +5 -4
  20. package/dist/scripts/candlesMigrateProvider.js +6 -5186
  21. package/dist/scripts/cleanupMarketContext.js +4 -3
  22. package/dist/scripts/continuity.js +4 -3
  23. package/dist/scripts/derivativesIngest.js +6 -4
  24. package/dist/scripts/derivativesIngestCoinalyzeAll.js +5 -4
  25. package/dist/scripts/doctor.js +2 -5184
  26. package/dist/scripts/hyperliquidWhaleBackfill.js +8 -8
  27. package/dist/scripts/hyperliquidWhaleIngest.js +4 -4
  28. package/dist/scripts/hyperliquidWhalesUpdate.js +1 -1
  29. package/dist/scripts/migration.js +3 -3
  30. package/dist/scripts/mlExport.js +1 -1607
  31. package/dist/scripts/replay.js +291 -1807
  32. package/dist/scripts/replayRunner.js +291 -1807
  33. package/dist/scripts/replayRuntimeEvidence.js +2 -48
  34. package/dist/scripts/researchAuto.js +3 -49
  35. package/dist/scripts/results.js +1 -1607
  36. package/dist/scripts/runtimeEvidence.js +15 -49
  37. package/dist/scripts/runtimeParity.js +121 -1746
  38. package/dist/scripts/signals.js +1057 -2647
  39. package/dist/scripts/signalsDaemon.js +1051 -2608
  40. package/dist/scripts/signalsSummary.js +4 -26
  41. package/dist/workers/testerWorker.js +2 -2
  42. 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 RESERVED_STRATEGY_NAMES = /* @__PURE__ */ new Set(["charts"]);
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 RESERVED_STRATEGY_NAMES = /* @__PURE__ */ new Set(["charts"]);
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) => {