@tradejs/node 3.1.28-beta.252 → 3.1.28-beta.253
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/runtimeDashboard.js +45 -14
- package/dist/runtimeDashboard.mjs +45 -14
- package/package.json +5 -5
package/dist/runtimeDashboard.js
CHANGED
|
@@ -35,6 +35,7 @@ __export(runtimeDashboard_exports, {
|
|
|
35
35
|
module.exports = __toCommonJS(runtimeDashboard_exports);
|
|
36
36
|
var import_time4 = require("@tradejs/core/time");
|
|
37
37
|
var import_logger14 = require("@tradejs/infra/logger");
|
|
38
|
+
var import_runtimeDeploymentEvents = require("@tradejs/infra/runtimeDeploymentEvents");
|
|
38
39
|
var import_tradingAccounts3 = require("@tradejs/infra/tradingAccounts");
|
|
39
40
|
var import_redis4 = require("@tradejs/infra/redis");
|
|
40
41
|
|
|
@@ -8264,22 +8265,34 @@ var loadRuntimeTrades = async (userName, {
|
|
|
8264
8265
|
}
|
|
8265
8266
|
return [...dedupedTrades.values()].filter(filterByWindow).sort((left, right) => left.entryTimestamp - right.entryTimestamp);
|
|
8266
8267
|
};
|
|
8267
|
-
var
|
|
8268
|
-
|
|
8268
|
+
var buildStrategyRevisionChanges = ({
|
|
8269
|
+
events,
|
|
8270
|
+
strategyName,
|
|
8271
|
+
startTime,
|
|
8272
|
+
endTime
|
|
8273
|
+
}) => {
|
|
8269
8274
|
const changes = [];
|
|
8270
8275
|
let previousRevision;
|
|
8271
|
-
|
|
8272
|
-
|
|
8276
|
+
let wasPresent = false;
|
|
8277
|
+
for (const event of [...events].sort(
|
|
8278
|
+
(left, right) => left.observedAt - right.observedAt || left.eventId.localeCompare(right.eventId)
|
|
8273
8279
|
)) {
|
|
8274
|
-
const
|
|
8275
|
-
|
|
8276
|
-
|
|
8280
|
+
const strategy = event.strategies.find(
|
|
8281
|
+
(item) => item.strategyName === strategyName
|
|
8282
|
+
);
|
|
8283
|
+
if (!strategy) {
|
|
8284
|
+
previousRevision = void 0;
|
|
8285
|
+
wasPresent = false;
|
|
8286
|
+
continue;
|
|
8287
|
+
}
|
|
8288
|
+
if ((!wasPresent || strategy.strategyRevision !== previousRevision) && event.observedAt >= startTime && event.observedAt <= endTime) {
|
|
8277
8289
|
changes.push({
|
|
8278
|
-
timestamp:
|
|
8279
|
-
strategyRevision
|
|
8290
|
+
timestamp: event.observedAt,
|
|
8291
|
+
strategyRevision: strategy.strategyRevision
|
|
8280
8292
|
});
|
|
8281
8293
|
}
|
|
8282
|
-
previousRevision = strategyRevision;
|
|
8294
|
+
previousRevision = strategy.strategyRevision;
|
|
8295
|
+
wasPresent = true;
|
|
8283
8296
|
}
|
|
8284
8297
|
return changes;
|
|
8285
8298
|
};
|
|
@@ -8530,8 +8543,8 @@ var loadRuntimeDashboard = async ({
|
|
|
8530
8543
|
const accountsById = new Map(
|
|
8531
8544
|
tradingAccounts.map((account) => [account.id, account])
|
|
8532
8545
|
);
|
|
8533
|
-
const
|
|
8534
|
-
|
|
8546
|
+
const [resolvedStrategyEntries, deploymentEventEntries] = await Promise.all([
|
|
8547
|
+
Promise.all(
|
|
8535
8548
|
runtimeDeployments.map(
|
|
8536
8549
|
async (deployment) => [
|
|
8537
8550
|
deployment.id,
|
|
@@ -8542,8 +8555,21 @@ var loadRuntimeDashboard = async ({
|
|
|
8542
8555
|
})
|
|
8543
8556
|
]
|
|
8544
8557
|
)
|
|
8558
|
+
),
|
|
8559
|
+
Promise.all(
|
|
8560
|
+
runtimeDeployments.map(
|
|
8561
|
+
async (deployment) => [
|
|
8562
|
+
deployment.id,
|
|
8563
|
+
await (0, import_runtimeDeploymentEvents.loadRuntimeDeploymentCompositionEvents)(
|
|
8564
|
+
userName,
|
|
8565
|
+
deployment.id
|
|
8566
|
+
)
|
|
8567
|
+
]
|
|
8568
|
+
)
|
|
8545
8569
|
)
|
|
8546
|
-
);
|
|
8570
|
+
]);
|
|
8571
|
+
const resolvedStrategiesByDeployment = new Map(resolvedStrategyEntries);
|
|
8572
|
+
const deploymentEventsById = new Map(deploymentEventEntries);
|
|
8547
8573
|
const identityByKey = /* @__PURE__ */ new Map();
|
|
8548
8574
|
for (const deployment of runtimeDeployments) {
|
|
8549
8575
|
for (const resolvedStrategy of resolvedStrategiesByDeployment.get(
|
|
@@ -8630,7 +8656,12 @@ var loadRuntimeDashboard = async ({
|
|
|
8630
8656
|
stat: analytics.stat,
|
|
8631
8657
|
summary: analytics.summary,
|
|
8632
8658
|
orderLog: analytics.orderLog,
|
|
8633
|
-
revisionChanges: buildStrategyRevisionChanges(
|
|
8659
|
+
revisionChanges: buildStrategyRevisionChanges({
|
|
8660
|
+
events: deploymentEventsById.get(identity.deploymentId) ?? [],
|
|
8661
|
+
strategyName,
|
|
8662
|
+
startTime,
|
|
8663
|
+
endTime
|
|
8664
|
+
}),
|
|
8634
8665
|
recentTrades: strategyTrades.slice(0, 8).map((trade) => (0, import_runtimeTrades3.toRuntimeTradeView)(trade, endTime)),
|
|
8635
8666
|
orders
|
|
8636
8667
|
};
|
|
@@ -17,6 +17,7 @@ import "./chunk-Y6FXYEAI.mjs";
|
|
|
17
17
|
// src/runtimeDashboard.ts
|
|
18
18
|
import { getRuntimeStorageDayKeys } from "@tradejs/core/time";
|
|
19
19
|
import { logger } from "@tradejs/infra/logger";
|
|
20
|
+
import { loadRuntimeDeploymentCompositionEvents } from "@tradejs/infra/runtimeDeploymentEvents";
|
|
20
21
|
import {
|
|
21
22
|
listTradingAccounts,
|
|
22
23
|
resolveTradingAccount
|
|
@@ -367,22 +368,34 @@ var loadRuntimeTrades = async (userName, {
|
|
|
367
368
|
}
|
|
368
369
|
return [...dedupedTrades.values()].filter(filterByWindow).sort((left, right) => left.entryTimestamp - right.entryTimestamp);
|
|
369
370
|
};
|
|
370
|
-
var
|
|
371
|
-
|
|
371
|
+
var buildStrategyRevisionChanges = ({
|
|
372
|
+
events,
|
|
373
|
+
strategyName,
|
|
374
|
+
startTime,
|
|
375
|
+
endTime
|
|
376
|
+
}) => {
|
|
372
377
|
const changes = [];
|
|
373
378
|
let previousRevision;
|
|
374
|
-
|
|
375
|
-
|
|
379
|
+
let wasPresent = false;
|
|
380
|
+
for (const event of [...events].sort(
|
|
381
|
+
(left, right) => left.observedAt - right.observedAt || left.eventId.localeCompare(right.eventId)
|
|
376
382
|
)) {
|
|
377
|
-
const
|
|
378
|
-
|
|
379
|
-
|
|
383
|
+
const strategy = event.strategies.find(
|
|
384
|
+
(item) => item.strategyName === strategyName
|
|
385
|
+
);
|
|
386
|
+
if (!strategy) {
|
|
387
|
+
previousRevision = void 0;
|
|
388
|
+
wasPresent = false;
|
|
389
|
+
continue;
|
|
390
|
+
}
|
|
391
|
+
if ((!wasPresent || strategy.strategyRevision !== previousRevision) && event.observedAt >= startTime && event.observedAt <= endTime) {
|
|
380
392
|
changes.push({
|
|
381
|
-
timestamp:
|
|
382
|
-
strategyRevision
|
|
393
|
+
timestamp: event.observedAt,
|
|
394
|
+
strategyRevision: strategy.strategyRevision
|
|
383
395
|
});
|
|
384
396
|
}
|
|
385
|
-
previousRevision = strategyRevision;
|
|
397
|
+
previousRevision = strategy.strategyRevision;
|
|
398
|
+
wasPresent = true;
|
|
386
399
|
}
|
|
387
400
|
return changes;
|
|
388
401
|
};
|
|
@@ -633,8 +646,8 @@ var loadRuntimeDashboard = async ({
|
|
|
633
646
|
const accountsById = new Map(
|
|
634
647
|
tradingAccounts.map((account) => [account.id, account])
|
|
635
648
|
);
|
|
636
|
-
const
|
|
637
|
-
|
|
649
|
+
const [resolvedStrategyEntries, deploymentEventEntries] = await Promise.all([
|
|
650
|
+
Promise.all(
|
|
638
651
|
runtimeDeployments.map(
|
|
639
652
|
async (deployment) => [
|
|
640
653
|
deployment.id,
|
|
@@ -645,8 +658,21 @@ var loadRuntimeDashboard = async ({
|
|
|
645
658
|
})
|
|
646
659
|
]
|
|
647
660
|
)
|
|
661
|
+
),
|
|
662
|
+
Promise.all(
|
|
663
|
+
runtimeDeployments.map(
|
|
664
|
+
async (deployment) => [
|
|
665
|
+
deployment.id,
|
|
666
|
+
await loadRuntimeDeploymentCompositionEvents(
|
|
667
|
+
userName,
|
|
668
|
+
deployment.id
|
|
669
|
+
)
|
|
670
|
+
]
|
|
671
|
+
)
|
|
648
672
|
)
|
|
649
|
-
);
|
|
673
|
+
]);
|
|
674
|
+
const resolvedStrategiesByDeployment = new Map(resolvedStrategyEntries);
|
|
675
|
+
const deploymentEventsById = new Map(deploymentEventEntries);
|
|
650
676
|
const identityByKey = /* @__PURE__ */ new Map();
|
|
651
677
|
for (const deployment of runtimeDeployments) {
|
|
652
678
|
for (const resolvedStrategy of resolvedStrategiesByDeployment.get(
|
|
@@ -733,7 +759,12 @@ var loadRuntimeDashboard = async ({
|
|
|
733
759
|
stat: analytics.stat,
|
|
734
760
|
summary: analytics.summary,
|
|
735
761
|
orderLog: analytics.orderLog,
|
|
736
|
-
revisionChanges: buildStrategyRevisionChanges(
|
|
762
|
+
revisionChanges: buildStrategyRevisionChanges({
|
|
763
|
+
events: deploymentEventsById.get(identity.deploymentId) ?? [],
|
|
764
|
+
strategyName,
|
|
765
|
+
startTime,
|
|
766
|
+
endTime
|
|
767
|
+
}),
|
|
737
768
|
recentTrades: strategyTrades.slice(0, 8).map((trade) => toRuntimeTradeView(trade, endTime)),
|
|
738
769
|
orders
|
|
739
770
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tradejs/node",
|
|
3
|
-
"version": "3.1.28-beta.
|
|
3
|
+
"version": "3.1.28-beta.253",
|
|
4
4
|
"description": "Node-only runtime for the TradeJS TypeScript framework: strategies, backtests, Pine strategy loading, and plugin registries.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"tradejs",
|
|
@@ -89,9 +89,9 @@
|
|
|
89
89
|
"dependencies": {
|
|
90
90
|
"@langchain/core": "^1.2.3",
|
|
91
91
|
"@langchain/openai": "^1.5.5",
|
|
92
|
-
"@tradejs/core": "^3.1.28-beta.
|
|
93
|
-
"@tradejs/infra": "^3.1.28-beta.
|
|
94
|
-
"@tradejs/types": "^3.1.28-beta.
|
|
92
|
+
"@tradejs/core": "^3.1.28-beta.253",
|
|
93
|
+
"@tradejs/infra": "^3.1.28-beta.253",
|
|
94
|
+
"@tradejs/types": "^3.1.28-beta.253",
|
|
95
95
|
"@types/node": "^24",
|
|
96
96
|
"chalk": "4.1.2",
|
|
97
97
|
"ioredis": "5.11.1",
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"typescript": "^5.9"
|
|
105
105
|
},
|
|
106
106
|
"devDependencies": {
|
|
107
|
-
"@tradejs/indicators": "^3.1.28-beta.
|
|
107
|
+
"@tradejs/indicators": "^3.1.28-beta.253",
|
|
108
108
|
"@tradejs/strategy-adaptive-momentum-ribbon": "3.0.2",
|
|
109
109
|
"@tradejs/strategy-hyperliquid-consensus": "3.0.2",
|
|
110
110
|
"@tradejs/strategy-kit": "3.0.4",
|