@tradejs/core 1.0.8 → 1.0.10

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.
Files changed (41) hide show
  1. package/dist/backtest.d.mts +109 -9
  2. package/dist/backtest.d.ts +109 -9
  3. package/dist/backtest.js +487 -145
  4. package/dist/backtest.mjs +414 -82
  5. package/dist/chunk-7P2KNFD4.mjs +11847 -0
  6. package/dist/{chunk-JLORHLL6.mjs → chunk-DXJ4NCFJ.mjs} +65 -6
  7. package/dist/chunk-OJPHC3S2.mjs +8 -0
  8. package/dist/{chunk-PQETJ42A.mjs → chunk-PNBS6J3G.mjs} +22 -1
  9. package/dist/constants.d.mts +26 -5
  10. package/dist/constants.d.ts +26 -5
  11. package/dist/constants.js +81 -9
  12. package/dist/constants.mjs +31 -5
  13. package/dist/data.mjs +3 -5
  14. package/dist/grid.d.mts +9 -0
  15. package/dist/grid.d.ts +9 -0
  16. package/dist/grid.js +168 -0
  17. package/dist/grid.mjs +98 -0
  18. package/dist/indicators-Da_i06-8.d.mts +288 -0
  19. package/dist/indicators-Da_i06-8.d.ts +288 -0
  20. package/dist/indicators.d.mts +4 -39
  21. package/dist/indicators.d.ts +4 -39
  22. package/dist/indicators.js +10488 -423
  23. package/dist/indicators.mjs +11 -3
  24. package/dist/strategies.d.mts +31 -12
  25. package/dist/strategies.d.ts +31 -12
  26. package/dist/strategies.js +11283 -336
  27. package/dist/strategies.mjs +1246 -119
  28. package/dist/{time-BMkFD4Kd.d.mts → time-BQ3AXmxo.d.mts} +3 -1
  29. package/dist/{time-BMkFD4Kd.d.ts → time-BQ3AXmxo.d.ts} +3 -1
  30. package/dist/time.d.mts +1 -1
  31. package/dist/time.d.ts +1 -1
  32. package/dist/time.js +38 -0
  33. package/dist/time.mjs +6 -2
  34. package/dist/trade.d.mts +54 -0
  35. package/dist/trade.d.ts +54 -0
  36. package/dist/trade.js +352 -0
  37. package/dist/trade.mjs +264 -0
  38. package/package.json +19 -5
  39. package/dist/chunk-622V7IAT.mjs +0 -1810
  40. package/dist/indicators-B-GGjP5F.d.mts +0 -65
  41. package/dist/indicators-B-GGjP5F.d.ts +0 -65
@@ -1,10 +1,20 @@
1
1
  // src/constants/index.ts
2
- var FEE_PERCENT = 5e-3;
2
+ var FEE_PERCENT = 1e-3;
3
+ var BACKTEST_BASE_SLIPPAGE_BPS = 10;
4
+ var BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER = 1;
5
+ var BACKTEST_MARKET_IMPACT_BPS = 0;
6
+ var BACKTEST_DELAY_RISK_LOOKBACK_CANDLES = 5;
7
+ var BACKTEST_DELAY_RISK_MULTIPLIER = 0;
8
+ var BACKTEST_DELAY_RISK_MAX_BPS = 0;
9
+ var BACKTEST_EXPECTED_DELAY_MS = 0;
10
+ var BACKTEST_EXECUTION_INTERVAL = "5";
11
+ var BACKTEST_EXECUTION_DELAY_MS = 5 * 6e4;
12
+ var INITIAL_BACKTEST_AMOUNT = 100;
3
13
  var CORRELATION_WINDOW = 50;
4
14
  var SPREAD_WINDOW = 50;
5
15
  var PRELOAD_DAYS = 200;
6
16
  var SIGNALS_PRELOAD_DAYS = 60;
7
- var SIGNALS_CLI_PRELOAD_DAYS = 10;
17
+ var SIGNALS_CLI_PRELOAD_DAYS = 60;
8
18
  var BACKTEST_DEFAULT_DAYS = 160;
9
19
  var BACKTEST_PRELOAD_DAYS = 60;
10
20
  var DASHBOARD_PRELOAD_DAYS = 160;
@@ -15,24 +25,59 @@ var TTL_3H = 10800;
15
25
  var TTL_12H = 43300;
16
26
  var TTL_1D = 86400;
17
27
  var TTL_3D = 259200;
28
+ var TTL_10D = 864e3;
18
29
  var TTL_1M = 26e5;
19
30
  var TTL_3M = 78e5;
20
31
  var TESTS_TOP_LIMIT = 50;
21
32
  var TESTS_LIMIT = 1e5;
22
33
  var TESTS_ORDERS_MIN_LIMIT = 3;
23
- var MARKET_CATEGORY = "linear";
24
34
  var ML_CANDLE_FEATURE_WINDOW = 50;
25
35
  var ML_BASE_CANDLES_WINDOW = 50;
