backtest-kit 1.5.28 → 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
  },
@@ -6439,6 +6439,13 @@ class WalkerSchemaService {
6439
6439
  if (walkerSchema.strategies.length === 0) {
6440
6440
  throw new Error(`walker schema validation failed: strategies array cannot be empty for walkerName=${walkerSchema.walkerName}`);
6441
6441
  }
6442
+ if (walkerSchema.strategies &&
6443
+ walkerSchema.strategies.length !== new Set(walkerSchema.strategies).size) {
6444
+ throw new Error(`walker schema validation failed: found duplicate strategies for walkerName=${walkerSchema.walkerName} strategies=[${walkerSchema.strategies}]`);
6445
+ }
6446
+ if (walkerSchema.strategies?.some((value) => typeof value !== "string")) {
6447
+ throw new Error(`walker schema validation failed: invalid strategies for walkerName=${walkerSchema.walkerName} strategies=[${walkerSchema.strategies}]`);
6448
+ }
6442
6449
  };
6443
6450
  /**
6444
6451
  * Overrides an existing walker schema with partial updates.
@@ -13652,7 +13659,7 @@ const backtest = {
13652
13659
  ...templateServices,
13653
13660
  };
13654
13661
  init();
13655
- var bt = backtest;
13662
+ var backtest$1 = backtest;
13656
13663
 
13657
13664
  /**
13658
13665
  * Sets custom logger implementation for the framework.
@@ -13672,7 +13679,7 @@ var bt = backtest;
13672
13679
  * ```
13673
13680
  */
13674
13681
  function setLogger(logger) {
13675
- bt.loggerService.setLogger(logger);
13682
+ backtest$1.loggerService.setLogger(logger);
13676
13683
  }
13677
13684
  /**
13678
13685
  * Sets global configuration parameters for the framework.
@@ -13690,7 +13697,7 @@ function setConfig(config, _unsafe) {
13690
13697
  const prevConfig = Object.assign({}, GLOBAL_CONFIG);
13691
13698
  try {
13692
13699
  Object.assign(GLOBAL_CONFIG, config);
13693
- !_unsafe && bt.configValidationService.validate();
13700
+ !_unsafe && backtest$1.configValidationService.validate();
13694
13701
  }
13695
13702
  catch (error) {
13696
13703
  console.warn(`backtest-kit setConfig failed: ${getErrorMessage(error)}`, config);
@@ -13761,7 +13768,7 @@ function setColumns(columns, _unsafe) {
13761
13768
  const prevConfig = Object.assign({}, COLUMN_CONFIG);
13762
13769
  try {
13763
13770
  Object.assign(COLUMN_CONFIG, columns);
13764
- !_unsafe && bt.columnValidationService.validate();
13771
+ !_unsafe && backtest$1.columnValidationService.validate();
13765
13772
  }
13766
13773
  catch (error) {
13767
13774
  console.warn(`backtest-kit setColumns failed: ${getErrorMessage(error)}`, columns);
@@ -13846,11 +13853,11 @@ const ADD_OPTIMIZER_METHOD_NAME = "add.addOptimizer";
13846
13853
  * ```
13847
13854
  */
