@tradejs/core 1.0.6 → 1.0.8
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.d.mts +1 -1
- package/dist/backtest.d.ts +1 -1
- package/dist/backtest.js +5 -5
- package/dist/backtest.mjs +5 -5
- package/dist/{chunk-JE3ACOXJ.mjs → chunk-622V7IAT.mjs} +245 -10
- package/dist/{chunk-NQ7D3T4E.mjs → chunk-AJK4NS7Y.mjs} +2 -2
- package/dist/{chunk-KQQUP2YF.mjs → chunk-JLORHLL6.mjs} +10 -1
- package/dist/{chunk-BHIX34VS.mjs → chunk-PQETJ42A.mjs} +6 -2
- package/dist/config.d.mts +49 -2
- package/dist/config.d.ts +49 -2
- package/dist/config.js +40 -3
- package/dist/config.mjs +37 -2
- package/dist/constants.d.mts +5 -2
- package/dist/constants.d.ts +5 -2
- package/dist/constants.js +13 -1
- package/dist/constants.mjs +7 -1
- package/dist/indicators.d.mts +11 -2
- package/dist/indicators.d.ts +11 -2
- package/dist/indicators.js +244 -8
- package/dist/indicators.mjs +5 -3
- package/dist/strategies.d.mts +2 -0
- package/dist/strategies.d.ts +2 -0
- package/dist/strategies.js +48 -27
- package/dist/strategies.mjs +30 -21
- package/dist/{time-DEyFa2vI.d.mts → time-BMkFD4Kd.d.mts} +2 -1
- package/dist/{time-DEyFa2vI.d.ts → time-BMkFD4Kd.d.ts} +2 -1
- package/dist/time.d.mts +1 -1
- package/dist/time.d.ts +1 -1
- package/dist/time.js +9 -0
- package/dist/time.mjs +4 -2
- package/package.json +4 -5
package/dist/strategies.js
CHANGED
|
@@ -145,6 +145,13 @@ var calculateCoinBtcCorrelation = (coinCandles, btcCandles) => {
|
|
|
145
145
|
};
|
|
146
146
|
};
|
|
147
147
|
|
|
148
|
+
// src/utils/derivativesContext.ts
|
|
149
|
+
var HOUR_MS = 60 * 60 * 1e3;
|
|
150
|
+
var DEFAULT_STALE_AFTER_MS = {
|
|
151
|
+
"15m": 45 * 60 * 1e3,
|
|
152
|
+
"1h": 3 * HOUR_MS
|
|
153
|
+
};
|
|
154
|
+
|
|
148
155
|
// src/utils/indicators.ts
|
|
149
156
|
var import_technicalindicators = require("technicalindicators");
|
|
150
157
|
|
|
@@ -251,6 +258,17 @@ var DEFAULT_INDICATOR_PERIODS = {
|
|
|
251
258
|
levelLookback: 20,
|
|
252
259
|
levelDelay: 2
|
|
253
260
|
};
|
|
261
|
+
var resolveIndicatorPeriods = (periods = {}) => {
|
|
262
|
+
const resolved = {
|
|
263
|
+
...DEFAULT_INDICATOR_PERIODS
|
|
264
|
+
};
|
|
265
|
+
for (const [key, value] of Object.entries(periods)) {
|
|
266
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
267
|
+
resolved[key] = value;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return resolved;
|
|
271
|
+
};
|
|
254
272
|
var ONE_HOUR_MS = 36e5;
|
|
255
273
|
var ONE_DAY_MS = 864e5;
|
|
256
274
|
var toMlCandle = (candle) => ({
|
|
@@ -333,10 +351,7 @@ var createIndicators = (data, btcData = [], options = {}) => {
|
|
|
333
351
|
options.pluginRegistryScope
|
|
334
352
|
);
|
|
335
353
|
const includeMlPayload = options.includeMlPayload !== false;
|
|
336
|
-
const indicatorPeriods =
|
|
337
|
-
...DEFAULT_INDICATOR_PERIODS,
|
|
338
|
-
...options.periods || {}
|
|
339
|
-
};
|
|
354
|
+
const indicatorPeriods = resolveIndicatorPeriods(options.periods);
|
|
340
355
|
const closes = [];
|
|
341
356
|
const highs = [];
|
|
342
357
|
const lows = [];
|
|
@@ -665,10 +680,7 @@ var createIndicators = (data, btcData = [], options = {}) => {
|
|
|
665
680
|
};
|
|
666
681
|
var buildMlTimeframeIndicators = (candles, periods = {}) => {
|
|
667
682
|
const result = {};
|
|
668
|
-
const indicatorPeriods =
|
|
669
|
-
...DEFAULT_INDICATOR_PERIODS,
|
|
670
|
-
...periods
|
|
671
|
-
};
|
|
683
|
+
const indicatorPeriods = resolveIndicatorPeriods(periods);
|
|
672
684
|
for (const timeframe of INDICATOR_TIMEFRAMES) {
|
|
673
685
|
const tfCandles = resampleCandles(candles, timeframe.minutes);
|
|
674
686
|
if (tfCandles.length === 0) continue;
|
|
@@ -714,22 +726,29 @@ var getTimestamp = (days = 0) => {
|
|
|
714
726
|
};
|
|
715
727
|
|
|
716
728
|
// src/utils/strategyHelpers/indicators.ts
|
|
717
|
-
var buildDefaultIndicatorPeriods = (config) =>
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
729
|
+
var buildDefaultIndicatorPeriods = (config) => {
|
|
730
|
+
const periods = {};
|
|
731
|
+
const assignIfFinite = (key, value) => {
|
|
732
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
733
|
+
periods[key] = value;
|
|
734
|
+
}
|
|
735
|
+
};
|
|
736
|
+
assignIfFinite("maFast", config.MA_FAST);
|
|
737
|
+
assignIfFinite("maMedium", config.MA_MEDIUM);
|
|
738
|
+
assignIfFinite("maSlow", config.MA_SLOW);
|
|
739
|
+
assignIfFinite("obvSma", config.OBV_SMA);
|
|
740
|
+
assignIfFinite("atr", config.ATR);
|
|
741
|
+
assignIfFinite("atrPctShort", config.ATR_PCT_SHORT);
|
|
742
|
+
assignIfFinite("atrPctLong", config.ATR_PCT_LONG);
|
|
743
|
+
assignIfFinite("bb", config.BB);
|
|
744
|
+
assignIfFinite("bbStd", config.BB_STD);
|
|
745
|
+
assignIfFinite("macdFast", config.MACD_FAST);
|
|
746
|
+
assignIfFinite("macdSlow", config.MACD_SLOW);
|
|
747
|
+
assignIfFinite("macdSignal", config.MACD_SIGNAL);
|
|
748
|
+
assignIfFinite("levelLookback", config.LEVEL_LOOKBACK);
|
|
749
|
+
assignIfFinite("levelDelay", config.LEVEL_DELAY);
|
|
750
|
+
return periods;
|
|
751
|
+
};
|
|
733
752
|
var createStrategyIndicatorsState = ({
|
|
734
753
|
env,
|
|
735
754
|
data,
|
|
@@ -808,7 +827,7 @@ var getStrategyMarketSnapshot = async ({
|
|
|
808
827
|
preloadStart,
|
|
809
828
|
backtestPriceMode = "mid"
|
|
810
829
|
}) => {
|
|
811
|
-
const fullData = env === "BACKTEST" ? cachedData : await connector.kline({
|
|
830
|
+
const fullData = env === "BACKTEST" || env === "CRON" ? cachedData : await connector.kline({
|
|
812
831
|
symbol,
|
|
813
832
|
start: preloadStart,
|
|
814
833
|
end: getTimestamp(),
|
|
@@ -897,16 +916,18 @@ var createLastTradeController = ({
|
|
|
897
916
|
};
|
|
898
917
|
|
|
899
918
|
// src/utils/uuid.ts
|
|
900
|
-
var
|
|
919
|
+
var import_node_crypto = require("crypto");
|
|
901
920
|
var uuid = (len = 12) => {
|
|
902
|
-
const uuid2 = (0,
|
|
921
|
+
const uuid2 = (0, import_node_crypto.randomUUID)();
|
|
903
922
|
return uuid2.slice(-len);
|
|
904
923
|
};
|
|
905
924
|
|
|
906
925
|
// src/utils/strategyHelpers/signalBuilders.ts
|
|
907
926
|
var mapAiRuntimeFromConfig = (config, overrides = {}) => ({
|
|
908
927
|
enabled: Boolean(config.AI_ENABLED ?? true),
|
|
928
|
+
mode: config.AI_MODE ?? "llm",
|
|
909
929
|
minQuality: Number(config.MIN_AI_QUALITY ?? 4),
|
|
930
|
+
replayAnalyses: config.AI_REPLAY_ANALYSES,
|
|
910
931
|
...overrides
|
|
911
932
|
});
|
|
912
933
|
var mapMlRuntimeFromConfig = (config, overrides = {}) => ({
|
package/dist/strategies.mjs
CHANGED
|
@@ -1,35 +1,42 @@
|
|
|
1
1
|
import {
|
|
2
2
|
uuid
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-AJK4NS7Y.mjs";
|
|
4
4
|
import {
|
|
5
5
|
createIndicators
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-622V7IAT.mjs";
|
|
7
7
|
import "./chunk-AYC2QVKI.mjs";
|
|
8
8
|
import {
|
|
9
9
|
getTimestamp
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-PQETJ42A.mjs";
|
|
11
11
|
import {
|
|
12
12
|
FEE_PERCENT
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-JLORHLL6.mjs";
|
|
14
14
|
import "./chunk-M7QGVZ3J.mjs";
|
|
15
15
|
|
|
16
16
|
// src/utils/strategyHelpers/indicators.ts
|
|
17
|
-
var buildDefaultIndicatorPeriods = (config) =>
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
17
|
+
var buildDefaultIndicatorPeriods = (config) => {
|
|
18
|
+
const periods = {};
|
|
19
|
+
const assignIfFinite = (key, value) => {
|
|
20
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
21
|
+
periods[key] = value;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
assignIfFinite("maFast", config.MA_FAST);
|
|
25
|
+
assignIfFinite("maMedium", config.MA_MEDIUM);
|
|
26
|
+
assignIfFinite("maSlow", config.MA_SLOW);
|
|
27
|
+
assignIfFinite("obvSma", config.OBV_SMA);
|
|
28
|
+
assignIfFinite("atr", config.ATR);
|
|
29
|
+
assignIfFinite("atrPctShort", config.ATR_PCT_SHORT);
|
|
30
|
+
assignIfFinite("atrPctLong", config.ATR_PCT_LONG);
|
|
31
|
+
assignIfFinite("bb", config.BB);
|
|
32
|
+
assignIfFinite("bbStd", config.BB_STD);
|
|
33
|
+
assignIfFinite("macdFast", config.MACD_FAST);
|
|
34
|
+
assignIfFinite("macdSlow", config.MACD_SLOW);
|
|
35
|
+
assignIfFinite("macdSignal", config.MACD_SIGNAL);
|
|
36
|
+
assignIfFinite("levelLookback", config.LEVEL_LOOKBACK);
|
|
37
|
+
assignIfFinite("levelDelay", config.LEVEL_DELAY);
|
|
38
|
+
return periods;
|
|
39
|
+
};
|
|
33
40
|
var createStrategyIndicatorsState = ({
|
|
34
41
|
env,
|
|
35
42
|
data,
|
|
@@ -108,7 +115,7 @@ var getStrategyMarketSnapshot = async ({
|
|
|
108
115
|
preloadStart,
|
|
109
116
|
backtestPriceMode = "mid"
|
|
110
117
|
}) => {
|
|
111
|
-
const fullData = env === "BACKTEST" ? cachedData : await connector.kline({
|
|
118
|
+
const fullData = env === "BACKTEST" || env === "CRON" ? cachedData : await connector.kline({
|
|
112
119
|
symbol,
|
|
113
120
|
start: preloadStart,
|
|
114
121
|
end: getTimestamp(),
|
|
@@ -199,7 +206,9 @@ var createLastTradeController = ({
|
|
|
199
206
|
// src/utils/strategyHelpers/signalBuilders.ts
|
|
200
207
|
var mapAiRuntimeFromConfig = (config, overrides = {}) => ({
|
|
201
208
|
enabled: Boolean(config.AI_ENABLED ?? true),
|
|
209
|
+
mode: config.AI_MODE ?? "llm",
|
|
202
210
|
minQuality: Number(config.MIN_AI_QUALITY ?? 4),
|
|
211
|
+
replayAnalyses: config.AI_REPLAY_ANALYSES,
|
|
203
212
|
...overrides
|
|
204
213
|
});
|
|
205
214
|
var mapMlRuntimeFromConfig = (config, overrides = {}) => ({
|
|
@@ -5,7 +5,8 @@ declare const getTimestamp: (days?: number) => number;
|
|
|
5
5
|
declare const getItemTimestamp: (item: KlineChartItem) => number;
|
|
6
6
|
declare const getDataTimestamp: (data: KlineChartData) => number | null;
|
|
7
7
|
declare const formatUnix: (dt: number) => string;
|
|
8
|
+
declare const getBacktestPreloadStart: (start: number, preloadDays?: number) => number;
|
|
8
9
|
declare const getTimeline: (start?: number, end?: number, step?: number) => number[];
|
|
9
10
|
declare const compactOrderLog: (timeline: number[], orderLog: OrderLogData) => SimpleOrderLogData;
|
|
10
11
|
|
|
11
|
-
export {
|
|
12
|
+
export { getBacktestPreloadStart as a, getDataTimestamp as b, compactOrderLog as c, getItemTimestamp as d, getTimestamp as e, formatUnix as f, getTimeline as g, toMs as t };
|
|
@@ -5,7 +5,8 @@ declare const getTimestamp: (days?: number) => number;
|
|
|
5
5
|
declare const getItemTimestamp: (item: KlineChartItem) => number;
|
|
6
6
|
declare const getDataTimestamp: (data: KlineChartData) => number | null;
|
|
7
7
|
declare const formatUnix: (dt: number) => string;
|
|
8
|
+
declare const getBacktestPreloadStart: (start: number, preloadDays?: number) => number;
|
|
8
9
|
declare const getTimeline: (start?: number, end?: number, step?: number) => number[];
|
|
9
10
|
declare const compactOrderLog: (timeline: number[], orderLog: OrderLogData) => SimpleOrderLogData;
|
|
10
11
|
|
|
11
|
-
export {
|
|
12
|
+
export { getBacktestPreloadStart as a, getDataTimestamp as b, compactOrderLog as c, getItemTimestamp as d, getTimestamp as e, formatUnix as f, getTimeline as g, toMs as t };
|
package/dist/time.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { f as formatUnix, a as
|
|
1
|
+
export { f as formatUnix, a as getBacktestPreloadStart, b as getDataTimestamp, d as getItemTimestamp, e as getTimestamp, t as toMs } from './time-BMkFD4Kd.mjs';
|
|
2
2
|
import '@tradejs/types';
|
package/dist/time.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { f as formatUnix, a as
|
|
1
|
+
export { f as formatUnix, a as getBacktestPreloadStart, b as getDataTimestamp, d as getItemTimestamp, e as getTimestamp, t as toMs } from './time-BMkFD4Kd.js';
|
|
2
2
|
import '@tradejs/types';
|
package/dist/time.js
CHANGED
|
@@ -21,6 +21,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var time_exports = {};
|
|
22
22
|
__export(time_exports, {
|
|
23
23
|
formatUnix: () => formatUnix,
|
|
24
|
+
getBacktestPreloadStart: () => getBacktestPreloadStart,
|
|
24
25
|
getDataTimestamp: () => getDataTimestamp,
|
|
25
26
|
getItemTimestamp: () => getItemTimestamp,
|
|
26
27
|
getTimestamp: () => getTimestamp,
|
|
@@ -31,6 +32,12 @@ module.exports = __toCommonJS(time_exports);
|
|
|
31
32
|
// src/utils/timestamp.ts
|
|
32
33
|
var import_date_fns = require("date-fns");
|
|
33
34
|
var import_date_fns2 = require("date-fns");
|
|
35
|
+
|
|
36
|
+
// src/constants/index.ts
|
|
37
|
+
var BACKTEST_PRELOAD_DAYS = 60;
|
|
38
|
+
|
|
39
|
+
// src/utils/timestamp.ts
|
|
40
|
+
var DAY_MS = 864e5;
|
|
34
41
|
var toMs = (ts) => ts < 1e12 ? ts * 1e3 : ts;
|
|
35
42
|
var getTimestamp = (days = 0) => {
|
|
36
43
|
if (days > 0) {
|
|
@@ -48,9 +55,11 @@ var getDataTimestamp = (data) => {
|
|
|
48
55
|
var formatUnix = (dt) => {
|
|
49
56
|
return (0, import_date_fns.format)(new Date(dt), "d MMM u HH:mm:ss");
|
|
50
57
|
};
|
|
58
|
+
var getBacktestPreloadStart = (start, preloadDays = BACKTEST_PRELOAD_DAYS) => Math.max(0, Math.trunc(start - preloadDays * DAY_MS));
|
|
51
59
|
// Annotate the CommonJS export names for ESM import in node:
|
|
52
60
|
0 && (module.exports = {
|
|
53
61
|
formatUnix,
|
|
62
|
+
getBacktestPreloadStart,
|
|
54
63
|
getDataTimestamp,
|
|
55
64
|
getItemTimestamp,
|
|
56
65
|
getTimestamp,
|
package/dist/time.mjs
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
formatUnix,
|
|
3
|
+
getBacktestPreloadStart,
|
|
3
4
|
getDataTimestamp,
|
|
4
5
|
getItemTimestamp,
|
|
5
6
|
getTimestamp,
|
|
6
7
|
toMs
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-PQETJ42A.mjs";
|
|
9
|
+
import "./chunk-JLORHLL6.mjs";
|
|
9
10
|
export {
|
|
10
11
|
formatUnix,
|
|
12
|
+
getBacktestPreloadStart,
|
|
11
13
|
getDataTimestamp,
|
|
12
14
|
getItemTimestamp,
|
|
13
15
|
getTimestamp,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tradejs/core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "Browser-safe public API for the TradeJS open-source framework: config, strategy authoring, indicators, figures, and shared helpers.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"tradejs",
|
|
@@ -86,12 +86,11 @@
|
|
|
86
86
|
}
|
|
87
87
|
},
|
|
88
88
|
"dependencies": {
|
|
89
|
-
"@tradejs/types": "^1.0.
|
|
89
|
+
"@tradejs/types": "^1.0.8",
|
|
90
90
|
"date-fns": "^3.3.1",
|
|
91
91
|
"klinecharts": "10.0.0-alpha9",
|
|
92
|
-
"lodash": "^4.
|
|
93
|
-
"technicalindicators": "^3.1.0"
|
|
94
|
-
"uuid": "11.1.0"
|
|
92
|
+
"lodash": "^4.18.1",
|
|
93
|
+
"technicalindicators": "^3.1.0"
|
|
95
94
|
},
|
|
96
95
|
"devDependencies": {
|
|
97
96
|
"tsup": "^8.5.1",
|