@tradejs/cli 2.0.18 → 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 (41) hide show
  1. package/dist/cli.js +12810 -19565
  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/runtimeRedis.js +6 -57
  13. package/dist/lib/runtimeStrategyBacktest.js +2 -48
  14. package/dist/scripts/aiExport.js +1 -1607
  15. package/dist/scripts/aiPocketSearch.js +1 -1607
  16. package/dist/scripts/aiTrain.js +17 -1623
  17. package/dist/scripts/backtest.js +110 -1759
  18. package/dist/scripts/binanceMarketIngest.js +5 -4
  19. package/dist/scripts/candlesMigrateProvider.js +6 -5186
  20. package/dist/scripts/cleanupMarketContext.js +4 -3
  21. package/dist/scripts/continuity.js +4 -3
  22. package/dist/scripts/derivativesIngest.js +6 -4
  23. package/dist/scripts/derivativesIngestCoinalyzeAll.js +5 -4
  24. package/dist/scripts/doctor.js +2 -5184
  25. package/dist/scripts/hyperliquidWhaleBackfill.js +8 -8
  26. package/dist/scripts/hyperliquidWhaleIngest.js +4 -4
  27. package/dist/scripts/hyperliquidWhalesUpdate.js +1 -1
  28. package/dist/scripts/migration.js +3 -3
  29. package/dist/scripts/mlExport.js +1 -1607
  30. package/dist/scripts/replay.js +133 -1782
  31. package/dist/scripts/replayRunner.js +133 -1782
  32. package/dist/scripts/replayRuntimeEvidence.js +2 -48
  33. package/dist/scripts/researchAuto.js +3 -49
  34. package/dist/scripts/results.js +1 -1607
  35. package/dist/scripts/runtimeEvidence.js +2 -48
  36. package/dist/scripts/runtimeParity.js +121 -1746
  37. package/dist/scripts/signals.js +1057 -2647
  38. package/dist/scripts/signalsDaemon.js +1051 -2608
  39. package/dist/scripts/signalsSummary.js +4 -26
  40. package/dist/workers/testerWorker.js +2 -2
  41. package/package.json +11 -9
@@ -34,17 +34,7 @@ var import_redis3 = require("@tradejs/infra/redis");
34
34
  // src/lib/runtimeRedis.ts
35
35
  var import_redis = require("@tradejs/infra/redis");
36
36
  var import_time = require("@tradejs/core/time");