13848
13855
  function addStrategy(strategySchema) {
13849
- bt.loggerService.info(ADD_STRATEGY_METHOD_NAME, {
13856
+ backtest$1.loggerService.info(ADD_STRATEGY_METHOD_NAME, {
13850
13857
  strategySchema,
13851
13858
  });
13852
- bt.strategyValidationService.addStrategy(strategySchema.strategyName, strategySchema);
13853
- bt.strategySchemaService.register(strategySchema.strategyName, strategySchema);
13859
+ backtest$1.strategyValidationService.addStrategy(strategySchema.strategyName, strategySchema);
13860
+ backtest$1.strategySchemaService.register(strategySchema.strategyName, strategySchema);
13854
13861
  }
13855
13862
  /**
13856
13863
  * Registers an exchange data source in the framework.
@@ -13888,11 +13895,11 @@ function addStrategy(strategySchema) {
13888
13895
  * ```
13889
13896
  */
13890
13897
  function addExchange(exchangeSchema) {
13891
- bt.loggerService.info(ADD_EXCHANGE_METHOD_NAME, {
13898
+ backtest$1.loggerService.info(ADD_EXCHANGE_METHOD_NAME, {
13892
13899
  exchangeSchema,
13893
13900
  });
13894
- bt.exchangeValidationService.addExchange(exchangeSchema.exchangeName, exchangeSchema);
13895
- bt.exchangeSchemaService.register(exchangeSchema.exchangeName, exchangeSchema);
13901
+ backtest$1.exchangeValidationService.addExchange(exchangeSchema.exchangeName, exchangeSchema);
13902
+ backtest$1.exchangeSchemaService.register(exchangeSchema.exchangeName, exchangeSchema);
13896
13903
  }
13897
13904
  /**
13898
13905
  * Registers a timeframe generator for backtesting.
@@ -13925,11 +13932,11 @@ function addExchange(exchangeSchema) {
13925
13932
  * ```
13926
13933
  */
13927
13934
  function addFrame(frameSchema) {
13928
- bt.loggerService.info(ADD_FRAME_METHOD_NAME, {
13935
+ backtest$1.loggerService.info(ADD_FRAME_METHOD_NAME, {
13929
13936
  frameSchema,
13930
13937
  });
13931
- bt.frameValidationService.addFrame(frameSchema.frameName, frameSchema);
13932
- bt.frameSchemaService.register(frameSchema.frameName, frameSchema);
13938
+ backtest$1.frameValidationService.addFrame(frameSchema.frameName, frameSchema);
13939
+ backtest$1.frameSchemaService.register(frameSchema.frameName, frameSchema);
13933
13940
  }
13934
13941
  /**
13935
13942
  * Registers a walker for strategy comparison.
@@ -13969,11 +13976,11 @@ function addFrame(frameSchema) {
13969
13976
  * ```
13970
13977
  */
13971
13978
  function addWalker(walkerSchema) {
13972
- bt.loggerService.info(ADD_WALKER_METHOD_NAME, {
13979
+ backtest$1.loggerService.info(ADD_WALKER_METHOD_NAME, {
13973
13980
  walkerSchema,
13974
13981
  });
13975
- bt.walkerValidationService.addWalker(walkerSchema.walkerName, walkerSchema);
13976
- bt.walkerSchemaService.register(walkerSchema.walkerName, walkerSchema);
13982
+ backtest$1.walkerValidationService.addWalker(walkerSchema.walkerName, walkerSchema);
13983
+ backtest$1.walkerSchemaService.register(walkerSchema.walkerName, walkerSchema);
13977
13984
  }
13978
13985
  /**
13979
13986
  * Registers a position sizing configuration in the framework.
@@ -14028,11 +14035,11 @@ function addWalker(walkerSchema) {
14028
14035
  * ```
14029
14036
  */
14030
14037
  function addSizing(sizingSchema) {
14031
- bt.loggerService.info(ADD_SIZING_METHOD_NAME, {
14038
+ backtest$1.loggerService.info(ADD_SIZING_METHOD_NAME, {
14032
14039
  sizingSchema,
14033
14040
  });
14034
- bt.sizingValidationService.addSizing(sizingSchema.sizingName, sizingSchema);
14035
- bt.sizingSchemaService.register(sizingSchema.sizingName, sizingSchema);
14041
+ backtest$1.sizingValidationService.addSizing(sizingSchema.sizingName, sizingSchema);
14042
+ backtest$1.sizingSchemaService.register(sizingSchema.sizingName, sizingSchema);
14036
14043
  }
14037
14044
  /**
14038
14045
  * Registers a risk management configuration in the framework.
@@ -14096,11 +14103,11 @@ function addSizing(sizingSchema) {
14096
14103
  * ```
14097
14104
  */
14098
14105
  function addRisk(riskSchema) {
14099
- bt.loggerService.info(ADD_RISK_METHOD_NAME, {
14106
+ backtest$1.loggerService.info(ADD_RISK_METHOD_NAME, {
14100
14107
  riskSchema,
14101
14108
  });
14102
- bt.riskValidationService.addRisk(riskSchema.riskName, riskSchema);
14103
- bt.riskSchemaService.register(riskSchema.riskName, riskSchema);
14109
+ backtest$1.riskValidationService.addRisk(riskSchema.riskName, riskSchema);
14110
+ backtest$1.riskSchemaService.register(riskSchema.riskName, riskSchema);
14104
14111
  }
14105
14112
  /**
14106
14113
  * Registers an optimizer configuration in the framework.
@@ -14190,11 +14197,11 @@ function addRisk(riskSchema) {
14190
14197
  * ```
14191
14198
  */
14192
14199
  function addOptimizer(optimizerSchema) {
14193
- bt.loggerService.info(ADD_OPTIMIZER_METHOD_NAME, {
14200
+ backtest$1.loggerService.info(ADD_OPTIMIZER_METHOD_NAME, {
14194
14201
  optimizerSchema,
14195
14202
  });
14196
- bt.optimizerValidationService.addOptimizer(optimizerSchema.optimizerName, optimizerSchema);
14197
- bt.optimizerSchemaService.register(optimizerSchema.optimizerName, optimizerSchema);
14203
+ backtest$1.optimizerValidationService.addOptimizer(optimizerSchema.optimizerName, optimizerSchema);
14204
+ backtest$1.optimizerSchemaService.register(optimizerSchema.optimizerName, optimizerSchema);
14198
14205
  }
14199
14206
 
14200
14207
  const LIST_EXCHANGES_METHOD_NAME = "list.listExchanges";
@@ -14230,8 +14237,8 @@ const LIST_OPTIMIZERS_METHOD_NAME = "list.listOptimizers";
14230
14237
  * ```
14231
14238
  */
14232
14239
  async function listExchanges() {
14233
- bt.loggerService.log(LIST_EXCHANGES_METHOD_NAME);
14234
- return await bt.exchangeValidationService.list();
14240
+ backtest$1.loggerService.log(LIST_EXCHANGES_METHOD_NAME);
14241
+ return await backtest$1.exchangeValidationService.list();
14235
14242
  }
14236
14243
  /**
14237
14244
  * Returns a list of all registered strategy schemas.
@@ -14264,8 +14271,8 @@ async function listExchanges() {
14264
14271
  * ```
14265
14272
  */
14266
14273
  async function listStrategies() {
14267
- bt.loggerService.log(LIST_STRATEGIES_METHOD_NAME);
14268
- return await bt.strategyValidationService.list();
14274
+ backtest$1.loggerService.log(LIST_STRATEGIES_METHOD_NAME);
14275
+ return await backtest$1.strategyValidationService.list();
14269
14276
  }
14270
14277
  /**
14271
14278
  * Returns a list of all registered frame schemas.
@@ -14293,8 +14300,8 @@ async function listStrategies() {
14293
14300
  * ```
14294
14301
  */
14295
14302
  async function listFrames() {
14296
- bt.loggerService.log(LIST_FRAMES_METHOD_NAME);
14297
- return await bt.frameValidationService.list();
14303
+ backtest$1.loggerService.log(LIST_FRAMES_METHOD_NAME);
14304
+ return await backtest$1.frameValidationService.list();
14298
14305
  }
14299
14306
  /**
14300
14307
  * Returns a list of all registered walker schemas.
@@ -14323,8 +14330,8 @@ async function listFrames() {
14323
14330
  * ```
14324
14331
  */
14325
14332
  async function listWalkers() {
14326
- bt.loggerService.log(LIST_WALKERS_METHOD_NAME);
14327
- return await bt.walkerValidationService.list();
14333
+ backtest$1.loggerService.log(LIST_WALKERS_METHOD_NAME);
14334
+ return await backtest$1.walkerValidationService.list();
14328
14335
  }
14329
14336
  /**
14330
14337
  * Returns a list of all registered sizing schemas.
@@ -14362,8 +14369,8 @@ async function listWalkers() {
14362
14369
  * ```
14363
14370
  */
14364
14371
  async function listSizings() {
14365
- bt.loggerService.log(LIST_SIZINGS_METHOD_NAME);
14366
- return await bt.sizingValidationService.list();
14372
+ backtest$1.loggerService.log(LIST_SIZINGS_METHOD_NAME);
14373
+ return await backtest$1.sizingValidationService.list();
14367
14374
  }
14368
14375
  /**
14369
14376
  * Returns a list of all registered risk schemas.
@@ -14398,8 +14405,8 @@ async function listSizings() {
14398
14405
  * ```
14399
14406
  */
14400
14407
  async function listRisks() {
14401
- bt.loggerService.log(LIST_RISKS_METHOD_NAME);
14402
- return await bt.riskValidationService.list();
14408
+ backtest$1.loggerService.log(LIST_RISKS_METHOD_NAME);
14409
+ return await backtest$1.riskValidationService.list();
14403
14410
  }
14404
14411
  /**
14405
14412
  * Returns a list of all registered optimizer schemas.
@@ -14438,8 +14445,8 @@ async function listRisks() {
14438
14445
  * ```
14439
14446
  */
14440
14447
  async function listOptimizers() {
14441
- bt.loggerService.log(LIST_OPTIMIZERS_METHOD_NAME);
14442
- return await bt.optimizerValidationService.list();
14448
+ backtest$1.loggerService.log(LIST_OPTIMIZERS_METHOD_NAME);
14449
+ return await backtest$1.optimizerValidationService.list();
14443
14450
  }
14444
14451
 
14445
14452
  const LISTEN_SIGNAL_METHOD_NAME = "event.listenSignal";
@@ -14496,7 +14503,7 @@ const LISTEN_RISK_ONCE_METHOD_NAME = "event.listenRiskOnce";
14496
14503
  * ```
14497
14504
  */
14498
14505
  function listenSignal(fn) {
14499
- bt.loggerService.log(LISTEN_SIGNAL_METHOD_NAME);
14506
+ backtest$1.loggerService.log(LISTEN_SIGNAL_METHOD_NAME);
14500
14507
  return signalEmitter.subscribe(queued(async (event) => fn(event)));
14501
14508
  }
14502
14509
  /**
@@ -14532,7 +14539,7 @@ function listenSignal(fn) {
14532
14539
  * ```
14533
14540
  */
14534
14541
  function listenSignalOnce(filterFn, fn) {
14535
- bt.loggerService.log(LISTEN_SIGNAL_ONCE_METHOD_NAME);
14542
+ backtest$1.loggerService.log(LISTEN_SIGNAL_ONCE_METHOD_NAME);
14536
14543
  return signalEmitter.filter(filterFn).once(fn);
14537
14544
  }
14538
14545
  /**
@@ -14556,7 +14563,7 @@ function listenSignalOnce(filterFn, fn) {
14556
14563
  * ```
14557
14564
  */
14558
14565
  function listenSignalLive(fn) {
14559
- bt.loggerService.log(LISTEN_SIGNAL_LIVE_METHOD_NAME);
14566
+ backtest$1.loggerService.log(LISTEN_SIGNAL_LIVE_METHOD_NAME);
14560
14567
  return signalLiveEmitter.subscribe(queued(async (event) => fn(event)));
14561
14568
  }
14562
14569
  /**
@@ -14581,7 +14588,7 @@ function listenSignalLive(fn) {
14581
14588
  * ```
14582
14589
  */
14583
14590
  function listenSignalLiveOnce(filterFn, fn) {
14584
- bt.loggerService.log(LISTEN_SIGNAL_LIVE_ONCE_METHOD_NAME);
14591
+ backtest$1.loggerService.log(LISTEN_SIGNAL_LIVE_ONCE_METHOD_NAME);
14585
14592
  return signalLiveEmitter.filter(filterFn).once(fn);
14586
14593
  }
14587
14594
  /**
@@ -14605,7 +14612,7 @@ function listenSignalLiveOnce(filterFn, fn) {
14605
14612
  * ```
14606
14613
  */
14607
14614
  function listenSignalBacktest(fn) {
14608
- bt.loggerService.log(LISTEN_SIGNAL_BACKTEST_METHOD_NAME);
14615
+ backtest$1.loggerService.log(LISTEN_SIGNAL_BACKTEST_METHOD_NAME);
14609
14616
  return signalBacktestEmitter.subscribe(queued(async (event) => fn(event)));
14610
14617
  }
14611
14618
  /**
@@ -14630,7 +14637,7 @@ function listenSignalBacktest(fn) {
14630
14637
  * ```
14631
14638
  */
14632
14639
  function listenSignalBacktestOnce(filterFn, fn) {
14633
- bt.loggerService.log(LISTEN_SIGNAL_BACKTEST_ONCE_METHOD_NAME);
14640
+ backtest$1.loggerService.log(LISTEN_SIGNAL_BACKTEST_ONCE_METHOD_NAME);
14634
14641
  return signalBacktestEmitter.filter(filterFn).once(fn);
14635
14642
  }
14636
14643
  /**
@@ -14658,7 +14665,7 @@ function listenSignalBacktestOnce(filterFn, fn) {
14658
14665
  * ```
14659
14666
  */
14660
14667
  function listenError(fn) {
14661
- bt.loggerService.log(LISTEN_ERROR_METHOD_NAME);
14668
+ backtest$1.loggerService.log(LISTEN_ERROR_METHOD_NAME);
14662
14669
  return errorEmitter.subscribe(queued(async (error) => fn(error)));
14663
14670
  }
14664
14671
  /**
@@ -14686,7 +14693,7 @@ function listenError(fn) {
14686
14693
  * ```
14687
14694
  */
14688
14695
  function listenExit(fn) {
14689
- bt.loggerService.log(LISTEN_EXIT_METHOD_NAME);
14696
+ backtest$1.loggerService.log(LISTEN_EXIT_METHOD_NAME);
14690
14697
  return exitEmitter.subscribe(queued(async (error) => fn(error)));
14691
14698
  }
14692
14699
  /**
@@ -14717,7 +14724,7 @@ function listenExit(fn) {
14717
14724
  * ```
14718
14725
  */
14719
14726
  function listenDoneLive(fn) {
14720
- bt.loggerService.log(LISTEN_DONE_LIVE_METHOD_NAME);
14727
+ backtest$1.loggerService.log(LISTEN_DONE_LIVE_METHOD_NAME);
14721
14728
  return doneLiveSubject.subscribe(queued(async (event) => fn(event)));
14722
14729
  }
14723
14730
  /**
@@ -14747,7 +14754,7 @@ function listenDoneLive(fn) {
14747
14754
  * ```
14748
14755
  */
14749
14756
  function listenDoneLiveOnce(filterFn, fn) {
14750
- bt.loggerService.log(LISTEN_DONE_LIVE_ONCE_METHOD_NAME);
14757
+ backtest$1.loggerService.log(LISTEN_DONE_LIVE_ONCE_METHOD_NAME);
14751
14758
  return doneLiveSubject.filter(filterFn).once(fn);
14752
14759
  }
14753
14760
  /**
@@ -14779,7 +14786,7 @@ function listenDoneLiveOnce(filterFn, fn) {
14779
14786
  * ```
14780
14787
  */
14781
14788
  function listenDoneBacktest(fn) {
14782
- bt.loggerService.log(LISTEN_DONE_BACKTEST_METHOD_NAME);
14789
+ backtest$1.loggerService.log(LISTEN_DONE_BACKTEST_METHOD_NAME);
14783
14790
  return doneBacktestSubject.subscribe(queued(async (event) => fn(event)));
14784
14791
  }
14785
14792
  /**
@@ -14810,7 +14817,7 @@ function listenDoneBacktest(fn) {
14810
14817
  * ```
14811
14818
  */
14812
14819
  function listenDoneBacktestOnce(filterFn, fn) {
14813
- bt.loggerService.log(LISTEN_DONE_BACKTEST_ONCE_METHOD_NAME);
14820
+ backtest$1.loggerService.log(LISTEN_DONE_BACKTEST_ONCE_METHOD_NAME);
14814
14821
  return doneBacktestSubject.filter(filterFn).once(fn);
14815
14822
  }
14816
14823
  /**
@@ -14840,7 +14847,7 @@ function listenDoneBacktestOnce(filterFn, fn) {
14840
14847
  * ```
14841
14848
  */
14842
14849
  function listenDoneWalker(fn) {
14843
- bt.loggerService.log(LISTEN_DONE_WALKER_METHOD_NAME);
14850
+ backtest$1.loggerService.log(LISTEN_DONE_WALKER_METHOD_NAME);
14844
14851
  return doneWalkerSubject.subscribe(queued(async (event) => fn(event)));
14845
14852
  }
14846
14853
  /**
@@ -14869,7 +14876,7 @@ function listenDoneWalker(fn) {
14869
14876
  * ```
14870
14877
  */
14871
14878
  function listenDoneWalkerOnce(filterFn, fn) {
14872
- bt.loggerService.log(LISTEN_DONE_WALKER_ONCE_METHOD_NAME);
14879
+ backtest$1.loggerService.log(LISTEN_DONE_WALKER_ONCE_METHOD_NAME);
14873
14880
  return doneWalkerSubject.filter(filterFn).once(fn);
14874
14881
  }
14875
14882
  /**
@@ -14903,7 +14910,7 @@ function listenDoneWalkerOnce(filterFn, fn) {
14903
14910
  * ```
14904
14911
  */
14905
14912
  function listenBacktestProgress(fn) {
14906
- bt.loggerService.log(LISTEN_PROGRESS_METHOD_NAME);
14913
+ backtest$1.loggerService.log(LISTEN_PROGRESS_METHOD_NAME);
14907
14914
  return progressBacktestEmitter.subscribe(queued(async (event) => fn(event)));
14908
14915
  }
14909
14916
  /**
@@ -14937,7 +14944,7 @@ function listenBacktestProgress(fn) {
14937
14944
  * ```
14938
14945
  */
14939
14946
  function listenWalkerProgress(fn) {
14940
- bt.loggerService.log(LISTEN_PROGRESS_WALKER_METHOD_NAME);
14947
+ backtest$1.loggerService.log(LISTEN_PROGRESS_WALKER_METHOD_NAME);
14941
14948
  return progressWalkerEmitter.subscribe(queued(async (event) => fn(event)));
14942
14949
  }
14943
14950
  /**
@@ -14965,7 +14972,7 @@ function listenWalkerProgress(fn) {
14965
14972
  * ```
14966
14973
  */
14967
14974
  function listenOptimizerProgress(fn) {
14968
- bt.loggerService.log(LISTEN_PROGRESS_OPTIMIZER_METHOD_NAME);
14975
+ backtest$1.loggerService.log(LISTEN_PROGRESS_OPTIMIZER_METHOD_NAME);
14969
14976
  return progressOptimizerEmitter.subscribe(queued(async (event) => fn(event)));
14970
14977
  }
14971
14978
  /**
@@ -15001,7 +15008,7 @@ function listenOptimizerProgress(fn) {
15001
15008
  * ```
15002
15009
  */
15003
15010
  function listenPerformance(fn) {
15004
- bt.loggerService.log(LISTEN_PERFORMANCE_METHOD_NAME);
15011
+ backtest$1.loggerService.log(LISTEN_PERFORMANCE_METHOD_NAME);
15005
15012
  return performanceEmitter.subscribe(queued(async (event) => fn(event)));
15006
15013
  }
15007
15014
  /**
@@ -15035,7 +15042,7 @@ function listenPerformance(fn) {
15035
15042
  * ```
15036
15043
  */
15037
15044
  function listenWalker(fn) {
15038
- bt.loggerService.log(LISTEN_WALKER_METHOD_NAME);
15045
+ backtest$1.loggerService.log(LISTEN_WALKER_METHOD_NAME);
15039
15046
  return walkerEmitter.subscribe(queued(async (event) => fn(event)));
15040
15047
  }
15041
15048
  /**
@@ -15078,7 +15085,7 @@ function listenWalker(fn) {
15078
15085
  * ```
15079
15086
  */
15080
15087
  function listenWalkerOnce(filterFn, fn) {
15081
- bt.loggerService.log(LISTEN_WALKER_ONCE_METHOD_NAME);
15088
+ backtest$1.loggerService.log(LISTEN_WALKER_ONCE_METHOD_NAME);
15082
15089
  return walkerEmitter.filter(filterFn).once(fn);
15083
15090
  }
15084
15091
  /**
@@ -15113,7 +15120,7 @@ function listenWalkerOnce(filterFn, fn) {
15113
15120
  * ```
15114
15121
  */
15115
15122
  function listenWalkerComplete(fn) {
15116
- bt.loggerService.log(LISTEN_WALKER_COMPLETE_METHOD_NAME);
15123
+ backtest$1.loggerService.log(LISTEN_WALKER_COMPLETE_METHOD_NAME);
15117
15124
  return walkerCompleteSubject.subscribe(queued(async (event) => fn(event)));
15118
15125
  }
15119
15126
  /**
@@ -15141,7 +15148,7 @@ function listenWalkerComplete(fn) {
15141
15148
  * ```
15142
15149
  */
15143
15150
  function listenValidation(fn) {
15144
- bt.loggerService.log(LISTEN_VALIDATION_METHOD_NAME);
15151
+ backtest$1.loggerService.log(LISTEN_VALIDATION_METHOD_NAME);
15145
15152
  return validationSubject.subscribe(queued(async (error) => fn(error)));
15146
15153
  }
15147
15154
  /**
@@ -15169,7 +15176,7 @@ function listenValidation(fn) {
15169
15176
  * ```
15170
15177
  */
15171
15178
  function listenPartialProfit(fn) {
15172
- bt.loggerService.log(LISTEN_PARTIAL_PROFIT_METHOD_NAME);
15179
+ backtest$1.loggerService.log(LISTEN_PARTIAL_PROFIT_METHOD_NAME);
15173
15180
  return partialProfitSubject.subscribe(queued(async (event) => fn(event)));
15174
15181
  }
15175
15182
  /**
@@ -15203,7 +15210,7 @@ function listenPartialProfit(fn) {
15203
15210
  * ```
15204
15211
  */
15205
15212
  function listenPartialProfitOnce(filterFn, fn) {
15206
- bt.loggerService.log(LISTEN_PARTIAL_PROFIT_ONCE_METHOD_NAME);
15213
+ backtest$1.loggerService.log(LISTEN_PARTIAL_PROFIT_ONCE_METHOD_NAME);
15207
15214
  return partialProfitSubject.filter(filterFn).once(fn);
15208
15215
  }
15209
15216
  /**
@@ -15231,7 +15238,7 @@ function listenPartialProfitOnce(filterFn, fn) {
15231
15238
  * ```
15232
15239
  */
15233
15240
  function listenPartialLoss(fn) {
15234
- bt.loggerService.log(LISTEN_PARTIAL_LOSS_METHOD_NAME);
15241
+ backtest$1.loggerService.log(LISTEN_PARTIAL_LOSS_METHOD_NAME);
15235
15242
  return partialLossSubject.subscribe(queued(async (event) => fn(event)));
15236
15243
  }
15237
15244
  /**
@@ -15265,7 +15272,7 @@ function listenPartialLoss(fn) {
15265
15272
  * ```
15266
15273
  */
15267
15274
  function listenPartialLossOnce(filterFn, fn) {
15268
- bt.loggerService.log(LISTEN_PARTIAL_LOSS_ONCE_METHOD_NAME);
15275
+ backtest$1.loggerService.log(LISTEN_PARTIAL_LOSS_ONCE_METHOD_NAME);
15269
15276
  return partialLossSubject.filter(filterFn).once(fn);
15270
15277
  }
15271
15278
  /**
@@ -15297,7 +15304,7 @@ function listenPartialLossOnce(filterFn, fn) {
15297
15304
  * ```
15298
15305
  */
15299
15306
  function listenRisk(fn) {
15300
- bt.loggerService.log(LISTEN_RISK_METHOD_NAME);
15307
+ backtest$1.loggerService.log(LISTEN_RISK_METHOD_NAME);
15301
15308
  return riskSubject.subscribe(queued(async (event) => fn(event)));
15302
15309
  }
15303
15310
  /**
@@ -15334,7 +15341,7 @@ function listenRisk(fn) {
15334
15341
  * ```
15335
15342
  */
15336
15343
  function listenRiskOnce(filterFn, fn) {
15337
- bt.loggerService.log(LISTEN_RISK_ONCE_METHOD_NAME);
15344
+ backtest$1.loggerService.log(LISTEN_RISK_ONCE_METHOD_NAME);
15338
15345
  return riskSubject.filter(filterFn).once(fn);
15339
15346
  }
15340
15347
 
@@ -15344,6 +15351,31 @@ const FORMAT_PRICE_METHOD_NAME = "exchange.formatPrice";
15344
15351
  const FORMAT_QUANTITY_METHOD_NAME = "exchange.formatQuantity";
15345
15352
  const GET_DATE_METHOD_NAME = "exchange.getDate";
15346
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
+ }
15347
15379
  /**
15348
15380
  * Fetches historical candle data from the registered exchange.
15349
15381
  *
@@ -15362,12 +15394,18 @@ const GET_MODE_METHOD_NAME = "exchange.getMode";
15362
15394
  * ```
15363
15395
  */
15364
15396
  async function getCandles(symbol, interval, limit) {
15365
- bt.loggerService.info(GET_CANDLES_METHOD_NAME, {
15397
+ backtest$1.loggerService.info(GET_CANDLES_METHOD_NAME, {
15366
15398
  symbol,
15367
15399
  interval,
15368
15400
  limit,
15369
15401
  });
15370
- 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);
15371
15409
  }
15372
15410
  /**
15373
15411
  * Calculates VWAP (Volume Weighted Average Price) for a symbol.
@@ -15388,10 +15426,16 @@ async function getCandles(symbol, interval, limit) {
15388
15426
  * ```
15389
15427
  */
15390
15428
  async function getAveragePrice(symbol) {
15391
- bt.loggerService.info(GET_AVERAGE_PRICE_METHOD_NAME, {
15429
+ backtest$1.loggerService.info(GET_AVERAGE_PRICE_METHOD_NAME, {
15392
15430
  symbol,
15393
15431
  });
15394
- 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);
15395
15439
  }
15396
15440
  /**
15397
15441
  * Formats a price value according to exchange rules.
@@ -15409,11 +15453,14 @@ async function getAveragePrice(symbol) {
15409
15453
  * ```
15410
15454
  */
15411
15455
  async function formatPrice(symbol, price) {
15412
- bt.loggerService.info(FORMAT_PRICE_METHOD_NAME, {
15456
+ backtest$1.loggerService.info(FORMAT_PRICE_METHOD_NAME, {
15413
15457
  symbol,
15414
15458
  price,
15415
15459
  });
15416
- 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);
15417
15464
  }
15418
15465
  /**
15419
15466
  * Formats a quantity value according to exchange rules.
@@ -15431,11 +15478,14 @@ async function formatPrice(symbol, price) {
15431
15478
  * ```
15432
15479
  */
15433
15480
  async function formatQuantity(symbol, quantity) {
15434
- bt.loggerService.info(FORMAT_QUANTITY_METHOD_NAME, {
15481
+ backtest$1.loggerService.info(FORMAT_QUANTITY_METHOD_NAME, {
15435
15482
  symbol,
15436
15483
  quantity,
15437
15484
  });
15438
- 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);
15439
15489
  }
15440
15490
  /**
15441
15491
  * Gets the current date from execution context.
@@ -15452,8 +15502,11 @@ async function formatQuantity(symbol, quantity) {
15452
15502
  * ```
15453
15503
  */
15454
15504
  async function getDate() {
15455
- bt.loggerService.info(GET_DATE_METHOD_NAME);
15456
- 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;
15457
15510
  return new Date(when.getTime());
15458
15511
  }
15459
15512
  /**
@@ -15472,9 +15525,12 @@ async function getDate() {
15472
15525
  * ```
15473
15526
  */
15474
15527
  async function getMode() {
15475
- bt.loggerService.info(GET_MODE_METHOD_NAME);
15476
- const { backtest: bt$1 } = bt.executionContextService.context;
15477
- 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";
15478
15534
  }
15479
15535
 
15480
15536
  const DUMP_SIGNAL_METHOD_NAME = "dump.dumpSignal";
@@ -15545,13 +15601,13 @@ const DUMP_SIGNAL_METHOD_NAME = "dump.dumpSignal";
15545
15601
  * ```
15546
15602
  */
15547
15603
  async function dumpSignal(signalId, history, signal, outputDir = "./dump/strategy") {
15548
- bt.loggerService.info(DUMP_SIGNAL_METHOD_NAME, {
15604
+ backtest$1.loggerService.info(DUMP_SIGNAL_METHOD_NAME, {
15549
15605
  signalId,
15550
15606
  history,
15551
15607
  signal,
15552
15608
  outputDir,
15553
15609
  });
15554
- return await bt.outlineMarkdownService.dumpSignal(signalId, history, signal, outputDir);
15610
+ return await backtest$1.outlineMarkdownService.dumpSignal(signalId, history, signal, outputDir);
15555
15611
  }
15556
15612
 
15557
15613
  const BACKTEST_METHOD_NAME_RUN = "BacktestUtils.run";
@@ -15638,7 +15694,7 @@ class BacktestInstance {
15638
15694
  * @internal
15639
15695
  */
15640
15696
  this.task = singlerun(async (symbol, context) => {
15641
- bt.loggerService.info(BACKTEST_METHOD_NAME_TASK, {
15697
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_TASK, {
15642
15698
  symbol,
15643
15699
  context,
15644
15700
  });
@@ -15657,7 +15713,7 @@ class BacktestInstance {
15657
15713
  * ```
15658
15714
  */
15659
15715
  this.getStatus = async () => {
15660
- bt.loggerService.info(BACKTEST_METHOD_NAME_GET_STATUS);
15716
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_GET_STATUS);
15661
15717
  return {
15662
15718
  id: this.id,
15663
15719
  symbol: this.symbol,
@@ -15673,27 +15729,27 @@ class BacktestInstance {
15673
15729
  * @returns Async generator yielding closed signals with PNL
15674
15730
  */
15675
15731
  this.run = (symbol, context) => {
15676
- bt.loggerService.info(BACKTEST_METHOD_NAME_RUN, {
15732
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_RUN, {
15677
15733
  symbol,
15678
15734
  context,
15679
15735
  });
15680
15736
  {
15681
- bt.backtestMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15682
- bt.liveMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15683
- bt.scheduleMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15684
- bt.performanceMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15685
- bt.partialMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15686
- 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 });
15687
15743
  }
15688
15744
  {
15689
- bt.strategyCoreService.clear(true, { symbol, strategyName: context.strategyName });
15745
+ backtest$1.strategyCoreService.clear(true, { symbol, strategyName: context.strategyName });
15690
15746
  }
15691
15747
  {
15692
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
15693
- riskName && bt.riskGlobalService.clear(true, riskName);
15694
- 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));
15695
15751
  }
15696
- return bt.backtestCommandService.run(symbol, context);
15752
+ return backtest$1.backtestCommandService.run(symbol, context);
15697
15753
  };
15698
15754
  /**
15699
15755
  * Runs backtest in background without yielding results.
@@ -15716,7 +15772,7 @@ class BacktestInstance {
15716
15772
  * ```
15717
15773
  */
15718
15774
  this.background = (symbol, context) => {
15719
- bt.loggerService.info(BACKTEST_METHOD_NAME_BACKGROUND, {
15775
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_BACKGROUND, {
15720
15776
  symbol,
15721
15777
  context,
15722
15778
  });
@@ -15731,8 +15787,8 @@ class BacktestInstance {
15731
15787
  }
15732
15788
  this.task(symbol, context).catch((error) => exitEmitter.next(new Error(getErrorMessage(error))));
15733
15789
  return () => {
15734
- bt.strategyCoreService.stop(true, { symbol, strategyName: context.strategyName });
15735
- bt.strategyCoreService
15790
+ backtest$1.strategyCoreService.stop(true, { symbol, strategyName: context.strategyName });
15791
+ backtest$1.strategyCoreService
15736
15792
  .getPendingSignal(true, symbol, context.strategyName)
15737
15793
  .then(async (pendingSignal) => {
15738
15794
  if (pendingSignal) {
@@ -15769,11 +15825,11 @@ class BacktestInstance {
15769
15825
  * ```
15770
15826
  */
15771
15827
  this.stop = async (symbol, strategyName) => {
15772
- bt.loggerService.info(BACKTEST_METHOD_NAME_STOP, {
15828
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_STOP, {
15773
15829
  symbol,
15774
15830
  strategyName,
15775
15831
  });
15776
- await bt.strategyCoreService.stop(true, { symbol, strategyName });
15832
+ await backtest$1.strategyCoreService.stop(true, { symbol, strategyName });
15777
15833
  };
15778
15834
  /**
15779
15835
  * Gets statistical data from all closed signals for a symbol-strategy pair.
@@ -15790,11 +15846,11 @@ class BacktestInstance {
15790
15846
  * ```
15791
15847
  */
15792
15848
  this.getData = async (symbol, strategyName) => {
15793
- bt.loggerService.info("BacktestUtils.getData", {
15849
+ backtest$1.loggerService.info("BacktestUtils.getData", {
15794
15850
  symbol,
15795
15851
  strategyName,
15796
15852
  });
15797
- return await bt.backtestMarkdownService.getData(symbol, strategyName, true);
15853
+ return await backtest$1.backtestMarkdownService.getData(symbol, strategyName, true);
15798
15854
  };
15799
15855
  /**
15800
15856
  * Generates markdown report with all closed signals for a symbol-strategy pair.
@@ -15812,11 +15868,11 @@ class BacktestInstance {
15812
15868
  * ```
15813
15869
  */
15814
15870
  this.getReport = async (symbol, strategyName, columns) => {
15815
- bt.loggerService.info(BACKTEST_METHOD_NAME_GET_REPORT, {
15871
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_GET_REPORT, {
15816
15872
  symbol,
15817
15873
  strategyName,
15818
15874
  });
15819
- return await bt.backtestMarkdownService.getReport(symbol, strategyName, true, columns);
15875
+ return await backtest$1.backtestMarkdownService.getReport(symbol, strategyName, true, columns);
15820
15876
  };
15821
15877
  /**
15822
15878
  * Saves strategy report to disk.
@@ -15837,12 +15893,12 @@ class BacktestInstance {
15837
15893
  * ```
15838
15894
  */
15839
15895
  this.dump = async (symbol, strategyName, path, columns) => {
15840
- bt.loggerService.info(BACKTEST_METHOD_NAME_DUMP, {
15896
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_DUMP, {
15841
15897
  symbol,
15842
15898
  strategyName,
15843
15899
  path,
15844
15900
  });
15845
- await bt.backtestMarkdownService.dump(symbol, strategyName, true, path, columns);
15901
+ await backtest$1.backtestMarkdownService.dump(symbol, strategyName, true, path, columns);
15846
15902
  };
15847
15903
  }
15848
15904
  }
@@ -15881,14 +15937,14 @@ class BacktestUtils {
15881
15937
  */
15882
15938
  this.run = (symbol, context) => {
15883
15939
  {
15884
- bt.strategyValidationService.validate(context.strategyName, BACKTEST_METHOD_NAME_RUN);
15885
- bt.exchangeValidationService.validate(context.exchangeName, BACKTEST_METHOD_NAME_RUN);
15886
- 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);
15887
15943
  }
15888
15944
  {
15889
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
15890
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_RUN);
15891
- 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));
15892
15948
  }
15893
15949
  const instance = this._getInstance(symbol, context.strategyName);
15894
15950
  return instance.run(symbol, context);
@@ -15915,13 +15971,13 @@ class BacktestUtils {
15915
15971
  * ```
15916
15972
  */
15917
15973
  this.background = (symbol, context) => {
15918
- bt.strategyValidationService.validate(context.strategyName, BACKTEST_METHOD_NAME_BACKGROUND);
15919
- bt.exchangeValidationService.validate(context.exchangeName, BACKTEST_METHOD_NAME_BACKGROUND);
15920
- 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);
15921
15977
  {
15922
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
15923
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_BACKGROUND);
15924
- 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));
15925
15981
  }
15926
15982
  const instance = this._getInstance(symbol, context.strategyName);
15927
15983
  return instance.background(symbol, context);
@@ -15944,11 +16000,11 @@ class BacktestUtils {
15944
16000
  * ```
15945
16001
  */
15946
16002
  this.stop = async (symbol, strategyName) => {
15947
- bt.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_STOP);
16003
+ backtest$1.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_STOP);
15948
16004
  {
15949
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
15950
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_STOP);
15951
- 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));
15952
16008
  }
15953
16009
  const instance = this._getInstance(symbol, strategyName);
15954
16010
  return await instance.stop(symbol, strategyName);
@@ -15967,11 +16023,11 @@ class BacktestUtils {
15967
16023
  * ```
15968
16024
  */
15969
16025
  this.getData = async (symbol, strategyName) => {
15970
- bt.strategyValidationService.validate(strategyName, "BacktestUtils.getData");
16026
+ backtest$1.strategyValidationService.validate(strategyName, "BacktestUtils.getData");
15971
16027
  {
15972
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
15973
- riskName && bt.riskValidationService.validate(riskName, "BacktestUtils.getData");
15974
- 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"));
15975
16031
  }
15976
16032
  const instance = this._getInstance(symbol, strategyName);
15977
16033
  return await instance.getData(symbol, strategyName);
@@ -15991,11 +16047,11 @@ class BacktestUtils {
15991
16047
  * ```
15992
16048
  */
15993
16049
  this.getReport = async (symbol, strategyName, columns) => {
15994
- bt.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_GET_REPORT);
16050
+ backtest$1.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_GET_REPORT);
15995
16051
  {
15996
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
15997
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_GET_REPORT);
15998
- 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));
15999
16055
  }
16000
16056
  const instance = this._getInstance(symbol, strategyName);
16001
16057
  return await instance.getReport(symbol, strategyName, columns);
@@ -16018,11 +16074,11 @@ class BacktestUtils {
16018
16074
  * ```
16019
16075
  */
16020
16076
  this.dump = async (symbol, strategyName, path, columns) => {
16021
- bt.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_DUMP);
16077
+ backtest$1.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_DUMP);
16022
16078
  {
16023
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16024
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_DUMP);
16025
- 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));
16026
16082
  }
16027
16083
  const instance = this._getInstance(symbol, strategyName);
16028
16084
  return await instance.dump(symbol, strategyName, path, columns);
@@ -16152,7 +16208,7 @@ class LiveInstance {
16152
16208
  * @internal
16153
16209
  */
16154
16210
  this.task = singlerun(async (symbol, context) => {
16155
- bt.loggerService.info(LIVE_METHOD_NAME_TASK, {
16211
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_TASK, {
16156
16212
  symbol,
16157
16213
  context,
16158
16214
  });
@@ -16171,7 +16227,7 @@ class LiveInstance {
16171
16227
  * ```
16172
16228
  */
16173
16229
  this.getStatus = async () => {
16174
- bt.loggerService.info(LIVE_METHOD_NAME_GET_STATUS);
16230
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_GET_STATUS);
16175
16231
  return {
16176
16232
  id: this.id,
16177
16233
  symbol: this.symbol,
@@ -16190,27 +16246,27 @@ class LiveInstance {
16190
16246
  * @returns Infinite async generator yielding opened and closed signals
16191
16247
  */
16192
16248
  this.run = (symbol, context) => {
16193
- bt.loggerService.info(LIVE_METHOD_NAME_RUN, {
16249
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_RUN, {
16194
16250
  symbol,
16195
16251
  context,
16196
16252
  });
16197
16253
  {
16198
- bt.backtestMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16199
- bt.liveMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16200
- bt.scheduleMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16201
- bt.performanceMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16202
- bt.partialMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16203
- 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 });
16204
16260
  }
16205
16261
  {
16206
- bt.strategyCoreService.clear(false, { symbol, strategyName: context.strategyName });
16262
+ backtest$1.strategyCoreService.clear(false, { symbol, strategyName: context.strategyName });
16207
16263
  }
16208
16264
  {
16209
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
16210
- riskName && bt.riskGlobalService.clear(false, riskName);
16211
- 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));
16212
16268
  }
16213
- return bt.liveCommandService.run(symbol, context);
16269
+ return backtest$1.liveCommandService.run(symbol, context);
16214
16270
  };
16215
16271
  /**
16216
16272
  * Runs live trading in background without yielding results.
@@ -16233,7 +16289,7 @@ class LiveInstance {
16233
16289
  * ```
16234
16290
  */
16235
16291
  this.background = (symbol, context) => {
16236
- bt.loggerService.info(LIVE_METHOD_NAME_BACKGROUND, {
16292
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_BACKGROUND, {
16237
16293
  symbol,
16238
16294
  context,
16239
16295
  });
@@ -16248,8 +16304,8 @@ class LiveInstance {
16248
16304
  }
16249
16305
  this.task(symbol, context).catch((error) => exitEmitter.next(new Error(getErrorMessage(error))));
16250
16306
  return () => {
16251
- bt.strategyCoreService.stop(false, { symbol, strategyName: context.strategyName });
16252
- bt.strategyCoreService
16307
+ backtest$1.strategyCoreService.stop(false, { symbol, strategyName: context.strategyName });
16308
+ backtest$1.strategyCoreService
16253
16309
  .getPendingSignal(false, symbol, context.strategyName)
16254
16310
  .then(async (pendingSignal) => {
16255
16311
  if (pendingSignal) {
@@ -16286,11 +16342,11 @@ class LiveInstance {
16286
16342
  * ```
16287
16343
  */
16288
16344
  this.stop = async (symbol, strategyName) => {
16289
- bt.loggerService.info(LIVE_METHOD_NAME_STOP, {
16345
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_STOP, {
16290
16346
  symbol,
16291
16347
  strategyName,
16292
16348
  });
16293
- await bt.strategyCoreService.stop(false, { symbol, strategyName });
16349
+ await backtest$1.strategyCoreService.stop(false, { symbol, strategyName });
16294
16350
  };
16295
16351
  /**
16296
16352
  * Gets statistical data from all live trading events for a symbol-strategy pair.
@@ -16307,11 +16363,11 @@ class LiveInstance {
16307
16363
  * ```
16308
16364
  */
16309
16365
  this.getData = async (symbol, strategyName) => {
16310
- bt.loggerService.info("LiveUtils.getData", {
16366
+ backtest$1.loggerService.info("LiveUtils.getData", {
16311
16367
  symbol,
16312
16368
  strategyName,
16313
16369
  });
16314
- return await bt.liveMarkdownService.getData(symbol, strategyName, false);
16370
+ return await backtest$1.liveMarkdownService.getData(symbol, strategyName, false);
16315
16371
  };
16316
16372
  /**
16317
16373
  * Generates markdown report with all events for a symbol-strategy pair.
@@ -16329,11 +16385,11 @@ class LiveInstance {
16329
16385
  * ```
16330
16386
  */
16331
16387
  this.getReport = async (symbol, strategyName, columns) => {
16332
- bt.loggerService.info(LIVE_METHOD_NAME_GET_REPORT, {
16388
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_GET_REPORT, {
16333
16389
  symbol,
16334
16390
  strategyName,
16335
16391
  });
16336
- return await bt.liveMarkdownService.getReport(symbol, strategyName, false, columns);
16392
+ return await backtest$1.liveMarkdownService.getReport(symbol, strategyName, false, columns);
16337
16393
  };
16338
16394
  /**
16339
16395
  * Saves strategy report to disk.
@@ -16354,12 +16410,12 @@ class LiveInstance {
16354
16410
  * ```
16355
16411
  */
16356
16412
  this.dump = async (symbol, strategyName, path, columns) => {
16357
- bt.loggerService.info(LIVE_METHOD_NAME_DUMP, {
16413
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_DUMP, {
16358
16414
  symbol,
16359
16415
  strategyName,
16360
16416
  path,
16361
16417
  });
16362
- await bt.liveMarkdownService.dump(symbol, strategyName, false, path, columns);
16418
+ await backtest$1.liveMarkdownService.dump(symbol, strategyName, false, path, columns);
16363
16419
  };
16364
16420
  }
16365
16421
  }
@@ -16411,13 +16467,13 @@ class LiveUtils {
16411
16467
  */
16412
16468
  this.run = (symbol, context) => {
16413
16469
  {
16414
- bt.strategyValidationService.validate(context.strategyName, LIVE_METHOD_NAME_RUN);
16415
- 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);
16416
16472
  }
16417
16473
  {
16418
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
16419
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_RUN);
16420
- 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));
16421
16477
  }
16422
16478
  const instance = this._getInstance(symbol, context.strategyName);
16423
16479
  return instance.run(symbol, context);
@@ -16444,12 +16500,12 @@ class LiveUtils {
16444
16500
  * ```
16445
16501
  */
16446
16502
  this.background = (symbol, context) => {
16447
- bt.strategyValidationService.validate(context.strategyName, LIVE_METHOD_NAME_BACKGROUND);
16448
- 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);
16449
16505
  {
16450
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
16451
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_BACKGROUND);
16452
- 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));
16453
16509
  }
16454
16510
  const instance = this._getInstance(symbol, context.strategyName);
16455
16511
  return instance.background(symbol, context);
@@ -16472,11 +16528,11 @@ class LiveUtils {
16472
16528
  * ```
16473
16529
  */
16474
16530
  this.stop = async (symbol, strategyName) => {
16475
- bt.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_STOP);
16531
+ backtest$1.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_STOP);
16476
16532
  {
16477
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16478
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_STOP);
16479
- 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));
16480
16536
  }
16481
16537
  const instance = this._getInstance(symbol, strategyName);
16482
16538
  return await instance.stop(symbol, strategyName);
@@ -16495,11 +16551,11 @@ class LiveUtils {
16495
16551
  * ```
16496
16552
  */
16497
16553
  this.getData = async (symbol, strategyName) => {
16498
- bt.strategyValidationService.validate(strategyName, "LiveUtils.getData");
16554
+ backtest$1.strategyValidationService.validate(strategyName, "LiveUtils.getData");
16499
16555
  {
16500
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16501
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_DATA);
16502
- 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));
16503
16559
  }
16504
16560
  const instance = this._getInstance(symbol, strategyName);
16505
16561
  return await instance.getData(symbol, strategyName);
@@ -16519,11 +16575,11 @@ class LiveUtils {
16519
16575
  * ```
16520
16576
  */
16521
16577
  this.getReport = async (symbol, strategyName, columns) => {
16522
- bt.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_GET_REPORT);
16578
+ backtest$1.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_GET_REPORT);
16523
16579
  {
16524
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16525
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_REPORT);
16526
- 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));
16527
16583
  }
16528
16584
  const instance = this._getInstance(symbol, strategyName);
16529
16585
  return await instance.getReport(symbol, strategyName, columns);
@@ -16546,11 +16602,11 @@ class LiveUtils {
16546
16602
  * ```
16547
16603
  */
16548
16604
  this.dump = async (symbol, strategyName, path, columns) => {
16549
- bt.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_DUMP);
16605
+ backtest$1.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_DUMP);
16550
16606
  {
16551
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16552
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_DUMP);
16553
- 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));
16554
16610
  }
16555
16611
  const instance = this._getInstance(symbol, strategyName);
16556
16612
  return await instance.dump(symbol, strategyName, path, columns);
@@ -16635,18 +16691,18 @@ class ScheduleUtils {
16635
16691
  * ```
16636
16692
  */
16637
16693
  this.getData = async (symbol, strategyName, backtest) => {
16638
- bt.loggerService.info(SCHEDULE_METHOD_NAME_GET_DATA, {
16694
+ backtest$1.loggerService.info(SCHEDULE_METHOD_NAME_GET_DATA, {
16639
16695
  symbol,
16640
16696
  strategyName,
16641
16697
  backtest,
16642
16698
  });
16643
- bt.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_DATA);
16699
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_DATA);
16644
16700
  {
16645
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16646
- riskName && bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_DATA);
16647
- 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));
16648
16704
  }
16649
- return await bt.scheduleMarkdownService.getData(symbol, strategyName, backtest);
16705
+ return await backtest$1.scheduleMarkdownService.getData(symbol, strategyName, backtest);
16650
16706
  };
16651
16707
  /**
16652
16708
  * Generates markdown report with all scheduled events for a symbol-strategy pair.
@@ -16663,18 +16719,18 @@ class ScheduleUtils {
16663
16719
  * ```
16664
16720
  */
16665
16721
  this.getReport = async (symbol, strategyName, backtest, columns) => {
16666
- bt.loggerService.info(SCHEDULE_METHOD_NAME_GET_REPORT, {
16722
+ backtest$1.loggerService.info(SCHEDULE_METHOD_NAME_GET_REPORT, {
16667
16723
  symbol,
16668
16724
  strategyName,
16669
16725
  backtest,
16670
16726
  });
16671
- bt.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_REPORT);
16727
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_REPORT);
16672
16728
  {
16673
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16674
- riskName && bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_REPORT);
16675
- 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));
16676
16732
  }
16677
- return await bt.scheduleMarkdownService.getReport(symbol, strategyName, backtest, columns);
16733
+ return await backtest$1.scheduleMarkdownService.getReport(symbol, strategyName, backtest, columns);
16678
16734
  };
16679
16735
  /**
16680
16736
  * Saves strategy report to disk.
@@ -16694,19 +16750,19 @@ class ScheduleUtils {
16694
16750
  * ```
16695
16751
  */
16696
16752
  this.dump = async (symbol, strategyName, backtest, path, columns) => {
16697
- bt.loggerService.info(SCHEDULE_METHOD_NAME_DUMP, {
16753
+ backtest$1.loggerService.info(SCHEDULE_METHOD_NAME_DUMP, {
16698
16754
  symbol,
16699
16755
  strategyName,
16700
16756
  backtest,
16701
16757
  path,
16702
16758
  });
16703
- bt.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_DUMP);
16759
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_DUMP);
16704
16760
  {
16705
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16706
- riskName && bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_DUMP);
16707
- 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));
16708
16764
  }
16709
- await bt.scheduleMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16765
+ await backtest$1.scheduleMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16710
16766
  };
16711
16767
  }
16712
16768
  }
@@ -16788,13 +16844,13 @@ class Performance {
16788
16844
  * ```
16789
16845
  */
16790
16846
  static async getData(symbol, strategyName, backtest) {
16791
- bt.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_DATA);
16847
+ backtest$1.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_DATA);
16792
16848
  {
16793
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16794
- riskName && bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_DATA);
16795
- 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));
16796
16852
  }
16797
- return bt.performanceMarkdownService.getData(symbol, strategyName, backtest);
16853
+ return backtest$1.performanceMarkdownService.getData(symbol, strategyName, backtest);
16798
16854
  }
16799
16855
  /**
16800
16856
  * Generates markdown report with performance analysis.
@@ -16820,13 +16876,13 @@ class Performance {
16820
16876
  * ```
16821
16877
  */
16822
16878
  static async getReport(symbol, strategyName, backtest, columns) {
16823
- bt.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_REPORT);
16879
+ backtest$1.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_REPORT);
16824
16880
  {
16825
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16826
- riskName && bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_REPORT);
16827
- 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));
16828
16884
  }
16829
- return bt.performanceMarkdownService.getReport(symbol, strategyName, backtest, columns);
16885
+ return backtest$1.performanceMarkdownService.getReport(symbol, strategyName, backtest, columns);
16830
16886
  }
16831
16887
  /**
16832
16888
  * Saves performance report to disk.
@@ -16849,13 +16905,13 @@ class Performance {
16849
16905
  * ```
16850
16906
  */
16851
16907
  static async dump(symbol, strategyName, backtest, path = "./dump/performance", columns) {
16852
- bt.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_DUMP);
16908
+ backtest$1.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_DUMP);
16853
16909
  {
16854
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16855
- riskName && bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_DUMP);
16856
- 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));
16857
16913
  }
