backtest-kit 1.5.26 → 1.5.27

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "backtest-kit",
3
- "version": "1.5.26",
3
+ "version": "1.5.27",
4
4
  "description": "A TypeScript library for trading system backtest",
5
5
  "author": {
6
6
  "name": "Petr Tripolsky",
package/types.d.ts CHANGED
@@ -431,6 +431,8 @@ interface IRiskSchema {
431
431
  interface IRiskParams extends IRiskSchema {
432
432
  /** Logger service for debug output */
433
433
  logger: ILogger;
434
+ /** True if backtest mode, false if live mode */
435
+ backtest: boolean;
434
436
  /**
435
437
  * Callback invoked when a signal is rejected due to risk limits.
436
438
  * Called before emitting to riskSubject.
@@ -4803,7 +4805,7 @@ type PartialData = Record<string, IPartialData>;
4803
4805
  * Utility class for managing partial profit/loss levels persistence.
4804
4806
  *
4805
4807
  * Features:
4806
- * - Memoized storage instances per symbol
4808
+ * - Memoized storage instances per symbol:strategyName
4807
4809
  * - Custom adapter support
4808
4810
  * - Atomic read/write operations for partial data
4809
4811
  * - Crash-safe partial state management
@@ -4829,15 +4831,16 @@ declare class PersistPartialUtils {
4829
4831
  */
4830
4832
  usePersistPartialAdapter(Ctor: TPersistBaseCtor<string, PartialData>): void;
4831
4833
  /**
4832
- * Reads persisted partial data for a symbol.
4834
+ * Reads persisted partial data for a symbol and strategy.
4833
4835
  *
4834
4836
  * Called by ClientPartial.waitForInit() to restore state.
4835
4837
  * Returns empty object if no partial data exists.
4836
4838
  *
4837
4839
  * @param symbol - Trading pair symbol
4840
+ * @param strategyName - Strategy identifier
4838
4841
  * @returns Promise resolving to partial data record
4839
4842
  */
4840
- readPartialData: (symbol: string) => Promise<PartialData>;
4843
+ readPartialData: (symbol: string, strategyName: StrategyName) => Promise<PartialData>;
4841
4844
  /**
4842
4845
  * Writes partial data to disk with atomic file writes.
4843
4846
  *
@@ -4846,9 +4849,10 @@ declare class PersistPartialUtils {
4846
4849
  *
4847
4850
  * @param partialData - Record of signal IDs to partial data
4848
4851
  * @param symbol - Trading pair symbol
4852
+ * @param strategyName - Strategy identifier
4849
4853
  * @returns Promise that resolves when write is complete
4850
4854
  */
4851
- writePartialData: (partialData: PartialData, symbol: string) => Promise<void>;
4855
+ writePartialData: (partialData: PartialData, symbol: string, strategyName: StrategyName) => Promise<void>;
4852
4856
  }
4853
4857
  /**
4854
4858
  * Global singleton instance of PersistPartialUtils.
@@ -4860,10 +4864,10 @@ declare class PersistPartialUtils {
4860
4864
  * PersistPartialAdapter.usePersistPartialAdapter(RedisPersist);
4861
4865
  *
4862
4866
  * // Read partial data
4863
- * const partialData = await PersistPartialAdapter.readPartialData("BTCUSDT");
4867
+ * const partialData = await PersistPartialAdapter.readPartialData("BTCUSDT", "my-strategy");
4864
4868
  *
4865
4869
  * // Write partial data
4866
- * await PersistPartialAdapter.writePartialData(partialData, "BTCUSDT");
4870
+ * await PersistPartialAdapter.writePartialData(partialData, "BTCUSDT", "my-strategy");
4867
4871
  * ```
4868
4872
  */
4869
4873
  declare const PersistPartialAdapter: PersistPartialUtils;
@@ -8107,6 +8111,7 @@ declare class ClientRisk implements IRisk {
8107
8111
  private waitForInit;
8108
8112
  /**
8109
8113
  * Persists current active positions to disk.
8114
+ * Skips in backtest mode.
8110
8115
  */
8111
8116
  private _updatePositions;
8112
8117
  /**
@@ -8177,15 +8182,16 @@ declare class RiskConnectionService {
8177
8182
  private readonly loggerService;
8178
8183
  private readonly riskSchemaService;
8179
8184
  /**
8180
- * Retrieves memoized ClientRisk instance for given risk name.
8185
+ * Retrieves memoized ClientRisk instance for given risk name and backtest mode.
8181
8186
  *
8182
8187
  * Creates ClientRisk on first call, returns cached instance on subsequent calls.
8183
- * Cache key is riskName string.
8188
+ * Cache key is "riskName:backtest" string to separate live and backtest instances.
8184
8189
  *
8185
8190
  * @param riskName - Name of registered risk schema
8191
+ * @param backtest - True if backtest mode, false if live mode
8186
8192
  * @returns Configured ClientRisk instance
8187
8193
  */
8188
- getRisk: ((riskName: RiskName) => ClientRisk) & functools_kit.IClearableMemoize<string> & functools_kit.IControlMemoize<string, ClientRisk>;
8194
+ getRisk: ((riskName: RiskName, backtest: boolean) => ClientRisk) & functools_kit.IClearableMemoize<string> & functools_kit.IControlMemoize<string, ClientRisk>;
8189
8195
  /**
8190
8196
  * Checks if a signal should be allowed based on risk limits.
8191
8197
  *
@@ -8194,40 +8200,43 @@ declare class RiskConnectionService {
8194
8200
  * ClientRisk will emit riskSubject event via onRejected callback when signal is rejected.
8195
8201
  *
8196
8202
  * @param params - Risk check arguments (portfolio state, position details)
8197
- * @param context - Execution context with risk name
8203
+ * @param context - Execution context with risk name and backtest mode
8198
8204
  * @returns Promise resolving to risk check result
8199
8205
  */
8200
8206
  checkSignal: (params: IRiskCheckArgs, context: {
8201
8207
  riskName: RiskName;
8208
+ backtest: boolean;
8202
8209
  }) => Promise<boolean>;
8203
8210
  /**
8204
8211
  * Registers an opened signal with the risk management system.
8205
8212
  * Routes to appropriate ClientRisk instance.
8206
8213
  *
8207
8214
  * @param symbol - Trading pair symbol
8208
- * @param context - Context information (strategyName, riskName)
8215
+ * @param context - Context information (strategyName, riskName, backtest)
8209
8216
  */
8210
8217
  addSignal: (symbol: string, context: {
8211
8218
  strategyName: string;
8212
8219
  riskName: RiskName;
8220
+ backtest: boolean;
8213
8221
  }) => Promise<void>;
8214
8222
  /**
8215
8223
  * Removes a closed signal from the risk management system.
8216
8224
  * Routes to appropriate ClientRisk instance.
8217
8225
  *
8218
8226
  * @param symbol - Trading pair symbol
8219
- * @param context - Context information (strategyName, riskName)
8227
+ * @param context - Context information (strategyName, riskName, backtest)
8220
8228
  */
8221
8229
  removeSignal: (symbol: string, context: {
8222
8230
  strategyName: string;
8223
8231
  riskName: RiskName;
8232
+ backtest: boolean;
8224
8233
  }) => Promise<void>;
8225
8234
  /**
8226
8235
  * Clears the cached ClientRisk instance for the given risk name.
8227
8236
  *
8228
8237
  * @param riskName - Name of the risk schema to clear from cache
8229
8238
  */
8230
- clear: (riskName?: RiskName) => Promise<void>;
8239
+ clear: (backtest: boolean, riskName?: RiskName) => Promise<void>;
8231
8240
  }
8232
8241
 
8233
8242
  /**
@@ -8270,10 +8279,10 @@ declare class PartialConnectionService implements IPartial {
8270
8279
  /**
8271
8280
  * Memoized factory function for ClientPartial instances.
8272
8281
  *
8273
- * Creates one ClientPartial per signal ID with configured callbacks.
8282
+ * Creates one ClientPartial per signal ID and backtest mode with configured callbacks.
8274
8283
  * Instances are cached until clear() is called.
8275
8284
  *
8276
- * Key format: signalId
8285
+ * Key format: "signalId:backtest" or "signalId:live"
8277
8286
  * Value: ClientPartial instance with logger and event emitters
8278
8287
  */
8279
8288
  private getPartial;
@@ -8380,7 +8389,7 @@ declare class StrategyConnectionService {
8380
8389
  *
8381
8390
  * @returns Promise resolving to pending signal or null
8382
8391
  */
8383
- getPendingSignal: (symbol: string, strategyName: StrategyName) => Promise<ISignalRow | null>;
8392
+ getPendingSignal: (backtest: boolean, symbol: string, strategyName: StrategyName) => Promise<ISignalRow | null>;
8384
8393
  /**
8385
8394
  * Retrieves the stopped state of the strategy.
8386
8395
  *
@@ -8391,7 +8400,7 @@ declare class StrategyConnectionService {
8391
8400
  * @param strategyName - Name of the strategy
8392
8401
  * @returns Promise resolving to true if strategy is stopped, false otherwise
8393
8402
  */
8394
- getStopped: (symbol: string, strategyName: StrategyName) => Promise<boolean>;
8403
+ getStopped: (backtest: boolean, symbol: string, strategyName: StrategyName) => Promise<boolean>;
8395
8404
  /**
8396
8405
  * Executes live trading tick for current strategy.
8397
8406
  *
@@ -8425,10 +8434,10 @@ declare class StrategyConnectionService {
8425
8434
  * @param strategyName - Name of strategy to stop
8426
8435
  * @returns Promise that resolves when stop flag is set
8427
8436
  */
8428
- stop: (ctx: {
8437
+ stop: (backtest: boolean, ctx: {
8429
8438
  symbol: string;
8430
8439
  strategyName: StrategyName;
8431
- }, backtest: boolean) => Promise<void>;
8440
+ }) => Promise<void>;
8432
8441
  /**
8433
8442
  * Clears the memoized ClientStrategy instance from cache.
8434
8443
  *
@@ -8437,7 +8446,7 @@ declare class StrategyConnectionService {
8437
8446
  *
8438
8447
  * @param ctx - Optional context with symbol and strategyName (clears all if not provided)
8439
8448
  */
8440
- clear: (ctx?: {
8449
+ clear: (backtest: boolean, ctx?: {
8441
8450
  symbol: string;
8442
8451
  strategyName: StrategyName;
8443
8452
  }) => Promise<void>;
@@ -8705,7 +8714,7 @@ declare class StrategyCoreService {
8705
8714
  * @param strategyName - Name of the strategy
8706
8715
  * @returns Promise resolving to pending signal or null
8707
8716
  */
8708
- getPendingSignal: (symbol: string, strategyName: StrategyName) => Promise<ISignalRow | null>;
8717
+ getPendingSignal: (backtest: boolean, symbol: string, strategyName: StrategyName) => Promise<ISignalRow | null>;
8709
8718
  /**
8710
8719
  * Checks if the strategy has been stopped.
8711
8720
  *
@@ -8716,7 +8725,7 @@ declare class StrategyCoreService {
8716
8725
  * @param strategyName - Name of the strategy
8717
8726
  * @returns Promise resolving to true if strategy is stopped, false otherwise
8718
8727
  */
8719
- getStopped: (symbol: string, strategyName: StrategyName) => Promise<boolean>;
8728
+ getStopped: (backtest: boolean, symbol: string, strategyName: StrategyName) => Promise<boolean>;
8720
8729
  /**
8721
8730
  * Checks signal status at a specific timestamp.
8722
8731
  *
@@ -8752,10 +8761,10 @@ declare class StrategyCoreService {
8752
8761
  * @param strategyName - Name of strategy to stop
8753
8762
  * @returns Promise that resolves when stop flag is set
8754
8763
  */
8755
- stop: (ctx: {
8764
+ stop: (backtest: boolean, ctx: {
8756
8765
  symbol: string;
8757
8766
  strategyName: StrategyName;
8758
- }, backtest: boolean) => Promise<void>;
8767
+ }) => Promise<void>;
8759
8768
  /**
8760
8769
  * Clears the memoized ClientStrategy instance from cache.
8761
8770
  *
@@ -8764,7 +8773,7 @@ declare class StrategyCoreService {
8764
8773
  *
8765
8774
  * @param ctx - Optional context with symbol and strategyName (clears all if not provided)
8766
8775
  */
8767
- clear: (ctx?: {
8776
+ clear: (backtest: boolean, ctx?: {
8768
8777
  symbol: string;
8769
8778
  strategyName: StrategyName;
8770
8779
  }) => Promise<void>;
@@ -8838,6 +8847,7 @@ declare class RiskGlobalService {
8838
8847
  */
8839
8848
  checkSignal: (params: IRiskCheckArgs, context: {
8840
8849
  riskName: RiskName;
8850
+ backtest: boolean;
8841
8851
  }) => Promise<boolean>;
8842
8852
  /**
8843
8853
  * Registers an opened signal with the risk management system.
@@ -8848,6 +8858,7 @@ declare class RiskGlobalService {
8848
8858
  addSignal: (symbol: string, context: {
8849
8859
  strategyName: string;
8850
8860
  riskName: RiskName;
8861
+ backtest: boolean;
8851
8862
  }) => Promise<void>;
8852
8863
  /**
8853
8864
  * Removes a closed signal from the risk management system.
@@ -8858,6 +8869,7 @@ declare class RiskGlobalService {
8858
8869
  removeSignal: (symbol: string, context: {
8859
8870
  strategyName: string;
8860
8871
  riskName: RiskName;
8872
+ backtest: boolean;
8861
8873
  }) => Promise<void>;
8862
8874
  /**
8863
8875
  * Clears risk data.
@@ -8865,7 +8877,7 @@ declare class RiskGlobalService {
8865
8877
  * If no riskName is provided, clears all risk data.
8866
8878
  * @param riskName - Optional name of the risk instance to clear
8867
8879
  */
8868
- clear: (riskName?: RiskName) => Promise<void>;
8880
+ clear: (backtest: boolean, riskName?: RiskName) => Promise<void>;
8869
8881
  }
8870
8882
 
8871
8883
  /**