26
- var DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS = [
36
+ var DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS = [
27
37
  "BTCUSDT",
28
38
  "ETHUSDT"
29
39
  ];
40
+ var DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS = [
41
+ "BNBUSDT",
42
+ "SOLUSDT",
43
+ "TRXUSDT",
44
+ "XRPUSDT"
45
+ ];
46
+ var DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS = [
47
+ ...DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
48
+ ...DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS
49
+ ];
50
+ var parseDerivativesReferenceSymbolList = (value) => String(value ?? "").split(",").map((item) => item.trim().toUpperCase()).filter(Boolean);
51
+ var normalizeDerivativesReferenceSymbol = (value) => {
52
+ const compact = value.replace(/[^A-Z0-9]/g, "");
53
+ if (!compact) return null;
54
+ return compact.endsWith("USDT") ? compact : `${compact}USDT`;
55
+ };
56
+ var resolveDerivativesContextReferenceSymbols = (extraReferenceSymbols) => {
57
+ const extras = extraReferenceSymbols === void 0 ? [...DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS] : parseDerivativesReferenceSymbolList(extraReferenceSymbols);
58
+ const symbols = [
59
+ ...DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
60
+ ...extras
61
+ ].flatMap((symbol) => {
62
+ const normalized = normalizeDerivativesReferenceSymbol(String(symbol));
63
+ return normalized ? [normalized] : [];
64
+ });
65
+ return [...new Set(symbols)];
66
+ };
30
67
  var TRENDLINE_DEFAULTS = {
31
68
  maxLines: 20,
32
69
  range: 15,
33
70
  firstRange: 80,
34
71
  epsilon: 3e-3,
35
72
  epsilonOffset: 5e-3,
73
+ epsilonMode: "static",
74
+ epsilonAtrPeriod: 14,
75
+ epsilonAtrMultiplier: 0.45,
76
+ epsilonOffsetAtrMultiplier: 0.5,
77
+ epsilonMin: 0,
78
+ epsilonMax: 0,
79
+ epsilonOffsetMin: 0,
80
+ epsilonOffsetMax: 0,
36
81
  minTouches: 4,
37
82
  minDistance: 50,
38
83
  minTouchGap: 15,
@@ -100,9 +145,10 @@ var TestThresholdsConfig = {
100
145
  precision: 2
101
146
  },
102
147
  netProfit: {
103
- thresholds: [5, 20],
148
+ thresholds: [0, 0],
104
149
  direction: "higher",
105
150
  isAmount: true,
151
+ neutralValue: 0,
106
152
  precision: 2
107
153
  },
108
154
  totalReturn: {
@@ -172,6 +218,16 @@ var TestThresholdsConfig = {
172
218
 
173
219
  export {
174
220
  FEE_PERCENT,
221
+ BACKTEST_BASE_SLIPPAGE_BPS,
222
+ BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER,
223
+ BACKTEST_MARKET_IMPACT_BPS,
224
+ BACKTEST_DELAY_RISK_LOOKBACK_CANDLES,
225
+ BACKTEST_DELAY_RISK_MULTIPLIER,
226
+ BACKTEST_DELAY_RISK_MAX_BPS,
227
+ BACKTEST_EXPECTED_DELAY_MS,
228
+ BACKTEST_EXECUTION_INTERVAL,
229
+ BACKTEST_EXECUTION_DELAY_MS,
230
+ INITIAL_BACKTEST_AMOUNT,
175
231
  CORRELATION_WINDOW,
176
232
  SPREAD_WINDOW,
177
233
  PRELOAD_DAYS,
@@ -187,15 +243,18 @@ export {
187
243
  TTL_12H,
188
244
  TTL_1D,
189
245
  TTL_3D,
246
+ TTL_10D,
190
247
  TTL_1M,
191
248
  TTL_3M,
192
249
  TESTS_TOP_LIMIT,
193
250
  TESTS_LIMIT,
194
251
  TESTS_ORDERS_MIN_LIMIT,
195
- MARKET_CATEGORY,
196
252
  ML_CANDLE_FEATURE_WINDOW,
197
253
  ML_BASE_CANDLES_WINDOW,
254
+ DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
255
+ DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS,
198
256
  DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS,
257
+ resolveDerivativesContextReferenceSymbols,
199
258
  TRENDLINE_DEFAULTS,
200
259
  TestThresholdsConfig
201
260
  };
@@ -0,0 +1,8 @@
1
+ // src/utils/toJson.ts
2
+ var toJson = (data, stringify = false) => {
3
+ return stringify ? JSON.stringify(data, null, 2) : JSON.stringify(data);
4
+ };
5
+
6
+ export {
7
+ toJson
8
+ };
@@ -1,13 +1,14 @@
1
1
  import {
2
2
  BACKTEST_DEFAULT_DAYS,
3
3
  BACKTEST_PRELOAD_DAYS
4
- } from "./chunk-JLORHLL6.mjs";
4
+ } from "./chunk-DXJ4NCFJ.mjs";
5
5
 
6
6
  // src/utils/timestamp.ts
7
7
  import { format } from "date-fns";
8
8
  import { getUnixTime, subDays } from "date-fns";
9
9
  var TIMELINE_STEP = 864e5;
10
10
  var DAY_MS = 864e5;
11
+ var RUNTIME_STORAGE_DAY_OFFSET_MS = 6 * 60 * 60 * 1e3;
11
12
  var toMs = (ts) => ts < 1e12 ? ts * 1e3 : ts;
12
13
  var getTimestamp = (days = 0) => {
13
14
  if (days > 0) {
@@ -33,6 +34,24 @@ var getTimeline = (start = getTimestamp(BACKTEST_DEFAULT_DAYS), end = getTimesta
33
34
  }
34
35
  return res;
35
36
  };
37
+ var toIsoDayKey = (timestamp) => new Date(timestamp).toISOString().slice(0, 10);
38
+ var toRuntimeStorageDayTimestamp = (timestamp) => Math.floor((timestamp + RUNTIME_STORAGE_DAY_OFFSET_MS) / DAY_MS) * DAY_MS;
39
+ var getRuntimeStorageDayKey = (timestamp) => toIsoDayKey(toRuntimeStorageDayTimestamp(timestamp));
40
+ var getRuntimeStorageDayKeys = (startTime, endTime) => {
41
+ if (!Number.isFinite(startTime) || !Number.isFinite(endTime)) {
42
+ return [];
43
+ }
44
+ const start = Math.min(startTime, endTime);
45
+ const endExclusive = Math.max(startTime, endTime);
46
+ const normalizedEnd = Math.max(start, endExclusive - 1);
47
+ const keys = [];
48
+ const startDay = toRuntimeStorageDayTimestamp(start);
49
+ const endDay = toRuntimeStorageDayTimestamp(normalizedEnd);
50
+ for (let current = startDay; current <= endDay; current += DAY_MS) {
51
+ keys.push(toIsoDayKey(current));
52
+ }
53
+ return keys;
54
+ };
36
55
  var compactOrderLog = (timeline, orderLog) => {
37
56
  const result = [];
38
57
  let currentAmount = orderLog.length > 0 && orderLog[0].amount != null ? orderLog[0].amount : 100;
@@ -67,5 +86,7 @@ export {
67
86
  formatUnix,
68
87
  getBacktestPreloadStart,
69
88
  getTimeline,
89
+ getRuntimeStorageDayKey,
90
+ getRuntimeStorageDayKeys,
70
91
  compactOrderLog
71
92
  };
@@ -1,11 +1,21 @@
1
1
  import { TestThresholds } from '@tradejs/types';
2
2
 
3
- declare const FEE_PERCENT = 0.005;
3
+ declare const FEE_PERCENT = 0.001;
4
+ declare const BACKTEST_BASE_SLIPPAGE_BPS = 10;
5
+ declare const BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER = 1;
6
+ declare const BACKTEST_MARKET_IMPACT_BPS = 0;
7
+ declare const BACKTEST_DELAY_RISK_LOOKBACK_CANDLES = 5;
8
+ declare const BACKTEST_DELAY_RISK_MULTIPLIER = 0;
9
+ declare const BACKTEST_DELAY_RISK_MAX_BPS = 0;
10
+ declare const BACKTEST_EXPECTED_DELAY_MS = 0;
11
+ declare const BACKTEST_EXECUTION_INTERVAL = "5";
12
+ declare const BACKTEST_EXECUTION_DELAY_MS: number;
13
+ declare const INITIAL_BACKTEST_AMOUNT = 100;
4
14
  declare const CORRELATION_WINDOW = 50;
5
15
  declare const SPREAD_WINDOW = 50;
6
16
  declare const PRELOAD_DAYS = 200;
7
17
  declare const SIGNALS_PRELOAD_DAYS = 60;
8
- declare const SIGNALS_CLI_PRELOAD_DAYS = 10;
18
+ declare const SIGNALS_CLI_PRELOAD_DAYS = 60;
9
19
  declare const BACKTEST_DEFAULT_DAYS = 160;
10
20
  declare const BACKTEST_PRELOAD_DAYS = 60;
11
21
  declare const DASHBOARD_PRELOAD_DAYS = 160;
@@ -16,21 +26,32 @@ declare const TTL_3H = 10800;
16
26
  declare const TTL_12H = 43300;
17
27
  declare const TTL_1D = 86400;
18
28
  declare const TTL_3D = 259200;
29
+ declare const TTL_10D = 864000;
19
30
  declare const TTL_1M = 2600000;
20
31
  declare const TTL_3M = 7800000;
21
32
  declare const TESTS_TOP_LIMIT = 50;
22
33
  declare const TESTS_LIMIT = 100000;
23
34
  declare const TESTS_ORDERS_MIN_LIMIT = 3;
24
- declare const MARKET_CATEGORY = "linear";
25
35
  declare const ML_CANDLE_FEATURE_WINDOW = 50;
26
36
  declare const ML_BASE_CANDLES_WINDOW = 50;
27
- declare const DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS: readonly ["BTCUSDT", "ETHUSDT"];
37
+ declare const DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS: readonly ["BTCUSDT", "ETHUSDT"];
38
+ declare const DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS: readonly ["BNBUSDT", "SOLUSDT", "TRXUSDT", "XRPUSDT"];
39
+ declare const DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS: readonly ["BTCUSDT", "ETHUSDT", "BNBUSDT", "SOLUSDT", "TRXUSDT", "XRPUSDT"];
40
+ declare const resolveDerivativesContextReferenceSymbols: (extraReferenceSymbols?: unknown) => string[];
28
41
  declare const TRENDLINE_DEFAULTS: {
29
42
  maxLines: number;
30
43
  range: number;
31
44
  firstRange: number;
32
45
  epsilon: number;
33
46
  epsilonOffset: number;
47
+ epsilonMode: "static";
48
+ epsilonAtrPeriod: number;
49
+ epsilonAtrMultiplier: number;
50
+ epsilonOffsetAtrMultiplier: number;
51
+ epsilonMin: number;
52
+ epsilonMax: number;
53
+ epsilonOffsetMin: number;
54
+ epsilonOffsetMax: number;
34
55
  minTouches: number;
35
56
  minDistance: number;
36
57
  minTouchGap: number;
@@ -42,4 +63,4 @@ declare const TRENDLINE_DEFAULTS: {
42
63
  };
43
64
  declare const TestThresholdsConfig: TestThresholds;
44
65
 
45
- export { BACKTEST_DEFAULT_DAYS, BACKTEST_PRELOAD_DAYS, BOT_PRELOAD_DAYS, CORRELATION_WINDOW, DASHBOARD_PRELOAD_DAYS, DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS, FEE_PERCENT, MARKET_CATEGORY, ML_BASE_CANDLES_WINDOW, ML_CANDLE_FEATURE_WINDOW, PRELOAD_DAYS, PRELOAD_FALLBACK_DAYS, SIGNALS_CLI_PRELOAD_DAYS, SIGNALS_PRELOAD_DAYS, SPREAD_WINDOW, TESTS_LIMIT, TESTS_ORDERS_MIN_LIMIT, TESTS_TOP_LIMIT, TRENDLINE_DEFAULTS, TTL_12H, TTL_1D, TTL_1H, TTL_1M, TTL_3D, TTL_3H, TTL_3M, TestThresholdsConfig };
66
+ export { BACKTEST_BASE_SLIPPAGE_BPS, BACKTEST_DEFAULT_DAYS, BACKTEST_DELAY_RISK_LOOKBACK_CANDLES, BACKTEST_DELAY_RISK_MAX_BPS, BACKTEST_DELAY_RISK_MULTIPLIER, BACKTEST_EXECUTION_DELAY_MS, BACKTEST_EXECUTION_INTERVAL, BACKTEST_EXPECTED_DELAY_MS, BACKTEST_MARKET_IMPACT_BPS, BACKTEST_PRELOAD_DAYS, BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER, BOT_PRELOAD_DAYS, CORRELATION_WINDOW, DASHBOARD_PRELOAD_DAYS, DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS, DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS, DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS, FEE_PERCENT, INITIAL_BACKTEST_AMOUNT, ML_BASE_CANDLES_WINDOW, ML_CANDLE_FEATURE_WINDOW, PRELOAD_DAYS, PRELOAD_FALLBACK_DAYS, SIGNALS_CLI_PRELOAD_DAYS, SIGNALS_PRELOAD_DAYS, SPREAD_WINDOW, TESTS_LIMIT, TESTS_ORDERS_MIN_LIMIT, TESTS_TOP_LIMIT, TRENDLINE_DEFAULTS, TTL_10D, TTL_12H, TTL_1D, TTL_1H, TTL_1M, TTL_3D, TTL_3H, TTL_3M, TestThresholdsConfig, resolveDerivativesContextReferenceSymbols };
@@ -1,11 +1,21 @@
1
1
  import { TestThresholds } from '@tradejs/types';
2
2
 
3
- declare const FEE_PERCENT = 0.005;
3
+ declare const FEE_PERCENT = 0.001;
4
+ declare const BACKTEST_BASE_SLIPPAGE_BPS = 10;
5
+ declare const BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER = 1;
6
+ declare const BACKTEST_MARKET_IMPACT_BPS = 0;
7
+ declare const BACKTEST_DELAY_RISK_LOOKBACK_CANDLES = 5;
8
+ declare const BACKTEST_DELAY_RISK_MULTIPLIER = 0;
9
+ declare const BACKTEST_DELAY_RISK_MAX_BPS = 0;
10
+ declare const BACKTEST_EXPECTED_DELAY_MS = 0;
11
+ declare const BACKTEST_EXECUTION_INTERVAL = "5";
12
+ declare const BACKTEST_EXECUTION_DELAY_MS: number;
13
+ declare const INITIAL_BACKTEST_AMOUNT = 100;
4
14
  declare const CORRELATION_WINDOW = 50;
5
15
  declare const SPREAD_WINDOW = 50;
6
16
  declare const PRELOAD_DAYS = 200;
7
17
  declare const SIGNALS_PRELOAD_DAYS = 60;
8
- declare const SIGNALS_CLI_PRELOAD_DAYS = 10;
18
+ declare const SIGNALS_CLI_PRELOAD_DAYS = 60;
9
19
  declare const BACKTEST_DEFAULT_DAYS = 160;
10
20
  declare const BACKTEST_PRELOAD_DAYS = 60;
11
21
  declare const DASHBOARD_PRELOAD_DAYS = 160;
@@ -16,21 +26,32 @@ declare const TTL_3H = 10800;
16
26
  declare const TTL_12H = 43300;
17
27
  declare const TTL_1D = 86400;
18
28
  declare const TTL_3D = 259200;
29
+ declare const TTL_10D = 864000;
19
30
  declare const TTL_1M = 2600000;
20
31
  declare const TTL_3M = 7800000;
21
32
  declare const TESTS_TOP_LIMIT = 50;
22
33
  declare const TESTS_LIMIT = 100000;
23
34
  declare const TESTS_ORDERS_MIN_LIMIT = 3;
24
- declare const MARKET_CATEGORY = "linear";
25
35
  declare const ML_CANDLE_FEATURE_WINDOW = 50;
26
36
  declare const ML_BASE_CANDLES_WINDOW = 50;
27
- declare const DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS: readonly ["BTCUSDT", "ETHUSDT"];
37
+ declare const DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS: readonly ["BTCUSDT", "ETHUSDT"];
38
+ declare const DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS: readonly ["BNBUSDT", "SOLUSDT", "TRXUSDT", "XRPUSDT"];
39
+ declare const DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS: readonly ["BTCUSDT", "ETHUSDT", "BNBUSDT", "SOLUSDT", "TRXUSDT", "XRPUSDT"];
40
+ declare const resolveDerivativesContextReferenceSymbols: (extraReferenceSymbols?: unknown) => string[];
28
41
  declare const TRENDLINE_DEFAULTS: {
29
42
  maxLines: number;
30
43
  range: number;
31
44
  firstRange: number;
32
45
  epsilon: number;
33
46
  epsilonOffset: number;
47
+ epsilonMode: "static";
48
+ epsilonAtrPeriod: number;
49
+ epsilonAtrMultiplier: number;
50
+ epsilonOffsetAtrMultiplier: number;
51
+ epsilonMin: number;
52
+ epsilonMax: number;
53
+ epsilonOffsetMin: number;
54
+ epsilonOffsetMax: number;
34
55
  minTouches: number;
35
56
  minDistance: number;
36
57
  minTouchGap: number;
@@ -42,4 +63,4 @@ declare const TRENDLINE_DEFAULTS: {
42
63
  };
43
64
  declare const TestThresholdsConfig: TestThresholds;
44
65
 
45
- export { BACKTEST_DEFAULT_DAYS, BACKTEST_PRELOAD_DAYS, BOT_PRELOAD_DAYS, CORRELATION_WINDOW, DASHBOARD_PRELOAD_DAYS, DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS, FEE_PERCENT, MARKET_CATEGORY, ML_BASE_CANDLES_WINDOW, ML_CANDLE_FEATURE_WINDOW, PRELOAD_DAYS, PRELOAD_FALLBACK_DAYS, SIGNALS_CLI_PRELOAD_DAYS, SIGNALS_PRELOAD_DAYS, SPREAD_WINDOW, TESTS_LIMIT, TESTS_ORDERS_MIN_LIMIT, TESTS_TOP_LIMIT, TRENDLINE_DEFAULTS, TTL_12H, TTL_1D, TTL_1H, TTL_1M, TTL_3D, TTL_3H, TTL_3M, TestThresholdsConfig };
66
+ export { BACKTEST_BASE_SLIPPAGE_BPS, BACKTEST_DEFAULT_DAYS, BACKTEST_DELAY_RISK_LOOKBACK_CANDLES, BACKTEST_DELAY_RISK_MAX_BPS, BACKTEST_DELAY_RISK_MULTIPLIER, BACKTEST_EXECUTION_DELAY_MS, BACKTEST_EXECUTION_INTERVAL, BACKTEST_EXPECTED_DELAY_MS, BACKTEST_MARKET_IMPACT_BPS, BACKTEST_PRELOAD_DAYS, BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER, BOT_PRELOAD_DAYS, CORRELATION_WINDOW, DASHBOARD_PRELOAD_DAYS, DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS, DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS, DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS, FEE_PERCENT, INITIAL_BACKTEST_AMOUNT, ML_BASE_CANDLES_WINDOW, ML_CANDLE_FEATURE_WINDOW, PRELOAD_DAYS, PRELOAD_FALLBACK_DAYS, SIGNALS_CLI_PRELOAD_DAYS, SIGNALS_PRELOAD_DAYS, SPREAD_WINDOW, TESTS_LIMIT, TESTS_ORDERS_MIN_LIMIT, TESTS_TOP_LIMIT, TRENDLINE_DEFAULTS, TTL_10D, TTL_12H, TTL_1D, TTL_1H, TTL_1M, TTL_3D, TTL_3H, TTL_3M, TestThresholdsConfig, resolveDerivativesContextReferenceSymbols };
package/dist/constants.js CHANGED
@@ -20,14 +20,25 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/constants.ts
21
21
  var constants_exports = {};
22
22
  __export(constants_exports, {
23
+ BACKTEST_BASE_SLIPPAGE_BPS: () => BACKTEST_BASE_SLIPPAGE_BPS,
23
24
  BACKTEST_DEFAULT_DAYS: () => BACKTEST_DEFAULT_DAYS,
25
+ BACKTEST_DELAY_RISK_LOOKBACK_CANDLES: () => BACKTEST_DELAY_RISK_LOOKBACK_CANDLES,
26
+ BACKTEST_DELAY_RISK_MAX_BPS: () => BACKTEST_DELAY_RISK_MAX_BPS,
27
+ BACKTEST_DELAY_RISK_MULTIPLIER: () => BACKTEST_DELAY_RISK_MULTIPLIER,
28
+ BACKTEST_EXECUTION_DELAY_MS: () => BACKTEST_EXECUTION_DELAY_MS,
29
+ BACKTEST_EXECUTION_INTERVAL: () => BACKTEST_EXECUTION_INTERVAL,
30
+ BACKTEST_EXPECTED_DELAY_MS: () => BACKTEST_EXPECTED_DELAY_MS,
31
+ BACKTEST_MARKET_IMPACT_BPS: () => BACKTEST_MARKET_IMPACT_BPS,
24
32
  BACKTEST_PRELOAD_DAYS: () => BACKTEST_PRELOAD_DAYS,
33
+ BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER: () => BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER,
25
34
  BOT_PRELOAD_DAYS: () => BOT_PRELOAD_DAYS,
26
35
  CORRELATION_WINDOW: () => CORRELATION_WINDOW,
27
36
  DASHBOARD_PRELOAD_DAYS: () => DASHBOARD_PRELOAD_DAYS,
37
+ DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS: () => DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
38
+ DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS: () => DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS,
28
39
  DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS: () => DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS,
29
40
  FEE_PERCENT: () => FEE_PERCENT,
30
- MARKET_CATEGORY: () => MARKET_CATEGORY,
41
+ INITIAL_BACKTEST_AMOUNT: () => INITIAL_BACKTEST_AMOUNT,
31
42
  ML_BASE_CANDLES_WINDOW: () => ML_BASE_CANDLES_WINDOW,
32
43
  ML_CANDLE_FEATURE_WINDOW: () => ML_CANDLE_FEATURE_WINDOW,
33
44
  PRELOAD_DAYS: () => PRELOAD_DAYS,
@@ -39,6 +50,7 @@ __export(constants_exports, {
39
50
  TESTS_ORDERS_MIN_LIMIT: () => TESTS_ORDERS_MIN_LIMIT,
40
51
  TESTS_TOP_LIMIT: () => TESTS_TOP_LIMIT,
41
52
  TRENDLINE_DEFAULTS: () => TRENDLINE_DEFAULTS,
53
+ TTL_10D: () => TTL_10D,
42
54
  TTL_12H: () => TTL_12H,
43
55
  TTL_1D: () => TTL_1D,
44
56
  TTL_1H: () => TTL_1H,
@@ -46,17 +58,28 @@ __export(constants_exports, {
46
58
  TTL_3D: () => TTL_3D,
47
59
  TTL_3H: () => TTL_3H,
48
60
  TTL_3M: () => TTL_3M,
49
- TestThresholdsConfig: () => TestThresholdsConfig
61
+ TestThresholdsConfig: () => TestThresholdsConfig,
62
+ resolveDerivativesContextReferenceSymbols: () => resolveDerivativesContextReferenceSymbols
50
63
  });
51
64
  module.exports = __toCommonJS(constants_exports);
52
65
 
53
66
  // src/constants/index.ts
54
- var FEE_PERCENT = 5e-3;
67
+ var FEE_PERCENT = 1e-3;
68
+ var BACKTEST_BASE_SLIPPAGE_BPS = 10;
69
+ var BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER = 1;
70
+ var BACKTEST_MARKET_IMPACT_BPS = 0;
71
+ var BACKTEST_DELAY_RISK_LOOKBACK_CANDLES = 5;
72
+ var BACKTEST_DELAY_RISK_MULTIPLIER = 0;
73
+ var BACKTEST_DELAY_RISK_MAX_BPS = 0;
74
+ var BACKTEST_EXPECTED_DELAY_MS = 0;
75
+ var BACKTEST_EXECUTION_INTERVAL = "5";
76
+ var BACKTEST_EXECUTION_DELAY_MS = 5 * 6e4;
77
+ var INITIAL_BACKTEST_AMOUNT = 100;
55
78
  var CORRELATION_WINDOW = 50;
56
79
  var SPREAD_WINDOW = 50;
57
80
  var PRELOAD_DAYS = 200;
58
81
  var SIGNALS_PRELOAD_DAYS = 60;
59
- var SIGNALS_CLI_PRELOAD_DAYS = 10;
82
+ var SIGNALS_CLI_PRELOAD_DAYS = 60;
60
83
  var BACKTEST_DEFAULT_DAYS = 160;
61
84
  var BACKTEST_PRELOAD_DAYS = 60;
62
85
  var DASHBOARD_PRELOAD_DAYS = 160;
@@ -67,24 +90,59 @@ var TTL_3H = 10800;
67
90
  var TTL_12H = 43300;
68
91
  var TTL_1D = 86400;
69
92
  var TTL_3D = 259200;
93
+ var TTL_10D = 864e3;
70
94
  var TTL_1M = 26e5;
71
95
  var TTL_3M = 78e5;
72
96
  var TESTS_TOP_LIMIT = 50;
73
97
  var TESTS_LIMIT = 1e5;
74
98
  var TESTS_ORDERS_MIN_LIMIT = 3;
75
- var MARKET_CATEGORY = "linear";
76
99
  var ML_CANDLE_FEATURE_WINDOW = 50;
77
100
  var ML_BASE_CANDLES_WINDOW = 50;
78
- var DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS = [
101
+ var DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS = [
79
102
  "BTCUSDT",
80
103
  "ETHUSDT"
81
104
  ];
105
+ var DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS = [
106
+ "BNBUSDT",
107
+ "SOLUSDT",
108
+ "TRXUSDT",
109
+ "XRPUSDT"
110
+ ];
111
+ var DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS = [
112
+ ...DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
113
+ ...DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS
114
+ ];
115
+ var parseDerivativesReferenceSymbolList = (value) => String(value ?? "").split(",").map((item) => item.trim().toUpperCase()).filter(Boolean);
116
+ var normalizeDerivativesReferenceSymbol = (value) => {
117
+ const compact = value.replace(/[^A-Z0-9]/g, "");
118
+ if (!compact) return null;
119
+ return compact.endsWith("USDT") ? compact : `${compact}USDT`;
120
+ };
121
+ var resolveDerivativesContextReferenceSymbols = (extraReferenceSymbols) => {
122
+ const extras = extraReferenceSymbols === void 0 ? [...DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS] : parseDerivativesReferenceSymbolList(extraReferenceSymbols);
123
+ const symbols = [
124
+ ...DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
125
+ ...extras
126
+ ].flatMap((symbol) => {
127
+ const normalized = normalizeDerivativesReferenceSymbol(String(symbol));
128
+ return normalized ? [normalized] : [];
129
+ });
130
+ return [...new Set(symbols)];
131
+ };
82
132
  var TRENDLINE_DEFAULTS = {
83
133
  maxLines: 20,
84
134
  range: 15,
85
135
  firstRange: 80,
86
136
  epsilon: 3e-3,
87
137
  epsilonOffset: 5e-3,
138
+ epsilonMode: "static",
139
+ epsilonAtrPeriod: 14,
140
+ epsilonAtrMultiplier: 0.45,
141
+ epsilonOffsetAtrMultiplier: 0.5,
142
+ epsilonMin: 0,
143
+ epsilonMax: 0,
144
+ epsilonOffsetMin: 0,
145
+ epsilonOffsetMax: 0,
88
146
  minTouches: 4,
89
147
  minDistance: 50,
90
148
  minTouchGap: 15,
@@ -152,9 +210,10 @@ var TestThresholdsConfig = {
152
210
  precision: 2
153
211
  },
154
212
  netProfit: {
155
- thresholds: [5, 20],
213
+ thresholds: [0, 0],
156
214
  direction: "higher",
157
215
  isAmount: true,
216
+ neutralValue: 0,
158
217
  precision: 2
159
218
  },
160
219
  totalReturn: {
@@ -223,14 +282,25 @@ var TestThresholdsConfig = {
223
282
  };
224
283
  // Annotate the CommonJS export names for ESM import in node:
225
284
  0 && (module.exports = {
285
+ BACKTEST_BASE_SLIPPAGE_BPS,
226
286
  BACKTEST_DEFAULT_DAYS,
287
+ BACKTEST_DELAY_RISK_LOOKBACK_CANDLES,
288
+ BACKTEST_DELAY_RISK_MAX_BPS,
289
+ BACKTEST_DELAY_RISK_MULTIPLIER,
290
+ BACKTEST_EXECUTION_DELAY_MS,
291
+ BACKTEST_EXECUTION_INTERVAL,
292
+ BACKTEST_EXPECTED_DELAY_MS,
293
+ BACKTEST_MARKET_IMPACT_BPS,
227
294
  BACKTEST_PRELOAD_DAYS,
295
+ BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER,
228
296
  BOT_PRELOAD_DAYS,
229
297
  CORRELATION_WINDOW,
230
298
  DASHBOARD_PRELOAD_DAYS,
299
+ DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
300
+ DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS,
231
301
  DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS,
232
302
  FEE_PERCENT,
233
- MARKET_CATEGORY,
303
+ INITIAL_BACKTEST_AMOUNT,
234
304
  ML_BASE_CANDLES_WINDOW,
235
305
  ML_CANDLE_FEATURE_WINDOW,
236
306
  PRELOAD_DAYS,
@@ -242,6 +312,7 @@ var TestThresholdsConfig = {
242
312
  TESTS_ORDERS_MIN_LIMIT,
243
313
  TESTS_TOP_LIMIT,
244
314
  TRENDLINE_DEFAULTS,
315
+ TTL_10D,
245
316
  TTL_12H,
246
317
  TTL_1D,
247
318
  TTL_1H,
@@ -249,5 +320,6 @@ var TestThresholdsConfig = {
249
320
  TTL_3D,
250
321
  TTL_3H,
251
322
  TTL_3M,
252
- TestThresholdsConfig
323
+ TestThresholdsConfig,
324
+ resolveDerivativesContextReferenceSymbols
253
325
  });
@@ -1,12 +1,23 @@
1
1
  import {
2
+ BACKTEST_BASE_SLIPPAGE_BPS,
2
3
  BACKTEST_DEFAULT_DAYS,
4
+ BACKTEST_DELAY_RISK_LOOKBACK_CANDLES,
5
+ BACKTEST_DELAY_RISK_MAX_BPS,
6
+ BACKTEST_DELAY_RISK_MULTIPLIER,
7
+ BACKTEST_EXECUTION_DELAY_MS,
8
+ BACKTEST_EXECUTION_INTERVAL,
9
+ BACKTEST_EXPECTED_DELAY_MS,
10
+ BACKTEST_MARKET_IMPACT_BPS,
3
11
  BACKTEST_PRELOAD_DAYS,
12
+ BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER,
4
13
  BOT_PRELOAD_DAYS,
5
14
  CORRELATION_WINDOW,
6
15
  DASHBOARD_PRELOAD_DAYS,
16
+ DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
17
+ DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS,
7
18
  DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS,
8
19
  FEE_PERCENT,
9
- MARKET_CATEGORY,
20
+ INITIAL_BACKTEST_AMOUNT,
10
21
  ML_BASE_CANDLES_WINDOW,
11
22
  ML_CANDLE_FEATURE_WINDOW,
12
23
  PRELOAD_DAYS,
@@ -18,6 +29,7 @@ import {
18
29
  TESTS_ORDERS_MIN_LIMIT,
19
30
  TESTS_TOP_LIMIT,
20
31
  TRENDLINE_DEFAULTS,
32
+ TTL_10D,
21
33
  TTL_12H,
22
34
  TTL_1D,
23
35
  TTL_1H,
@@ -25,17 +37,29 @@ import {
25
37
  TTL_3D,
26
38
  TTL_3H,
27
39
  TTL_3M,
28
- TestThresholdsConfig
29
- } from "./chunk-JLORHLL6.mjs";
40
+ TestThresholdsConfig,
41
+ resolveDerivativesContextReferenceSymbols
42
+ } from "./chunk-DXJ4NCFJ.mjs";
30
43
  export {
44
+ BACKTEST_BASE_SLIPPAGE_BPS,
31
45
  BACKTEST_DEFAULT_DAYS,
46
+ BACKTEST_DELAY_RISK_LOOKBACK_CANDLES,
47
+ BACKTEST_DELAY_RISK_MAX_BPS,
48
+ BACKTEST_DELAY_RISK_MULTIPLIER,
49
+ BACKTEST_EXECUTION_DELAY_MS,
50
+ BACKTEST_EXECUTION_INTERVAL,
51
+ BACKTEST_EXPECTED_DELAY_MS,
52
+ BACKTEST_MARKET_IMPACT_BPS,
32
53
  BACKTEST_PRELOAD_DAYS,
54
+ BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER,
33
55
  BOT_PRELOAD_DAYS,
34
56
  CORRELATION_WINDOW,
35
57
  DASHBOARD_PRELOAD_DAYS,
58
+ DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
59
+ DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS,
36
60
  DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS,
37
61
  FEE_PERCENT,
38
- MARKET_CATEGORY,
62
+ INITIAL_BACKTEST_AMOUNT,
39
63
  ML_BASE_CANDLES_WINDOW,
40
64
  ML_CANDLE_FEATURE_WINDOW,
41
65
  PRELOAD_DAYS,
@@ -47,6 +71,7 @@ export {
47
71
  TESTS_ORDERS_MIN_LIMIT,
48
72
  TESTS_TOP_LIMIT,
49
73
  TRENDLINE_DEFAULTS,
74
+ TTL_10D,
50
75
  TTL_12H,
51
76
  TTL_1D,
52
77
  TTL_1H,
@@ -54,5 +79,6 @@ export {
54
79
  TTL_3D,
55
80
  TTL_3H,
56
81
  TTL_3M,
57
- TestThresholdsConfig
82
+ TestThresholdsConfig,
83
+ resolveDerivativesContextReferenceSymbols
58
84
  };
package/dist/data.mjs CHANGED
@@ -4,11 +4,9 @@ import {
4
4
  isWrongData,
5
5
  mergeData
6
6
  } from "./chunk-M7QGVZ3J.mjs";
7
-
8
- // src/utils/toJson.ts
9
- var toJson = (data, stringify = false) => {
10
- return stringify ? JSON.stringify(data, null, 2) : JSON.stringify(data);
11
- };
7
+ import {
8
+ toJson
9
+ } from "./chunk-OJPHC3S2.mjs";
12
10
  export {
13
11
  cloneArrayValues,
14
12
  intervalToMs,
@@ -0,0 +1,9 @@
1
+ import { StrategyConfigGrid, Interval, TestSuite, StrategyConfig } from '@tradejs/types';
2
+
3
+ type GenericConfig = StrategyConfig;
4
+ declare const generateParamGrid: <T extends StrategyConfig>(paramOptions: StrategyConfigGrid) => T[];
5
+ declare const generateName: (prefix: string) => string;
6
+ declare const mergeConfigs: (configs: GenericConfig[]) => Record<string, unknown[]>;
7
+ declare const createTestSuite: (userName: string, tickers: string[], strategyName: string, backtestConfig: StrategyConfigGrid, connectorName: string, interval?: Interval) => TestSuite;
8
+
9
+ export { createTestSuite, generateName, generateParamGrid, mergeConfigs };
package/dist/grid.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { StrategyConfigGrid, Interval, TestSuite, StrategyConfig } from '@tradejs/types';
2
+
3
+ type GenericConfig = StrategyConfig;
4
+ declare const generateParamGrid: <T extends StrategyConfig>(paramOptions: StrategyConfigGrid) => T[];
5
+ declare const generateName: (prefix: string) => string;
6
+ declare const mergeConfigs: (configs: GenericConfig[]) => Record<string, unknown[]>;
7
+ declare const createTestSuite: (userName: string, tickers: string[], strategyName: string, backtestConfig: StrategyConfigGrid, connectorName: string, interval?: Interval) => TestSuite;
8
+
9
+ export { createTestSuite, generateName, generateParamGrid, mergeConfigs };