16858
- return bt.performanceMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16914
+ return backtest$1.performanceMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16859
16915
  }
16860
16916
  }
16861
16917
 
@@ -16889,7 +16945,7 @@ const INSTANCE_TASK_FN = async (symbol, context, self) => {
16889
16945
  }
16890
16946
  }
16891
16947
  if (!self._isDone) {
16892
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
16948
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
16893
16949
  await doneWalkerSubject.next({
16894
16950
  exchangeName: walkerSchema.exchangeName,
16895
16951
  strategyName: context.walkerName,
@@ -16943,7 +16999,7 @@ class WalkerInstance {
16943
16999
  * @internal
16944
17000
  */
16945
17001
  this.task = singlerun(async (symbol, context) => {
16946
- bt.loggerService.info(WALKER_METHOD_NAME_TASK, {
17002
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_TASK, {
16947
17003
  symbol,
16948
17004
  context,
16949
17005
  });
@@ -16962,7 +17018,7 @@ class WalkerInstance {
16962
17018
  * ```
16963
17019
  */
16964
17020
  this.getStatus = async () => {
16965
- bt.loggerService.info(WALKER_METHOD_NAME_GET_STATUS);
17021
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_GET_STATUS);
16966
17022
  return {
16967
17023
  id: this.id,
16968
17024
  symbol: this.symbol,
@@ -16978,39 +17034,39 @@ class WalkerInstance {
16978
17034
  * @returns Async generator yielding progress updates after each strategy
16979
17035
  */
16980
17036
  this.run = (symbol, context) => {
16981
- bt.loggerService.info(WALKER_METHOD_NAME_RUN, {
17037
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_RUN, {
16982
17038
  symbol,
16983
17039
  context,
16984
17040
  });
16985
- bt.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_RUN);
16986
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
16987
- bt.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_RUN);
16988
- 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);
16989
17045
  for (const strategyName of walkerSchema.strategies) {
16990
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_RUN);
17046
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_RUN);
16991
17047
  }
16992
- bt.walkerMarkdownService.clear(context.walkerName);
17048
+ backtest$1.walkerMarkdownService.clear(context.walkerName);
16993
17049
  // Clear backtest data for all strategies
16994
17050
  for (const strategyName of walkerSchema.strategies) {
16995
17051
  {
16996
- bt.backtestMarkdownService.clear(true, { symbol, strategyName });
16997
- bt.liveMarkdownService.clear(true, { symbol, strategyName });
16998
- bt.scheduleMarkdownService.clear(true, { symbol, strategyName });
16999
- bt.performanceMarkdownService.clear(true, { symbol, strategyName });
17000
- bt.partialMarkdownService.clear(true, { symbol, strategyName });
17001
- 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 });
17002
17058
  }
17003
17059
  {
17004
- bt.strategyCoreService.clear(true, { symbol, strategyName });
17060
+ backtest$1.strategyCoreService.clear(true, { symbol, strategyName });
17005
17061
  }
17006
17062
  {
17007
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17008
- riskName && bt.riskGlobalService.clear(true, riskName);
17063
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17064
+ riskName && backtest$1.riskGlobalService.clear(true, riskName);
17009
17065
  riskList &&
17010
- riskList.forEach((riskName) => bt.riskGlobalService.clear(true, riskName));
17066
+ riskList.forEach((riskName) => backtest$1.riskGlobalService.clear(true, riskName));
17011
17067
  }
17012
17068
  }
17013
- return bt.walkerCommandService.run(symbol, {
17069
+ return backtest$1.walkerCommandService.run(symbol, {
17014
17070
  walkerName: context.walkerName,
17015
17071
  exchangeName: walkerSchema.exchangeName,
17016
17072
  frameName: walkerSchema.frameName,
@@ -17035,11 +17091,11 @@ class WalkerInstance {
17035
17091
  * ```
17036
17092
  */
17037
17093
  this.background = (symbol, context) => {
17038
- bt.loggerService.info(WALKER_METHOD_NAME_BACKGROUND, {
17094
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_BACKGROUND, {
17039
17095
  symbol,
17040
17096
  context,
17041
17097
  });
17042
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
17098
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
17043
17099
  {
17044
17100
  const currentStatus = this.task.getStatus();
17045
17101
  if (currentStatus === "pending") {
@@ -17052,7 +17108,7 @@ class WalkerInstance {
17052
17108
  this.task(symbol, context).catch((error) => exitEmitter.next(new Error(getErrorMessage(error))));
17053
17109
  return () => {
17054
17110
  for (const strategyName of walkerSchema.strategies) {
17055
- bt.strategyCoreService.stop(true, { symbol, strategyName });
17111
+ backtest$1.strategyCoreService.stop(true, { symbol, strategyName });
17056
17112
  walkerStopSubject.next({
17057
17113
  symbol,
17058
17114
  strategyName,
@@ -17095,14 +17151,14 @@ class WalkerInstance {
17095
17151
  * ```
17096
17152
  */
17097
17153
  this.stop = async (symbol, walkerName) => {
17098
- bt.loggerService.info(WALKER_METHOD_NAME_STOP, {
17154
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_STOP, {
17099
17155
  symbol,
17100
17156
  walkerName,
17101
17157
  });
17102
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17158
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17103
17159
  for (const strategyName of walkerSchema.strategies) {
17104
17160
  await walkerStopSubject.next({ symbol, strategyName, walkerName });
17105
- await bt.strategyCoreService.stop(true, { symbol, strategyName });
17161
+ await backtest$1.strategyCoreService.stop(true, { symbol, strategyName });
17106
17162
  }
17107
17163
  };
17108
17164
  /**
@@ -17120,12 +17176,12 @@ class WalkerInstance {
17120
17176
  * ```
17121
17177
  */
17122
17178
  this.getData = async (symbol, walkerName) => {
17123
- bt.loggerService.info(WALKER_METHOD_NAME_GET_DATA, {
17179
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_GET_DATA, {
17124
17180
  symbol,
17125
17181
  walkerName,
17126
17182
  });
17127
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17128
- 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", {
17129
17185
  exchangeName: walkerSchema.exchangeName,
17130
17186
  frameName: walkerSchema.frameName,
17131
17187
  });
@@ -17147,12 +17203,12 @@ class WalkerInstance {
17147
17203
  * ```
17148
17204
  */
17149
17205
  this.getReport = async (symbol, walkerName, strategyColumns, pnlColumns) => {
17150
- bt.loggerService.info(WALKER_METHOD_NAME_GET_REPORT, {
17206
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_GET_REPORT, {
17151
17207
  symbol,
17152
17208
  walkerName,
17153
17209
  });
17154
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17155
- 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", {
17156
17212
  exchangeName: walkerSchema.exchangeName,
17157
17213
  frameName: walkerSchema.frameName,
17158
17214
  }, strategyColumns, pnlColumns);
@@ -17177,13 +17233,13 @@ class WalkerInstance {
17177
17233
  * ```
17178
17234
  */
17179
17235
  this.dump = async (symbol, walkerName, path, strategyColumns, pnlColumns) => {
17180
- bt.loggerService.info(WALKER_METHOD_NAME_DUMP, {
17236
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_DUMP, {
17181
17237
  symbol,
17182
17238
  walkerName,
17183
17239
  path,
17184
17240
  });
17185
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17186
- 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", {
17187
17243
  exchangeName: walkerSchema.exchangeName,
17188
17244
  frameName: walkerSchema.frameName,
17189
17245
  }, path, strategyColumns, pnlColumns);
@@ -17224,17 +17280,17 @@ class WalkerUtils {
17224
17280
  * @returns Async generator yielding progress updates after each strategy
17225
17281
  */
17226
17282
  this.run = (symbol, context) => {
17227
- bt.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_RUN);
17228
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
17229
- bt.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_RUN);
17230
- 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);
17231
17287
  for (const strategyName of walkerSchema.strategies) {
17232
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_RUN);
17233
- 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);
17234
17290
  riskName &&
17235
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN);
17291
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN);
17236
17292
  riskList &&
17237
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN));
17293
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN));
17238
17294
  }
17239
17295
  const instance = this._getInstance(symbol, context.walkerName);
17240
17296
  return instance.run(symbol, context);
@@ -17259,17 +17315,17 @@ class WalkerUtils {
17259
17315
  * ```
17260
17316
  */
17261
17317
  this.background = (symbol, context) => {
17262
- bt.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_BACKGROUND);
17263
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
17264
- bt.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_BACKGROUND);
17265
- 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);
17266
17322
  for (const strategyName of walkerSchema.strategies) {
17267
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_BACKGROUND);
17268
- 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);
17269
17325
  riskName &&
17270
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND);
17326
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND);
17271
17327
  riskList &&
17272
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND));
17328
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND));
17273
17329
  }
17274
17330
  const instance = this._getInstance(symbol, context.walkerName);
17275
17331
  return instance.background(symbol, context);
@@ -17298,15 +17354,15 @@ class WalkerUtils {
17298
17354
  * ```
17299
17355
  */
17300
17356
  this.stop = async (symbol, walkerName) => {
17301
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_STOP);
17302
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17357
+ backtest$1.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_STOP);
17358
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17303
17359
  for (const strategyName of walkerSchema.strategies) {
17304
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_STOP);
17305
- 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);
17306
17362
  riskName &&
17307
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP);
17363
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP);
17308
17364
  riskList &&
17309
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP));
17365
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP));
17310
17366
  }
17311
17367
  const instance = this._getInstance(symbol, walkerName);
17312
17368
  return await instance.stop(symbol, walkerName);
@@ -17325,15 +17381,15 @@ class WalkerUtils {
17325
17381
  * ```
17326
17382
  */
17327
17383
  this.getData = async (symbol, walkerName) => {
17328
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_GET_DATA);
17329
- 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);
17330
17386
  for (const strategyName of walkerSchema.strategies) {
17331
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_GET_DATA);
17332
- 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);
17333
17389
  riskName &&
17334
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_DATA);
17390
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_DATA);
17335
17391
  riskList &&
17336
- 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));
17337
17393
  }
17338
17394
  const instance = this._getInstance(symbol, walkerName);
17339
17395
  return await instance.getData(symbol, walkerName);
@@ -17354,15 +17410,15 @@ class WalkerUtils {
17354
17410
  * ```
17355
17411
  */
17356
17412
  this.getReport = async (symbol, walkerName, strategyColumns, pnlColumns) => {
17357
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_GET_REPORT);
17358
- 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);
17359
17415
  for (const strategyName of walkerSchema.strategies) {
17360
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_GET_REPORT);
17361
- 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);
17362
17418
  riskName &&
17363
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_REPORT);
17419
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_REPORT);
17364
17420
  riskList &&
