backtest-kit 2.2.19 → 2.2.21

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
@@ -4383,7 +4383,7 @@ const CALL_PARTIAL_CLEAR_FN = functoolsKit.trycatch(beginTime(async (self, symbo
4383
4383
  const CALL_RISK_CHECK_SIGNAL_FN = functoolsKit.trycatch(beginTime(async (self, symbol, pendingSignal, currentPrice, timestamp, backtest) => {
4384
4384
  return await ExecutionContextService.runInContext(async () => {
4385
4385
  return await self.params.risk.checkSignal({
4386
- pendingSignal: TO_PUBLIC_SIGNAL(pendingSignal),
4386
+ currentSignal: TO_PUBLIC_SIGNAL(pendingSignal),
4387
4387
  symbol: symbol,
4388
4388
  strategyName: self.params.method.context.strategyName,
4389
4389
  exchangeName: self.params.method.context.exchangeName,
@@ -8292,7 +8292,7 @@ class ClientRisk {
8292
8292
  const riskMap = this._activePositions;
8293
8293
  const payload = {
8294
8294
  ...params,
8295
- pendingSignal: TO_RISK_SIGNAL(params.pendingSignal, params.currentPrice),
8295
+ currentSignal: TO_RISK_SIGNAL(params.currentSignal, params.currentPrice),
8296
8296
  activePositionCount: riskMap.size,
8297
8297
  activePositions: Array.from(riskMap.values()),
8298
8298
  };
@@ -8428,7 +8428,7 @@ const CREATE_KEY_FN$k = (riskName, exchangeName, frameName, backtest) => {
8428
8428
  const CREATE_COMMIT_REJECTION_FN = (self, exchangeName, frameName) => functoolsKit.trycatch(async (symbol, params, activePositionCount, rejectionResult, timestamp, backtest) => {
8429
8429
  const event = {
8430
8430
  symbol,
8431
- pendingSignal: params.pendingSignal,
8431
+ currentSignal: params.currentSignal,
8432
8432
  strategyName: params.strategyName,
8433
8433
  exchangeName,
8434
8434
  currentPrice: params.currentPrice,
@@ -14261,19 +14261,19 @@ const risk_columns = [
14261
14261
  {
14262
14262
  key: "signalId",
14263
14263
  label: "Signal ID",
14264
- format: (data) => data.pendingSignal.id || "N/A",
14264
+ format: (data) => data.currentSignal.id || "N/A",
14265
14265
  isVisible: () => true,
14266
14266
  },
14267
14267
  {
14268
14268
  key: "note",
14269
14269
  label: "Note",
14270
- format: (data) => toPlainString(data.pendingSignal.note ?? "N/A"),
14270
+ format: (data) => toPlainString(data.currentSignal.note ?? "N/A"),
14271
14271
  isVisible: () => GLOBAL_CONFIG.CC_REPORT_SHOW_SIGNAL_NOTE,
14272
14272
  },
14273
14273
  {
14274
14274
  key: "position",
14275
14275
  label: "Position",
14276
- format: (data) => data.pendingSignal.position.toUpperCase(),
14276
+ format: (data) => data.currentSignal.position.toUpperCase(),
14277
14277
  isVisible: () => true,
14278
14278
  },
14279
14279
  {
@@ -14285,48 +14285,48 @@ const risk_columns = [
14285
14285
  {
14286
14286
  key: "openPrice",
14287
14287
  label: "Open Price",
14288
- format: (data) => data.pendingSignal.priceOpen !== undefined
14289
- ? `${data.pendingSignal.priceOpen.toFixed(8)} USD`
14288
+ format: (data) => data.currentSignal.priceOpen !== undefined
14289
+ ? `${data.currentSignal.priceOpen.toFixed(8)} USD`
14290
14290
  : "N/A",
14291
14291
  isVisible: () => true,
14292
14292
  },
14293
14293
  {
14294
14294
  key: "takeProfit",
14295
14295
  label: "Take Profit",
14296
- format: (data) => data.pendingSignal.priceTakeProfit !== undefined
14297
- ? `${data.pendingSignal.priceTakeProfit.toFixed(8)} USD`
14296
+ format: (data) => data.currentSignal.priceTakeProfit !== undefined
14297
+ ? `${data.currentSignal.priceTakeProfit.toFixed(8)} USD`
14298
14298
  : "N/A",
14299
14299
  isVisible: () => true,
14300
14300
  },
14301
14301
  {
14302
14302
  key: "stopLoss",
14303
14303
  label: "Stop Loss",
14304
- format: (data) => data.pendingSignal.priceStopLoss !== undefined
14305
- ? `${data.pendingSignal.priceStopLoss.toFixed(8)} USD`
14304
+ format: (data) => data.currentSignal.priceStopLoss !== undefined
14305
+ ? `${data.currentSignal.priceStopLoss.toFixed(8)} USD`
14306
14306
  : "N/A",
14307
14307
  isVisible: () => true,
14308
14308
  },
14309
14309
  {
14310
14310
  key: "originalPriceTakeProfit",
14311
14311
  label: "Original TP",
14312
- format: (data) => data.pendingSignal.originalPriceTakeProfit !== undefined
14313
- ? `${data.pendingSignal.originalPriceTakeProfit.toFixed(8)} USD`
14312
+ format: (data) => data.currentSignal.originalPriceTakeProfit !== undefined
14313
+ ? `${data.currentSignal.originalPriceTakeProfit.toFixed(8)} USD`
14314
14314
  : "N/A",
14315
14315
  isVisible: () => true,
14316
14316
  },
14317
14317
  {
14318
14318
  key: "originalPriceStopLoss",
14319
14319
  label: "Original SL",
14320
- format: (data) => data.pendingSignal.originalPriceStopLoss !== undefined
14321
- ? `${data.pendingSignal.originalPriceStopLoss.toFixed(8)} USD`
14320
+ format: (data) => data.currentSignal.originalPriceStopLoss !== undefined
14321
+ ? `${data.currentSignal.originalPriceStopLoss.toFixed(8)} USD`
14322
14322
  : "N/A",
14323
14323
  isVisible: () => true,
14324
14324
  },
14325
14325
  {
14326
14326
  key: "partialExecuted",
14327
14327
  label: "Partial Executed %",
14328
- format: (data) => data.pendingSignal.partialExecuted !== undefined
14329
- ? `${data.pendingSignal.partialExecuted.toFixed(1)}%`
14328
+ format: (data) => data.currentSignal.partialExecuted !== undefined
14329
+ ? `${data.currentSignal.partialExecuted.toFixed(1)}%`
14330
14330
  : "N/A",
14331
14331
  isVisible: () => true,
14332
14332
  },
@@ -23667,23 +23667,23 @@ class RiskReportService {
23667
23667
  activePositionCount: data.activePositionCount,
23668
23668
  rejectionId: data.rejectionId,
23669
23669
  rejectionNote: data.rejectionNote,
23670
- pendingSignal: data.pendingSignal,
23671
- signalId: data.pendingSignal?.id,
23672
- position: data.pendingSignal?.position,
23673
- priceOpen: data.pendingSignal?.priceOpen,
23674
- priceTakeProfit: data.pendingSignal?.priceTakeProfit,
23675
- priceStopLoss: data.pendingSignal?.priceStopLoss,
23676
- originalPriceTakeProfit: data.pendingSignal?.originalPriceTakeProfit,
23677
- originalPriceStopLoss: data.pendingSignal?.originalPriceStopLoss,
23678
- partialExecuted: data.pendingSignal?.partialExecuted,
23679
- note: data.pendingSignal?.note,
23680
- minuteEstimatedTime: data.pendingSignal?.minuteEstimatedTime,
23670
+ currentSignal: data.currentSignal,
23671
+ signalId: data.currentSignal?.id,
23672
+ position: data.currentSignal?.position,
23673
+ priceOpen: data.currentSignal?.priceOpen,
23674
+ priceTakeProfit: data.currentSignal?.priceTakeProfit,
23675
+ priceStopLoss: data.currentSignal?.priceStopLoss,
23676
+ originalPriceTakeProfit: data.currentSignal?.originalPriceTakeProfit,
23677
+ originalPriceStopLoss: data.currentSignal?.originalPriceStopLoss,
23678
+ partialExecuted: data.currentSignal?.partialExecuted,
23679
+ note: data.currentSignal?.note,
23680
+ minuteEstimatedTime: data.currentSignal?.minuteEstimatedTime,
23681
23681
  }, {
23682
23682
  symbol: data.symbol,
23683
23683
  strategyName: data.strategyName,
23684
23684
  exchangeName: data.exchangeName,
23685
23685
  frameName: data.frameName,
23686
- signalId: data.pendingSignal?.id || "",
23686
+ signalId: data.currentSignal?.id || "",
23687
23687
  walkerName: "",
23688
23688
  });
23689
23689
  };
@@ -33862,6 +33862,8 @@ class NotificationInstance {
33862
33862
  priceTakeProfit: data.signal.priceTakeProfit,
33863
33863
  priceStopLoss: data.signal.priceStopLoss,
33864
33864
  note: data.signal.note,
33865
+ scheduledAt: data.signal.scheduledAt,
33866
+ pendingAt: data.signal.pendingAt,
33865
33867
  createdAt: data.createdAt,
33866
33868
  });
33867
33869
  }
@@ -33884,6 +33886,8 @@ class NotificationInstance {
33884
33886
  closeReason: data.closeReason,
33885
33887
  duration: durationMin,
33886
33888
  note: data.signal.note,
33889
+ scheduledAt: data.signal.scheduledAt,
33890
+ pendingAt: data.signal.pendingAt,
33887
33891
  createdAt: data.createdAt,
33888
33892
  });
33889
33893
  }
@@ -34131,7 +34135,13 @@ class NotificationInstance {
34131
34135
  rejectionId: data.rejectionId,
34132
34136
  activePositionCount: data.activePositionCount,
34133
34137
  currentPrice: data.currentPrice,
34134
- pendingSignal: data.pendingSignal,
34138
+ signalId: data.currentSignal.id,
34139
+ position: data.currentSignal.position,
34140
+ priceOpen: data.currentSignal.priceOpen,
34141
+ priceTakeProfit: data.currentSignal.priceTakeProfit,
34142
+ priceStopLoss: data.currentSignal.priceStopLoss,
34143
+ minuteEstimatedTime: data.currentSignal.minuteEstimatedTime,
34144
+ signalNote: data.currentSignal.note,
34135
34145
  createdAt: data.timestamp,
34136
34146
  });
34137
34147
  };
package/build/index.mjs CHANGED
@@ -4363,7 +4363,7 @@ const CALL_PARTIAL_CLEAR_FN = trycatch(beginTime(async (self, symbol, signal, cu
4363
4363
  const CALL_RISK_CHECK_SIGNAL_FN = trycatch(beginTime(async (self, symbol, pendingSignal, currentPrice, timestamp, backtest) => {
4364
4364
  return await ExecutionContextService.runInContext(async () => {
4365
4365
  return await self.params.risk.checkSignal({
4366
- pendingSignal: TO_PUBLIC_SIGNAL(pendingSignal),
4366
+ currentSignal: TO_PUBLIC_SIGNAL(pendingSignal),
4367
4367
  symbol: symbol,
4368
4368
  strategyName: self.params.method.context.strategyName,
4369
4369
  exchangeName: self.params.method.context.exchangeName,
@@ -8272,7 +8272,7 @@ class ClientRisk {
8272
8272
  const riskMap = this._activePositions;
8273
8273
  const payload = {
8274
8274
  ...params,
8275
- pendingSignal: TO_RISK_SIGNAL(params.pendingSignal, params.currentPrice),
8275
+ currentSignal: TO_RISK_SIGNAL(params.currentSignal, params.currentPrice),
8276
8276
  activePositionCount: riskMap.size,
8277
8277
  activePositions: Array.from(riskMap.values()),
8278
8278
  };
@@ -8408,7 +8408,7 @@ const CREATE_KEY_FN$k = (riskName, exchangeName, frameName, backtest) => {
8408
8408
  const CREATE_COMMIT_REJECTION_FN = (self, exchangeName, frameName) => trycatch(async (symbol, params, activePositionCount, rejectionResult, timestamp, backtest) => {
8409
8409
  const event = {
8410
8410
  symbol,
8411
- pendingSignal: params.pendingSignal,
8411
+ currentSignal: params.currentSignal,
8412
8412
  strategyName: params.strategyName,
8413
8413
  exchangeName,
8414
8414
  currentPrice: params.currentPrice,
@@ -14241,19 +14241,19 @@ const risk_columns = [
14241
14241
  {
14242
14242
  key: "signalId",
14243
14243
  label: "Signal ID",
14244
- format: (data) => data.pendingSignal.id || "N/A",
14244
+ format: (data) => data.currentSignal.id || "N/A",
14245
14245
  isVisible: () => true,
14246
14246
  },
14247
14247
  {
14248
14248
  key: "note",
14249
14249
  label: "Note",
14250
- format: (data) => toPlainString(data.pendingSignal.note ?? "N/A"),
14250
+ format: (data) => toPlainString(data.currentSignal.note ?? "N/A"),
14251
14251
  isVisible: () => GLOBAL_CONFIG.CC_REPORT_SHOW_SIGNAL_NOTE,
14252
14252
  },
14253
14253
  {
14254
14254
  key: "position",
14255
14255
  label: "Position",
14256
- format: (data) => data.pendingSignal.position.toUpperCase(),
14256
+ format: (data) => data.currentSignal.position.toUpperCase(),
14257
14257
  isVisible: () => true,
14258
14258
  },
14259
14259
  {
@@ -14265,48 +14265,48 @@ const risk_columns = [
14265
14265
  {
14266
14266
  key: "openPrice",
14267
14267
  label: "Open Price",
14268
- format: (data) => data.pendingSignal.priceOpen !== undefined
14269
- ? `${data.pendingSignal.priceOpen.toFixed(8)} USD`
14268
+ format: (data) => data.currentSignal.priceOpen !== undefined
14269
+ ? `${data.currentSignal.priceOpen.toFixed(8)} USD`
14270
14270
  : "N/A",
14271
14271
  isVisible: () => true,
14272
14272
  },
14273
14273
  {
14274
14274
  key: "takeProfit",
14275
14275
  label: "Take Profit",
14276
- format: (data) => data.pendingSignal.priceTakeProfit !== undefined
14277
- ? `${data.pendingSignal.priceTakeProfit.toFixed(8)} USD`
14276
+ format: (data) => data.currentSignal.priceTakeProfit !== undefined
14277
+ ? `${data.currentSignal.priceTakeProfit.toFixed(8)} USD`
14278
14278
  : "N/A",
14279
14279
  isVisible: () => true,
14280
14280
  },
14281
14281
  {
14282
14282
  key: "stopLoss",
14283
14283
  label: "Stop Loss",
14284
- format: (data) => data.pendingSignal.priceStopLoss !== undefined
14285
- ? `${data.pendingSignal.priceStopLoss.toFixed(8)} USD`
14284
+ format: (data) => data.currentSignal.priceStopLoss !== undefined
14285
+ ? `${data.currentSignal.priceStopLoss.toFixed(8)} USD`
14286
14286
  : "N/A",
14287
14287
  isVisible: () => true,
14288
14288
  },
14289
14289
  {
14290
14290
  key: "originalPriceTakeProfit",
14291
14291
  label: "Original TP",
14292
- format: (data) => data.pendingSignal.originalPriceTakeProfit !== undefined
14293
- ? `${data.pendingSignal.originalPriceTakeProfit.toFixed(8)} USD`
14292
+ format: (data) => data.currentSignal.originalPriceTakeProfit !== undefined
14293
+ ? `${data.currentSignal.originalPriceTakeProfit.toFixed(8)} USD`
14294
14294
  : "N/A",
14295
14295
  isVisible: () => true,
14296
14296
  },
14297
14297
  {
14298
14298
  key: "originalPriceStopLoss",
14299
14299
  label: "Original SL",
14300
- format: (data) => data.pendingSignal.originalPriceStopLoss !== undefined
14301
- ? `${data.pendingSignal.originalPriceStopLoss.toFixed(8)} USD`
14300
+ format: (data) => data.currentSignal.originalPriceStopLoss !== undefined
14301
+ ? `${data.currentSignal.originalPriceStopLoss.toFixed(8)} USD`
14302
14302
  : "N/A",
14303
14303
  isVisible: () => true,
14304
14304
  },
14305
14305
  {
14306
14306
  key: "partialExecuted",
14307
14307
  label: "Partial Executed %",
14308
- format: (data) => data.pendingSignal.partialExecuted !== undefined
14309
- ? `${data.pendingSignal.partialExecuted.toFixed(1)}%`
14308
+ format: (data) => data.currentSignal.partialExecuted !== undefined
14309
+ ? `${data.currentSignal.partialExecuted.toFixed(1)}%`
14310
14310
  : "N/A",
14311
14311
  isVisible: () => true,
14312
14312
  },
@@ -23647,23 +23647,23 @@ class RiskReportService {
23647
23647
  activePositionCount: data.activePositionCount,
23648
23648
  rejectionId: data.rejectionId,
23649
23649
  rejectionNote: data.rejectionNote,
23650
- pendingSignal: data.pendingSignal,
23651
- signalId: data.pendingSignal?.id,
23652
- position: data.pendingSignal?.position,
23653
- priceOpen: data.pendingSignal?.priceOpen,
23654
- priceTakeProfit: data.pendingSignal?.priceTakeProfit,
23655
- priceStopLoss: data.pendingSignal?.priceStopLoss,
23656
- originalPriceTakeProfit: data.pendingSignal?.originalPriceTakeProfit,
23657
- originalPriceStopLoss: data.pendingSignal?.originalPriceStopLoss,
23658
- partialExecuted: data.pendingSignal?.partialExecuted,
23659
- note: data.pendingSignal?.note,
23660
- minuteEstimatedTime: data.pendingSignal?.minuteEstimatedTime,
23650
+ currentSignal: data.currentSignal,
23651
+ signalId: data.currentSignal?.id,
23652
+ position: data.currentSignal?.position,
23653
+ priceOpen: data.currentSignal?.priceOpen,
23654
+ priceTakeProfit: data.currentSignal?.priceTakeProfit,
23655
+ priceStopLoss: data.currentSignal?.priceStopLoss,
23656
+ originalPriceTakeProfit: data.currentSignal?.originalPriceTakeProfit,
23657
+ originalPriceStopLoss: data.currentSignal?.originalPriceStopLoss,
23658
+ partialExecuted: data.currentSignal?.partialExecuted,
23659
+ note: data.currentSignal?.note,
23660
+ minuteEstimatedTime: data.currentSignal?.minuteEstimatedTime,
23661
23661
  }, {
23662
23662
  symbol: data.symbol,
23663
23663
  strategyName: data.strategyName,
23664
23664
  exchangeName: data.exchangeName,
23665
23665
  frameName: data.frameName,
23666
- signalId: data.pendingSignal?.id || "",
23666
+ signalId: data.currentSignal?.id || "",
23667
23667
  walkerName: "",
23668
23668
  });
23669
23669
  };
@@ -33842,6 +33842,8 @@ class NotificationInstance {
33842
33842
  priceTakeProfit: data.signal.priceTakeProfit,
33843
33843
  priceStopLoss: data.signal.priceStopLoss,
33844
33844
  note: data.signal.note,
33845
+ scheduledAt: data.signal.scheduledAt,
33846
+ pendingAt: data.signal.pendingAt,
33845
33847
  createdAt: data.createdAt,
33846
33848
  });
33847
33849
  }
@@ -33864,6 +33866,8 @@ class NotificationInstance {
33864
33866
  closeReason: data.closeReason,
33865
33867
  duration: durationMin,
33866
33868
  note: data.signal.note,
33869
+ scheduledAt: data.signal.scheduledAt,
33870
+ pendingAt: data.signal.pendingAt,
33867
33871
  createdAt: data.createdAt,
33868
33872
  });
33869
33873
  }
@@ -34111,7 +34115,13 @@ class NotificationInstance {
34111
34115
  rejectionId: data.rejectionId,
34112
34116
  activePositionCount: data.activePositionCount,
34113
34117
  currentPrice: data.currentPrice,
34114
- pendingSignal: data.pendingSignal,
34118
+ signalId: data.currentSignal.id,
34119
+ position: data.currentSignal.position,
34120
+ priceOpen: data.currentSignal.priceOpen,
34121
+ priceTakeProfit: data.currentSignal.priceTakeProfit,
34122
+ priceStopLoss: data.currentSignal.priceStopLoss,
34123
+ minuteEstimatedTime: data.currentSignal.minuteEstimatedTime,
34124
+ signalNote: data.currentSignal.note,
34115
34125
  createdAt: data.timestamp,
34116
34126
  });
34117
34127
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "backtest-kit",
3
- "version": "2.2.19",
3
+ "version": "2.2.21",
4
4
  "description": "A TypeScript library for trading system backtest",
5
5
  "author": {
6
6
  "name": "Petr Tripolsky",
package/types.d.ts CHANGED
@@ -559,7 +559,7 @@ interface IRiskCheckArgs {
559
559
  /** Trading pair symbol (e.g., "BTCUSDT") */
560
560
  symbol: string;
561
561
  /** Pending signal to apply */
562
- pendingSignal: IPublicSignalRow;
562
+ currentSignal: IPublicSignalRow;
563
563
  /** Strategy name requesting to open a position */
564
564
  strategyName: StrategyName;
565
565
  /** Exchange name */
@@ -612,8 +612,8 @@ interface IRiskCallbacks {
612
612
  * Extends IRiskCheckArgs with portfolio state data.
613
613
  */
614
614
  interface IRiskValidationPayload extends IRiskCheckArgs {
615
- /** Pending signal to apply (IRiskSignalRow is calculated internally so priceOpen always exist) */
616
- pendingSignal: IRiskSignalRow;
615
+ /** Current signal being validated (IRiskSignalRow is calculated internally so priceOpen always exist) */
616
+ currentSignal: IRiskSignalRow;
617
617
  /** Number of currently active positions across all strategies */
618
618
  activePositionCount: number;
619
619
  /** List of currently active positions across all strategies */
@@ -2563,7 +2563,7 @@ interface RiskContract {
2563
2563
  * Pending signal to apply.
2564
2564
  * Contains signal details (position, priceOpen, priceTakeProfit, priceStopLoss, etc).
2565
2565
  */
2566
- pendingSignal: ISignalDto;
2566
+ currentSignal: ISignalDto;
2567
2567
  /**
2568
2568
  * Strategy name requesting to open a position.
2569
2569
  * Identifies which strategy attempted to create the signal.
@@ -6634,6 +6634,10 @@ interface SignalOpenedNotification {
6634
6634
  priceStopLoss: number;
6635
6635
  /** Optional human-readable description of signal reason */
6636
6636
  note?: string;
6637
+ /** Signal creation timestamp in milliseconds (when signal was first created/scheduled) */
6638
+ scheduledAt: number;
6639
+ /** Pending timestamp in milliseconds (when position became pending/active at priceOpen) */
6640
+ pendingAt: number;
6637
6641
  /** Unix timestamp in milliseconds when the tick result was created (from candle timestamp in backtest or execution context when in live) */
6638
6642
  createdAt: number;
6639
6643
  }
@@ -6672,6 +6676,10 @@ interface SignalClosedNotification {
6672
6676
  duration: number;
6673
6677
  /** Optional human-readable description of signal reason */
6674
6678
  note?: string;
6679
+ /** Signal creation timestamp in milliseconds (when signal was first created/scheduled) */
6680
+ scheduledAt: number;
6681
+ /** Pending timestamp in milliseconds (when position became pending/active at priceOpen) */
6682
+ pendingAt: number;
6675
6683
  /** Unix timestamp in milliseconds when the tick result was created (from candle timestamp in backtest or execution context when in live) */
6676
6684
  createdAt: number;
6677
6685
  }
@@ -7040,8 +7048,20 @@ interface RiskRejectionNotification {
7040
7048
  activePositionCount: number;
7041
7049
  /** Current market price when rejection occurred */
7042
7050
  currentPrice: number;
7043
- /** The signal that was rejected */
7044
- pendingSignal: ISignalDto;
7051
+ /** Unique signal identifier from pending signal (may be undefined if not provided) */
7052
+ signalId: string | undefined;
7053
+ /** Trade direction: "long" (buy) or "short" (sell) */
7054
+ position: "long" | "short";
7055
+ /** Entry price for the position (may be undefined if not provided) */
7056
+ priceOpen: number | undefined;
7057
+ /** Take profit target price */
7058
+ priceTakeProfit: number;
7059
+ /** Stop loss exit price */
7060
+ priceStopLoss: number;
7061
+ /** Expected duration in minutes before time_expired */
7062
+ minuteEstimatedTime: number;
7063
+ /** Optional human-readable description of signal reason */
7064
+ signalNote?: string;
7045
7065
  /** Unix timestamp in milliseconds when the notification was created */
7046
7066
  createdAt: number;
7047
7067
  }
@@ -7547,7 +7567,7 @@ interface RiskEvent {
7547
7567
  /** Trading pair symbol */
7548
7568
  symbol: string;
7549
7569
  /** Pending signal details */
7550
- pendingSignal: IRiskSignalRow;
7570
+ currentSignal: IRiskSignalRow;
7551
7571
  /** Strategy name */
7552
7572
  strategyName: StrategyName;
7553
7573
  /** Exchange name */