@tradejs/core 1.0.9 → 1.0.11

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 (42) hide show
  1. package/README.md +1 -1
  2. package/dist/backtest.d.mts +109 -9
  3. package/dist/backtest.d.ts +109 -9
  4. package/dist/backtest.js +487 -145
  5. package/dist/backtest.mjs +414 -82
  6. package/dist/{chunk-FNLPYYML.mjs → chunk-BOETNABM.mjs} +22 -1
  7. package/dist/chunk-EQEIRB6P.mjs +11847 -0
  8. package/dist/{chunk-2ORZC66W.mjs → chunk-MKCQSB4H.mjs} +65 -6
  9. package/dist/chunk-OJPHC3S2.mjs +8 -0
  10. package/dist/constants.d.mts +26 -5
  11. package/dist/constants.d.ts +26 -5
  12. package/dist/constants.js +81 -9
  13. package/dist/constants.mjs +31 -5
  14. package/dist/data.mjs +3 -5
  15. package/dist/grid.d.mts +9 -0
  16. package/dist/grid.d.ts +9 -0
  17. package/dist/grid.js +168 -0
  18. package/dist/grid.mjs +98 -0
  19. package/dist/indicators-Da_i06-8.d.mts +288 -0
  20. package/dist/indicators-Da_i06-8.d.ts +288 -0
  21. package/dist/indicators.d.mts +4 -39
  22. package/dist/indicators.d.ts +4 -39
  23. package/dist/indicators.js +10488 -423
  24. package/dist/indicators.mjs +11 -3
  25. package/dist/strategies.d.mts +31 -12
  26. package/dist/strategies.d.ts +31 -12
  27. package/dist/strategies.js +11283 -336
  28. package/dist/strategies.mjs +1246 -119
  29. package/dist/{time-BMkFD4Kd.d.mts → time-BQ3AXmxo.d.mts} +3 -1
  30. package/dist/{time-BMkFD4Kd.d.ts → time-BQ3AXmxo.d.ts} +3 -1
  31. package/dist/time.d.mts +1 -1
  32. package/dist/time.d.ts +1 -1
  33. package/dist/time.js +38 -0
  34. package/dist/time.mjs +6 -2
  35. package/dist/trade.d.mts +54 -0
  36. package/dist/trade.d.ts +54 -0
  37. package/dist/trade.js +352 -0
  38. package/dist/trade.mjs +264 -0
  39. package/package.json +19 -5
  40. package/dist/chunk-UK6VTOUX.mjs +0 -1810
  41. package/dist/indicators-B-GGjP5F.d.mts +0 -65
  42. package/dist/indicators-B-GGjP5F.d.ts +0 -65
@@ -1,10 +1,21 @@
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_LOWER_TIMEFRAME_EXECUTION_ENABLED = false;
11
+ var BACKTEST_EXECUTION_INTERVAL = "5";
12
+ var BACKTEST_EXECUTION_DELAY_MS = 5 * 6e4;
13
+ var INITIAL_BACKTEST_AMOUNT = 100;
3
14
  var CORRELATION_WINDOW = 50;
4
15
  var SPREAD_WINDOW = 50;
5
16
  var PRELOAD_DAYS = 200;
6
17
  var SIGNALS_PRELOAD_DAYS = 60;
7
- var SIGNALS_CLI_PRELOAD_DAYS = 10;
18
+ var SIGNALS_CLI_PRELOAD_DAYS = 60;
8
19
  var BACKTEST_DEFAULT_DAYS = 160;
9
20
  var BACKTEST_PRELOAD_DAYS = 60;
10
21
  var DASHBOARD_PRELOAD_DAYS = 160;
@@ -21,19 +32,53 @@ var TTL_3M = 78e5;
21
32
  var TESTS_TOP_LIMIT = 50;
22
33
  var TESTS_LIMIT = 1e5;
23
34
  var TESTS_ORDERS_MIN_LIMIT = 3;
24
- var MARKET_CATEGORY = "linear";
25
35
  var ML_CANDLE_FEATURE_WINDOW = 50;
26
36
  var ML_BASE_CANDLES_WINDOW = 50;
