backtest-kit 1.5.29 → 1.5.30

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
@@ -2043,7 +2043,7 @@ const BASE_WAIT_FOR_INIT_FN_METHOD_NAME = "PersistBase.waitForInitFn";
2043
2043
  const BASE_UNLINK_RETRY_COUNT = 5;
2044
2044
  const BASE_UNLINK_RETRY_DELAY = 1000;
2045
2045
  const BASE_WAIT_FOR_INIT_FN = async (self) => {
2046
- bt.loggerService.debug(BASE_WAIT_FOR_INIT_FN_METHOD_NAME, {
2046
+ backtest$1.loggerService.debug(BASE_WAIT_FOR_INIT_FN_METHOD_NAME, {
2047
2047
  entityName: self.entityName,
2048
2048
  directory: self._directory,
2049
2049
  });
@@ -2101,7 +2101,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2101
2101
  this.entityName = entityName;
2102
2102
  this.baseDir = baseDir;
2103
2103
  this[_a] = functoolsKit.singleshot(async () => await BASE_WAIT_FOR_INIT_FN(this));
2104
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_CTOR, {
2104
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_CTOR, {
2105
2105
  entityName: this.entityName,
2106
2106
  baseDir,
2107
2107
  });
@@ -2117,7 +2117,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2117
2117
  return path.join(this.baseDir, this.entityName, `${entityId}.json`);
2118
2118
  }
2119
2119
  async waitForInit(initial) {
2120
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_WAIT_FOR_INIT, {
2120
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_WAIT_FOR_INIT, {
2121
2121
  entityName: this.entityName,
2122
2122
  initial,
2123
2123
  });
@@ -2134,7 +2134,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2134
2134
  return length;
2135
2135
  }
2136
2136
  async readValue(entityId) {
2137
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_READ_VALUE, {
2137
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_READ_VALUE, {
2138
2138
  entityName: this.entityName,
2139
2139
  entityId,
2140
2140
  });
@@ -2151,7 +2151,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2151
2151
  }
2152
2152
  }
2153
2153
  async hasValue(entityId) {
2154
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_HAS_VALUE, {
2154
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_HAS_VALUE, {
2155
2155
  entityName: this.entityName,
2156
2156
  entityId,
2157
2157
  });
@@ -2168,7 +2168,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2168
2168
  }
2169
2169
  }