17365
- 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));
17366
17422
  }
17367
17423
  const instance = this._getInstance(symbol, walkerName);
17368
17424
  return await instance.getReport(symbol, walkerName, strategyColumns, pnlColumns);
@@ -17386,15 +17442,15 @@ class WalkerUtils {
17386
17442
  * ```
17387
17443
  */
17388
17444
  this.dump = async (symbol, walkerName, path, strategyColumns, pnlColumns) => {
17389
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_DUMP);
17390
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17445
+ backtest$1.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_DUMP);
17446
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17391
17447
  for (const strategyName of walkerSchema.strategies) {
17392
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_DUMP);
17393
- 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);
17394
17450
  riskName &&
17395
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP);
17451
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP);
17396
17452
  riskList &&
17397
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP));
17453
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP));
17398
17454
  }
17399
17455
  const instance = this._getInstance(symbol, walkerName);
17400
17456
  return await instance.dump(symbol, walkerName, path, strategyColumns, pnlColumns);
@@ -17487,14 +17543,14 @@ class HeatUtils {
17487
17543
  * ```
17488
17544
  */
17489
17545
  this.getData = async (strategyName, backtest) => {
17490
- bt.loggerService.info(HEAT_METHOD_NAME_GET_DATA, { strategyName });
17491
- 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);
17492
17548
  {
17493
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17494
- riskName && bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_DATA);
17495
- 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));
17496
17552
  }
