backtest-kit 1.5.9 → 1.5.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/build/index.cjs CHANGED
@@ -9321,6 +9321,8 @@ class OptimizerTemplateService {
9321
9321
  ``,
9322
9322
  ` await dumpJson(resultId, messages, result);`,
9323
9323
  ``,
9324
+ ` result.id = resultId;`,
9325
+ ``,
9324
9326
  ` return result;`,
9325
9327
  ` },`,
9326
9328
  `});`
@@ -11315,6 +11317,35 @@ class PartialGlobalService {
11315
11317
  * Handles actual ClientPartial instance creation and management.
11316
11318
  */
11317
11319
  this.partialConnectionService = inject(TYPES.partialConnectionService);
11320
+ /**
11321
+ * Strategy validation service for validating strategy existence.
11322
+ */
11323
+ this.strategyValidationService = inject(TYPES.strategyValidationService);
11324
+ /**
11325
+ * Strategy schema service for retrieving strategy configuration.
11326
+ */
11327
+ this.strategySchemaService = inject(TYPES.strategySchemaService);
11328
+ /**
11329
+ * Risk validation service for validating risk existence.
11330
+ */
11331
+ this.riskValidationService = inject(TYPES.riskValidationService);
11332
+ /**
11333
+ * Validates strategy and associated risk configuration.
11334
+ * Memoized to avoid redundant validations for the same strategy.
11335
+ *
11336
+ * @param strategyName - Name of the strategy to validate
11337
+ * @param methodName - Name of the calling method for error tracking
11338
+ */
11339
+ this.validate = functoolsKit.memoize(([strategyName]) => `${strategyName}`, (strategyName, methodName) => {
11340
+ this.loggerService.log("partialGlobalService validate", {
11341
+ strategyName,
11342
+ methodName,
11343
+ });
11344
+ this.strategyValidationService.validate(strategyName, methodName);
11345
+ const strategySchema = this.strategySchemaService.get(strategyName);
11346
+ const riskName = strategySchema.riskName;
11347
+ riskName && this.riskValidationService.validate(riskName, methodName);
11348
+ });
11318
11349
  /**
11319
11350
  * Processes profit state and emits events for newly reached profit levels.
11320
11351
  *
@@ -11337,6 +11368,7 @@ class PartialGlobalService {
11337
11368
  backtest,
11338
11369
  when,
11339
11370
  });
11371
+ this.validate(data.strategyName, "partialGlobalService profit");
11340
11372
  return await this.partialConnectionService.profit(symbol, data, currentPrice, revenuePercent, backtest, when);
11341
11373
  };
11342
11374
  /**
@@ -11361,6 +11393,7 @@ class PartialGlobalService {
11361
11393
  backtest,
11362
11394
  when,
11363
11395
  });
11396
+ this.validate(data.strategyName, "partialGlobalService loss");
11364
11397
  return await this.partialConnectionService.loss(symbol, data, currentPrice, lossPercent, backtest, when);
11365
11398
  };
11366
11399
  /**
@@ -11374,12 +11407,13 @@ class PartialGlobalService {
11374
11407
  * @returns Promise that resolves when clear is complete
11375
11408
  */
11376
11409
  this.clear = async (symbol, data, priceClose, backtest) => {
11377
- this.loggerService.log("partialGlobalService profit", {
11410
+ this.loggerService.log("partialGlobalService clear", {
11378
11411
  symbol,
11379
11412
  data,
11380
11413
  priceClose,
11381
11414
  backtest,
11382
11415
  });
11416
+ this.validate(data.strategyName, "partialGlobalService clear");
11383
11417
  return await this.partialConnectionService.clear(symbol, data, priceClose, backtest);
11384
11418
  };
11385
11419
  }
@@ -14427,6 +14461,11 @@ class ScheduleUtils {
14427
14461
  symbol,
14428
14462
  strategyName,
14429
14463
  });
14464
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_DATA);
14465
+ {
14466
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
14467
+ riskName && backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_DATA);
14468
+ }
14430
14469
  return await backtest$1.scheduleMarkdownService.getData(symbol, strategyName);
