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.mjs CHANGED
@@ -2041,7 +2041,7 @@ const BASE_WAIT_FOR_INIT_FN_METHOD_NAME = "PersistBase.waitForInitFn";
2041
2041
  const BASE_UNLINK_RETRY_COUNT = 5;
2042
2042
  const BASE_UNLINK_RETRY_DELAY = 1000;
2043
2043
  const BASE_WAIT_FOR_INIT_FN = async (self) => {
2044
- bt.loggerService.debug(BASE_WAIT_FOR_INIT_FN_METHOD_NAME, {
2044
+ backtest$1.loggerService.debug(BASE_WAIT_FOR_INIT_FN_METHOD_NAME, {
2045
2045
  entityName: self.entityName,
2046
2046
  directory: self._directory,
2047
2047
  });
@@ -2099,7 +2099,7 @@ const PersistBase = makeExtendable(class {
2099
2099
  this.entityName = entityName;
2100
2100
  this.baseDir = baseDir;
2101
2101
  this[_a] = singleshot(async () => await BASE_WAIT_FOR_INIT_FN(this));
2102
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_CTOR, {
2102
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_CTOR, {
2103
2103
  entityName: this.entityName,
2104
2104
  baseDir,
2105
2105
  });
@@ -2115,7 +2115,7 @@ const PersistBase = makeExtendable(class {
2115
2115
  return join(this.baseDir, this.entityName, `${entityId}.json`);
2116
2116
  }
2117
2117
  async waitForInit(initial) {
2118
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_WAIT_FOR_INIT, {
2118
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_WAIT_FOR_INIT, {
2119
2119
  entityName: this.entityName,
2120
2120
  initial,
2121
2121
  });
@@ -2132,7 +2132,7 @@ const PersistBase = makeExtendable(class {
2132
2132
  return length;
2133
2133
  }
2134
2134
  async readValue(entityId) {
2135
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_READ_VALUE, {
2135
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_READ_VALUE, {
2136
2136
  entityName: this.entityName,
2137
2137
  entityId,
2138
2138
  });
@@ -2149,7 +2149,7 @@ const PersistBase = makeExtendable(class {
2149
2149
  }
2150
2150
  }
2151
2151
  async hasValue(entityId) {
2152
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_HAS_VALUE, {
2152
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_HAS_VALUE, {
2153
2153
  entityName: this.entityName,
2154
2154
  entityId,
2155
2155
  });
@@ -2166,7 +2166,7 @@ const PersistBase = makeExtendable(class {
2166
2166
  }
2167
2167
  }
2168
2168
  async writeValue(entityId, entity) {
2169
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_WRITE_VALUE, {
2169
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_WRITE_VALUE, {
2170
2170
  entityName: this.entityName,
2171
2171
  entityId,
2172
2172
  });
@@ -2187,7 +2187,7 @@ const PersistBase = makeExtendable(class {
2187
2187
  * @throws Error if entity not found or deletion fails
2188
2188
  */
2189
2189
  async removeValue(entityId) {
2190
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_REMOVE_VALUE, {
2190
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_REMOVE_VALUE, {
2191
2191
  entityName: this.entityName,
2192
2192
  entityId,
2193
2193
  });
@@ -2209,7 +2209,7 @@ const PersistBase = makeExtendable(class {
2209
2209
  * @throws Error if deletion fails
2210
2210
  */
2211
2211
  async removeAll() {
2212
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_REMOVE_ALL, {
2212
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_REMOVE_ALL, {
2213
2213
  entityName: this.entityName,
2214
2214
  });
2215
2215
  try {
@@ -2231,7 +2231,7 @@ const PersistBase = makeExtendable(class {
2231
2231
  * @throws Error if reading fails
2232
2232
  */
2233
2233
  async *values() {
2234
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_VALUES, {
2234
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_VALUES, {
2235
2235
  entityName: this.entityName,
2236
2236
  });
2237
2237
  try {
@@ -2260,7 +2260,7 @@ const PersistBase = makeExtendable(class {
2260
2260
  * @throws Error if reading fails
2261
2261
  */
2262
2262
  async *keys() {
2263
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_KEYS, {
2263
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_KEYS, {
2264
2264
  entityName: this.entityName,
2265
2265
  });
2266
2266
  try {
@@ -2365,7 +2365,7 @@ class PersistSignalUtils {
2365
2365
  * @returns Promise resolving to signal or null
2366
2366
  */
2367
2367
  this.readSignalData = async (symbol, strategyName) => {
2368
- bt.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_READ_DATA);
2368
+ backtest$1.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_READ_DATA);
2369
2369
  const key = `${symbol}:${strategyName}`;
2370
2370
  const isInitial = !this.getSignalStorage.has(key);
2371
2371
  const stateStorage = this.getSignalStorage(symbol, strategyName);
@@ -2387,7 +2387,7 @@ class PersistSignalUtils {
2387
2387
  * @returns Promise that resolves when write is complete
2388
2388
  */
2389
2389
  this.writeSignalData = async (signalRow, symbol, strategyName) => {
2390
- bt.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_WRITE_DATA);
2390
+ backtest$1.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_WRITE_DATA);
2391
2391
  const key = `${symbol}:${strategyName}`;
2392
2392
  const isInitial = !this.getSignalStorage.has(key);
2393
2393
  const stateStorage = this.getSignalStorage(symbol, strategyName);
@@ -2410,7 +2410,7 @@ class PersistSignalUtils {
2410
2410
  * ```
2411
2411
  */
2412
2412
  usePersistSignalAdapter(Ctor) {
2413
- bt.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_USE_PERSIST_SIGNAL_ADAPTER);
2413
+ backtest$1.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_USE_PERSIST_SIGNAL_ADAPTER);
2414
2414
  this.PersistSignalFactory = Ctor;
2415
2415
  }
2416
2416
  }
@@ -2462,7 +2462,7 @@ class PersistRiskUtils {
2462
2462
  * @returns Promise resolving to Map of active positions
2463
2463
  */
2464
2464
  this.readPositionData = async (riskName) => {
2465
- bt.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_READ_DATA);
2465
+ backtest$1.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_READ_DATA);
2466
2466
  const isInitial = !this.getRiskStorage.has(riskName);
2467
2467
  const stateStorage = this.getRiskStorage(riskName);
2468
2468
  await stateStorage.waitForInit(isInitial);
@@ -2483,7 +2483,7 @@ class PersistRiskUtils {
2483
2483
  * @returns Promise that resolves when write is complete
2484
2484
  */
2485
2485
  this.writePositionData = async (riskRow, riskName) => {
2486
- bt.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_WRITE_DATA);
2486
+ backtest$1.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_WRITE_DATA);
2487
2487
  const isInitial = !this.getRiskStorage.has(riskName);
2488
2488
  const stateStorage = this.getRiskStorage(riskName);
2489
2489
  await stateStorage.waitForInit(isInitial);
@@ -2506,7 +2506,7 @@ class PersistRiskUtils {
2506
2506
  * ```
2507
2507
  */
2508
2508
  usePersistRiskAdapter(Ctor) {
2509
- bt.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_USE_PERSIST_RISK_ADAPTER);
2509
+ backtest$1.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_USE_PERSIST_RISK_ADAPTER);
2510
2510
  this.PersistRiskFactory = Ctor;
2511
2511
  }
2512
2512
  }
@@ -2556,7 +2556,7 @@ class PersistScheduleUtils {
2556
2556
  * @returns Promise resolving to scheduled signal or null
2557
2557
  */
2558
2558
  this.readScheduleData = async (symbol, strategyName) => {
2559
- bt.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_READ_DATA);
2559
+ backtest$1.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_READ_DATA);
2560
2560
  const key = `${symbol}:${strategyName}`;
2561
2561
  const isInitial = !this.getScheduleStorage.has(key);
2562
2562
  const stateStorage = this.getScheduleStorage(symbol, strategyName);
@@ -2578,7 +2578,7 @@ class PersistScheduleUtils {
2578
2578
  * @returns Promise that resolves when write is complete
2579
2579
  */
2580
2580
  this.writeScheduleData = async (scheduledSignalRow, symbol, strategyName) => {
2581
- bt.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_WRITE_DATA);
2581
+ backtest$1.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_WRITE_DATA);
2582
2582
  const key = `${symbol}:${strategyName}`;
2583
2583
  const isInitial = !this.getScheduleStorage.has(key);
2584
2584
  const stateStorage = this.getScheduleStorage(symbol, strategyName);
@@ -2601,7 +2601,7 @@ class PersistScheduleUtils {
2601
2601
  * ```
2602
2602
  */
2603
2603
  usePersistScheduleAdapter(Ctor) {
2604
- bt.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_USE_PERSIST_SCHEDULE_ADAPTER);
2604
+ backtest$1.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_USE_PERSIST_SCHEDULE_ADAPTER);
2605
2605
  this.PersistScheduleFactory = Ctor;
2606
2606
  }
2607
2607
  }
@@ -2651,7 +2651,7 @@ class PersistPartialUtils {
2651
2651
  * @returns Promise resolving to partial data record
2652
2652
  */
2653
2653
  this.readPartialData = async (symbol, strategyName) => {
2654
- bt.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_READ_DATA);
2654
+ backtest$1.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_READ_DATA);
2655
2655
  const key = `${symbol}:${strategyName}`;
2656
2656
  const isInitial = !this.getPartialStorage.has(key);
2657
2657
  const stateStorage = this.getPartialStorage(symbol, strategyName);
@@ -2674,7 +2674,7 @@ class PersistPartialUtils {
2674
2674
  * @returns Promise that resolves when write is complete
2675
2675
  */
2676
2676
  this.writePartialData = async (partialData, symbol, strategyName) => {
2677
- bt.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_WRITE_DATA);
2677
+ backtest$1.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_WRITE_DATA);
2678
2678
  const key = `${symbol}:${strategyName}`;
2679
2679
  const isInitial = !this.getPartialStorage.has(key);
2680
2680
  const stateStorage = this.getPartialStorage(symbol, strategyName);
@@ -2698,7 +2698,7 @@ class PersistPartialUtils {
2698
2698
  * ```
2699
2699
  */
2700
2700
  usePersistPartialAdapter(Ctor) {
2701
- bt.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_USE_PERSIST_PARTIAL_ADAPTER);
2701
+ backtest$1.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_USE_PERSIST_PARTIAL_ADAPTER);
2702
2702
  this.PersistPartialFactory = Ctor;
2703
2703
  }
2704
2704
  }
@@ -3167,7 +3167,7 @@ const GET_SIGNAL_FN = trycatch(async (self) => {
3167
3167
  error: errorData(error),
3168
3168
  message: getErrorMessage(error),
3169
3169
  };
3170
- bt.loggerService.warn(message, payload);
3170
+ backtest$1.loggerService.warn(message, payload);
3171
3171
  console.warn(message, payload);
3172
3172
  errorEmitter.next(error);
3173
3173
  },
@@ -4347,7 +4347,7 @@ class MergeRisk {
4347
4347
  * @returns Promise resolving to true if all risks approve, false if any risk rejects
4348
4348
  */
4349
4349
  async checkSignal(params) {
4350
- bt.loggerService.info("MergeRisk checkSignal", {
4350
+ backtest$1.loggerService.info("MergeRisk checkSignal", {
4351
4351
  params,
4352
4352
  });
4353
4353
  const riskCheck = await Promise.all(this._riskList.map(async (risk) => await risk.checkSignal(params)));
@@ -4364,7 +4364,7 @@ class MergeRisk {
4364
4364
  * @returns Promise that resolves when all risks have registered the signal
4365
4365
  */
4366
4366
  async addSignal(symbol, context) {
4367
- bt.loggerService.info("MergeRisk addSignal", {
4367
+ backtest$1.loggerService.info("MergeRisk addSignal", {
4368
4368
  symbol,
4369
4369
  context,
4370
4370
  });
@@ -4381,7 +4381,7 @@ class MergeRisk {
4381
4381
  * @returns Promise that resolves when all risks have removed the signal
4382
4382
  */
4383
4383
  async removeSignal(symbol, context) {
4384
- bt.loggerService.info("MergeRisk removeSignal", {
4384
+ backtest$1.loggerService.info("MergeRisk removeSignal", {
4385
4385
  symbol,
4386
4386
  context,
4387
4387
  });
@@ -4450,18 +4450,18 @@ class RiskUtils {
4450
4450
  * ```
4451
4451
  */
4452
4452
  this.getData = async (symbol, strategyName, backtest) => {
4453
- bt.loggerService.info(RISK_METHOD_NAME_GET_DATA, {
4453
+ backtest$1.loggerService.info(RISK_METHOD_NAME_GET_DATA, {
4454
4454
  symbol,
4455
4455
  strategyName,
4456
4456
  });
4457
- bt.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_GET_DATA);
4457
+ backtest$1.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_GET_DATA);
4458
4458
  {
4459
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
4459
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
4460
4460
  riskName &&
4461
- bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_DATA);
4462
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_DATA));
4461
+ backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_DATA);
4462
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_DATA));
4463
4463
  }
4464
- return await bt.riskMarkdownService.getData(symbol, strategyName, backtest);
4464
+ return await backtest$1.riskMarkdownService.getData(symbol, strategyName, backtest);
4465
4465
  };
4466
4466
  /**
4467
4467
  * Generates markdown report with all risk rejection events for a symbol-strategy pair.
@@ -4505,18 +4505,18 @@ class RiskUtils {
4505
4505
  * ```
4506
4506
  */
4507
4507
  this.getReport = async (symbol, strategyName, backtest, columns) => {
4508
- bt.loggerService.info(RISK_METHOD_NAME_GET_REPORT, {
4508
+ backtest$1.loggerService.info(RISK_METHOD_NAME_GET_REPORT, {
4509
4509
  symbol,
4510
4510
  strategyName,
4511
4511
  });
4512
- bt.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_GET_REPORT);
4512
+ backtest$1.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_GET_REPORT);
4513
4513
  {
4514
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
4514
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
4515
4515
  riskName &&
4516
- bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_REPORT);
4517
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_REPORT));
4516
+ backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_REPORT);
4517
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_REPORT));
4518
4518
  }
4519
- return await bt.riskMarkdownService.getReport(symbol, strategyName, backtest, columns);
4519
+ return await backtest$1.riskMarkdownService.getReport(symbol, strategyName, backtest, columns);
4520
4520
  };
4521
4521
  /**
4522
4522
  * Generates and saves markdown report to file.
@@ -4551,19 +4551,19 @@ class RiskUtils {
4551
4551
  * ```
4552
4552
  */
4553
4553
  this.dump = async (symbol, strategyName, backtest, path, columns) => {
4554
- bt.loggerService.info(RISK_METHOD_NAME_DUMP, {
4554
+ backtest$1.loggerService.info(RISK_METHOD_NAME_DUMP, {
4555
4555
  symbol,
4556
4556
  strategyName,
4557
4557
  path,
4558
4558
  });
4559
- bt.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_DUMP);
4559
+ backtest$1.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_DUMP);
4560
4560
  {
4561
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
4561
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
4562
4562
  riskName &&
4563
- bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_DUMP);
4564
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_DUMP));
4563
+ backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_DUMP);
4564
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_DUMP));
4565
4565
  }
4566
- await bt.riskMarkdownService.dump(symbol, strategyName, backtest, path, columns);
4566
+ await backtest$1.riskMarkdownService.dump(symbol, strategyName, backtest, path, columns);
4567
4567
  };
4568
4568
  }
4569
4569
  }
@@ -5181,7 +5181,7 @@ const DO_VALIDATION_FN = trycatch(async (validation, params) => {
5181
5181
  error: errorData(error),
5182
5182
  message: getErrorMessage(error),
5183
5183
  };
5184
- bt.loggerService.warn(message, payload);
5184
+ backtest$1.loggerService.warn(message, payload);
5185
5185
  console.warn(message, payload);
5186
5186
  validationSubject.next(error);
5187
5187
  },
@@ -13659,7 +13659,7 @@ const backtest = {
13659
13659
  ...templateServices,
13660
13660
  };
13661
13661
  init();
13662
- var bt = backtest;
13662
+ var backtest$1 = backtest;
13663
13663
 
13664
13664
  /**
13665
13665
  * Sets custom logger implementation for the framework.
@@ -13679,7 +13679,7 @@ var bt = backtest;
13679
13679
  * ```
13680
13680
  */
13681
13681
  function setLogger(logger) {
13682
- bt.loggerService.setLogger(logger);
13682
+ backtest$1.loggerService.setLogger(logger);
13683
13683
  }
13684
13684
  /**
13685
13685
  * Sets global configuration parameters for the framework.
@@ -13697,7 +13697,7 @@ function setConfig(config, _unsafe) {
13697
13697
  const prevConfig = Object.assign({}, GLOBAL_CONFIG);
13698
13698
  try {
13699
13699
  Object.assign(GLOBAL_CONFIG, config);
13700
- !_unsafe && bt.configValidationService.validate();
13700
+ !_unsafe && backtest$1.configValidationService.validate();
13701
13701
  }
13702
13702
  catch (error) {
13703
13703
  console.warn(`backtest-kit setConfig failed: ${getErrorMessage(error)}`, config);
@@ -13768,7 +13768,7 @@ function setColumns(columns, _unsafe) {
13768
13768
  const prevConfig = Object.assign({}, COLUMN_CONFIG);
13769
13769
  try {
13770
13770
  Object.assign(COLUMN_CONFIG, columns);
13771
- !_unsafe && bt.columnValidationService.validate();
13771
+ !_unsafe && backtest$1.columnValidationService.validate();
13772
13772
  }
13773
13773
  catch (error) {
13774
13774
  console.warn(`backtest-kit setColumns failed: ${getErrorMessage(error)}`, columns);
@@ -13853,11 +13853,11 @@ const ADD_OPTIMIZER_METHOD_NAME = "add.addOptimizer";
13853
13853
  * ```
13854
13854
  */
13855
13855
  function addStrategy(strategySchema) {
13856
- bt.loggerService.info(ADD_STRATEGY_METHOD_NAME, {
13856
+ backtest$1.loggerService.info(ADD_STRATEGY_METHOD_NAME, {
13857
13857
  strategySchema,
13858
13858
  });
13859
- bt.strategyValidationService.addStrategy(strategySchema.strategyName, strategySchema);
13860
- bt.strategySchemaService.register(strategySchema.strategyName, strategySchema);
13859
+ backtest$1.strategyValidationService.addStrategy(strategySchema.strategyName, strategySchema);
13860
+ backtest$1.strategySchemaService.register(strategySchema.strategyName, strategySchema);
13861
13861
  }
13862
13862
  /**
13863
13863
  * Registers an exchange data source in the framework.
@@ -13895,11 +13895,11 @@ function addStrategy(strategySchema) {
13895
13895
  * ```
13896
13896
  */
13897
13897
  function addExchange(exchangeSchema) {
13898
- bt.loggerService.info(ADD_EXCHANGE_METHOD_NAME, {
13898
+ backtest$1.loggerService.info(ADD_EXCHANGE_METHOD_NAME, {
13899
13899
  exchangeSchema,
13900
13900
  });
13901
- bt.exchangeValidationService.addExchange(exchangeSchema.exchangeName, exchangeSchema);
13902
- bt.exchangeSchemaService.register(exchangeSchema.exchangeName, exchangeSchema);
13901
+ backtest$1.exchangeValidationService.addExchange(exchangeSchema.exchangeName, exchangeSchema);
13902
+ backtest$1.exchangeSchemaService.register(exchangeSchema.exchangeName, exchangeSchema);
13903
13903
  }
13904
13904
  /**
13905
13905
  * Registers a timeframe generator for backtesting.
@@ -13932,11 +13932,11 @@ function addExchange(exchangeSchema) {
13932
13932
  * ```
13933
13933
  */
13934
13934
  function addFrame(frameSchema) {
13935
- bt.loggerService.info(ADD_FRAME_METHOD_NAME, {
13935
+ backtest$1.loggerService.info(ADD_FRAME_METHOD_NAME, {
13936
13936
  frameSchema,
13937
13937
  });
13938
- bt.frameValidationService.addFrame(frameSchema.frameName, frameSchema);
13939
- bt.frameSchemaService.register(frameSchema.frameName, frameSchema);
13938
+ backtest$1.frameValidationService.addFrame(frameSchema.frameName, frameSchema);
13939
+ backtest$1.frameSchemaService.register(frameSchema.frameName, frameSchema);
13940
13940
  }
13941
13941
  /**
13942
13942
  * Registers a walker for strategy comparison.
@@ -13976,11 +13976,11 @@ function addFrame(frameSchema) {
13976
13976
  * ```
13977
13977
  */
13978
13978
  function addWalker(walkerSchema) {
13979
- bt.loggerService.info(ADD_WALKER_METHOD_NAME, {
13979
+ backtest$1.loggerService.info(ADD_WALKER_METHOD_NAME, {
13980
13980
  walkerSchema,
13981
13981
  });
13982
- bt.walkerValidationService.addWalker(walkerSchema.walkerName, walkerSchema);
13983
- bt.walkerSchemaService.register(walkerSchema.walkerName, walkerSchema);
13982
+ backtest$1.walkerValidationService.addWalker(walkerSchema.walkerName, walkerSchema);
13983
+ backtest$1.walkerSchemaService.register(walkerSchema.walkerName, walkerSchema);
13984
13984
  }
13985
13985
  /**
13986
13986
  * Registers a position sizing configuration in the framework.
@@ -14035,11 +14035,11 @@ function addWalker(walkerSchema) {
14035
14035
  * ```
14036
14036
  */
14037
14037
  function addSizing(sizingSchema) {
14038
- bt.loggerService.info(ADD_SIZING_METHOD_NAME, {
14038
+ backtest$1.loggerService.info(ADD_SIZING_METHOD_NAME, {
14039
14039
  sizingSchema,
14040
14040
  });
14041
- bt.sizingValidationService.addSizing(sizingSchema.sizingName, sizingSchema);
14042
- bt.sizingSchemaService.register(sizingSchema.sizingName, sizingSchema);
14041
+ backtest$1.sizingValidationService.addSizing(sizingSchema.sizingName, sizingSchema);
14042
+ backtest$1.sizingSchemaService.register(sizingSchema.sizingName, sizingSchema);
14043
14043
  }
14044
14044
  /**
14045
14045
  * Registers a risk management configuration in the framework.
@@ -14103,11 +14103,11 @@ function addSizing(sizingSchema) {
14103
14103
  * ```
14104
14104
  */
14105
14105
  function addRisk(riskSchema) {
14106
- bt.loggerService.info(ADD_RISK_METHOD_NAME, {
14106
+ backtest$1.loggerService.info(ADD_RISK_METHOD_NAME, {
14107
14107
  riskSchema,
14108
14108
  });
14109
- bt.riskValidationService.addRisk(riskSchema.riskName, riskSchema);
14110
- bt.riskSchemaService.register(riskSchema.riskName, riskSchema);
14109
+ backtest$1.riskValidationService.addRisk(riskSchema.riskName, riskSchema);
14110
+ backtest$1.riskSchemaService.register(riskSchema.riskName, riskSchema);
14111
14111
  }
14112
14112
  /**
14113
14113
  * Registers an optimizer configuration in the framework.
@@ -14197,11 +14197,11 @@ function addRisk(riskSchema) {
14197
14197
  * ```
14198
14198
  */
14199
14199
  function addOptimizer(optimizerSchema) {
14200
- bt.loggerService.info(ADD_OPTIMIZER_METHOD_NAME, {
14200
+ backtest$1.loggerService.info(ADD_OPTIMIZER_METHOD_NAME, {
14201
14201
  optimizerSchema,
14202
14202
  });
14203
- bt.optimizerValidationService.addOptimizer(optimizerSchema.optimizerName, optimizerSchema);
14204
- bt.optimizerSchemaService.register(optimizerSchema.optimizerName, optimizerSchema);
14203
+ backtest$1.optimizerValidationService.addOptimizer(optimizerSchema.optimizerName, optimizerSchema);
14204
+ backtest$1.optimizerSchemaService.register(optimizerSchema.optimizerName, optimizerSchema);
14205
14205
  }
14206
14206
 
14207
14207
  const LIST_EXCHANGES_METHOD_NAME = "list.listExchanges";
@@ -14237,8 +14237,8 @@ const LIST_OPTIMIZERS_METHOD_NAME = "list.listOptimizers";
14237
14237
  * ```
14238
14238
  */
14239
14239
  async function listExchanges() {
14240
- bt.loggerService.log(LIST_EXCHANGES_METHOD_NAME);
14241
- return await bt.exchangeValidationService.list();
14240
+ backtest$1.loggerService.log(LIST_EXCHANGES_METHOD_NAME);
14241
+ return await backtest$1.exchangeValidationService.list();
14242
14242
  }
14243
14243
  /**
14244
14244
  * Returns a list of all registered strategy schemas.
@@ -14271,8 +14271,8 @@ async function listExchanges() {
14271
14271
  * ```
14272
14272
  */
14273
14273
  async function listStrategies() {
14274
- bt.loggerService.log(LIST_STRATEGIES_METHOD_NAME);
14275
- return await bt.strategyValidationService.list();
14274
+ backtest$1.loggerService.log(LIST_STRATEGIES_METHOD_NAME);
14275
+ return await backtest$1.strategyValidationService.list();
14276
14276
  }
14277
14277
  /**
14278
14278
  * Returns a list of all registered frame schemas.
@@ -14300,8 +14300,8 @@ async function listStrategies() {
14300
14300
  * ```
14301
14301
  */
14302
14302
  async function listFrames() {
14303
- bt.loggerService.log(LIST_FRAMES_METHOD_NAME);
14304
- return await bt.frameValidationService.list();
14303
+ backtest$1.loggerService.log(LIST_FRAMES_METHOD_NAME);
14304
+ return await backtest$1.frameValidationService.list();
14305
14305
  }
14306
14306
  /**
14307
14307
  * Returns a list of all registered walker schemas.
@@ -14330,8 +14330,8 @@ async function listFrames() {
14330
14330
  * ```
14331
14331
  */
14332
14332
  async function listWalkers() {
14333
- bt.loggerService.log(LIST_WALKERS_METHOD_NAME);
14334
- return await bt.walkerValidationService.list();
14333
+ backtest$1.loggerService.log(LIST_WALKERS_METHOD_NAME);
14334
+ return await backtest$1.walkerValidationService.list();
14335
14335
  }
14336
14336
  /**
14337
14337
  * Returns a list of all registered sizing schemas.
@@ -14369,8 +14369,8 @@ async function listWalkers() {
14369
14369
  * ```
14370
14370
  */
14371
14371
  async function listSizings() {
14372
- bt.loggerService.log(LIST_SIZINGS_METHOD_NAME);
14373
- return await bt.sizingValidationService.list();
14372
+ backtest$1.loggerService.log(LIST_SIZINGS_METHOD_NAME);
14373
+ return await backtest$1.sizingValidationService.list();
14374
14374
  }
14375
14375
  /**
14376
14376
  * Returns a list of all registered risk schemas.
@@ -14405,8 +14405,8 @@ async function listSizings() {
14405
14405
  * ```
14406
14406
  */
14407
14407
  async function listRisks() {
14408
- bt.loggerService.log(LIST_RISKS_METHOD_NAME);
14409
- return await bt.riskValidationService.list();
14408
+ backtest$1.loggerService.log(LIST_RISKS_METHOD_NAME);
14409
+ return await backtest$1.riskValidationService.list();
14410
14410
  }
14411
14411
  /**
14412
14412
  * Returns a list of all registered optimizer schemas.
@@ -14445,8 +14445,8 @@ async function listRisks() {
14445
14445
  * ```
14446
14446
  */
14447
14447
  async function listOptimizers() {
14448
- bt.loggerService.log(LIST_OPTIMIZERS_METHOD_NAME);
14449
- return await bt.optimizerValidationService.list();
14448
+ backtest$1.loggerService.log(LIST_OPTIMIZERS_METHOD_NAME);
14449
+ return await backtest$1.optimizerValidationService.list();
14450
14450
  }
14451
14451
 
14452
14452
  const LISTEN_SIGNAL_METHOD_NAME = "event.listenSignal";
@@ -14503,7 +14503,7 @@ const LISTEN_RISK_ONCE_METHOD_NAME = "event.listenRiskOnce";
14503
14503
  * ```
14504
14504
  */
14505
14505
  function listenSignal(fn) {
14506
- bt.loggerService.log(LISTEN_SIGNAL_METHOD_NAME);
14506
+ backtest$1.loggerService.log(LISTEN_SIGNAL_METHOD_NAME);
14507
14507
  return signalEmitter.subscribe(queued(async (event) => fn(event)));
14508
14508
  }
14509
14509
  /**
@@ -14539,7 +14539,7 @@ function listenSignal(fn) {
14539
14539
  * ```
14540
14540
  */
14541
14541
  function listenSignalOnce(filterFn, fn) {
14542
- bt.loggerService.log(LISTEN_SIGNAL_ONCE_METHOD_NAME);
14542
+ backtest$1.loggerService.log(LISTEN_SIGNAL_ONCE_METHOD_NAME);
14543
14543
  return signalEmitter.filter(filterFn).once(fn);
14544
14544
  }
14545
14545
  /**
@@ -14563,7 +14563,7 @@ function listenSignalOnce(filterFn, fn) {
14563
14563
  * ```
14564
14564
  */
14565
14565
  function listenSignalLive(fn) {
14566
- bt.loggerService.log(LISTEN_SIGNAL_LIVE_METHOD_NAME);
14566
+ backtest$1.loggerService.log(LISTEN_SIGNAL_LIVE_METHOD_NAME);
14567
14567
  return signalLiveEmitter.subscribe(queued(async (event) => fn(event)));
14568
14568
  }
14569
14569
  /**
@@ -14588,7 +14588,7 @@ function listenSignalLive(fn) {
14588
14588
  * ```
14589
14589
  */
14590
14590
  function listenSignalLiveOnce(filterFn, fn) {
14591
- bt.loggerService.log(LISTEN_SIGNAL_LIVE_ONCE_METHOD_NAME);
14591
+ backtest$1.loggerService.log(LISTEN_SIGNAL_LIVE_ONCE_METHOD_NAME);
14592
14592
  return signalLiveEmitter.filter(filterFn).once(fn);
14593
14593
  }
14594
14594
  /**
@@ -14612,7 +14612,7 @@ function listenSignalLiveOnce(filterFn, fn) {
14612
14612
  * ```
14613
14613
  */
14614
14614
  function listenSignalBacktest(fn) {
14615
- bt.loggerService.log(LISTEN_SIGNAL_BACKTEST_METHOD_NAME);
14615
+ backtest$1.loggerService.log(LISTEN_SIGNAL_BACKTEST_METHOD_NAME);
14616
14616
  return signalBacktestEmitter.subscribe(queued(async (event) => fn(event)));
14617
14617
  }
14618
14618
  /**
@@ -14637,7 +14637,7 @@ function listenSignalBacktest(fn) {
14637
14637
  * ```
14638
14638
  */
14639
14639
  function listenSignalBacktestOnce(filterFn, fn) {
14640
- bt.loggerService.log(LISTEN_SIGNAL_BACKTEST_ONCE_METHOD_NAME);
14640
+ backtest$1.loggerService.log(LISTEN_SIGNAL_BACKTEST_ONCE_METHOD_NAME);
14641
14641
  return signalBacktestEmitter.filter(filterFn).once(fn);
14642
14642
  }
14643
14643
  /**
@@ -14665,7 +14665,7 @@ function listenSignalBacktestOnce(filterFn, fn) {
14665
14665
  * ```
14666
14666
  */
14667
14667
  function listenError(fn) {
14668
- bt.loggerService.log(LISTEN_ERROR_METHOD_NAME);
14668
+ backtest$1.loggerService.log(LISTEN_ERROR_METHOD_NAME);
14669
14669
  return errorEmitter.subscribe(queued(async (error) => fn(error)));
14670
14670
  }
14671
14671
  /**
@@ -14693,7 +14693,7 @@ function listenError(fn) {
14693
14693
  * ```
14694
14694
  */
14695
14695
  function listenExit(fn) {
14696
- bt.loggerService.log(LISTEN_EXIT_METHOD_NAME);
14696
+ backtest$1.loggerService.log(LISTEN_EXIT_METHOD_NAME);
14697
14697
  return exitEmitter.subscribe(queued(async (error) => fn(error)));
14698
14698
  }
14699
14699
  /**
@@ -14724,7 +14724,7 @@ function listenExit(fn) {
14724
14724
  * ```
14725
14725
  */
14726
14726
  function listenDoneLive(fn) {
14727
- bt.loggerService.log(LISTEN_DONE_LIVE_METHOD_NAME);
14727
+ backtest$1.loggerService.log(LISTEN_DONE_LIVE_METHOD_NAME);
14728
14728
  return doneLiveSubject.subscribe(queued(async (event) => fn(event)));
14729
14729
  }
14730
14730
  /**
@@ -14754,7 +14754,7 @@ function listenDoneLive(fn) {
14754
14754
  * ```
14755
14755
  */
14756
14756
  function listenDoneLiveOnce(filterFn, fn) {
14757
- bt.loggerService.log(LISTEN_DONE_LIVE_ONCE_METHOD_NAME);
14757
+ backtest$1.loggerService.log(LISTEN_DONE_LIVE_ONCE_METHOD_NAME);
14758
14758
  return doneLiveSubject.filter(filterFn).once(fn);
14759
14759
  }
14760
14760
  /**
@@ -14786,7 +14786,7 @@ function listenDoneLiveOnce(filterFn, fn) {
14786
14786
  * ```
14787
14787
  */
14788
14788
  function listenDoneBacktest(fn) {
14789
- bt.loggerService.log(LISTEN_DONE_BACKTEST_METHOD_NAME);
14789
+ backtest$1.loggerService.log(LISTEN_DONE_BACKTEST_METHOD_NAME);
14790
14790
  return doneBacktestSubject.subscribe(queued(async (event) => fn(event)));
14791
14791
  }
14792
14792
  /**
@@ -14817,7 +14817,7 @@ function listenDoneBacktest(fn) {
14817
14817
  * ```
14818
14818
  */
14819
14819
  function listenDoneBacktestOnce(filterFn, fn) {
14820
- bt.loggerService.log(LISTEN_DONE_BACKTEST_ONCE_METHOD_NAME);
14820
+ backtest$1.loggerService.log(LISTEN_DONE_BACKTEST_ONCE_METHOD_NAME);
14821
14821
  return doneBacktestSubject.filter(filterFn).once(fn);
14822
14822
  }
14823
14823
  /**
@@ -14847,7 +14847,7 @@ function listenDoneBacktestOnce(filterFn, fn) {
14847
14847
  * ```
14848
14848
  */
14849
14849
  function listenDoneWalker(fn) {
14850
- bt.loggerService.log(LISTEN_DONE_WALKER_METHOD_NAME);
14850
+ backtest$1.loggerService.log(LISTEN_DONE_WALKER_METHOD_NAME);
14851
14851
  return doneWalkerSubject.subscribe(queued(async (event) => fn(event)));
14852
14852
  }
14853
14853
  /**
@@ -14876,7 +14876,7 @@ function listenDoneWalker(fn) {
14876
14876
  * ```
14877
14877
  */
14878
14878
  function listenDoneWalkerOnce(filterFn, fn) {
14879
- bt.loggerService.log(LISTEN_DONE_WALKER_ONCE_METHOD_NAME);
14879
+ backtest$1.loggerService.log(LISTEN_DONE_WALKER_ONCE_METHOD_NAME);
14880
14880
  return doneWalkerSubject.filter(filterFn).once(fn);
14881
14881
  }
14882
14882
  /**
@@ -14910,7 +14910,7 @@ function listenDoneWalkerOnce(filterFn, fn) {
14910
14910
  * ```
14911
14911
  */
14912
14912
  function listenBacktestProgress(fn) {
14913
- bt.loggerService.log(LISTEN_PROGRESS_METHOD_NAME);
14913
+ backtest$1.loggerService.log(LISTEN_PROGRESS_METHOD_NAME);
14914
14914
  return progressBacktestEmitter.subscribe(queued(async (event) => fn(event)));
14915
14915
  }
14916
14916
  /**
@@ -14944,7 +14944,7 @@ function listenBacktestProgress(fn) {
14944
14944
  * ```
14945
14945
  */
14946
14946
  function listenWalkerProgress(fn) {
14947
- bt.loggerService.log(LISTEN_PROGRESS_WALKER_METHOD_NAME);
14947
+ backtest$1.loggerService.log(LISTEN_PROGRESS_WALKER_METHOD_NAME);
14948
14948
  return progressWalkerEmitter.subscribe(queued(async (event) => fn(event)));
14949
14949
  }
14950
14950
  /**
@@ -14972,7 +14972,7 @@ function listenWalkerProgress(fn) {
14972
14972
  * ```
14973
14973
  */
14974
14974
  function listenOptimizerProgress(fn) {
14975
- bt.loggerService.log(LISTEN_PROGRESS_OPTIMIZER_METHOD_NAME);
14975
+ backtest$1.loggerService.log(LISTEN_PROGRESS_OPTIMIZER_METHOD_NAME);
14976
14976
  return progressOptimizerEmitter.subscribe(queued(async (event) => fn(event)));
14977
14977
  }
14978
14978
  /**
@@ -15008,7 +15008,7 @@ function listenOptimizerProgress(fn) {
15008
15008
  * ```
15009
15009
  */
15010
15010
  function listenPerformance(fn) {
15011
- bt.loggerService.log(LISTEN_PERFORMANCE_METHOD_NAME);
15011
+ backtest$1.loggerService.log(LISTEN_PERFORMANCE_METHOD_NAME);
15012
15012
  return performanceEmitter.subscribe(queued(async (event) => fn(event)));
15013
15013
  }
15014
15014
  /**
@@ -15042,7 +15042,7 @@ function listenPerformance(fn) {
15042
15042
  * ```
15043
15043
  */
15044
15044
  function listenWalker(fn) {
15045
- bt.loggerService.log(LISTEN_WALKER_METHOD_NAME);
15045
+ backtest$1.loggerService.log(LISTEN_WALKER_METHOD_NAME);
15046
15046
  return walkerEmitter.subscribe(queued(async (event) => fn(event)));
15047
15047
  }
15048
15048
  /**
@@ -15085,7 +15085,7 @@ function listenWalker(fn) {
15085
15085
  * ```
15086
15086
  */
15087
15087
  function listenWalkerOnce(filterFn, fn) {
15088
- bt.loggerService.log(LISTEN_WALKER_ONCE_METHOD_NAME);
15088
+ backtest$1.loggerService.log(LISTEN_WALKER_ONCE_METHOD_NAME);
15089
15089
  return walkerEmitter.filter(filterFn).once(fn);
15090
15090
  }
15091
15091
  /**
@@ -15120,7 +15120,7 @@ function listenWalkerOnce(filterFn, fn) {
15120
15120
  * ```
15121
15121
  */
15122
15122
  function listenWalkerComplete(fn) {
15123
- bt.loggerService.log(LISTEN_WALKER_COMPLETE_METHOD_NAME);
15123
+ backtest$1.loggerService.log(LISTEN_WALKER_COMPLETE_METHOD_NAME);
15124
15124
  return walkerCompleteSubject.subscribe(queued(async (event) => fn(event)));
15125
15125
  }
15126
15126
  /**
@@ -15148,7 +15148,7 @@ function listenWalkerComplete(fn) {
15148
15148
  * ```
15149
15149
  */
15150
15150
  function listenValidation(fn) {
15151
- bt.loggerService.log(LISTEN_VALIDATION_METHOD_NAME);
15151
+ backtest$1.loggerService.log(LISTEN_VALIDATION_METHOD_NAME);
15152
15152
  return validationSubject.subscribe(queued(async (error) => fn(error)));
15153
15153
  }
15154
15154
  /**
@@ -15176,7 +15176,7 @@ function listenValidation(fn) {
15176
15176
  * ```
15177
15177
  */
15178
15178
  function listenPartialProfit(fn) {
15179
- bt.loggerService.log(LISTEN_PARTIAL_PROFIT_METHOD_NAME);
15179
+ backtest$1.loggerService.log(LISTEN_PARTIAL_PROFIT_METHOD_NAME);
15180
15180
  return partialProfitSubject.subscribe(queued(async (event) => fn(event)));
15181
15181
  }
15182
15182
  /**
@@ -15210,7 +15210,7 @@ function listenPartialProfit(fn) {
15210
15210
  * ```
15211
15211
  */
15212
15212
  function listenPartialProfitOnce(filterFn, fn) {
15213
- bt.loggerService.log(LISTEN_PARTIAL_PROFIT_ONCE_METHOD_NAME);
15213
+ backtest$1.loggerService.log(LISTEN_PARTIAL_PROFIT_ONCE_METHOD_NAME);
15214
15214
  return partialProfitSubject.filter(filterFn).once(fn);
15215
15215
  }
15216
15216
  /**
@@ -15238,7 +15238,7 @@ function listenPartialProfitOnce(filterFn, fn) {
15238
15238
  * ```
15239
15239
  */
15240
15240
  function listenPartialLoss(fn) {
15241
- bt.loggerService.log(LISTEN_PARTIAL_LOSS_METHOD_NAME);
15241
+ backtest$1.loggerService.log(LISTEN_PARTIAL_LOSS_METHOD_NAME);
15242
15242
  return partialLossSubject.subscribe(queued(async (event) => fn(event)));
15243
15243
  }
15244
15244
  /**
@@ -15272,7 +15272,7 @@ function listenPartialLoss(fn) {
15272
15272
  * ```
15273
15273
  */
15274
15274
  function listenPartialLossOnce(filterFn, fn) {
15275
- bt.loggerService.log(LISTEN_PARTIAL_LOSS_ONCE_METHOD_NAME);
15275
+ backtest$1.loggerService.log(LISTEN_PARTIAL_LOSS_ONCE_METHOD_NAME);
15276
15276
  return partialLossSubject.filter(filterFn).once(fn);
15277
15277
  }
15278
15278
  /**
@@ -15304,7 +15304,7 @@ function listenPartialLossOnce(filterFn, fn) {
15304
15304
  * ```
15305
15305
  */
15306
15306
  function listenRisk(fn) {
15307
- bt.loggerService.log(LISTEN_RISK_METHOD_NAME);
15307
+ backtest$1.loggerService.log(LISTEN_RISK_METHOD_NAME);
15308
15308
  return riskSubject.subscribe(queued(async (event) => fn(event)));
15309
15309
  }
15310
15310
  /**
@@ -15341,7 +15341,7 @@ function listenRisk(fn) {
15341
15341
  * ```
15342
15342
  */
15343
15343
  function listenRiskOnce(filterFn, fn) {
15344
- bt.loggerService.log(LISTEN_RISK_ONCE_METHOD_NAME);
15344
+ backtest$1.loggerService.log(LISTEN_RISK_ONCE_METHOD_NAME);
15345
15345
  return riskSubject.filter(filterFn).once(fn);
15346
15346
  }
15347
15347
 
@@ -15351,6 +15351,31 @@ const FORMAT_PRICE_METHOD_NAME = "exchange.formatPrice";
15351
15351
  const FORMAT_QUANTITY_METHOD_NAME = "exchange.formatQuantity";
15352
15352
  const GET_DATE_METHOD_NAME = "exchange.getDate";
15353
15353
  const GET_MODE_METHOD_NAME = "exchange.getMode";
15354
+ const HAS_TRADE_CONTEXT_METHOD_NAME = "exchange.hasTradeContext";
15355
+ /**
15356
+ * Checks if trade context is active (execution and method contexts).
15357
+ *
15358
+ * Returns true when both contexts are active, which is required for calling
15359
+ * exchange functions like getCandles, getAveragePrice, formatPrice, formatQuantity,
15360
+ * getDate, and getMode.
15361
+ *
15362
+ * @returns true if trade context is active, false otherwise
15363
+ *
15364
+ * @example
15365
+ * ```typescript
15366
+ * import { hasTradeContext, getCandles } from "backtest-kit";
15367
+ *
15368
+ * if (hasTradeContext()) {
15369
+ * const candles = await getCandles("BTCUSDT", "1m", 100);
15370
+ * } else {
15371
+ * console.log("Trade context not active");
15372
+ * }
15373
+ * ```
15374
+ */
15375
+ function hasTradeContext() {
15376
+ backtest$1.loggerService.info(HAS_TRADE_CONTEXT_METHOD_NAME);
15377
+ return ExecutionContextService.hasContext() && MethodContextService.hasContext();
15378
+ }
15354
15379
  /**
15355
15380
  * Fetches historical candle data from the registered exchange.
15356
15381
  *
@@ -15369,12 +15394,18 @@ const GET_MODE_METHOD_NAME = "exchange.getMode";
15369
15394
  * ```
15370
15395
  */
15371
15396
  async function getCandles(symbol, interval, limit) {
15372
- bt.loggerService.info(GET_CANDLES_METHOD_NAME, {
15397
+ backtest$1.loggerService.info(GET_CANDLES_METHOD_NAME, {
15373
15398
  symbol,
15374
15399
  interval,
15375
15400
  limit,
15376
15401
  });
15377
- return await bt.exchangeConnectionService.getCandles(symbol, interval, limit);
15402
+ if (!ExecutionContextService.hasContext()) {
15403
+ throw new Error("getCandles requires an execution context");
15404
+ }
15405
+ if (!MethodContextService.hasContext()) {
15406
+ throw new Error("getCandles requires a method context");
15407
+ }
15408
+ return await backtest$1.exchangeConnectionService.getCandles(symbol, interval, limit);
15378
15409
  }
15379
15410
  /**
15380
15411
  * Calculates VWAP (Volume Weighted Average Price) for a symbol.
@@ -15395,10 +15426,16 @@ async function getCandles(symbol, interval, limit) {
15395
15426
  * ```
15396
15427
  */
15397
15428
  async function getAveragePrice(symbol) {
15398
- bt.loggerService.info(GET_AVERAGE_PRICE_METHOD_NAME, {
15429
+ backtest$1.loggerService.info(GET_AVERAGE_PRICE_METHOD_NAME, {
15399
15430
  symbol,
15400
15431
  });
15401
- return await bt.exchangeConnectionService.getAveragePrice(symbol);
15432
+ if (!ExecutionContextService.hasContext()) {
15433
+ throw new Error("getAveragePrice requires an execution context");
15434
+ }
15435
+ if (!MethodContextService.hasContext()) {
15436
+ throw new Error("getAveragePrice requires a method context");
15437
+ }
15438
+ return await backtest$1.exchangeConnectionService.getAveragePrice(symbol);
15402
15439
  }
15403
15440
  /**
15404
15441
  * Formats a price value according to exchange rules.
@@ -15416,11 +15453,14 @@ async function getAveragePrice(symbol) {
15416
15453
  * ```
15417
15454
  */
15418
15455
  async function formatPrice(symbol, price) {
15419
- bt.loggerService.info(FORMAT_PRICE_METHOD_NAME, {
15456
+ backtest$1.loggerService.info(FORMAT_PRICE_METHOD_NAME, {
15420
15457
  symbol,
15421
15458
  price,
15422
15459
  });
15423
- return await bt.exchangeConnectionService.formatPrice(symbol, price);
15460
+ if (!MethodContextService.hasContext()) {
15461
+ throw new Error("formatPrice requires a method context");
15462
+ }
15463
+ return await backtest$1.exchangeConnectionService.formatPrice(symbol, price);
15424
15464
  }
15425
15465
  /**
15426
15466
  * Formats a quantity value according to exchange rules.
@@ -15438,11 +15478,14 @@ async function formatPrice(symbol, price) {
15438
15478
  * ```
15439
15479
  */
15440
15480
  async function formatQuantity(symbol, quantity) {
15441
- bt.loggerService.info(FORMAT_QUANTITY_METHOD_NAME, {
15481
+ backtest$1.loggerService.info(FORMAT_QUANTITY_METHOD_NAME, {
15442
15482
  symbol,
15443
15483
  quantity,
15444
15484
  });
15445
- return await bt.exchangeConnectionService.formatQuantity(symbol, quantity);
15485
+ if (!MethodContextService.hasContext()) {
15486
+ throw new Error("formatQuantity requires a method context");
15487
+ }
15488
+ return await backtest$1.exchangeConnectionService.formatQuantity(symbol, quantity);
15446
15489
  }
15447
15490
  /**
15448
15491
  * Gets the current date from execution context.
@@ -15459,8 +15502,11 @@ async function formatQuantity(symbol, quantity) {
15459
15502
  * ```
15460
15503
  */
15461
15504
  async function getDate() {
15462
- bt.loggerService.info(GET_DATE_METHOD_NAME);
15463
- const { when } = bt.executionContextService.context;
15505
+ backtest$1.loggerService.info(GET_DATE_METHOD_NAME);
15506
+ if (!ExecutionContextService.hasContext()) {
15507
+ throw new Error("getDate requires an execution context");
15508
+ }
15509
+ const { when } = backtest$1.executionContextService.context;
15464
15510
  return new Date(when.getTime());
15465
15511
  }
15466
15512
  /**
@@ -15479,9 +15525,12 @@ async function getDate() {
15479
15525
  * ```
15480
15526
  */
15481
15527
  async function getMode() {
15482
- bt.loggerService.info(GET_MODE_METHOD_NAME);
15483
- const { backtest: bt$1 } = bt.executionContextService.context;
15484
- return bt$1 ? "backtest" : "live";
15528
+ backtest$1.loggerService.info(GET_MODE_METHOD_NAME);
15529
+ if (!ExecutionContextService.hasContext()) {
15530
+ throw new Error("getMode requires an execution context");
15531
+ }
15532
+ const { backtest: bt } = backtest$1.executionContextService.context;
15533
+ return bt ? "backtest" : "live";
15485
15534
  }
15486
15535
 
15487
15536
  const DUMP_SIGNAL_METHOD_NAME = "dump.dumpSignal";
@@ -15552,13 +15601,13 @@ const DUMP_SIGNAL_METHOD_NAME = "dump.dumpSignal";
15552
15601
  * ```
15553
15602
  */
15554
15603
  async function dumpSignal(signalId, history, signal, outputDir = "./dump/strategy") {
15555
- bt.loggerService.info(DUMP_SIGNAL_METHOD_NAME, {
15604
+ backtest$1.loggerService.info(DUMP_SIGNAL_METHOD_NAME, {
15556
15605
  signalId,
15557
15606
  history,
15558
15607
  signal,
15559
15608
  outputDir,
15560
15609
  });
15561
- return await bt.outlineMarkdownService.dumpSignal(signalId, history, signal, outputDir);
15610
+ return await backtest$1.outlineMarkdownService.dumpSignal(signalId, history, signal, outputDir);
15562
15611
  }
15563
15612
 
15564
15613
  const BACKTEST_METHOD_NAME_RUN = "BacktestUtils.run";
@@ -15645,7 +15694,7 @@ class BacktestInstance {
15645
15694
  * @internal
15646
15695
  */
15647
15696
  this.task = singlerun(async (symbol, context) => {
15648
- bt.loggerService.info(BACKTEST_METHOD_NAME_TASK, {
15697
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_TASK, {
15649
15698
  symbol,
15650
15699
  context,
15651
15700
  });
@@ -15664,7 +15713,7 @@ class BacktestInstance {
15664
15713
  * ```
15665
15714
  */
15666
15715
  this.getStatus = async () => {
15667
- bt.loggerService.info(BACKTEST_METHOD_NAME_GET_STATUS);
15716
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_GET_STATUS);
15668
15717
  return {
15669
15718
  id: this.id,
15670
15719
  symbol: this.symbol,
@@ -15680,27 +15729,27 @@ class BacktestInstance {
15680
15729
  * @returns Async generator yielding closed signals with PNL
15681
15730
  */
15682
15731
  this.run = (symbol, context) => {
15683
- bt.loggerService.info(BACKTEST_METHOD_NAME_RUN, {
15732
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_RUN, {
15684
15733
  symbol,
15685
15734
  context,
15686
15735
  });
15687
15736
  {
15688
- bt.backtestMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15689
- bt.liveMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15690
- bt.scheduleMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15691
- bt.performanceMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15692
- bt.partialMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15693
- bt.riskMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15737
+ backtest$1.backtestMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15738
+ backtest$1.liveMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15739
+ backtest$1.scheduleMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15740
+ backtest$1.performanceMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15741
+ backtest$1.partialMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15742
+ backtest$1.riskMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15694
15743
  }
15695
15744
  {
15696
- bt.strategyCoreService.clear(true, { symbol, strategyName: context.strategyName });
15745
+ backtest$1.strategyCoreService.clear(true, { symbol, strategyName: context.strategyName });
15697
15746
  }
15698
15747
  {
15699
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
15700
- riskName && bt.riskGlobalService.clear(true, riskName);
15701
- riskList && riskList.forEach((riskName) => bt.riskGlobalService.clear(true, riskName));
15748
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
15749
+ riskName && backtest$1.riskGlobalService.clear(true, riskName);
15750
+ riskList && riskList.forEach((riskName) => backtest$1.riskGlobalService.clear(true, riskName));
15702
15751
  }
15703
- return bt.backtestCommandService.run(symbol, context);
15752
+ return backtest$1.backtestCommandService.run(symbol, context);
15704
15753
  };
15705
15754
  /**
15706
15755
  * Runs backtest in background without yielding results.
@@ -15723,7 +15772,7 @@ class BacktestInstance {
15723
15772
  * ```
15724
15773
  */
15725
15774
  this.background = (symbol, context) => {
15726
- bt.loggerService.info(BACKTEST_METHOD_NAME_BACKGROUND, {
15775
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_BACKGROUND, {
15727
15776
  symbol,
15728
15777
  context,
15729
15778
  });
@@ -15738,8 +15787,8 @@ class BacktestInstance {
15738
15787
  }
15739
15788
  this.task(symbol, context).catch((error) => exitEmitter.next(new Error(getErrorMessage(error))));
15740
15789
  return () => {
15741
- bt.strategyCoreService.stop(true, { symbol, strategyName: context.strategyName });
15742
- bt.strategyCoreService
15790
+ backtest$1.strategyCoreService.stop(true, { symbol, strategyName: context.strategyName });
15791
+ backtest$1.strategyCoreService
15743
15792
  .getPendingSignal(true, symbol, context.strategyName)
15744
15793
  .then(async (pendingSignal) => {
15745
15794
  if (pendingSignal) {
@@ -15776,11 +15825,11 @@ class BacktestInstance {
15776
15825
  * ```
15777
15826
  */
15778
15827
  this.stop = async (symbol, strategyName) => {
15779
- bt.loggerService.info(BACKTEST_METHOD_NAME_STOP, {
15828
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_STOP, {
15780
15829
  symbol,
15781
15830
  strategyName,
15782
15831
  });
15783
- await bt.strategyCoreService.stop(true, { symbol, strategyName });
15832
+ await backtest$1.strategyCoreService.stop(true, { symbol, strategyName });
15784
15833
  };
15785
15834
  /**
15786
15835
  * Gets statistical data from all closed signals for a symbol-strategy pair.
@@ -15797,11 +15846,11 @@ class BacktestInstance {
15797
15846
  * ```
15798
15847
  */
15799
15848
  this.getData = async (symbol, strategyName) => {
15800
- bt.loggerService.info("BacktestUtils.getData", {
15849
+ backtest$1.loggerService.info("BacktestUtils.getData", {
15801
15850
  symbol,
15802
15851
  strategyName,
15803
15852
  });
15804
- return await bt.backtestMarkdownService.getData(symbol, strategyName, true);
15853
+ return await backtest$1.backtestMarkdownService.getData(symbol, strategyName, true);
15805
15854
  };
15806
15855
  /**
15807
15856
  * Generates markdown report with all closed signals for a symbol-strategy pair.
@@ -15819,11 +15868,11 @@ class BacktestInstance {
15819
15868
  * ```
15820
15869
  */
15821
15870
  this.getReport = async (symbol, strategyName, columns) => {
15822
- bt.loggerService.info(BACKTEST_METHOD_NAME_GET_REPORT, {
15871
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_GET_REPORT, {
15823
15872
  symbol,
15824
15873
  strategyName,
15825
15874
  });
15826
- return await bt.backtestMarkdownService.getReport(symbol, strategyName, true, columns);
15875
+ return await backtest$1.backtestMarkdownService.getReport(symbol, strategyName, true, columns);
15827
15876
  };
15828
15877
  /**
15829
15878
  * Saves strategy report to disk.
@@ -15844,12 +15893,12 @@ class BacktestInstance {
15844
15893
  * ```
15845
15894
  */
15846
15895
  this.dump = async (symbol, strategyName, path, columns) => {
15847
- bt.loggerService.info(BACKTEST_METHOD_NAME_DUMP, {
15896
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_DUMP, {
15848
15897
  symbol,
15849
15898
  strategyName,
15850
15899
  path,
15851
15900
  });
15852
- await bt.backtestMarkdownService.dump(symbol, strategyName, true, path, columns);
15901
+ await backtest$1.backtestMarkdownService.dump(symbol, strategyName, true, path, columns);
15853
15902
  };
15854
15903
  }
15855
15904
  }
@@ -15888,14 +15937,14 @@ class BacktestUtils {
15888
15937
  */
15889
15938
  this.run = (symbol, context) => {
15890
15939
  {
15891
- bt.strategyValidationService.validate(context.strategyName, BACKTEST_METHOD_NAME_RUN);
15892
- bt.exchangeValidationService.validate(context.exchangeName, BACKTEST_METHOD_NAME_RUN);
15893
- bt.frameValidationService.validate(context.frameName, BACKTEST_METHOD_NAME_RUN);
15940
+ backtest$1.strategyValidationService.validate(context.strategyName, BACKTEST_METHOD_NAME_RUN);
15941
+ backtest$1.exchangeValidationService.validate(context.exchangeName, BACKTEST_METHOD_NAME_RUN);
15942
+ backtest$1.frameValidationService.validate(context.frameName, BACKTEST_METHOD_NAME_RUN);
15894
15943
  }
15895
15944
  {
15896
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
15897
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_RUN);
15898
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_RUN));
15945
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
15946
+ riskName && backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_RUN);
15947
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_RUN));
15899
15948
  }
15900
15949
  const instance = this._getInstance(symbol, context.strategyName);
15901
15950
  return instance.run(symbol, context);
@@ -15922,13 +15971,13 @@ class BacktestUtils {
15922
15971
  * ```
15923
15972
  */
15924
15973
  this.background = (symbol, context) => {
15925
- bt.strategyValidationService.validate(context.strategyName, BACKTEST_METHOD_NAME_BACKGROUND);
15926
- bt.exchangeValidationService.validate(context.exchangeName, BACKTEST_METHOD_NAME_BACKGROUND);
15927
- bt.frameValidationService.validate(context.frameName, BACKTEST_METHOD_NAME_BACKGROUND);
15974
+ backtest$1.strategyValidationService.validate(context.strategyName, BACKTEST_METHOD_NAME_BACKGROUND);
15975
+ backtest$1.exchangeValidationService.validate(context.exchangeName, BACKTEST_METHOD_NAME_BACKGROUND);
15976
+ backtest$1.frameValidationService.validate(context.frameName, BACKTEST_METHOD_NAME_BACKGROUND);
15928
15977
  {
15929
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
15930
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_BACKGROUND);
15931
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_BACKGROUND));
15978
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
15979
+ riskName && backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_BACKGROUND);
15980
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_BACKGROUND));
15932
15981
  }
15933
15982
  const instance = this._getInstance(symbol, context.strategyName);
15934
15983
  return instance.background(symbol, context);
@@ -15951,11 +16000,11 @@ class BacktestUtils {
15951
16000
  * ```
15952
16001
  */
15953
16002
  this.stop = async (symbol, strategyName) => {
15954
- bt.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_STOP);
16003
+ backtest$1.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_STOP);
15955
16004
  {
15956
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
15957
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_STOP);
15958
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_STOP));
16005
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16006
+ riskName && backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_STOP);
16007
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_STOP));
15959
16008
  }
15960
16009
  const instance = this._getInstance(symbol, strategyName);
15961
16010
  return await instance.stop(symbol, strategyName);
@@ -15974,11 +16023,11 @@ class BacktestUtils {
15974
16023
  * ```
15975
16024
  */
15976
16025
  this.getData = async (symbol, strategyName) => {
15977
- bt.strategyValidationService.validate(strategyName, "BacktestUtils.getData");
16026
+ backtest$1.strategyValidationService.validate(strategyName, "BacktestUtils.getData");
15978
16027
  {
15979
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
15980
- riskName && bt.riskValidationService.validate(riskName, "BacktestUtils.getData");
15981
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, "BacktestUtils.getData"));
16028
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16029
+ riskName && backtest$1.riskValidationService.validate(riskName, "BacktestUtils.getData");
16030
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, "BacktestUtils.getData"));
15982
16031
  }
15983
16032
  const instance = this._getInstance(symbol, strategyName);
15984
16033
  return await instance.getData(symbol, strategyName);
@@ -15998,11 +16047,11 @@ class BacktestUtils {
15998
16047
  * ```
15999
16048
  */
16000
16049
  this.getReport = async (symbol, strategyName, columns) => {
16001
- bt.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_GET_REPORT);
16050
+ backtest$1.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_GET_REPORT);
16002
16051
  {
16003
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16004
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_GET_REPORT);
16005
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_GET_REPORT));
16052
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16053
+ riskName && backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_GET_REPORT);
16054
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_GET_REPORT));
16006
16055
  }
16007
16056
  const instance = this._getInstance(symbol, strategyName);
16008
16057
  return await instance.getReport(symbol, strategyName, columns);
@@ -16025,11 +16074,11 @@ class BacktestUtils {
16025
16074
  * ```
16026
16075
  */
16027
16076
  this.dump = async (symbol, strategyName, path, columns) => {
16028
- bt.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_DUMP);
16077
+ backtest$1.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_DUMP);
16029
16078
  {
16030
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16031
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_DUMP);
16032
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_DUMP));
16079
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16080
+ riskName && backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_DUMP);
16081
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_DUMP));
16033
16082
  }
16034
16083
  const instance = this._getInstance(symbol, strategyName);
16035
16084
  return await instance.dump(symbol, strategyName, path, columns);
@@ -16159,7 +16208,7 @@ class LiveInstance {
16159
16208
  * @internal
16160
16209
  */
16161
16210
  this.task = singlerun(async (symbol, context) => {
16162
- bt.loggerService.info(LIVE_METHOD_NAME_TASK, {
16211
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_TASK, {
16163
16212
  symbol,
16164
16213
  context,
16165
16214
  });
@@ -16178,7 +16227,7 @@ class LiveInstance {
16178
16227
  * ```
16179
16228
  */
16180
16229
  this.getStatus = async () => {
16181
- bt.loggerService.info(LIVE_METHOD_NAME_GET_STATUS);
16230
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_GET_STATUS);
16182
16231
  return {
16183
16232
  id: this.id,
16184
16233
  symbol: this.symbol,
@@ -16197,27 +16246,27 @@ class LiveInstance {
16197
16246
  * @returns Infinite async generator yielding opened and closed signals
16198
16247
  */
16199
16248
  this.run = (symbol, context) => {
16200
- bt.loggerService.info(LIVE_METHOD_NAME_RUN, {
16249
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_RUN, {
16201
16250
  symbol,
16202
16251
  context,
16203
16252
  });
16204
16253
  {
16205
- bt.backtestMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16206
- bt.liveMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16207
- bt.scheduleMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16208
- bt.performanceMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16209
- bt.partialMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16210
- bt.riskMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16254
+ backtest$1.backtestMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16255
+ backtest$1.liveMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16256
+ backtest$1.scheduleMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16257
+ backtest$1.performanceMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16258
+ backtest$1.partialMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16259
+ backtest$1.riskMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16211
16260
  }
16212
16261
  {
16213
- bt.strategyCoreService.clear(false, { symbol, strategyName: context.strategyName });
16262
+ backtest$1.strategyCoreService.clear(false, { symbol, strategyName: context.strategyName });
16214
16263
  }
16215
16264
  {
16216
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
16217
- riskName && bt.riskGlobalService.clear(false, riskName);
16218
- riskList && riskList.forEach((riskName) => bt.riskGlobalService.clear(false, riskName));
16265
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
16266
+ riskName && backtest$1.riskGlobalService.clear(false, riskName);
16267
+ riskList && riskList.forEach((riskName) => backtest$1.riskGlobalService.clear(false, riskName));
16219
16268
  }
16220
- return bt.liveCommandService.run(symbol, context);
16269
+ return backtest$1.liveCommandService.run(symbol, context);
16221
16270
  };
16222
16271
  /**
16223
16272
  * Runs live trading in background without yielding results.
@@ -16240,7 +16289,7 @@ class LiveInstance {
16240
16289
  * ```
16241
16290
  */
16242
16291
  this.background = (symbol, context) => {
16243
- bt.loggerService.info(LIVE_METHOD_NAME_BACKGROUND, {
16292
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_BACKGROUND, {
16244
16293
  symbol,
16245
16294
  context,
16246
16295
  });
@@ -16255,8 +16304,8 @@ class LiveInstance {
16255
16304
  }
16256
16305
  this.task(symbol, context).catch((error) => exitEmitter.next(new Error(getErrorMessage(error))));
16257
16306
  return () => {
16258
- bt.strategyCoreService.stop(false, { symbol, strategyName: context.strategyName });
16259
- bt.strategyCoreService
16307
+ backtest$1.strategyCoreService.stop(false, { symbol, strategyName: context.strategyName });
16308
+ backtest$1.strategyCoreService
16260
16309
  .getPendingSignal(false, symbol, context.strategyName)
16261
16310
  .then(async (pendingSignal) => {
16262
16311
  if (pendingSignal) {
@@ -16293,11 +16342,11 @@ class LiveInstance {
16293
16342
  * ```
16294
16343
  */
16295
16344
  this.stop = async (symbol, strategyName) => {
16296
- bt.loggerService.info(LIVE_METHOD_NAME_STOP, {
16345
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_STOP, {
16297
16346
  symbol,
16298
16347
  strategyName,
16299
16348
  });
16300
- await bt.strategyCoreService.stop(false, { symbol, strategyName });
16349
+ await backtest$1.strategyCoreService.stop(false, { symbol, strategyName });
16301
16350
  };
16302
16351
  /**
16303
16352
  * Gets statistical data from all live trading events for a symbol-strategy pair.
@@ -16314,11 +16363,11 @@ class LiveInstance {
16314
16363
  * ```
16315
16364
  */
16316
16365
  this.getData = async (symbol, strategyName) => {
16317
- bt.loggerService.info("LiveUtils.getData", {
16366
+ backtest$1.loggerService.info("LiveUtils.getData", {
16318
16367
  symbol,
16319
16368
  strategyName,
16320
16369
  });
16321
- return await bt.liveMarkdownService.getData(symbol, strategyName, false);
16370
+ return await backtest$1.liveMarkdownService.getData(symbol, strategyName, false);
16322
16371
  };
16323
16372
  /**
16324
16373
  * Generates markdown report with all events for a symbol-strategy pair.
@@ -16336,11 +16385,11 @@ class LiveInstance {
16336
16385
  * ```
16337
16386
  */
16338
16387
  this.getReport = async (symbol, strategyName, columns) => {
16339
- bt.loggerService.info(LIVE_METHOD_NAME_GET_REPORT, {
16388
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_GET_REPORT, {
16340
16389
  symbol,
16341
16390
  strategyName,
16342
16391
  });
16343
- return await bt.liveMarkdownService.getReport(symbol, strategyName, false, columns);
16392
+ return await backtest$1.liveMarkdownService.getReport(symbol, strategyName, false, columns);
16344
16393
  };
16345
16394
  /**
16346
16395
  * Saves strategy report to disk.
@@ -16361,12 +16410,12 @@ class LiveInstance {
16361
16410
  * ```
16362
16411
  */
16363
16412
  this.dump = async (symbol, strategyName, path, columns) => {
16364
- bt.loggerService.info(LIVE_METHOD_NAME_DUMP, {
16413
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_DUMP, {
16365
16414
  symbol,
16366
16415
  strategyName,
16367
16416
  path,
16368
16417
  });
16369
- await bt.liveMarkdownService.dump(symbol, strategyName, false, path, columns);
16418
+ await backtest$1.liveMarkdownService.dump(symbol, strategyName, false, path, columns);
16370
16419
  };
16371
16420
  }
16372
16421
  }
@@ -16418,13 +16467,13 @@ class LiveUtils {
16418
16467
  */
16419
16468
  this.run = (symbol, context) => {
16420
16469
  {
16421
- bt.strategyValidationService.validate(context.strategyName, LIVE_METHOD_NAME_RUN);
16422
- bt.exchangeValidationService.validate(context.exchangeName, LIVE_METHOD_NAME_RUN);
16470
+ backtest$1.strategyValidationService.validate(context.strategyName, LIVE_METHOD_NAME_RUN);
16471
+ backtest$1.exchangeValidationService.validate(context.exchangeName, LIVE_METHOD_NAME_RUN);
16423
16472
  }
16424
16473
  {
16425
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
16426
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_RUN);
16427
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_RUN));
16474
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
16475
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_RUN);
16476
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_RUN));
16428
16477
  }
16429
16478
  const instance = this._getInstance(symbol, context.strategyName);
16430
16479
  return instance.run(symbol, context);
@@ -16451,12 +16500,12 @@ class LiveUtils {
16451
16500
  * ```
16452
16501
  */
16453
16502
  this.background = (symbol, context) => {
16454
- bt.strategyValidationService.validate(context.strategyName, LIVE_METHOD_NAME_BACKGROUND);
16455
- bt.exchangeValidationService.validate(context.exchangeName, LIVE_METHOD_NAME_BACKGROUND);
16503
+ backtest$1.strategyValidationService.validate(context.strategyName, LIVE_METHOD_NAME_BACKGROUND);
16504
+ backtest$1.exchangeValidationService.validate(context.exchangeName, LIVE_METHOD_NAME_BACKGROUND);
16456
16505
  {
16457
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
16458
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_BACKGROUND);
16459
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_BACKGROUND));
16506
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
16507
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_BACKGROUND);
16508
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_BACKGROUND));
16460
16509
  }
16461
16510
  const instance = this._getInstance(symbol, context.strategyName);
16462
16511
  return instance.background(symbol, context);
@@ -16479,11 +16528,11 @@ class LiveUtils {
16479
16528
  * ```
16480
16529
  */
16481
16530
  this.stop = async (symbol, strategyName) => {
16482
- bt.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_STOP);
16531
+ backtest$1.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_STOP);
16483
16532
  {
16484
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16485
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_STOP);
16486
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_STOP));
16533
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16534
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_STOP);
16535
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_STOP));
16487
16536
  }
16488
16537
  const instance = this._getInstance(symbol, strategyName);
16489
16538
  return await instance.stop(symbol, strategyName);
@@ -16502,11 +16551,11 @@ class LiveUtils {
16502
16551
  * ```
16503
16552
  */
16504
16553
  this.getData = async (symbol, strategyName) => {
16505
- bt.strategyValidationService.validate(strategyName, "LiveUtils.getData");
16554
+ backtest$1.strategyValidationService.validate(strategyName, "LiveUtils.getData");
16506
16555
  {
16507
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16508
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_DATA);
16509
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_DATA));
16556
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16557
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_DATA);
16558
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_DATA));
16510
16559
  }
16511
16560
  const instance = this._getInstance(symbol, strategyName);
16512
16561
  return await instance.getData(symbol, strategyName);
@@ -16526,11 +16575,11 @@ class LiveUtils {
16526
16575
  * ```
16527
16576
  */
16528
16577
  this.getReport = async (symbol, strategyName, columns) => {
16529
- bt.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_GET_REPORT);
16578
+ backtest$1.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_GET_REPORT);
16530
16579
  {
16531
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16532
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_REPORT);
16533
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_REPORT));
16580
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16581
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_REPORT);
16582
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_REPORT));
16534
16583
  }
16535
16584
  const instance = this._getInstance(symbol, strategyName);
16536
16585
  return await instance.getReport(symbol, strategyName, columns);
@@ -16553,11 +16602,11 @@ class LiveUtils {
16553
16602
  * ```
16554
16603
  */
16555
16604
  this.dump = async (symbol, strategyName, path, columns) => {
16556
- bt.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_DUMP);
16605
+ backtest$1.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_DUMP);
16557
16606
  {
16558
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16559
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_DUMP);
16560
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_DUMP));
16607
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16608
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_DUMP);
16609
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_DUMP));
16561
16610
  }
16562
16611
  const instance = this._getInstance(symbol, strategyName);
16563
16612
  return await instance.dump(symbol, strategyName, path, columns);
@@ -16642,18 +16691,18 @@ class ScheduleUtils {
16642
16691
  * ```
16643
16692
  */
16644
16693
  this.getData = async (symbol, strategyName, backtest) => {
16645
- bt.loggerService.info(SCHEDULE_METHOD_NAME_GET_DATA, {
16694
+ backtest$1.loggerService.info(SCHEDULE_METHOD_NAME_GET_DATA, {
16646
16695
  symbol,
16647
16696
  strategyName,
16648
16697
  backtest,
16649
16698
  });
16650
- bt.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_DATA);
16699
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_DATA);
16651
16700
  {
16652
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16653
- riskName && bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_DATA);
16654
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_DATA));
16701
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16702
+ riskName && backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_DATA);
16703
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_DATA));
16655
16704
  }
16656
- return await bt.scheduleMarkdownService.getData(symbol, strategyName, backtest);
16705
+ return await backtest$1.scheduleMarkdownService.getData(symbol, strategyName, backtest);
16657
16706
  };
16658
16707
  /**
16659
16708
  * Generates markdown report with all scheduled events for a symbol-strategy pair.
@@ -16670,18 +16719,18 @@ class ScheduleUtils {
16670
16719
  * ```
16671
16720
  */
16672
16721
  this.getReport = async (symbol, strategyName, backtest, columns) => {
16673
- bt.loggerService.info(SCHEDULE_METHOD_NAME_GET_REPORT, {
16722
+ backtest$1.loggerService.info(SCHEDULE_METHOD_NAME_GET_REPORT, {
16674
16723
  symbol,
16675
16724
  strategyName,
16676
16725
  backtest,
16677
16726
  });
16678
- bt.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_REPORT);
16727
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_REPORT);
16679
16728
  {
16680
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16681
- riskName && bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_REPORT);
16682
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_REPORT));
16729
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16730
+ riskName && backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_REPORT);
16731
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_REPORT));
16683
16732
  }
16684
- return await bt.scheduleMarkdownService.getReport(symbol, strategyName, backtest, columns);
16733
+ return await backtest$1.scheduleMarkdownService.getReport(symbol, strategyName, backtest, columns);
16685
16734
  };
16686
16735
  /**
16687
16736
  * Saves strategy report to disk.
@@ -16701,19 +16750,19 @@ class ScheduleUtils {
16701
16750
  * ```
16702
16751
  */
16703
16752
  this.dump = async (symbol, strategyName, backtest, path, columns) => {
16704
- bt.loggerService.info(SCHEDULE_METHOD_NAME_DUMP, {
16753
+ backtest$1.loggerService.info(SCHEDULE_METHOD_NAME_DUMP, {
16705
16754
  symbol,
16706
16755
  strategyName,
16707
16756
  backtest,
16708
16757
  path,
16709
16758
  });
16710
- bt.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_DUMP);
16759
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_DUMP);
16711
16760
  {
16712
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16713
- riskName && bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_DUMP);
16714
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_DUMP));
16761
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16762
+ riskName && backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_DUMP);
16763
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_DUMP));
16715
16764
  }
16716
- await bt.scheduleMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16765
+ await backtest$1.scheduleMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16717
16766
  };
16718
16767
  }
16719
16768
  }
@@ -16795,13 +16844,13 @@ class Performance {
16795
16844
  * ```
16796
16845
  */
16797
16846
  static async getData(symbol, strategyName, backtest) {
16798
- bt.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_DATA);
16847
+ backtest$1.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_DATA);
16799
16848
  {
16800
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16801
- riskName && bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_DATA);
16802
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_DATA));
16849
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16850
+ riskName && backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_DATA);
16851
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_DATA));
16803
16852
  }
16804
- return bt.performanceMarkdownService.getData(symbol, strategyName, backtest);
16853
+ return backtest$1.performanceMarkdownService.getData(symbol, strategyName, backtest);
16805
16854
  }
16806
16855
  /**
16807
16856
  * Generates markdown report with performance analysis.
@@ -16827,13 +16876,13 @@ class Performance {
16827
16876
  * ```
16828
16877
  */
16829
16878
  static async getReport(symbol, strategyName, backtest, columns) {
16830
- bt.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_REPORT);
16879
+ backtest$1.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_REPORT);
16831
16880
  {
16832
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16833
- riskName && bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_REPORT);
16834
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_REPORT));
16881
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16882
+ riskName && backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_REPORT);
16883
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_REPORT));
16835
16884
  }
16836
- return bt.performanceMarkdownService.getReport(symbol, strategyName, backtest, columns);
16885
+ return backtest$1.performanceMarkdownService.getReport(symbol, strategyName, backtest, columns);
16837
16886
  }
16838
16887
  /**
16839
16888
  * Saves performance report to disk.
@@ -16856,13 +16905,13 @@ class Performance {
16856
16905
  * ```
16857
16906
  */
16858
16907
  static async dump(symbol, strategyName, backtest, path = "./dump/performance", columns) {
16859
- bt.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_DUMP);
16908
+ backtest$1.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_DUMP);
16860
16909
  {
16861
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16862
- riskName && bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_DUMP);
16863
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_DUMP));
16910
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16911
+ riskName && backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_DUMP);
16912
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_DUMP));
16864
16913
  }
16865
- return bt.performanceMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16914
+ return backtest$1.performanceMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16866
16915
  }
16867
16916
  }
16868
16917
 
@@ -16896,7 +16945,7 @@ const INSTANCE_TASK_FN = async (symbol, context, self) => {
16896
16945
  }
16897
16946
  }
