@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.
- package/README.md +1 -1
- package/dist/backtest.d.mts +109 -9
- package/dist/backtest.d.ts +109 -9
- package/dist/backtest.js +487 -145
- package/dist/backtest.mjs +414 -82
- package/dist/{chunk-FNLPYYML.mjs → chunk-BOETNABM.mjs} +22 -1
- package/dist/chunk-EQEIRB6P.mjs +11847 -0
- package/dist/{chunk-2ORZC66W.mjs → chunk-MKCQSB4H.mjs} +65 -6
- package/dist/chunk-OJPHC3S2.mjs +8 -0
- package/dist/constants.d.mts +26 -5
- package/dist/constants.d.ts +26 -5
- package/dist/constants.js +81 -9
- package/dist/constants.mjs +31 -5
- package/dist/data.mjs +3 -5
- package/dist/grid.d.mts +9 -0
- package/dist/grid.d.ts +9 -0
- package/dist/grid.js +168 -0
- package/dist/grid.mjs +98 -0
- package/dist/indicators-Da_i06-8.d.mts +288 -0
- package/dist/indicators-Da_i06-8.d.ts +288 -0
- package/dist/indicators.d.mts +4 -39
- package/dist/indicators.d.ts +4 -39
- package/dist/indicators.js +10488 -423
- package/dist/indicators.mjs +11 -3
- package/dist/strategies.d.mts +31 -12
- package/dist/strategies.d.ts +31 -12
- package/dist/strategies.js +11283 -336
- package/dist/strategies.mjs +1246 -119
- package/dist/{time-BMkFD4Kd.d.mts → time-BQ3AXmxo.d.mts} +3 -1
- package/dist/{time-BMkFD4Kd.d.ts → time-BQ3AXmxo.d.ts} +3 -1
- package/dist/time.d.mts +1 -1
- package/dist/time.d.ts +1 -1
- package/dist/time.js +38 -0
- package/dist/time.mjs +6 -2
- package/dist/trade.d.mts +54 -0
- package/dist/trade.d.ts +54 -0
- package/dist/trade.js +352 -0
- package/dist/trade.mjs +264 -0
- package/package.json +19 -5
- package/dist/chunk-UK6VTOUX.mjs +0 -1810
- package/dist/indicators-B-GGjP5F.d.mts +0 -65
- 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`.
|
package/dist/backtest.d.mts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { c as compactOrderLog, g as getTimeline } from './time-
|
|
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 {
|
|
145
|
+
export { type AdvancedExitBreakdownBucket, type AdvancedQuarterlyPnl, type AdvancedTradeDirection, type AdvancedTradeInput, type AdvancedTradeMetrics, type AdvancedTradeMetricsInput, calculateAdvancedTradeMetrics, calculateMaxDrawdown, calculateStatsFull, classifyMetric, getBacktestScore, getFormatted, parseTestName, sortBestTests };
|
package/dist/backtest.d.ts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { c as compactOrderLog, g as getTimeline } from './time-
|
|
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 {
|
|
145
|
+
export { type AdvancedExitBreakdownBucket, type AdvancedQuarterlyPnl, type AdvancedTradeDirection, type AdvancedTradeInput, type AdvancedTradeMetrics, type AdvancedTradeMetricsInput, calculateAdvancedTradeMetrics, calculateMaxDrawdown, calculateStatsFull, classifyMetric, getBacktestScore, getFormatted, parseTestName, sortBestTests };
|