17497
- return await bt.heatMarkdownService.getData(strategyName, backtest);
17553
+ return await backtest$1.heatMarkdownService.getData(strategyName, backtest);
17498
17554
  };
17499
17555
  /**
17500
17556
  * Generates markdown report with portfolio heatmap table for a strategy.
@@ -17523,14 +17579,14 @@ class HeatUtils {
17523
17579
  * ```
17524
17580
  */
17525
17581
  this.getReport = async (strategyName, backtest, columns) => {
17526
- bt.loggerService.info(HEAT_METHOD_NAME_GET_REPORT, { strategyName });
17527
- 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);
17528
17584
  {
17529
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17530
- riskName && bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_REPORT);
17531
- 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));
17532
17588
  }
17533
- return await bt.heatMarkdownService.getReport(strategyName, backtest, columns);
17589
+ return await backtest$1.heatMarkdownService.getReport(strategyName, backtest, columns);
17534
17590
  };
17535
17591
  /**
17536
17592
  * Saves heatmap report to disk for a strategy.
@@ -17552,14 +17608,14 @@ class HeatUtils {
17552
17608
  * ```
17553
17609
  */
17554
17610
  this.dump = async (strategyName, backtest, path, columns) => {
17555
- bt.loggerService.info(HEAT_METHOD_NAME_DUMP, { strategyName, path });
17556
- 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);
17557
17613
  {
17558
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17559
- riskName && bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_DUMP);
17560
- 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));
17561
17617
  }