16898
16947
  if (!self._isDone) {
16899
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
16948
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
16900
16949
  await doneWalkerSubject.next({
16901
16950
  exchangeName: walkerSchema.exchangeName,
16902
16951
  strategyName: context.walkerName,
@@ -16950,7 +16999,7 @@ class WalkerInstance {
16950
16999
  * @internal
16951
17000
  */
16952
17001
  this.task = singlerun(async (symbol, context) => {
16953
- bt.loggerService.info(WALKER_METHOD_NAME_TASK, {
17002
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_TASK, {
16954
17003
  symbol,
16955
17004
  context,
16956
17005
  });
@@ -16969,7 +17018,7 @@ class WalkerInstance {
16969
17018
  * ```
16970
17019
  */
16971
17020
  this.getStatus = async () => {
16972
- bt.loggerService.info(WALKER_METHOD_NAME_GET_STATUS);
17021
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_GET_STATUS);
16973
17022
  return {
16974
17023
  id: this.id,
16975
17024
  symbol: this.symbol,
@@ -16985,39 +17034,39 @@ class WalkerInstance {
16985
17034
  * @returns Async generator yielding progress updates after each strategy
16986
17035
  */
16987
17036
  this.run = (symbol, context) => {
16988
- bt.loggerService.info(WALKER_METHOD_NAME_RUN, {
17037
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_RUN, {
16989
17038
  symbol,
16990
17039
  context,
16991
17040
  });
16992
- bt.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_RUN);
16993
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
16994
- bt.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_RUN);
16995
- bt.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_RUN);
17041
+ backtest$1.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_RUN);
17042
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
17043
+ backtest$1.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_RUN);
17044
+ backtest$1.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_RUN);
16996
17045
  for (const strategyName of walkerSchema.strategies) {
16997
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_RUN);
17046
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_RUN);
16998
17047
  }
16999
- bt.walkerMarkdownService.clear(context.walkerName);
17048
+ backtest$1.walkerMarkdownService.clear(context.walkerName);
17000
17049
  // Clear backtest data for all strategies
17001
17050
  for (const strategyName of walkerSchema.strategies) {
17002
17051
  {
17003
- bt.backtestMarkdownService.clear(true, { symbol, strategyName });
17004
- bt.liveMarkdownService.clear(true, { symbol, strategyName });
17005
- bt.scheduleMarkdownService.clear(true, { symbol, strategyName });
17006
- bt.performanceMarkdownService.clear(true, { symbol, strategyName });
17007
- bt.partialMarkdownService.clear(true, { symbol, strategyName });
17008
- bt.riskMarkdownService.clear(true, { symbol, strategyName });
17052
+ backtest$1.backtestMarkdownService.clear(true, { symbol, strategyName });
17053
+ backtest$1.liveMarkdownService.clear(true, { symbol, strategyName });
17054
+ backtest$1.scheduleMarkdownService.clear(true, { symbol, strategyName });
17055
+ backtest$1.performanceMarkdownService.clear(true, { symbol, strategyName });
17056
+ backtest$1.partialMarkdownService.clear(true, { symbol, strategyName });
17057
+ backtest$1.riskMarkdownService.clear(true, { symbol, strategyName });
17009
17058
  }
17010
17059
  {
17011
- bt.strategyCoreService.clear(true, { symbol, strategyName });
17060
+ backtest$1.strategyCoreService.clear(true, { symbol, strategyName });
17012
17061
  }
17013
17062
  {
17014
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17015
- riskName && bt.riskGlobalService.clear(true, riskName);
17063
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17064
+ riskName && backtest$1.riskGlobalService.clear(true, riskName);
17016
17065
  riskList &&
17017
- riskList.forEach((riskName) => bt.riskGlobalService.clear(true, riskName));
17066
+ riskList.forEach((riskName) => backtest$1.riskGlobalService.clear(true, riskName));
17018
17067
  }
17019
17068
  }
17020
- return bt.walkerCommandService.run(symbol, {
17069
+ return backtest$1.walkerCommandService.run(symbol, {
17021
17070
  walkerName: context.walkerName,
17022
17071
  exchangeName: walkerSchema.exchangeName,
17023
17072
  frameName: walkerSchema.frameName,
@@ -17042,11 +17091,11 @@ class WalkerInstance {
17042
17091
  * ```
17043
17092
  */
17044
17093
  this.background = (symbol, context) => {
17045
- bt.loggerService.info(WALKER_METHOD_NAME_BACKGROUND, {
17094
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_BACKGROUND, {
17046
17095
  symbol,
17047
17096
  context,
17048
17097
  });
17049
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
17098
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
17050
17099
  {
17051
17100
  const currentStatus = this.task.getStatus();
17052
17101
  if (currentStatus === "pending") {
@@ -17059,7 +17108,7 @@ class WalkerInstance {
17059
17108
  this.task(symbol, context).catch((error) => exitEmitter.next(new Error(getErrorMessage(error))));
17060
17109
  return () => {
17061
17110
  for (const strategyName of walkerSchema.strategies) {
17062
- bt.strategyCoreService.stop(true, { symbol, strategyName });
17111
+ backtest$1.strategyCoreService.stop(true, { symbol, strategyName });
17063
17112
  walkerStopSubject.next({
17064
17113
  symbol,
17065
17114
  strategyName,
@@ -17102,14 +17151,14 @@ class WalkerInstance {
17102
17151
  * ```
17103
17152
  */
17104
17153
  this.stop = async (symbol, walkerName) => {
17105
- bt.loggerService.info(WALKER_METHOD_NAME_STOP, {
17154
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_STOP, {
17106
17155
  symbol,
17107
17156
  walkerName,
17108
17157
  });
17109
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17158
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17110
17159
  for (const strategyName of walkerSchema.strategies) {
17111
17160
  await walkerStopSubject.next({ symbol, strategyName, walkerName });
17112
- await bt.strategyCoreService.stop(true, { symbol, strategyName });
17161
+ await backtest$1.strategyCoreService.stop(true, { symbol, strategyName });
17113
17162
  }
17114
17163
  };
17115
17164
  /**
@@ -17127,12 +17176,12 @@ class WalkerInstance {
17127
17176
  * ```
17128
17177
  */
17129
17178
  this.getData = async (symbol, walkerName) => {
17130
- bt.loggerService.info(WALKER_METHOD_NAME_GET_DATA, {
17179
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_GET_DATA, {
17131
17180
  symbol,
17132
17181
  walkerName,
17133
17182
  });
17134
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17135
- return await bt.walkerMarkdownService.getData(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17183
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17184
+ return await backtest$1.walkerMarkdownService.getData(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17136
17185
  exchangeName: walkerSchema.exchangeName,
17137
17186
  frameName: walkerSchema.frameName,
17138
17187
  });
@@ -17154,12 +17203,12 @@ class WalkerInstance {
17154
17203
  * ```
17155
17204
  */
17156
17205
  this.getReport = async (symbol, walkerName, strategyColumns, pnlColumns) => {
17157
- bt.loggerService.info(WALKER_METHOD_NAME_GET_REPORT, {
17206
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_GET_REPORT, {
17158
17207
  symbol,
17159
17208
  walkerName,
17160
17209
  });
17161
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17162
- return await bt.walkerMarkdownService.getReport(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17210
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17211
+ return await backtest$1.walkerMarkdownService.getReport(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17163
17212
  exchangeName: walkerSchema.exchangeName,
17164
17213
  frameName: walkerSchema.frameName,
17165
17214
  }, strategyColumns, pnlColumns);
@@ -17184,13 +17233,13 @@ class WalkerInstance {
17184
17233
  * ```
17185
17234
  */
17186
17235
  this.dump = async (symbol, walkerName, path, strategyColumns, pnlColumns) => {
17187
- bt.loggerService.info(WALKER_METHOD_NAME_DUMP, {
17236
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_DUMP, {
17188
17237
  symbol,
17189
17238
  walkerName,
17190
17239
  path,
17191
17240
  });
17192
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17193
- await bt.walkerMarkdownService.dump(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17241
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17242
+ await backtest$1.walkerMarkdownService.dump(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17194
17243
  exchangeName: walkerSchema.exchangeName,
17195
17244
  frameName: walkerSchema.frameName,
17196
17245
  }, path, strategyColumns, pnlColumns);
@@ -17231,17 +17280,17 @@ class WalkerUtils {
17231
17280
  * @returns Async generator yielding progress updates after each strategy
17232
17281
  */
17233
17282
  this.run = (symbol, context) => {
17234
- bt.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_RUN);
17235
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
17236
- bt.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_RUN);
17237
- bt.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_RUN);
17283
+ backtest$1.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_RUN);
17284
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
17285
+ backtest$1.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_RUN);
17286
+ backtest$1.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_RUN);
17238
17287
  for (const strategyName of walkerSchema.strategies) {
17239
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_RUN);
17240
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17288
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_RUN);
17289
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17241
17290
  riskName &&
17242
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN);
17291
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN);
17243
17292
  riskList &&
17244
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN));
17293
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN));
17245
17294
  }
17246
17295
  const instance = this._getInstance(symbol, context.walkerName);
17247
17296
  return instance.run(symbol, context);
@@ -17266,17 +17315,17 @@ class WalkerUtils {
17266
17315
  * ```
17267
17316
  */
17268
17317
  this.background = (symbol, context) => {
17269
- bt.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_BACKGROUND);
17270
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
17271
- bt.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_BACKGROUND);
17272
- bt.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_BACKGROUND);
17318
+ backtest$1.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_BACKGROUND);
17319
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
17320
+ backtest$1.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_BACKGROUND);
17321
+ backtest$1.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_BACKGROUND);
17273
17322
  for (const strategyName of walkerSchema.strategies) {
17274
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_BACKGROUND);
17275
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17323
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_BACKGROUND);
17324
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17276
17325
  riskName &&
17277
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND);
17326
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND);
17278
17327
  riskList &&
17279
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND));
17328
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND));
17280
17329
  }
17281
17330
  const instance = this._getInstance(symbol, context.walkerName);
17282
17331
  return instance.background(symbol, context);
@@ -17305,15 +17354,15 @@ class WalkerUtils {
17305
17354
  * ```
17306
17355
  */
17307
17356
  this.stop = async (symbol, walkerName) => {
17308
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_STOP);
17309
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17357
+ backtest$1.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_STOP);
17358
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17310
17359
  for (const strategyName of walkerSchema.strategies) {
17311
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_STOP);
17312
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17360
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_STOP);
17361
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17313
17362
  riskName &&
17314
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP);
17363
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP);
17315
17364
  riskList &&
17316
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP));
17365
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP));
17317
17366
  }
17318
17367
  const instance = this._getInstance(symbol, walkerName);
17319
17368
  return await instance.stop(symbol, walkerName);
@@ -17332,15 +17381,15 @@ class WalkerUtils {
17332
17381
  * ```
17333
17382
  */
17334
17383
  this.getData = async (symbol, walkerName) => {
17335
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_GET_DATA);
17336
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17384
+ backtest$1.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_GET_DATA);
17385
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17337
17386
  for (const strategyName of walkerSchema.strategies) {
17338
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_GET_DATA);
17339
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17387
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_GET_DATA);
17388
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17340
17389
  riskName &&
17341
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_DATA);
17390
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_DATA);
17342
17391
  riskList &&
17343
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_DATA));
17392
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_DATA));
17344
17393
  }
17345
17394
  const instance = this._getInstance(symbol, walkerName);
17346
17395
  return await instance.getData(symbol, walkerName);
@@ -17361,15 +17410,15 @@ class WalkerUtils {
17361
17410
  * ```
17362
17411
  */
17363
17412
  this.getReport = async (symbol, walkerName, strategyColumns, pnlColumns) => {
17364
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_GET_REPORT);
17365
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17413
+ backtest$1.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_GET_REPORT);
17414
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17366
17415
  for (const strategyName of walkerSchema.strategies) {
17367
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_GET_REPORT);
17368
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17416
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_GET_REPORT);
17417
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17369
17418
  riskName &&
17370
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_REPORT);
17419
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_REPORT);
17371
17420
  riskList &&