14431
14470
  };
14432
14471
  /**
@@ -14447,6 +14486,11 @@ class ScheduleUtils {
14447
14486
  symbol,
14448
14487
  strategyName,
14449
14488
  });
14489
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_REPORT);
14490
+ {
14491
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
14492
+ riskName && backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_REPORT);
14493
+ }
14450
14494
  return await backtest$1.scheduleMarkdownService.getReport(symbol, strategyName);
14451
14495
  };
14452
14496
  /**
@@ -14471,6 +14515,11 @@ class ScheduleUtils {
14471
14515
  strategyName,
14472
14516
  path,
14473
14517
  });
14518
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_DUMP);
14519
+ {
14520
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
14521
+ riskName && backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_DUMP);
14522
+ }
14474
14523
  await backtest$1.scheduleMarkdownService.dump(symbol, strategyName, path);
14475
14524
  };
14476
14525
  }
@@ -14550,6 +14599,11 @@ class Performance {
14550
14599
  * ```
14551
14600
  */
14552
14601
  static async getData(symbol, strategyName) {
14602
+ backtest$1.strategyValidationService.validate(strategyName, "Performance.getData");
14603
+ {
14604
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
14605
+ riskName && backtest$1.riskValidationService.validate(riskName, "Performance.getData");
14606
+ }
14553
14607
  return backtest$1.performanceMarkdownService.getData(symbol, strategyName);
14554
14608
  }
14555
14609
  /**
@@ -14575,6 +14629,11 @@ class Performance {
14575
14629
  * ```
14576
14630
  */
14577
14631
  static async getReport(symbol, strategyName) {
14632
+ backtest$1.strategyValidationService.validate(strategyName, "Performance.getReport");
14633
+ {
14634
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
14635
+ riskName && backtest$1.riskValidationService.validate(riskName, "Performance.getReport");
14636
+ }
14578
14637
  return backtest$1.performanceMarkdownService.getReport(symbol, strategyName);
14579
14638
  }
14580
14639
  /**
@@ -14597,6 +14656,11 @@ class Performance {
14597
14656
  * ```
14598
14657
  */
14599
14658
  static async dump(symbol, strategyName, path = "./dump/performance") {
14659
+ backtest$1.strategyValidationService.validate(strategyName, "Performance.dump");
14660
+ {
14661
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
14662
+ riskName && backtest$1.riskValidationService.validate(riskName, "Performance.dump");
14663
+ }
14600
14664
  return backtest$1.performanceMarkdownService.dump(symbol, strategyName, path);
14601
14665
  }
14602
14666
  }
@@ -15188,6 +15252,11 @@ class HeatUtils {
15188
15252
  */
15189
15253
  this.getData = async (strategyName) => {
15190
15254
  backtest$1.loggerService.info(HEAT_METHOD_NAME_GET_DATA, { strategyName });
15255
+ backtest$1.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_DATA);
15256
+ {
15257
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
15258
+ riskName && backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_DATA);
15259
+ }
15191
15260
  return await backtest$1.heatMarkdownService.getData(strategyName);
15192
15261
  };
15193
15262
  /**
@@ -15217,6 +15286,11 @@ class HeatUtils {
15217
15286
  */
15218
15287
  this.getReport = async (strategyName) => {
15219
15288
  backtest$1.loggerService.info(HEAT_METHOD_NAME_GET_REPORT, { strategyName });
15289
+ backtest$1.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_REPORT);
15290
+ {
15291
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
15292
+ riskName && backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_REPORT);
15293
+ }
15220
15294
  return await backtest$1.heatMarkdownService.getReport(strategyName);
15221
15295
  };
15222
15296
  /**
@@ -15239,6 +15313,11 @@ class HeatUtils {
15239
15313
  */