27
- var DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS = [
37
+ var DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS = [
28
38
  "BTCUSDT",
29
39
  "ETHUSDT"
30
40
  ];
41
+ var DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS = [
42
+ "BNBUSDT",
43
+ "SOLUSDT",
44
+ "TRXUSDT",
45
+ "XRPUSDT"
46
+ ];
47
+ var DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS = [
48
+ ...DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
49
+ ...DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS
50
+ ];
51
+ var parseDerivativesReferenceSymbolList = (value) => String(value ?? "").split(",").map((item) => item.trim().toUpperCase()).filter(Boolean);
52
+ var normalizeDerivativesReferenceSymbol = (value) => {
53
+ const compact = value.replace(/[^A-Z0-9]/g, "");
54
+ if (!compact) return null;
55
+ return compact.endsWith("USDT") ? compact : `${compact}USDT`;
56
+ };
57
+ var resolveDerivativesContextReferenceSymbols = (extraReferenceSymbols) => {
58
+ const extras = extraReferenceSymbols === void 0 ? [...DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS] : parseDerivativesReferenceSymbolList(extraReferenceSymbols);
59
+ const symbols = [
60
+ ...DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
61
+ ...extras
62
+ ].flatMap((symbol) => {
63
+ const normalized = normalizeDerivativesReferenceSymbol(String(symbol));
64
+ return normalized ? [normalized] : [];
65
+ });
66
+ return [...new Set(symbols)];
67
+ };
31
68
  var TRENDLINE_DEFAULTS = {
32
69
  maxLines: 20,
33
70
  range: 15,
34
71
  firstRange: 80,
35
72
  epsilon: 3e-3,
36
73
  epsilonOffset: 5e-3,
74
+ epsilonMode: "static",
75
+ epsilonAtrPeriod: 14,
76
+ epsilonAtrMultiplier: 0.45,
77
+ epsilonOffsetAtrMultiplier: 0.5,
78
+ epsilonMin: 0,
79
+ epsilonMax: 0,
80
+ epsilonOffsetMin: 0,
81
+ epsilonOffsetMax: 0,
37
82
  minTouches: 4,
38
83
  minDistance: 50,
39
84
  minTouchGap: 15,
@@ -101,9 +146,10 @@ var TestThresholdsConfig = {
101
146
  precision: 2
102
147
  },
103
148
  netProfit: {
104
- thresholds: [5, 20],
149
+ thresholds: [0, 0],
105
150
  direction: "higher",
106
151
  isAmount: true,
152
+ neutralValue: 0,
107
153
  precision: 2
108
154
  },
109
155
  totalReturn: {
@@ -173,6 +219,17 @@ var TestThresholdsConfig = {
173
219
 
174
220
  export {
175
221
  FEE_PERCENT,
222
+ BACKTEST_BASE_SLIPPAGE_BPS,
223
+ BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER,
224
+ BACKTEST_MARKET_IMPACT_BPS,
225
+ BACKTEST_DELAY_RISK_LOOKBACK_CANDLES,
226
+ BACKTEST_DELAY_RISK_MULTIPLIER,
227
+ BACKTEST_DELAY_RISK_MAX_BPS,
228
+ BACKTEST_EXPECTED_DELAY_MS,
229
+ BACKTEST_LOWER_TIMEFRAME_EXECUTION_ENABLED,
230
+ BACKTEST_EXECUTION_INTERVAL,
231
+ BACKTEST_EXECUTION_DELAY_MS,
232
+ INITIAL_BACKTEST_AMOUNT,
176
233
  CORRELATION_WINDOW,
177
234
  SPREAD_WINDOW,
178
235
  PRELOAD_DAYS,
@@ -194,10 +251,12 @@ export {
194
251
  TESTS_TOP_LIMIT,
195
252
  TESTS_LIMIT,
196
253
  TESTS_ORDERS_MIN_LIMIT,
197
- MARKET_CATEGORY,
198
254
  ML_CANDLE_FEATURE_WINDOW,
199
255
  ML_BASE_CANDLES_WINDOW,
256
+ DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
257
+ DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS,
200
258
  DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS,
259
+ resolveDerivativesContextReferenceSymbols,
201
260
  TRENDLINE_DEFAULTS,
202
261
  TestThresholdsConfig
203
262
  };
@@ -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,11 +1,22 @@
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_LOWER_TIMEFRAME_EXECUTION_ENABLED = false;
12
+ declare const BACKTEST_EXECUTION_INTERVAL = "5";
13
+ declare const BACKTEST_EXECUTION_DELAY_MS: number;
14
+ declare const INITIAL_BACKTEST_AMOUNT = 100;
4
15
  declare const CORRELATION_WINDOW = 50;
5
16
  declare const SPREAD_WINDOW = 50;
6
17
  declare const PRELOAD_DAYS = 200;
7
18
  declare const SIGNALS_PRELOAD_DAYS = 60;
8
- declare const SIGNALS_CLI_PRELOAD_DAYS = 10;
19
+ declare const SIGNALS_CLI_PRELOAD_DAYS = 60;
9
20
  declare const BACKTEST_DEFAULT_DAYS = 160;
10
21
  declare const BACKTEST_PRELOAD_DAYS = 60;
11
22
  declare const DASHBOARD_PRELOAD_DAYS = 160;
@@ -22,16 +33,26 @@ declare const TTL_3M = 7800000;
22
33
  declare const TESTS_TOP_LIMIT = 50;
23
34
  declare const TESTS_LIMIT = 100000;
24
35
  declare const TESTS_ORDERS_MIN_LIMIT = 3;
25
- declare const MARKET_CATEGORY = "linear";
26
36
  declare const ML_CANDLE_FEATURE_WINDOW = 50;
27
37
  declare const ML_BASE_CANDLES_WINDOW = 50;
28
- declare const DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS: readonly ["BTCUSDT", "ETHUSDT"];
38
+ declare const DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS: readonly ["BTCUSDT", "ETHUSDT"];
39
+ declare const DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS: readonly ["BNBUSDT", "SOLUSDT", "TRXUSDT", "XRPUSDT"];
40
+ declare const DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS: readonly ["BTCUSDT", "ETHUSDT", "BNBUSDT", "SOLUSDT", "TRXUSDT", "XRPUSDT"];
41
+ declare const resolveDerivativesContextReferenceSymbols: (extraReferenceSymbols?: unknown) => string[];
29
42
  declare const TRENDLINE_DEFAULTS: {
30
43
  maxLines: number;
31
44
  range: number;
32
45
  firstRange: number;
33
46
  epsilon: number;
34
47
  epsilonOffset: number;
48
+ epsilonMode: "static";
49
+ epsilonAtrPeriod: number;
50
+ epsilonAtrMultiplier: number;
51
+ epsilonOffsetAtrMultiplier: number;
52
+ epsilonMin: number;
53
+ epsilonMax: number;
54
+ epsilonOffsetMin: number;
55
+ epsilonOffsetMax: number;
35
56
  minTouches: number;
36
57
  minDistance: number;
37
58
  minTouchGap: number;
@@ -43,4 +64,4 @@ declare const TRENDLINE_DEFAULTS: {
43
64
  };
44
65
  declare const TestThresholdsConfig: TestThresholds;
45
66
 
46
- 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_10D, TTL_12H, TTL_1D, TTL_1H, TTL_1M, TTL_3D, TTL_3H, TTL_3M, TestThresholdsConfig };
67
+ 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_LOWER_TIMEFRAME_EXECUTION_ENABLED, 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,22 @@
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_LOWER_TIMEFRAME_EXECUTION_ENABLED = false;
12
+ declare const BACKTEST_EXECUTION_INTERVAL = "5";
13
+ declare const BACKTEST_EXECUTION_DELAY_MS: number;
14
+ declare const INITIAL_BACKTEST_AMOUNT = 100;
4
15
  declare const CORRELATION_WINDOW = 50;
5
16
  declare const SPREAD_WINDOW = 50;
6
17
  declare const PRELOAD_DAYS = 200;
7
18
  declare const SIGNALS_PRELOAD_DAYS = 60;
8
- declare const SIGNALS_CLI_PRELOAD_DAYS = 10;
19
+ declare const SIGNALS_CLI_PRELOAD_DAYS = 60;
9
20
  declare const BACKTEST_DEFAULT_DAYS = 160;
10
21
  declare const BACKTEST_PRELOAD_DAYS = 60;
11
22
  declare const DASHBOARD_PRELOAD_DAYS = 160;
@@ -22,16 +33,26 @@ declare const TTL_3M = 7800000;
22
33
  declare const TESTS_TOP_LIMIT = 50;
23
34
  declare const TESTS_LIMIT = 100000;
24
35
  declare const TESTS_ORDERS_MIN_LIMIT = 3;
25
- declare const MARKET_CATEGORY = "linear";
26
36
  declare const ML_CANDLE_FEATURE_WINDOW = 50;
27
37
  declare const ML_BASE_CANDLES_WINDOW = 50;
28
- declare const DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS: readonly ["BTCUSDT", "ETHUSDT"];
38
+ declare const DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS: readonly ["BTCUSDT", "ETHUSDT"];
39
+ declare const DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS: readonly ["BNBUSDT", "SOLUSDT", "TRXUSDT", "XRPUSDT"];
40
+ declare const DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS: readonly ["BTCUSDT", "ETHUSDT", "BNBUSDT", "SOLUSDT", "TRXUSDT", "XRPUSDT"];
41
+ declare const resolveDerivativesContextReferenceSymbols: (extraReferenceSymbols?: unknown) => string[];
29
42
  declare const TRENDLINE_DEFAULTS: {
30
43
  maxLines: number;
31
44
  range: number;
32
45
  firstRange: number;
33
46
  epsilon: number;
34
47
  epsilonOffset: number;
48
+ epsilonMode: "static";
49
+ epsilonAtrPeriod: number;
50
+ epsilonAtrMultiplier: number;
51
+ epsilonOffsetAtrMultiplier: number;
52
+ epsilonMin: number;
53
+ epsilonMax: number;
54
+ epsilonOffsetMin: number;
55
+ epsilonOffsetMax: number;
35
56
  minTouches: number;
36
57
  minDistance: number;
37
58
  minTouchGap: number;
@@ -43,4 +64,4 @@ declare const TRENDLINE_DEFAULTS: {
43
64
  };
44
65
  declare const TestThresholdsConfig: TestThresholds;
45
66
 
46
- 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_10D, TTL_12H, TTL_1D, TTL_1H, TTL_1M, TTL_3D, TTL_3H, TTL_3M, TestThresholdsConfig };
67
+ 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_LOWER_TIMEFRAME_EXECUTION_ENABLED, 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,26 @@ 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_LOWER_TIMEFRAME_EXECUTION_ENABLED: () => BACKTEST_LOWER_TIMEFRAME_EXECUTION_ENABLED,
32
+ BACKTEST_MARKET_IMPACT_BPS: () => BACKTEST_MARKET_IMPACT_BPS,
24
33
  BACKTEST_PRELOAD_DAYS: () => BACKTEST_PRELOAD_DAYS,
34
+ BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER: () => BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER,
25
35
  BOT_PRELOAD_DAYS: () => BOT_PRELOAD_DAYS,
26
36
  CORRELATION_WINDOW: () => CORRELATION_WINDOW,
27
37
  DASHBOARD_PRELOAD_DAYS: () => DASHBOARD_PRELOAD_DAYS,
38
+ DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS: () => DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
39
+ DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS: () => DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS,
28
40
  DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS: () => DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS,
29
41
  FEE_PERCENT: () => FEE_PERCENT,
30
- MARKET_CATEGORY: () => MARKET_CATEGORY,
42
+ INITIAL_BACKTEST_AMOUNT: () => INITIAL_BACKTEST_AMOUNT,
31
43
  ML_BASE_CANDLES_WINDOW: () => ML_BASE_CANDLES_WINDOW,
32
44
  ML_CANDLE_FEATURE_WINDOW: () => ML_CANDLE_FEATURE_WINDOW,
33
45
  PRELOAD_DAYS: () => PRELOAD_DAYS,
@@ -47,17 +59,29 @@ __export(constants_exports, {
47
59
  TTL_3D: () => TTL_3D,
48
60
  TTL_3H: () => TTL_3H,
49
61
  TTL_3M: () => TTL_3M,
50
- TestThresholdsConfig: () => TestThresholdsConfig
62
+ TestThresholdsConfig: () => TestThresholdsConfig,
63
+ resolveDerivativesContextReferenceSymbols: () => resolveDerivativesContextReferenceSymbols
51
64
  });
52
65
  module.exports = __toCommonJS(constants_exports);
53
66
 
54
67
  // src/constants/index.ts
55
- var FEE_PERCENT = 5e-3;
68
+ var FEE_PERCENT = 1e-3;
69
+ var BACKTEST_BASE_SLIPPAGE_BPS = 10;
70
+ var BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER = 1;
71
+ var BACKTEST_MARKET_IMPACT_BPS = 0;
72
+ var BACKTEST_DELAY_RISK_LOOKBACK_CANDLES = 5;
73
+ var BACKTEST_DELAY_RISK_MULTIPLIER = 0;
74
+ var BACKTEST_DELAY_RISK_MAX_BPS = 0;
75
+ var BACKTEST_EXPECTED_DELAY_MS = 0;
76
+ var BACKTEST_LOWER_TIMEFRAME_EXECUTION_ENABLED = false;
77
+ var BACKTEST_EXECUTION_INTERVAL = "5";
78
+ var BACKTEST_EXECUTION_DELAY_MS = 5 * 6e4;
79
+ var INITIAL_BACKTEST_AMOUNT = 100;
56
80
  var CORRELATION_WINDOW = 50;
57
81
  var SPREAD_WINDOW = 50;
58
82
  var PRELOAD_DAYS = 200;
59
83
  var SIGNALS_PRELOAD_DAYS = 60;
60
- var SIGNALS_CLI_PRELOAD_DAYS = 10;
84
+ var SIGNALS_CLI_PRELOAD_DAYS = 60;
61
85
  var BACKTEST_DEFAULT_DAYS = 160;
62
86
  var BACKTEST_PRELOAD_DAYS = 60;
63
87
  var DASHBOARD_PRELOAD_DAYS = 160;
@@ -74,19 +98,53 @@ var TTL_3M = 78e5;
74
98
  var TESTS_TOP_LIMIT = 50;
75
99
  var TESTS_LIMIT = 1e5;
76
100
  var TESTS_ORDERS_MIN_LIMIT = 3;
77
- var MARKET_CATEGORY = "linear";
78
101
  var ML_CANDLE_FEATURE_WINDOW = 50;
79
102
  var ML_BASE_CANDLES_WINDOW = 50;
80
- var DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS = [
103
+ var DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS = [
81
104
  "BTCUSDT",
82
105
  "ETHUSDT"
83
106
  ];
107
+ var DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS = [
108
+ "BNBUSDT",
109
+ "SOLUSDT",
110
+ "TRXUSDT",
111
+ "XRPUSDT"
112
+ ];
113
+ var DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS = [
114
+ ...DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
115
+ ...DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS
116
+ ];
117
+ var parseDerivativesReferenceSymbolList = (value) => String(value ?? "").split(",").map((item) => item.trim().toUpperCase()).filter(Boolean);
118
+ var normalizeDerivativesReferenceSymbol = (value) => {
119
+ const compact = value.replace(/[^A-Z0-9]/g, "");
120
+ if (!compact) return null;
121
+ return compact.endsWith("USDT") ? compact : `${compact}USDT`;
122
+ };
123
+ var resolveDerivativesContextReferenceSymbols = (extraReferenceSymbols) => {
124
+ const extras = extraReferenceSymbols === void 0 ? [...DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS] : parseDerivativesReferenceSymbolList(extraReferenceSymbols);
125
+ const symbols = [
126
+ ...DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
127
+ ...extras
128
+ ].flatMap((symbol) => {
129
+ const normalized = normalizeDerivativesReferenceSymbol(String(symbol));
130
+ return normalized ? [normalized] : [];
131
+ });
132
+ return [...new Set(symbols)];
133
+ };
84
134
  var TRENDLINE_DEFAULTS = {
85
135
  maxLines: 20,
86
136
  range: 15,
87
137
  firstRange: 80,
88
138
  epsilon: 3e-3,
89
139
  epsilonOffset: 5e-3,
140
+ epsilonMode: "static",
141
+ epsilonAtrPeriod: 14,
142
+ epsilonAtrMultiplier: 0.45,
143
+ epsilonOffsetAtrMultiplier: 0.5,
144
+ epsilonMin: 0,
145
+ epsilonMax: 0,
146
+ epsilonOffsetMin: 0,
147
+ epsilonOffsetMax: 0,
90
148
  minTouches: 4,
91
149
  minDistance: 50,
92
150
  minTouchGap: 15,
@@ -154,9 +212,10 @@ var TestThresholdsConfig = {
154
212
  precision: 2
155
213
  },
156
214
  netProfit: {
157
- thresholds: [5, 20],
215
+ thresholds: [0, 0],
158
216
  direction: "higher",
159
217
  isAmount: true,
218
+ neutralValue: 0,
160
219
  precision: 2
161
220
  },
162
221
  totalReturn: {
@@ -225,14 +284,26 @@ var TestThresholdsConfig = {
225
284
  };
226
285
  // Annotate the CommonJS export names for ESM import in node:
227
286
  0 && (module.exports = {
287
+ BACKTEST_BASE_SLIPPAGE_BPS,
228
288
  BACKTEST_DEFAULT_DAYS,
289
+ BACKTEST_DELAY_RISK_LOOKBACK_CANDLES,
290
+ BACKTEST_DELAY_RISK_MAX_BPS,
291
+ BACKTEST_DELAY_RISK_MULTIPLIER,
292
+ BACKTEST_EXECUTION_DELAY_MS,
293
+ BACKTEST_EXECUTION_INTERVAL,
294
+ BACKTEST_EXPECTED_DELAY_MS,
295
+ BACKTEST_LOWER_TIMEFRAME_EXECUTION_ENABLED,
296
+ BACKTEST_MARKET_IMPACT_BPS,
229
297
  BACKTEST_PRELOAD_DAYS,
298
+ BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER,
230
299
  BOT_PRELOAD_DAYS,
231
300
  CORRELATION_WINDOW,
232
301
  DASHBOARD_PRELOAD_DAYS,
302
+ DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
303
+ DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS,
233
304
  DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS,
234
305
  FEE_PERCENT,
235
- MARKET_CATEGORY,
306
+ INITIAL_BACKTEST_AMOUNT,
236
307
  ML_BASE_CANDLES_WINDOW,
237
308
  ML_CANDLE_FEATURE_WINDOW,
238
309
  PRELOAD_DAYS,
@@ -252,5 +323,6 @@ var TestThresholdsConfig = {
252
323
  TTL_3D,
253
324
  TTL_3H,
254
325
  TTL_3M,
255
- TestThresholdsConfig
326
+ TestThresholdsConfig,
327
+ resolveDerivativesContextReferenceSymbols
256
328
  });
@@ -1,12 +1,24 @@
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_LOWER_TIMEFRAME_EXECUTION_ENABLED,
11
+ BACKTEST_MARKET_IMPACT_BPS,
3
12
  BACKTEST_PRELOAD_DAYS,
13
+ BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER,
4
14
  BOT_PRELOAD_DAYS,
5
15
  CORRELATION_WINDOW,
6
16
  DASHBOARD_PRELOAD_DAYS,
17
+ DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
18
+ DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS,
7
19
  DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS,
8
20
  FEE_PERCENT,
9
- MARKET_CATEGORY,
21
+ INITIAL_BACKTEST_AMOUNT,
10
22
  ML_BASE_CANDLES_WINDOW,
11
23
  ML_CANDLE_FEATURE_WINDOW,
12
24
  PRELOAD_DAYS,
@@ -26,17 +38,30 @@ import {
26
38
  TTL_3D,
27
39
  TTL_3H,
28
40
  TTL_3M,
29
- TestThresholdsConfig
30
- } from "./chunk-2ORZC66W.mjs";
41
+ TestThresholdsConfig,
42
+ resolveDerivativesContextReferenceSymbols
43
+ } from "./chunk-MKCQSB4H.mjs";
31
44
  export {
45
+ BACKTEST_BASE_SLIPPAGE_BPS,
32
46
  BACKTEST_DEFAULT_DAYS,
47
+ BACKTEST_DELAY_RISK_LOOKBACK_CANDLES,
48
+ BACKTEST_DELAY_RISK_MAX_BPS,
49
+ BACKTEST_DELAY_RISK_MULTIPLIER,
50
+ BACKTEST_EXECUTION_DELAY_MS,
51
+ BACKTEST_EXECUTION_INTERVAL,
52
+ BACKTEST_EXPECTED_DELAY_MS,
53
+ BACKTEST_LOWER_TIMEFRAME_EXECUTION_ENABLED,
54
+ BACKTEST_MARKET_IMPACT_BPS,
33
55
  BACKTEST_PRELOAD_DAYS,
56
+ BACKTEST_SPREAD_SLIPPAGE_MULTIPLIER,
34
57
  BOT_PRELOAD_DAYS,
35
58
  CORRELATION_WINDOW,
36
59
  DASHBOARD_PRELOAD_DAYS,
60
+ DERIVATIVES_CONTEXT_BASE_REFERENCE_SYMBOLS,
61
+ DERIVATIVES_CONTEXT_DEFAULT_EXTRA_REFERENCE_SYMBOLS,
37
62
  DERIVATIVES_CONTEXT_REFERENCE_SYMBOLS,
38
63
  FEE_PERCENT,
39
- MARKET_CATEGORY,
64
+ INITIAL_BACKTEST_AMOUNT,
40
65
  ML_BASE_CANDLES_WINDOW,
41
66
  ML_CANDLE_FEATURE_WINDOW,
42
67
  PRELOAD_DAYS,
@@ -56,5 +81,6 @@ export {
56
81
  TTL_3D,
57
82
  TTL_3H,
58
83
  TTL_3M,
59
- TestThresholdsConfig
84
+ TestThresholdsConfig,
85
+ resolveDerivativesContextReferenceSymbols
60
86
  };
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 };