2170
2170
  async writeValue(entityId, entity) {
2171
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_WRITE_VALUE, {
2171
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_WRITE_VALUE, {
2172
2172
  entityName: this.entityName,
2173
2173
  entityId,
2174
2174
  });
@@ -2189,7 +2189,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2189
2189
  * @throws Error if entity not found or deletion fails
2190
2190
  */
2191
2191
  async removeValue(entityId) {
2192
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_REMOVE_VALUE, {
2192
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_REMOVE_VALUE, {
2193
2193
  entityName: this.entityName,
2194
2194
  entityId,
2195
2195
  });
@@ -2211,7 +2211,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2211
2211
  * @throws Error if deletion fails
2212
2212
  */
2213
2213
  async removeAll() {
2214
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_REMOVE_ALL, {
2214
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_REMOVE_ALL, {
2215
2215
  entityName: this.entityName,
2216
2216
  });
2217
2217
  try {
@@ -2233,7 +2233,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2233
2233
  * @throws Error if reading fails
2234
2234
  */
2235
2235
  async *values() {
2236
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_VALUES, {
2236
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_VALUES, {
2237
2237
  entityName: this.entityName,
2238
2238
  });
2239
2239
  try {
@@ -2262,7 +2262,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2262
2262
  * @throws Error if reading fails
2263
2263
  */
2264
2264
  async *keys() {
2265
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_KEYS, {
2265
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_KEYS, {
2266
2266
  entityName: this.entityName,
2267
2267
  });
2268
2268
  try {
@@ -2367,7 +2367,7 @@ class PersistSignalUtils {
2367
2367
  * @returns Promise resolving to signal or null
2368
2368
  */
2369
2369
  this.readSignalData = async (symbol, strategyName) => {
2370
- bt.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_READ_DATA);
2370
+ backtest$1.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_READ_DATA);
2371
2371
  const key = `${symbol}:${strategyName}`;
2372
2372
  const isInitial = !this.getSignalStorage.has(key);
2373
2373
  const stateStorage = this.getSignalStorage(symbol, strategyName);
@@ -2389,7 +2389,7 @@ class PersistSignalUtils {
2389
2389
  * @returns Promise that resolves when write is complete
2390
2390
  */
2391
2391
  this.writeSignalData = async (signalRow, symbol, strategyName) => {
2392
- bt.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_WRITE_DATA);
2392
+ backtest$1.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_WRITE_DATA);
2393
2393
  const key = `${symbol}:${strategyName}`;
2394
2394
  const isInitial = !this.getSignalStorage.has(key);
2395
2395
  const stateStorage = this.getSignalStorage(symbol, strategyName);
@@ -2412,7 +2412,7 @@ class PersistSignalUtils {
2412
2412
  * ```
2413
2413
  */
2414
2414
  usePersistSignalAdapter(Ctor) {
2415
- bt.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_USE_PERSIST_SIGNAL_ADAPTER);
2415
+ backtest$1.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_USE_PERSIST_SIGNAL_ADAPTER);
2416
2416
  this.PersistSignalFactory = Ctor;
2417
2417
  }
2418
2418
  }
@@ -2464,7 +2464,7 @@ class PersistRiskUtils {
2464
2464
  * @returns Promise resolving to Map of active positions
2465
2465
  */
2466
2466
  this.readPositionData = async (riskName) => {
2467
- bt.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_READ_DATA);
2467
+ backtest$1.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_READ_DATA);
2468
2468
  const isInitial = !this.getRiskStorage.has(riskName);
2469
2469
  const stateStorage = this.getRiskStorage(riskName);
2470
2470
  await stateStorage.waitForInit(isInitial);
@@ -2485,7 +2485,7 @@ class PersistRiskUtils {
2485
2485
  * @returns Promise that resolves when write is complete
2486
2486
  */
2487
2487
  this.writePositionData = async (riskRow, riskName) => {
2488
- bt.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_WRITE_DATA);
2488
+ backtest$1.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_WRITE_DATA);
2489
2489
  const isInitial = !this.getRiskStorage.has(riskName);
2490
2490
  const stateStorage = this.getRiskStorage(riskName);
2491
2491
  await stateStorage.waitForInit(isInitial);
@@ -2508,7 +2508,7 @@ class PersistRiskUtils {
2508
2508
  * ```
2509
2509
  */
2510
2510
  usePersistRiskAdapter(Ctor) {
2511
- bt.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_USE_PERSIST_RISK_ADAPTER);
2511
+ backtest$1.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_USE_PERSIST_RISK_ADAPTER);
2512
2512
  this.PersistRiskFactory = Ctor;
2513
2513
  }
2514
2514
  }
@@ -2558,7 +2558,7 @@ class PersistScheduleUtils {
2558
2558
  * @returns Promise resolving to scheduled signal or null
2559
2559
  */
2560
2560
  this.readScheduleData = async (symbol, strategyName) => {
2561
- bt.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_READ_DATA);
2561
+ backtest$1.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_READ_DATA);
2562
2562
  const key = `${symbol}:${strategyName}`;
2563
2563
  const isInitial = !this.getScheduleStorage.has(key);
2564
2564
  const stateStorage = this.getScheduleStorage(symbol, strategyName);
@@ -2580,7 +2580,7 @@ class PersistScheduleUtils {
2580
2580
  * @returns Promise that resolves when write is complete
2581
2581
  */
2582
2582
  this.writeScheduleData = async (scheduledSignalRow, symbol, strategyName) => {
2583
- bt.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_WRITE_DATA);
2583
+ backtest$1.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_WRITE_DATA);
2584
2584
  const key = `${symbol}:${strategyName}`;
2585
2585
  const isInitial = !this.getScheduleStorage.has(key);
2586
2586
  const stateStorage = this.getScheduleStorage(symbol, strategyName);
@@ -2603,7 +2603,7 @@ class PersistScheduleUtils {
2603
2603
  * ```
2604
2604
  */
2605
2605
  usePersistScheduleAdapter(Ctor) {
2606
- bt.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_USE_PERSIST_SCHEDULE_ADAPTER);
2606
+ backtest$1.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_USE_PERSIST_SCHEDULE_ADAPTER);
2607
2607
  this.PersistScheduleFactory = Ctor;
2608
2608
  }
2609
2609
  }
@@ -2653,7 +2653,7 @@ class PersistPartialUtils {
2653
2653
  * @returns Promise resolving to partial data record
2654
2654
  */
2655
2655
  this.readPartialData = async (symbol, strategyName) => {
2656
- bt.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_READ_DATA);
2656
+ backtest$1.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_READ_DATA);
2657
2657
  const key = `${symbol}:${strategyName}`;
2658
2658
  const isInitial = !this.getPartialStorage.has(key);
2659
2659
  const stateStorage = this.getPartialStorage(symbol, strategyName);
@@ -2676,7 +2676,7 @@ class PersistPartialUtils {
2676
2676
  * @returns Promise that resolves when write is complete
2677
2677
  */
2678
2678
  this.writePartialData = async (partialData, symbol, strategyName) => {
2679
- bt.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_WRITE_DATA);
2679
+ backtest$1.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_WRITE_DATA);
2680
2680
  const key = `${symbol}:${strategyName}`;
2681
2681
  const isInitial = !this.getPartialStorage.has(key);
2682
2682
  const stateStorage = this.getPartialStorage(symbol, strategyName);
@@ -2700,7 +2700,7 @@ class PersistPartialUtils {
2700
2700
  * ```
2701
2701
  */
2702
2702
  usePersistPartialAdapter(Ctor) {
2703
- bt.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_USE_PERSIST_PARTIAL_ADAPTER);
2703
+ backtest$1.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_USE_PERSIST_PARTIAL_ADAPTER);
2704
2704
  this.PersistPartialFactory = Ctor;
2705
2705
  }
2706
2706
  }
@@ -3169,7 +3169,7 @@ const GET_SIGNAL_FN = functoolsKit.trycatch(async (self) => {
3169
3169
  error: functoolsKit.errorData(error),
3170
3170
  message: functoolsKit.getErrorMessage(error),
3171
3171
  };
3172
- bt.loggerService.warn(message, payload);
3172
+ backtest$1.loggerService.warn(message, payload);
3173
3173
  console.warn(message, payload);
3174
3174
  errorEmitter.next(error);
3175
3175
  },
@@ -4349,7 +4349,7 @@ class MergeRisk {
4349
4349
  * @returns Promise resolving to true if all risks approve, false if any risk rejects
4350
4350
  */
4351
4351
  async checkSignal(params) {
4352
- bt.loggerService.info("MergeRisk checkSignal", {
4352
+ backtest$1.loggerService.info("MergeRisk checkSignal", {
4353
4353
  params,
4354
4354
  });
4355
4355
  const riskCheck = await Promise.all(this._riskList.map(async (risk) => await risk.checkSignal(params)));
@@ -4366,7 +4366,7 @@ class MergeRisk {
4366
4366
  * @returns Promise that resolves when all risks have registered the signal
4367
4367
  */
4368
4368
  async addSignal(symbol, context) {
4369
- bt.loggerService.info("MergeRisk addSignal", {
4369
+ backtest$1.loggerService.info("MergeRisk addSignal", {
4370
4370
  symbol,
4371
4371
  context,
4372
4372
  });
@@ -4383,7 +4383,7 @@ class MergeRisk {
4383
4383
  * @returns Promise that resolves when all risks have removed the signal
4384
4384
  */
4385
4385
  async removeSignal(symbol, context) {
4386
- bt.loggerService.info("MergeRisk removeSignal", {
4386
+ backtest$1.loggerService.info("MergeRisk removeSignal", {
4387
4387
  symbol,
4388
4388
  context,
4389
4389
  });
@@ -4452,18 +4452,18 @@ class RiskUtils {
4452
4452
  * ```
4453
4453
  */
4454
4454
  this.getData = async (symbol, strategyName, backtest) => {
4455
- bt.loggerService.info(RISK_METHOD_NAME_GET_DATA, {
4455
+ backtest$1.loggerService.info(RISK_METHOD_NAME_GET_DATA, {
4456
4456
  symbol,
4457
4457
  strategyName,
4458
4458
  });
4459
- bt.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_GET_DATA);
4459
+ backtest$1.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_GET_DATA);
4460
4460
  {
4461
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
4461
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
4462
4462
  riskName &&
4463
- bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_DATA);
4464
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_DATA));
4463
+ backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_DATA);
4464
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_DATA));
4465
4465
  }
4466
- return await bt.riskMarkdownService.getData(symbol, strategyName, backtest);
4466
+ return await backtest$1.riskMarkdownService.getData(symbol, strategyName, backtest);
4467
4467
  };
4468
4468
  /**
4469
4469
  * Generates markdown report with all risk rejection events for a symbol-strategy pair.
@@ -4507,18 +4507,18 @@ class RiskUtils {
4507
4507
  * ```
4508
4508
  */
4509
4509
  this.getReport = async (symbol, strategyName, backtest, columns) => {
4510
- bt.loggerService.info(RISK_METHOD_NAME_GET_REPORT, {
4510
+ backtest$1.loggerService.info(RISK_METHOD_NAME_GET_REPORT, {
4511
4511
  symbol,
4512
4512
  strategyName,
4513
4513
  });
4514
- bt.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_GET_REPORT);
4514
+ backtest$1.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_GET_REPORT);
4515
4515
  {
4516
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
4516
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
4517
4517
  riskName &&
4518
- bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_REPORT);
4519
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_REPORT));
4518
+ backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_REPORT);
4519
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_REPORT));
4520
4520
  }
4521
- return await bt.riskMarkdownService.getReport(symbol, strategyName, backtest, columns);
4521
+ return await backtest$1.riskMarkdownService.getReport(symbol, strategyName, backtest, columns);
4522
4522
  };
4523
4523
  /**
4524
4524
  * Generates and saves markdown report to file.
@@ -4553,19 +4553,19 @@ class RiskUtils {
4553
4553
  * ```
4554
4554
  */
4555
4555
  this.dump = async (symbol, strategyName, backtest, path, columns) => {
4556
- bt.loggerService.info(RISK_METHOD_NAME_DUMP, {
4556
+ backtest$1.loggerService.info(RISK_METHOD_NAME_DUMP, {
4557
4557
  symbol,
4558
4558
  strategyName,
4559
4559
  path,
4560
4560
  });
4561
- bt.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_DUMP);
4561
+ backtest$1.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_DUMP);
4562
4562
  {
4563
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
4563
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
4564
4564
  riskName &&
4565
- bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_DUMP);
4566
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_DUMP));
4565
+ backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_DUMP);
4566
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_DUMP));
4567
4567
  }
4568
- await bt.riskMarkdownService.dump(symbol, strategyName, backtest, path, columns);
4568
+ await backtest$1.riskMarkdownService.dump(symbol, strategyName, backtest, path, columns);
4569
4569
  };
4570
4570
  }
4571
4571
  }
@@ -5183,7 +5183,7 @@ const DO_VALIDATION_FN = functoolsKit.trycatch(async (validation, params) => {
5183
5183
  error: functoolsKit.errorData(error),
5184
5184
  message: functoolsKit.getErrorMessage(error),
5185
5185
  };
5186
- bt.loggerService.warn(message, payload);
5186
+ backtest$1.loggerService.warn(message, payload);
5187
5187
  console.warn(message, payload);
5188
5188
  validationSubject.next(error);
5189
5189
  },
@@ -13661,7 +13661,7 @@ const backtest = {
13661
13661
  ...templateServices,
13662
13662
  };
13663
13663
  init();
13664
- var bt = backtest;
13664
+ var backtest$1 = backtest;
13665
13665
 
13666
13666
  /**
13667
13667
  * Sets custom logger implementation for the framework.
@@ -13681,7 +13681,7 @@ var bt = backtest;
13681
13681
  * ```
13682
13682
  */
13683
13683
  function setLogger(logger) {
13684
- bt.loggerService.setLogger(logger);
13684
+ backtest$1.loggerService.setLogger(logger);
13685
13685
  }
13686
13686
  /**
13687
13687
  * Sets global configuration parameters for the framework.
@@ -13699,7 +13699,7 @@ function setConfig(config, _unsafe) {
13699
13699
  const prevConfig = Object.assign({}, GLOBAL_CONFIG);
13700
13700
  try {
13701
13701
  Object.assign(GLOBAL_CONFIG, config);
13702
- !_unsafe && bt.configValidationService.validate();
13702
+ !_unsafe && backtest$1.configValidationService.validate();
13703
13703
  }
13704
13704
  catch (error) {
13705
13705
  console.warn(`backtest-kit setConfig failed: ${functoolsKit.getErrorMessage(error)}`, config);
@@ -13770,7 +13770,7 @@ function setColumns(columns, _unsafe) {
13770
13770
  const prevConfig = Object.assign({}, COLUMN_CONFIG);
13771
13771
  try {
13772
13772
  Object.assign(COLUMN_CONFIG, columns);
13773
- !_unsafe && bt.columnValidationService.validate();
13773
+ !_unsafe && backtest$1.columnValidationService.validate();
13774
13774
  }
13775
13775
  catch (error) {
13776
13776
  console.warn(`backtest-kit setColumns failed: ${functoolsKit.getErrorMessage(error)}`, columns);
@@ -13855,11 +13855,11 @@ const ADD_OPTIMIZER_METHOD_NAME = "add.addOptimizer";
13855
13855
  * ```
13856
13856
  */
13857
13857
  function addStrategy(strategySchema) {
13858
- bt.loggerService.info(ADD_STRATEGY_METHOD_NAME, {
13858
+ backtest$1.loggerService.info(ADD_STRATEGY_METHOD_NAME, {
13859
13859
  strategySchema,
13860
13860
  });
13861
- bt.strategyValidationService.addStrategy(strategySchema.strategyName, strategySchema);
13862
- bt.strategySchemaService.register(strategySchema.strategyName, strategySchema);
13861
+ backtest$1.strategyValidationService.addStrategy(strategySchema.strategyName, strategySchema);
13862
+ backtest$1.strategySchemaService.register(strategySchema.strategyName, strategySchema);
13863
13863
  }
13864
13864
  /**
13865
13865
  * Registers an exchange data source in the framework.
@@ -13897,11 +13897,11 @@ function addStrategy(strategySchema) {
13897
13897
  * ```
13898
13898
  */
13899
13899
  function addExchange(exchangeSchema) {
13900
- bt.loggerService.info(ADD_EXCHANGE_METHOD_NAME, {
13900
+ backtest$1.loggerService.info(ADD_EXCHANGE_METHOD_NAME, {
13901
13901
  exchangeSchema,
13902
13902
  });
13903
- bt.exchangeValidationService.addExchange(exchangeSchema.exchangeName, exchangeSchema);
13904
- bt.exchangeSchemaService.register(exchangeSchema.exchangeName, exchangeSchema);
13903
+ backtest$1.exchangeValidationService.addExchange(exchangeSchema.exchangeName, exchangeSchema);
13904
+ backtest$1.exchangeSchemaService.register(exchangeSchema.exchangeName, exchangeSchema);
13905
13905
  }
13906
13906
  /**
13907
13907
  * Registers a timeframe generator for backtesting.
@@ -13934,11 +13934,11 @@ function addExchange(exchangeSchema) {
13934
13934
  * ```
13935
13935
  */
13936
13936
  function addFrame(frameSchema) {
13937
- bt.loggerService.info(ADD_FRAME_METHOD_NAME, {
13937
+ backtest$1.loggerService.info(ADD_FRAME_METHOD_NAME, {
13938
13938
  frameSchema,
13939
13939
  });
13940
- bt.frameValidationService.addFrame(frameSchema.frameName, frameSchema);
13941
- bt.frameSchemaService.register(frameSchema.frameName, frameSchema);
13940
+ backtest$1.frameValidationService.addFrame(frameSchema.frameName, frameSchema);
13941
+ backtest$1.frameSchemaService.register(frameSchema.frameName, frameSchema);
13942
13942
  }
13943
13943
  /**
13944
13944
  * Registers a walker for strategy comparison.
@@ -13978,11 +13978,11 @@ function addFrame(frameSchema) {
13978
13978
  * ```
13979
13979
  */
13980
13980
  function addWalker(walkerSchema) {
13981
- bt.loggerService.info(ADD_WALKER_METHOD_NAME, {
13981
+ backtest$1.loggerService.info(ADD_WALKER_METHOD_NAME, {
13982
13982
  walkerSchema,
13983
13983
  });
13984
- bt.walkerValidationService.addWalker(walkerSchema.walkerName, walkerSchema);
13985
- bt.walkerSchemaService.register(walkerSchema.walkerName, walkerSchema);
13984
+ backtest$1.walkerValidationService.addWalker(walkerSchema.walkerName, walkerSchema);
13985
+ backtest$1.walkerSchemaService.register(walkerSchema.walkerName, walkerSchema);
13986
13986
  }
13987
13987
  /**
13988
13988
  * Registers a position sizing configuration in the framework.
@@ -14037,11 +14037,11 @@ function addWalker(walkerSchema) {
14037
14037
  * ```
14038
14038
  */
14039
14039
  function addSizing(sizingSchema) {
14040
- bt.loggerService.info(ADD_SIZING_METHOD_NAME, {
14040
+ backtest$1.loggerService.info(ADD_SIZING_METHOD_NAME, {
14041
14041
  sizingSchema,
14042
14042
  });
14043
- bt.sizingValidationService.addSizing(sizingSchema.sizingName, sizingSchema);
14044
- bt.sizingSchemaService.register(sizingSchema.sizingName, sizingSchema);
14043
+ backtest$1.sizingValidationService.addSizing(sizingSchema.sizingName, sizingSchema);
14044
+ backtest$1.sizingSchemaService.register(sizingSchema.sizingName, sizingSchema);
14045
14045
  }
14046
14046
  /**
14047
14047
  * Registers a risk management configuration in the framework.
@@ -14105,11 +14105,11 @@ function addSizing(sizingSchema) {
14105
14105
  * ```
14106
14106
  */
14107
14107
  function addRisk(riskSchema) {
14108
- bt.loggerService.info(ADD_RISK_METHOD_NAME, {
14108
+ backtest$1.loggerService.info(ADD_RISK_METHOD_NAME, {
14109
14109
  riskSchema,
14110
14110
  });
14111
- bt.riskValidationService.addRisk(riskSchema.riskName, riskSchema);
14112
- bt.riskSchemaService.register(riskSchema.riskName, riskSchema);
14111
+ backtest$1.riskValidationService.addRisk(riskSchema.riskName, riskSchema);
14112
+ backtest$1.riskSchemaService.register(riskSchema.riskName, riskSchema);
14113
14113
  }
14114
14114
  /**
14115
14115
  * Registers an optimizer configuration in the framework.
@@ -14199,11 +14199,11 @@ function addRisk(riskSchema) {
14199
14199
  * ```
14200
14200
  */
14201
14201
  function addOptimizer(optimizerSchema) {
14202
- bt.loggerService.info(ADD_OPTIMIZER_METHOD_NAME, {
14202
+ backtest$1.loggerService.info(ADD_OPTIMIZER_METHOD_NAME, {
14203
14203
  optimizerSchema,
14204
14204
  });
14205
- bt.optimizerValidationService.addOptimizer(optimizerSchema.optimizerName, optimizerSchema);
14206
- bt.optimizerSchemaService.register(optimizerSchema.optimizerName, optimizerSchema);
14205
+ backtest$1.optimizerValidationService.addOptimizer(optimizerSchema.optimizerName, optimizerSchema);
14206
+ backtest$1.optimizerSchemaService.register(optimizerSchema.optimizerName, optimizerSchema);
14207
14207
  }
14208
14208
 
14209
14209
  const LIST_EXCHANGES_METHOD_NAME = "list.listExchanges";
@@ -14239,8 +14239,8 @@ const LIST_OPTIMIZERS_METHOD_NAME = "list.listOptimizers";
14239
14239
  * ```
14240
14240
  */
14241
14241
  async function listExchanges() {
14242
- bt.loggerService.log(LIST_EXCHANGES_METHOD_NAME);
14243
- return await bt.exchangeValidationService.list();
14242
+ backtest$1.loggerService.log(LIST_EXCHANGES_METHOD_NAME);
14243
+ return await backtest$1.exchangeValidationService.list();
14244
14244
  }
14245
14245
  /**
14246
14246
  * Returns a list of all registered strategy schemas.
@@ -14273,8 +14273,8 @@ async function listExchanges() {
14273
14273
  * ```
14274
14274
  */
14275
14275
  async function listStrategies() {
14276
- bt.loggerService.log(LIST_STRATEGIES_METHOD_NAME);
14277
- return await bt.strategyValidationService.list();
14276
+ backtest$1.loggerService.log(LIST_STRATEGIES_METHOD_NAME);
14277
+ return await backtest$1.strategyValidationService.list();
14278
14278
  }
14279
14279
  /**
14280
14280
  * Returns a list of all registered frame schemas.
@@ -14302,8 +14302,8 @@ async function listStrategies() {
14302
14302
  * ```
14303
14303
  */
14304
14304
  async function listFrames() {
14305
- bt.loggerService.log(LIST_FRAMES_METHOD_NAME);
14306
- return await bt.frameValidationService.list();
14305
+ backtest$1.loggerService.log(LIST_FRAMES_METHOD_NAME);
14306
+ return await backtest$1.frameValidationService.list();
14307
14307
  }
14308
14308
  /**
14309
14309
  * Returns a list of all registered walker schemas.
@@ -14332,8 +14332,8 @@ async function listFrames() {
14332
14332
  * ```
14333
14333
  */
14334
14334
  async function listWalkers() {
14335
- bt.loggerService.log(LIST_WALKERS_METHOD_NAME);
14336
- return await bt.walkerValidationService.list();
14335
+ backtest$1.loggerService.log(LIST_WALKERS_METHOD_NAME);
14336
+ return await backtest$1.walkerValidationService.list();
14337
14337
  }
14338
14338
  /**
14339
14339
  * Returns a list of all registered sizing schemas.
@@ -14371,8 +14371,8 @@ async function listWalkers() {
14371
14371
  * ```
14372
14372
  */
14373
14373
  async function listSizings() {
14374
- bt.loggerService.log(LIST_SIZINGS_METHOD_NAME);
14375
- return await bt.sizingValidationService.list();
14374
+ backtest$1.loggerService.log(LIST_SIZINGS_METHOD_NAME);
14375
+ return await backtest$1.sizingValidationService.list();
14376
14376
  }
14377
14377
  /**
14378
14378
  * Returns a list of all registered risk schemas.
@@ -14407,8 +14407,8 @@ async function listSizings() {
14407
14407
  * ```
14408
14408
  */
14409
14409
  async function listRisks() {
14410
- bt.loggerService.log(LIST_RISKS_METHOD_NAME);
14411
- return await bt.riskValidationService.list();
14410
+ backtest$1.loggerService.log(LIST_RISKS_METHOD_NAME);
14411
+ return await backtest$1.riskValidationService.list();
14412
14412
  }
14413
14413
  /**
14414
14414
  * Returns a list of all registered optimizer schemas.
@@ -14447,8 +14447,8 @@ async function listRisks() {
14447
14447
  * ```
14448
14448
  */
14449
14449
  async function listOptimizers() {
14450
- bt.loggerService.log(LIST_OPTIMIZERS_METHOD_NAME);
14451
- return await bt.optimizerValidationService.list();
14450
+ backtest$1.loggerService.log(LIST_OPTIMIZERS_METHOD_NAME);
14451
+ return await backtest$1.optimizerValidationService.list();
14452
14452
  }
14453
14453
 
14454
14454
  const LISTEN_SIGNAL_METHOD_NAME = "event.listenSignal";
@@ -14505,7 +14505,7 @@ const LISTEN_RISK_ONCE_METHOD_NAME = "event.listenRiskOnce";
14505
14505
  * ```
14506
14506
  */
14507
14507
  function listenSignal(fn) {
14508
- bt.loggerService.log(LISTEN_SIGNAL_METHOD_NAME);
14508
+ backtest$1.loggerService.log(LISTEN_SIGNAL_METHOD_NAME);
14509
14509
  return signalEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
14510
14510
  }
14511
14511
  /**
@@ -14541,7 +14541,7 @@ function listenSignal(fn) {
14541
14541
  * ```
14542
14542
  */
14543
14543
  function listenSignalOnce(filterFn, fn) {
14544
- bt.loggerService.log(LISTEN_SIGNAL_ONCE_METHOD_NAME);
14544
+ backtest$1.loggerService.log(LISTEN_SIGNAL_ONCE_METHOD_NAME);
14545
14545
  return signalEmitter.filter(filterFn).once(fn);
14546
14546
  }
14547
14547
  /**
@@ -14565,7 +14565,7 @@ function listenSignalOnce(filterFn, fn) {
14565
14565
  * ```
14566
14566
  */
14567
14567
  function listenSignalLive(fn) {
14568
- bt.loggerService.log(LISTEN_SIGNAL_LIVE_METHOD_NAME);
14568
+ backtest$1.loggerService.log(LISTEN_SIGNAL_LIVE_METHOD_NAME);
14569
14569
  return signalLiveEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
14570
14570
  }
14571
14571
  /**
@@ -14590,7 +14590,7 @@ function listenSignalLive(fn) {
14590
14590
  * ```
14591
14591
  */
14592
14592
  function listenSignalLiveOnce(filterFn, fn) {
14593
- bt.loggerService.log(LISTEN_SIGNAL_LIVE_ONCE_METHOD_NAME);
14593
+ backtest$1.loggerService.log(LISTEN_SIGNAL_LIVE_ONCE_METHOD_NAME);
14594
14594
  return signalLiveEmitter.filter(filterFn).once(fn);
14595
14595
  }
14596
14596
  /**
@@ -14614,7 +14614,7 @@ function listenSignalLiveOnce(filterFn, fn) {
14614
14614
  * ```
14615
14615
  */
14616
14616
  function listenSignalBacktest(fn) {
14617
- bt.loggerService.log(LISTEN_SIGNAL_BACKTEST_METHOD_NAME);
14617
+ backtest$1.loggerService.log(LISTEN_SIGNAL_BACKTEST_METHOD_NAME);
14618
14618
  return signalBacktestEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
14619
14619
  }
14620
14620
  /**
@@ -14639,7 +14639,7 @@ function listenSignalBacktest(fn) {
14639
14639
  * ```
14640
14640
  */
14641
14641
  function listenSignalBacktestOnce(filterFn, fn) {
14642
- bt.loggerService.log(LISTEN_SIGNAL_BACKTEST_ONCE_METHOD_NAME);
14642
+ backtest$1.loggerService.log(LISTEN_SIGNAL_BACKTEST_ONCE_METHOD_NAME);
14643
14643
  return signalBacktestEmitter.filter(filterFn).once(fn);
14644
14644
  }
14645
14645
  /**
@@ -14667,7 +14667,7 @@ function listenSignalBacktestOnce(filterFn, fn) {
14667
14667
  * ```
14668
14668
  */
14669
14669
  function listenError(fn) {
14670
- bt.loggerService.log(LISTEN_ERROR_METHOD_NAME);
14670
+ backtest$1.loggerService.log(LISTEN_ERROR_METHOD_NAME);
14671
14671
  return errorEmitter.subscribe(functoolsKit.queued(async (error) => fn(error)));
14672
14672
  }
14673
14673
  /**
@@ -14695,7 +14695,7 @@ function listenError(fn) {
14695
14695
  * ```
14696
14696
  */
14697
14697
  function listenExit(fn) {
14698
- bt.loggerService.log(LISTEN_EXIT_METHOD_NAME);
14698
+ backtest$1.loggerService.log(LISTEN_EXIT_METHOD_NAME);
14699
14699
  return exitEmitter.subscribe(functoolsKit.queued(async (error) => fn(error)));
14700
14700
  }
14701
14701
  /**
@@ -14726,7 +14726,7 @@ function listenExit(fn) {
14726
14726
  * ```
14727
14727
  */
14728
14728
  function listenDoneLive(fn) {
14729
- bt.loggerService.log(LISTEN_DONE_LIVE_METHOD_NAME);
14729
+ backtest$1.loggerService.log(LISTEN_DONE_LIVE_METHOD_NAME);
14730
14730
  return doneLiveSubject.subscribe(functoolsKit.queued(async (event) => fn(event)));
14731
14731
  }
14732
14732
  /**
@@ -14756,7 +14756,7 @@ function listenDoneLive(fn) {
14756
14756
  * ```
14757
14757
  */
14758
14758
  function listenDoneLiveOnce(filterFn, fn) {
14759
- bt.loggerService.log(LISTEN_DONE_LIVE_ONCE_METHOD_NAME);
14759
+ backtest$1.loggerService.log(LISTEN_DONE_LIVE_ONCE_METHOD_NAME);
14760
14760
  return doneLiveSubject.filter(filterFn).once(fn);
14761
14761
  }
14762
14762
  /**
@@ -14788,7 +14788,7 @@ function listenDoneLiveOnce(filterFn, fn) {
14788
14788
  * ```
14789
14789
  */
14790
14790
  function listenDoneBacktest(fn) {
14791
- bt.loggerService.log(LISTEN_DONE_BACKTEST_METHOD_NAME);
14791
+ backtest$1.loggerService.log(LISTEN_DONE_BACKTEST_METHOD_NAME);
14792
14792
  return doneBacktestSubject.subscribe(functoolsKit.queued(async (event) => fn(event)));
14793
14793
  }
14794
14794
  /**
@@ -14819,7 +14819,7 @@ function listenDoneBacktest(fn) {
14819
14819
  * ```
14820
14820
  */
14821
14821
  function listenDoneBacktestOnce(filterFn, fn) {
14822
- bt.loggerService.log(LISTEN_DONE_BACKTEST_ONCE_METHOD_NAME);
14822
+ backtest$1.loggerService.log(LISTEN_DONE_BACKTEST_ONCE_METHOD_NAME);
14823
14823
  return doneBacktestSubject.filter(filterFn).once(fn);
14824
14824
  }
14825
14825
  /**
@@ -14849,7 +14849,7 @@ function listenDoneBacktestOnce(filterFn, fn) {
14849
14849
  * ```
14850
14850
  */
14851
14851
  function listenDoneWalker(fn) {
14852
- bt.loggerService.log(LISTEN_DONE_WALKER_METHOD_NAME);
14852
+ backtest$1.loggerService.log(LISTEN_DONE_WALKER_METHOD_NAME);
14853
14853
  return doneWalkerSubject.subscribe(functoolsKit.queued(async (event) => fn(event)));
14854
14854
  }
14855
14855
  /**
@@ -14878,7 +14878,7 @@ function listenDoneWalker(fn) {
14878
14878
  * ```
14879
14879
  */
14880
14880
  function listenDoneWalkerOnce(filterFn, fn) {
14881
- bt.loggerService.log(LISTEN_DONE_WALKER_ONCE_METHOD_NAME);
14881
+ backtest$1.loggerService.log(LISTEN_DONE_WALKER_ONCE_METHOD_NAME);
14882
14882
  return doneWalkerSubject.filter(filterFn).once(fn);
14883
14883
  }
14884
14884
  /**
@@ -14912,7 +14912,7 @@ function listenDoneWalkerOnce(filterFn, fn) {
14912
14912
  * ```
14913
14913
  */
14914
14914
  function listenBacktestProgress(fn) {
14915
- bt.loggerService.log(LISTEN_PROGRESS_METHOD_NAME);
14915
+ backtest$1.loggerService.log(LISTEN_PROGRESS_METHOD_NAME);
14916
14916
  return progressBacktestEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
14917
14917
  }
14918
14918
  /**
@@ -14946,7 +14946,7 @@ function listenBacktestProgress(fn) {
14946
14946
  * ```
14947
14947
  */
14948
14948
  function listenWalkerProgress(fn) {
14949
- bt.loggerService.log(LISTEN_PROGRESS_WALKER_METHOD_NAME);
14949
+ backtest$1.loggerService.log(LISTEN_PROGRESS_WALKER_METHOD_NAME);
14950
14950
  return progressWalkerEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
14951
14951
  }
14952
14952
  /**
@@ -14974,7 +14974,7 @@ function listenWalkerProgress(fn) {
14974
14974
  * ```
14975
14975
  */
14976
14976
  function listenOptimizerProgress(fn) {
14977
- bt.loggerService.log(LISTEN_PROGRESS_OPTIMIZER_METHOD_NAME);
14977
+ backtest$1.loggerService.log(LISTEN_PROGRESS_OPTIMIZER_METHOD_NAME);
14978
14978
  return progressOptimizerEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
14979
14979
  }
14980
14980
  /**
@@ -15010,7 +15010,7 @@ function listenOptimizerProgress(fn) {
15010
15010
  * ```
15011
15011
  */
15012
15012
  function listenPerformance(fn) {
15013
- bt.loggerService.log(LISTEN_PERFORMANCE_METHOD_NAME);
15013
+ backtest$1.loggerService.log(LISTEN_PERFORMANCE_METHOD_NAME);
15014
15014
  return performanceEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
15015
15015
  }
15016
15016
  /**
@@ -15044,7 +15044,7 @@ function listenPerformance(fn) {
15044
15044
  * ```
15045
15045
  */
15046
15046
  function listenWalker(fn) {
15047
- bt.loggerService.log(LISTEN_WALKER_METHOD_NAME);
15047
+ backtest$1.loggerService.log(LISTEN_WALKER_METHOD_NAME);
15048
15048
  return walkerEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
15049
15049
  }
15050
15050
  /**
@@ -15087,7 +15087,7 @@ function listenWalker(fn) {
15087
15087
  * ```
15088
15088
  */
15089
15089
  function listenWalkerOnce(filterFn, fn) {
15090
- bt.loggerService.log(LISTEN_WALKER_ONCE_METHOD_NAME);
15090
+ backtest$1.loggerService.log(LISTEN_WALKER_ONCE_METHOD_NAME);
15091
15091
  return walkerEmitter.filter(filterFn).once(fn);
15092
15092
  }
15093
15093
  /**
@@ -15122,7 +15122,7 @@ function listenWalkerOnce(filterFn, fn) {
15122
15122
  * ```
15123
15123
  */
15124
15124
  function listenWalkerComplete(fn) {
15125
- bt.loggerService.log(LISTEN_WALKER_COMPLETE_METHOD_NAME);
15125
+ backtest$1.loggerService.log(LISTEN_WALKER_COMPLETE_METHOD_NAME);
15126
15126
  return walkerCompleteSubject.subscribe(functoolsKit.queued(async (event) => fn(event)));
15127
15127
  }
15128
15128
  /**
@@ -15150,7 +15150,7 @@ function listenWalkerComplete(fn) {
15150
15150
  * ```
15151
15151
  */
15152
15152
  function listenValidation(fn) {
15153
- bt.loggerService.log(LISTEN_VALIDATION_METHOD_NAME);
15153
+ backtest$1.loggerService.log(LISTEN_VALIDATION_METHOD_NAME);
15154
15154
  return validationSubject.subscribe(functoolsKit.queued(async (error) => fn(error)));
15155
15155
  }
15156
15156
  /**
@@ -15178,7 +15178,7 @@ function listenValidation(fn) {
15178
15178
  * ```
15179
15179
  */
15180
15180
  function listenPartialProfit(fn) {
15181
- bt.loggerService.log(LISTEN_PARTIAL_PROFIT_METHOD_NAME);
15181
+ backtest$1.loggerService.log(LISTEN_PARTIAL_PROFIT_METHOD_NAME);
15182
15182
  return partialProfitSubject.subscribe(functoolsKit.queued(async (event) => fn(event)));
15183
15183
  }
15184
15184
  /**
@@ -15212,7 +15212,7 @@ function listenPartialProfit(fn) {
15212
15212
  * ```
15213
15213
  */
15214
15214
  function listenPartialProfitOnce(filterFn, fn) {
15215
- bt.loggerService.log(LISTEN_PARTIAL_PROFIT_ONCE_METHOD_NAME);
15215
+ backtest$1.loggerService.log(LISTEN_PARTIAL_PROFIT_ONCE_METHOD_NAME);
15216
15216
  return partialProfitSubject.filter(filterFn).once(fn);
15217
15217
  }
15218
15218
  /**
@@ -15240,7 +15240,7 @@ function listenPartialProfitOnce(filterFn, fn) {
15240
15240
  * ```
15241
15241
  */
15242
15242
  function listenPartialLoss(fn) {
15243
- bt.loggerService.log(LISTEN_PARTIAL_LOSS_METHOD_NAME);
15243
+ backtest$1.loggerService.log(LISTEN_PARTIAL_LOSS_METHOD_NAME);
15244
15244
  return partialLossSubject.subscribe(functoolsKit.queued(async (event) => fn(event)));
15245
15245
  }
15246
15246
  /**
@@ -15274,7 +15274,7 @@ function listenPartialLoss(fn) {
15274
15274
  * ```
15275
15275
  */
15276
15276
  function listenPartialLossOnce(filterFn, fn) {
15277
- bt.loggerService.log(LISTEN_PARTIAL_LOSS_ONCE_METHOD_NAME);
15277
+ backtest$1.loggerService.log(LISTEN_PARTIAL_LOSS_ONCE_METHOD_NAME);
15278
15278
  return partialLossSubject.filter(filterFn).once(fn);
15279
15279
  }
15280
15280
  /**
@@ -15306,7 +15306,7 @@ function listenPartialLossOnce(filterFn, fn) {
15306
15306
  * ```
15307
15307
  */
15308
15308
  function listenRisk(fn) {
15309
- bt.loggerService.log(LISTEN_RISK_METHOD_NAME);
15309
+ backtest$1.loggerService.log(LISTEN_RISK_METHOD_NAME);
15310
15310
  return riskSubject.subscribe(functoolsKit.queued(async (event) => fn(event)));
15311
15311
  }
15312
15312
  /**
@@ -15343,7 +15343,7 @@ function listenRisk(fn) {
15343
15343
  * ```
15344
15344
  */
15345
15345
  function listenRiskOnce(filterFn, fn) {
15346
- bt.loggerService.log(LISTEN_RISK_ONCE_METHOD_NAME);
15346
+ backtest$1.loggerService.log(LISTEN_RISK_ONCE_METHOD_NAME);
15347
15347
  return riskSubject.filter(filterFn).once(fn);
15348
15348
  }
15349
15349
 
@@ -15353,6 +15353,31 @@ const FORMAT_PRICE_METHOD_NAME = "exchange.formatPrice";
15353
15353
  const FORMAT_QUANTITY_METHOD_NAME = "exchange.formatQuantity";
15354
15354
  const GET_DATE_METHOD_NAME = "exchange.getDate";
15355
15355
  const GET_MODE_METHOD_NAME = "exchange.getMode";
15356
+ const HAS_TRADE_CONTEXT_METHOD_NAME = "exchange.hasTradeContext";
15357
+ /**
15358
+ * Checks if trade context is active (execution and method contexts).
15359
+ *
15360
+ * Returns true when both contexts are active, which is required for calling
15361
+ * exchange functions like getCandles, getAveragePrice, formatPrice, formatQuantity,
15362
+ * getDate, and getMode.
15363
+ *
15364
+ * @returns true if trade context is active, false otherwise
15365
+ *
15366
+ * @example
15367
+ * ```typescript
15368
+ * import { hasTradeContext, getCandles } from "backtest-kit";
15369
+ *
15370
+ * if (hasTradeContext()) {
15371
+ * const candles = await getCandles("BTCUSDT", "1m", 100);
15372
+ * } else {
15373
+ * console.log("Trade context not active");
15374
+ * }
15375
+ * ```
15376
+ */
15377
+ function hasTradeContext() {
15378
+ backtest$1.loggerService.info(HAS_TRADE_CONTEXT_METHOD_NAME);
15379
+ return ExecutionContextService.hasContext() && MethodContextService.hasContext();
15380
+ }
15356
15381
  /**
15357
15382
  * Fetches historical candle data from the registered exchange.
15358
15383
  *
@@ -15371,12 +15396,18 @@ const GET_MODE_METHOD_NAME = "exchange.getMode";
15371
15396
  * ```
15372
15397
  */
15373
15398
  async function getCandles(symbol, interval, limit) {
15374
- bt.loggerService.info(GET_CANDLES_METHOD_NAME, {
15399
+ backtest$1.loggerService.info(GET_CANDLES_METHOD_NAME, {
15375
15400
  symbol,
15376
15401
  interval,
15377
15402
  limit,
15378
15403
  });
15379
- return await bt.exchangeConnectionService.getCandles(symbol, interval, limit);
15404
+ if (!ExecutionContextService.hasContext()) {
15405
+ throw new Error("getCandles requires an execution context");
15406
+ }
15407
+ if (!MethodContextService.hasContext()) {
15408
+ throw new Error("getCandles requires a method context");
15409
+ }
15410
+ return await backtest$1.exchangeConnectionService.getCandles(symbol, interval, limit);
15380
15411
  }
15381
15412
  /**
15382
15413
  * Calculates VWAP (Volume Weighted Average Price) for a symbol.
@@ -15397,10 +15428,16 @@ async function getCandles(symbol, interval, limit) {
15397
15428
  * ```
15398
15429
  */
15399
15430
  async function getAveragePrice(symbol) {
15400
- bt.loggerService.info(GET_AVERAGE_PRICE_METHOD_NAME, {
15431
+ backtest$1.loggerService.info(GET_AVERAGE_PRICE_METHOD_NAME, {
15401
15432
  symbol,
15402
15433
  });
15403
- return await bt.exchangeConnectionService.getAveragePrice(symbol);
15434
+ if (!ExecutionContextService.hasContext()) {
15435
+ throw new Error("getAveragePrice requires an execution context");
15436
+ }
15437
+ if (!MethodContextService.hasContext()) {
15438
+ throw new Error("getAveragePrice requires a method context");
15439
+ }
15440
+ return await backtest$1.exchangeConnectionService.getAveragePrice(symbol);
15404
15441
  }
15405
15442
  /**
15406
15443
  * Formats a price value according to exchange rules.
@@ -15418,11 +15455,14 @@ async function getAveragePrice(symbol) {
15418
15455
  * ```
15419
15456
  */
15420
15457
  async function formatPrice(symbol, price) {
15421
- bt.loggerService.info(FORMAT_PRICE_METHOD_NAME, {
15458
+ backtest$1.loggerService.info(FORMAT_PRICE_METHOD_NAME, {
15422
15459
  symbol,
15423
15460
  price,
15424
15461
  });
15425
- return await bt.exchangeConnectionService.formatPrice(symbol, price);
15462
+ if (!MethodContextService.hasContext()) {
15463
+ throw new Error("formatPrice requires a method context");
15464
+ }
15465
+ return await backtest$1.exchangeConnectionService.formatPrice(symbol, price);
15426
15466
  }
15427
15467
  /**
15428
15468
  * Formats a quantity value according to exchange rules.
@@ -15440,11 +15480,14 @@ async function formatPrice(symbol, price) {
15440
15480
  * ```
15441
15481
  */
15442
15482
  async function formatQuantity(symbol, quantity) {
15443
- bt.loggerService.info(FORMAT_QUANTITY_METHOD_NAME, {
15483
+ backtest$1.loggerService.info(FORMAT_QUANTITY_METHOD_NAME, {
15444
15484
  symbol,
15445
15485
  quantity,
15446
15486
  });
15447
- return await bt.exchangeConnectionService.formatQuantity(symbol, quantity);
15487
+ if (!MethodContextService.hasContext()) {
15488
+ throw new Error("formatQuantity requires a method context");
15489
+ }
15490
+ return await backtest$1.exchangeConnectionService.formatQuantity(symbol, quantity);
15448
15491
  }
15449
15492
  /**
15450
15493
  * Gets the current date from execution context.
@@ -15461,8 +15504,11 @@ async function formatQuantity(symbol, quantity) {
15461
15504
  * ```
15462
15505
  */
15463
15506
  async function getDate() {
15464
- bt.loggerService.info(GET_DATE_METHOD_NAME);
15465
- const { when } = bt.executionContextService.context;
15507
+ backtest$1.loggerService.info(GET_DATE_METHOD_NAME);
15508
+ if (!ExecutionContextService.hasContext()) {
15509
+ throw new Error("getDate requires an execution context");
15510
+ }
15511
+ const { when } = backtest$1.executionContextService.context;
15466
15512
  return new Date(when.getTime());
15467
15513
  }
15468
15514
  /**
@@ -15481,9 +15527,12 @@ async function getDate() {
15481
15527
  * ```
15482
15528
  */
15483
15529
  async function getMode() {
15484
- bt.loggerService.info(GET_MODE_METHOD_NAME);
15485
- const { backtest: bt$1 } = bt.executionContextService.context;
15486
- return bt$1 ? "backtest" : "live";
15530
+ backtest$1.loggerService.info(GET_MODE_METHOD_NAME);
15531
+ if (!ExecutionContextService.hasContext()) {
15532
+ throw new Error("getMode requires an execution context");
15533
+ }
15534
+ const { backtest: bt } = backtest$1.executionContextService.context;
15535
+ return bt ? "backtest" : "live";
15487
15536
  }
15488
15537
 
15489
15538
  const DUMP_SIGNAL_METHOD_NAME = "dump.dumpSignal";
@@ -15554,13 +15603,13 @@ const DUMP_SIGNAL_METHOD_NAME = "dump.dumpSignal";
15554
15603
  * ```
15555
15604
  */
15556
15605
  async function dumpSignal(signalId, history, signal, outputDir = "./dump/strategy") {
15557
- bt.loggerService.info(DUMP_SIGNAL_METHOD_NAME, {
15606
+ backtest$1.loggerService.info(DUMP_SIGNAL_METHOD_NAME, {
15558
15607
  signalId,
15559
15608
  history,
15560
15609
  signal,
15561
15610
  outputDir,
15562
15611
  });
15563
- return await bt.outlineMarkdownService.dumpSignal(signalId, history, signal, outputDir);
15612
+ return await backtest$1.outlineMarkdownService.dumpSignal(signalId, history, signal, outputDir);
15564
15613
  }
15565
15614
 
15566
15615
  const BACKTEST_METHOD_NAME_RUN = "BacktestUtils.run";
@@ -15647,7 +15696,7 @@ class BacktestInstance {
15647
15696
  * @internal
15648
15697
  */
15649
15698
  this.task = functoolsKit.singlerun(async (symbol, context) => {
15650
- bt.loggerService.info(BACKTEST_METHOD_NAME_TASK, {
15699
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_TASK, {
15651
15700
  symbol,
15652
15701
  context,
15653
15702
  });
@@ -15666,7 +15715,7 @@ class BacktestInstance {
15666
15715
  * ```
15667
15716
  */
15668
15717
  this.getStatus = async () => {
15669
- bt.loggerService.info(BACKTEST_METHOD_NAME_GET_STATUS);
15718
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_GET_STATUS);
15670
15719
  return {
15671
15720
  id: this.id,
15672
15721
  symbol: this.symbol,
@@ -15682,27 +15731,27 @@ class BacktestInstance {
15682
15731
  * @returns Async generator yielding closed signals with PNL
15683
15732
  */
15684
15733
  this.run = (symbol, context) => {
15685
- bt.loggerService.info(BACKTEST_METHOD_NAME_RUN, {
15734
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_RUN, {
15686
15735
  symbol,
15687
15736
  context,
15688
15737
  });
15689
15738
  {
15690
- bt.backtestMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15691
- bt.liveMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15692
- bt.scheduleMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15693
- bt.performanceMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15694
- bt.partialMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15695
- bt.riskMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15739
+ backtest$1.backtestMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15740
+ backtest$1.liveMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15741
+ backtest$1.scheduleMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15742
+ backtest$1.performanceMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15743
+ backtest$1.partialMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15744
+ backtest$1.riskMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15696
15745
  }
15697
15746
  {
15698
- bt.strategyCoreService.clear(true, { symbol, strategyName: context.strategyName });
15747
+ backtest$1.strategyCoreService.clear(true, { symbol, strategyName: context.strategyName });
15699
15748
  }
15700
15749
  {
15701
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
15702
- riskName && bt.riskGlobalService.clear(true, riskName);
15703
- riskList && riskList.forEach((riskName) => bt.riskGlobalService.clear(true, riskName));
15750
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
15751
+ riskName && backtest$1.riskGlobalService.clear(true, riskName);
15752
+ riskList && riskList.forEach((riskName) => backtest$1.riskGlobalService.clear(true, riskName));
15704
15753
  }
15705
- return bt.backtestCommandService.run(symbol, context);
15754
+ return backtest$1.backtestCommandService.run(symbol, context);
15706
15755
  };
15707
15756
  /**
15708
15757
  * Runs backtest in background without yielding results.
@@ -15725,7 +15774,7 @@ class BacktestInstance {
15725
15774
  * ```
15726
15775
  */
15727
15776
  this.background = (symbol, context) => {
15728
- bt.loggerService.info(BACKTEST_METHOD_NAME_BACKGROUND, {
15777
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_BACKGROUND, {
15729
15778
  symbol,
15730
15779
  context,
15731
15780
  });
@@ -15740,8 +15789,8 @@ class BacktestInstance {
15740
15789
  }
15741
15790
  this.task(symbol, context).catch((error) => exitEmitter.next(new Error(functoolsKit.getErrorMessage(error))));
15742
15791
  return () => {
15743
- bt.strategyCoreService.stop(true, { symbol, strategyName: context.strategyName });
15744
- bt.strategyCoreService
15792
+ backtest$1.strategyCoreService.stop(true, { symbol, strategyName: context.strategyName });
15793
+ backtest$1.strategyCoreService
15745
15794
  .getPendingSignal(true, symbol, context.strategyName)
15746
15795
  .then(async (pendingSignal) => {
15747
15796
  if (pendingSignal) {
@@ -15778,11 +15827,11 @@ class BacktestInstance {
15778
15827
  * ```
15779
15828
  */
15780
15829
  this.stop = async (symbol, strategyName) => {
15781
- bt.loggerService.info(BACKTEST_METHOD_NAME_STOP, {
15830
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_STOP, {
15782
15831
  symbol,
15783
15832
  strategyName,
15784
15833
  });
15785
- await bt.strategyCoreService.stop(true, { symbol, strategyName });
15834
+ await backtest$1.strategyCoreService.stop(true, { symbol, strategyName });
15786
15835
  };
15787
15836
  /**
15788
15837
  * Gets statistical data from all closed signals for a symbol-strategy pair.
@@ -15799,11 +15848,11 @@ class BacktestInstance {
15799
15848
  * ```
15800
15849
  */
15801
15850
  this.getData = async (symbol, strategyName) => {
15802
- bt.loggerService.info("BacktestUtils.getData", {
15851
+ backtest$1.loggerService.info("BacktestUtils.getData", {
15803
15852
  symbol,
15804
15853
  strategyName,
15805
15854
  });
15806
- return await bt.backtestMarkdownService.getData(symbol, strategyName, true);
15855
+ return await backtest$1.backtestMarkdownService.getData(symbol, strategyName, true);
15807
15856
  };
15808
15857
  /**
15809
15858
  * Generates markdown report with all closed signals for a symbol-strategy pair.
@@ -15821,11 +15870,11 @@ class BacktestInstance {
15821
15870
  * ```
15822
15871
  */
15823
15872
  this.getReport = async (symbol, strategyName, columns) => {
15824
- bt.loggerService.info(BACKTEST_METHOD_NAME_GET_REPORT, {
15873
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_GET_REPORT, {
15825
15874
  symbol,
15826
15875
  strategyName,
15827
15876
  });
15828
- return await bt.backtestMarkdownService.getReport(symbol, strategyName, true, columns);
15877
+ return await backtest$1.backtestMarkdownService.getReport(symbol, strategyName, true, columns);
15829
15878
  };
15830
15879
  /**
15831
15880
  * Saves strategy report to disk.
@@ -15846,12 +15895,12 @@ class BacktestInstance {
15846
15895
  * ```
15847
15896
  */
15848
15897
  this.dump = async (symbol, strategyName, path, columns) => {
15849
- bt.loggerService.info(BACKTEST_METHOD_NAME_DUMP, {
15898
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_DUMP, {
15850
15899
  symbol,
15851
15900
  strategyName,
15852
15901
  path,
15853
15902
  });
15854
- await bt.backtestMarkdownService.dump(symbol, strategyName, true, path, columns);
15903
+ await backtest$1.backtestMarkdownService.dump(symbol, strategyName, true, path, columns);
15855
15904
  };
15856
15905
  }
15857
15906
  }
@@ -15890,14 +15939,14 @@ class BacktestUtils {
15890
15939
  */
15891
15940
  this.run = (symbol, context) => {
15892
15941
  {
15893
- bt.strategyValidationService.validate(context.strategyName, BACKTEST_METHOD_NAME_RUN);
15894
- bt.exchangeValidationService.validate(context.exchangeName, BACKTEST_METHOD_NAME_RUN);
15895
- bt.frameValidationService.validate(context.frameName, BACKTEST_METHOD_NAME_RUN);
15942
+ backtest$1.strategyValidationService.validate(context.strategyName, BACKTEST_METHOD_NAME_RUN);
15943
+ backtest$1.exchangeValidationService.validate(context.exchangeName, BACKTEST_METHOD_NAME_RUN);
15944
+ backtest$1.frameValidationService.validate(context.frameName, BACKTEST_METHOD_NAME_RUN);
15896
15945
  }
15897
15946
  {
15898
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
15899
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_RUN);
15900
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_RUN));
15947
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
15948
+ riskName && backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_RUN);
15949
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_RUN));
15901
15950
  }
15902
15951
  const instance = this._getInstance(symbol, context.strategyName);
15903
15952
  return instance.run(symbol, context);
@@ -15924,13 +15973,13 @@ class BacktestUtils {
15924
15973
  * ```
15925
15974
  */
15926
15975
  this.background = (symbol, context) => {
15927
- bt.strategyValidationService.validate(context.strategyName, BACKTEST_METHOD_NAME_BACKGROUND);
15928
- bt.exchangeValidationService.validate(context.exchangeName, BACKTEST_METHOD_NAME_BACKGROUND);
15929
- bt.frameValidationService.validate(context.frameName, BACKTEST_METHOD_NAME_BACKGROUND);
15976
+ backtest$1.strategyValidationService.validate(context.strategyName, BACKTEST_METHOD_NAME_BACKGROUND);
15977
+ backtest$1.exchangeValidationService.validate(context.exchangeName, BACKTEST_METHOD_NAME_BACKGROUND);
15978
+ backtest$1.frameValidationService.validate(context.frameName, BACKTEST_METHOD_NAME_BACKGROUND);
15930
15979
  {
15931
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
15932
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_BACKGROUND);
15933
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_BACKGROUND));
15980
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
15981
+ riskName && backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_BACKGROUND);
15982
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_BACKGROUND));
15934
15983
  }
15935
15984
  const instance = this._getInstance(symbol, context.strategyName);
15936
15985
  return instance.background(symbol, context);
@@ -15953,11 +16002,11 @@ class BacktestUtils {
15953
16002
  * ```
15954
16003
  */
15955
16004
  this.stop = async (symbol, strategyName) => {
15956
- bt.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_STOP);
16005
+ backtest$1.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_STOP);
15957
16006
  {
15958
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
15959
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_STOP);
15960
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_STOP));
16007
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16008
+ riskName && backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_STOP);
16009
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_STOP));
15961
16010
  }
15962
16011
  const instance = this._getInstance(symbol, strategyName);
15963
16012
  return await instance.stop(symbol, strategyName);
@@ -15976,11 +16025,11 @@ class BacktestUtils {
15976
16025
  * ```
15977
16026
  */
15978
16027
  this.getData = async (symbol, strategyName) => {
15979
- bt.strategyValidationService.validate(strategyName, "BacktestUtils.getData");
16028
+ backtest$1.strategyValidationService.validate(strategyName, "BacktestUtils.getData");
15980
16029
  {
15981
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
15982
- riskName && bt.riskValidationService.validate(riskName, "BacktestUtils.getData");
15983
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, "BacktestUtils.getData"));
16030
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16031
+ riskName && backtest$1.riskValidationService.validate(riskName, "BacktestUtils.getData");
16032
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, "BacktestUtils.getData"));
15984
16033
  }
15985
16034
  const instance = this._getInstance(symbol, strategyName);
15986
16035
  return await instance.getData(symbol, strategyName);
@@ -16000,11 +16049,11 @@ class BacktestUtils {
16000
16049
  * ```
16001
16050
  */
16002
16051
  this.getReport = async (symbol, strategyName, columns) => {
16003
- bt.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_GET_REPORT);
16052
+ backtest$1.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_GET_REPORT);
16004
16053
  {
16005
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16006
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_GET_REPORT);
16007
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_GET_REPORT));
16054
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16055
+ riskName && backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_GET_REPORT);
16056
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_GET_REPORT));
16008
16057
  }
16009
16058
  const instance = this._getInstance(symbol, strategyName);
16010
16059
  return await instance.getReport(symbol, strategyName, columns);
@@ -16027,11 +16076,11 @@ class BacktestUtils {
16027
16076
  * ```
16028
16077
  */
16029
16078
  this.dump = async (symbol, strategyName, path, columns) => {
16030
- bt.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_DUMP);
16079
+ backtest$1.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_DUMP);
16031
16080
  {
16032
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16033
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_DUMP);
16034
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_DUMP));
16081
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16082
+ riskName && backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_DUMP);
16083
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_DUMP));
16035
16084
  }
16036
16085
  const instance = this._getInstance(symbol, strategyName);
16037
16086
  return await instance.dump(symbol, strategyName, path, columns);
@@ -16161,7 +16210,7 @@ class LiveInstance {
16161
16210
  * @internal
16162
16211
  */
16163
16212
  this.task = functoolsKit.singlerun(async (symbol, context) => {
16164
- bt.loggerService.info(LIVE_METHOD_NAME_TASK, {
16213
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_TASK, {
16165
16214
  symbol,
16166
16215
  context,
16167
16216
  });
@@ -16180,7 +16229,7 @@ class LiveInstance {
16180
16229
  * ```
16181
16230
  */
16182
16231
  this.getStatus = async () => {
16183
- bt.loggerService.info(LIVE_METHOD_NAME_GET_STATUS);
16232
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_GET_STATUS);
16184
16233
  return {
16185
16234
  id: this.id,
16186
16235
  symbol: this.symbol,
@@ -16199,27 +16248,27 @@ class LiveInstance {
16199
16248
  * @returns Infinite async generator yielding opened and closed signals
16200
16249
  */
16201
16250
  this.run = (symbol, context) => {
16202
- bt.loggerService.info(LIVE_METHOD_NAME_RUN, {
16251
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_RUN, {
16203
16252
  symbol,
16204
16253
  context,
16205
16254
  });
16206
16255
  {
16207
- bt.backtestMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16208
- bt.liveMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16209
- bt.scheduleMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16210
- bt.performanceMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16211
- bt.partialMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16212
- bt.riskMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16256
+ backtest$1.backtestMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16257
+ backtest$1.liveMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16258
+ backtest$1.scheduleMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16259
+ backtest$1.performanceMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16260
+ backtest$1.partialMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16261
+ backtest$1.riskMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16213
16262
  }
16214
16263
  {
16215
- bt.strategyCoreService.clear(false, { symbol, strategyName: context.strategyName });
16264
+ backtest$1.strategyCoreService.clear(false, { symbol, strategyName: context.strategyName });
16216
16265
  }
16217
16266
  {
16218
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
16219
- riskName && bt.riskGlobalService.clear(false, riskName);
16220
- riskList && riskList.forEach((riskName) => bt.riskGlobalService.clear(false, riskName));
16267
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
16268
+ riskName && backtest$1.riskGlobalService.clear(false, riskName);
16269
+ riskList && riskList.forEach((riskName) => backtest$1.riskGlobalService.clear(false, riskName));
16221
16270
  }
16222
- return bt.liveCommandService.run(symbol, context);
16271
+ return backtest$1.liveCommandService.run(symbol, context);
16223
16272
  };
16224
16273
  /**
16225
16274
  * Runs live trading in background without yielding results.
@@ -16242,7 +16291,7 @@ class LiveInstance {
16242
16291
  * ```
16243
16292
  */
16244
16293
  this.background = (symbol, context) => {
16245
- bt.loggerService.info(LIVE_METHOD_NAME_BACKGROUND, {
16294
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_BACKGROUND, {
16246
16295
  symbol,
16247
16296
  context,
16248
16297
  });
@@ -16257,8 +16306,8 @@ class LiveInstance {
16257
16306
  }
16258
16307
  this.task(symbol, context).catch((error) => exitEmitter.next(new Error(functoolsKit.getErrorMessage(error))));
16259
16308
  return () => {
16260
- bt.strategyCoreService.stop(false, { symbol, strategyName: context.strategyName });
16261
- bt.strategyCoreService
16309
+ backtest$1.strategyCoreService.stop(false, { symbol, strategyName: context.strategyName });
16310
+ backtest$1.strategyCoreService
16262
16311
  .getPendingSignal(false, symbol, context.strategyName)
16263
16312
  .then(async (pendingSignal) => {
16264
16313
  if (pendingSignal) {
@@ -16295,11 +16344,11 @@ class LiveInstance {
16295
16344
  * ```
16296
16345
  */
16297
16346
  this.stop = async (symbol, strategyName) => {
16298
- bt.loggerService.info(LIVE_METHOD_NAME_STOP, {
16347
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_STOP, {
16299
16348
  symbol,
16300
16349
  strategyName,
16301
16350
  });
16302
- await bt.strategyCoreService.stop(false, { symbol, strategyName });
16351
+ await backtest$1.strategyCoreService.stop(false, { symbol, strategyName });
16303
16352
  };
16304
16353
  /**
16305
16354
  * Gets statistical data from all live trading events for a symbol-strategy pair.
@@ -16316,11 +16365,11 @@ class LiveInstance {
16316
16365
  * ```
16317
16366
  */
16318
16367
  this.getData = async (symbol, strategyName) => {
16319
- bt.loggerService.info("LiveUtils.getData", {
16368
+ backtest$1.loggerService.info("LiveUtils.getData", {
16320
16369
  symbol,
16321
16370
  strategyName,
16322
16371
  });
16323
- return await bt.liveMarkdownService.getData(symbol, strategyName, false);
16372
+ return await backtest$1.liveMarkdownService.getData(symbol, strategyName, false);
16324
16373
  };
16325
16374
  /**
16326
16375
  * Generates markdown report with all events for a symbol-strategy pair.
@@ -16338,11 +16387,11 @@ class LiveInstance {
16338
16387
  * ```
16339
16388
  */
16340
16389
  this.getReport = async (symbol, strategyName, columns) => {
16341
- bt.loggerService.info(LIVE_METHOD_NAME_GET_REPORT, {
16390
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_GET_REPORT, {
16342
16391
  symbol,
16343
16392
  strategyName,
16344
16393
  });
16345
- return await bt.liveMarkdownService.getReport(symbol, strategyName, false, columns);
16394
+ return await backtest$1.liveMarkdownService.getReport(symbol, strategyName, false, columns);
16346
16395
  };
16347
16396
  /**
16348
16397
  * Saves strategy report to disk.
@@ -16363,12 +16412,12 @@ class LiveInstance {
16363
16412
  * ```
16364
16413
  */
16365
16414
  this.dump = async (symbol, strategyName, path, columns) => {
16366
- bt.loggerService.info(LIVE_METHOD_NAME_DUMP, {
16415
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_DUMP, {
16367
16416
  symbol,
16368
16417
  strategyName,
16369
16418
  path,
16370
16419
  });
16371
- await bt.liveMarkdownService.dump(symbol, strategyName, false, path, columns);
16420
+ await backtest$1.liveMarkdownService.dump(symbol, strategyName, false, path, columns);
16372
16421
  };
16373
16422
  }
16374
16423
  }
@@ -16420,13 +16469,13 @@ class LiveUtils {
16420
16469
  */
16421
16470
  this.run = (symbol, context) => {
16422
16471
  {
16423
- bt.strategyValidationService.validate(context.strategyName, LIVE_METHOD_NAME_RUN);
16424
- bt.exchangeValidationService.validate(context.exchangeName, LIVE_METHOD_NAME_RUN);
16472
+ backtest$1.strategyValidationService.validate(context.strategyName, LIVE_METHOD_NAME_RUN);
16473
+ backtest$1.exchangeValidationService.validate(context.exchangeName, LIVE_METHOD_NAME_RUN);
16425
16474
  }
16426
16475
  {
16427
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
16428
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_RUN);
16429
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_RUN));
16476
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
16477
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_RUN);
16478
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_RUN));
16430
16479
  }
16431
16480
  const instance = this._getInstance(symbol, context.strategyName);
16432
16481
  return instance.run(symbol, context);
@@ -16453,12 +16502,12 @@ class LiveUtils {
16453
16502
  * ```
16454
16503
  */
16455
16504
  this.background = (symbol, context) => {
16456
- bt.strategyValidationService.validate(context.strategyName, LIVE_METHOD_NAME_BACKGROUND);
16457
- bt.exchangeValidationService.validate(context.exchangeName, LIVE_METHOD_NAME_BACKGROUND);
16505
+ backtest$1.strategyValidationService.validate(context.strategyName, LIVE_METHOD_NAME_BACKGROUND);
16506
+ backtest$1.exchangeValidationService.validate(context.exchangeName, LIVE_METHOD_NAME_BACKGROUND);
16458
16507
  {
16459
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
16460
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_BACKGROUND);
16461
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_BACKGROUND));
16508
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
16509
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_BACKGROUND);
16510
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_BACKGROUND));
16462
16511
  }
16463
16512
  const instance = this._getInstance(symbol, context.strategyName);
16464
16513
  return instance.background(symbol, context);
@@ -16481,11 +16530,11 @@ class LiveUtils {
16481
16530
  * ```
16482
16531
  */
16483
16532
  this.stop = async (symbol, strategyName) => {
16484
- bt.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_STOP);
16533
+ backtest$1.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_STOP);
16485
16534
  {
16486
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16487
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_STOP);
16488
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_STOP));
16535
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16536
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_STOP);
16537
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_STOP));
16489
16538
  }
16490
16539
  const instance = this._getInstance(symbol, strategyName);
16491
16540
  return await instance.stop(symbol, strategyName);
@@ -16504,11 +16553,11 @@ class LiveUtils {
16504
16553
  * ```
16505
16554
  */
16506
16555
  this.getData = async (symbol, strategyName) => {
16507
- bt.strategyValidationService.validate(strategyName, "LiveUtils.getData");
16556
+ backtest$1.strategyValidationService.validate(strategyName, "LiveUtils.getData");
16508
16557
  {
16509
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16510
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_DATA);
16511
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_DATA));
16558
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16559
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_DATA);
16560
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_DATA));
16512
16561
  }
16513
16562
  const instance = this._getInstance(symbol, strategyName);
16514
16563
  return await instance.getData(symbol, strategyName);
@@ -16528,11 +16577,11 @@ class LiveUtils {
16528
16577
  * ```
16529
16578
  */
16530
16579
  this.getReport = async (symbol, strategyName, columns) => {
16531
- bt.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_GET_REPORT);
16580
+ backtest$1.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_GET_REPORT);
16532
16581
  {
16533
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16534
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_REPORT);
16535
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_REPORT));
16582
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16583
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_REPORT);
16584
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_REPORT));
16536
16585
  }
16537
16586
  const instance = this._getInstance(symbol, strategyName);
16538
16587
  return await instance.getReport(symbol, strategyName, columns);
@@ -16555,11 +16604,11 @@ class LiveUtils {
16555
16604
  * ```
16556
16605
  */
16557
16606
  this.dump = async (symbol, strategyName, path, columns) => {
16558
- bt.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_DUMP);
16607
+ backtest$1.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_DUMP);
16559
16608
  {
16560
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16561
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_DUMP);
16562
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_DUMP));
16609
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16610
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_DUMP);
16611
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_DUMP));
16563
16612
  }
16564
16613
  const instance = this._getInstance(symbol, strategyName);
16565
16614
  return await instance.dump(symbol, strategyName, path, columns);
@@ -16644,18 +16693,18 @@ class ScheduleUtils {
16644
16693
  * ```
16645
16694
  */
16646
16695
  this.getData = async (symbol, strategyName, backtest) => {
16647
- bt.loggerService.info(SCHEDULE_METHOD_NAME_GET_DATA, {
16696
+ backtest$1.loggerService.info(SCHEDULE_METHOD_NAME_GET_DATA, {
16648
16697
  symbol,
16649
16698
  strategyName,
16650
16699
  backtest,
16651
16700
  });
16652
- bt.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_DATA);
16701
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_DATA);
16653
16702
  {
16654
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16655
- riskName && bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_DATA);
16656
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_DATA));
16703
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16704
+ riskName && backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_DATA);
16705
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_DATA));
16657
16706
  }
16658
- return await bt.scheduleMarkdownService.getData(symbol, strategyName, backtest);
16707
+ return await backtest$1.scheduleMarkdownService.getData(symbol, strategyName, backtest);
16659
16708
  };
16660
16709
  /**
16661
16710
  * Generates markdown report with all scheduled events for a symbol-strategy pair.
@@ -16672,18 +16721,18 @@ class ScheduleUtils {
16672
16721
  * ```
16673
16722
  */
16674
16723
  this.getReport = async (symbol, strategyName, backtest, columns) => {
16675
- bt.loggerService.info(SCHEDULE_METHOD_NAME_GET_REPORT, {
16724
+ backtest$1.loggerService.info(SCHEDULE_METHOD_NAME_GET_REPORT, {
16676
16725
  symbol,
16677
16726
  strategyName,
16678
16727
  backtest,
16679
16728
  });
16680
- bt.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_REPORT);
16729
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_REPORT);
16681
16730
  {
16682
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16683
- riskName && bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_REPORT);
16684
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_REPORT));
16731
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16732
+ riskName && backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_REPORT);
16733
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_REPORT));
16685
16734
  }
16686
- return await bt.scheduleMarkdownService.getReport(symbol, strategyName, backtest, columns);
16735
+ return await backtest$1.scheduleMarkdownService.getReport(symbol, strategyName, backtest, columns);
16687
16736
  };
16688
16737
  /**
16689
16738
  * Saves strategy report to disk.
@@ -16703,19 +16752,19 @@ class ScheduleUtils {
16703
16752
  * ```
16704
16753
  */
16705
16754
  this.dump = async (symbol, strategyName, backtest, path, columns) => {
16706
- bt.loggerService.info(SCHEDULE_METHOD_NAME_DUMP, {
16755
+ backtest$1.loggerService.info(SCHEDULE_METHOD_NAME_DUMP, {
16707
16756
  symbol,
16708
16757
  strategyName,
16709
16758
  backtest,
16710
16759
  path,
16711
16760
  });
16712
- bt.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_DUMP);
16761
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_DUMP);
16713
16762
  {
16714
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16715
- riskName && bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_DUMP);
16716
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_DUMP));
16763
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16764
+ riskName && backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_DUMP);
16765
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_DUMP));
16717
16766
  }
16718
- await bt.scheduleMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16767
+ await backtest$1.scheduleMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16719
16768
  };
16720
16769
  }