15240
15314
  this.dump = async (strategyName, path) => {
15241
15315
  backtest$1.loggerService.info(HEAT_METHOD_NAME_DUMP, { strategyName, path });
15316
+ backtest$1.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_DUMP);
15317
+ {
15318
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
15319
+ riskName && backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_DUMP);
15320
+ }
15242
15321
  await backtest$1.heatMarkdownService.dump(strategyName, path);
15243
15322
  };
15244
15323
  }
@@ -15436,6 +15515,7 @@ class OptimizerUtils {
15436
15515
  symbol,
15437
15516
  context,
15438
15517
  });
15518
+ backtest$1.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_DATA);
15439
15519
  return await backtest$1.optimizerGlobalService.getData(symbol, context.optimizerName);
15440
15520
  };
15441
15521
  /**
@@ -15452,6 +15532,7 @@ class OptimizerUtils {
15452
15532
  symbol,
15453
15533
  context,
15454
15534
  });
15535
+ backtest$1.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_CODE);
15455
15536
  return await backtest$1.optimizerGlobalService.getCode(symbol, context.optimizerName);
15456
15537
  };
15457
15538
  /**
@@ -15471,6 +15552,7 @@ class OptimizerUtils {
15471
15552
  context,
15472
15553
  path,
15473
15554
  });
15555
+ backtest$1.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_DUMP);
15474
15556
  await backtest$1.optimizerGlobalService.dump(symbol, context.optimizerName, path);
15475
15557
  };
15476
15558
  }
@@ -15554,6 +15636,11 @@ class PartialUtils {
15554
15636
  */
15555
15637
  this.getData = async (symbol, strategyName) => {
15556
15638
  backtest$1.loggerService.info(PARTIAL_METHOD_NAME_GET_DATA, { symbol, strategyName });
15639
+ backtest$1.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_DATA);
15640
+ {
15641
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
15642
+ riskName && backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_DATA);
15643
+ }
15557
15644
  return await backtest$1.partialMarkdownService.getData(symbol, strategyName);
15558
15645
  };
15559
15646
  /**
@@ -15596,6 +15683,11 @@ class PartialUtils {
15596
15683
  */
15597
15684
  this.getReport = async (symbol, strategyName) => {
15598
15685
  backtest$1.loggerService.info(PARTIAL_METHOD_NAME_GET_REPORT, { symbol, strategyName });
15686
+ backtest$1.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_REPORT);
15687
+ {
15688
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
15689
+ riskName && backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_REPORT);
15690
+ }
15599
15691
  return await backtest$1.partialMarkdownService.getReport(symbol, strategyName);
15600
15692
  };
15601
15693
  /**
@@ -15631,6 +15723,11 @@ class PartialUtils {
15631
15723
  */
15632
15724
  this.dump = async (symbol, strategyName, path) => {
15633
15725
  backtest$1.loggerService.info(PARTIAL_METHOD_NAME_DUMP, { symbol, strategyName, path });
15726
+ backtest$1.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_DUMP);
15727
+ {
15728
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
15729
+ riskName && backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_DUMP);
15730
+ }
15634
15731
  await backtest$1.partialMarkdownService.dump(symbol, strategyName, path);
15635
15732
  };
15636
15733
  }