37
- var RESERVED_STRATEGY_NAMES = /* @__PURE__ */ new Set(["charts"]);
38
- var RESERVED_CONFIG_IDS = /* @__PURE__ */ new Set(["results"]);
39
- var resolveStrategyConfigIdentityByKey = (userName, key) => {
40
- const parts = key.split(":");
41
- if (parts.length !== 5) return null;
42
- const [users, keyUserName, strategiesKey, strategyName, configId] = parts;
43
- 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)) {
44
- return null;
45
- }
46
- return { strategyName, configId };
47
- };
37
+ var import_runtimeStrategyConfigs = require("@tradejs/infra/runtimeStrategyConfigs");
48
38
  var isRuntimeTradeRecord = (value) => {
49
39
  if (!value || typeof value !== "object") {
50
40
  return false;
@@ -52,42 +42,6 @@ var isRuntimeTradeRecord = (value) => {
52
42
  const record = value;
53
43
  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");
54
44
  };
55
- var resolveStrategyNameByConfigKey = (userName, key) => {
56
- return resolveStrategyConfigIdentityByKey(userName, key)?.strategyName ?? null;
57
- };
58
- var getRuntimeStrategyConfigKeys = async (userName) => {
59
- const keys = await (0, import_redis.getKeys)(`${import_redis.redisKeys.strategies(userName)}:`);
60
- return keys.filter((key) => resolveStrategyConfigIdentityByKey(userName, key)).sort((left, right) => left.localeCompare(right));
61
- };
62
- var loadRuntimeStrategyConfigs = async (userName, {
63
- onInvalidConfig
64
- } = {}) => {
65
- const configKeys = await getRuntimeStrategyConfigKeys(userName);
66
- const strategyConfigs = await Promise.all(
67
- configKeys.map(async (key) => {
68
- const strategyName = resolveStrategyNameByConfigKey(userName, key);
69
- const identity = resolveStrategyConfigIdentityByKey(userName, key);
70
- if (!strategyName || !identity) {
71
- return null;
72
- }
73
- const strategyConfig = await (0, import_redis.getData)(
74
- key,
75
- null
76
- );
77
- if (!strategyConfig || typeof strategyConfig !== "object" || Array.isArray(strategyConfig)) {
78
- onInvalidConfig?.(key);
79
- return null;
80
- }
81
- return {
82
- key,
83
- strategyName,
84
- configId: identity.configId,
85
- strategyConfig
86
- };
87
- })
88
- );
89
- return strategyConfigs.filter(Boolean);
90
- };
91
45
  var loadRuntimeTrades = async (userName, {
92
46
  startTime,
93
47
  endTime
@@ -356,7 +310,7 @@ var collectRuntimeDebugEvidence = async ({
356
310
  loadRuntimeSignals(userName, { startTime, endTime }),
357
311
  loadRuntimeSignalEvaluations(userName, { startTime, endTime }),
358
312
  loadRuntimeSignalEvaluationStatsBuckets(userName),
359
- loadRuntimeStrategyConfigs(userName)
313
+ (0, import_runtimeStrategyConfigs.loadRuntimeStrategyConfigs)(userName)
360
314
  ]);
361
315
  const tradesByOrderId = new Map(
362
316
  entryTrades.map((trade) => [trade.orderId, trade])
@@ -20,32 +20,22 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/lib/runtimeRedis.ts
21
21
  var runtimeRedis_exports = {};
22
22
  __export(runtimeRedis_exports, {
23
- getRuntimeStrategyConfigKeys: () => getRuntimeStrategyConfigKeys,
23
+ getRuntimeStrategyConfigKeys: () => import_runtimeStrategyConfigs.getRuntimeStrategyConfigKeys,
24
24
  isRuntimeStrategyEnabled: () => isRuntimeStrategyEnabled,
25
25
  isRuntimeTradeRecord: () => isRuntimeTradeRecord,
26
26
  loadRuntimeActiveTradeOrderIds: () => loadRuntimeActiveTradeOrderIds,
27
27
  loadRuntimeClosedTrades: () => loadRuntimeClosedTrades,
28
- loadRuntimeStrategyConfigs: () => loadRuntimeStrategyConfigs,
29
- loadRuntimeStrategyNames: () => loadRuntimeStrategyNames,
28
+ loadRuntimeStrategyConfigs: () => import_runtimeStrategyConfigs.loadRuntimeStrategyConfigs,
29
+ loadRuntimeStrategyNames: () => import_runtimeStrategyConfigs.loadRuntimeStrategyNames,
30
30
  loadRuntimeTrades: () => loadRuntimeTrades,
31
31
  loadStrategyResultSymbols: () => loadStrategyResultSymbols,
32
- resolveStrategyConfigIdentityByKey: () => resolveStrategyConfigIdentityByKey,
33
- resolveStrategyNameByConfigKey: () => resolveStrategyNameByConfigKey
32
+ resolveStrategyConfigIdentityByKey: () => import_runtimeStrategyConfigs.resolveStrategyConfigIdentityByKey,
33
+ resolveStrategyNameByConfigKey: () => import_runtimeStrategyConfigs.resolveStrategyNameByConfigKey
34
34
  });
35
35
  module.exports = __toCommonJS(runtimeRedis_exports);
36
36
  var import_redis = require("@tradejs/infra/redis");
37
37
  var import_time = require("@tradejs/core/time");
38
- var RESERVED_STRATEGY_NAMES = /* @__PURE__ */ new Set(["charts"]);
39
- var RESERVED_CONFIG_IDS = /* @__PURE__ */ new Set(["results"]);
40
- var resolveStrategyConfigIdentityByKey = (userName, key) => {
41
- const parts = key.split(":");
42
- if (parts.length !== 5) return null;
43
- const [users, keyUserName, strategiesKey, strategyName, configId] = parts;
44
- 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)) {
45
- return null;
46
- }
47
- return { strategyName, configId };
48
- };
38
+ var import_runtimeStrategyConfigs = require("@tradejs/infra/runtimeStrategyConfigs");
49
39
  var isRuntimeStrategyEnabled = (strategyConfig) => {
50
40
  const enabled = strategyConfig.ENABLE;
51
41
  return enabled !== false;
@@ -57,47 +47,6 @@ var isRuntimeTradeRecord = (value) => {
57
47
  const record = value;
58
48
  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");
59
49
  };
60
- var resolveStrategyNameByConfigKey = (userName, key) => {
61
- return resolveStrategyConfigIdentityByKey(userName, key)?.strategyName ?? null;
62
- };
63
- var getRuntimeStrategyConfigKeys = async (userName) => {
64
- const keys = await (0, import_redis.getKeys)(`${import_redis.redisKeys.strategies(userName)}:`);
65
- return keys.filter((key) => resolveStrategyConfigIdentityByKey(userName, key)).sort((left, right) => left.localeCompare(right));
66
- };
67
- var loadRuntimeStrategyNames = async (userName) => [
68
- ...new Set(
69
- (await getRuntimeStrategyConfigKeys(userName)).map((key) => resolveStrategyNameByConfigKey(userName, key)).filter((value) => Boolean(value))
70
- )
71
- ].sort((left, right) => left.localeCompare(right));
72
- var loadRuntimeStrategyConfigs = async (userName, {
73
- onInvalidConfig
74
- } = {}) => {
75
- const configKeys = await getRuntimeStrategyConfigKeys(userName);
76
- const strategyConfigs = await Promise.all(
77
- configKeys.map(async (key) => {
78
- const strategyName = resolveStrategyNameByConfigKey(userName, key);
79
- const identity = resolveStrategyConfigIdentityByKey(userName, key);
80
- if (!strategyName || !identity) {
81
- return null;
82
- }
83
- const strategyConfig = await (0, import_redis.getData)(
84
- key,
85
- null
86
- );
87
- if (!strategyConfig || typeof strategyConfig !== "object" || Array.isArray(strategyConfig)) {
88
- onInvalidConfig?.(key);
89
- return null;
90
- }
91
- return {
92
- key,
93
- strategyName,
94
- configId: identity.configId,
95
- strategyConfig
96
- };
97
- })
98
- );
99
- return strategyConfigs.filter(Boolean);
100
- };
101
50
  var loadRuntimeTrades = async (userName, {
102
51
  startTime,
103
52
  endTime
@@ -40,57 +40,11 @@ var import_chalk = __toESM(require("chalk"));
40
40
  // src/lib/runtimeRedis.ts
41
41
  var import_redis = require("@tradejs/infra/redis");
42
42
  var import_time = require("@tradejs/core/time");
43
- var RESERVED_STRATEGY_NAMES = /* @__PURE__ */ new Set(["charts"]);
44
- var RESERVED_CONFIG_IDS = /* @__PURE__ */ new Set(["results"]);
45
- var resolveStrategyConfigIdentityByKey = (userName, key) => {
46
- const parts = key.split(":");
47
- if (parts.length !== 5) return null;
48
- const [users, keyUserName, strategiesKey, strategyName, configId] = parts;
49
- 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)) {
50
- return null;
51
- }
52
- return { strategyName, configId };
53
- };
43
+ var import_runtimeStrategyConfigs = require("@tradejs/infra/runtimeStrategyConfigs");
54
44
  var isRuntimeStrategyEnabled = (strategyConfig) => {
55
45
  const enabled = strategyConfig.ENABLE;
56
46
  return enabled !== false;
57
47
  };
58
- var resolveStrategyNameByConfigKey = (userName, key) => {
59
- return resolveStrategyConfigIdentityByKey(userName, key)?.strategyName ?? null;
60
- };
61
- var getRuntimeStrategyConfigKeys = async (userName) => {
62
- const keys = await (0, import_redis.getKeys)(`${import_redis.redisKeys.strategies(userName)}:`);
63
- return keys.filter((key) => resolveStrategyConfigIdentityByKey(userName, key)).sort((left, right) => left.localeCompare(right));
64
- };
65
- var loadRuntimeStrategyConfigs = async (userName, {
66
- onInvalidConfig
67
- } = {}) => {
68
- const configKeys = await getRuntimeStrategyConfigKeys(userName);
69
- const strategyConfigs = await Promise.all(
70
- configKeys.map(async (key) => {
71
- const strategyName = resolveStrategyNameByConfigKey(userName, key);
72
- const identity = resolveStrategyConfigIdentityByKey(userName, key);
73
- if (!strategyName || !identity) {
74
- return null;
75
- }
76
- const strategyConfig = await (0, import_redis.getData)(
77
- key,
78
- null
79
- );
80
- if (!strategyConfig || typeof strategyConfig !== "object" || Array.isArray(strategyConfig)) {
81
- onInvalidConfig?.(key);
82
- return null;
83
- }
84
- return {
85
- key,
86
- strategyName,
87
- configId: identity.configId,
88
- strategyConfig
89
- };
90
- })
91
- );
92
- return strategyConfigs.filter(Boolean);
93
- };
94
48
 
95
49
  // src/lib/runtimeStrategyBacktest.ts
96
50
  var BACKTEST_CLI_RUNTIME_CONFIG_KEYS = /* @__PURE__ */ new Set([
@@ -105,7 +59,7 @@ var toStrategyConfigGrid = (strategyConfig) => Object.fromEntries(
105
59
  Object.entries(strategyConfig).filter(([key]) => !BACKTEST_CLI_RUNTIME_CONFIG_KEYS.has(key)).map(([key, value]) => [key, [value]])
106
60
  );
107
61
  var loadRuntimeStrategyBacktestConfigs = async (userName) => {
108
- const configs = await loadRuntimeStrategyConfigs(userName, {
62
+ const configs = await (0, import_runtimeStrategyConfigs.loadRuntimeStrategyConfigs)(userName, {
109
63
  onInvalidConfig: (key) => {
110
64
  console.log(import_chalk.default.yellow(`Skip invalid runtime strategy config: ${key}`));
111
65
  }