16721
16770
  }
@@ -16797,13 +16846,13 @@ class Performance {
16797
16846
  * ```
16798
16847
  */
16799
16848
  static async getData(symbol, strategyName, backtest) {
16800
- bt.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_DATA);
16849
+ backtest$1.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_DATA);
16801
16850
  {
16802
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16803
- riskName && bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_DATA);
16804
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_DATA));
16851
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16852
+ riskName && backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_DATA);
16853
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_DATA));
16805
16854
  }
16806
- return bt.performanceMarkdownService.getData(symbol, strategyName, backtest);
16855
+ return backtest$1.performanceMarkdownService.getData(symbol, strategyName, backtest);
16807
16856
  }
16808
16857
  /**
16809
16858
  * Generates markdown report with performance analysis.
@@ -16829,13 +16878,13 @@ class Performance {
16829
16878
  * ```
16830
16879
  */
16831
16880
  static async getReport(symbol, strategyName, backtest, columns) {
16832
- bt.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_REPORT);
16881
+ backtest$1.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_REPORT);
16833
16882
  {
16834
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16835
- riskName && bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_REPORT);
16836
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_REPORT));
16883
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16884
+ riskName && backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_REPORT);
16885
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_REPORT));
16837
16886
  }
16838
- return bt.performanceMarkdownService.getReport(symbol, strategyName, backtest, columns);
16887
+ return backtest$1.performanceMarkdownService.getReport(symbol, strategyName, backtest, columns);
16839
16888
  }
