@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
package/README.md CHANGED
@@ -54,4 +54,4 @@ export default defineConfig(basePreset, {
54
54
  - import shared contracts from `@tradejs/types`
55
55
  - do not use non-public deep imports like `@tradejs/core/src/*`
56
56
 
57
- For runtime execution, Pine loading, plugin registries, and backtest orchestration, use `@tradejs/node`.
57
+ For runtime execution, Pine strategy loading, plugin registries, and backtest orchestration, use `@tradejs/node`.
@@ -1,11 +1,5 @@
1
- import { StrategyConfigGrid, TestSuite, StrategyConfig, PositionLogData, TestStat, TestThresholdsKey, ThresholdLevel, TestWorkerResult } from '@tradejs/types';
2
- export { c as compactOrderLog, g as getTimeline } from './time-BMkFD4Kd.mjs';
3
-
4
- type GenericConfig = StrategyConfig;
5
- declare const generateParamGrid: <T extends StrategyConfig>(paramOptions: StrategyConfigGrid) => T[];
6
- declare const generateName: (prefix: string) => string;
7
- declare const mergeConfigs: (configs: GenericConfig[]) => Record<string, unknown[]>;
8
- declare const createTestSuite: (userName: string, tickers: string[], strategyName: string, backtestConfig: StrategyConfigGrid, connectorName: string) => TestSuite;
1
+ import { PositionLogData, TestStat, TestThresholdsKey, ThresholdLevel, TestWorkerResult } from '@tradejs/types';
2
+ export { c as compactOrderLog, g as getTimeline } from './time-BQ3AXmxo.mjs';
9
3
 
10
4
  declare const parseTestName: (testName: string) => {
11
5
  symbol: string;
@@ -22,6 +16,112 @@ declare const parseTestName: (testName: string) => {
22
16
  * Ожидается, что amounts — это последовательные значения equity и > 0.
23
17
  */
24
18
  declare const calculateMaxDrawdown: (amounts: number[]) => number;
19
+ type AdvancedTradeDirection = 'LONG' | 'SHORT' | string;
20
+ interface AdvancedTradeInput {
21
+ id?: string;
22
+ timestamp: number;
23
+ pnl: number;
24
+ symbol?: string | null;
25
+ direction?: AdvancedTradeDirection | null;
26
+ exitReason?: string | null;
27
+ grossPnl?: number | null;
28
+ slippageCost?: number | null;
29
+ approved?: boolean | null;
30
+ blocked?: boolean | null;
31
+ session?: string | null;
32
+ }
33
+ interface AdvancedExitBreakdownBucket {
34
+ count: number;
35
+ share: number | null;
36
+ }
37
+ interface AdvancedQuarterlyPnl {
38
+ quarter: string;
39
+ pnl: number;
40
+ }
41
+ interface AdvancedTradeMetrics {
42
+ core: {
43
+ trades: number;
44
+ wins: number;
45
+ losses: number;
46
+ winRate: number | null;
47
+ totalPnl: number;
48
+ avgTrade: number | null;
49
+ grossProfit: number;
50
+ grossLoss: number;
51
+ profitFactor: number | null;
52
+ payoffRatio: number | null;
53
+ expectancy: number | null;
54
+ tradesPerDay: number | null;
55
+ tradesPerWeek: number | null;
56
+ };
57
+ risk: {
58
+ maxDrawdown: number | null;
59
+ maxDrawdownPercent: number | null;
60
+ maxDrawdownToTotalProfit: number | null;
61
+ maxDrawdownToGrossProfit: number | null;
62
+ recoveryFactor: number | null;
63
+ maxLossStreak: number;
64
+ losingMonthsCount: number;
65
+ worstMonthPnl: number | null;
66
+ worstRolling30dPnl: number | null;
67
+ worstRolling90dPnl: number | null;
68
+ };
69
+ stability: {
70
+ monthlyWinRate: number | null;
71
+ positiveMonthsPercent: number | null;
72
+ quarterlyPnl: AdvancedQuarterlyPnl[];
73
+ rolling365Pnl: number | null;
74
+ medianMonthlyPnl: number | null;
75
+ iqrMonthlyPnl: number | null;
76
+ top5ProfitShare: number | null;
77
+ top10ProfitShare: number | null;
78
+ };
79
+ distribution: {
80
+ medianTrade: number | null;
81
+ p10Trade: number | null;
82
+ p25Trade: number | null;
83
+ p75Trade: number | null;
84
+ p90Trade: number | null;
85
+ largestWin: number | null;
86
+ largestLoss: number | null;
87
+ tailRatio: number | null;
88
+ skewness: number | null;
89
+ };
90
+ riskAdjusted: {
91
+ sharpeDaily: number | null;
92
+ sortinoDaily: number | null;
93
+ calmar: number | null;
94
+ mar: number | null;
95
+ };
96
+ operational: {
97
+ avgSlippageCost: number | null;
98
+ pnlBeforeSlippage: number | null;
99
+ pnlAfterSlippage: number;
100
+ approvalRate: number | null;
101
+ blockedProfitableTrades: number;
102
+ approvedLosingTrades: number;
103
+ symbolConcentrationTop1: number | null;
104
+ symbolConcentrationTop5: number | null;
105
+ sessionConcentrationTop1: number | null;
106
+ longTrades: number;
107
+ shortTrades: number;
108
+ longPnl: number;
109
+ shortPnl: number;
110
+ exitBreakdown: {
111
+ takeProfit: AdvancedExitBreakdownBucket;
112
+ stopLoss: AdvancedExitBreakdownBucket;
113
+ exit: AdvancedExitBreakdownBucket;
114
+ unknown: AdvancedExitBreakdownBucket;
115
+ };
116
+ };
117
+ }
118
+ interface AdvancedTradeMetricsInput {
119
+ trades: AdvancedTradeInput[];
120
+ orderLog?: ReadonlyArray<readonly [number, number]>;
121
+ startTimestamp?: number | null;
122
+ endTimestamp?: number | null;
123
+ }
124
+ declare const calculateAdvancedTradeMetrics: ({ trades, orderLog, startTimestamp, endTimestamp, }: AdvancedTradeMetricsInput) => AdvancedTradeMetrics;
25
125
  /**
26
126
  * Рассчитывает компактный набор действительно полезных метрик:
27
127
  * - Период и частота (periodDays/Months, trades, tradesPerMonth, exposure)
@@ -42,4 +142,4 @@ declare const getFormatted: (stat: Partial<TestStat> | undefined, key: TestThres
42
142
  level: ThresholdLevel;
43
143
  };
44
144
 
45
- export { calculateMaxDrawdown, calculateStatsFull, classifyMetric, createTestSuite, generateName, generateParamGrid, getBacktestScore, getFormatted, mergeConfigs, parseTestName, sortBestTests };
145
+ export { type AdvancedExitBreakdownBucket, type AdvancedQuarterlyPnl, type AdvancedTradeDirection, type AdvancedTradeInput, type AdvancedTradeMetrics, type AdvancedTradeMetricsInput, calculateAdvancedTradeMetrics, calculateMaxDrawdown, calculateStatsFull, classifyMetric, getBacktestScore, getFormatted, parseTestName, sortBestTests };
@@ -1,11 +1,5 @@
1
- import { StrategyConfigGrid, TestSuite, StrategyConfig, PositionLogData, TestStat, TestThresholdsKey, ThresholdLevel, TestWorkerResult } from '@tradejs/types';
2
- export { c as compactOrderLog, g as getTimeline } from './time-BMkFD4Kd.js';
3
-
4
- type GenericConfig = StrategyConfig;
5
- declare const generateParamGrid: <T extends StrategyConfig>(paramOptions: StrategyConfigGrid) => T[];
6
- declare const generateName: (prefix: string) => string;
7
- declare const mergeConfigs: (configs: GenericConfig[]) => Record<string, unknown[]>;
8
- declare const createTestSuite: (userName: string, tickers: string[], strategyName: string, backtestConfig: StrategyConfigGrid, connectorName: string) => TestSuite;
1
+ import { PositionLogData, TestStat, TestThresholdsKey, ThresholdLevel, TestWorkerResult } from '@tradejs/types';
2
+ export { c as compactOrderLog, g as getTimeline } from './time-BQ3AXmxo.js';
9
3
 
10
4
  declare const parseTestName: (testName: string) => {
11
5
  symbol: string;
@@ -22,6 +16,112 @@ declare const parseTestName: (testName: string) => {
22
16
  * Ожидается, что amounts — это последовательные значения equity и > 0.
23
17
  */
24
18
  declare const calculateMaxDrawdown: (amounts: number[]) => number;
19
+ type AdvancedTradeDirection = 'LONG' | 'SHORT' | string;
20
+ interface AdvancedTradeInput {
21
+ id?: string;
22
+ timestamp: number;
23
+ pnl: number;
24
+ symbol?: string | null;
25
+ direction?: AdvancedTradeDirection | null;
26
+ exitReason?: string | null;
27
+ grossPnl?: number | null;
28
+ slippageCost?: number | null;
29
+ approved?: boolean | null;
30
+ blocked?: boolean | null;
31
+ session?: string | null;
32
+ }
33
+ interface AdvancedExitBreakdownBucket {
34
+ count: number;
35
+ share: number | null;
36
+ }
37
+ interface AdvancedQuarterlyPnl {
38
+ quarter: string;
39
+ pnl: number;
40
+ }
41
+ interface AdvancedTradeMetrics {
42
+ core: {
43
+ trades: number;
44
+ wins: number;
45
+ losses: number;
46
+ winRate: number | null;
47
+ totalPnl: number;
48
+ avgTrade: number | null;
49
+ grossProfit: number;
50
+ grossLoss: number;
51
+ profitFactor: number | null;
52
+ payoffRatio: number | null;
53
+ expectancy: number | null;
54
+ tradesPerDay: number | null;
55
+ tradesPerWeek: number | null;
56
+ };
57
+ risk: {
58
+ maxDrawdown: number | null;
59
+ maxDrawdownPercent: number | null;
60
+ maxDrawdownToTotalProfit: number | null;
61
+ maxDrawdownToGrossProfit: number | null;
62
+ recoveryFactor: number | null;
63
+ maxLossStreak: number;
64
+ losingMonthsCount: number;
65
+ worstMonthPnl: number | null;
66
+ worstRolling30dPnl: number | null;
67
+ worstRolling90dPnl: number | null;
68
+ };
69
+ stability: {
70
+ monthlyWinRate: number | null;
71
+ positiveMonthsPercent: number | null;
72
+ quarterlyPnl: AdvancedQuarterlyPnl[];
73
+ rolling365Pnl: number | null;
74
+ medianMonthlyPnl: number | null;
75
+ iqrMonthlyPnl: number | null;
76
+ top5ProfitShare: number | null;
77
+ top10ProfitShare: number | null;
78
+ };
79
+ distribution: {
80
+ medianTrade: number | null;
81
+ p10Trade: number | null;
82
+ p25Trade: number | null;
83
+ p75Trade: number | null;
84
+ p90Trade: number | null;
85
+ largestWin: number | null;
86
+ largestLoss: number | null;
87
+ tailRatio: number | null;
88
+ skewness: number | null;
89
+ };
90
+ riskAdjusted: {
91
+ sharpeDaily: number | null;
92
+ sortinoDaily: number | null;
93
+ calmar: number | null;
94
+ mar: number | null;
95
+ };
96
+ operational: {
97
+ avgSlippageCost: number | null;
98
+ pnlBeforeSlippage: number | null;
99
+ pnlAfterSlippage: number;
100
+ approvalRate: number | null;
101
+ blockedProfitableTrades: number;
102
+ approvedLosingTrades: number;
103
+ symbolConcentrationTop1: number | null;
104
+ symbolConcentrationTop5: number | null;
105
+ sessionConcentrationTop1: number | null;
106
+ longTrades: number;
107
+ shortTrades: number;
108
+ longPnl: number;
109
+ shortPnl: number;
110
+ exitBreakdown: {
111
+ takeProfit: AdvancedExitBreakdownBucket;
112
+ stopLoss: AdvancedExitBreakdownBucket;
113
+ exit: AdvancedExitBreakdownBucket;
114
+ unknown: AdvancedExitBreakdownBucket;
115
+ };
116
+ };
117
+ }
118
+ interface AdvancedTradeMetricsInput {
119
+ trades: AdvancedTradeInput[];
120
+ orderLog?: ReadonlyArray<readonly [number, number]>;
121
+ startTimestamp?: number | null;
122
+ endTimestamp?: number | null;
123
+ }
124
+ declare const calculateAdvancedTradeMetrics: ({ trades, orderLog, startTimestamp, endTimestamp, }: AdvancedTradeMetricsInput) => AdvancedTradeMetrics;
25
125
  /**
26
126
  * Рассчитывает компактный набор действительно полезных метрик:
27
127
  * - Период и частота (periodDays/Months, trades, tradesPerMonth, exposure)
@@ -42,4 +142,4 @@ declare const getFormatted: (stat: Partial<TestStat> | undefined, key: TestThres
42
142
  level: ThresholdLevel;
43
143
  };
44
144
 
45
- export { calculateMaxDrawdown, calculateStatsFull, classifyMetric, createTestSuite, generateName, generateParamGrid, getBacktestScore, getFormatted, mergeConfigs, parseTestName, sortBestTests };
145
+ export { type AdvancedExitBreakdownBucket, type AdvancedQuarterlyPnl, type AdvancedTradeDirection, type AdvancedTradeInput, type AdvancedTradeMetrics, type AdvancedTradeMetricsInput, calculateAdvancedTradeMetrics, calculateMaxDrawdown, calculateStatsFull, classifyMetric, getBacktestScore, getFormatted, parseTestName, sortBestTests };