package/build/index.mjs CHANGED
@@ -9319,6 +9319,8 @@ class OptimizerTemplateService {
9319
9319
  ``,
9320
9320
  ` await dumpJson(resultId, messages, result);`,
9321
9321
  ``,
9322
+ ` result.id = resultId;`,
9323
+ ``,
9322
9324
  ` return result;`,
9323
9325
  ` },`,
9324
9326
  `});`
@@ -11313,6 +11315,35 @@ class PartialGlobalService {
11313
11315
  * Handles actual ClientPartial instance creation and management.
11314
11316
  */
11315
11317
  this.partialConnectionService = inject(TYPES.partialConnectionService);
11318
+ /**
11319
+ * Strategy validation service for validating strategy existence.
11320
+ */
11321
+ this.strategyValidationService = inject(TYPES.strategyValidationService);
11322
+ /**
11323
+ * Strategy schema service for retrieving strategy configuration.
11324
+ */
11325
+ this.strategySchemaService = inject(TYPES.strategySchemaService);
11326
+ /**
11327
+ * Risk validation service for validating risk existence.
11328
+ */
11329
+ this.riskValidationService = inject(TYPES.riskValidationService);
11330
+ /**
11331
+ * Validates strategy and associated risk configuration.
11332
+ * Memoized to avoid redundant validations for the same strategy.
11333
+ *
11334
+ * @param strategyName - Name of the strategy to validate
11335
+ * @param methodName - Name of the calling method for error tracking
11336
+ */
11337
+ this.validate = memoize(([strategyName]) => `${strategyName}`, (strategyName, methodName) => {
11338
+ this.loggerService.log("partialGlobalService validate", {
11339
+ strategyName,
11340
+ methodName,
11341
+ });
11342
+ this.strategyValidationService.validate(strategyName, methodName);
11343
+ const strategySchema = this.strategySchemaService.get(strategyName);
11344
+ const riskName = strategySchema.riskName;
11345
+ riskName && this.riskValidationService.validate(riskName, methodName);
11346
+ });
11316
11347
  /**
11317
11348
  * Processes profit state and emits events for newly reached profit levels.
11318
11349
  *
@@ -11335,6 +11366,7 @@ class PartialGlobalService {
11335
11366
  backtest,
11336
11367
  when,
11337
11368
  });
11369
+ this.validate(data.strategyName, "partialGlobalService profit");
11338
11370
  return await this.partialConnectionService.profit(symbol, data, currentPrice, revenuePercent, backtest, when);
11339
11371
  };
11340
11372
  /**
@@ -11359,6 +11391,7 @@ class PartialGlobalService {
11359
11391
  backtest,
11360
11392
  when,
11361
11393
  });
11394
+ this.validate(data.strategyName, "partialGlobalService loss");
11362
11395
  return await this.partialConnectionService.loss(symbol, data, currentPrice, lossPercent, backtest, when);
11363
11396
  };
11364
11397
  /**
@@ -11372,12 +11405,13 @@ class PartialGlobalService {
11372
11405
  * @returns Promise that resolves when clear is complete
11373
11406
  */
11374
11407
  this.clear = async (symbol, data, priceClose, backtest) => {
11375
- this.loggerService.log("partialGlobalService profit", {
11408
+ this.loggerService.log("partialGlobalService clear", {
11376
11409
  symbol,
11377
11410
  data,
11378
11411
  priceClose,
11379
11412
  backtest,
11380
11413
  });
11414
+ this.validate(data.strategyName, "partialGlobalService clear");
11381
11415
  return await this.partialConnectionService.clear(symbol, data, priceClose, backtest);
11382
11416
  };
11383
11417
  }
@@ -14425,6 +14459,11 @@ class ScheduleUtils {
14425
14459
  symbol,
14426
14460
  strategyName,
14427
14461
  });
14462
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_DATA);
14463
+ {
14464
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
14465
+ riskName && backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_DATA);
14466
+ }
14428
14467
  return await backtest$1.scheduleMarkdownService.getData(symbol, strategyName);
14429
14468
  };
14430
14469
  /**
@@ -14445,6 +14484,11 @@ class ScheduleUtils {
14445
14484
  symbol,
14446
14485
  strategyName,
14447
14486
  });
14487
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_REPORT);
14488
+ {
14489
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
14490
+ riskName && backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_REPORT);
14491
+ }
14448
14492
  return await backtest$1.scheduleMarkdownService.getReport(symbol, strategyName);
14449
14493
  };
14450
14494
  /**
@@ -14469,6 +14513,11 @@ class ScheduleUtils {
14469
14513
  strategyName,
14470
14514
  path,
14471
14515
  });
14516
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_DUMP);
14517
+ {
14518
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
14519
+ riskName && backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_DUMP);
14520
+ }
14472
14521
  await backtest$1.scheduleMarkdownService.dump(symbol, strategyName, path);
14473
14522
  };
14474
14523
  }
@@ -14548,6 +14597,11 @@ class Performance {
14548
14597
  * ```
14549
14598
  */