16840
16889
  /**
16841
16890
  * Saves performance report to disk.
@@ -16858,13 +16907,13 @@ class Performance {
16858
16907
  * ```
16859
16908
  */
16860
16909
  static async dump(symbol, strategyName, backtest, path = "./dump/performance", columns) {
16861
- bt.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_DUMP);
16910
+ backtest$1.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_DUMP);
16862
16911
  {
16863
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16864
- riskName && bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_DUMP);
16865
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_DUMP));
16912
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16913
+ riskName && backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_DUMP);
16914
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_DUMP));
16866
16915
  }
16867
- return bt.performanceMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16916
+ return backtest$1.performanceMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16868
16917
  }
16869
16918
  }
16870
16919
 
@@ -16898,7 +16947,7 @@ const INSTANCE_TASK_FN = async (symbol, context, self) => {
16898
16947
  }
16899
16948
  }
16900
16949
  if (!self._isDone) {
16901
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
16950
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
16902
16951
  await doneWalkerSubject.next({
16903
16952
  exchangeName: walkerSchema.exchangeName,
16904
16953
  strategyName: context.walkerName,
@@ -16952,7 +17001,7 @@ class WalkerInstance {
16952
17001
  * @internal
16953
17002
  */
16954
17003
  this.task = functoolsKit.singlerun(async (symbol, context) => {
16955
- bt.loggerService.info(WALKER_METHOD_NAME_TASK, {
17004
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_TASK, {
16956
17005
  symbol,
16957
17006
  context,
16958
17007
  });
@@ -16971,7 +17020,7 @@ class WalkerInstance {
16971
17020
  * ```
16972
17021
  */
16973
17022
  this.getStatus = async () => {
16974
- bt.loggerService.info(WALKER_METHOD_NAME_GET_STATUS);
17023
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_GET_STATUS);
16975
17024
  return {
16976
17025
  id: this.id,
16977
17026
  symbol: this.symbol,
@@ -16987,39 +17036,39 @@ class WalkerInstance {
16987
17036
  * @returns Async generator yielding progress updates after each strategy
16988
17037
  */
16989
17038
  this.run = (symbol, context) => {
16990
- bt.loggerService.info(WALKER_METHOD_NAME_RUN, {
17039
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_RUN, {
16991
17040
  symbol,
16992
17041
  context,
16993
17042
  });
16994
- bt.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_RUN);
16995
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
16996
- bt.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_RUN);
16997
- bt.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_RUN);
17043
+ backtest$1.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_RUN);
17044
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
17045
+ backtest$1.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_RUN);
17046
+ backtest$1.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_RUN);
16998
17047
  for (const strategyName of walkerSchema.strategies) {
16999
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_RUN);
17048
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_RUN);
17000
17049
  }
17001
- bt.walkerMarkdownService.clear(context.walkerName);
17050
+ backtest$1.walkerMarkdownService.clear(context.walkerName);
17002
17051
  // Clear backtest data for all strategies
17003
17052
  for (const strategyName of walkerSchema.strategies) {
17004
17053
  {
17005
- bt.backtestMarkdownService.clear(true, { symbol, strategyName });
17006
- bt.liveMarkdownService.clear(true, { symbol, strategyName });
17007
- bt.scheduleMarkdownService.clear(true, { symbol, strategyName });
17008
- bt.performanceMarkdownService.clear(true, { symbol, strategyName });
17009
- bt.partialMarkdownService.clear(true, { symbol, strategyName });
17010
- bt.riskMarkdownService.clear(true, { symbol, strategyName });
17054
+ backtest$1.backtestMarkdownService.clear(true, { symbol, strategyName });
17055
+ backtest$1.liveMarkdownService.clear(true, { symbol, strategyName });
17056
+ backtest$1.scheduleMarkdownService.clear(true, { symbol, strategyName });
17057
+ backtest$1.performanceMarkdownService.clear(true, { symbol, strategyName });
17058
+ backtest$1.partialMarkdownService.clear(true, { symbol, strategyName });
17059
+ backtest$1.riskMarkdownService.clear(true, { symbol, strategyName });
17011
17060
  }
17012
17061
  {
17013
- bt.strategyCoreService.clear(true, { symbol, strategyName });
17062
+ backtest$1.strategyCoreService.clear(true, { symbol, strategyName });
17014
17063
  }
17015
17064
  {
17016
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17017
- riskName && bt.riskGlobalService.clear(true, riskName);
17065
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17066
+ riskName && backtest$1.riskGlobalService.clear(true, riskName);
17018
17067
  riskList &&
17019
- riskList.forEach((riskName) => bt.riskGlobalService.clear(true, riskName));
17068
+ riskList.forEach((riskName) => backtest$1.riskGlobalService.clear(true, riskName));
17020
17069
  }
17021
17070
  }
17022
- return bt.walkerCommandService.run(symbol, {
17071
+ return backtest$1.walkerCommandService.run(symbol, {
17023
17072
  walkerName: context.walkerName,
17024
17073
  exchangeName: walkerSchema.exchangeName,
17025
17074
  frameName: walkerSchema.frameName,
@@ -17044,11 +17093,11 @@ class WalkerInstance {
17044
17093
  * ```
17045
17094
  */
17046
17095
  this.background = (symbol, context) => {
17047
- bt.loggerService.info(WALKER_METHOD_NAME_BACKGROUND, {
17096
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_BACKGROUND, {
17048
17097
  symbol,
17049
17098
  context,
17050
17099
  });
17051
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
17100
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
17052
17101
  {
17053
17102
  const currentStatus = this.task.getStatus();
17054
17103
  if (currentStatus === "pending") {
@@ -17061,7 +17110,7 @@ class WalkerInstance {
17061
17110
  this.task(symbol, context).catch((error) => exitEmitter.next(new Error(functoolsKit.getErrorMessage(error))));
17062
17111
  return () => {
17063
17112
  for (const strategyName of walkerSchema.strategies) {
17064
- bt.strategyCoreService.stop(true, { symbol, strategyName });
17113
+ backtest$1.strategyCoreService.stop(true, { symbol, strategyName });
17065
17114
  walkerStopSubject.next({
17066
17115
  symbol,
17067
17116
  strategyName,
@@ -17104,14 +17153,14 @@ class WalkerInstance {
17104
17153
  * ```
17105
17154
  */
17106
17155
  this.stop = async (symbol, walkerName) => {
17107
- bt.loggerService.info(WALKER_METHOD_NAME_STOP, {
17156
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_STOP, {
17108
17157
  symbol,
17109
17158
  walkerName,
17110
17159
  });
17111
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17160
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17112
17161
  for (const strategyName of walkerSchema.strategies) {
17113
17162
  await walkerStopSubject.next({ symbol, strategyName, walkerName });
17114
- await bt.strategyCoreService.stop(true, { symbol, strategyName });
17163
+ await backtest$1.strategyCoreService.stop(true, { symbol, strategyName });
17115
17164
  }
17116
17165
  };
17117
17166
  /**
@@ -17129,12 +17178,12 @@ class WalkerInstance {
17129
17178
  * ```
17130
17179
  */
17131
17180
  this.getData = async (symbol, walkerName) => {
17132
- bt.loggerService.info(WALKER_METHOD_NAME_GET_DATA, {
17181
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_GET_DATA, {
17133
17182
  symbol,
17134
17183
  walkerName,
17135
17184
  });
17136
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17137
- return await bt.walkerMarkdownService.getData(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17185
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17186
+ return await backtest$1.walkerMarkdownService.getData(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17138
17187
  exchangeName: walkerSchema.exchangeName,
17139
17188
  frameName: walkerSchema.frameName,
17140
17189
  });
@@ -17156,12 +17205,12 @@ class WalkerInstance {
17156
17205
  * ```
17157
17206
  */
17158
17207
  this.getReport = async (symbol, walkerName, strategyColumns, pnlColumns) => {
17159
- bt.loggerService.info(WALKER_METHOD_NAME_GET_REPORT, {
17208
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_GET_REPORT, {
17160
17209
  symbol,
17161
17210
  walkerName,
17162
17211
  });
17163
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17164
- return await bt.walkerMarkdownService.getReport(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17212
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17213
+ return await backtest$1.walkerMarkdownService.getReport(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17165
17214
  exchangeName: walkerSchema.exchangeName,
17166
17215
  frameName: walkerSchema.frameName,
17167
17216
  }, strategyColumns, pnlColumns);
@@ -17186,13 +17235,13 @@ class WalkerInstance {
17186
17235
  * ```
17187
17236
  */
17188
17237
  this.dump = async (symbol, walkerName, path, strategyColumns, pnlColumns) => {
17189
- bt.loggerService.info(WALKER_METHOD_NAME_DUMP, {
17238
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_DUMP, {
17190
17239
  symbol,
17191
17240
  walkerName,
17192
17241
  path,
17193
17242
  });
17194
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17195
- await bt.walkerMarkdownService.dump(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17243
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17244
+ await backtest$1.walkerMarkdownService.dump(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17196
17245
  exchangeName: walkerSchema.exchangeName,
17197
17246
  frameName: walkerSchema.frameName,
17198
17247
  }, path, strategyColumns, pnlColumns);
@@ -17233,17 +17282,17 @@ class WalkerUtils {
17233
17282
  * @returns Async generator yielding progress updates after each strategy
17234
17283
  */
17235
17284
  this.run = (symbol, context) => {
17236
- bt.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_RUN);
17237
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
17238
- bt.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_RUN);
17239
- bt.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_RUN);
17285
+ backtest$1.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_RUN);
17286
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
17287
+ backtest$1.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_RUN);
17288
+ backtest$1.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_RUN);
17240
17289
  for (const strategyName of walkerSchema.strategies) {
17241
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_RUN);
17242
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17290
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_RUN);
17291
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17243
17292
  riskName &&
17244
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN);
17293
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN);
17245
17294
  riskList &&
17246
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN));
17295
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN));
17247
17296
  }
17248
17297
  const instance = this._getInstance(symbol, context.walkerName);
17249
17298
  return instance.run(symbol, context);
@@ -17268,17 +17317,17 @@ class WalkerUtils {
17268
17317
  * ```
17269
17318
  */
17270
17319
  this.background = (symbol, context) => {
17271
- bt.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_BACKGROUND);
17272
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
17273
- bt.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_BACKGROUND);
17274
- bt.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_BACKGROUND);
17320
+ backtest$1.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_BACKGROUND);
17321
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
17322
+ backtest$1.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_BACKGROUND);
17323
+ backtest$1.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_BACKGROUND);
17275
17324
  for (const strategyName of walkerSchema.strategies) {
17276
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_BACKGROUND);
17277
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17325
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_BACKGROUND);
17326
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17278
17327
  riskName &&
17279
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND);
17328
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND);
17280
17329
  riskList &&
17281
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND));
17330
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND));
17282
17331
  }
17283
17332
  const instance = this._getInstance(symbol, context.walkerName);
17284
17333
  return instance.background(symbol, context);
@@ -17307,15 +17356,15 @@ class WalkerUtils {
17307
17356
  * ```
17308
17357
  */
17309
17358
  this.stop = async (symbol, walkerName) => {
17310
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_STOP);
17311
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17359
+ backtest$1.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_STOP);
17360
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17312
17361
  for (const strategyName of walkerSchema.strategies) {
17313
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_STOP);
17314
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17362
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_STOP);
17363
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17315
17364
  riskName &&
17316
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP);
17365
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP);
17317
17366
  riskList &&
17318
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP));
17367
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP));
17319
17368
  }
17320
17369
  const instance = this._getInstance(symbol, walkerName);
17321
17370
  return await instance.stop(symbol, walkerName);
@@ -17334,15 +17383,15 @@ class WalkerUtils {
17334
17383
  * ```
17335
17384
  */
17336
17385
  this.getData = async (symbol, walkerName) => {
17337
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_GET_DATA);
17338
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17386
+ backtest$1.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_GET_DATA);
17387
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17339
17388
  for (const strategyName of walkerSchema.strategies) {
17340
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_GET_DATA);
17341
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17389
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_GET_DATA);
17390
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17342
17391
  riskName &&
17343
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_DATA);
17392
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_DATA);
17344
17393
  riskList &&
17345
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_DATA));
17394
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_DATA));
17346
17395
  }
17347
17396
  const instance = this._getInstance(symbol, walkerName);
17348
17397
  return await instance.getData(symbol, walkerName);
@@ -17363,15 +17412,15 @@ class WalkerUtils {
17363
17412
  * ```
17364
17413
  */
17365
17414
  this.getReport = async (symbol, walkerName, strategyColumns, pnlColumns) => {
17366
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_GET_REPORT);
17367
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17415
+ backtest$1.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_GET_REPORT);
17416
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17368
17417
  for (const strategyName of walkerSchema.strategies) {
17369
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_GET_REPORT);
17370
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17418
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_GET_REPORT);
17419
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17371
17420
  riskName &&
17372
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_REPORT);
17421
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_REPORT);
17373
17422
  riskList &&