17372
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_REPORT));
17421
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_REPORT));
17373
17422
  }
17374
17423
  const instance = this._getInstance(symbol, walkerName);
17375
17424
  return await instance.getReport(symbol, walkerName, strategyColumns, pnlColumns);
@@ -17393,15 +17442,15 @@ class WalkerUtils {
17393
17442
  * ```
17394
17443
  */
17395
17444
  this.dump = async (symbol, walkerName, path, strategyColumns, pnlColumns) => {
17396
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_DUMP);
17397
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17445
+ backtest$1.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_DUMP);
17446
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17398
17447
  for (const strategyName of walkerSchema.strategies) {
17399
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_DUMP);
17400
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17448
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_DUMP);
17449
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17401
17450
  riskName &&
17402
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP);
17451
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP);
17403
17452
  riskList &&
17404
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP));
17453
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP));
17405
17454
  }
17406
17455
  const instance = this._getInstance(symbol, walkerName);
17407
17456
  return await instance.dump(symbol, walkerName, path, strategyColumns, pnlColumns);
@@ -17494,14 +17543,14 @@ class HeatUtils {
17494
17543
  * ```
17495
17544
  */
17496
17545
  this.getData = async (strategyName, backtest) => {
17497
- bt.loggerService.info(HEAT_METHOD_NAME_GET_DATA, { strategyName });
17498
- bt.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_DATA);
17546
+ backtest$1.loggerService.info(HEAT_METHOD_NAME_GET_DATA, { strategyName });
17547
+ backtest$1.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_DATA);
17499
17548
  {
17500
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17501
- riskName && bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_DATA);
17502
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_DATA));
17549
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17550
+ riskName && backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_DATA);
17551
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_DATA));
17503
17552
  }