14550
14599
  static async getData(symbol, strategyName) {
14600
+ backtest$1.strategyValidationService.validate(strategyName, "Performance.getData");
14601
+ {
14602
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
14603
+ riskName && backtest$1.riskValidationService.validate(riskName, "Performance.getData");
14604
+ }
14551
14605
  return backtest$1.performanceMarkdownService.getData(symbol, strategyName);
14552
14606
  }
14553
14607
  /**
@@ -14573,6 +14627,11 @@ class Performance {
14573
14627
  * ```
14574
14628
  */
14575
14629
  static async getReport(symbol, strategyName) {
14630
+ backtest$1.strategyValidationService.validate(strategyName, "Performance.getReport");
14631
+ {
14632
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
14633
+ riskName && backtest$1.riskValidationService.validate(riskName, "Performance.getReport");
14634
+ }
14576
14635
  return backtest$1.performanceMarkdownService.getReport(symbol, strategyName);
14577
14636
  }
14578
14637
  /**
@@ -14595,6 +14654,11 @@ class Performance {
14595
14654
  * ```
14596
14655
  */
14597
14656
  static async dump(symbol, strategyName, path = "./dump/performance") {
14657
+ backtest$1.strategyValidationService.validate(strategyName, "Performance.dump");
14658
+ {
14659
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
14660
+ riskName && backtest$1.riskValidationService.validate(riskName, "Performance.dump");
14661
+ }
14598
14662
  return backtest$1.performanceMarkdownService.dump(symbol, strategyName, path);
14599
14663
  }
14600
14664
  }
@@ -15186,6 +15250,11 @@ class HeatUtils {
15186
15250
  */
15187
15251
  this.getData = async (strategyName) => {
15188
15252
  backtest$1.loggerService.info(HEAT_METHOD_NAME_GET_DATA, { strategyName });
15253
+ backtest$1.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_DATA);
15254
+ {
15255
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
15256
+ riskName && backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_DATA);
15257
+ }
15189
15258
  return await backtest$1.heatMarkdownService.getData(strategyName);
15190
15259
  };
15191
15260
  /**
@@ -15215,6 +15284,11 @@ class HeatUtils {
15215
15284
  */
15216
15285
  this.getReport = async (strategyName) => {
15217
15286
  backtest$1.loggerService.info(HEAT_METHOD_NAME_GET_REPORT, { strategyName });
15287
+ backtest$1.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_REPORT);
15288
+ {
15289
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
15290
+ riskName && backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_REPORT);
15291
+ }
15218
15292
  return await backtest$1.heatMarkdownService.getReport(strategyName);
15219
15293
  };
15220
15294
  /**
@@ -15237,6 +15311,11 @@ class HeatUtils {
15237
15311
  */
15238
15312
  this.dump = async (strategyName, path) => {
15239
15313
  backtest$1.loggerService.info(HEAT_METHOD_NAME_DUMP, { strategyName, path });
15314
+ backtest$1.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_DUMP);
15315
+ {
15316
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
15317
+ riskName && backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_DUMP);
15318
+ }
15240
15319
  await backtest$1.heatMarkdownService.dump(strategyName, path);
15241
15320
  };
15242
15321
  }
@@ -15434,6 +15513,7 @@ class OptimizerUtils {
15434
15513
  symbol,
15435
15514
  context,
15436
15515
  });
15516
+ backtest$1.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_DATA);
15437
15517
  return await backtest$1.optimizerGlobalService.getData(symbol, context.optimizerName);
