@tradejs/node 2.0.0 → 2.0.2
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/backtest.js +25 -18
- package/dist/backtest.mjs +1 -1
- package/dist/{chunk-37VNDZVX.mjs → chunk-2DZCHRP6.mjs} +27 -19
- package/dist/strategies.js +27 -20
- package/dist/strategies.mjs +1 -1
- package/package.json +4 -4
package/dist/backtest.js
CHANGED
|
@@ -1838,11 +1838,13 @@ var enrichSignalWithCoinMarketCapContext = async (params) => {
|
|
|
1838
1838
|
|
|
1839
1839
|
// src/strategyHelpers/derivativesContext.ts
|
|
1840
1840
|
var import_indicators2 = require("@tradejs/core/indicators");
|
|
1841
|
+
var import_data = require("@tradejs/core/data");
|
|
1841
1842
|
var import_strategies3 = require("@tradejs/core/strategies");
|
|
1842
1843
|
var import_constants = require("@tradejs/core/constants");
|
|
1843
1844
|
var import_timescale3 = require("@tradejs/infra/timescale");
|
|
1844
1845
|
var import_logger5 = require("@tradejs/infra/logger");
|
|
1845
|
-
var
|
|
1846
|
+
var STORED_INTERVALS = ["15m", "1h"];
|
|
1847
|
+
var CONTEXT_INTERVALS = ["15m", "1h"];
|
|
1846
1848
|
var DEFAULT_LOOKBACK_HOURS = 48;
|
|
1847
1849
|
var PRIMARY_DERIVATIVES_REFERENCE_SYMBOL = import_constants.DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS[0];
|
|
1848
1850
|
var SECONDARY_DERIVATIVES_REFERENCE_SYMBOL = import_constants.DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS[1];
|
|
@@ -1867,12 +1869,13 @@ var parseLookbackMs = () => {
|
|
|
1867
1869
|
const normalizedHours = Number.isFinite(hours) && hours > 0 ? hours : DEFAULT_LOOKBACK_HOURS;
|
|
1868
1870
|
return normalizedHours * 60 * 60 * 1e3;
|
|
1869
1871
|
};
|
|
1870
|
-
var
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
}
|
|
1872
|
+
var withHourlyFallbackRows = (rowsByInterval) => ({
|
|
1873
|
+
"15m": rowsByInterval["15m"] ?? [],
|
|
1874
|
+
"1h": (0, import_indicators2.buildCoinalyzeHourlyRowsWithFallback)({
|
|
1875
|
+
rows15m: rowsByInterval["15m"],
|
|
1876
|
+
fallbackRows1h: rowsByInterval["1h"]
|
|
1877
|
+
})
|
|
1878
|
+
});
|
|
1876
1879
|
var getDerivativesContextReferenceSymbols = () => [
|
|
1877
1880
|
...(0, import_constants.resolveDerivativesContextReferenceSymbols)(
|
|
1878
1881
|
process.env.DERIVATIVES_CONTEXT_EXTRA_REFERENCE_SYMBOLS
|
|
@@ -1992,16 +1995,20 @@ var enrichSignalWithDerivativesContext = async (params) => {
|
|
|
1992
1995
|
return false;
|
|
1993
1996
|
}
|
|
1994
1997
|
try {
|
|
1995
|
-
const intervals = parseIntervals();
|
|
1996
1998
|
const referenceSymbols = getDerivativesContextReferenceSymbols();
|
|
1997
1999
|
const targetSymbol = normalizeSymbol(signal.symbol);
|
|
1998
2000
|
const lookbackMs = parseLookbackMs();
|
|
2001
|
+
const decisionTimeMs = signal.timestamp + (0, import_data.intervalToMs)(signal.interval);
|
|
2002
|
+
const derivativesEndMs = (0, import_indicators2.getLastClosedDerivativesBarStartMs)(
|
|
2003
|
+
decisionTimeMs,
|
|
2004
|
+
"15m"
|
|
2005
|
+
);
|
|
1999
2006
|
const contexts = await Promise.all(
|
|
2000
2007
|
referenceSymbols.map(async (symbol) => {
|
|
2001
2008
|
const rowsByInterval = await (0, import_timescale3.getDerivativesWindow)({
|
|
2002
2009
|
symbol,
|
|
2003
|
-
intervals,
|
|
2004
|
-
endMs:
|
|
2010
|
+
intervals: STORED_INTERVALS,
|
|
2011
|
+
endMs: derivativesEndMs,
|
|
2005
2012
|
lookbackMs
|
|
2006
2013
|
});
|
|
2007
2014
|
return [
|
|
@@ -2009,10 +2016,10 @@ var enrichSignalWithDerivativesContext = async (params) => {
|
|
|
2009
2016
|
(0, import_indicators2.buildDerivativesContext)({
|
|
2010
2017
|
symbol,
|
|
2011
2018
|
direction: signal.direction,
|
|
2012
|
-
timestamp:
|
|
2013
|
-
rowsByInterval,
|
|
2019
|
+
timestamp: derivativesEndMs,
|
|
2020
|
+
rowsByInterval: withHourlyFallbackRows(rowsByInterval),
|
|
2014
2021
|
priceChangePct1h: getSignalPriceChangePct1h(signal),
|
|
2015
|
-
intervals
|
|
2022
|
+
intervals: CONTEXT_INTERVALS
|
|
2016
2023
|
})
|
|
2017
2024
|
];
|
|
2018
2025
|
})
|
|
@@ -2028,17 +2035,17 @@ var enrichSignalWithDerivativesContext = async (params) => {
|
|
|
2028
2035
|
const fetchedTargetContext = shouldFetchTargetContext ? await (async () => {
|
|
2029
2036
|
const rowsByInterval = await (0, import_timescale3.getDerivativesWindow)({
|
|
2030
2037
|
symbol: targetSymbol,
|
|
2031
|
-
intervals,
|
|
2032
|
-
endMs:
|
|
2038
|
+
intervals: STORED_INTERVALS,
|
|
2039
|
+
endMs: derivativesEndMs,
|
|
2033
2040
|
lookbackMs
|
|
2034
2041
|
});
|
|
2035
2042
|
const context = (0, import_indicators2.buildDerivativesContext)({
|
|
2036
2043
|
symbol: targetSymbol,
|
|
2037
2044
|
direction: signal.direction,
|
|
2038
|
-
timestamp:
|
|
2039
|
-
rowsByInterval,
|
|
2045
|
+
timestamp: derivativesEndMs,
|
|
2046
|
+
rowsByInterval: withHourlyFallbackRows(rowsByInterval),
|
|
2040
2047
|
priceChangePct1h: getSignalPriceChangePct1h(signal),
|
|
2041
|
-
intervals
|
|
2048
|
+
intervals: CONTEXT_INTERVALS
|
|
2042
2049
|
});
|
|
2043
2050
|
return hasDerivativesSymbolData(context) ? context : void 0;
|
|
2044
2051
|
})() : void 0;
|
package/dist/backtest.mjs
CHANGED
|
@@ -747,8 +747,10 @@ var enrichSignalWithCoinMarketCapContext = async (params) => {
|
|
|
747
747
|
// src/strategyHelpers/derivativesContext.ts
|
|
748
748
|
import {
|
|
749
749
|
buildDerivativesContext,
|
|
750
|
-
|
|
750
|
+
buildCoinalyzeHourlyRowsWithFallback,
|
|
751
|
+
getLastClosedDerivativesBarStartMs
|
|
751
752
|
} from "@tradejs/core/indicators";
|
|
753
|
+
import { intervalToMs } from "@tradejs/core/data";
|
|
752
754
|
import { refreshSignalBaseContextGateFeatures as refreshSignalBaseContextGateFeatures3 } from "@tradejs/core/strategies";
|
|
753
755
|
import {
|
|
754
756
|
DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
|
|
@@ -756,7 +758,8 @@ import {
|
|
|
756
758
|
} from "@tradejs/core/constants";
|
|
757
759
|
import { getDerivativesWindow } from "@tradejs/infra/timescale";
|
|
758
760
|
import { logger as logger3 } from "@tradejs/infra/logger";
|
|
759
|
-
var
|
|
761
|
+
var STORED_INTERVALS = ["15m", "1h"];
|
|
762
|
+
var CONTEXT_INTERVALS = ["15m", "1h"];
|
|
760
763
|
var DEFAULT_LOOKBACK_HOURS = 48;
|
|
761
764
|
var PRIMARY_DERIVATIVES_REFERENCE_SYMBOL = DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS[0];
|
|
762
765
|
var SECONDARY_DERIVATIVES_REFERENCE_SYMBOL = DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS[1];
|
|
@@ -781,12 +784,13 @@ var parseLookbackMs = () => {
|
|
|
781
784
|
const normalizedHours = Number.isFinite(hours) && hours > 0 ? hours : DEFAULT_LOOKBACK_HOURS;
|
|
782
785
|
return normalizedHours * 60 * 60 * 1e3;
|
|
783
786
|
};
|
|
784
|
-
var
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
}
|
|
787
|
+
var withHourlyFallbackRows = (rowsByInterval) => ({
|
|
788
|
+
"15m": rowsByInterval["15m"] ?? [],
|
|
789
|
+
"1h": buildCoinalyzeHourlyRowsWithFallback({
|
|
790
|
+
rows15m: rowsByInterval["15m"],
|
|
791
|
+
fallbackRows1h: rowsByInterval["1h"]
|
|
792
|
+
})
|
|
793
|
+
});
|
|
790
794
|
var getDerivativesContextReferenceSymbols = () => [
|
|
791
795
|
...resolveDerivativesContextReferenceSymbols(
|
|
792
796
|
process.env.DERIVATIVES_CONTEXT_EXTRA_REFERENCE_SYMBOLS
|
|
@@ -906,16 +910,20 @@ var enrichSignalWithDerivativesContext = async (params) => {
|
|
|
906
910
|
return false;
|
|
907
911
|
}
|
|
908
912
|
try {
|
|
909
|
-
const intervals = parseIntervals();
|
|
910
913
|
const referenceSymbols = getDerivativesContextReferenceSymbols();
|
|
911
914
|
const targetSymbol = normalizeSymbol(signal.symbol);
|
|
912
915
|
const lookbackMs = parseLookbackMs();
|
|
916
|
+
const decisionTimeMs = signal.timestamp + intervalToMs(signal.interval);
|
|
917
|
+
const derivativesEndMs = getLastClosedDerivativesBarStartMs(
|
|
918
|
+
decisionTimeMs,
|
|
919
|
+
"15m"
|
|
920
|
+
);
|
|
913
921
|
const contexts = await Promise.all(
|
|
914
922
|
referenceSymbols.map(async (symbol) => {
|
|
915
923
|
const rowsByInterval = await getDerivativesWindow({
|
|
916
924
|
symbol,
|
|
917
|
-
intervals,
|
|
918
|
-
endMs:
|
|
925
|
+
intervals: STORED_INTERVALS,
|
|
926
|
+
endMs: derivativesEndMs,
|
|
919
927
|
lookbackMs
|
|
920
928
|
});
|
|
921
929
|
return [
|
|
@@ -923,10 +931,10 @@ var enrichSignalWithDerivativesContext = async (params) => {
|
|
|
923
931
|
buildDerivativesContext({
|
|
924
932
|
symbol,
|
|
925
933
|
direction: signal.direction,
|
|
926
|
-
timestamp:
|
|
927
|
-
rowsByInterval,
|
|
934
|
+
timestamp: derivativesEndMs,
|
|
935
|
+
rowsByInterval: withHourlyFallbackRows(rowsByInterval),
|
|
928
936
|
priceChangePct1h: getSignalPriceChangePct1h(signal),
|
|
929
|
-
intervals
|
|
937
|
+
intervals: CONTEXT_INTERVALS
|
|
930
938
|
})
|
|
931
939
|
];
|
|
932
940
|
})
|
|
@@ -942,17 +950,17 @@ var enrichSignalWithDerivativesContext = async (params) => {
|
|
|
942
950
|
const fetchedTargetContext = shouldFetchTargetContext ? await (async () => {
|
|
943
951
|
const rowsByInterval = await getDerivativesWindow({
|
|
944
952
|
symbol: targetSymbol,
|
|
945
|
-
intervals,
|
|
946
|
-
endMs:
|
|
953
|
+
intervals: STORED_INTERVALS,
|
|
954
|
+
endMs: derivativesEndMs,
|
|
947
955
|
lookbackMs
|
|
948
956
|
});
|
|
949
957
|
const context = buildDerivativesContext({
|
|
950
958
|
symbol: targetSymbol,
|
|
951
959
|
direction: signal.direction,
|
|
952
|
-
timestamp:
|
|
953
|
-
rowsByInterval,
|
|
960
|
+
timestamp: derivativesEndMs,
|
|
961
|
+
rowsByInterval: withHourlyFallbackRows(rowsByInterval),
|
|
954
962
|
priceChangePct1h: getSignalPriceChangePct1h(signal),
|
|
955
|
-
intervals
|
|
963
|
+
intervals: CONTEXT_INTERVALS
|
|
956
964
|
});
|
|
957
965
|
return hasDerivativesSymbolData(context) ? context : void 0;
|
|
958
966
|
})() : void 0;
|
package/dist/strategies.js
CHANGED
|
@@ -7196,7 +7196,7 @@ var askAI = async (signal, options = {}) => {
|
|
|
7196
7196
|
// src/strategyRuntime.ts
|
|
7197
7197
|
var import_node_path2 = __toESM(require("path"));
|
|
7198
7198
|
var import_constants4 = require("@tradejs/core/constants");
|
|
7199
|
-
var
|
|
7199
|
+
var import_data2 = require("@tradejs/core/data");
|
|
7200
7200
|
var import_strategies4 = require("@tradejs/core/strategies");
|
|
7201
7201
|
var import_logger8 = require("@tradejs/infra/logger");
|
|
7202
7202
|
|
|
@@ -7424,11 +7424,13 @@ var markRuntimeTradeClosed = async (params) => {
|
|
|
7424
7424
|
|
|
7425
7425
|
// src/strategyHelpers/derivativesContext.ts
|
|
7426
7426
|
var import_indicators2 = require("@tradejs/core/indicators");
|
|
7427
|
+
var import_data = require("@tradejs/core/data");
|
|
7427
7428
|
var import_strategies = require("@tradejs/core/strategies");
|
|
7428
7429
|
var import_constants2 = require("@tradejs/core/constants");
|
|
7429
7430
|
var import_timescale = require("@tradejs/infra/timescale");
|
|
7430
7431
|
var import_logger4 = require("@tradejs/infra/logger");
|
|
7431
|
-
var
|
|
7432
|
+
var STORED_INTERVALS = ["15m", "1h"];
|
|
7433
|
+
var CONTEXT_INTERVALS = ["15m", "1h"];
|
|
7432
7434
|
var DEFAULT_LOOKBACK_HOURS = 48;
|
|
7433
7435
|
var PRIMARY_DERIVATIVES_REFERENCE_SYMBOL = import_constants2.DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS[0];
|
|
7434
7436
|
var SECONDARY_DERIVATIVES_REFERENCE_SYMBOL = import_constants2.DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS[1];
|
|
@@ -7453,12 +7455,13 @@ var parseLookbackMs = () => {
|
|
|
7453
7455
|
const normalizedHours = Number.isFinite(hours) && hours > 0 ? hours : DEFAULT_LOOKBACK_HOURS;
|
|
7454
7456
|
return normalizedHours * 60 * 60 * 1e3;
|
|
7455
7457
|
};
|
|
7456
|
-
var
|
|
7457
|
-
|
|
7458
|
-
|
|
7459
|
-
|
|
7460
|
-
|
|
7461
|
-
}
|
|
7458
|
+
var withHourlyFallbackRows = (rowsByInterval) => ({
|
|
7459
|
+
"15m": rowsByInterval["15m"] ?? [],
|
|
7460
|
+
"1h": (0, import_indicators2.buildCoinalyzeHourlyRowsWithFallback)({
|
|
7461
|
+
rows15m: rowsByInterval["15m"],
|
|
7462
|
+
fallbackRows1h: rowsByInterval["1h"]
|
|
7463
|
+
})
|
|
7464
|
+
});
|
|
7462
7465
|
var getDerivativesContextReferenceSymbols = () => [
|
|
7463
7466
|
...(0, import_constants2.resolveDerivativesContextReferenceSymbols)(
|
|
7464
7467
|
process.env.DERIVATIVES_CONTEXT_EXTRA_REFERENCE_SYMBOLS
|
|
@@ -7578,16 +7581,20 @@ var enrichSignalWithDerivativesContext = async (params) => {
|
|
|
7578
7581
|
return false;
|
|
7579
7582
|
}
|
|
7580
7583
|
try {
|
|
7581
|
-
const intervals = parseIntervals();
|
|
7582
7584
|
const referenceSymbols = getDerivativesContextReferenceSymbols();
|
|
7583
7585
|
const targetSymbol = normalizeSymbol(signal.symbol);
|
|
7584
7586
|
const lookbackMs = parseLookbackMs();
|
|
7587
|
+
const decisionTimeMs = signal.timestamp + (0, import_data.intervalToMs)(signal.interval);
|
|
7588
|
+
const derivativesEndMs = (0, import_indicators2.getLastClosedDerivativesBarStartMs)(
|
|
7589
|
+
decisionTimeMs,
|
|
7590
|
+
"15m"
|
|
7591
|
+
);
|
|
7585
7592
|
const contexts = await Promise.all(
|
|
7586
7593
|
referenceSymbols.map(async (symbol) => {
|
|
7587
7594
|
const rowsByInterval = await (0, import_timescale.getDerivativesWindow)({
|
|
7588
7595
|
symbol,
|
|
7589
|
-
intervals,
|
|
7590
|
-
endMs:
|
|
7596
|
+
intervals: STORED_INTERVALS,
|
|
7597
|
+
endMs: derivativesEndMs,
|
|
7591
7598
|
lookbackMs
|
|
7592
7599
|
});
|
|
7593
7600
|
return [
|
|
@@ -7595,10 +7602,10 @@ var enrichSignalWithDerivativesContext = async (params) => {
|
|
|
7595
7602
|
(0, import_indicators2.buildDerivativesContext)({
|
|
7596
7603
|
symbol,
|
|
7597
7604
|
direction: signal.direction,
|
|
7598
|
-
timestamp:
|
|
7599
|
-
rowsByInterval,
|
|
7605
|
+
timestamp: derivativesEndMs,
|
|
7606
|
+
rowsByInterval: withHourlyFallbackRows(rowsByInterval),
|
|
7600
7607
|
priceChangePct1h: getSignalPriceChangePct1h(signal),
|
|
7601
|
-
intervals
|
|
7608
|
+
intervals: CONTEXT_INTERVALS
|
|
7602
7609
|
})
|
|
7603
7610
|
];
|
|
7604
7611
|
})
|
|
@@ -7614,17 +7621,17 @@ var enrichSignalWithDerivativesContext = async (params) => {
|
|
|
7614
7621
|
const fetchedTargetContext = shouldFetchTargetContext ? await (async () => {
|
|
7615
7622
|
const rowsByInterval = await (0, import_timescale.getDerivativesWindow)({
|
|
7616
7623
|
symbol: targetSymbol,
|
|
7617
|
-
intervals,
|
|
7618
|
-
endMs:
|
|
7624
|
+
intervals: STORED_INTERVALS,
|
|
7625
|
+
endMs: derivativesEndMs,
|
|
7619
7626
|
lookbackMs
|
|
7620
7627
|
});
|
|
7621
7628
|
const context = (0, import_indicators2.buildDerivativesContext)({
|
|
7622
7629
|
symbol: targetSymbol,
|
|
7623
7630
|
direction: signal.direction,
|
|
7624
|
-
timestamp:
|
|
7625
|
-
rowsByInterval,
|
|
7631
|
+
timestamp: derivativesEndMs,
|
|
7632
|
+
rowsByInterval: withHourlyFallbackRows(rowsByInterval),
|
|
7626
7633
|
priceChangePct1h: getSignalPriceChangePct1h(signal),
|
|
7627
|
-
intervals
|
|
7634
|
+
intervals: CONTEXT_INTERVALS
|
|
7628
7635
|
});
|
|
7629
7636
|
return hasDerivativesSymbolData(context) ? context : void 0;
|
|
7630
7637
|
})() : void 0;
|
|
@@ -8985,7 +8992,7 @@ var resolveBacktestExecutionDelayMs = (value, fallbackDelayMs) => {
|
|
|
8985
8992
|
};
|
|
8986
8993
|
var safeIntervalToMs = (interval) => {
|
|
8987
8994
|
try {
|
|
8988
|
-
return (0,
|
|
8995
|
+
return (0, import_data2.intervalToMs)(interval);
|
|
8989
8996
|
} catch {
|
|
8990
8997
|
return null;
|
|
8991
8998
|
}
|
package/dist/strategies.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tradejs/node",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
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",
|
|
@@ -67,9 +67,9 @@
|
|
|
67
67
|
"dependencies": {
|
|
68
68
|
"@langchain/core": "^1.1.42",
|
|
69
69
|
"@langchain/openai": "^1.4.5",
|
|
70
|
-
"@tradejs/core": "^2.0.
|
|
71
|
-
"@tradejs/infra": "^2.0.
|
|
72
|
-
"@tradejs/types": "^2.0.
|
|
70
|
+
"@tradejs/core": "^2.0.2",
|
|
71
|
+
"@tradejs/infra": "^2.0.2",
|
|
72
|
+
"@tradejs/types": "^2.0.2",
|
|
73
73
|
"chalk": "4.1.2",
|
|
74
74
|
"ioredis": "5.8.0",
|
|
75
75
|
"pinets": "0.8.12",
|