17504
- return await bt.heatMarkdownService.getData(strategyName, backtest);
17553
+ return await backtest$1.heatMarkdownService.getData(strategyName, backtest);
17505
17554
  };
17506
17555
  /**
17507
17556
  * Generates markdown report with portfolio heatmap table for a strategy.
@@ -17530,14 +17579,14 @@ class HeatUtils {
17530
17579
  * ```
17531
17580
  */
17532
17581
  this.getReport = async (strategyName, backtest, columns) => {
17533
- bt.loggerService.info(HEAT_METHOD_NAME_GET_REPORT, { strategyName });
17534
- bt.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_REPORT);
17582
+ backtest$1.loggerService.info(HEAT_METHOD_NAME_GET_REPORT, { strategyName });
17583
+ backtest$1.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_REPORT);
17535
17584
  {
17536
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17537
- riskName && bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_REPORT);
17538
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_REPORT));
17585
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17586
+ riskName && backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_REPORT);
17587
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_REPORT));
17539
17588
  }
17540
- return await bt.heatMarkdownService.getReport(strategyName, backtest, columns);
17589
+ return await backtest$1.heatMarkdownService.getReport(strategyName, backtest, columns);
17541
17590
  };
17542
17591
  /**
17543
17592
  * Saves heatmap report to disk for a strategy.
@@ -17559,14 +17608,14 @@ class HeatUtils {
17559
17608
  * ```
17560
17609
  */
