backtest-kit 6.1.0 → 6.2.0
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/build/index.cjs +34 -0
- package/build/index.mjs +34 -0
- package/package.json +1 -1
- package/types.d.ts +4 -0
package/build/index.cjs
CHANGED
|
@@ -19398,6 +19398,22 @@ const walker_strategy_columns = [
|
|
|
19398
19398
|
: "N/A",
|
|
19399
19399
|
isVisible: () => true,
|
|
19400
19400
|
},
|
|
19401
|
+
{
|
|
19402
|
+
key: "firstEventTime",
|
|
19403
|
+
label: "First Event",
|
|
19404
|
+
format: (data) => data.firstEventTime !== null
|
|
19405
|
+
? new Date(data.firstEventTime).toISOString()
|
|
19406
|
+
: "N/A",
|
|
19407
|
+
isVisible: () => true,
|
|
19408
|
+
},
|
|
19409
|
+
{
|
|
19410
|
+
key: "lastEventTime",
|
|
19411
|
+
label: "Last Event",
|
|
19412
|
+
format: (data) => data.lastEventTime !== null
|
|
19413
|
+
? new Date(data.lastEventTime).toISOString()
|
|
19414
|
+
: "N/A",
|
|
19415
|
+
isVisible: () => true,
|
|
19416
|
+
},
|
|
19401
19417
|
];
|
|
19402
19418
|
/**
|
|
19403
19419
|
* Column configuration for walker PNL table in markdown reports.
|
|
@@ -22206,10 +22222,19 @@ let ReportStorage$6 = class ReportStorage {
|
|
|
22206
22222
|
if (data.strategyName === data.bestStrategy) {
|
|
22207
22223
|
this._bestStats = data.stats;
|
|
22208
22224
|
}
|
|
22225
|
+
const signals = data.stats.signalList;
|
|
22226
|
+
const firstEventTime = signals.length > 0
|
|
22227
|
+
? signals.reduce((acc, s) => s.signal.pendingAt < acc ? s.signal.pendingAt : acc, signals[0].signal.pendingAt)
|
|
22228
|
+
: null;
|
|
22229
|
+
const lastEventTime = signals.length > 0
|
|
22230
|
+
? signals.reduce((acc, s) => s.closeTimestamp > acc ? s.closeTimestamp : acc, signals[0].closeTimestamp)
|
|
22231
|
+
: null;
|
|
22209
22232
|
this._strategyResults.unshift({
|
|
22210
22233
|
strategyName: data.strategyName,
|
|
22211
22234
|
stats: data.stats,
|
|
22212
22235
|
metricValue: isUnsafe$1(data.metricValue) ? null : data.metricValue,
|
|
22236
|
+
firstEventTime,
|
|
22237
|
+
lastEventTime,
|
|
22213
22238
|
});
|
|
22214
22239
|
}
|
|
22215
22240
|
/**
|
|
@@ -28052,6 +28077,13 @@ class WalkerReportService {
|
|
|
28052
28077
|
*/
|
|
28053
28078
|
this.tick = async (data) => {
|
|
28054
28079
|
this.loggerService.log(WALKER_REPORT_METHOD_NAME_TICK, { data });
|
|
28080
|
+
const signals = data.stats.signalList;
|
|
28081
|
+
const firstEventTime = signals.length > 0
|
|
28082
|
+
? signals.reduce((acc, s) => s.signal.pendingAt < acc ? s.signal.pendingAt : acc, signals[0].signal.pendingAt)
|
|
28083
|
+
: null;
|
|
28084
|
+
const lastEventTime = signals.length > 0
|
|
28085
|
+
? signals.reduce((acc, s) => s.closeTimestamp > acc ? s.closeTimestamp : acc, signals[0].closeTimestamp)
|
|
28086
|
+
: null;
|
|
28055
28087
|
await Report.writeData("walker", {
|
|
28056
28088
|
timestamp: getContextTimestamp(),
|
|
28057
28089
|
walkerName: data.walkerName,
|
|
@@ -28076,6 +28108,8 @@ class WalkerReportService {
|
|
|
28076
28108
|
annualizedSharpeRatio: data.stats.annualizedSharpeRatio,
|
|
28077
28109
|
certaintyRatio: data.stats.certaintyRatio,
|
|
28078
28110
|
expectedYearlyReturns: data.stats.expectedYearlyReturns,
|
|
28111
|
+
firstEventTime,
|
|
28112
|
+
lastEventTime,
|
|
28079
28113
|
}, {
|
|
28080
28114
|
symbol: data.symbol,
|
|
28081
28115
|
strategyName: data.strategyName,
|
package/build/index.mjs
CHANGED
|
@@ -19378,6 +19378,22 @@ const walker_strategy_columns = [
|
|
|
19378
19378
|
: "N/A",
|
|
19379
19379
|
isVisible: () => true,
|
|
19380
19380
|
},
|
|
19381
|
+
{
|
|
19382
|
+
key: "firstEventTime",
|
|
19383
|
+
label: "First Event",
|
|
19384
|
+
format: (data) => data.firstEventTime !== null
|
|
19385
|
+
? new Date(data.firstEventTime).toISOString()
|
|
19386
|
+
: "N/A",
|
|
19387
|
+
isVisible: () => true,
|
|
19388
|
+
},
|
|
19389
|
+
{
|
|
19390
|
+
key: "lastEventTime",
|
|
19391
|
+
label: "Last Event",
|
|
19392
|
+
format: (data) => data.lastEventTime !== null
|
|
19393
|
+
? new Date(data.lastEventTime).toISOString()
|
|
19394
|
+
: "N/A",
|
|
19395
|
+
isVisible: () => true,
|
|
19396
|
+
},
|
|
19381
19397
|
];
|
|
19382
19398
|
/**
|
|
19383
19399
|
* Column configuration for walker PNL table in markdown reports.
|
|
@@ -22186,10 +22202,19 @@ let ReportStorage$6 = class ReportStorage {
|
|
|
22186
22202
|
if (data.strategyName === data.bestStrategy) {
|
|
22187
22203
|
this._bestStats = data.stats;
|
|
22188
22204
|
}
|
|
22205
|
+
const signals = data.stats.signalList;
|
|
22206
|
+
const firstEventTime = signals.length > 0
|
|
22207
|
+
? signals.reduce((acc, s) => s.signal.pendingAt < acc ? s.signal.pendingAt : acc, signals[0].signal.pendingAt)
|
|
22208
|
+
: null;
|
|
22209
|
+
const lastEventTime = signals.length > 0
|
|
22210
|
+
? signals.reduce((acc, s) => s.closeTimestamp > acc ? s.closeTimestamp : acc, signals[0].closeTimestamp)
|
|
22211
|
+
: null;
|
|
22189
22212
|
this._strategyResults.unshift({
|
|
22190
22213
|
strategyName: data.strategyName,
|
|
22191
22214
|
stats: data.stats,
|
|
22192
22215
|
metricValue: isUnsafe$1(data.metricValue) ? null : data.metricValue,
|
|
22216
|
+
firstEventTime,
|
|
22217
|
+
lastEventTime,
|
|
22193
22218
|
});
|
|
22194
22219
|
}
|
|
22195
22220
|
/**
|
|
@@ -28032,6 +28057,13 @@ class WalkerReportService {
|
|
|
28032
28057
|
*/
|
|
28033
28058
|
this.tick = async (data) => {
|
|
28034
28059
|
this.loggerService.log(WALKER_REPORT_METHOD_NAME_TICK, { data });
|
|
28060
|
+
const signals = data.stats.signalList;
|
|
28061
|
+
const firstEventTime = signals.length > 0
|
|
28062
|
+
? signals.reduce((acc, s) => s.signal.pendingAt < acc ? s.signal.pendingAt : acc, signals[0].signal.pendingAt)
|
|
28063
|
+
: null;
|
|
28064
|
+
const lastEventTime = signals.length > 0
|
|
28065
|
+
? signals.reduce((acc, s) => s.closeTimestamp > acc ? s.closeTimestamp : acc, signals[0].closeTimestamp)
|
|
28066
|
+
: null;
|
|
28035
28067
|
await Report.writeData("walker", {
|
|
28036
28068
|
timestamp: getContextTimestamp(),
|
|
28037
28069
|
walkerName: data.walkerName,
|
|
@@ -28056,6 +28088,8 @@ class WalkerReportService {
|
|
|
28056
28088
|
annualizedSharpeRatio: data.stats.annualizedSharpeRatio,
|
|
28057
28089
|
certaintyRatio: data.stats.certaintyRatio,
|
|
28058
28090
|
expectedYearlyReturns: data.stats.expectedYearlyReturns,
|
|
28091
|
+
firstEventTime,
|
|
28092
|
+
lastEventTime,
|
|
28059
28093
|
}, {
|
|
28060
28094
|
symbol: data.symbol,
|
|
28061
28095
|
strategyName: data.strategyName,
|
package/package.json
CHANGED
package/types.d.ts
CHANGED
|
@@ -10311,6 +10311,10 @@ interface IStrategyResult {
|
|
|
10311
10311
|
stats: BacktestStatisticsModel;
|
|
10312
10312
|
/** Value of the optimization metric (null if invalid) */
|
|
10313
10313
|
metricValue: number | null;
|
|
10314
|
+
/** Timestamp of the first signal event (pendingAt of earliest signal), null if no signals */
|
|
10315
|
+
firstEventTime: number | null;
|
|
10316
|
+
/** Timestamp of the last signal event (closeTimestamp of latest signal), null if no signals */
|
|
10317
|
+
lastEventTime: number | null;
|
|
10314
10318
|
}
|
|
10315
10319
|
/**
|
|
10316
10320
|
* Alias for walker statistics result interface.
|