15438
15518
  };
15439
15519
  /**
@@ -15450,6 +15530,7 @@ class OptimizerUtils {
15450
15530
  symbol,
15451
15531
  context,
15452
15532
  });
15533
+ backtest$1.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_CODE);
15453
15534
  return await backtest$1.optimizerGlobalService.getCode(symbol, context.optimizerName);
15454
15535
  };
15455
15536
  /**
@@ -15469,6 +15550,7 @@ class OptimizerUtils {
15469
15550
  context,
15470
15551
  path,
15471
15552
  });
15553
+ backtest$1.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_DUMP);
15472
15554
  await backtest$1.optimizerGlobalService.dump(symbol, context.optimizerName, path);
15473
15555
  };
15474
15556
  }
@@ -15552,6 +15634,11 @@ class PartialUtils {
15552
15634
  */
15553
15635
  this.getData = async (symbol, strategyName) => {
15554
15636
  backtest$1.loggerService.info(PARTIAL_METHOD_NAME_GET_DATA, { symbol, strategyName });
15637
+ backtest$1.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_DATA);
15638
+ {
15639
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
15640
+ riskName && backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_DATA);
15641
+ }
15555
15642
  return await backtest$1.partialMarkdownService.getData(symbol, strategyName);
15556
15643
  };
15557
15644
  /**
@@ -15594,6 +15681,11 @@ class PartialUtils {
15594
15681
  */
15595
15682
  this.getReport = async (symbol, strategyName) => {
15596
15683
  backtest$1.loggerService.info(PARTIAL_METHOD_NAME_GET_REPORT, { symbol, strategyName });
15684
+ backtest$1.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_REPORT);
15685
+ {
15686
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
15687
+ riskName && backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_REPORT);
15688
+ }
15597
15689
  return await backtest$1.partialMarkdownService.getReport(symbol, strategyName);
15598
15690
  };
15599
15691
  /**
@@ -15629,6 +15721,11 @@ class PartialUtils {
15629
15721
  */
15630
15722
  this.dump = async (symbol, strategyName, path) => {
15631
15723
  backtest$1.loggerService.info(PARTIAL_METHOD_NAME_DUMP, { symbol, strategyName, path });
15724
+ backtest$1.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_DUMP);
15725
+ {
15726
+ const { riskName } = backtest$1.strategySchemaService.get(strategyName);
15727
+ riskName && backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_DUMP);
15728
+ }
15632
15729
  await backtest$1.partialMarkdownService.dump(symbol, strategyName, path);
15633
15730
  };
15634
15731
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "backtest-kit",
3
- "version": "1.5.9",
3
+ "version": "1.5.11",
4
4
  "description": "A TypeScript library for trading system backtest",
5
5
  "author": {
6
6
  "name": "Petr Tripolsky",
package/types.d.ts CHANGED
@@ -8907,6 +8907,26 @@ declare class PartialGlobalService {
8907
8907
  * Handles actual ClientPartial instance creation and management.
8908
8908
  */
8909
8909
  private readonly partialConnectionService;
8910
+ /**
8911
+ * Strategy validation service for validating strategy existence.
8912
+ */
8913
+ private readonly strategyValidationService;
8914
+ /**
8915
+ * Strategy schema service for retrieving strategy configuration.
8916
+ */
8917
+ private readonly strategySchemaService;
8918
+ /**
8919
+ * Risk validation service for validating risk existence.
8920
+ */
8921
+ private readonly riskValidationService;
8922
+ /**
8923
+ * Validates strategy and associated risk configuration.
8924
+ * Memoized to avoid redundant validations for the same strategy.
8925
+ *
8926
+ * @param strategyName - Name of the strategy to validate
8927
+ * @param methodName - Name of the calling method for error tracking
8928
+ */
8929
+ private validate;
8910
8930
  /**
8911
8931
  * Processes profit state and emits events for newly reached profit levels.
8912
8932
  *