@tradejs/core 1.0.6 → 1.0.9

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.
@@ -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
- maFast: config.MA_FAST,
719
- maMedium: config.MA_MEDIUM,
720
- maSlow: config.MA_SLOW,
721
- obvSma: config.OBV_SMA,
722
- atr: config.ATR,
723
- atrPctShort: config.ATR_PCT_SHORT,
724
- atrPctLong: config.ATR_PCT_LONG,
725
- bb: config.BB,
726
- bbStd: config.BB_STD,
727
- macdFast: config.MACD_FAST,
728
- macdSlow: config.MACD_SLOW,
729
- macdSignal: config.MACD_SIGNAL,
730
- levelLookback: config.LEVEL_LOOKBACK,
731
- levelDelay: config.LEVEL_DELAY
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 import_uuid = require("uuid");
919
+ var import_node_crypto = require("crypto");
901
920
  var uuid = (len = 12) => {
902
- const uuid2 = (0, import_uuid.v4)();
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 = {}) => ({
@@ -1,35 +1,42 @@
1
1
  import {
2
2
  uuid
3
- } from "./chunk-NQ7D3T4E.mjs";
3
+ } from "./chunk-AJK4NS7Y.mjs";
4
4
  import {
5
5
  createIndicators
6
- } from "./chunk-JE3ACOXJ.mjs";
6
+ } from "./chunk-UK6VTOUX.mjs";
7
7
  import "./chunk-AYC2QVKI.mjs";
8
8
  import {
9
9
  getTimestamp
10
- } from "./chunk-BHIX34VS.mjs";
10
+ } from "./chunk-FNLPYYML.mjs";
11
11
  import {
12
12
  FEE_PERCENT
13
- } from "./chunk-KQQUP2YF.mjs";
13
+ } from "./chunk-2ORZC66W.mjs";
14
14
  import "./chunk-M7QGVZ3J.mjs";
15
15
 
16
16
  // src/utils/strategyHelpers/indicators.ts
17
- var buildDefaultIndicatorPeriods = (config) => ({
18
- maFast: config.MA_FAST,
19
- maMedium: config.MA_MEDIUM,
20
- maSlow: config.MA_SLOW,
21
- obvSma: config.OBV_SMA,
22
- atr: config.ATR,
23
- atrPctShort: config.ATR_PCT_SHORT,
24
- atrPctLong: config.ATR_PCT_LONG,
25
- bb: config.BB,
26
- bbStd: config.BB_STD,
27
- macdFast: config.MACD_FAST,
28
- macdSlow: config.MACD_SLOW,
29
- macdSignal: config.MACD_SIGNAL,
30
- levelLookback: config.LEVEL_LOOKBACK,
31
- levelDelay: config.LEVEL_DELAY
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 { getDataTimestamp as a, getItemTimestamp as b, compactOrderLog as c, getTimestamp as d, formatUnix as f, getTimeline as g, toMs as t };
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 { getDataTimestamp as a, getItemTimestamp as b, compactOrderLog as c, getTimestamp as d, formatUnix as f, getTimeline as g, toMs as t };
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 getDataTimestamp, b as getItemTimestamp, d as getTimestamp, t as toMs } from './time-DEyFa2vI.mjs';
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 getDataTimestamp, b as getItemTimestamp, d as getTimestamp, t as toMs } from './time-DEyFa2vI.js';
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-BHIX34VS.mjs";
8
- import "./chunk-KQQUP2YF.mjs";
8
+ } from "./chunk-FNLPYYML.mjs";
9
+ import "./chunk-2ORZC66W.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.6",
3
+ "version": "1.0.9",
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.6",
89
+ "@tradejs/types": "^1.0.9",
90
90
  "date-fns": "^3.3.1",
91
91
  "klinecharts": "10.0.0-alpha9",
92
- "lodash": "^4.17.21",
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",