17374
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_REPORT));
17423
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_REPORT));
17375
17424
  }
17376
17425
  const instance = this._getInstance(symbol, walkerName);
17377
17426
  return await instance.getReport(symbol, walkerName, strategyColumns, pnlColumns);
@@ -17395,15 +17444,15 @@ class WalkerUtils {
17395
17444
  * ```
17396
17445
  */
17397
17446
  this.dump = async (symbol, walkerName, path, strategyColumns, pnlColumns) => {
17398
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_DUMP);
17399
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17447
+ backtest$1.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_DUMP);
17448
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17400
17449
  for (const strategyName of walkerSchema.strategies) {
17401
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_DUMP);
17402
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17450
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_DUMP);
17451
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17403
17452
  riskName &&
17404
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP);
17453
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP);
17405
17454
  riskList &&
17406
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP));
17455
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP));
17407
17456
  }
17408
17457
  const instance = this._getInstance(symbol, walkerName);
17409
17458
  return await instance.dump(symbol, walkerName, path, strategyColumns, pnlColumns);
@@ -17496,14 +17545,14 @@ class HeatUtils {
17496
17545
  * ```
17497
17546
  */
17498
17547
  this.getData = async (strategyName, backtest) => {
17499
- bt.loggerService.info(HEAT_METHOD_NAME_GET_DATA, { strategyName });
17500
- bt.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_DATA);
17548
+ backtest$1.loggerService.info(HEAT_METHOD_NAME_GET_DATA, { strategyName });
17549
+ backtest$1.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_DATA);
17501
17550
  {
17502
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17503
- riskName && bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_DATA);
17504
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_DATA));
17551
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17552
+ riskName && backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_DATA);
17553
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_DATA));
17505
17554
  }