17562
- await bt.heatMarkdownService.dump(strategyName, backtest, path, columns);
17618
+ await backtest$1.heatMarkdownService.dump(strategyName, backtest, path, columns);
17563
17619
  };
17564
17620
  }
17565
17621
  }
@@ -17646,12 +17702,12 @@ class PositionSizeUtils {
17646
17702
  * @throws Error if sizing schema method is not "fixed-percentage"
17647
17703
  */
17648
17704
  PositionSizeUtils.fixedPercentage = async (symbol, accountBalance, priceOpen, priceStopLoss, context) => {
17649
- bt.loggerService.info(POSITION_SIZE_METHOD_NAME_FIXED, {
17705
+ backtest$1.loggerService.info(POSITION_SIZE_METHOD_NAME_FIXED, {
17650
17706
  context,
17651
17707
  symbol,
17652
17708
  });
17653
- bt.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_FIXED, "fixed-percentage");
17654
- 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({
17655
17711
  symbol,
17656
17712
  accountBalance,
17657
17713
  priceOpen,
@@ -17672,12 +17728,12 @@ PositionSizeUtils.fixedPercentage = async (symbol, accountBalance, priceOpen, pr
17672
17728
  * @throws Error if sizing schema method is not "kelly-criterion"
17673
17729
  */
17674
17730
  PositionSizeUtils.kellyCriterion = async (symbol, accountBalance, priceOpen, winRate, winLossRatio, context) => {
17675
- bt.loggerService.info(POSITION_SIZE_METHOD_NAME_KELLY, {
17731
+ backtest$1.loggerService.info(POSITION_SIZE_METHOD_NAME_KELLY, {
17676
17732
  context,
17677
17733
  symbol,
17678
17734
  });
17679
- bt.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_KELLY, "kelly-criterion");
17680
- 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({
17681
17737
  symbol,
17682
17738
  accountBalance,
17683
17739
  priceOpen,
@@ -17698,12 +17754,12 @@ PositionSizeUtils.kellyCriterion = async (symbol, accountBalance, priceOpen, win
17698
17754
  * @throws Error if sizing schema method is not "atr-based"
17699
17755
  */
17700
17756
  PositionSizeUtils.atrBased = async (symbol, accountBalance, priceOpen, atr, context) => {
17701
- bt.loggerService.info(POSITION_SIZE_METHOD_NAME_ATR, {
17757
+ backtest$1.loggerService.info(POSITION_SIZE_METHOD_NAME_ATR, {
17702
17758
  context,
17703
17759
  symbol,
17704
17760
  });
17705
- bt.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_ATR, "atr-based");
17706
- 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({
17707
17763
  symbol,
17708
17764
  accountBalance,
17709
17765
  priceOpen,
@@ -17752,12 +17808,12 @@ class OptimizerUtils {
17752
17808
  * @throws Error if optimizer not found
17753
17809
  */
17754
17810
  this.getData = async (symbol, context) => {
17755
- bt.loggerService.info(OPTIMIZER_METHOD_NAME_GET_DATA, {
17811
+ backtest$1.loggerService.info(OPTIMIZER_METHOD_NAME_GET_DATA, {
17756
17812
  symbol,
17757
17813
  context,
17758
17814
  });
17759
- bt.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_DATA);
17760
- 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);
17761
17817
  };
17762
17818
  /**
17763
17819
  * Generates complete executable strategy code.
@@ -17769,12 +17825,12 @@ class OptimizerUtils {
17769
17825
  * @throws Error if optimizer not found
17770
17826
  */
17771
17827
  this.getCode = async (symbol, context) => {
17772
- bt.loggerService.info(OPTIMIZER_METHOD_NAME_GET_CODE, {
17828
+ backtest$1.loggerService.info(OPTIMIZER_METHOD_NAME_GET_CODE, {
17773
17829
  symbol,
17774
17830
  context,
17775
17831
  });
17776
- bt.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_CODE);
17777
- 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);
17778
17834
  };
17779
17835
  /**
17780
17836
  * Generates and saves strategy code to file.
@@ -17788,13 +17844,13 @@ class OptimizerUtils {
17788
17844
  * @throws Error if optimizer not found or file write fails
17789
17845
  */
17790
17846
  this.dump = async (symbol, context, path) => {
17791
- bt.loggerService.info(OPTIMIZER_METHOD_NAME_DUMP, {
17847
+ backtest$1.loggerService.info(OPTIMIZER_METHOD_NAME_DUMP, {
17792
17848
  symbol,
17793
17849
  context,
17794
17850
  path,
17795
17851
  });
17796
- bt.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_DUMP);
17797
- 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);
17798
17854
  };
17799
17855
  }
17800
17856
  }
@@ -17876,14 +17932,14 @@ class PartialUtils {
17876
17932
  * ```
17877
17933
  */
17878
17934
  this.getData = async (symbol, strategyName, backtest) => {
17879
- bt.loggerService.info(PARTIAL_METHOD_NAME_GET_DATA, { symbol, strategyName });
17880
- 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);
17881
17937
  {
17882
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17883
- riskName && bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_DATA);
17884
- 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));
17885
17941
  }
17886
- return await bt.partialMarkdownService.getData(symbol, strategyName, backtest);
17942
+ return await backtest$1.partialMarkdownService.getData(symbol, strategyName, backtest);
17887
17943
  };
17888
17944
  /**
17889
17945
  * Generates markdown report with all partial profit/loss events for a symbol-strategy pair.
@@ -17925,14 +17981,14 @@ class PartialUtils {
17925
17981
  * ```
17926
17982
  */
17927
17983
  this.getReport = async (symbol, strategyName, backtest, columns) => {
17928
- bt.loggerService.info(PARTIAL_METHOD_NAME_GET_REPORT, { symbol, strategyName });
17929
- 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);
17930
17986
  {
17931
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17932
- riskName && bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_REPORT);
17933
- 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));
17934
17990
  }
17935
- return await bt.partialMarkdownService.getReport(symbol, strategyName, backtest, columns);
17991
+ return await backtest$1.partialMarkdownService.getReport(symbol, strategyName, backtest, columns);
17936
17992
  };
17937
17993
  /**
17938
17994
  * Generates and saves markdown report to file.
@@ -17967,14 +18023,14 @@ class PartialUtils {
17967
18023
  * ```
17968
18024
  */
17969
18025
  this.dump = async (symbol, strategyName, backtest, path, columns) => {
17970
- bt.loggerService.info(PARTIAL_METHOD_NAME_DUMP, { symbol, strategyName, path });
17971
- 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);
17972
18028
  {
17973
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17974
- riskName && bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_DUMP);
17975
- 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));
17976
18032
  }
17977
- await bt.partialMarkdownService.dump(symbol, strategyName, backtest, path, columns);
18033
+ await backtest$1.partialMarkdownService.dump(symbol, strategyName, backtest, path, columns);
17978
18034
  };
17979
18035
  }
17980
18036
  }
@@ -18075,4 +18131,196 @@ class ConstantUtils {
18075
18131
  */
18076
18132
  const Constant = new ConstantUtils();
18077
18133
 
18078
- 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 };