@tradejs/node 3.1.29-beta.290 → 3.1.29-beta.291
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/ai.js +109 -48
- package/dist/ai.mjs +1 -1
- package/dist/backtest.js +2491 -1871
- package/dist/backtest.mjs +3 -2
- package/dist/{chunk-PB2KHBGH.mjs → chunk-HRON2EAI.mjs} +413 -22
- package/dist/{chunk-UL5Z46JL.mjs → chunk-PYJWXAYR.mjs} +97 -30
- package/dist/chunk-UUNEWAT4.mjs +193 -0
- package/dist/{chunk-BO42QWAB.mjs → chunk-W6PPAADK.mjs} +1 -1
- package/dist/cli.js +834 -773
- package/dist/cli.mjs +1 -1
- package/dist/diagnostics.js +2511 -1891
- package/dist/diagnostics.mjs +4 -3
- package/dist/mcp.d.mts +1 -1
- package/dist/mcp.d.ts +1 -1
- package/dist/mcp.js +2537 -1917
- package/dist/mcp.mjs +4 -3
- package/dist/portfolio.d.mts +28 -0
- package/dist/portfolio.d.ts +28 -0
- package/dist/portfolio.js +210 -0
- package/dist/portfolio.mjs +9 -0
- package/dist/registry.js +2429 -1809
- package/dist/registry.mjs +3 -2
- package/dist/runtimeDashboard.js +2236 -1614
- package/dist/runtimeDashboard.mjs +4 -3
- package/dist/runtimeStrategies.js +2052 -1432
- package/dist/runtimeStrategies.mjs +4 -3
- package/dist/strategies.d.mts +3 -1
- package/dist/strategies.d.ts +3 -1
- package/dist/strategies.js +2085 -1465
- package/dist/strategies.mjs +3 -2
- package/package.json +10 -5
package/dist/ai.js
CHANGED
|
@@ -50,6 +50,28 @@ module.exports = __toCommonJS(ai_exports);
|
|
|
50
50
|
var import_aiLanguages2 = require("@tradejs/core/aiLanguages");
|
|
51
51
|
var import_redis = require("@tradejs/infra/redis");
|
|
52
52
|
|
|
53
|
+
// src/strategyAdapters/ai.ts
|
|
54
|
+
var import_indicators2 = require("@tradejs/core/indicators");
|
|
55
|
+
|
|
56
|
+
// src/tradejsConfig.ts
|
|
57
|
+
var import_path = __toESM(require("path"));
|
|
58
|
+
var import_config = require("@tradejs/core/config");
|
|
59
|
+
var import_logger = require("@tradejs/infra/logger");
|
|
60
|
+
var getTradejsProjectCwd = (cwd) => {
|
|
61
|
+
const explicit = String(cwd ?? "").trim();
|
|
62
|
+
if (explicit) {
|
|
63
|
+
return import_path.default.resolve(explicit);
|
|
64
|
+
}
|
|
65
|
+
const fromEnv = String(process.env.PROJECT_CWD || "").trim();
|
|
66
|
+
if (fromEnv) {
|
|
67
|
+
return import_path.default.resolve(fromEnv);
|
|
68
|
+
}
|
|
69
|
+
return process.cwd();
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
// src/strategyAdapters/ai.ts
|
|
73
|
+
var import_aiFeatures = require("@tradejs/core/aiFeatures");
|
|
74
|
+
|
|
53
75
|
// src/aiShared.ts
|
|
54
76
|
var MAX_AI_SERIES_POINTS = 5;
|
|
55
77
|
var COMPACT_INDICATORS_SNAPSHOT_SYMBOL = /* @__PURE__ */ Symbol.for(
|
|
@@ -273,37 +295,44 @@ var buildMarketBreadthsContextFromSignal = (signal) => {
|
|
|
273
295
|
top100: build("top100")
|
|
274
296
|
};
|
|
275
297
|
};
|
|
298
|
+
var buildTargetVsReference = (signal, asset) => {
|
|
299
|
+
const base = toRecord(signal.additionalIndicators?.baseContext);
|
|
300
|
+
const relative = toRecord(base?.relative);
|
|
301
|
+
const target = toRecord(relative?.[`targetVs${asset}`]);
|
|
302
|
+
return {
|
|
303
|
+
source: target ? String(target.source ?? "") : null,
|
|
304
|
+
available: Boolean(target),
|
|
305
|
+
ratioReturn1h: toFiniteNumber(target?.ratioReturn1h),
|
|
306
|
+
ratioReturn4h: toFiniteNumber(target?.ratioReturn4h),
|
|
307
|
+
ratioReturn24h: toFiniteNumber(target?.ratioReturn24h),
|
|
308
|
+
alpha1h: toFiniteNumber(target?.[`alphaVs${asset}1h`]),
|
|
309
|
+
alpha4h: toFiniteNumber(target?.[`alphaVs${asset}4h`]),
|
|
310
|
+
alpha24h: toFiniteNumber(target?.[`alphaVs${asset}24h`]),
|
|
311
|
+
beta: toFiniteNumber(target?.[`betaTo${asset}20`]),
|
|
312
|
+
correlation: toFiniteNumber(target?.[`correlationTo${asset}20`]),
|
|
313
|
+
ratioTrend: typeof target?.ratioTrend === "string" ? target.ratioTrend : null
|
|
314
|
+
};
|
|
315
|
+
};
|
|
276
316
|
var buildTargetVsBtcContextFromSignal = (signal) => {
|
|
277
|
-
const
|
|
278
|
-
const relative = toRecord(baseContext?.relative);
|
|
279
|
-
const targetVsBtc = toRecord(relative?.targetVsBtc);
|
|
280
|
-
if (!targetVsBtc) {
|
|
281
|
-
return {
|
|
282
|
-
source: null,
|
|
283
|
-
available: false,
|
|
284
|
-
ratioReturn1h: null,
|
|
285
|
-
ratioReturn4h: null,
|
|
286
|
-
ratioReturn24h: null,
|
|
287
|
-
alphaVsBtc1h: null,
|
|
288
|
-
alphaVsBtc4h: null,
|
|
289
|
-
alphaVsBtc24h: null,
|
|
290
|
-
betaToBtc20: null,
|
|
291
|
-
correlationToBtc20: null,
|
|
292
|
-
ratioTrend: null
|
|
293
|
-
};
|
|
294
|
-
}
|
|
317
|
+
const { alpha1h, alpha4h, alpha24h, beta, correlation, ...shared } = buildTargetVsReference(signal, "Btc");
|
|
295
318
|
return {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
319
|
+
...shared,
|
|
320
|
+
alphaVsBtc1h: alpha1h,
|
|
321
|
+
alphaVsBtc4h: alpha4h,
|
|
322
|
+
alphaVsBtc24h: alpha24h,
|
|
323
|
+
betaToBtc20: beta,
|
|
324
|
+
correlationToBtc20: correlation
|
|
325
|
+
};
|
|
326
|
+
};
|
|
327
|
+
var buildTargetVsEthContextFromSignal = (signal) => {
|
|
328
|
+
const { alpha1h, alpha4h, alpha24h, beta, correlation, ...shared } = buildTargetVsReference(signal, "Eth");
|
|
329
|
+
return {
|
|
330
|
+
...shared,
|
|
331
|
+
alphaVsEth1h: alpha1h,
|
|
332
|
+
alphaVsEth4h: alpha4h,
|
|
333
|
+
alphaVsEth24h: alpha24h,
|
|
334
|
+
betaToEth20: beta,
|
|
335
|
+
correlationToEth20: correlation
|
|
307
336
|
};
|
|
308
337
|
};
|
|
309
338
|
var buildBtcAltRegimeContextFromSignal = (signal) => {
|
|
@@ -612,6 +641,7 @@ var buildAiMarketContext = (signal) => ({
|
|
|
612
641
|
marketBreadth: buildMarketBreadthContextFromSignal(signal),
|
|
613
642
|
marketBreadths: buildMarketBreadthsContextFromSignal(signal),
|
|
614
643
|
targetVsBtc: buildTargetVsBtcContextFromSignal(signal),
|
|
644
|
+
targetVsEth: buildTargetVsEthContextFromSignal(signal),
|
|
615
645
|
btcAltRegime: buildBtcAltRegimeContextFromSignal(signal),
|
|
616
646
|
cmcGlobal: buildCmcGlobalContextFromSignal(signal),
|
|
617
647
|
cmcReferenceAssets: buildCmcReferenceAssetsContextFromSignal(signal),
|
|
@@ -624,24 +654,6 @@ var buildAiMarketContext = (signal) => ({
|
|
|
624
654
|
|
|
625
655
|
// src/strategy/manifests.ts
|
|
626
656
|
var import_indicators = require("@tradejs/core/indicators");
|
|
627
|
-
|
|
628
|
-
// src/tradejsConfig.ts
|
|
629
|
-
var import_path = __toESM(require("path"));
|
|
630
|
-
var import_config = require("@tradejs/core/config");
|
|
631
|
-
var import_logger = require("@tradejs/infra/logger");
|
|
632
|
-
var getTradejsProjectCwd = (cwd) => {
|
|
633
|
-
const explicit = String(cwd ?? "").trim();
|
|
634
|
-
if (explicit) {
|
|
635
|
-
return import_path.default.resolve(explicit);
|
|
636
|
-
}
|
|
637
|
-
const fromEnv = String(process.env.PROJECT_CWD || "").trim();
|
|
638
|
-
if (fromEnv) {
|
|
639
|
-
return import_path.default.resolve(fromEnv);
|
|
640
|
-
}
|
|
641
|
-
return process.cwd();
|
|
642
|
-
};
|
|
643
|
-
|
|
644
|
-
// src/strategy/manifests.ts
|
|
645
657
|
var SHARED_STRATEGY_REGISTRY_KEY = "__tradejsNodeSharedStrategyRegistryV1__";
|
|
646
658
|
var sharedRegistryScope = globalThis;
|
|
647
659
|
var sharedStrategyRegistry = sharedRegistryScope[SHARED_STRATEGY_REGISTRY_KEY] ?? (sharedRegistryScope[SHARED_STRATEGY_REGISTRY_KEY] = {
|
|
@@ -732,12 +744,61 @@ var buildBaseAiPayload = (signal) => {
|
|
|
732
744
|
};
|
|
733
745
|
};
|
|
734
746
|
var defaultAiAdapter = {};
|
|
747
|
+
var tickerProfileFeatureIds = new Set(
|
|
748
|
+
import_aiFeatures.TICKER_PROFILE_AI_FEATURES.map(({ id }) => id)
|
|
749
|
+
);
|
|
735
750
|
var getStrategyAiAdapter = (strategy, profileId) => getStrategyProfileAiAdapter(getStrategyManifest(strategy), profileId) ?? defaultAiAdapter;
|
|
736
751
|
var getSignalAiAdapter = (signal) => getStrategyAiAdapter(signal.strategy, signal.policyProfileId);
|
|
737
752
|
var buildAiPayloadByStrategy = (signal) => {
|
|
738
753
|
const basePayload = buildBaseAiPayload(signal);
|
|
739
754
|
const adapter = getSignalAiAdapter(signal);
|
|
740
|
-
|
|
755
|
+
const payload = adapter.buildPayload?.({ signal, basePayload }) ?? basePayload;
|
|
756
|
+
const custom = getStrategyManifest(signal.strategy)?.aiFeatures ?? [];
|
|
757
|
+
const frozen = signal.aiFeatureReplay?.snapshot;
|
|
758
|
+
if (frozen) (0, import_aiFeatures.validateAiFeatureSnapshot)(frozen);
|
|
759
|
+
const tickerProfile = signal.additionalIndicators?.tickerProfile ?? signal.additionalIndicators?.baseContext?.tickerProfile;
|
|
760
|
+
const hasProfile = Boolean(
|
|
761
|
+
tickerProfile || frozen?.definitions.some(({ id }) => tickerProfileFeatureIds.has(id))
|
|
762
|
+
);
|
|
763
|
+
const indicatorFeatures = (0, import_indicators2.getRegisteredIndicatorEntries)(
|
|
764
|
+
getTradejsProjectCwd()
|
|
765
|
+
).flatMap((entry) => entry.indicator.enabled ? entry.aiFeatures ?? [] : []);
|
|
766
|
+
const hasPortfolio = Boolean(
|
|
767
|
+
signal.additionalIndicators?.portfolioContext || frozen?.definitions.some(
|
|
768
|
+
({ id }) => import_aiFeatures.PORTFOLIO_AI_FEATURES.some((d) => d.id === id)
|
|
769
|
+
)
|
|
770
|
+
);
|
|
771
|
+
const definitions = [
|
|
772
|
+
...hasPortfolio ? import_aiFeatures.PORTFOLIO_AI_FEATURES : [],
|
|
773
|
+
...hasProfile ? import_aiFeatures.TICKER_PROFILE_AI_FEATURES : [],
|
|
774
|
+
...indicatorFeatures,
|
|
775
|
+
...custom
|
|
776
|
+
];
|
|
777
|
+
if (!definitions.length && !signal.aiFeatureReplay?.snapshot) return payload;
|
|
778
|
+
(0, import_aiFeatures.validateAiFeatureDefinitions)(definitions);
|
|
779
|
+
if (signal.aiFeatureReplay && !frozen) {
|
|
780
|
+
throw new Error(
|
|
781
|
+
"Dataset has no frozen AI features; regenerate the decision-time export"
|
|
782
|
+
);
|
|
783
|
+
}
|
|
784
|
+
if (frozen && JSON.stringify(frozen.definitions) !== JSON.stringify(definitions)) {
|
|
785
|
+
throw new Error(
|
|
786
|
+
"AI feature definition changed; regenerate the decision-time export"
|
|
787
|
+
);
|
|
788
|
+
}
|
|
789
|
+
return {
|
|
790
|
+
...payload,
|
|
791
|
+
featureSnapshot: frozen ?? (0, import_aiFeatures.projectAiFeatures)(definitions, {
|
|
792
|
+
signal: tickerProfile ? {
|
|
793
|
+
...signal,
|
|
794
|
+
additionalIndicators: {
|
|
795
|
+
...signal.additionalIndicators,
|
|
796
|
+
tickerProfile
|
|
797
|
+
}
|
|
798
|
+
} : signal,
|
|
799
|
+
payload
|
|
800
|
+
})
|
|
801
|
+
};
|
|
741
802
|
};
|
|
742
803
|
var buildAiSystemPromptAddonByStrategy = (signal) => getSignalAiAdapter(signal).buildSystemPromptAddon?.({ signal }) ?? "";
|
|
743
804
|
var buildAiHumanPromptAddonByStrategy = (signal, payload) => getSignalAiAdapter(signal).buildHumanPromptAddon?.({
|