@tradejs/node 3.1.28 → 3.1.29-beta.259
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/dist/ai.js +4 -1
- package/dist/ai.mjs +1 -1
- package/dist/backtest.js +941 -35
- package/dist/backtest.mjs +7 -3
- package/dist/chunk-3BBXGZ7M.mjs +271 -0
- package/dist/{chunk-K2YQ3MQC.mjs → chunk-BO42QWAB.mjs} +11 -2
- package/dist/{chunk-UITD6LG6.mjs → chunk-UL5Z46JL.mjs} +4 -1
- package/dist/{chunk-JDFPF2RG.mjs → chunk-WGL7XJ3W.mjs} +24 -2
- package/dist/chunk-ZZQLTUTP.mjs +614 -0
- package/dist/cli.js +9 -1
- package/dist/cli.mjs +6 -1
- package/dist/jev.d.mts +342 -0
- package/dist/jev.d.ts +342 -0
- package/dist/jev.js +931 -0
- package/dist/jev.mjs +23 -0
- package/dist/jevTraining-JYXUVAZG.mjs +13 -0
- package/dist/registry.js +933 -29
- package/dist/registry.mjs +4 -2
- package/dist/runtimeDashboard.js +952 -39
- package/dist/runtimeDashboard.mjs +5 -3
- package/dist/runtimeStrategies.js +952 -39
- package/dist/runtimeStrategies.mjs +5 -3
- package/dist/strategies.js +931 -27
- package/dist/strategies.mjs +4 -2
- package/package.json +10 -5
package/dist/jev.d.mts
ADDED
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
import { Signal, JevInput, JevGateModel, JevStudyRow, JevDimension, JevConfig, SignalAssessment, JevRecord } from '@tradejs/types';
|
|
2
|
+
|
|
3
|
+
/** Only explicitly selected signal-time facts enter the provider request. */
|
|
4
|
+
declare const buildJevInput: (signal: Signal) => JevInput;
|
|
5
|
+
declare const JEV_QUESTIONS: {
|
|
6
|
+
readonly trend: {
|
|
7
|
+
readonly type: "score";
|
|
8
|
+
readonly instructions: "Does market.trendBias support signal.direction? Judge only the target-asset trend, not swings or setup quality.";
|
|
9
|
+
readonly criteria: string[];
|
|
10
|
+
};
|
|
11
|
+
readonly swing: {
|
|
12
|
+
readonly type: "score";
|
|
13
|
+
readonly instructions: "Does market.swingBias support signal.direction? Judge only the target-asset swing structure, not the broader trend.";
|
|
14
|
+
readonly criteria: string[];
|
|
15
|
+
};
|
|
16
|
+
readonly participation: {
|
|
17
|
+
readonly type: "score";
|
|
18
|
+
readonly instructions: "Does the supplied market.volumeRel20 or market.deltaPct show target-asset participation supportive of this direction? Ignore strategy setup volume and do not infer missing flow.";
|
|
19
|
+
readonly criteria: string[];
|
|
20
|
+
};
|
|
21
|
+
readonly setupParticipation: {
|
|
22
|
+
readonly type: "score";
|
|
23
|
+
readonly instructions: "Do the strategy-defined setup volume, flow or liquidity facts support the named setup? Use only relevant setup.* facts, not market.volumeRel20; do not infer missing data.";
|
|
24
|
+
readonly criteria: string[];
|
|
25
|
+
};
|
|
26
|
+
readonly extension: {
|
|
27
|
+
readonly type: "score";
|
|
28
|
+
readonly instructions: "Do the supplied ATR-normalized entry-distance facts suggest the entry is not excessively extended? Use only distance facts; do not calculate new ratios or judge confirmation.";
|
|
29
|
+
readonly criteria: string[];
|
|
30
|
+
};
|
|
31
|
+
readonly confirmation: {
|
|
32
|
+
readonly type: "score";
|
|
33
|
+
readonly instructions: "Do the supplied setup stage and confirmation facts indicate a confirmed rather than premature entry? Do not judge distance or predict the outcome.";
|
|
34
|
+
readonly criteria: string[];
|
|
35
|
+
};
|
|
36
|
+
readonly setupStrength: {
|
|
37
|
+
readonly type: "score";
|
|
38
|
+
readonly instructions: "Do the strategy-defined setup strength and quality facts support this candidate? Exclude volume, confirmation, entry distance and geometry; do not assume missing facts.";
|
|
39
|
+
readonly criteria: string[];
|
|
40
|
+
};
|
|
41
|
+
readonly geometry: {
|
|
42
|
+
readonly type: "score";
|
|
43
|
+
readonly instructions: "Do the supplied geometry.* facts support the named setup? Do not infer unseen figure points or certify mathematical validity.";
|
|
44
|
+
readonly criteria: string[];
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
declare const validateJevGateModel: (value: unknown) => JevGateModel;
|
|
49
|
+
declare const compareJevGate: (model: JevGateModel, input: JevStudyRow[], minScores?: Partial<Record<JevDimension, number>>) => {
|
|
50
|
+
rows: number;
|
|
51
|
+
start: number;
|
|
52
|
+
end: number;
|
|
53
|
+
agreement: number;
|
|
54
|
+
teacherOnly: number;
|
|
55
|
+
studentOnly: number;
|
|
56
|
+
dimensionErrors: {
|
|
57
|
+
[k: string]: {
|
|
58
|
+
n: number;
|
|
59
|
+
mae: number | null;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
outcomeScope: string;
|
|
63
|
+
cohorts: {
|
|
64
|
+
[k: string]: {
|
|
65
|
+
core: {
|
|
66
|
+
rows: number;
|
|
67
|
+
knownOutcomes: number;
|
|
68
|
+
pnl: number;
|
|
69
|
+
pnlPerTrade: number | null;
|
|
70
|
+
profitFactor: number | null;
|
|
71
|
+
winRate: number | null;
|
|
72
|
+
};
|
|
73
|
+
baseline: {
|
|
74
|
+
rows: number;
|
|
75
|
+
knownOutcomes: number;
|
|
76
|
+
pnl: number;
|
|
77
|
+
pnlPerTrade: number | null;
|
|
78
|
+
profitFactor: number | null;
|
|
79
|
+
winRate: number | null;
|
|
80
|
+
};
|
|
81
|
+
jev: {
|
|
82
|
+
rows: number;
|
|
83
|
+
knownOutcomes: number;
|
|
84
|
+
pnl: number;
|
|
85
|
+
pnlPerTrade: number | null;
|
|
86
|
+
profitFactor: number | null;
|
|
87
|
+
winRate: number | null;
|
|
88
|
+
};
|
|
89
|
+
local: {
|
|
90
|
+
rows: number;
|
|
91
|
+
knownOutcomes: number;
|
|
92
|
+
pnl: number;
|
|
93
|
+
pnlPerTrade: number | null;
|
|
94
|
+
profitFactor: number | null;
|
|
95
|
+
winRate: number | null;
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
declare const trainJevGate: (input: JevStudyRow[], options?: {
|
|
101
|
+
maxDepth?: number;
|
|
102
|
+
minLeaf?: number;
|
|
103
|
+
}) => {
|
|
104
|
+
model: JevGateModel;
|
|
105
|
+
report: {
|
|
106
|
+
train: {
|
|
107
|
+
rows: number;
|
|
108
|
+
start: number;
|
|
109
|
+
end: number;
|
|
110
|
+
agreement: number;
|
|
111
|
+
teacherOnly: number;
|
|
112
|
+
studentOnly: number;
|
|
113
|
+
dimensionErrors: {
|
|
114
|
+
[k: string]: {
|
|
115
|
+
n: number;
|
|
116
|
+
mae: number | null;
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
outcomeScope: string;
|
|
120
|
+
cohorts: {
|
|
121
|
+
[k: string]: {
|
|
122
|
+
core: {
|
|
123
|
+
rows: number;
|
|
124
|
+
knownOutcomes: number;
|
|
125
|
+
pnl: number;
|
|
126
|
+
pnlPerTrade: number | null;
|
|
127
|
+
profitFactor: number | null;
|
|
128
|
+
winRate: number | null;
|
|
129
|
+
};
|
|
130
|
+
baseline: {
|
|
131
|
+
rows: number;
|
|
132
|
+
knownOutcomes: number;
|
|
133
|
+
pnl: number;
|
|
134
|
+
pnlPerTrade: number | null;
|
|
135
|
+
profitFactor: number | null;
|
|
136
|
+
winRate: number | null;
|
|
137
|
+
};
|
|
138
|
+
jev: {
|
|
139
|
+
rows: number;
|
|
140
|
+
knownOutcomes: number;
|
|
141
|
+
pnl: number;
|
|
142
|
+
pnlPerTrade: number | null;
|
|
143
|
+
profitFactor: number | null;
|
|
144
|
+
winRate: number | null;
|
|
145
|
+
};
|
|
146
|
+
local: {
|
|
147
|
+
rows: number;
|
|
148
|
+
knownOutcomes: number;
|
|
149
|
+
pnl: number;
|
|
150
|
+
pnlPerTrade: number | null;
|
|
151
|
+
profitFactor: number | null;
|
|
152
|
+
winRate: number | null;
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
validation: {
|
|
158
|
+
rows: number;
|
|
159
|
+
start: number;
|
|
160
|
+
end: number;
|
|
161
|
+
agreement: number;
|
|
162
|
+
teacherOnly: number;
|
|
163
|
+
studentOnly: number;
|
|
164
|
+
dimensionErrors: {
|
|
165
|
+
[k: string]: {
|
|
166
|
+
n: number;
|
|
167
|
+
mae: number | null;
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
outcomeScope: string;
|
|
171
|
+
cohorts: {
|
|
172
|
+
[k: string]: {
|
|
173
|
+
core: {
|
|
174
|
+
rows: number;
|
|
175
|
+
knownOutcomes: number;
|
|
176
|
+
pnl: number;
|
|
177
|
+
pnlPerTrade: number | null;
|
|
178
|
+
profitFactor: number | null;
|
|
179
|
+
winRate: number | null;
|
|
180
|
+
};
|
|
181
|
+
baseline: {
|
|
182
|
+
rows: number;
|
|
183
|
+
knownOutcomes: number;
|
|
184
|
+
pnl: number;
|
|
185
|
+
pnlPerTrade: number | null;
|
|
186
|
+
profitFactor: number | null;
|
|
187
|
+
winRate: number | null;
|
|
188
|
+
};
|
|
189
|
+
jev: {
|
|
190
|
+
rows: number;
|
|
191
|
+
knownOutcomes: number;
|
|
192
|
+
pnl: number;
|
|
193
|
+
pnlPerTrade: number | null;
|
|
194
|
+
profitFactor: number | null;
|
|
195
|
+
winRate: number | null;
|
|
196
|
+
};
|
|
197
|
+
local: {
|
|
198
|
+
rows: number;
|
|
199
|
+
knownOutcomes: number;
|
|
200
|
+
pnl: number;
|
|
201
|
+
pnlPerTrade: number | null;
|
|
202
|
+
profitFactor: number | null;
|
|
203
|
+
winRate: number | null;
|
|
204
|
+
};
|
|
205
|
+
};
|
|
206
|
+
};
|
|
207
|
+
};
|
|
208
|
+
test: {
|
|
209
|
+
rows: number;
|
|
210
|
+
start: number;
|
|
211
|
+
end: number;
|
|
212
|
+
agreement: number;
|
|
213
|
+
teacherOnly: number;
|
|
214
|
+
studentOnly: number;
|
|
215
|
+
dimensionErrors: {
|
|
216
|
+
[k: string]: {
|
|
217
|
+
n: number;
|
|
218
|
+
mae: number | null;
|
|
219
|
+
};
|
|
220
|
+
};
|
|
221
|
+
outcomeScope: string;
|
|
222
|
+
cohorts: {
|
|
223
|
+
[k: string]: {
|
|
224
|
+
core: {
|
|
225
|
+
rows: number;
|
|
226
|
+
knownOutcomes: number;
|
|
227
|
+
pnl: number;
|
|
228
|
+
pnlPerTrade: number | null;
|
|
229
|
+
profitFactor: number | null;
|
|
230
|
+
winRate: number | null;
|
|
231
|
+
};
|
|
232
|
+
baseline: {
|
|
233
|
+
rows: number;
|
|
234
|
+
knownOutcomes: number;
|
|
235
|
+
pnl: number;
|
|
236
|
+
pnlPerTrade: number | null;
|
|
237
|
+
profitFactor: number | null;
|
|
238
|
+
winRate: number | null;
|
|
239
|
+
};
|
|
240
|
+
jev: {
|
|
241
|
+
rows: number;
|
|
242
|
+
knownOutcomes: number;
|
|
243
|
+
pnl: number;
|
|
244
|
+
pnlPerTrade: number | null;
|
|
245
|
+
profitFactor: number | null;
|
|
246
|
+
winRate: number | null;
|
|
247
|
+
};
|
|
248
|
+
local: {
|
|
249
|
+
rows: number;
|
|
250
|
+
knownOutcomes: number;
|
|
251
|
+
pnl: number;
|
|
252
|
+
pnlPerTrade: number | null;
|
|
253
|
+
profitFactor: number | null;
|
|
254
|
+
winRate: number | null;
|
|
255
|
+
};
|
|
256
|
+
};
|
|
257
|
+
};
|
|
258
|
+
};
|
|
259
|
+
walkForward: {
|
|
260
|
+
trainThrough: number;
|
|
261
|
+
validationThrough: number;
|
|
262
|
+
testThrough: number;
|
|
263
|
+
trainRows: number;
|
|
264
|
+
test: {
|
|
265
|
+
rows: number;
|
|
266
|
+
start: number;
|
|
267
|
+
end: number;
|
|
268
|
+
agreement: number;
|
|
269
|
+
teacherOnly: number;
|
|
270
|
+
studentOnly: number;
|
|
271
|
+
dimensionErrors: {
|
|
272
|
+
[k: string]: {
|
|
273
|
+
n: number;
|
|
274
|
+
mae: number | null;
|
|
275
|
+
};
|
|
276
|
+
};
|
|
277
|
+
outcomeScope: string;
|
|
278
|
+
cohorts: {
|
|
279
|
+
[k: string]: {
|
|
280
|
+
core: {
|
|
281
|
+
rows: number;
|
|
282
|
+
knownOutcomes: number;
|
|
283
|
+
pnl: number;
|
|
284
|
+
pnlPerTrade: number | null;
|
|
285
|
+
profitFactor: number | null;
|
|
286
|
+
winRate: number | null;
|
|
287
|
+
};
|
|
288
|
+
baseline: {
|
|
289
|
+
rows: number;
|
|
290
|
+
knownOutcomes: number;
|
|
291
|
+
pnl: number;
|
|
292
|
+
pnlPerTrade: number | null;
|
|
293
|
+
profitFactor: number | null;
|
|
294
|
+
winRate: number | null;
|
|
295
|
+
};
|
|
296
|
+
jev: {
|
|
297
|
+
rows: number;
|
|
298
|
+
knownOutcomes: number;
|
|
299
|
+
pnl: number;
|
|
300
|
+
pnlPerTrade: number | null;
|
|
301
|
+
profitFactor: number | null;
|
|
302
|
+
winRate: number | null;
|
|
303
|
+
};
|
|
304
|
+
local: {
|
|
305
|
+
rows: number;
|
|
306
|
+
knownOutcomes: number;
|
|
307
|
+
pnl: number;
|
|
308
|
+
pnlPerTrade: number | null;
|
|
309
|
+
profitFactor: number | null;
|
|
310
|
+
winRate: number | null;
|
|
311
|
+
};
|
|
312
|
+
};
|
|
313
|
+
};
|
|
314
|
+
};
|
|
315
|
+
}[];
|
|
316
|
+
promotion: string;
|
|
317
|
+
};
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
declare const resolveJevProvider: (userName: string) => Promise<{
|
|
321
|
+
endpoint: string;
|
|
322
|
+
model: string;
|
|
323
|
+
}>;
|
|
324
|
+
declare const evaluateJevInput: ({ input, config, userName, projectRoot, }: {
|
|
325
|
+
input: JevInput;
|
|
326
|
+
config: JevConfig;
|
|
327
|
+
userName: string;
|
|
328
|
+
projectRoot: string;
|
|
329
|
+
}) => Promise<{
|
|
330
|
+
assessment: SignalAssessment;
|
|
331
|
+
record?: JevRecord;
|
|
332
|
+
}>;
|
|
333
|
+
declare const assessSignalWithJev: ({ signal, config, userName, projectRoot, strict, scope, }: {
|
|
334
|
+
signal: Signal;
|
|
335
|
+
config: JevConfig;
|
|
336
|
+
userName: string;
|
|
337
|
+
projectRoot: string;
|
|
338
|
+
strict: boolean;
|
|
339
|
+
scope?: string;
|
|
340
|
+
}) => Promise<SignalAssessment>;
|
|
341
|
+
|
|
342
|
+
export { JEV_QUESTIONS, assessSignalWithJev, buildJevInput, compareJevGate, evaluateJevInput, resolveJevProvider, trainJevGate, validateJevGateModel };
|
package/dist/jev.d.ts
ADDED
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
import { Signal, JevInput, JevGateModel, JevStudyRow, JevDimension, JevConfig, SignalAssessment, JevRecord } from '@tradejs/types';
|
|
2
|
+
|
|
3
|
+
/** Only explicitly selected signal-time facts enter the provider request. */
|
|
4
|
+
declare const buildJevInput: (signal: Signal) => JevInput;
|
|
5
|
+
declare const JEV_QUESTIONS: {
|
|
6
|
+
readonly trend: {
|
|
7
|
+
readonly type: "score";
|
|
8
|
+
readonly instructions: "Does market.trendBias support signal.direction? Judge only the target-asset trend, not swings or setup quality.";
|
|
9
|
+
readonly criteria: string[];
|
|
10
|
+
};
|
|
11
|
+
readonly swing: {
|
|
12
|
+
readonly type: "score";
|
|
13
|
+
readonly instructions: "Does market.swingBias support signal.direction? Judge only the target-asset swing structure, not the broader trend.";
|
|
14
|
+
readonly criteria: string[];
|
|
15
|
+
};
|
|
16
|
+
readonly participation: {
|
|
17
|
+
readonly type: "score";
|
|
18
|
+
readonly instructions: "Does the supplied market.volumeRel20 or market.deltaPct show target-asset participation supportive of this direction? Ignore strategy setup volume and do not infer missing flow.";
|
|
19
|
+
readonly criteria: string[];
|
|
20
|
+
};
|
|
21
|
+
readonly setupParticipation: {
|
|
22
|
+
readonly type: "score";
|
|
23
|
+
readonly instructions: "Do the strategy-defined setup volume, flow or liquidity facts support the named setup? Use only relevant setup.* facts, not market.volumeRel20; do not infer missing data.";
|
|
24
|
+
readonly criteria: string[];
|
|
25
|
+
};
|
|
26
|
+
readonly extension: {
|
|
27
|
+
readonly type: "score";
|
|
28
|
+
readonly instructions: "Do the supplied ATR-normalized entry-distance facts suggest the entry is not excessively extended? Use only distance facts; do not calculate new ratios or judge confirmation.";
|
|
29
|
+
readonly criteria: string[];
|
|
30
|
+
};
|
|
31
|
+
readonly confirmation: {
|
|
32
|
+
readonly type: "score";
|
|
33
|
+
readonly instructions: "Do the supplied setup stage and confirmation facts indicate a confirmed rather than premature entry? Do not judge distance or predict the outcome.";
|
|
34
|
+
readonly criteria: string[];
|
|
35
|
+
};
|
|
36
|
+
readonly setupStrength: {
|
|
37
|
+
readonly type: "score";
|
|
38
|
+
readonly instructions: "Do the strategy-defined setup strength and quality facts support this candidate? Exclude volume, confirmation, entry distance and geometry; do not assume missing facts.";
|
|
39
|
+
readonly criteria: string[];
|
|
40
|
+
};
|
|
41
|
+
readonly geometry: {
|
|
42
|
+
readonly type: "score";
|
|
43
|
+
readonly instructions: "Do the supplied geometry.* facts support the named setup? Do not infer unseen figure points or certify mathematical validity.";
|
|
44
|
+
readonly criteria: string[];
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
declare const validateJevGateModel: (value: unknown) => JevGateModel;
|
|
49
|
+
declare const compareJevGate: (model: JevGateModel, input: JevStudyRow[], minScores?: Partial<Record<JevDimension, number>>) => {
|
|
50
|
+
rows: number;
|
|
51
|
+
start: number;
|
|
52
|
+
end: number;
|
|
53
|
+
agreement: number;
|
|
54
|
+
teacherOnly: number;
|
|
55
|
+
studentOnly: number;
|
|
56
|
+
dimensionErrors: {
|
|
57
|
+
[k: string]: {
|
|
58
|
+
n: number;
|
|
59
|
+
mae: number | null;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
outcomeScope: string;
|
|
63
|
+
cohorts: {
|
|
64
|
+
[k: string]: {
|
|
65
|
+
core: {
|
|
66
|
+
rows: number;
|
|
67
|
+
knownOutcomes: number;
|
|
68
|
+
pnl: number;
|
|
69
|
+
pnlPerTrade: number | null;
|
|
70
|
+
profitFactor: number | null;
|
|
71
|
+
winRate: number | null;
|
|
72
|
+
};
|
|
73
|
+
baseline: {
|
|
74
|
+
rows: number;
|
|
75
|
+
knownOutcomes: number;
|
|
76
|
+
pnl: number;
|
|
77
|
+
pnlPerTrade: number | null;
|
|
78
|
+
profitFactor: number | null;
|
|
79
|
+
winRate: number | null;
|
|
80
|
+
};
|
|
81
|
+
jev: {
|
|
82
|
+
rows: number;
|
|
83
|
+
knownOutcomes: number;
|
|
84
|
+
pnl: number;
|
|
85
|
+
pnlPerTrade: number | null;
|
|
86
|
+
profitFactor: number | null;
|
|
87
|
+
winRate: number | null;
|
|
88
|
+
};
|
|
89
|
+
local: {
|
|
90
|
+
rows: number;
|
|
91
|
+
knownOutcomes: number;
|
|
92
|
+
pnl: number;
|
|
93
|
+
pnlPerTrade: number | null;
|
|
94
|
+
profitFactor: number | null;
|
|
95
|
+
winRate: number | null;
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
declare const trainJevGate: (input: JevStudyRow[], options?: {
|
|
101
|
+
maxDepth?: number;
|
|
102
|
+
minLeaf?: number;
|
|
103
|
+
}) => {
|
|
104
|
+
model: JevGateModel;
|
|
105
|
+
report: {
|
|
106
|
+
train: {
|
|
107
|
+
rows: number;
|
|
108
|
+
start: number;
|
|
109
|
+
end: number;
|
|
110
|
+
agreement: number;
|
|
111
|
+
teacherOnly: number;
|
|
112
|
+
studentOnly: number;
|
|
113
|
+
dimensionErrors: {
|
|
114
|
+
[k: string]: {
|
|
115
|
+
n: number;
|
|
116
|
+
mae: number | null;
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
outcomeScope: string;
|
|
120
|
+
cohorts: {
|
|
121
|
+
[k: string]: {
|
|
122
|
+
core: {
|
|
123
|
+
rows: number;
|
|
124
|
+
knownOutcomes: number;
|
|
125
|
+
pnl: number;
|
|
126
|
+
pnlPerTrade: number | null;
|
|
127
|
+
profitFactor: number | null;
|
|
128
|
+
winRate: number | null;
|
|
129
|
+
};
|
|
130
|
+
baseline: {
|
|
131
|
+
rows: number;
|
|
132
|
+
knownOutcomes: number;
|
|
133
|
+
pnl: number;
|
|
134
|
+
pnlPerTrade: number | null;
|
|
135
|
+
profitFactor: number | null;
|
|
136
|
+
winRate: number | null;
|
|
137
|
+
};
|
|
138
|
+
jev: {
|
|
139
|
+
rows: number;
|
|
140
|
+
knownOutcomes: number;
|
|
141
|
+
pnl: number;
|
|
142
|
+
pnlPerTrade: number | null;
|
|
143
|
+
profitFactor: number | null;
|
|
144
|
+
winRate: number | null;
|
|
145
|
+
};
|
|
146
|
+
local: {
|
|
147
|
+
rows: number;
|
|
148
|
+
knownOutcomes: number;
|
|
149
|
+
pnl: number;
|
|
150
|
+
pnlPerTrade: number | null;
|
|
151
|
+
profitFactor: number | null;
|
|
152
|
+
winRate: number | null;
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
validation: {
|
|
158
|
+
rows: number;
|
|
159
|
+
start: number;
|
|
160
|
+
end: number;
|
|
161
|
+
agreement: number;
|
|
162
|
+
teacherOnly: number;
|
|
163
|
+
studentOnly: number;
|
|
164
|
+
dimensionErrors: {
|
|
165
|
+
[k: string]: {
|
|
166
|
+
n: number;
|
|
167
|
+
mae: number | null;
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
outcomeScope: string;
|
|
171
|
+
cohorts: {
|
|
172
|
+
[k: string]: {
|
|
173
|
+
core: {
|
|
174
|
+
rows: number;
|
|
175
|
+
knownOutcomes: number;
|
|
176
|
+
pnl: number;
|
|
177
|
+
pnlPerTrade: number | null;
|
|
178
|
+
profitFactor: number | null;
|
|
179
|
+
winRate: number | null;
|
|
180
|
+
};
|
|
181
|
+
baseline: {
|
|
182
|
+
rows: number;
|
|
183
|
+
knownOutcomes: number;
|
|
184
|
+
pnl: number;
|
|
185
|
+
pnlPerTrade: number | null;
|
|
186
|
+
profitFactor: number | null;
|
|
187
|
+
winRate: number | null;
|
|
188
|
+
};
|
|
189
|
+
jev: {
|
|
190
|
+
rows: number;
|
|
191
|
+
knownOutcomes: number;
|
|
192
|
+
pnl: number;
|
|
193
|
+
pnlPerTrade: number | null;
|
|
194
|
+
profitFactor: number | null;
|
|
195
|
+
winRate: number | null;
|
|
196
|
+
};
|
|
197
|
+
local: {
|
|
198
|
+
rows: number;
|
|
199
|
+
knownOutcomes: number;
|
|
200
|
+
pnl: number;
|
|
201
|
+
pnlPerTrade: number | null;
|
|
202
|
+
profitFactor: number | null;
|
|
203
|
+
winRate: number | null;
|
|
204
|
+
};
|
|
205
|
+
};
|
|
206
|
+
};
|
|
207
|
+
};
|
|
208
|
+
test: {
|
|
209
|
+
rows: number;
|
|
210
|
+
start: number;
|
|
211
|
+
end: number;
|
|
212
|
+
agreement: number;
|
|
213
|
+
teacherOnly: number;
|
|
214
|
+
studentOnly: number;
|
|
215
|
+
dimensionErrors: {
|
|
216
|
+
[k: string]: {
|
|
217
|
+
n: number;
|
|
218
|
+
mae: number | null;
|
|
219
|
+
};
|
|
220
|
+
};
|
|
221
|
+
outcomeScope: string;
|
|
222
|
+
cohorts: {
|
|
223
|
+
[k: string]: {
|
|
224
|
+
core: {
|
|
225
|
+
rows: number;
|
|
226
|
+
knownOutcomes: number;
|
|
227
|
+
pnl: number;
|
|
228
|
+
pnlPerTrade: number | null;
|
|
229
|
+
profitFactor: number | null;
|
|
230
|
+
winRate: number | null;
|
|
231
|
+
};
|
|
232
|
+
baseline: {
|
|
233
|
+
rows: number;
|
|
234
|
+
knownOutcomes: number;
|
|
235
|
+
pnl: number;
|
|
236
|
+
pnlPerTrade: number | null;
|
|
237
|
+
profitFactor: number | null;
|
|
238
|
+
winRate: number | null;
|
|
239
|
+
};
|
|
240
|
+
jev: {
|
|
241
|
+
rows: number;
|
|
242
|
+
knownOutcomes: number;
|
|
243
|
+
pnl: number;
|
|
244
|
+
pnlPerTrade: number | null;
|
|
245
|
+
profitFactor: number | null;
|
|
246
|
+
winRate: number | null;
|
|
247
|
+
};
|
|
248
|
+
local: {
|
|
249
|
+
rows: number;
|
|
250
|
+
knownOutcomes: number;
|
|
251
|
+
pnl: number;
|
|
252
|
+
pnlPerTrade: number | null;
|
|
253
|
+
profitFactor: number | null;
|
|
254
|
+
winRate: number | null;
|
|
255
|
+
};
|
|
256
|
+
};
|
|
257
|
+
};
|
|
258
|
+
};
|
|
259
|
+
walkForward: {
|
|
260
|
+
trainThrough: number;
|
|
261
|
+
validationThrough: number;
|
|
262
|
+
testThrough: number;
|
|
263
|
+
trainRows: number;
|
|
264
|
+
test: {
|
|
265
|
+
rows: number;
|
|
266
|
+
start: number;
|
|
267
|
+
end: number;
|
|
268
|
+
agreement: number;
|
|
269
|
+
teacherOnly: number;
|
|
270
|
+
studentOnly: number;
|
|
271
|
+
dimensionErrors: {
|
|
272
|
+
[k: string]: {
|
|
273
|
+
n: number;
|
|
274
|
+
mae: number | null;
|
|
275
|
+
};
|
|
276
|
+
};
|
|
277
|
+
outcomeScope: string;
|
|
278
|
+
cohorts: {
|
|
279
|
+
[k: string]: {
|
|
280
|
+
core: {
|
|
281
|
+
rows: number;
|
|
282
|
+
knownOutcomes: number;
|
|
283
|
+
pnl: number;
|
|
284
|
+
pnlPerTrade: number | null;
|
|
285
|
+
profitFactor: number | null;
|
|
286
|
+
winRate: number | null;
|
|
287
|
+
};
|
|
288
|
+
baseline: {
|
|
289
|
+
rows: number;
|
|
290
|
+
knownOutcomes: number;
|
|
291
|
+
pnl: number;
|
|
292
|
+
pnlPerTrade: number | null;
|
|
293
|
+
profitFactor: number | null;
|
|
294
|
+
winRate: number | null;
|
|
295
|
+
};
|
|
296
|
+
jev: {
|
|
297
|
+
rows: number;
|
|
298
|
+
knownOutcomes: number;
|
|
299
|
+
pnl: number;
|
|
300
|
+
pnlPerTrade: number | null;
|
|
301
|
+
profitFactor: number | null;
|
|
302
|
+
winRate: number | null;
|
|
303
|
+
};
|
|
304
|
+
local: {
|
|
305
|
+
rows: number;
|
|
306
|
+
knownOutcomes: number;
|
|
307
|
+
pnl: number;
|
|
308
|
+
pnlPerTrade: number | null;
|
|
309
|
+
profitFactor: number | null;
|
|
310
|
+
winRate: number | null;
|
|
311
|
+
};
|
|
312
|
+
};
|
|
313
|
+
};
|
|
314
|
+
};
|
|
315
|
+
}[];
|
|
316
|
+
promotion: string;
|
|
317
|
+
};
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
declare const resolveJevProvider: (userName: string) => Promise<{
|
|
321
|
+
endpoint: string;
|
|
322
|
+
model: string;
|
|
323
|
+
}>;
|
|
324
|
+
declare const evaluateJevInput: ({ input, config, userName, projectRoot, }: {
|
|
325
|
+
input: JevInput;
|
|
326
|
+
config: JevConfig;
|
|
327
|
+
userName: string;
|
|
328
|
+
projectRoot: string;
|
|
329
|
+
}) => Promise<{
|
|
330
|
+
assessment: SignalAssessment;
|
|
331
|
+
record?: JevRecord;
|
|
332
|
+
}>;
|
|
333
|
+
declare const assessSignalWithJev: ({ signal, config, userName, projectRoot, strict, scope, }: {
|
|
334
|
+
signal: Signal;
|
|
335
|
+
config: JevConfig;
|
|
336
|
+
userName: string;
|
|
337
|
+
projectRoot: string;
|
|
338
|
+
strict: boolean;
|
|
339
|
+
scope?: string;
|
|
340
|
+
}) => Promise<SignalAssessment>;
|
|
341
|
+
|
|
342
|
+
export { JEV_QUESTIONS, assessSignalWithJev, buildJevInput, compareJevGate, evaluateJevInput, resolveJevProvider, trainJevGate, validateJevGateModel };
|