17561
17610
  this.dump = async (strategyName, backtest, path, columns) => {
17562
- bt.loggerService.info(HEAT_METHOD_NAME_DUMP, { strategyName, path });
17563
- bt.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_DUMP);
17611
+ backtest$1.loggerService.info(HEAT_METHOD_NAME_DUMP, { strategyName, path });
17612
+ backtest$1.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_DUMP);
17564
17613
  {
17565
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17566
- riskName && bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_DUMP);
17567
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_DUMP));
17614
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17615
+ riskName && backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_DUMP);
17616
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_DUMP));
17568
17617
  }
17569
- await bt.heatMarkdownService.dump(strategyName, backtest, path, columns);
17618
+ await backtest$1.heatMarkdownService.dump(strategyName, backtest, path, columns);
17570
17619
  };
17571
17620
  }
17572
17621
  }
@@ -17653,12 +17702,12 @@ class PositionSizeUtils {
17653
17702
  * @throws Error if sizing schema method is not "fixed-percentage"
17654
17703
  */
17655
17704
  PositionSizeUtils.fixedPercentage = async (symbol, accountBalance, priceOpen, priceStopLoss, context) => {
17656
- bt.loggerService.info(POSITION_SIZE_METHOD_NAME_FIXED, {
17705
+ backtest$1.loggerService.info(POSITION_SIZE_METHOD_NAME_FIXED, {
17657
17706
  context,
17658
17707
  symbol,
17659
17708
  });
17660
- bt.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_FIXED, "fixed-percentage");
17661
- return await bt.sizingGlobalService.calculate({
17709
+ backtest$1.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_FIXED, "fixed-percentage");
17710
+ return await backtest$1.sizingGlobalService.calculate({
17662
17711
  symbol,
17663
17712
  accountBalance,
17664
17713
  priceOpen,
@@ -17679,12 +17728,12 @@ PositionSizeUtils.fixedPercentage = async (symbol, accountBalance, priceOpen, pr
17679
17728
  * @throws Error if sizing schema method is not "kelly-criterion"
17680
17729
  */
17681
17730
  PositionSizeUtils.kellyCriterion = async (symbol, accountBalance, priceOpen, winRate, winLossRatio, context) => {
17682
- bt.loggerService.info(POSITION_SIZE_METHOD_NAME_KELLY, {
17731
+ backtest$1.loggerService.info(POSITION_SIZE_METHOD_NAME_KELLY, {
17683
17732
  context,
17684
17733
  symbol,
17685
17734
  });
17686
- bt.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_KELLY, "kelly-criterion");
17687
- return await bt.sizingGlobalService.calculate({
17735
+ backtest$1.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_KELLY, "kelly-criterion");
17736
+ return await backtest$1.sizingGlobalService.calculate({
17688
17737
  symbol,
17689
17738
  accountBalance,
17690
17739
  priceOpen,
@@ -17705,12 +17754,12 @@ PositionSizeUtils.kellyCriterion = async (symbol, accountBalance, priceOpen, win
17705
17754
  * @throws Error if sizing schema method is not "atr-based"
17706
17755
  */
17707
17756
  PositionSizeUtils.atrBased = async (symbol, accountBalance, priceOpen, atr, context) => {
17708
- bt.loggerService.info(POSITION_SIZE_METHOD_NAME_ATR, {
17757
+ backtest$1.loggerService.info(POSITION_SIZE_METHOD_NAME_ATR, {
17709
17758
  context,
17710
17759
  symbol,
17711
17760
  });
17712
- bt.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_ATR, "atr-based");
17713
- return await bt.sizingGlobalService.calculate({
17761
+ backtest$1.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_ATR, "atr-based");
17762
+ return await backtest$1.sizingGlobalService.calculate({
17714
17763
  symbol,
17715
17764
  accountBalance,
17716
17765
  priceOpen,
@@ -17759,12 +17808,12 @@ class OptimizerUtils {
17759
17808
  * @throws Error if optimizer not found
17760
17809
  */
17761
17810
  this.getData = async (symbol, context) => {
17762
- bt.loggerService.info(OPTIMIZER_METHOD_NAME_GET_DATA, {
17811
+ backtest$1.loggerService.info(OPTIMIZER_METHOD_NAME_GET_DATA, {
17763
17812
  symbol,
17764
17813
  context,
17765
17814
  });
17766
- bt.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_DATA);
17767
- return await bt.optimizerGlobalService.getData(symbol, context.optimizerName);
17815
+ backtest$1.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_DATA);
17816
+ return await backtest$1.optimizerGlobalService.getData(symbol, context.optimizerName);
17768
17817
  };
17769
17818
  /**
17770
17819
  * Generates complete executable strategy code.
@@ -17776,12 +17825,12 @@ class OptimizerUtils {
17776
17825
  * @throws Error if optimizer not found
17777
17826
  */
17778
17827
  this.getCode = async (symbol, context) => {
17779
- bt.loggerService.info(OPTIMIZER_METHOD_NAME_GET_CODE, {
17828
+ backtest$1.loggerService.info(OPTIMIZER_METHOD_NAME_GET_CODE, {
17780
17829
  symbol,
17781
17830
  context,
17782
17831
  });
17783
- bt.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_CODE);
17784
- return await bt.optimizerGlobalService.getCode(symbol, context.optimizerName);
17832
+ backtest$1.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_CODE);
17833
+ return await backtest$1.optimizerGlobalService.getCode(symbol, context.optimizerName);
17785
17834
  };
17786
17835
  /**
17787
17836
  * Generates and saves strategy code to file.
@@ -17795,13 +17844,13 @@ class OptimizerUtils {
17795
17844
  * @throws Error if optimizer not found or file write fails
17796
17845
  */
17797
17846
  this.dump = async (symbol, context, path) => {
17798
- bt.loggerService.info(OPTIMIZER_METHOD_NAME_DUMP, {
17847
+ backtest$1.loggerService.info(OPTIMIZER_METHOD_NAME_DUMP, {
17799
17848
  symbol,
17800
17849
  context,
17801
17850
  path,
17802
17851
  });
17803
- bt.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_DUMP);
17804
- await bt.optimizerGlobalService.dump(symbol, context.optimizerName, path);
17852
+ backtest$1.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_DUMP);
17853
+ await backtest$1.optimizerGlobalService.dump(symbol, context.optimizerName, path);
17805
17854
  };
17806
17855
  }
17807
17856
  }
@@ -17883,14 +17932,14 @@ class PartialUtils {
17883
17932
  * ```
17884
17933
  */
17885
17934
  this.getData = async (symbol, strategyName, backtest) => {
17886
- bt.loggerService.info(PARTIAL_METHOD_NAME_GET_DATA, { symbol, strategyName });
17887
- bt.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_DATA);
17935
+ backtest$1.loggerService.info(PARTIAL_METHOD_NAME_GET_DATA, { symbol, strategyName });
17936
+ backtest$1.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_DATA);
17888
17937
  {
17889
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17890
- riskName && bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_DATA);
17891
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_DATA));
17938
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17939
+ riskName && backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_DATA);
17940
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_DATA));
17892
17941
  }
17893
- return await bt.partialMarkdownService.getData(symbol, strategyName, backtest);
17942
+ return await backtest$1.partialMarkdownService.getData(symbol, strategyName, backtest);
17894
17943
  };
17895
17944
  /**
17896
17945
  * Generates markdown report with all partial profit/loss events for a symbol-strategy pair.
@@ -17932,14 +17981,14 @@ class PartialUtils {
17932
17981
  * ```
17933
17982
  */
17934
17983
  this.getReport = async (symbol, strategyName, backtest, columns) => {
17935
- bt.loggerService.info(PARTIAL_METHOD_NAME_GET_REPORT, { symbol, strategyName });
17936
- bt.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_REPORT);
17984
+ backtest$1.loggerService.info(PARTIAL_METHOD_NAME_GET_REPORT, { symbol, strategyName });
17985
+ backtest$1.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_REPORT);
17937
17986
  {
17938
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17939
- riskName && bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_REPORT);
17940
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_REPORT));
17987
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17988
+ riskName && backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_REPORT);
17989
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_REPORT));
17941
17990
  }
17942
- return await bt.partialMarkdownService.getReport(symbol, strategyName, backtest, columns);
17991
+ return await backtest$1.partialMarkdownService.getReport(symbol, strategyName, backtest, columns);
17943
17992
  };
17944
17993
  /**
17945
17994
  * Generates and saves markdown report to file.
@@ -17974,14 +18023,14 @@ class PartialUtils {
17974
18023
  * ```
17975
18024
  */
17976
18025
  this.dump = async (symbol, strategyName, backtest, path, columns) => {
17977
- bt.loggerService.info(PARTIAL_METHOD_NAME_DUMP, { symbol, strategyName, path });
17978
- bt.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_DUMP);
18026
+ backtest$1.loggerService.info(PARTIAL_METHOD_NAME_DUMP, { symbol, strategyName, path });
18027
+ backtest$1.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_DUMP);
17979
18028
  {
17980
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17981
- riskName && bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_DUMP);
17982
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_DUMP));
18029
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
18030
+ riskName && backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_DUMP);
18031
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_DUMP));
17983
18032
  }
17984
- await bt.partialMarkdownService.dump(symbol, strategyName, backtest, path, columns);
18033
+ await backtest$1.partialMarkdownService.dump(symbol, strategyName, backtest, path, columns);
17985
18034
  };
17986
18035
  }
17987
18036
  }
