@tradejs/cli 3.1.27 → 3.1.28-beta.252
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 +24041 -23180
- package/dist/lib/aiExport.js +1 -0
- package/dist/lib/coreResearch.js +42 -3
- package/dist/scripts/aiExport.js +1 -0
- package/dist/scripts/backtest.js +35 -6
- package/dist/scripts/coreResearch.js +42 -3
- package/dist/scripts/mlExport.js +1 -0
- package/dist/scripts/replay.js +808 -110
- package/dist/scripts/replayRunner.js +808 -110
- package/dist/scripts/signals.js +104 -27
- package/dist/scripts/signalsDaemon.js +104 -27
- package/package.json +7 -7
package/dist/scripts/signals.js
CHANGED
|
@@ -4614,6 +4614,7 @@ var createSignalsTickerEvaluator = ({
|
|
|
4614
4614
|
primaryEthClosedData,
|
|
4615
4615
|
primaryEthByTimestamp,
|
|
4616
4616
|
runtimeStrategies,
|
|
4617
|
+
matchesStrategySymbol,
|
|
4617
4618
|
strategyStats,
|
|
4618
4619
|
runtimeCloseNotifications,
|
|
4619
4620
|
lifecycle,
|
|
@@ -4654,6 +4655,9 @@ var createSignalsTickerEvaluator = ({
|
|
|
4654
4655
|
);
|
|
4655
4656
|
const strategySignals = [];
|
|
4656
4657
|
for (const runtimeStrategy of runtimeStrategies) {
|
|
4658
|
+
if (matchesStrategySymbol && !matchesStrategySymbol(runtimeStrategy, symbol)) {
|
|
4659
|
+
continue;
|
|
4660
|
+
}
|
|
4657
4661
|
const {
|
|
4658
4662
|
strategyName,
|
|
4659
4663
|
strategyRevision,
|
|
@@ -4858,6 +4862,28 @@ var createSignalsTickerEvaluator = ({
|
|
|
4858
4862
|
|
|
4859
4863
|
// src/lib/signals/configuredScopes.ts
|
|
4860
4864
|
var sorted = (values) => values ? [...values].sort() : [];
|
|
4865
|
+
var normalizeSymbol = (value) => value.trim().toUpperCase();
|
|
4866
|
+
var isActiveTradeInScope = ({
|
|
4867
|
+
trade,
|
|
4868
|
+
deploymentId,
|
|
4869
|
+
universe,
|
|
4870
|
+
accountId,
|
|
4871
|
+
interval
|
|
4872
|
+
}) => trade.status === "active" && trade.deploymentId === deploymentId && (trade.universe ?? "crypto") === universe && (!trade.accountId || trade.accountId === accountId) && (!trade.interval || String(trade.interval) === String(interval));
|
|
4873
|
+
var mergeConfiguredStrategySelections = (strategies) => {
|
|
4874
|
+
if (strategies.some(({ selection }) => !selection)) {
|
|
4875
|
+
return void 0;
|
|
4876
|
+
}
|
|
4877
|
+
return {
|
|
4878
|
+
tickers: [
|
|
4879
|
+
...new Set(
|
|
4880
|
+
strategies.flatMap(
|
|
4881
|
+
({ selection }) => (selection?.tickers ?? []).map(normalizeSymbol)
|
|
4882
|
+
)
|
|
4883
|
+
)
|
|
4884
|
+
].sort()
|
|
4885
|
+
};
|
|
4886
|
+
};
|
|
4861
4887
|
var formatConfiguredStrategyIdentity = (strategy) => `${strategy.strategyName}@${strategy.strategyRevision}[${strategy.controlState}]`;
|
|
4862
4888
|
var getConfiguredScopeActiveSymbols = ({
|
|
4863
4889
|
trades,
|
|
@@ -4871,11 +4897,48 @@ var getConfiguredScopeActiveSymbols = ({
|
|
|
4871
4897
|
return [
|
|
4872
4898
|
...new Set(
|
|
4873
4899
|
trades.filter(
|
|
4874
|
-
(trade) =>
|
|
4875
|
-
|
|
4900
|
+
(trade) => isActiveTradeInScope({
|
|
4901
|
+
trade,
|
|
4902
|
+
deploymentId,
|
|
4903
|
+
universe,
|
|
4904
|
+
accountId,
|
|
4905
|
+
interval
|
|
4906
|
+
}) && strategyNameSet.has(trade.strategy) && Boolean(trade.symbol)
|
|
4907
|
+
).map(({ symbol }) => normalizeSymbol(symbol))
|
|
4876
4908
|
)
|
|
4877
4909
|
].sort();
|
|
4878
4910
|
};
|
|
4911
|
+
var createConfiguredStrategySymbolMatcher = ({
|
|
4912
|
+
trades,
|
|
4913
|
+
deploymentId,
|
|
4914
|
+
universe,
|
|
4915
|
+
accountId,
|
|
4916
|
+
interval
|
|
4917
|
+
}) => {
|
|
4918
|
+
const activeStrategySymbols = new Set(
|
|
4919
|
+
trades.filter(
|
|
4920
|
+
(trade) => isActiveTradeInScope({
|
|
4921
|
+
trade,
|
|
4922
|
+
deploymentId,
|
|
4923
|
+
universe,
|
|
4924
|
+
accountId,
|
|
4925
|
+
interval
|
|
4926
|
+
})
|
|
4927
|
+
).map(
|
|
4928
|
+
({ strategy, symbol }) => `${strategy}\0${normalizeSymbol(symbol)}`
|
|
4929
|
+
)
|
|
4930
|
+
);
|
|
4931
|
+
return (strategy, symbol) => {
|
|
4932
|
+
if (!strategy.selection) return true;
|
|
4933
|
+
const normalizedSymbol = normalizeSymbol(symbol);
|
|
4934
|
+
return strategy.selection.tickers.some((ticker) => {
|
|
4935
|
+
const normalizedTicker = normalizeSymbol(ticker);
|
|
4936
|
+
return normalizedTicker === normalizedSymbol || universe === "crypto" && `${normalizedTicker}USDT` === normalizedSymbol;
|
|
4937
|
+
}) || activeStrategySymbols.has(
|
|
4938
|
+
`${strategy.strategyName}\0${normalizedSymbol}`
|
|
4939
|
+
);
|
|
4940
|
+
};
|
|
4941
|
+
};
|
|
4879
4942
|
var buildConfiguredSignalsScopes = ({
|
|
4880
4943
|
connectorName,
|
|
4881
4944
|
deployment,
|
|
@@ -4893,15 +4956,11 @@ var buildConfiguredSignalsScopes = ({
|
|
|
4893
4956
|
});
|
|
4894
4957
|
const groups = /* @__PURE__ */ new Map();
|
|
4895
4958
|
for (const strategy of strategies) {
|
|
4896
|
-
const selectionIdentity = JSON.stringify({
|
|
4897
|
-
tickers: sorted(strategy.selection?.tickers)
|
|
4898
|
-
});
|
|
4899
4959
|
const baseKey = [
|
|
4900
4960
|
connectorName,
|
|
4901
4961
|
strategy.universe,
|
|
4902
4962
|
strategy.accountId ?? "default",
|
|
4903
|
-
strategy.interval
|
|
4904
|
-
selectionIdentity
|
|
4963
|
+
strategy.interval
|
|
4905
4964
|
].join(":");
|
|
4906
4965
|
const group = groups.get(baseKey) ?? {
|
|
4907
4966
|
scope: {
|
|
@@ -4909,26 +4968,31 @@ var buildConfiguredSignalsScopes = ({
|
|
|
4909
4968
|
universe: strategy.universe,
|
|
4910
4969
|
accountId: strategy.accountId,
|
|
4911
4970
|
interval: strategy.interval,
|
|
4912
|
-
strategyNames: []
|
|
4913
|
-
...strategy.selection ? {
|
|
4914
|
-
selection: { tickers: [...strategy.selection.tickers] }
|
|
4915
|
-
} : {}
|
|
4971
|
+
strategyNames: []
|
|
4916
4972
|
},
|
|
4917
|
-
strategyIdentities: []
|
|
4973
|
+
strategyIdentities: [],
|
|
4974
|
+
strategies: []
|
|
4918
4975
|
};
|
|
4919
4976
|
group.scope.strategyNames.push(strategy.strategyName);
|
|
4920
4977
|
group.strategyIdentities.push(formatConfiguredStrategyIdentity(strategy));
|
|
4978
|
+
group.strategies.push(strategy);
|
|
4921
4979
|
groups.set(baseKey, group);
|
|
4922
4980
|
}
|
|
4923
|
-
return [...groups.entries()].map(([baseKey, group]) =>
|
|
4924
|
-
|
|
4925
|
-
|
|
4926
|
-
|
|
4927
|
-
|
|
4928
|
-
|
|
4929
|
-
|
|
4930
|
-
|
|
4931
|
-
|
|
4981
|
+
return [...groups.entries()].map(([baseKey, group]) => {
|
|
4982
|
+
const selection = mergeConfiguredStrategySelections(group.strategies);
|
|
4983
|
+
return {
|
|
4984
|
+
key: [
|
|
4985
|
+
baseKey,
|
|
4986
|
+
deploymentIdentity,
|
|
4987
|
+
...group.strategyIdentities.sort()
|
|
4988
|
+
].join(":"),
|
|
4989
|
+
scope: {
|
|
4990
|
+
...group.scope,
|
|
4991
|
+
strategyNames: [...group.scope.strategyNames].sort(),
|
|
4992
|
+
...selection ? { selection } : {}
|
|
4993
|
+
}
|
|
4994
|
+
};
|
|
4995
|
+
});
|
|
4932
4996
|
};
|
|
4933
4997
|
|
|
4934
4998
|
// src/lib/runtimeEvidenceCompositionSnapshots.ts
|
|
@@ -5453,10 +5517,12 @@ var createSignalsRunner = (config2) => {
|
|
|
5453
5517
|
selection
|
|
5454
5518
|
} = session;
|
|
5455
5519
|
const universe = sessionUniverse ?? marketConnector.universe ?? "crypto";
|
|
5456
|
-
const
|
|
5457
|
-
|
|
5520
|
+
const activeScopeStrategyNames = strategyNames?.length ? strategyNames : deployment?.strategies.filter(({ enabled }) => enabled).map(({ strategyName }) => strategyName) ?? [];
|
|
5521
|
+
const runtimeActiveTrades = deployment?.id && activeScopeStrategyNames.length ? await loadRuntimeActiveTrades(config2.userName) : [];
|
|
5522
|
+
const selectedActiveSymbols = !config2.tickers && activeScopeStrategyNames.length ? getConfiguredScopeActiveSymbols({
|
|
5523
|
+
trades: runtimeActiveTrades,
|
|
5458
5524
|
deploymentId: deployment?.id ?? "",
|
|
5459
|
-
strategyNames,
|
|
5525
|
+
strategyNames: activeScopeStrategyNames,
|
|
5460
5526
|
universe,
|
|
5461
5527
|
accountId,
|
|
5462
5528
|
interval: interval2
|
|
@@ -5465,11 +5531,11 @@ var createSignalsRunner = (config2) => {
|
|
|
5465
5531
|
if (selectedActiveSymbols.length) {
|
|
5466
5532
|
import_logger4.logger.info(
|
|
5467
5533
|
import_chalk7.default.gray(
|
|
5468
|
-
`
|
|
5534
|
+
`runtime scope retained active symbols: ${selectedActiveSymbols.join(", ")}`
|
|
5469
5535
|
)
|
|
5470
5536
|
);
|
|
5471
5537
|
}
|
|
5472
|
-
const
|
|
5538
|
+
const loadedTickers = await timeOperation2("tickers load", () => {
|
|
5473
5539
|
const baseArgs = [
|
|
5474
5540
|
marketConnector,
|
|
5475
5541
|
config2.tickers || selectedTickers?.join(",") || deployment?.tickers?.join(","),
|
|
@@ -5482,6 +5548,7 @@ var createSignalsRunner = (config2) => {
|
|
|
5482
5548
|
assetClasses: deployment?.assetClasses
|
|
5483
5549
|
}) : (0, import_cli2.getTickers)(...baseArgs);
|
|
5484
5550
|
});
|
|
5551
|
+
const tickers = config2.tickers ? loadedTickers : [.../* @__PURE__ */ new Set([...loadedTickers, ...selectedActiveSymbols])];
|
|
5485
5552
|
if (universe === "tradfi" && typeof marketConnector.listInstruments !== "function") {
|
|
5486
5553
|
throw new Error("TradFi connector must implement listInstruments");
|
|
5487
5554
|
}
|
|
@@ -5635,10 +5702,19 @@ var createSignalsRunner = (config2) => {
|
|
|
5635
5702
|
);
|
|
5636
5703
|
return;
|
|
5637
5704
|
}
|
|
5705
|
+
const matchesStrategySymbol = createConfiguredStrategySymbolMatcher({
|
|
5706
|
+
trades: runtimeActiveTrades,
|
|
5707
|
+
deploymentId: deployment?.id ?? "",
|
|
5708
|
+
universe,
|
|
5709
|
+
accountId,
|
|
5710
|
+
interval: interval2
|
|
5711
|
+
});
|
|
5638
5712
|
lifecycle.retain(
|
|
5639
5713
|
new Set(
|
|
5640
5714
|
tickers.flatMap(
|
|
5641
|
-
(symbol) => runtimeStrategies.
|
|
5715
|
+
(symbol) => runtimeStrategies.filter(
|
|
5716
|
+
(runtimeStrategy) => matchesStrategySymbol(runtimeStrategy, symbol)
|
|
5717
|
+
).map(
|
|
5642
5718
|
({ strategyName, strategyRevision }) => buildSignalsStrategyLifecycleKey({
|
|
5643
5719
|
connectorName,
|
|
5644
5720
|
universe: sessionUniverse,
|
|
@@ -5705,6 +5781,7 @@ var createSignalsRunner = (config2) => {
|
|
|
5705
5781
|
primaryEthClosedData,
|
|
5706
5782
|
primaryEthByTimestamp,
|
|
5707
5783
|
runtimeStrategies,
|
|
5784
|
+
matchesStrategySymbol,
|
|
5708
5785
|
strategyStats,
|
|
5709
5786
|
runtimeCloseNotifications,
|
|
5710
5787
|
lifecycle,
|
|
@@ -4612,6 +4612,7 @@ var createSignalsTickerEvaluator = ({
|
|
|
4612
4612
|
primaryEthClosedData,
|
|
4613
4613
|
primaryEthByTimestamp,
|
|
4614
4614
|
runtimeStrategies,
|
|
4615
|
+
matchesStrategySymbol,
|
|
4615
4616
|
strategyStats,
|
|
4616
4617
|
runtimeCloseNotifications,
|
|
4617
4618
|
lifecycle,
|
|
@@ -4652,6 +4653,9 @@ var createSignalsTickerEvaluator = ({
|
|
|
4652
4653
|
);
|
|
4653
4654
|
const strategySignals = [];
|
|
4654
4655
|
for (const runtimeStrategy of runtimeStrategies) {
|
|
4656
|
+
if (matchesStrategySymbol && !matchesStrategySymbol(runtimeStrategy, symbol)) {
|
|
4657
|
+
continue;
|
|
4658
|
+
}
|
|
4655
4659
|
const {
|
|
4656
4660
|
strategyName,
|
|
4657
4661
|
strategyRevision,
|
|
@@ -4856,6 +4860,28 @@ var createSignalsTickerEvaluator = ({
|
|
|
4856
4860
|
|
|
4857
4861
|
// src/lib/signals/configuredScopes.ts
|
|
4858
4862
|
var sorted = (values) => values ? [...values].sort() : [];
|
|
4863
|
+
var normalizeSymbol = (value) => value.trim().toUpperCase();
|
|
4864
|
+
var isActiveTradeInScope = ({
|
|
4865
|
+
trade,
|
|
4866
|
+
deploymentId,
|
|
4867
|
+
universe,
|
|
4868
|
+
accountId,
|
|
4869
|
+
interval
|
|
4870
|
+
}) => trade.status === "active" && trade.deploymentId === deploymentId && (trade.universe ?? "crypto") === universe && (!trade.accountId || trade.accountId === accountId) && (!trade.interval || String(trade.interval) === String(interval));
|
|
4871
|
+
var mergeConfiguredStrategySelections = (strategies) => {
|
|
4872
|
+
if (strategies.some(({ selection }) => !selection)) {
|
|
4873
|
+
return void 0;
|
|
4874
|
+
}
|
|
4875
|
+
return {
|
|
4876
|
+
tickers: [
|
|
4877
|
+
...new Set(
|
|
4878
|
+
strategies.flatMap(
|
|
4879
|
+
({ selection }) => (selection?.tickers ?? []).map(normalizeSymbol)
|
|
4880
|
+
)
|
|
4881
|
+
)
|
|
4882
|
+
].sort()
|
|
4883
|
+
};
|
|
4884
|
+
};
|
|
4859
4885
|
var formatConfiguredStrategyIdentity = (strategy) => `${strategy.strategyName}@${strategy.strategyRevision}[${strategy.controlState}]`;
|
|
4860
4886
|
var getConfiguredScopeActiveSymbols = ({
|
|
4861
4887
|
trades,
|
|
@@ -4869,11 +4895,48 @@ var getConfiguredScopeActiveSymbols = ({
|
|
|
4869
4895
|
return [
|
|
4870
4896
|
...new Set(
|
|
4871
4897
|
trades.filter(
|
|
4872
|
-
(trade) =>
|
|
4873
|
-
|
|
4898
|
+
(trade) => isActiveTradeInScope({
|
|
4899
|
+
trade,
|
|
4900
|
+
deploymentId,
|
|
4901
|
+
universe,
|
|
4902
|
+
accountId,
|
|
4903
|
+
interval
|
|
4904
|
+
}) && strategyNameSet.has(trade.strategy) && Boolean(trade.symbol)
|
|
4905
|
+
).map(({ symbol }) => normalizeSymbol(symbol))
|
|
4874
4906
|
)
|
|
4875
4907
|
].sort();
|
|
4876
4908
|
};
|
|
4909
|
+
var createConfiguredStrategySymbolMatcher = ({
|
|
4910
|
+
trades,
|
|
4911
|
+
deploymentId,
|
|
4912
|
+
universe,
|
|
4913
|
+
accountId,
|
|
4914
|
+
interval
|
|
4915
|
+
}) => {
|
|
4916
|
+
const activeStrategySymbols = new Set(
|
|
4917
|
+
trades.filter(
|
|
4918
|
+
(trade) => isActiveTradeInScope({
|
|
4919
|
+
trade,
|
|
4920
|
+
deploymentId,
|
|
4921
|
+
universe,
|
|
4922
|
+
accountId,
|
|
4923
|
+
interval
|
|
4924
|
+
})
|
|
4925
|
+
).map(
|
|
4926
|
+
({ strategy, symbol }) => `${strategy}\0${normalizeSymbol(symbol)}`
|
|
4927
|
+
)
|
|
4928
|
+
);
|
|
4929
|
+
return (strategy, symbol) => {
|
|
4930
|
+
if (!strategy.selection) return true;
|
|
4931
|
+
const normalizedSymbol = normalizeSymbol(symbol);
|
|
4932
|
+
return strategy.selection.tickers.some((ticker) => {
|
|
4933
|
+
const normalizedTicker = normalizeSymbol(ticker);
|
|
4934
|
+
return normalizedTicker === normalizedSymbol || universe === "crypto" && `${normalizedTicker}USDT` === normalizedSymbol;
|
|
4935
|
+
}) || activeStrategySymbols.has(
|
|
4936
|
+
`${strategy.strategyName}\0${normalizedSymbol}`
|
|
4937
|
+
);
|
|
4938
|
+
};
|
|
4939
|
+
};
|
|
4877
4940
|
var buildConfiguredSignalsScopes = ({
|
|
4878
4941
|
connectorName,
|
|
4879
4942
|
deployment,
|
|
@@ -4891,15 +4954,11 @@ var buildConfiguredSignalsScopes = ({
|
|
|
4891
4954
|
});
|
|
4892
4955
|
const groups = /* @__PURE__ */ new Map();
|
|
4893
4956
|
for (const strategy of strategies) {
|
|
4894
|
-
const selectionIdentity = JSON.stringify({
|
|
4895
|
-
tickers: sorted(strategy.selection?.tickers)
|
|
4896
|
-
});
|
|
4897
4957
|
const baseKey = [
|
|
4898
4958
|
connectorName,
|
|
4899
4959
|
strategy.universe,
|
|
4900
4960
|
strategy.accountId ?? "default",
|
|
4901
|
-
strategy.interval
|
|
4902
|
-
selectionIdentity
|
|
4961
|
+
strategy.interval
|
|
4903
4962
|
].join(":");
|
|
4904
4963
|
const group = groups.get(baseKey) ?? {
|
|
4905
4964
|
scope: {
|
|
@@ -4907,26 +4966,31 @@ var buildConfiguredSignalsScopes = ({
|
|
|
4907
4966
|
universe: strategy.universe,
|
|
4908
4967
|
accountId: strategy.accountId,
|
|
4909
4968
|
interval: strategy.interval,
|
|
4910
|
-
strategyNames: []
|
|
4911
|
-
...strategy.selection ? {
|
|
4912
|
-
selection: { tickers: [...strategy.selection.tickers] }
|
|
4913
|
-
} : {}
|
|
4969
|
+
strategyNames: []
|
|
4914
4970
|
},
|
|
4915
|
-
strategyIdentities: []
|
|
4971
|
+
strategyIdentities: [],
|
|
4972
|
+
strategies: []
|
|
4916
4973
|
};
|
|
4917
4974
|
group.scope.strategyNames.push(strategy.strategyName);
|
|
4918
4975
|
group.strategyIdentities.push(formatConfiguredStrategyIdentity(strategy));
|
|
4976
|
+
group.strategies.push(strategy);
|
|
4919
4977
|
groups.set(baseKey, group);
|
|
4920
4978
|
}
|
|
4921
|
-
return [...groups.entries()].map(([baseKey, group]) =>
|
|
4922
|
-
|
|
4923
|
-
|
|
4924
|
-
|
|
4925
|
-
|
|
4926
|
-
|
|
4927
|
-
|
|
4928
|
-
|
|
4929
|
-
|
|
4979
|
+
return [...groups.entries()].map(([baseKey, group]) => {
|
|
4980
|
+
const selection = mergeConfiguredStrategySelections(group.strategies);
|
|
4981
|
+
return {
|
|
4982
|
+
key: [
|
|
4983
|
+
baseKey,
|
|
4984
|
+
deploymentIdentity,
|
|
4985
|
+
...group.strategyIdentities.sort()
|
|
4986
|
+
].join(":"),
|
|
4987
|
+
scope: {
|
|
4988
|
+
...group.scope,
|
|
4989
|
+
strategyNames: [...group.scope.strategyNames].sort(),
|
|
4990
|
+
...selection ? { selection } : {}
|
|
4991
|
+
}
|
|
4992
|
+
};
|
|
4993
|
+
});
|
|
4930
4994
|
};
|
|
4931
4995
|
|
|
4932
4996
|
// src/lib/runtimeEvidenceCompositionSnapshots.ts
|
|
@@ -5451,10 +5515,12 @@ var createSignalsRunner = (config2) => {
|
|
|
5451
5515
|
selection
|
|
5452
5516
|
} = session;
|
|
5453
5517
|
const universe = sessionUniverse ?? marketConnector.universe ?? "crypto";
|
|
5454
|
-
const
|
|
5455
|
-
|
|
5518
|
+
const activeScopeStrategyNames = strategyNames?.length ? strategyNames : deployment?.strategies.filter(({ enabled }) => enabled).map(({ strategyName }) => strategyName) ?? [];
|
|
5519
|
+
const runtimeActiveTrades = deployment?.id && activeScopeStrategyNames.length ? await loadRuntimeActiveTrades(config2.userName) : [];
|
|
5520
|
+
const selectedActiveSymbols = !config2.tickers && activeScopeStrategyNames.length ? getConfiguredScopeActiveSymbols({
|
|
5521
|
+
trades: runtimeActiveTrades,
|
|
5456
5522
|
deploymentId: deployment?.id ?? "",
|
|
5457
|
-
strategyNames,
|
|
5523
|
+
strategyNames: activeScopeStrategyNames,
|
|
5458
5524
|
universe,
|
|
5459
5525
|
accountId,
|
|
5460
5526
|
interval: interval2
|
|
@@ -5463,11 +5529,11 @@ var createSignalsRunner = (config2) => {
|
|
|
5463
5529
|
if (selectedActiveSymbols.length) {
|
|
5464
5530
|
import_logger4.logger.info(
|
|
5465
5531
|
import_chalk7.default.gray(
|
|
5466
|
-
`
|
|
5532
|
+
`runtime scope retained active symbols: ${selectedActiveSymbols.join(", ")}`
|
|
5467
5533
|
)
|
|
5468
5534
|
);
|
|
5469
5535
|
}
|
|
5470
|
-
const
|
|
5536
|
+
const loadedTickers = await timeOperation2("tickers load", () => {
|
|
5471
5537
|
const baseArgs = [
|
|
5472
5538
|
marketConnector,
|
|
5473
5539
|
config2.tickers || selectedTickers?.join(",") || deployment?.tickers?.join(","),
|
|
@@ -5480,6 +5546,7 @@ var createSignalsRunner = (config2) => {
|
|
|
5480
5546
|
assetClasses: deployment?.assetClasses
|
|
5481
5547
|
}) : (0, import_cli2.getTickers)(...baseArgs);
|
|
5482
5548
|
});
|
|
5549
|
+
const tickers = config2.tickers ? loadedTickers : [.../* @__PURE__ */ new Set([...loadedTickers, ...selectedActiveSymbols])];
|
|
5483
5550
|
if (universe === "tradfi" && typeof marketConnector.listInstruments !== "function") {
|
|
5484
5551
|
throw new Error("TradFi connector must implement listInstruments");
|
|
5485
5552
|
}
|
|
@@ -5633,10 +5700,19 @@ var createSignalsRunner = (config2) => {
|
|
|
5633
5700
|
);
|
|
5634
5701
|
return;
|
|
5635
5702
|
}
|
|
5703
|
+
const matchesStrategySymbol = createConfiguredStrategySymbolMatcher({
|
|
5704
|
+
trades: runtimeActiveTrades,
|
|
5705
|
+
deploymentId: deployment?.id ?? "",
|
|
5706
|
+
universe,
|
|
5707
|
+
accountId,
|
|
5708
|
+
interval: interval2
|
|
5709
|
+
});
|
|
5636
5710
|
lifecycle.retain(
|
|
5637
5711
|
new Set(
|
|
5638
5712
|
tickers.flatMap(
|
|
5639
|
-
(symbol) => runtimeStrategies.
|
|
5713
|
+
(symbol) => runtimeStrategies.filter(
|
|
5714
|
+
(runtimeStrategy) => matchesStrategySymbol(runtimeStrategy, symbol)
|
|
5715
|
+
).map(
|
|
5640
5716
|
({ strategyName, strategyRevision }) => buildSignalsStrategyLifecycleKey({
|
|
5641
5717
|
connectorName,
|
|
5642
5718
|
universe: sessionUniverse,
|
|
@@ -5703,6 +5779,7 @@ var createSignalsRunner = (config2) => {
|
|
|
5703
5779
|
primaryEthClosedData,
|
|
5704
5780
|
primaryEthByTimestamp,
|
|
5705
5781
|
runtimeStrategies,
|
|
5782
|
+
matchesStrategySymbol,
|
|
5706
5783
|
strategyStats,
|
|
5707
5784
|
runtimeCloseNotifications,
|
|
5708
5785
|
lifecycle,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tradejs/cli",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.28-beta.252",
|
|
4
4
|
"description": "Official CLI for the TradeJS TypeScript framework: infra setup, backtests, signals, bots, and ML workflows.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"tradejs",
|
|
@@ -36,13 +36,13 @@
|
|
|
36
36
|
"tradejs": "dist/cli.js"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@tradejs/connectors": "^3.1.
|
|
40
|
-
"@tradejs/core": "^3.1.
|
|
41
|
-
"@tradejs/indicators": "^3.1.
|
|
42
|
-
"@tradejs/infra": "^3.1.
|
|
43
|
-
"@tradejs/node": "^3.1.
|
|
39
|
+
"@tradejs/connectors": "^3.1.28-beta.252",
|
|
40
|
+
"@tradejs/core": "^3.1.28-beta.252",
|
|
41
|
+
"@tradejs/indicators": "^3.1.28-beta.252",
|
|
42
|
+
"@tradejs/infra": "^3.1.28-beta.252",
|
|
43
|
+
"@tradejs/node": "^3.1.28-beta.252",
|
|
44
44
|
"@tradejs/strategy-kit": "3.0.4",
|
|
45
|
-
"@tradejs/types": "^3.1.
|
|
45
|
+
"@tradejs/types": "^3.1.28-beta.252",
|
|
46
46
|
"args": "^5.0.3",
|
|
47
47
|
"bcryptjs": "^2.4.3",
|
|
48
48
|
"chalk": "4.1.2",
|