backtest-kit 1.4.3 → 1.4.5

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
@@ -1873,7 +1873,7 @@ const GET_SIGNAL_FN = functoolsKit.trycatch(async (self) => {
1873
1873
  }))) {
1874
1874
  return null;
1875
1875
  }
1876
- const signal = await self.params.getSignal(self.params.execution.context.symbol);
1876
+ const signal = await self.params.getSignal(self.params.execution.context.symbol, self.params.execution.context.when);
1877
1877
  if (!signal) {
1878
1878
  return null;
1879
1879
  }
@@ -9141,7 +9141,7 @@ const GET_STRATEGY_DATA_FN = async (symbol, self) => {
9141
9141
  const messageList = [];
9142
9142
  for (const source of self.params.source) {
9143
9143
  // Emit progress event at the start of processing each source
9144
- await self.params.onProgress({
9144
+ await self.onProgress({
9145
9145
  optimizerName: self.params.optimizerName,
9146
9146
  symbol,
9147
9147
  totalSources,
@@ -9205,7 +9205,7 @@ const GET_STRATEGY_DATA_FN = async (symbol, self) => {
9205
9205
  }
9206
9206
  }
9207
9207
  // Emit final progress event (100%)
9208
- await self.params.onProgress({
9208
+ await self.onProgress({
9209
9209
  optimizerName: self.params.optimizerName,
9210
9210
  symbol,
9211
9211
  totalSources,
@@ -9339,8 +9339,9 @@ const GET_STRATEGY_DUMP_FN = async (symbol, path$1, self) => {
9339
9339
  * Used by OptimizerConnectionService to create optimizer instances.
9340
9340
  */
9341
9341
  class ClientOptimizer {
9342
- constructor(params) {
9342
+ constructor(params, onProgress) {
9343
9343
  this.params = params;
9344
+ this.onProgress = onProgress;
9344
9345
  /**
9345
9346
  * Fetches data from all sources and generates strategy metadata.
9346
9347
  * Processes each training range and builds LLM conversation history.
@@ -9413,7 +9414,7 @@ class OptimizerConnectionService {
9413
9414
  * @returns ClientOptimizer instance with resolved dependencies
9414
9415
  */
9415
9416
  this.getOptimizer = functoolsKit.memoize(([optimizerName]) => `${optimizerName}`, (optimizerName) => {
9416
- const { getPrompt, rangeTest, rangeTrain, source, template: rawTemplate = {}, callbacks } = this.optimizerSchemaService.get(optimizerName);
9417
+ const { getPrompt, rangeTest, rangeTrain, source, template: rawTemplate = {}, callbacks, } = this.optimizerSchemaService.get(optimizerName);
9417
9418
  const { getAssistantMessage = this.optimizerTemplateService.getAssistantMessage, getExchangeTemplate = this.optimizerTemplateService.getExchangeTemplate, getFrameTemplate = this.optimizerTemplateService.getFrameTemplate, getJsonDumpTemplate = this.optimizerTemplateService.getJsonDumpTemplate, getJsonTemplate = this.optimizerTemplateService.getJsonTemplate, getLauncherTemplate = this.optimizerTemplateService.getLauncherTemplate, getStrategyTemplate = this.optimizerTemplateService.getStrategyTemplate, getTextTemplate = this.optimizerTemplateService.getTextTemplate, getWalkerTemplate = this.optimizerTemplateService.getWalkerTemplate, getTopBanner = this.optimizerTemplateService.getTopBanner, getUserMessage = this.optimizerTemplateService.getUserMessage, } = rawTemplate;
9418
9419
  const template = {
9419
9420
  getAssistantMessage,
@@ -9431,14 +9432,13 @@ class OptimizerConnectionService {
9431
9432
  return new ClientOptimizer({
9432
9433
  optimizerName,
9433
9434
  logger: this.loggerService,
9434
- onProgress: COMMIT_PROGRESS_FN,
9435
9435
  getPrompt,
9436
9436
  rangeTest,
9437
9437
  rangeTrain,
9438
9438
  source,
9439
9439
  template,
9440
9440
  callbacks,
9441
- });
9441
+ }, COMMIT_PROGRESS_FN);
9442
9442
  });
9443
9443
  /**
9444
9444
  * Fetches data from all sources and generates strategy metadata.
package/build/index.mjs CHANGED
@@ -1871,7 +1871,7 @@ const GET_SIGNAL_FN = trycatch(async (self) => {
1871
1871
  }))) {
1872
1872
  return null;
1873
1873
  }
1874
- const signal = await self.params.getSignal(self.params.execution.context.symbol);
1874
+ const signal = await self.params.getSignal(self.params.execution.context.symbol, self.params.execution.context.when);
1875
1875
  if (!signal) {
1876
1876
  return null;
1877
1877
  }
@@ -9139,7 +9139,7 @@ const GET_STRATEGY_DATA_FN = async (symbol, self) => {
9139
9139
  const messageList = [];
9140
9140
  for (const source of self.params.source) {
9141
9141
  // Emit progress event at the start of processing each source
9142
- await self.params.onProgress({
9142
+ await self.onProgress({
9143
9143
  optimizerName: self.params.optimizerName,
9144
9144
  symbol,
9145
9145
  totalSources,
@@ -9203,7 +9203,7 @@ const GET_STRATEGY_DATA_FN = async (symbol, self) => {
9203
9203
  }
9204
9204
  }
9205
9205
  // Emit final progress event (100%)
9206
- await self.params.onProgress({
9206
+ await self.onProgress({
9207
9207
  optimizerName: self.params.optimizerName,
9208
9208
  symbol,
9209
9209
  totalSources,
@@ -9337,8 +9337,9 @@ const GET_STRATEGY_DUMP_FN = async (symbol, path, self) => {
9337
9337
  * Used by OptimizerConnectionService to create optimizer instances.
9338
9338
  */
9339
9339
  class ClientOptimizer {
9340
- constructor(params) {
9340
+ constructor(params, onProgress) {
9341
9341
  this.params = params;
9342
+ this.onProgress = onProgress;
9342
9343
  /**
9343
9344
  * Fetches data from all sources and generates strategy metadata.
9344
9345
  * Processes each training range and builds LLM conversation history.
@@ -9411,7 +9412,7 @@ class OptimizerConnectionService {
9411
9412
  * @returns ClientOptimizer instance with resolved dependencies
9412
9413
  */
9413
9414
  this.getOptimizer = memoize(([optimizerName]) => `${optimizerName}`, (optimizerName) => {
9414
- const { getPrompt, rangeTest, rangeTrain, source, template: rawTemplate = {}, callbacks } = this.optimizerSchemaService.get(optimizerName);
9415
+ const { getPrompt, rangeTest, rangeTrain, source, template: rawTemplate = {}, callbacks, } = this.optimizerSchemaService.get(optimizerName);
9415
9416
  const { getAssistantMessage = this.optimizerTemplateService.getAssistantMessage, getExchangeTemplate = this.optimizerTemplateService.getExchangeTemplate, getFrameTemplate = this.optimizerTemplateService.getFrameTemplate, getJsonDumpTemplate = this.optimizerTemplateService.getJsonDumpTemplate, getJsonTemplate = this.optimizerTemplateService.getJsonTemplate, getLauncherTemplate = this.optimizerTemplateService.getLauncherTemplate, getStrategyTemplate = this.optimizerTemplateService.getStrategyTemplate, getTextTemplate = this.optimizerTemplateService.getTextTemplate, getWalkerTemplate = this.optimizerTemplateService.getWalkerTemplate, getTopBanner = this.optimizerTemplateService.getTopBanner, getUserMessage = this.optimizerTemplateService.getUserMessage, } = rawTemplate;
9416
9417
  const template = {
9417
9418
  getAssistantMessage,
@@ -9429,14 +9430,13 @@ class OptimizerConnectionService {
9429
9430
  return new ClientOptimizer({
9430
9431
  optimizerName,
9431
9432
  logger: this.loggerService,
9432
- onProgress: COMMIT_PROGRESS_FN,
9433
9433
  getPrompt,
9434
9434
  rangeTest,
9435
9435
  rangeTrain,
9436
9436
  source,
9437
9437
  template,
9438
9438
  callbacks,
9439
- });
9439
+ }, COMMIT_PROGRESS_FN);
9440
9440
  });
9441
9441
  /**
9442
9442
  * Fetches data from all sources and generates strategy metadata.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "backtest-kit",
3
- "version": "1.4.3",
3
+ "version": "1.4.5",
4
4
  "description": "A TypeScript library for trading system backtest",
5
5
  "author": {
6
6
  "name": "Petr Tripolsky",
package/types.d.ts CHANGED
@@ -825,7 +825,7 @@ interface IStrategySchema {
825
825
  * If priceOpen is provided - becomes scheduled signal waiting for price to reach entry point.
826
826
  * If priceOpen is omitted - opens immediately at current price.
827
827
  */
828
- getSignal: (symbol: string) => Promise<ISignalDto | null>;
828
+ getSignal: (symbol: string, when: Date) => Promise<ISignalDto | null>;
829
829
  /** Optional lifecycle event callbacks (onOpen, onClose) */
830
830
  callbacks?: Partial<IStrategyCallbacks>;
831
831
  /** Optional risk profile identifier for risk management */
@@ -1517,35 +1517,6 @@ interface MessageModel {
1517
1517
  content: string;
1518
1518
  }
1519
1519
 
1520
- /**
1521
- * Contract for optimizer progress events.
1522
- *
1523
- * Emitted during optimizer execution to track progress.
1524
- * Contains information about total sources, processed sources, and completion percentage.
1525
- *
1526
- * @example
1527
- * ```typescript
1528
- * import { listenOptimizerProgress } from "backtest-kit";
1529
- *
1530
- * listenOptimizerProgress((event) => {
1531
- * console.log(`Progress: ${(event.progress * 100).toFixed(2)}%`);
1532
- * console.log(`Processed: ${event.processedSources} / ${event.totalSources}`);
1533
- * });
1534
- * ```
1535
- */
1536
- interface ProgressOptimizerContract {
1537
- /** optimizerName - Name of the optimizer being executed */
1538
- optimizerName: string;
1539
- /** symbol - Trading symbol (e.g., "BTCUSDT") */
1540
- symbol: string;
1541
- /** totalSources - Total number of sources to process */
1542
- totalSources: number;
1543
- /** processedSources - Number of sources processed so far */
1544
- processedSources: number;
1545
- /** progress - Completion percentage from 0.0 to 1.0 */
1546
- progress: number;
1547
- }
1548
-
1549
1520
  /**
1550
1521
  * Unique identifier for data rows in optimizer sources.
1551
1522
  * Can be either a string or numeric ID.
@@ -1873,11 +1844,6 @@ interface IOptimizerSchema {
1873
1844
  * @returns Strategy prompt/logic description
1874
1845
  */
1875
1846
  getPrompt: (symbol: string, messages: MessageModel[]) => string | Promise<string>;
1876
- /**
1877
- * Callback invoked to report progress during optimizer operations.
1878
- * @param progress - Progress details including processed sources and percentage
1879
- */
1880
- onProgress(progress: ProgressOptimizerContract): void;
1881
1847
  /**
1882
1848
  * Optional custom template overrides.
1883
1849
  * If not provided, uses defaults from OptimizerTemplateService.
@@ -2594,6 +2560,35 @@ interface ProgressWalkerContract {
2594
2560
  progress: number;
2595
2561
  }
2596
2562
 
2563
+ /**
2564
+ * Contract for optimizer progress events.
2565
+ *
2566
+ * Emitted during optimizer execution to track progress.
2567
+ * Contains information about total sources, processed sources, and completion percentage.
2568
+ *
2569
+ * @example
2570
+ * ```typescript
2571
+ * import { listenOptimizerProgress } from "backtest-kit";
2572
+ *
2573
+ * listenOptimizerProgress((event) => {
2574
+ * console.log(`Progress: ${(event.progress * 100).toFixed(2)}%`);
2575
+ * console.log(`Processed: ${event.processedSources} / ${event.totalSources}`);
2576
+ * });
2577
+ * ```
2578
+ */
2579
+ interface ProgressOptimizerContract {
2580
+ /** optimizerName - Name of the optimizer being executed */
2581
+ optimizerName: string;
2582
+ /** symbol - Trading symbol (e.g., "BTCUSDT") */
2583
+ symbol: string;
2584
+ /** totalSources - Total number of sources to process */
2585
+ totalSources: number;
2586
+ /** processedSources - Number of sources processed so far */
2587
+ processedSources: number;
2588
+ /** progress - Completion percentage from 0.0 to 1.0 */
2589
+ progress: number;
2590
+ }
2591
+
2597
2592
  /**
2598
2593
  * Performance metric types tracked by the system.
2599
2594
  *
@@ -8322,7 +8317,8 @@ declare class OptimizerValidationService {
8322
8317
  */
8323
8318
  declare class ClientOptimizer implements IOptimizer {
8324
8319
  readonly params: IOptimizerParams;
8325
- constructor(params: IOptimizerParams);
8320
+ readonly onProgress: (progress: ProgressOptimizerContract) => void;
8321
+ constructor(params: IOptimizerParams, onProgress: (progress: ProgressOptimizerContract) => void);
8326
8322
  /**
8327
8323
  * Fetches data from all sources and generates strategy metadata.
8328
8324
  * Processes each training range and builds LLM conversation history.