17506
- return await bt.heatMarkdownService.getData(strategyName, backtest);
17555
+ return await backtest$1.heatMarkdownService.getData(strategyName, backtest);
17507
17556
  };
17508
17557
  /**
17509
17558
  * Generates markdown report with portfolio heatmap table for a strategy.
@@ -17532,14 +17581,14 @@ class HeatUtils {
17532
17581
  * ```
17533
17582
  */
17534
17583
  this.getReport = async (strategyName, backtest, columns) => {
17535
- bt.loggerService.info(HEAT_METHOD_NAME_GET_REPORT, { strategyName });
17536
- bt.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_REPORT);
17584
+ backtest$1.loggerService.info(HEAT_METHOD_NAME_GET_REPORT, { strategyName });
17585
+ backtest$1.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_REPORT);
17537
17586
  {
17538
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17539
- riskName && bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_REPORT);
17540
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_REPORT));
17587
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17588
+ riskName && backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_REPORT);
17589
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_REPORT));
17541
17590
  }
17542
- return await bt.heatMarkdownService.getReport(strategyName, backtest, columns);
17591
+ return await backtest$1.heatMarkdownService.getReport(strategyName, backtest, columns);
17543
17592
  };
17544
17593
  /**
17545
17594
  * Saves heatmap report to disk for a strategy.
@@ -17561,14 +17610,14 @@ class HeatUtils {
17561
17610
  * ```
17562
17611
  */