@@ -18082,4 +18131,196 @@ class ConstantUtils {
18082
18131
  */
18083
18132
  const Constant = new ConstantUtils();
18084
18133
 
18085
- export { Backtest, Constant, ExecutionContextService, Heat, Live, MethodContextService, Optimizer, Partial, Performance, PersistBase, PersistPartialAdapter, PersistRiskAdapter, PersistScheduleAdapter, PersistSignalAdapter, PositionSize, Risk, Schedule, Walker, addExchange, addFrame, addOptimizer, addRisk, addSizing, addStrategy, addWalker, dumpSignal, emitters, formatPrice, formatQuantity, getAveragePrice, getCandles, getColumns, getConfig, getDate, getDefaultColumns, getDefaultConfig, getMode, backtest as lib, listExchanges, listFrames, listOptimizers, listRisks, listSizings, listStrategies, listWalkers, listenBacktestProgress, listenDoneBacktest, listenDoneBacktestOnce, listenDoneLive, listenDoneLiveOnce, listenDoneWalker, listenDoneWalkerOnce, listenError, listenExit, listenOptimizerProgress, listenPartialLoss, listenPartialLossOnce, listenPartialProfit, listenPartialProfitOnce, listenPerformance, listenRisk, listenRiskOnce, listenSignal, listenSignalBacktest, listenSignalBacktestOnce, listenSignalLive, listenSignalLiveOnce, listenSignalOnce, listenValidation, listenWalker, listenWalkerComplete, listenWalkerOnce, listenWalkerProgress, setColumns, setConfig, setLogger };
18134
+ const EXCHANGE_METHOD_NAME_GET_CANDLES = "ExchangeUtils.getCandles";
18135
+ const EXCHANGE_METHOD_NAME_FORMAT_QUANTITY = "ExchangeUtils.formatQuantity";
18136
+ const EXCHANGE_METHOD_NAME_FORMAT_PRICE = "ExchangeUtils.formatPrice";
18137
+ /**
18138
+ * Instance class for exchange operations on a specific exchange.
18139
+ *
18140
+ * Provides isolated exchange operations for a single exchange.
18141
+ * Each instance maintains its own context and exposes IExchangeSchema methods.
18142
+ * The schema is retrieved once during construction for better performance.
18143
+ *
18144
+ * @example
18145
+ * ```typescript
18146
+ * const instance = new ExchangeInstance("binance");
18147
+ *
18148
+ * const candles = await instance.getCandles("BTCUSDT", "1m", new Date(), 100);
18149
+ * const formattedQty = await instance.formatQuantity("BTCUSDT", 0.001);
18150
+ * const formattedPrice = await instance.formatPrice("BTCUSDT", 50000.123);
18151
+ * ```
18152
+ */
18153
+ class ExchangeInstance {
18154
+ /**
18155
+ * Creates a new ExchangeInstance for a specific exchange.
18156
+ *
18157
+ * @param exchangeName - Exchange name (e.g., "binance")
18158
+ */
18159
+ constructor(exchangeName) {
18160
+ this.exchangeName = exchangeName;
18161
+ /**
18162
+ * Fetch candles from data source (API or database).
18163
+ *
18164
+ * @param symbol - Trading pair symbol (e.g., "BTCUSDT")
18165
+ * @param interval - Candle time interval (e.g., "1m", "1h")
18166
+ * @param since - Start date for candle fetching
18167
+ * @param limit - Maximum number of candles to fetch
18168
+ * @returns Promise resolving to array of OHLCV candle data
18169
+ *
18170
+ * @example
18171
+ * ```typescript
18172
+ * const instance = new ExchangeInstance("binance");
18173
+ * const candles = await instance.getCandles("BTCUSDT", "1m", new Date(), 100);
18174
+ * ```
18175
+ */
18176
+ this.getCandles = async (symbol, interval, since, limit) => {
18177
+ backtest$1.loggerService.info(EXCHANGE_METHOD_NAME_GET_CANDLES, {
18178
+ exchangeName: this.exchangeName,
18179
+ symbol,
18180
+ interval,
18181
+ since,
18182
+ limit,
18183
+ });
18184
+ return await this._schema.getCandles(symbol, interval, since, limit);
18185
+ };
18186
+ /**
18187
+ * Format quantity according to exchange precision rules.
18188
+ *
18189
+ * @param symbol - Trading pair symbol
18190
+ * @param quantity - Raw quantity value
18191
+ * @returns Promise resolving to formatted quantity string
18192
+ *
18193
+ * @example
18194
+ * ```typescript
18195
+ * const instance = new ExchangeInstance("binance");
18196
+ * const formatted = await instance.formatQuantity("BTCUSDT", 0.001);
18197
+ * console.log(formatted); // "0.001"
18198
+ * ```
18199
+ */
18200
+ this.formatQuantity = async (symbol, quantity) => {
18201
+ backtest$1.loggerService.info(EXCHANGE_METHOD_NAME_FORMAT_QUANTITY, {
18202
+ exchangeName: this.exchangeName,
18203
+ symbol,
18204
+ quantity,
18205
+ });
18206
+ return await this._schema.formatQuantity(symbol, quantity);
18207
+ };
18208
+ /**
18209
+ * Format price according to exchange precision rules.
18210
+ *
18211
+ * @param symbol - Trading pair symbol
18212
+ * @param price - Raw price value
18213
+ * @returns Promise resolving to formatted price string
18214
+ *
18215
+ * @example
18216
+ * ```typescript
18217
+ * const instance = new ExchangeInstance("binance");
18218
+ * const formatted = await instance.formatPrice("BTCUSDT", 50000.123);
18219
+ * console.log(formatted); // "50000.12"
18220
+ * ```
18221
+ */
18222
+ this.formatPrice = async (symbol, price) => {
18223
+ backtest$1.loggerService.info(EXCHANGE_METHOD_NAME_FORMAT_PRICE, {
18224
+ exchangeName: this.exchangeName,
18225
+ symbol,
18226
+ price,
18227
+ });
18228
+ return await this._schema.formatPrice(symbol, price);
18229
+ };
18230
+ this._schema = backtest$1.exchangeSchemaService.get(this.exchangeName);
18231
+ }
18232
+ }
18233
+ /**
18234
+ * Utility class for exchange operations.
18235
+ *
18236
+ * Provides simplified access to exchange schema methods with validation.
18237
+ * Exported as singleton instance for convenient usage.
18238
+ *
18239
+ * @example
18240
+ * ```typescript
18241
+ * import { Exchange } from "./classes/Exchange";
18242
+ *
18243
+ * const candles = await Exchange.getCandles("BTCUSDT", "1m", new Date(), 100, {
18244
+ * exchangeName: "binance"
18245
+ * });
18246
+ * const formatted = await Exchange.formatQuantity("BTCUSDT", 0.001, {
18247
+ * exchangeName: "binance"
18248
+ * });
18249
+ * ```
18250
+ */
18251
+ class ExchangeUtils {
18252
+ constructor() {
18253
+ /**
18254
+ * Memoized function to get or create ExchangeInstance for an exchange.
18255
+ * Each exchange gets its own isolated instance.
18256
+ */
18257
+ this._getInstance = memoize(([exchangeName]) => exchangeName, (exchangeName) => new ExchangeInstance(exchangeName));
18258
+ /**
18259
+ * Fetch candles from data source (API or database).
18260
+ *
18261
+ * @param symbol - Trading pair symbol (e.g., "BTCUSDT")
18262
+ * @param interval - Candle time interval (e.g., "1m", "1h")
18263
+ * @param since - Start date for candle fetching
18264
+ * @param limit - Maximum number of candles to fetch
18265
+ * @param context - Execution context with exchange name
18266
+ * @returns Promise resolving to array of OHLCV candle data
18267
+ */
18268
+ this.getCandles = async (symbol, interval, since, limit, context) => {
18269
+ backtest$1.exchangeValidationService.validate(context.exchangeName, EXCHANGE_METHOD_NAME_GET_CANDLES);
18270
+ const instance = this._getInstance(context.exchangeName);
18271
+ return await instance.getCandles(symbol, interval, since, limit);
18272
+ };
18273
+ /**
18274
+ * Format quantity according to exchange precision rules.
18275
+ *
18276
+ * @param symbol - Trading pair symbol
18277
+ * @param quantity - Raw quantity value
18278
+ * @param context - Execution context with exchange name
18279
+ * @returns Promise resolving to formatted quantity string
18280
+ */
18281
+ this.formatQuantity = async (symbol, quantity, context) => {
18282
+ backtest$1.exchangeValidationService.validate(context.exchangeName, EXCHANGE_METHOD_NAME_FORMAT_QUANTITY);
18283
+ const instance = this._getInstance(context.exchangeName);
18284
+ return await instance.formatQuantity(symbol, quantity);
18285
+ };
18286
+ /**
18287
+ * Format price according to exchange precision rules.
18288
+ *
18289
+ * @param symbol - Trading pair symbol
18290
+ * @param price - Raw price value
18291
+ * @param context - Execution context with exchange name
18292
+ * @returns Promise resolving to formatted price string
18293
+ */
18294
+ this.formatPrice = async (symbol, price, context) => {
18295
+ backtest$1.exchangeValidationService.validate(context.exchangeName, EXCHANGE_METHOD_NAME_FORMAT_PRICE);
18296
+ const instance = this._getInstance(context.exchangeName);
18297
+ return await instance.formatPrice(symbol, price);
18298
+ };
18299
+ }
18300
+ }
18301
+ /**
18302
+ * Singleton instance of ExchangeUtils for convenient exchange operations.
18303
+ *
18304
+ * @example
18305
+ * ```typescript
18306
+ * import { Exchange } from "./classes/Exchange";
18307
+ *
18308
+ * // Using static-like API with context
18309
+ * const candles = await Exchange.getCandles("BTCUSDT", "1m", new Date(), 100, {
18310
+ * exchangeName: "binance"
18311
+ * });
18312
+ * const qty = await Exchange.formatQuantity("BTCUSDT", 0.001, {
18313
+ * exchangeName: "binance"
18314
+ * });
18315
+ * const price = await Exchange.formatPrice("BTCUSDT", 50000.123, {
18316
+ * exchangeName: "binance"
18317
+ * });
18318
+ *
18319
+ * // Using instance API (no context needed, exchange set in constructor)
18320
+ * const binance = new ExchangeInstance("binance");
18321
+ * const candles2 = await binance.getCandles("BTCUSDT", "1m", new Date(), 100);
18322
+ * ```
18323
+ */
18324
+ const Exchange = new ExchangeUtils();
18325
+
18326
+ export { Backtest, Constant, Exchange, ExecutionContextService, Heat, Live, MethodContextService, Optimizer, Partial, Performance, PersistBase, PersistPartialAdapter, PersistRiskAdapter, PersistScheduleAdapter, PersistSignalAdapter, PositionSize, Risk, Schedule, Walker, addExchange, addFrame, addOptimizer, addRisk, addSizing, addStrategy, addWalker, dumpSignal, emitters, formatPrice, formatQuantity, getAveragePrice, getCandles, getColumns, getConfig, getDate, getDefaultColumns, getDefaultConfig, getMode, hasTradeContext, backtest as lib, listExchanges, listFrames, listOptimizers, listRisks, listSizings, listStrategies, listWalkers, listenBacktestProgress, listenDoneBacktest, listenDoneBacktestOnce, listenDoneLive, listenDoneLiveOnce, listenDoneWalker, listenDoneWalkerOnce, listenError, listenExit, listenOptimizerProgress, listenPartialLoss, listenPartialLossOnce, listenPartialProfit, listenPartialProfitOnce, listenPerformance, listenRisk, listenRiskOnce, listenSignal, listenSignalBacktest, listenSignalBacktestOnce, listenSignalLive, listenSignalLiveOnce, listenSignalOnce, listenValidation, listenWalker, listenWalkerComplete, listenWalkerOnce, listenWalkerProgress, setColumns, setConfig, setLogger };