17563
17612
  this.dump = async (strategyName, backtest, path, columns) => {
17564
- bt.loggerService.info(HEAT_METHOD_NAME_DUMP, { strategyName, path });
17565
- bt.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_DUMP);
17613
+ backtest$1.loggerService.info(HEAT_METHOD_NAME_DUMP, { strategyName, path });
17614
+ backtest$1.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_DUMP);
17566
17615
  {
17567
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17568
- riskName && bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_DUMP);
17569
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_DUMP));
17616
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17617
+ riskName && backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_DUMP);
17618
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_DUMP));
17570
17619
  }
17571
- await bt.heatMarkdownService.dump(strategyName, backtest, path, columns);
17620
+ await backtest$1.heatMarkdownService.dump(strategyName, backtest, path, columns);
17572
17621
  };
17573
17622
  }
17574
17623
  }
@@ -17655,12 +17704,12 @@ class PositionSizeUtils {
17655
17704
  * @throws Error if sizing schema method is not "fixed-percentage"
17656
17705
  */
17657
17706
  PositionSizeUtils.fixedPercentage = async (symbol, accountBalance, priceOpen, priceStopLoss, context) => {
17658
- bt.loggerService.info(POSITION_SIZE_METHOD_NAME_FIXED, {
17707
+ backtest$1.loggerService.info(POSITION_SIZE_METHOD_NAME_FIXED, {
17659
17708
  context,
17660
17709
  symbol,
17661
17710
  });
17662
- bt.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_FIXED, "fixed-percentage");
17663
- return await bt.sizingGlobalService.calculate({
17711
+ backtest$1.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_FIXED, "fixed-percentage");
17712
+ return await backtest$1.sizingGlobalService.calculate({
17664
17713
  symbol,
17665
17714
  accountBalance,
17666
17715
  priceOpen,
@@ -17681,12 +17730,12 @@ PositionSizeUtils.fixedPercentage = async (symbol, accountBalance, priceOpen, pr
17681
17730
  * @throws Error if sizing schema method is not "kelly-criterion"
17682
17731
  */
17683
17732
  PositionSizeUtils.kellyCriterion = async (symbol, accountBalance, priceOpen, winRate, winLossRatio, context) => {
17684
- bt.loggerService.info(POSITION_SIZE_METHOD_NAME_KELLY, {
17733
+ backtest$1.loggerService.info(POSITION_SIZE_METHOD_NAME_KELLY, {
17685
17734
  context,
17686
17735
  symbol,
17687
17736
  });
17688
- bt.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_KELLY, "kelly-criterion");
17689
- return await bt.sizingGlobalService.calculate({
17737
+ backtest$1.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_KELLY, "kelly-criterion");
17738
+ return await backtest$1.sizingGlobalService.calculate({
17690
17739
  symbol,
17691
17740
  accountBalance,
17692
17741
  priceOpen,
@@ -17707,12 +17756,12 @@ PositionSizeUtils.kellyCriterion = async (symbol, accountBalance, priceOpen, win
17707
17756
  * @throws Error if sizing schema method is not "atr-based"
17708
17757
  */
17709
17758
  PositionSizeUtils.atrBased = async (symbol, accountBalance, priceOpen, atr, context) => {
17710
- bt.loggerService.info(POSITION_SIZE_METHOD_NAME_ATR, {
17759
+ backtest$1.loggerService.info(POSITION_SIZE_METHOD_NAME_ATR, {
17711
17760
  context,
17712
17761
  symbol,
17713
17762
  });
17714
- bt.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_ATR, "atr-based");
17715
- return await bt.sizingGlobalService.calculate({
17763
+ backtest$1.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_ATR, "atr-based");
17764
+ return await backtest$1.sizingGlobalService.calculate({
17716
17765
  symbol,
17717
17766
  accountBalance,
17718
17767
  priceOpen,
@@ -17761,12 +17810,12 @@ class OptimizerUtils {
17761
17810
  * @throws Error if optimizer not found
17762
17811
  */
17763
17812
  this.getData = async (symbol, context) => {
17764
- bt.loggerService.info(OPTIMIZER_METHOD_NAME_GET_DATA, {
17813
+ backtest$1.loggerService.info(OPTIMIZER_METHOD_NAME_GET_DATA, {
17765
17814
  symbol,
17766
17815
  context,
17767
17816
  });
17768
- bt.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_DATA);
17769
- return await bt.optimizerGlobalService.getData(symbol, context.optimizerName);
17817
+ backtest$1.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_DATA);
17818
+ return await backtest$1.optimizerGlobalService.getData(symbol, context.optimizerName);
17770
17819
  };
17771
17820
  /**
17772
17821
  * Generates complete executable strategy code.
@@ -17778,12 +17827,12 @@ class OptimizerUtils {
17778
17827
  * @throws Error if optimizer not found
17779
17828
  */
17780
17829
  this.getCode = async (symbol, context) => {
17781
- bt.loggerService.info(OPTIMIZER_METHOD_NAME_GET_CODE, {
17830
+ backtest$1.loggerService.info(OPTIMIZER_METHOD_NAME_GET_CODE, {
17782
17831
  symbol,
17783
17832
  context,
17784
17833
  });
17785
- bt.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_CODE);
17786
- return await bt.optimizerGlobalService.getCode(symbol, context.optimizerName);
17834
+ backtest$1.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_CODE);
17835
+ return await backtest$1.optimizerGlobalService.getCode(symbol, context.optimizerName);
17787
17836
  };
17788
17837
  /**
17789
17838
  * Generates and saves strategy code to file.
@@ -17797,13 +17846,13 @@ class OptimizerUtils {
17797
17846
  * @throws Error if optimizer not found or file write fails
17798
17847
  */
17799
17848
  this.dump = async (symbol, context, path) => {
17800
- bt.loggerService.info(OPTIMIZER_METHOD_NAME_DUMP, {
17849
+ backtest$1.loggerService.info(OPTIMIZER_METHOD_NAME_DUMP, {
17801
17850
  symbol,
17802
17851
  context,
17803
17852
  path,
17804
17853
  });
17805
- bt.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_DUMP);
17806
- await bt.optimizerGlobalService.dump(symbol, context.optimizerName, path);
17854
+ backtest$1.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_DUMP);
17855
+ await backtest$1.optimizerGlobalService.dump(symbol, context.optimizerName, path);
17807
17856
  };
17808
17857
  }
17809
17858
  }
@@ -17885,14 +17934,14 @@ class PartialUtils {
17885
17934
  * ```
17886
17935
  */
17887
17936
  this.getData = async (symbol, strategyName, backtest) => {
17888
- bt.loggerService.info(PARTIAL_METHOD_NAME_GET_DATA, { symbol, strategyName });
17889
- bt.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_DATA);
17937
+ backtest$1.loggerService.info(PARTIAL_METHOD_NAME_GET_DATA, { symbol, strategyName });
17938
+ backtest$1.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_DATA);
17890
17939
  {
17891
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17892
- riskName && bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_DATA);
17893
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_DATA));
17940
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17941
+ riskName && backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_DATA);
17942
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_DATA));
17894
17943
  }
17895
- return await bt.partialMarkdownService.getData(symbol, strategyName, backtest);
17944
+ return await backtest$1.partialMarkdownService.getData(symbol, strategyName, backtest);
17896
17945
  };
17897
17946
  /**
17898
17947
  * Generates markdown report with all partial profit/loss events for a symbol-strategy pair.
@@ -17934,14 +17983,14 @@ class PartialUtils {
17934
17983
  * ```
17935
17984
  */
17936
17985
  this.getReport = async (symbol, strategyName, backtest, columns) => {
17937
- bt.loggerService.info(PARTIAL_METHOD_NAME_GET_REPORT, { symbol, strategyName });
17938
- bt.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_REPORT);
17986
+ backtest$1.loggerService.info(PARTIAL_METHOD_NAME_GET_REPORT, { symbol, strategyName });
17987
+ backtest$1.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_REPORT);
17939
17988
  {
17940
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17941
- riskName && bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_REPORT);
17942
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_REPORT));
17989
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17990
+ riskName && backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_REPORT);
17991
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_REPORT));
17943
17992
  }
17944
- return await bt.partialMarkdownService.getReport(symbol, strategyName, backtest, columns);
17993
+ return await backtest$1.partialMarkdownService.getReport(symbol, strategyName, backtest, columns);
17945
17994
  };
17946
17995
  /**
17947
17996
  * Generates and saves markdown report to file.
@@ -17976,14 +18025,14 @@ class PartialUtils {
17976
18025
  * ```
17977
18026
  */
17978
18027
  this.dump = async (symbol, strategyName, backtest, path, columns) => {
17979
- bt.loggerService.info(PARTIAL_METHOD_NAME_DUMP, { symbol, strategyName, path });
17980
- bt.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_DUMP);
18028
+ backtest$1.loggerService.info(PARTIAL_METHOD_NAME_DUMP, { symbol, strategyName, path });
18029
+ backtest$1.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_DUMP);
17981
18030
  {
17982
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17983
- riskName && bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_DUMP);
17984
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_DUMP));
18031
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
18032
+ riskName && backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_DUMP);
18033
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_DUMP));
17985
18034
  }
17986
- await bt.partialMarkdownService.dump(symbol, strategyName, backtest, path, columns);
18035
+ await backtest$1.partialMarkdownService.dump(symbol, strategyName, backtest, path, columns);
17987
18036
  };
17988
18037
  }
17989
18038
  }
@@ -18084,8 +18133,201 @@ class ConstantUtils {
18084
18133
  */
18085
18134
  const Constant = new ConstantUtils();
18086
18135
 
18136
+ const EXCHANGE_METHOD_NAME_GET_CANDLES = "ExchangeUtils.getCandles";
18137
+ const EXCHANGE_METHOD_NAME_FORMAT_QUANTITY = "ExchangeUtils.formatQuantity";
18138
+ const EXCHANGE_METHOD_NAME_FORMAT_PRICE = "ExchangeUtils.formatPrice";
18139
+ /**
18140
+ * Instance class for exchange operations on a specific exchange.
18141
+ *
18142
+ * Provides isolated exchange operations for a single exchange.
18143
+ * Each instance maintains its own context and exposes IExchangeSchema methods.
18144
+ * The schema is retrieved once during construction for better performance.
18145
+ *
18146
+ * @example
18147
+ * ```typescript
18148
+ * const instance = new ExchangeInstance("binance");
18149
+ *
18150
+ * const candles = await instance.getCandles("BTCUSDT", "1m", new Date(), 100);
18151
+ * const formattedQty = await instance.formatQuantity("BTCUSDT", 0.001);
18152
+ * const formattedPrice = await instance.formatPrice("BTCUSDT", 50000.123);
18153
+ * ```
18154
+ */
18155
+ class ExchangeInstance {
18156
+ /**
18157
+ * Creates a new ExchangeInstance for a specific exchange.
18158
+ *
18159
+ * @param exchangeName - Exchange name (e.g., "binance")
18160
+ */
18161
+ constructor(exchangeName) {
18162
+ this.exchangeName = exchangeName;
18163
+ /**
18164
+ * Fetch candles from data source (API or database).
18165
+ *
18166
+ * @param symbol - Trading pair symbol (e.g., "BTCUSDT")
18167
+ * @param interval - Candle time interval (e.g., "1m", "1h")
18168
+ * @param since - Start date for candle fetching
18169
+ * @param limit - Maximum number of candles to fetch
18170
+ * @returns Promise resolving to array of OHLCV candle data
18171
+ *
18172
+ * @example
18173
+ * ```typescript
18174
+ * const instance = new ExchangeInstance("binance");
18175
+ * const candles = await instance.getCandles("BTCUSDT", "1m", new Date(), 100);
18176
+ * ```
18177
+ */
18178
+ this.getCandles = async (symbol, interval, since, limit) => {
18179
+ backtest$1.loggerService.info(EXCHANGE_METHOD_NAME_GET_CANDLES, {
18180
+ exchangeName: this.exchangeName,
18181
+ symbol,
18182
+ interval,
18183
+ since,
18184
+ limit,
18185
+ });
18186
+ return await this._schema.getCandles(symbol, interval, since, limit);
18187
+ };
18188
+ /**
18189
+ * Format quantity according to exchange precision rules.
18190
+ *
18191
+ * @param symbol - Trading pair symbol
18192
+ * @param quantity - Raw quantity value
18193
+ * @returns Promise resolving to formatted quantity string
18194
+ *
18195
+ * @example
18196
+ * ```typescript
18197
+ * const instance = new ExchangeInstance("binance");
18198
+ * const formatted = await instance.formatQuantity("BTCUSDT", 0.001);
18199
+ * console.log(formatted); // "0.001"
18200
+ * ```
18201
+ */
18202
+ this.formatQuantity = async (symbol, quantity) => {
18203
+ backtest$1.loggerService.info(EXCHANGE_METHOD_NAME_FORMAT_QUANTITY, {
18204
+ exchangeName: this.exchangeName,
18205
+ symbol,
18206
+ quantity,
18207
+ });
18208
+ return await this._schema.formatQuantity(symbol, quantity);
18209
+ };
18210
+ /**
18211
+ * Format price according to exchange precision rules.
18212
+ *
18213
+ * @param symbol - Trading pair symbol
18214
+ * @param price - Raw price value
18215
+ * @returns Promise resolving to formatted price string
18216
+ *
18217
+ * @example
18218
+ * ```typescript
18219
+ * const instance = new ExchangeInstance("binance");
18220
+ * const formatted = await instance.formatPrice("BTCUSDT", 50000.123);
18221
+ * console.log(formatted); // "50000.12"
18222
+ * ```
18223
+ */
18224
+ this.formatPrice = async (symbol, price) => {
18225
+ backtest$1.loggerService.info(EXCHANGE_METHOD_NAME_FORMAT_PRICE, {
18226
+ exchangeName: this.exchangeName,
18227
+ symbol,
18228
+ price,
18229
+ });
18230
+ return await this._schema.formatPrice(symbol, price);
18231
+ };
18232
+ this._schema = backtest$1.exchangeSchemaService.get(this.exchangeName);
18233
+ }
18234
+ }
18235
+ /**
18236
+ * Utility class for exchange operations.
18237
+ *
18238
+ * Provides simplified access to exchange schema methods with validation.
18239
+ * Exported as singleton instance for convenient usage.
18240
+ *
18241
+ * @example
18242
+ * ```typescript
18243
+ * import { Exchange } from "./classes/Exchange";
18244
+ *
18245
+ * const candles = await Exchange.getCandles("BTCUSDT", "1m", new Date(), 100, {
18246
+ * exchangeName: "binance"
18247
+ * });
18248
+ * const formatted = await Exchange.formatQuantity("BTCUSDT", 0.001, {
18249
+ * exchangeName: "binance"
18250
+ * });
18251
+ * ```
18252
+ */
18253
+ class ExchangeUtils {
18254
+ constructor() {
18255
+ /**
18256
+ * Memoized function to get or create ExchangeInstance for an exchange.
18257
+ * Each exchange gets its own isolated instance.
18258
+ */
18259
+ this._getInstance = functoolsKit.memoize(([exchangeName]) => exchangeName, (exchangeName) => new ExchangeInstance(exchangeName));
18260
+ /**
18261
+ * Fetch candles from data source (API or database).
18262
+ *
18263
+ * @param symbol - Trading pair symbol (e.g., "BTCUSDT")
18264
+ * @param interval - Candle time interval (e.g., "1m", "1h")
18265
+ * @param since - Start date for candle fetching
18266
+ * @param limit - Maximum number of candles to fetch
18267
+ * @param context - Execution context with exchange name
18268
+ * @returns Promise resolving to array of OHLCV candle data
18269
+ */
18270
+ this.getCandles = async (symbol, interval, since, limit, context) => {
18271
+ backtest$1.exchangeValidationService.validate(context.exchangeName, EXCHANGE_METHOD_NAME_GET_CANDLES);
18272
+ const instance = this._getInstance(context.exchangeName);
18273
+ return await instance.getCandles(symbol, interval, since, limit);
18274
+ };
18275
+ /**
18276
+ * Format quantity according to exchange precision rules.
18277
+ *
18278
+ * @param symbol - Trading pair symbol
18279
+ * @param quantity - Raw quantity value
18280
+ * @param context - Execution context with exchange name
18281
+ * @returns Promise resolving to formatted quantity string
18282
+ */
18283
+ this.formatQuantity = async (symbol, quantity, context) => {
18284
+ backtest$1.exchangeValidationService.validate(context.exchangeName, EXCHANGE_METHOD_NAME_FORMAT_QUANTITY);
18285
+ const instance = this._getInstance(context.exchangeName);
18286
+ return await instance.formatQuantity(symbol, quantity);
18287
+ };
18288
+ /**
18289
+ * Format price according to exchange precision rules.
18290
+ *
18291
+ * @param symbol - Trading pair symbol
18292
+ * @param price - Raw price value
18293
+ * @param context - Execution context with exchange name
18294
+ * @returns Promise resolving to formatted price string
18295
+ */
18296
+ this.formatPrice = async (symbol, price, context) => {
18297
+ backtest$1.exchangeValidationService.validate(context.exchangeName, EXCHANGE_METHOD_NAME_FORMAT_PRICE);
18298
+ const instance = this._getInstance(context.exchangeName);
18299
+ return await instance.formatPrice(symbol, price);
18300
+ };
18301
+ }
18302
+ }
18303
+ /**
18304
+ * Singleton instance of ExchangeUtils for convenient exchange operations.
18305
+ *
18306
+ * @example
18307
+ * ```typescript
18308
+ * import { Exchange } from "./classes/Exchange";
18309
+ *
18310
+ * // Using static-like API with context
18311
+ * const candles = await Exchange.getCandles("BTCUSDT", "1m", new Date(), 100, {
18312
+ * exchangeName: "binance"
18313
+ * });
18314
+ * const qty = await Exchange.formatQuantity("BTCUSDT", 0.001, {
18315
+ * exchangeName: "binance"
18316
+ * });
18317
+ * const price = await Exchange.formatPrice("BTCUSDT", 50000.123, {
18318
+ * exchangeName: "binance"
18319
+ * });
18320
+ *
18321
+ * // Using instance API (no context needed, exchange set in constructor)
18322
+ * const binance = new ExchangeInstance("binance");
18323
+ * const candles2 = await binance.getCandles("BTCUSDT", "1m", new Date(), 100);
18324
+ * ```
18325
+ */
18326
+ const Exchange = new ExchangeUtils();
18327
+
18087
18328
  exports.Backtest = Backtest;
18088
18329
  exports.Constant = Constant;
18330
+ exports.Exchange = Exchange;
18089
18331
  exports.ExecutionContextService = ExecutionContextService;
18090
18332
  exports.Heat = Heat;
18091
18333
  exports.Live = Live;
@@ -18121,6 +18363,7 @@ exports.getDate = getDate;
18121
18363
  exports.getDefaultColumns = getDefaultColumns;
18122
18364
  exports.getDefaultConfig = getDefaultConfig;
18123
18365
  exports.getMode = getMode;
18366
+ exports.hasTradeContext = hasTradeContext;
18124
18367
  exports.lib = backtest;
18125
18368
  exports.listExchanges = listExchanges;
18126
18369
  exports.listFrames = listFrames;