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.cjs CHANGED
@@ -2043,7 +2043,7 @@ const BASE_WAIT_FOR_INIT_FN_METHOD_NAME = "PersistBase.waitForInitFn";
2043
2043
  const BASE_UNLINK_RETRY_COUNT = 5;
2044
2044
  const BASE_UNLINK_RETRY_DELAY = 1000;
2045
2045
  const BASE_WAIT_FOR_INIT_FN = async (self) => {
2046
- bt.loggerService.debug(BASE_WAIT_FOR_INIT_FN_METHOD_NAME, {
2046
+ backtest$1.loggerService.debug(BASE_WAIT_FOR_INIT_FN_METHOD_NAME, {
2047
2047
  entityName: self.entityName,
2048
2048
  directory: self._directory,
2049
2049
  });
@@ -2101,7 +2101,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2101
2101
  this.entityName = entityName;
2102
2102
  this.baseDir = baseDir;
2103
2103
  this[_a] = functoolsKit.singleshot(async () => await BASE_WAIT_FOR_INIT_FN(this));
2104
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_CTOR, {
2104
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_CTOR, {
2105
2105
  entityName: this.entityName,
2106
2106
  baseDir,
2107
2107
  });
@@ -2117,7 +2117,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2117
2117
  return path.join(this.baseDir, this.entityName, `${entityId}.json`);
2118
2118
  }
2119
2119
  async waitForInit(initial) {
2120
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_WAIT_FOR_INIT, {
2120
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_WAIT_FOR_INIT, {
2121
2121
  entityName: this.entityName,
2122
2122
  initial,
2123
2123
  });
@@ -2134,7 +2134,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2134
2134
  return length;
2135
2135
  }
2136
2136
  async readValue(entityId) {
2137
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_READ_VALUE, {
2137
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_READ_VALUE, {
2138
2138
  entityName: this.entityName,
2139
2139
  entityId,
2140
2140
  });
@@ -2151,7 +2151,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2151
2151
  }
2152
2152
  }
2153
2153
  async hasValue(entityId) {
2154
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_HAS_VALUE, {
2154
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_HAS_VALUE, {
2155
2155
  entityName: this.entityName,
2156
2156
  entityId,
2157
2157
  });
@@ -2168,7 +2168,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2168
2168
  }
2169
2169
  }
2170
2170
  async writeValue(entityId, entity) {
2171
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_WRITE_VALUE, {
2171
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_WRITE_VALUE, {
2172
2172
  entityName: this.entityName,
2173
2173
  entityId,
2174
2174
  });
@@ -2189,7 +2189,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2189
2189
  * @throws Error if entity not found or deletion fails
2190
2190
  */
2191
2191
  async removeValue(entityId) {
2192
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_REMOVE_VALUE, {
2192
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_REMOVE_VALUE, {
2193
2193
  entityName: this.entityName,
2194
2194
  entityId,
2195
2195
  });
@@ -2211,7 +2211,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2211
2211
  * @throws Error if deletion fails
2212
2212
  */
2213
2213
  async removeAll() {
2214
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_REMOVE_ALL, {
2214
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_REMOVE_ALL, {
2215
2215
  entityName: this.entityName,
2216
2216
  });
2217
2217
  try {
@@ -2233,7 +2233,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2233
2233
  * @throws Error if reading fails
2234
2234
  */
2235
2235
  async *values() {
2236
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_VALUES, {
2236
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_VALUES, {
2237
2237
  entityName: this.entityName,
2238
2238
  });
2239
2239
  try {
@@ -2262,7 +2262,7 @@ const PersistBase = functoolsKit.makeExtendable(class {
2262
2262
  * @throws Error if reading fails
2263
2263
  */
2264
2264
  async *keys() {
2265
- bt.loggerService.debug(PERSIST_BASE_METHOD_NAME_KEYS, {
2265
+ backtest$1.loggerService.debug(PERSIST_BASE_METHOD_NAME_KEYS, {
2266
2266
  entityName: this.entityName,
2267
2267
  });
2268
2268
  try {
@@ -2367,7 +2367,7 @@ class PersistSignalUtils {
2367
2367
  * @returns Promise resolving to signal or null
2368
2368
  */
2369
2369
  this.readSignalData = async (symbol, strategyName) => {
2370
- bt.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_READ_DATA);
2370
+ backtest$1.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_READ_DATA);
2371
2371
  const key = `${symbol}:${strategyName}`;
2372
2372
  const isInitial = !this.getSignalStorage.has(key);
2373
2373
  const stateStorage = this.getSignalStorage(symbol, strategyName);
@@ -2389,7 +2389,7 @@ class PersistSignalUtils {
2389
2389
  * @returns Promise that resolves when write is complete
2390
2390
  */
2391
2391
  this.writeSignalData = async (signalRow, symbol, strategyName) => {
2392
- bt.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_WRITE_DATA);
2392
+ backtest$1.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_WRITE_DATA);
2393
2393
  const key = `${symbol}:${strategyName}`;
2394
2394
  const isInitial = !this.getSignalStorage.has(key);
2395
2395
  const stateStorage = this.getSignalStorage(symbol, strategyName);
@@ -2412,7 +2412,7 @@ class PersistSignalUtils {
2412
2412
  * ```
2413
2413
  */
2414
2414
  usePersistSignalAdapter(Ctor) {
2415
- bt.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_USE_PERSIST_SIGNAL_ADAPTER);
2415
+ backtest$1.loggerService.info(PERSIST_SIGNAL_UTILS_METHOD_NAME_USE_PERSIST_SIGNAL_ADAPTER);
2416
2416
  this.PersistSignalFactory = Ctor;
2417
2417
  }
2418
2418
  }
@@ -2464,7 +2464,7 @@ class PersistRiskUtils {
2464
2464
  * @returns Promise resolving to Map of active positions
2465
2465
  */
2466
2466
  this.readPositionData = async (riskName) => {
2467
- bt.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_READ_DATA);
2467
+ backtest$1.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_READ_DATA);
2468
2468
  const isInitial = !this.getRiskStorage.has(riskName);
2469
2469
  const stateStorage = this.getRiskStorage(riskName);
2470
2470
  await stateStorage.waitForInit(isInitial);
@@ -2485,7 +2485,7 @@ class PersistRiskUtils {
2485
2485
  * @returns Promise that resolves when write is complete
2486
2486
  */
2487
2487
  this.writePositionData = async (riskRow, riskName) => {
2488
- bt.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_WRITE_DATA);
2488
+ backtest$1.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_WRITE_DATA);
2489
2489
  const isInitial = !this.getRiskStorage.has(riskName);
2490
2490
  const stateStorage = this.getRiskStorage(riskName);
2491
2491
  await stateStorage.waitForInit(isInitial);
@@ -2508,7 +2508,7 @@ class PersistRiskUtils {
2508
2508
  * ```
2509
2509
  */
2510
2510
  usePersistRiskAdapter(Ctor) {
2511
- bt.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_USE_PERSIST_RISK_ADAPTER);
2511
+ backtest$1.loggerService.info(PERSIST_RISK_UTILS_METHOD_NAME_USE_PERSIST_RISK_ADAPTER);
2512
2512
  this.PersistRiskFactory = Ctor;
2513
2513
  }
2514
2514
  }
@@ -2558,7 +2558,7 @@ class PersistScheduleUtils {
2558
2558
  * @returns Promise resolving to scheduled signal or null
2559
2559
  */
2560
2560
  this.readScheduleData = async (symbol, strategyName) => {
2561
- bt.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_READ_DATA);
2561
+ backtest$1.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_READ_DATA);
2562
2562
  const key = `${symbol}:${strategyName}`;
2563
2563
  const isInitial = !this.getScheduleStorage.has(key);
2564
2564
  const stateStorage = this.getScheduleStorage(symbol, strategyName);
@@ -2580,7 +2580,7 @@ class PersistScheduleUtils {
2580
2580
  * @returns Promise that resolves when write is complete
2581
2581
  */
2582
2582
  this.writeScheduleData = async (scheduledSignalRow, symbol, strategyName) => {
2583
- bt.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_WRITE_DATA);
2583
+ backtest$1.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_WRITE_DATA);
2584
2584
  const key = `${symbol}:${strategyName}`;
2585
2585
  const isInitial = !this.getScheduleStorage.has(key);
2586
2586
  const stateStorage = this.getScheduleStorage(symbol, strategyName);
@@ -2603,7 +2603,7 @@ class PersistScheduleUtils {
2603
2603
  * ```
2604
2604
  */
2605
2605
  usePersistScheduleAdapter(Ctor) {
2606
- bt.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_USE_PERSIST_SCHEDULE_ADAPTER);
2606
+ backtest$1.loggerService.info(PERSIST_SCHEDULE_UTILS_METHOD_NAME_USE_PERSIST_SCHEDULE_ADAPTER);
2607
2607
  this.PersistScheduleFactory = Ctor;
2608
2608
  }
2609
2609
  }
@@ -2653,7 +2653,7 @@ class PersistPartialUtils {
2653
2653
  * @returns Promise resolving to partial data record
2654
2654
  */
2655
2655
  this.readPartialData = async (symbol, strategyName) => {
2656
- bt.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_READ_DATA);
2656
+ backtest$1.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_READ_DATA);
2657
2657
  const key = `${symbol}:${strategyName}`;
2658
2658
  const isInitial = !this.getPartialStorage.has(key);
2659
2659
  const stateStorage = this.getPartialStorage(symbol, strategyName);
@@ -2676,7 +2676,7 @@ class PersistPartialUtils {
2676
2676
  * @returns Promise that resolves when write is complete
2677
2677
  */
2678
2678
  this.writePartialData = async (partialData, symbol, strategyName) => {
2679
- bt.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_WRITE_DATA);
2679
+ backtest$1.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_WRITE_DATA);
2680
2680
  const key = `${symbol}:${strategyName}`;
2681
2681
  const isInitial = !this.getPartialStorage.has(key);
2682
2682
  const stateStorage = this.getPartialStorage(symbol, strategyName);
@@ -2700,7 +2700,7 @@ class PersistPartialUtils {
2700
2700
  * ```
2701
2701
  */
2702
2702
  usePersistPartialAdapter(Ctor) {
2703
- bt.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_USE_PERSIST_PARTIAL_ADAPTER);
2703
+ backtest$1.loggerService.info(PERSIST_PARTIAL_UTILS_METHOD_NAME_USE_PERSIST_PARTIAL_ADAPTER);
2704
2704
  this.PersistPartialFactory = Ctor;
2705
2705
  }
2706
2706
  }
@@ -3169,7 +3169,7 @@ const GET_SIGNAL_FN = functoolsKit.trycatch(async (self) => {
3169
3169
  error: functoolsKit.errorData(error),
3170
3170
  message: functoolsKit.getErrorMessage(error),
3171
3171
  };
3172
- bt.loggerService.warn(message, payload);
3172
+ backtest$1.loggerService.warn(message, payload);
3173
3173
  console.warn(message, payload);
3174
3174
  errorEmitter.next(error);
3175
3175
  },
@@ -4349,7 +4349,7 @@ class MergeRisk {
4349
4349
  * @returns Promise resolving to true if all risks approve, false if any risk rejects
4350
4350
  */
4351
4351
  async checkSignal(params) {
4352
- bt.loggerService.info("MergeRisk checkSignal", {
4352
+ backtest$1.loggerService.info("MergeRisk checkSignal", {
4353
4353
  params,
4354
4354
  });
4355
4355
  const riskCheck = await Promise.all(this._riskList.map(async (risk) => await risk.checkSignal(params)));
@@ -4366,7 +4366,7 @@ class MergeRisk {
4366
4366
  * @returns Promise that resolves when all risks have registered the signal
4367
4367
  */
4368
4368
  async addSignal(symbol, context) {
4369
- bt.loggerService.info("MergeRisk addSignal", {
4369
+ backtest$1.loggerService.info("MergeRisk addSignal", {
4370
4370
  symbol,
4371
4371
  context,
4372
4372
  });
@@ -4383,7 +4383,7 @@ class MergeRisk {
4383
4383
  * @returns Promise that resolves when all risks have removed the signal
4384
4384
  */
4385
4385
  async removeSignal(symbol, context) {
4386
- bt.loggerService.info("MergeRisk removeSignal", {
4386
+ backtest$1.loggerService.info("MergeRisk removeSignal", {
4387
4387
  symbol,
4388
4388
  context,
4389
4389
  });
@@ -4452,18 +4452,18 @@ class RiskUtils {
4452
4452
  * ```
4453
4453
  */
4454
4454
  this.getData = async (symbol, strategyName, backtest) => {
4455
- bt.loggerService.info(RISK_METHOD_NAME_GET_DATA, {
4455
+ backtest$1.loggerService.info(RISK_METHOD_NAME_GET_DATA, {
4456
4456
  symbol,
4457
4457
  strategyName,
4458
4458
  });
4459
- bt.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_GET_DATA);
4459
+ backtest$1.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_GET_DATA);
4460
4460
  {
4461
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
4461
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
4462
4462
  riskName &&
4463
- bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_DATA);
4464
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_DATA));
4463
+ backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_DATA);
4464
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_DATA));
4465
4465
  }
4466
- return await bt.riskMarkdownService.getData(symbol, strategyName, backtest);
4466
+ return await backtest$1.riskMarkdownService.getData(symbol, strategyName, backtest);
4467
4467
  };
4468
4468
  /**
4469
4469
  * Generates markdown report with all risk rejection events for a symbol-strategy pair.
@@ -4507,18 +4507,18 @@ class RiskUtils {
4507
4507
  * ```
4508
4508
  */
4509
4509
  this.getReport = async (symbol, strategyName, backtest, columns) => {
4510
- bt.loggerService.info(RISK_METHOD_NAME_GET_REPORT, {
4510
+ backtest$1.loggerService.info(RISK_METHOD_NAME_GET_REPORT, {
4511
4511
  symbol,
4512
4512
  strategyName,
4513
4513
  });
4514
- bt.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_GET_REPORT);
4514
+ backtest$1.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_GET_REPORT);
4515
4515
  {
4516
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
4516
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
4517
4517
  riskName &&
4518
- bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_REPORT);
4519
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_REPORT));
4518
+ backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_REPORT);
4519
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_GET_REPORT));
4520
4520
  }
4521
- return await bt.riskMarkdownService.getReport(symbol, strategyName, backtest, columns);
4521
+ return await backtest$1.riskMarkdownService.getReport(symbol, strategyName, backtest, columns);
4522
4522
  };
4523
4523
  /**
4524
4524
  * Generates and saves markdown report to file.
@@ -4553,19 +4553,19 @@ class RiskUtils {
4553
4553
  * ```
4554
4554
  */
4555
4555
  this.dump = async (symbol, strategyName, backtest, path, columns) => {
4556
- bt.loggerService.info(RISK_METHOD_NAME_DUMP, {
4556
+ backtest$1.loggerService.info(RISK_METHOD_NAME_DUMP, {
4557
4557
  symbol,
4558
4558
  strategyName,
4559
4559
  path,
4560
4560
  });
4561
- bt.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_DUMP);
4561
+ backtest$1.strategyValidationService.validate(strategyName, RISK_METHOD_NAME_DUMP);
4562
4562
  {
4563
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
4563
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
4564
4564
  riskName &&
4565
- bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_DUMP);
4566
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, RISK_METHOD_NAME_DUMP));
4565
+ backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_DUMP);
4566
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, RISK_METHOD_NAME_DUMP));
4567
4567
  }
4568
- await bt.riskMarkdownService.dump(symbol, strategyName, backtest, path, columns);
4568
+ await backtest$1.riskMarkdownService.dump(symbol, strategyName, backtest, path, columns);
4569
4569
  };
4570
4570
  }
4571
4571
  }
@@ -5183,7 +5183,7 @@ const DO_VALIDATION_FN = functoolsKit.trycatch(async (validation, params) => {
5183
5183
  error: functoolsKit.errorData(error),
5184
5184
  message: functoolsKit.getErrorMessage(error),
5185
5185
  };
5186
- bt.loggerService.warn(message, payload);
5186
+ backtest$1.loggerService.warn(message, payload);
5187
5187
  console.warn(message, payload);
5188
5188
  validationSubject.next(error);
5189
5189
  },
@@ -6441,6 +6441,13 @@ class WalkerSchemaService {
6441
6441
  if (walkerSchema.strategies.length === 0) {
6442
6442
  throw new Error(`walker schema validation failed: strategies array cannot be empty for walkerName=${walkerSchema.walkerName}`);
6443
6443
  }
6444
+ if (walkerSchema.strategies &&
6445
+ walkerSchema.strategies.length !== new Set(walkerSchema.strategies).size) {
6446
+ throw new Error(`walker schema validation failed: found duplicate strategies for walkerName=${walkerSchema.walkerName} strategies=[${walkerSchema.strategies}]`);
6447
+ }
6448
+ if (walkerSchema.strategies?.some((value) => typeof value !== "string")) {
6449
+ throw new Error(`walker schema validation failed: invalid strategies for walkerName=${walkerSchema.walkerName} strategies=[${walkerSchema.strategies}]`);
6450
+ }
6444
6451
  };
6445
6452
  /**
6446
6453
  * Overrides an existing walker schema with partial updates.
@@ -13654,7 +13661,7 @@ const backtest = {
13654
13661
  ...templateServices,
13655
13662
  };
13656
13663
  init();
13657
- var bt = backtest;
13664
+ var backtest$1 = backtest;
13658
13665
 
13659
13666
  /**
13660
13667
  * Sets custom logger implementation for the framework.
@@ -13674,7 +13681,7 @@ var bt = backtest;
13674
13681
  * ```
13675
13682
  */
13676
13683
  function setLogger(logger) {
13677
- bt.loggerService.setLogger(logger);
13684
+ backtest$1.loggerService.setLogger(logger);
13678
13685
  }
13679
13686
  /**
13680
13687
  * Sets global configuration parameters for the framework.
@@ -13692,7 +13699,7 @@ function setConfig(config, _unsafe) {
13692
13699
  const prevConfig = Object.assign({}, GLOBAL_CONFIG);
13693
13700
  try {
13694
13701
  Object.assign(GLOBAL_CONFIG, config);
13695
- !_unsafe && bt.configValidationService.validate();
13702
+ !_unsafe && backtest$1.configValidationService.validate();
13696
13703
  }
13697
13704
  catch (error) {
13698
13705
  console.warn(`backtest-kit setConfig failed: ${functoolsKit.getErrorMessage(error)}`, config);
@@ -13763,7 +13770,7 @@ function setColumns(columns, _unsafe) {
13763
13770
  const prevConfig = Object.assign({}, COLUMN_CONFIG);
13764
13771
  try {
13765
13772
  Object.assign(COLUMN_CONFIG, columns);
13766
- !_unsafe && bt.columnValidationService.validate();
13773
+ !_unsafe && backtest$1.columnValidationService.validate();
13767
13774
  }
13768
13775
  catch (error) {
13769
13776
  console.warn(`backtest-kit setColumns failed: ${functoolsKit.getErrorMessage(error)}`, columns);
@@ -13848,11 +13855,11 @@ const ADD_OPTIMIZER_METHOD_NAME = "add.addOptimizer";
13848
13855
  * ```
13849
13856
  */
13850
13857
  function addStrategy(strategySchema) {
13851
- bt.loggerService.info(ADD_STRATEGY_METHOD_NAME, {
13858
+ backtest$1.loggerService.info(ADD_STRATEGY_METHOD_NAME, {
13852
13859
  strategySchema,
13853
13860
  });
13854
- bt.strategyValidationService.addStrategy(strategySchema.strategyName, strategySchema);
13855
- bt.strategySchemaService.register(strategySchema.strategyName, strategySchema);
13861
+ backtest$1.strategyValidationService.addStrategy(strategySchema.strategyName, strategySchema);
13862
+ backtest$1.strategySchemaService.register(strategySchema.strategyName, strategySchema);
13856
13863
  }
13857
13864
  /**
13858
13865
  * Registers an exchange data source in the framework.
@@ -13890,11 +13897,11 @@ function addStrategy(strategySchema) {
13890
13897
  * ```
13891
13898
  */
13892
13899
  function addExchange(exchangeSchema) {
13893
- bt.loggerService.info(ADD_EXCHANGE_METHOD_NAME, {
13900
+ backtest$1.loggerService.info(ADD_EXCHANGE_METHOD_NAME, {
13894
13901
  exchangeSchema,
13895
13902
  });
13896
- bt.exchangeValidationService.addExchange(exchangeSchema.exchangeName, exchangeSchema);
13897
- bt.exchangeSchemaService.register(exchangeSchema.exchangeName, exchangeSchema);
13903
+ backtest$1.exchangeValidationService.addExchange(exchangeSchema.exchangeName, exchangeSchema);
13904
+ backtest$1.exchangeSchemaService.register(exchangeSchema.exchangeName, exchangeSchema);
13898
13905
  }
13899
13906
  /**
13900
13907
  * Registers a timeframe generator for backtesting.
@@ -13927,11 +13934,11 @@ function addExchange(exchangeSchema) {
13927
13934
  * ```
13928
13935
  */
13929
13936
  function addFrame(frameSchema) {
13930
- bt.loggerService.info(ADD_FRAME_METHOD_NAME, {
13937
+ backtest$1.loggerService.info(ADD_FRAME_METHOD_NAME, {
13931
13938
  frameSchema,
13932
13939
  });
13933
- bt.frameValidationService.addFrame(frameSchema.frameName, frameSchema);
13934
- bt.frameSchemaService.register(frameSchema.frameName, frameSchema);
13940
+ backtest$1.frameValidationService.addFrame(frameSchema.frameName, frameSchema);
13941
+ backtest$1.frameSchemaService.register(frameSchema.frameName, frameSchema);
13935
13942
  }
13936
13943
  /**
13937
13944
  * Registers a walker for strategy comparison.
@@ -13971,11 +13978,11 @@ function addFrame(frameSchema) {
13971
13978
  * ```
13972
13979
  */
13973
13980
  function addWalker(walkerSchema) {
13974
- bt.loggerService.info(ADD_WALKER_METHOD_NAME, {
13981
+ backtest$1.loggerService.info(ADD_WALKER_METHOD_NAME, {
13975
13982
  walkerSchema,
13976
13983
  });
13977
- bt.walkerValidationService.addWalker(walkerSchema.walkerName, walkerSchema);
13978
- bt.walkerSchemaService.register(walkerSchema.walkerName, walkerSchema);
13984
+ backtest$1.walkerValidationService.addWalker(walkerSchema.walkerName, walkerSchema);
13985
+ backtest$1.walkerSchemaService.register(walkerSchema.walkerName, walkerSchema);
13979
13986
  }
13980
13987
  /**
13981
13988
  * Registers a position sizing configuration in the framework.
@@ -14030,11 +14037,11 @@ function addWalker(walkerSchema) {
14030
14037
  * ```
14031
14038
  */
14032
14039
  function addSizing(sizingSchema) {
14033
- bt.loggerService.info(ADD_SIZING_METHOD_NAME, {
14040
+ backtest$1.loggerService.info(ADD_SIZING_METHOD_NAME, {
14034
14041
  sizingSchema,
14035
14042
  });
14036
- bt.sizingValidationService.addSizing(sizingSchema.sizingName, sizingSchema);
14037
- bt.sizingSchemaService.register(sizingSchema.sizingName, sizingSchema);
14043
+ backtest$1.sizingValidationService.addSizing(sizingSchema.sizingName, sizingSchema);
14044
+ backtest$1.sizingSchemaService.register(sizingSchema.sizingName, sizingSchema);
14038
14045
  }
14039
14046
  /**
14040
14047
  * Registers a risk management configuration in the framework.
@@ -14098,11 +14105,11 @@ function addSizing(sizingSchema) {
14098
14105
  * ```
14099
14106
  */
14100
14107
  function addRisk(riskSchema) {
14101
- bt.loggerService.info(ADD_RISK_METHOD_NAME, {
14108
+ backtest$1.loggerService.info(ADD_RISK_METHOD_NAME, {
14102
14109
  riskSchema,
14103
14110
  });
14104
- bt.riskValidationService.addRisk(riskSchema.riskName, riskSchema);
14105
- bt.riskSchemaService.register(riskSchema.riskName, riskSchema);
14111
+ backtest$1.riskValidationService.addRisk(riskSchema.riskName, riskSchema);
14112
+ backtest$1.riskSchemaService.register(riskSchema.riskName, riskSchema);
14106
14113
  }
14107
14114
  /**
14108
14115
  * Registers an optimizer configuration in the framework.
@@ -14192,11 +14199,11 @@ function addRisk(riskSchema) {
14192
14199
  * ```
14193
14200
  */
14194
14201
  function addOptimizer(optimizerSchema) {
14195
- bt.loggerService.info(ADD_OPTIMIZER_METHOD_NAME, {
14202
+ backtest$1.loggerService.info(ADD_OPTIMIZER_METHOD_NAME, {
14196
14203
  optimizerSchema,
14197
14204
  });
14198
- bt.optimizerValidationService.addOptimizer(optimizerSchema.optimizerName, optimizerSchema);
14199
- bt.optimizerSchemaService.register(optimizerSchema.optimizerName, optimizerSchema);
14205
+ backtest$1.optimizerValidationService.addOptimizer(optimizerSchema.optimizerName, optimizerSchema);
14206
+ backtest$1.optimizerSchemaService.register(optimizerSchema.optimizerName, optimizerSchema);
14200
14207
  }
14201
14208
 
14202
14209
  const LIST_EXCHANGES_METHOD_NAME = "list.listExchanges";
@@ -14232,8 +14239,8 @@ const LIST_OPTIMIZERS_METHOD_NAME = "list.listOptimizers";
14232
14239
  * ```
14233
14240
  */
14234
14241
  async function listExchanges() {
14235
- bt.loggerService.log(LIST_EXCHANGES_METHOD_NAME);
14236
- return await bt.exchangeValidationService.list();
14242
+ backtest$1.loggerService.log(LIST_EXCHANGES_METHOD_NAME);
14243
+ return await backtest$1.exchangeValidationService.list();
14237
14244
  }
14238
14245
  /**
14239
14246
  * Returns a list of all registered strategy schemas.
@@ -14266,8 +14273,8 @@ async function listExchanges() {
14266
14273
  * ```
14267
14274
  */
14268
14275
  async function listStrategies() {
14269
- bt.loggerService.log(LIST_STRATEGIES_METHOD_NAME);
14270
- return await bt.strategyValidationService.list();
14276
+ backtest$1.loggerService.log(LIST_STRATEGIES_METHOD_NAME);
14277
+ return await backtest$1.strategyValidationService.list();
14271
14278
  }
14272
14279
  /**
14273
14280
  * Returns a list of all registered frame schemas.
@@ -14295,8 +14302,8 @@ async function listStrategies() {
14295
14302
  * ```
14296
14303
  */
14297
14304
  async function listFrames() {
14298
- bt.loggerService.log(LIST_FRAMES_METHOD_NAME);
14299
- return await bt.frameValidationService.list();
14305
+ backtest$1.loggerService.log(LIST_FRAMES_METHOD_NAME);
14306
+ return await backtest$1.frameValidationService.list();
14300
14307
  }
14301
14308
  /**
14302
14309
  * Returns a list of all registered walker schemas.
@@ -14325,8 +14332,8 @@ async function listFrames() {
14325
14332
  * ```
14326
14333
  */
14327
14334
  async function listWalkers() {
14328
- bt.loggerService.log(LIST_WALKERS_METHOD_NAME);
14329
- return await bt.walkerValidationService.list();
14335
+ backtest$1.loggerService.log(LIST_WALKERS_METHOD_NAME);
14336
+ return await backtest$1.walkerValidationService.list();
14330
14337
  }
14331
14338
  /**
14332
14339
  * Returns a list of all registered sizing schemas.
@@ -14364,8 +14371,8 @@ async function listWalkers() {
14364
14371
  * ```
14365
14372
  */
14366
14373
  async function listSizings() {
14367
- bt.loggerService.log(LIST_SIZINGS_METHOD_NAME);
14368
- return await bt.sizingValidationService.list();
14374
+ backtest$1.loggerService.log(LIST_SIZINGS_METHOD_NAME);
14375
+ return await backtest$1.sizingValidationService.list();
14369
14376
  }
14370
14377
  /**
14371
14378
  * Returns a list of all registered risk schemas.
@@ -14400,8 +14407,8 @@ async function listSizings() {
14400
14407
  * ```
14401
14408
  */
14402
14409
  async function listRisks() {
14403
- bt.loggerService.log(LIST_RISKS_METHOD_NAME);
14404
- return await bt.riskValidationService.list();
14410
+ backtest$1.loggerService.log(LIST_RISKS_METHOD_NAME);
14411
+ return await backtest$1.riskValidationService.list();
14405
14412
  }
14406
14413
  /**
14407
14414
  * Returns a list of all registered optimizer schemas.
@@ -14440,8 +14447,8 @@ async function listRisks() {
14440
14447
  * ```
14441
14448
  */
14442
14449
  async function listOptimizers() {
14443
- bt.loggerService.log(LIST_OPTIMIZERS_METHOD_NAME);
14444
- return await bt.optimizerValidationService.list();
14450
+ backtest$1.loggerService.log(LIST_OPTIMIZERS_METHOD_NAME);
14451
+ return await backtest$1.optimizerValidationService.list();
14445
14452
  }
14446
14453
 
14447
14454
  const LISTEN_SIGNAL_METHOD_NAME = "event.listenSignal";
@@ -14498,7 +14505,7 @@ const LISTEN_RISK_ONCE_METHOD_NAME = "event.listenRiskOnce";
14498
14505
  * ```
14499
14506
  */
14500
14507
  function listenSignal(fn) {
14501
- bt.loggerService.log(LISTEN_SIGNAL_METHOD_NAME);
14508
+ backtest$1.loggerService.log(LISTEN_SIGNAL_METHOD_NAME);
14502
14509
  return signalEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
14503
14510
  }
14504
14511
  /**
@@ -14534,7 +14541,7 @@ function listenSignal(fn) {
14534
14541
  * ```
14535
14542
  */
14536
14543
  function listenSignalOnce(filterFn, fn) {
14537
- bt.loggerService.log(LISTEN_SIGNAL_ONCE_METHOD_NAME);
14544
+ backtest$1.loggerService.log(LISTEN_SIGNAL_ONCE_METHOD_NAME);
14538
14545
  return signalEmitter.filter(filterFn).once(fn);
14539
14546
  }
14540
14547
  /**
@@ -14558,7 +14565,7 @@ function listenSignalOnce(filterFn, fn) {
14558
14565
  * ```
14559
14566
  */
14560
14567
  function listenSignalLive(fn) {
14561
- bt.loggerService.log(LISTEN_SIGNAL_LIVE_METHOD_NAME);
14568
+ backtest$1.loggerService.log(LISTEN_SIGNAL_LIVE_METHOD_NAME);
14562
14569
  return signalLiveEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
14563
14570
  }
14564
14571
  /**
@@ -14583,7 +14590,7 @@ function listenSignalLive(fn) {
14583
14590
  * ```
14584
14591
  */
14585
14592
  function listenSignalLiveOnce(filterFn, fn) {
14586
- bt.loggerService.log(LISTEN_SIGNAL_LIVE_ONCE_METHOD_NAME);
14593
+ backtest$1.loggerService.log(LISTEN_SIGNAL_LIVE_ONCE_METHOD_NAME);
14587
14594
  return signalLiveEmitter.filter(filterFn).once(fn);
14588
14595
  }
14589
14596
  /**
@@ -14607,7 +14614,7 @@ function listenSignalLiveOnce(filterFn, fn) {
14607
14614
  * ```
14608
14615
  */
14609
14616
  function listenSignalBacktest(fn) {
14610
- bt.loggerService.log(LISTEN_SIGNAL_BACKTEST_METHOD_NAME);
14617
+ backtest$1.loggerService.log(LISTEN_SIGNAL_BACKTEST_METHOD_NAME);
14611
14618
  return signalBacktestEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
14612
14619
  }
14613
14620
  /**
@@ -14632,7 +14639,7 @@ function listenSignalBacktest(fn) {
14632
14639
  * ```
14633
14640
  */
14634
14641
  function listenSignalBacktestOnce(filterFn, fn) {
14635
- bt.loggerService.log(LISTEN_SIGNAL_BACKTEST_ONCE_METHOD_NAME);
14642
+ backtest$1.loggerService.log(LISTEN_SIGNAL_BACKTEST_ONCE_METHOD_NAME);
14636
14643
  return signalBacktestEmitter.filter(filterFn).once(fn);
14637
14644
  }
14638
14645
  /**
@@ -14660,7 +14667,7 @@ function listenSignalBacktestOnce(filterFn, fn) {
14660
14667
  * ```
14661
14668
  */
14662
14669
  function listenError(fn) {
14663
- bt.loggerService.log(LISTEN_ERROR_METHOD_NAME);
14670
+ backtest$1.loggerService.log(LISTEN_ERROR_METHOD_NAME);
14664
14671
  return errorEmitter.subscribe(functoolsKit.queued(async (error) => fn(error)));
14665
14672
  }
14666
14673
  /**
@@ -14688,7 +14695,7 @@ function listenError(fn) {
14688
14695
  * ```
14689
14696
  */
14690
14697
  function listenExit(fn) {
14691
- bt.loggerService.log(LISTEN_EXIT_METHOD_NAME);
14698
+ backtest$1.loggerService.log(LISTEN_EXIT_METHOD_NAME);
14692
14699
  return exitEmitter.subscribe(functoolsKit.queued(async (error) => fn(error)));
14693
14700
  }
14694
14701
  /**
@@ -14719,7 +14726,7 @@ function listenExit(fn) {
14719
14726
  * ```
14720
14727
  */
14721
14728
  function listenDoneLive(fn) {
14722
- bt.loggerService.log(LISTEN_DONE_LIVE_METHOD_NAME);
14729
+ backtest$1.loggerService.log(LISTEN_DONE_LIVE_METHOD_NAME);
14723
14730
  return doneLiveSubject.subscribe(functoolsKit.queued(async (event) => fn(event)));
14724
14731
  }
14725
14732
  /**
@@ -14749,7 +14756,7 @@ function listenDoneLive(fn) {
14749
14756
  * ```
14750
14757
  */
14751
14758
  function listenDoneLiveOnce(filterFn, fn) {
14752
- bt.loggerService.log(LISTEN_DONE_LIVE_ONCE_METHOD_NAME);
14759
+ backtest$1.loggerService.log(LISTEN_DONE_LIVE_ONCE_METHOD_NAME);
14753
14760
  return doneLiveSubject.filter(filterFn).once(fn);
14754
14761
  }
14755
14762
  /**
@@ -14781,7 +14788,7 @@ function listenDoneLiveOnce(filterFn, fn) {
14781
14788
  * ```
14782
14789
  */
14783
14790
  function listenDoneBacktest(fn) {
14784
- bt.loggerService.log(LISTEN_DONE_BACKTEST_METHOD_NAME);
14791
+ backtest$1.loggerService.log(LISTEN_DONE_BACKTEST_METHOD_NAME);
14785
14792
  return doneBacktestSubject.subscribe(functoolsKit.queued(async (event) => fn(event)));
14786
14793
  }
14787
14794
  /**
@@ -14812,7 +14819,7 @@ function listenDoneBacktest(fn) {
14812
14819
  * ```
14813
14820
  */
14814
14821
  function listenDoneBacktestOnce(filterFn, fn) {
14815
- bt.loggerService.log(LISTEN_DONE_BACKTEST_ONCE_METHOD_NAME);
14822
+ backtest$1.loggerService.log(LISTEN_DONE_BACKTEST_ONCE_METHOD_NAME);
14816
14823
  return doneBacktestSubject.filter(filterFn).once(fn);
14817
14824
  }
14818
14825
  /**
@@ -14842,7 +14849,7 @@ function listenDoneBacktestOnce(filterFn, fn) {
14842
14849
  * ```
14843
14850
  */
14844
14851
  function listenDoneWalker(fn) {
14845
- bt.loggerService.log(LISTEN_DONE_WALKER_METHOD_NAME);
14852
+ backtest$1.loggerService.log(LISTEN_DONE_WALKER_METHOD_NAME);
14846
14853
  return doneWalkerSubject.subscribe(functoolsKit.queued(async (event) => fn(event)));
14847
14854
  }
14848
14855
  /**
@@ -14871,7 +14878,7 @@ function listenDoneWalker(fn) {
14871
14878
  * ```
14872
14879
  */
14873
14880
  function listenDoneWalkerOnce(filterFn, fn) {
14874
- bt.loggerService.log(LISTEN_DONE_WALKER_ONCE_METHOD_NAME);
14881
+ backtest$1.loggerService.log(LISTEN_DONE_WALKER_ONCE_METHOD_NAME);
14875
14882
  return doneWalkerSubject.filter(filterFn).once(fn);
14876
14883
  }
14877
14884
  /**
@@ -14905,7 +14912,7 @@ function listenDoneWalkerOnce(filterFn, fn) {
14905
14912
  * ```
14906
14913
  */
14907
14914
  function listenBacktestProgress(fn) {
14908
- bt.loggerService.log(LISTEN_PROGRESS_METHOD_NAME);
14915
+ backtest$1.loggerService.log(LISTEN_PROGRESS_METHOD_NAME);
14909
14916
  return progressBacktestEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
14910
14917
  }
14911
14918
  /**
@@ -14939,7 +14946,7 @@ function listenBacktestProgress(fn) {
14939
14946
  * ```
14940
14947
  */
14941
14948
  function listenWalkerProgress(fn) {
14942
- bt.loggerService.log(LISTEN_PROGRESS_WALKER_METHOD_NAME);
14949
+ backtest$1.loggerService.log(LISTEN_PROGRESS_WALKER_METHOD_NAME);
14943
14950
  return progressWalkerEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
14944
14951
  }
14945
14952
  /**
@@ -14967,7 +14974,7 @@ function listenWalkerProgress(fn) {
14967
14974
  * ```
14968
14975
  */
14969
14976
  function listenOptimizerProgress(fn) {
14970
- bt.loggerService.log(LISTEN_PROGRESS_OPTIMIZER_METHOD_NAME);
14977
+ backtest$1.loggerService.log(LISTEN_PROGRESS_OPTIMIZER_METHOD_NAME);
14971
14978
  return progressOptimizerEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
14972
14979
  }
14973
14980
  /**
@@ -15003,7 +15010,7 @@ function listenOptimizerProgress(fn) {
15003
15010
  * ```
15004
15011
  */
15005
15012
  function listenPerformance(fn) {
15006
- bt.loggerService.log(LISTEN_PERFORMANCE_METHOD_NAME);
15013
+ backtest$1.loggerService.log(LISTEN_PERFORMANCE_METHOD_NAME);
15007
15014
  return performanceEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
15008
15015
  }
15009
15016
  /**
@@ -15037,7 +15044,7 @@ function listenPerformance(fn) {
15037
15044
  * ```
15038
15045
  */
15039
15046
  function listenWalker(fn) {
15040
- bt.loggerService.log(LISTEN_WALKER_METHOD_NAME);
15047
+ backtest$1.loggerService.log(LISTEN_WALKER_METHOD_NAME);
15041
15048
  return walkerEmitter.subscribe(functoolsKit.queued(async (event) => fn(event)));
15042
15049
  }
15043
15050
  /**
@@ -15080,7 +15087,7 @@ function listenWalker(fn) {
15080
15087
  * ```
15081
15088
  */
15082
15089
  function listenWalkerOnce(filterFn, fn) {
15083
- bt.loggerService.log(LISTEN_WALKER_ONCE_METHOD_NAME);
15090
+ backtest$1.loggerService.log(LISTEN_WALKER_ONCE_METHOD_NAME);
15084
15091
  return walkerEmitter.filter(filterFn).once(fn);
15085
15092
  }
15086
15093
  /**
@@ -15115,7 +15122,7 @@ function listenWalkerOnce(filterFn, fn) {
15115
15122
  * ```
15116
15123
  */
15117
15124
  function listenWalkerComplete(fn) {
15118
- bt.loggerService.log(LISTEN_WALKER_COMPLETE_METHOD_NAME);
15125
+ backtest$1.loggerService.log(LISTEN_WALKER_COMPLETE_METHOD_NAME);
15119
15126
  return walkerCompleteSubject.subscribe(functoolsKit.queued(async (event) => fn(event)));
15120
15127
  }
15121
15128
  /**
@@ -15143,7 +15150,7 @@ function listenWalkerComplete(fn) {
15143
15150
  * ```
15144
15151
  */
15145
15152
  function listenValidation(fn) {
15146
- bt.loggerService.log(LISTEN_VALIDATION_METHOD_NAME);
15153
+ backtest$1.loggerService.log(LISTEN_VALIDATION_METHOD_NAME);
15147
15154
  return validationSubject.subscribe(functoolsKit.queued(async (error) => fn(error)));
15148
15155
  }
15149
15156
  /**
@@ -15171,7 +15178,7 @@ function listenValidation(fn) {
15171
15178
  * ```
15172
15179
  */
15173
15180
  function listenPartialProfit(fn) {
15174
- bt.loggerService.log(LISTEN_PARTIAL_PROFIT_METHOD_NAME);
15181
+ backtest$1.loggerService.log(LISTEN_PARTIAL_PROFIT_METHOD_NAME);
15175
15182
  return partialProfitSubject.subscribe(functoolsKit.queued(async (event) => fn(event)));
15176
15183
  }
15177
15184
  /**
@@ -15205,7 +15212,7 @@ function listenPartialProfit(fn) {
15205
15212
  * ```
15206
15213
  */
15207
15214
  function listenPartialProfitOnce(filterFn, fn) {
15208
- bt.loggerService.log(LISTEN_PARTIAL_PROFIT_ONCE_METHOD_NAME);
15215
+ backtest$1.loggerService.log(LISTEN_PARTIAL_PROFIT_ONCE_METHOD_NAME);
15209
15216
  return partialProfitSubject.filter(filterFn).once(fn);
15210
15217
  }
15211
15218
  /**
@@ -15233,7 +15240,7 @@ function listenPartialProfitOnce(filterFn, fn) {
15233
15240
  * ```
15234
15241
  */
15235
15242
  function listenPartialLoss(fn) {
15236
- bt.loggerService.log(LISTEN_PARTIAL_LOSS_METHOD_NAME);
15243
+ backtest$1.loggerService.log(LISTEN_PARTIAL_LOSS_METHOD_NAME);
15237
15244
  return partialLossSubject.subscribe(functoolsKit.queued(async (event) => fn(event)));
15238
15245
  }
15239
15246
  /**
@@ -15267,7 +15274,7 @@ function listenPartialLoss(fn) {
15267
15274
  * ```
15268
15275
  */
15269
15276
  function listenPartialLossOnce(filterFn, fn) {
15270
- bt.loggerService.log(LISTEN_PARTIAL_LOSS_ONCE_METHOD_NAME);
15277
+ backtest$1.loggerService.log(LISTEN_PARTIAL_LOSS_ONCE_METHOD_NAME);
15271
15278
  return partialLossSubject.filter(filterFn).once(fn);
15272
15279
  }
15273
15280
  /**
@@ -15299,7 +15306,7 @@ function listenPartialLossOnce(filterFn, fn) {
15299
15306
  * ```
15300
15307
  */
15301
15308
  function listenRisk(fn) {
15302
- bt.loggerService.log(LISTEN_RISK_METHOD_NAME);
15309
+ backtest$1.loggerService.log(LISTEN_RISK_METHOD_NAME);
15303
15310
  return riskSubject.subscribe(functoolsKit.queued(async (event) => fn(event)));
15304
15311
  }
15305
15312
  /**
@@ -15336,7 +15343,7 @@ function listenRisk(fn) {
15336
15343
  * ```
15337
15344
  */
15338
15345
  function listenRiskOnce(filterFn, fn) {
15339
- bt.loggerService.log(LISTEN_RISK_ONCE_METHOD_NAME);
15346
+ backtest$1.loggerService.log(LISTEN_RISK_ONCE_METHOD_NAME);
15340
15347
  return riskSubject.filter(filterFn).once(fn);
15341
15348
  }
15342
15349
 
@@ -15346,6 +15353,31 @@ const FORMAT_PRICE_METHOD_NAME = "exchange.formatPrice";
15346
15353
  const FORMAT_QUANTITY_METHOD_NAME = "exchange.formatQuantity";
15347
15354
  const GET_DATE_METHOD_NAME = "exchange.getDate";
15348
15355
  const GET_MODE_METHOD_NAME = "exchange.getMode";
15356
+ const HAS_TRADE_CONTEXT_METHOD_NAME = "exchange.hasTradeContext";
15357
+ /**
15358
+ * Checks if trade context is active (execution and method contexts).
15359
+ *
15360
+ * Returns true when both contexts are active, which is required for calling
15361
+ * exchange functions like getCandles, getAveragePrice, formatPrice, formatQuantity,
15362
+ * getDate, and getMode.
15363
+ *
15364
+ * @returns true if trade context is active, false otherwise
15365
+ *
15366
+ * @example
15367
+ * ```typescript
15368
+ * import { hasTradeContext, getCandles } from "backtest-kit";
15369
+ *
15370
+ * if (hasTradeContext()) {
15371
+ * const candles = await getCandles("BTCUSDT", "1m", 100);
15372
+ * } else {
15373
+ * console.log("Trade context not active");
15374
+ * }
15375
+ * ```
15376
+ */
15377
+ function hasTradeContext() {
15378
+ backtest$1.loggerService.info(HAS_TRADE_CONTEXT_METHOD_NAME);
15379
+ return ExecutionContextService.hasContext() && MethodContextService.hasContext();
15380
+ }
15349
15381
  /**
15350
15382
  * Fetches historical candle data from the registered exchange.
15351
15383
  *
@@ -15364,12 +15396,18 @@ const GET_MODE_METHOD_NAME = "exchange.getMode";
15364
15396
  * ```
15365
15397
  */
15366
15398
  async function getCandles(symbol, interval, limit) {
15367
- bt.loggerService.info(GET_CANDLES_METHOD_NAME, {
15399
+ backtest$1.loggerService.info(GET_CANDLES_METHOD_NAME, {
15368
15400
  symbol,
15369
15401
  interval,
15370
15402
  limit,
15371
15403
  });
15372
- return await bt.exchangeConnectionService.getCandles(symbol, interval, limit);
15404
+ if (!ExecutionContextService.hasContext()) {
15405
+ throw new Error("getCandles requires an execution context");
15406
+ }
15407
+ if (!MethodContextService.hasContext()) {
15408
+ throw new Error("getCandles requires a method context");
15409
+ }
15410
+ return await backtest$1.exchangeConnectionService.getCandles(symbol, interval, limit);
15373
15411
  }
15374
15412
  /**
15375
15413
  * Calculates VWAP (Volume Weighted Average Price) for a symbol.
@@ -15390,10 +15428,16 @@ async function getCandles(symbol, interval, limit) {
15390
15428
  * ```
15391
15429
  */
15392
15430
  async function getAveragePrice(symbol) {
15393
- bt.loggerService.info(GET_AVERAGE_PRICE_METHOD_NAME, {
15431
+ backtest$1.loggerService.info(GET_AVERAGE_PRICE_METHOD_NAME, {
15394
15432
  symbol,
15395
15433
  });
15396
- return await bt.exchangeConnectionService.getAveragePrice(symbol);
15434
+ if (!ExecutionContextService.hasContext()) {
15435
+ throw new Error("getAveragePrice requires an execution context");
15436
+ }
15437
+ if (!MethodContextService.hasContext()) {
15438
+ throw new Error("getAveragePrice requires a method context");
15439
+ }
15440
+ return await backtest$1.exchangeConnectionService.getAveragePrice(symbol);
15397
15441
  }
15398
15442
  /**
15399
15443
  * Formats a price value according to exchange rules.
@@ -15411,11 +15455,14 @@ async function getAveragePrice(symbol) {
15411
15455
  * ```
15412
15456
  */
15413
15457
  async function formatPrice(symbol, price) {
15414
- bt.loggerService.info(FORMAT_PRICE_METHOD_NAME, {
15458
+ backtest$1.loggerService.info(FORMAT_PRICE_METHOD_NAME, {
15415
15459
  symbol,
15416
15460
  price,
15417
15461
  });
15418
- return await bt.exchangeConnectionService.formatPrice(symbol, price);
15462
+ if (!MethodContextService.hasContext()) {
15463
+ throw new Error("formatPrice requires a method context");
15464
+ }
15465
+ return await backtest$1.exchangeConnectionService.formatPrice(symbol, price);
15419
15466
  }
15420
15467
  /**
15421
15468
  * Formats a quantity value according to exchange rules.
@@ -15433,11 +15480,14 @@ async function formatPrice(symbol, price) {
15433
15480
  * ```
15434
15481
  */
15435
15482
  async function formatQuantity(symbol, quantity) {
15436
- bt.loggerService.info(FORMAT_QUANTITY_METHOD_NAME, {
15483
+ backtest$1.loggerService.info(FORMAT_QUANTITY_METHOD_NAME, {
15437
15484
  symbol,
15438
15485
  quantity,
15439
15486
  });
15440
- return await bt.exchangeConnectionService.formatQuantity(symbol, quantity);
15487
+ if (!MethodContextService.hasContext()) {
15488
+ throw new Error("formatQuantity requires a method context");
15489
+ }
15490
+ return await backtest$1.exchangeConnectionService.formatQuantity(symbol, quantity);
15441
15491
  }
15442
15492
  /**
15443
15493
  * Gets the current date from execution context.
@@ -15454,8 +15504,11 @@ async function formatQuantity(symbol, quantity) {
15454
15504
  * ```
15455
15505
  */
15456
15506
  async function getDate() {
15457
- bt.loggerService.info(GET_DATE_METHOD_NAME);
15458
- const { when } = bt.executionContextService.context;
15507
+ backtest$1.loggerService.info(GET_DATE_METHOD_NAME);
15508
+ if (!ExecutionContextService.hasContext()) {
15509
+ throw new Error("getDate requires an execution context");
15510
+ }
15511
+ const { when } = backtest$1.executionContextService.context;
15459
15512
  return new Date(when.getTime());
15460
15513
  }
15461
15514
  /**
@@ -15474,9 +15527,12 @@ async function getDate() {
15474
15527
  * ```
15475
15528
  */
15476
15529
  async function getMode() {
15477
- bt.loggerService.info(GET_MODE_METHOD_NAME);
15478
- const { backtest: bt$1 } = bt.executionContextService.context;
15479
- return bt$1 ? "backtest" : "live";
15530
+ backtest$1.loggerService.info(GET_MODE_METHOD_NAME);
15531
+ if (!ExecutionContextService.hasContext()) {
15532
+ throw new Error("getMode requires an execution context");
15533
+ }
15534
+ const { backtest: bt } = backtest$1.executionContextService.context;
15535
+ return bt ? "backtest" : "live";
15480
15536
  }
15481
15537
 
15482
15538
  const DUMP_SIGNAL_METHOD_NAME = "dump.dumpSignal";
@@ -15547,13 +15603,13 @@ const DUMP_SIGNAL_METHOD_NAME = "dump.dumpSignal";
15547
15603
  * ```
15548
15604
  */
15549
15605
  async function dumpSignal(signalId, history, signal, outputDir = "./dump/strategy") {
15550
- bt.loggerService.info(DUMP_SIGNAL_METHOD_NAME, {
15606
+ backtest$1.loggerService.info(DUMP_SIGNAL_METHOD_NAME, {
15551
15607
  signalId,
15552
15608
  history,
15553
15609
  signal,
15554
15610
  outputDir,
15555
15611
  });
15556
- return await bt.outlineMarkdownService.dumpSignal(signalId, history, signal, outputDir);
15612
+ return await backtest$1.outlineMarkdownService.dumpSignal(signalId, history, signal, outputDir);
15557
15613
  }
15558
15614
 
15559
15615
  const BACKTEST_METHOD_NAME_RUN = "BacktestUtils.run";
@@ -15640,7 +15696,7 @@ class BacktestInstance {
15640
15696
  * @internal
15641
15697
  */
15642
15698
  this.task = functoolsKit.singlerun(async (symbol, context) => {
15643
- bt.loggerService.info(BACKTEST_METHOD_NAME_TASK, {
15699
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_TASK, {
15644
15700
  symbol,
15645
15701
  context,
15646
15702
  });
@@ -15659,7 +15715,7 @@ class BacktestInstance {
15659
15715
  * ```
15660
15716
  */
15661
15717
  this.getStatus = async () => {
15662
- bt.loggerService.info(BACKTEST_METHOD_NAME_GET_STATUS);
15718
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_GET_STATUS);
15663
15719
  return {
15664
15720
  id: this.id,
15665
15721
  symbol: this.symbol,
@@ -15675,27 +15731,27 @@ class BacktestInstance {
15675
15731
  * @returns Async generator yielding closed signals with PNL
15676
15732
  */
15677
15733
  this.run = (symbol, context) => {
15678
- bt.loggerService.info(BACKTEST_METHOD_NAME_RUN, {
15734
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_RUN, {
15679
15735
  symbol,
15680
15736
  context,
15681
15737
  });
15682
15738
  {
15683
- bt.backtestMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15684
- bt.liveMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15685
- bt.scheduleMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15686
- bt.performanceMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15687
- bt.partialMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15688
- bt.riskMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15739
+ backtest$1.backtestMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15740
+ backtest$1.liveMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15741
+ backtest$1.scheduleMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15742
+ backtest$1.performanceMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15743
+ backtest$1.partialMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15744
+ backtest$1.riskMarkdownService.clear(true, { symbol, strategyName: context.strategyName });
15689
15745
  }
15690
15746
  {
15691
- bt.strategyCoreService.clear(true, { symbol, strategyName: context.strategyName });
15747
+ backtest$1.strategyCoreService.clear(true, { symbol, strategyName: context.strategyName });
15692
15748
  }
15693
15749
  {
15694
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
15695
- riskName && bt.riskGlobalService.clear(true, riskName);
15696
- riskList && riskList.forEach((riskName) => bt.riskGlobalService.clear(true, riskName));
15750
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
15751
+ riskName && backtest$1.riskGlobalService.clear(true, riskName);
15752
+ riskList && riskList.forEach((riskName) => backtest$1.riskGlobalService.clear(true, riskName));
15697
15753
  }
15698
- return bt.backtestCommandService.run(symbol, context);
15754
+ return backtest$1.backtestCommandService.run(symbol, context);
15699
15755
  };
15700
15756
  /**
15701
15757
  * Runs backtest in background without yielding results.
@@ -15718,7 +15774,7 @@ class BacktestInstance {
15718
15774
  * ```
15719
15775
  */
15720
15776
  this.background = (symbol, context) => {
15721
- bt.loggerService.info(BACKTEST_METHOD_NAME_BACKGROUND, {
15777
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_BACKGROUND, {
15722
15778
  symbol,
15723
15779
  context,
15724
15780
  });
@@ -15733,8 +15789,8 @@ class BacktestInstance {
15733
15789
  }
15734
15790
  this.task(symbol, context).catch((error) => exitEmitter.next(new Error(functoolsKit.getErrorMessage(error))));
15735
15791
  return () => {
15736
- bt.strategyCoreService.stop(true, { symbol, strategyName: context.strategyName });
15737
- bt.strategyCoreService
15792
+ backtest$1.strategyCoreService.stop(true, { symbol, strategyName: context.strategyName });
15793
+ backtest$1.strategyCoreService
15738
15794
  .getPendingSignal(true, symbol, context.strategyName)
15739
15795
  .then(async (pendingSignal) => {
15740
15796
  if (pendingSignal) {
@@ -15771,11 +15827,11 @@ class BacktestInstance {
15771
15827
  * ```
15772
15828
  */
15773
15829
  this.stop = async (symbol, strategyName) => {
15774
- bt.loggerService.info(BACKTEST_METHOD_NAME_STOP, {
15830
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_STOP, {
15775
15831
  symbol,
15776
15832
  strategyName,
15777
15833
  });
15778
- await bt.strategyCoreService.stop(true, { symbol, strategyName });
15834
+ await backtest$1.strategyCoreService.stop(true, { symbol, strategyName });
15779
15835
  };
15780
15836
  /**
15781
15837
  * Gets statistical data from all closed signals for a symbol-strategy pair.
@@ -15792,11 +15848,11 @@ class BacktestInstance {
15792
15848
  * ```
15793
15849
  */
15794
15850
  this.getData = async (symbol, strategyName) => {
15795
- bt.loggerService.info("BacktestUtils.getData", {
15851
+ backtest$1.loggerService.info("BacktestUtils.getData", {
15796
15852
  symbol,
15797
15853
  strategyName,
15798
15854
  });
15799
- return await bt.backtestMarkdownService.getData(symbol, strategyName, true);
15855
+ return await backtest$1.backtestMarkdownService.getData(symbol, strategyName, true);
15800
15856
  };
15801
15857
  /**
15802
15858
  * Generates markdown report with all closed signals for a symbol-strategy pair.
@@ -15814,11 +15870,11 @@ class BacktestInstance {
15814
15870
  * ```
15815
15871
  */
15816
15872
  this.getReport = async (symbol, strategyName, columns) => {
15817
- bt.loggerService.info(BACKTEST_METHOD_NAME_GET_REPORT, {
15873
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_GET_REPORT, {
15818
15874
  symbol,
15819
15875
  strategyName,
15820
15876
  });
15821
- return await bt.backtestMarkdownService.getReport(symbol, strategyName, true, columns);
15877
+ return await backtest$1.backtestMarkdownService.getReport(symbol, strategyName, true, columns);
15822
15878
  };
15823
15879
  /**
15824
15880
  * Saves strategy report to disk.
@@ -15839,12 +15895,12 @@ class BacktestInstance {
15839
15895
  * ```
15840
15896
  */
15841
15897
  this.dump = async (symbol, strategyName, path, columns) => {
15842
- bt.loggerService.info(BACKTEST_METHOD_NAME_DUMP, {
15898
+ backtest$1.loggerService.info(BACKTEST_METHOD_NAME_DUMP, {
15843
15899
  symbol,
15844
15900
  strategyName,
15845
15901
  path,
15846
15902
  });
15847
- await bt.backtestMarkdownService.dump(symbol, strategyName, true, path, columns);
15903
+ await backtest$1.backtestMarkdownService.dump(symbol, strategyName, true, path, columns);
15848
15904
  };
15849
15905
  }
15850
15906
  }
@@ -15883,14 +15939,14 @@ class BacktestUtils {
15883
15939
  */
15884
15940
  this.run = (symbol, context) => {
15885
15941
  {
15886
- bt.strategyValidationService.validate(context.strategyName, BACKTEST_METHOD_NAME_RUN);
15887
- bt.exchangeValidationService.validate(context.exchangeName, BACKTEST_METHOD_NAME_RUN);
15888
- bt.frameValidationService.validate(context.frameName, BACKTEST_METHOD_NAME_RUN);
15942
+ backtest$1.strategyValidationService.validate(context.strategyName, BACKTEST_METHOD_NAME_RUN);
15943
+ backtest$1.exchangeValidationService.validate(context.exchangeName, BACKTEST_METHOD_NAME_RUN);
15944
+ backtest$1.frameValidationService.validate(context.frameName, BACKTEST_METHOD_NAME_RUN);
15889
15945
  }
15890
15946
  {
15891
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
15892
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_RUN);
15893
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_RUN));
15947
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
15948
+ riskName && backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_RUN);
15949
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_RUN));
15894
15950
  }
15895
15951
  const instance = this._getInstance(symbol, context.strategyName);
15896
15952
  return instance.run(symbol, context);
@@ -15917,13 +15973,13 @@ class BacktestUtils {
15917
15973
  * ```
15918
15974
  */
15919
15975
  this.background = (symbol, context) => {
15920
- bt.strategyValidationService.validate(context.strategyName, BACKTEST_METHOD_NAME_BACKGROUND);
15921
- bt.exchangeValidationService.validate(context.exchangeName, BACKTEST_METHOD_NAME_BACKGROUND);
15922
- bt.frameValidationService.validate(context.frameName, BACKTEST_METHOD_NAME_BACKGROUND);
15976
+ backtest$1.strategyValidationService.validate(context.strategyName, BACKTEST_METHOD_NAME_BACKGROUND);
15977
+ backtest$1.exchangeValidationService.validate(context.exchangeName, BACKTEST_METHOD_NAME_BACKGROUND);
15978
+ backtest$1.frameValidationService.validate(context.frameName, BACKTEST_METHOD_NAME_BACKGROUND);
15923
15979
  {
15924
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
15925
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_BACKGROUND);
15926
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_BACKGROUND));
15980
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
15981
+ riskName && backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_BACKGROUND);
15982
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_BACKGROUND));
15927
15983
  }
15928
15984
  const instance = this._getInstance(symbol, context.strategyName);
15929
15985
  return instance.background(symbol, context);
@@ -15946,11 +16002,11 @@ class BacktestUtils {
15946
16002
  * ```
15947
16003
  */
15948
16004
  this.stop = async (symbol, strategyName) => {
15949
- bt.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_STOP);
16005
+ backtest$1.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_STOP);
15950
16006
  {
15951
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
15952
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_STOP);
15953
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_STOP));
16007
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16008
+ riskName && backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_STOP);
16009
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_STOP));
15954
16010
  }
15955
16011
  const instance = this._getInstance(symbol, strategyName);
15956
16012
  return await instance.stop(symbol, strategyName);
@@ -15969,11 +16025,11 @@ class BacktestUtils {
15969
16025
  * ```
15970
16026
  */
15971
16027
  this.getData = async (symbol, strategyName) => {
15972
- bt.strategyValidationService.validate(strategyName, "BacktestUtils.getData");
16028
+ backtest$1.strategyValidationService.validate(strategyName, "BacktestUtils.getData");
15973
16029
  {
15974
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
15975
- riskName && bt.riskValidationService.validate(riskName, "BacktestUtils.getData");
15976
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, "BacktestUtils.getData"));
16030
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16031
+ riskName && backtest$1.riskValidationService.validate(riskName, "BacktestUtils.getData");
16032
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, "BacktestUtils.getData"));
15977
16033
  }
15978
16034
  const instance = this._getInstance(symbol, strategyName);
15979
16035
  return await instance.getData(symbol, strategyName);
@@ -15993,11 +16049,11 @@ class BacktestUtils {
15993
16049
  * ```
15994
16050
  */
15995
16051
  this.getReport = async (symbol, strategyName, columns) => {
15996
- bt.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_GET_REPORT);
16052
+ backtest$1.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_GET_REPORT);
15997
16053
  {
15998
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
15999
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_GET_REPORT);
16000
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_GET_REPORT));
16054
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16055
+ riskName && backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_GET_REPORT);
16056
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_GET_REPORT));
16001
16057
  }
16002
16058
  const instance = this._getInstance(symbol, strategyName);
16003
16059
  return await instance.getReport(symbol, strategyName, columns);
@@ -16020,11 +16076,11 @@ class BacktestUtils {
16020
16076
  * ```
16021
16077
  */
16022
16078
  this.dump = async (symbol, strategyName, path, columns) => {
16023
- bt.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_DUMP);
16079
+ backtest$1.strategyValidationService.validate(strategyName, BACKTEST_METHOD_NAME_DUMP);
16024
16080
  {
16025
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16026
- riskName && bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_DUMP);
16027
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_DUMP));
16081
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16082
+ riskName && backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_DUMP);
16083
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, BACKTEST_METHOD_NAME_DUMP));
16028
16084
  }
16029
16085
  const instance = this._getInstance(symbol, strategyName);
16030
16086
  return await instance.dump(symbol, strategyName, path, columns);
@@ -16154,7 +16210,7 @@ class LiveInstance {
16154
16210
  * @internal
16155
16211
  */
16156
16212
  this.task = functoolsKit.singlerun(async (symbol, context) => {
16157
- bt.loggerService.info(LIVE_METHOD_NAME_TASK, {
16213
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_TASK, {
16158
16214
  symbol,
16159
16215
  context,
16160
16216
  });
@@ -16173,7 +16229,7 @@ class LiveInstance {
16173
16229
  * ```
16174
16230
  */
16175
16231
  this.getStatus = async () => {
16176
- bt.loggerService.info(LIVE_METHOD_NAME_GET_STATUS);
16232
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_GET_STATUS);
16177
16233
  return {
16178
16234
  id: this.id,
16179
16235
  symbol: this.symbol,
@@ -16192,27 +16248,27 @@ class LiveInstance {
16192
16248
  * @returns Infinite async generator yielding opened and closed signals
16193
16249
  */
16194
16250
  this.run = (symbol, context) => {
16195
- bt.loggerService.info(LIVE_METHOD_NAME_RUN, {
16251
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_RUN, {
16196
16252
  symbol,
16197
16253
  context,
16198
16254
  });
16199
16255
  {
16200
- bt.backtestMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16201
- bt.liveMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16202
- bt.scheduleMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16203
- bt.performanceMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16204
- bt.partialMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16205
- bt.riskMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16256
+ backtest$1.backtestMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16257
+ backtest$1.liveMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16258
+ backtest$1.scheduleMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16259
+ backtest$1.performanceMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16260
+ backtest$1.partialMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16261
+ backtest$1.riskMarkdownService.clear(false, { symbol, strategyName: context.strategyName });
16206
16262
  }
16207
16263
  {
16208
- bt.strategyCoreService.clear(false, { symbol, strategyName: context.strategyName });
16264
+ backtest$1.strategyCoreService.clear(false, { symbol, strategyName: context.strategyName });
16209
16265
  }
16210
16266
  {
16211
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
16212
- riskName && bt.riskGlobalService.clear(false, riskName);
16213
- riskList && riskList.forEach((riskName) => bt.riskGlobalService.clear(false, riskName));
16267
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
16268
+ riskName && backtest$1.riskGlobalService.clear(false, riskName);
16269
+ riskList && riskList.forEach((riskName) => backtest$1.riskGlobalService.clear(false, riskName));
16214
16270
  }
16215
- return bt.liveCommandService.run(symbol, context);
16271
+ return backtest$1.liveCommandService.run(symbol, context);
16216
16272
  };
16217
16273
  /**
16218
16274
  * Runs live trading in background without yielding results.
@@ -16235,7 +16291,7 @@ class LiveInstance {
16235
16291
  * ```
16236
16292
  */
16237
16293
  this.background = (symbol, context) => {
16238
- bt.loggerService.info(LIVE_METHOD_NAME_BACKGROUND, {
16294
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_BACKGROUND, {
16239
16295
  symbol,
16240
16296
  context,
16241
16297
  });
@@ -16250,8 +16306,8 @@ class LiveInstance {
16250
16306
  }
16251
16307
  this.task(symbol, context).catch((error) => exitEmitter.next(new Error(functoolsKit.getErrorMessage(error))));
16252
16308
  return () => {
16253
- bt.strategyCoreService.stop(false, { symbol, strategyName: context.strategyName });
16254
- bt.strategyCoreService
16309
+ backtest$1.strategyCoreService.stop(false, { symbol, strategyName: context.strategyName });
16310
+ backtest$1.strategyCoreService
16255
16311
  .getPendingSignal(false, symbol, context.strategyName)
16256
16312
  .then(async (pendingSignal) => {
16257
16313
  if (pendingSignal) {
@@ -16288,11 +16344,11 @@ class LiveInstance {
16288
16344
  * ```
16289
16345
  */
16290
16346
  this.stop = async (symbol, strategyName) => {
16291
- bt.loggerService.info(LIVE_METHOD_NAME_STOP, {
16347
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_STOP, {
16292
16348
  symbol,
16293
16349
  strategyName,
16294
16350
  });
16295
- await bt.strategyCoreService.stop(false, { symbol, strategyName });
16351
+ await backtest$1.strategyCoreService.stop(false, { symbol, strategyName });
16296
16352
  };
16297
16353
  /**
16298
16354
  * Gets statistical data from all live trading events for a symbol-strategy pair.
@@ -16309,11 +16365,11 @@ class LiveInstance {
16309
16365
  * ```
16310
16366
  */
16311
16367
  this.getData = async (symbol, strategyName) => {
16312
- bt.loggerService.info("LiveUtils.getData", {
16368
+ backtest$1.loggerService.info("LiveUtils.getData", {
16313
16369
  symbol,
16314
16370
  strategyName,
16315
16371
  });
16316
- return await bt.liveMarkdownService.getData(symbol, strategyName, false);
16372
+ return await backtest$1.liveMarkdownService.getData(symbol, strategyName, false);
16317
16373
  };
16318
16374
  /**
16319
16375
  * Generates markdown report with all events for a symbol-strategy pair.
@@ -16331,11 +16387,11 @@ class LiveInstance {
16331
16387
  * ```
16332
16388
  */
16333
16389
  this.getReport = async (symbol, strategyName, columns) => {
16334
- bt.loggerService.info(LIVE_METHOD_NAME_GET_REPORT, {
16390
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_GET_REPORT, {
16335
16391
  symbol,
16336
16392
  strategyName,
16337
16393
  });
16338
- return await bt.liveMarkdownService.getReport(symbol, strategyName, false, columns);
16394
+ return await backtest$1.liveMarkdownService.getReport(symbol, strategyName, false, columns);
16339
16395
  };
16340
16396
  /**
16341
16397
  * Saves strategy report to disk.
@@ -16356,12 +16412,12 @@ class LiveInstance {
16356
16412
  * ```
16357
16413
  */
16358
16414
  this.dump = async (symbol, strategyName, path, columns) => {
16359
- bt.loggerService.info(LIVE_METHOD_NAME_DUMP, {
16415
+ backtest$1.loggerService.info(LIVE_METHOD_NAME_DUMP, {
16360
16416
  symbol,
16361
16417
  strategyName,
16362
16418
  path,
16363
16419
  });
16364
- await bt.liveMarkdownService.dump(symbol, strategyName, false, path, columns);
16420
+ await backtest$1.liveMarkdownService.dump(symbol, strategyName, false, path, columns);
16365
16421
  };
16366
16422
  }
16367
16423
  }
@@ -16413,13 +16469,13 @@ class LiveUtils {
16413
16469
  */
16414
16470
  this.run = (symbol, context) => {
16415
16471
  {
16416
- bt.strategyValidationService.validate(context.strategyName, LIVE_METHOD_NAME_RUN);
16417
- bt.exchangeValidationService.validate(context.exchangeName, LIVE_METHOD_NAME_RUN);
16472
+ backtest$1.strategyValidationService.validate(context.strategyName, LIVE_METHOD_NAME_RUN);
16473
+ backtest$1.exchangeValidationService.validate(context.exchangeName, LIVE_METHOD_NAME_RUN);
16418
16474
  }
16419
16475
  {
16420
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
16421
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_RUN);
16422
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_RUN));
16476
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
16477
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_RUN);
16478
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_RUN));
16423
16479
  }
16424
16480
  const instance = this._getInstance(symbol, context.strategyName);
16425
16481
  return instance.run(symbol, context);
@@ -16446,12 +16502,12 @@ class LiveUtils {
16446
16502
  * ```
16447
16503
  */
16448
16504
  this.background = (symbol, context) => {
16449
- bt.strategyValidationService.validate(context.strategyName, LIVE_METHOD_NAME_BACKGROUND);
16450
- bt.exchangeValidationService.validate(context.exchangeName, LIVE_METHOD_NAME_BACKGROUND);
16505
+ backtest$1.strategyValidationService.validate(context.strategyName, LIVE_METHOD_NAME_BACKGROUND);
16506
+ backtest$1.exchangeValidationService.validate(context.exchangeName, LIVE_METHOD_NAME_BACKGROUND);
16451
16507
  {
16452
- const { riskName, riskList } = bt.strategySchemaService.get(context.strategyName);
16453
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_BACKGROUND);
16454
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_BACKGROUND));
16508
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(context.strategyName);
16509
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_BACKGROUND);
16510
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_BACKGROUND));
16455
16511
  }
16456
16512
  const instance = this._getInstance(symbol, context.strategyName);
16457
16513
  return instance.background(symbol, context);
@@ -16474,11 +16530,11 @@ class LiveUtils {
16474
16530
  * ```
16475
16531
  */
16476
16532
  this.stop = async (symbol, strategyName) => {
16477
- bt.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_STOP);
16533
+ backtest$1.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_STOP);
16478
16534
  {
16479
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16480
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_STOP);
16481
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_STOP));
16535
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16536
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_STOP);
16537
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_STOP));
16482
16538
  }
16483
16539
  const instance = this._getInstance(symbol, strategyName);
16484
16540
  return await instance.stop(symbol, strategyName);
@@ -16497,11 +16553,11 @@ class LiveUtils {
16497
16553
  * ```
16498
16554
  */
16499
16555
  this.getData = async (symbol, strategyName) => {
16500
- bt.strategyValidationService.validate(strategyName, "LiveUtils.getData");
16556
+ backtest$1.strategyValidationService.validate(strategyName, "LiveUtils.getData");
16501
16557
  {
16502
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16503
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_DATA);
16504
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_DATA));
16558
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16559
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_DATA);
16560
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_DATA));
16505
16561
  }
16506
16562
  const instance = this._getInstance(symbol, strategyName);
16507
16563
  return await instance.getData(symbol, strategyName);
@@ -16521,11 +16577,11 @@ class LiveUtils {
16521
16577
  * ```
16522
16578
  */
16523
16579
  this.getReport = async (symbol, strategyName, columns) => {
16524
- bt.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_GET_REPORT);
16580
+ backtest$1.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_GET_REPORT);
16525
16581
  {
16526
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16527
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_REPORT);
16528
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_REPORT));
16582
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16583
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_REPORT);
16584
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_GET_REPORT));
16529
16585
  }
16530
16586
  const instance = this._getInstance(symbol, strategyName);
16531
16587
  return await instance.getReport(symbol, strategyName, columns);
@@ -16548,11 +16604,11 @@ class LiveUtils {
16548
16604
  * ```
16549
16605
  */
16550
16606
  this.dump = async (symbol, strategyName, path, columns) => {
16551
- bt.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_DUMP);
16607
+ backtest$1.strategyValidationService.validate(strategyName, LIVE_METHOD_NAME_DUMP);
16552
16608
  {
16553
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16554
- riskName && bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_DUMP);
16555
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, LIVE_METHOD_NAME_DUMP));
16609
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16610
+ riskName && backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_DUMP);
16611
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, LIVE_METHOD_NAME_DUMP));
16556
16612
  }
16557
16613
  const instance = this._getInstance(symbol, strategyName);
16558
16614
  return await instance.dump(symbol, strategyName, path, columns);
@@ -16637,18 +16693,18 @@ class ScheduleUtils {
16637
16693
  * ```
16638
16694
  */
16639
16695
  this.getData = async (symbol, strategyName, backtest) => {
16640
- bt.loggerService.info(SCHEDULE_METHOD_NAME_GET_DATA, {
16696
+ backtest$1.loggerService.info(SCHEDULE_METHOD_NAME_GET_DATA, {
16641
16697
  symbol,
16642
16698
  strategyName,
16643
16699
  backtest,
16644
16700
  });
16645
- bt.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_DATA);
16701
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_DATA);
16646
16702
  {
16647
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16648
- riskName && bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_DATA);
16649
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_DATA));
16703
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16704
+ riskName && backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_DATA);
16705
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_DATA));
16650
16706
  }
16651
- return await bt.scheduleMarkdownService.getData(symbol, strategyName, backtest);
16707
+ return await backtest$1.scheduleMarkdownService.getData(symbol, strategyName, backtest);
16652
16708
  };
16653
16709
  /**
16654
16710
  * Generates markdown report with all scheduled events for a symbol-strategy pair.
@@ -16665,18 +16721,18 @@ class ScheduleUtils {
16665
16721
  * ```
16666
16722
  */
16667
16723
  this.getReport = async (symbol, strategyName, backtest, columns) => {
16668
- bt.loggerService.info(SCHEDULE_METHOD_NAME_GET_REPORT, {
16724
+ backtest$1.loggerService.info(SCHEDULE_METHOD_NAME_GET_REPORT, {
16669
16725
  symbol,
16670
16726
  strategyName,
16671
16727
  backtest,
16672
16728
  });
16673
- bt.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_REPORT);
16729
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_GET_REPORT);
16674
16730
  {
16675
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16676
- riskName && bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_REPORT);
16677
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_REPORT));
16731
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16732
+ riskName && backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_REPORT);
16733
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_GET_REPORT));
16678
16734
  }
16679
- return await bt.scheduleMarkdownService.getReport(symbol, strategyName, backtest, columns);
16735
+ return await backtest$1.scheduleMarkdownService.getReport(symbol, strategyName, backtest, columns);
16680
16736
  };
16681
16737
  /**
16682
16738
  * Saves strategy report to disk.
@@ -16696,19 +16752,19 @@ class ScheduleUtils {
16696
16752
  * ```
16697
16753
  */
16698
16754
  this.dump = async (symbol, strategyName, backtest, path, columns) => {
16699
- bt.loggerService.info(SCHEDULE_METHOD_NAME_DUMP, {
16755
+ backtest$1.loggerService.info(SCHEDULE_METHOD_NAME_DUMP, {
16700
16756
  symbol,
16701
16757
  strategyName,
16702
16758
  backtest,
16703
16759
  path,
16704
16760
  });
16705
- bt.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_DUMP);
16761
+ backtest$1.strategyValidationService.validate(strategyName, SCHEDULE_METHOD_NAME_DUMP);
16706
16762
  {
16707
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16708
- riskName && bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_DUMP);
16709
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_DUMP));
16763
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16764
+ riskName && backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_DUMP);
16765
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, SCHEDULE_METHOD_NAME_DUMP));
16710
16766
  }
16711
- await bt.scheduleMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16767
+ await backtest$1.scheduleMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16712
16768
  };
16713
16769
  }
16714
16770
  }
@@ -16790,13 +16846,13 @@ class Performance {
16790
16846
  * ```
16791
16847
  */
16792
16848
  static async getData(symbol, strategyName, backtest) {
16793
- bt.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_DATA);
16849
+ backtest$1.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_DATA);
16794
16850
  {
16795
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16796
- riskName && bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_DATA);
16797
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_DATA));
16851
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16852
+ riskName && backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_DATA);
16853
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_DATA));
16798
16854
  }
16799
- return bt.performanceMarkdownService.getData(symbol, strategyName, backtest);
16855
+ return backtest$1.performanceMarkdownService.getData(symbol, strategyName, backtest);
16800
16856
  }
16801
16857
  /**
16802
16858
  * Generates markdown report with performance analysis.
@@ -16822,13 +16878,13 @@ class Performance {
16822
16878
  * ```
16823
16879
  */
16824
16880
  static async getReport(symbol, strategyName, backtest, columns) {
16825
- bt.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_REPORT);
16881
+ backtest$1.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_GET_REPORT);
16826
16882
  {
16827
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16828
- riskName && bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_REPORT);
16829
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_REPORT));
16883
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16884
+ riskName && backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_REPORT);
16885
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_GET_REPORT));
16830
16886
  }
16831
- return bt.performanceMarkdownService.getReport(symbol, strategyName, backtest, columns);
16887
+ return backtest$1.performanceMarkdownService.getReport(symbol, strategyName, backtest, columns);
16832
16888
  }
16833
16889
  /**
16834
16890
  * Saves performance report to disk.
@@ -16851,13 +16907,13 @@ class Performance {
16851
16907
  * ```
16852
16908
  */
16853
16909
  static async dump(symbol, strategyName, backtest, path = "./dump/performance", columns) {
16854
- bt.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_DUMP);
16910
+ backtest$1.strategyValidationService.validate(strategyName, PERFORMANCE_METHOD_NAME_DUMP);
16855
16911
  {
16856
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
16857
- riskName && bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_DUMP);
16858
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_DUMP));
16912
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
16913
+ riskName && backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_DUMP);
16914
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PERFORMANCE_METHOD_NAME_DUMP));
16859
16915
  }
16860
- return bt.performanceMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16916
+ return backtest$1.performanceMarkdownService.dump(symbol, strategyName, backtest, path, columns);
16861
16917
  }
16862
16918
  }
16863
16919
 
@@ -16891,7 +16947,7 @@ const INSTANCE_TASK_FN = async (symbol, context, self) => {
16891
16947
  }
16892
16948
  }
16893
16949
  if (!self._isDone) {
16894
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
16950
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
16895
16951
  await doneWalkerSubject.next({
16896
16952
  exchangeName: walkerSchema.exchangeName,
16897
16953
  strategyName: context.walkerName,
@@ -16945,7 +17001,7 @@ class WalkerInstance {
16945
17001
  * @internal
16946
17002
  */
16947
17003
  this.task = functoolsKit.singlerun(async (symbol, context) => {
16948
- bt.loggerService.info(WALKER_METHOD_NAME_TASK, {
17004
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_TASK, {
16949
17005
  symbol,
16950
17006
  context,
16951
17007
  });
@@ -16964,7 +17020,7 @@ class WalkerInstance {
16964
17020
  * ```
16965
17021
  */
16966
17022
  this.getStatus = async () => {
16967
- bt.loggerService.info(WALKER_METHOD_NAME_GET_STATUS);
17023
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_GET_STATUS);
16968
17024
  return {
16969
17025
  id: this.id,
16970
17026
  symbol: this.symbol,
@@ -16980,39 +17036,39 @@ class WalkerInstance {
16980
17036
  * @returns Async generator yielding progress updates after each strategy
16981
17037
  */
16982
17038
  this.run = (symbol, context) => {
16983
- bt.loggerService.info(WALKER_METHOD_NAME_RUN, {
17039
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_RUN, {
16984
17040
  symbol,
16985
17041
  context,
16986
17042
  });
16987
- bt.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_RUN);
16988
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
16989
- bt.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_RUN);
16990
- bt.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_RUN);
17043
+ backtest$1.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_RUN);
17044
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
17045
+ backtest$1.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_RUN);
17046
+ backtest$1.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_RUN);
16991
17047
  for (const strategyName of walkerSchema.strategies) {
16992
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_RUN);
17048
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_RUN);
16993
17049
  }
16994
- bt.walkerMarkdownService.clear(context.walkerName);
17050
+ backtest$1.walkerMarkdownService.clear(context.walkerName);
16995
17051
  // Clear backtest data for all strategies
16996
17052
  for (const strategyName of walkerSchema.strategies) {
16997
17053
  {
16998
- bt.backtestMarkdownService.clear(true, { symbol, strategyName });
16999
- bt.liveMarkdownService.clear(true, { symbol, strategyName });
17000
- bt.scheduleMarkdownService.clear(true, { symbol, strategyName });
17001
- bt.performanceMarkdownService.clear(true, { symbol, strategyName });
17002
- bt.partialMarkdownService.clear(true, { symbol, strategyName });
17003
- bt.riskMarkdownService.clear(true, { symbol, strategyName });
17054
+ backtest$1.backtestMarkdownService.clear(true, { symbol, strategyName });
17055
+ backtest$1.liveMarkdownService.clear(true, { symbol, strategyName });
17056
+ backtest$1.scheduleMarkdownService.clear(true, { symbol, strategyName });
17057
+ backtest$1.performanceMarkdownService.clear(true, { symbol, strategyName });
17058
+ backtest$1.partialMarkdownService.clear(true, { symbol, strategyName });
17059
+ backtest$1.riskMarkdownService.clear(true, { symbol, strategyName });
17004
17060
  }
17005
17061
  {
17006
- bt.strategyCoreService.clear(true, { symbol, strategyName });
17062
+ backtest$1.strategyCoreService.clear(true, { symbol, strategyName });
17007
17063
  }
17008
17064
  {
17009
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17010
- riskName && bt.riskGlobalService.clear(true, riskName);
17065
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17066
+ riskName && backtest$1.riskGlobalService.clear(true, riskName);
17011
17067
  riskList &&
17012
- riskList.forEach((riskName) => bt.riskGlobalService.clear(true, riskName));
17068
+ riskList.forEach((riskName) => backtest$1.riskGlobalService.clear(true, riskName));
17013
17069
  }
17014
17070
  }
17015
- return bt.walkerCommandService.run(symbol, {
17071
+ return backtest$1.walkerCommandService.run(symbol, {
17016
17072
  walkerName: context.walkerName,
17017
17073
  exchangeName: walkerSchema.exchangeName,
17018
17074
  frameName: walkerSchema.frameName,
@@ -17037,11 +17093,11 @@ class WalkerInstance {
17037
17093
  * ```
17038
17094
  */
17039
17095
  this.background = (symbol, context) => {
17040
- bt.loggerService.info(WALKER_METHOD_NAME_BACKGROUND, {
17096
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_BACKGROUND, {
17041
17097
  symbol,
17042
17098
  context,
17043
17099
  });
17044
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
17100
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
17045
17101
  {
17046
17102
  const currentStatus = this.task.getStatus();
17047
17103
  if (currentStatus === "pending") {
@@ -17054,7 +17110,7 @@ class WalkerInstance {
17054
17110
  this.task(symbol, context).catch((error) => exitEmitter.next(new Error(functoolsKit.getErrorMessage(error))));
17055
17111
  return () => {
17056
17112
  for (const strategyName of walkerSchema.strategies) {
17057
- bt.strategyCoreService.stop(true, { symbol, strategyName });
17113
+ backtest$1.strategyCoreService.stop(true, { symbol, strategyName });
17058
17114
  walkerStopSubject.next({
17059
17115
  symbol,
17060
17116
  strategyName,
@@ -17097,14 +17153,14 @@ class WalkerInstance {
17097
17153
  * ```
17098
17154
  */
17099
17155
  this.stop = async (symbol, walkerName) => {
17100
- bt.loggerService.info(WALKER_METHOD_NAME_STOP, {
17156
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_STOP, {
17101
17157
  symbol,
17102
17158
  walkerName,
17103
17159
  });
17104
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17160
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17105
17161
  for (const strategyName of walkerSchema.strategies) {
17106
17162
  await walkerStopSubject.next({ symbol, strategyName, walkerName });
17107
- await bt.strategyCoreService.stop(true, { symbol, strategyName });
17163
+ await backtest$1.strategyCoreService.stop(true, { symbol, strategyName });
17108
17164
  }
17109
17165
  };
17110
17166
  /**
@@ -17122,12 +17178,12 @@ class WalkerInstance {
17122
17178
  * ```
17123
17179
  */
17124
17180
  this.getData = async (symbol, walkerName) => {
17125
- bt.loggerService.info(WALKER_METHOD_NAME_GET_DATA, {
17181
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_GET_DATA, {
17126
17182
  symbol,
17127
17183
  walkerName,
17128
17184
  });
17129
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17130
- return await bt.walkerMarkdownService.getData(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17185
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17186
+ return await backtest$1.walkerMarkdownService.getData(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17131
17187
  exchangeName: walkerSchema.exchangeName,
17132
17188
  frameName: walkerSchema.frameName,
17133
17189
  });
@@ -17149,12 +17205,12 @@ class WalkerInstance {
17149
17205
  * ```
17150
17206
  */
17151
17207
  this.getReport = async (symbol, walkerName, strategyColumns, pnlColumns) => {
17152
- bt.loggerService.info(WALKER_METHOD_NAME_GET_REPORT, {
17208
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_GET_REPORT, {
17153
17209
  symbol,
17154
17210
  walkerName,
17155
17211
  });
17156
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17157
- return await bt.walkerMarkdownService.getReport(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17212
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17213
+ return await backtest$1.walkerMarkdownService.getReport(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17158
17214
  exchangeName: walkerSchema.exchangeName,
17159
17215
  frameName: walkerSchema.frameName,
17160
17216
  }, strategyColumns, pnlColumns);
@@ -17179,13 +17235,13 @@ class WalkerInstance {
17179
17235
  * ```
17180
17236
  */
17181
17237
  this.dump = async (symbol, walkerName, path, strategyColumns, pnlColumns) => {
17182
- bt.loggerService.info(WALKER_METHOD_NAME_DUMP, {
17238
+ backtest$1.loggerService.info(WALKER_METHOD_NAME_DUMP, {
17183
17239
  symbol,
17184
17240
  walkerName,
17185
17241
  path,
17186
17242
  });
17187
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17188
- await bt.walkerMarkdownService.dump(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17243
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17244
+ await backtest$1.walkerMarkdownService.dump(walkerName, symbol, walkerSchema.metric || "sharpeRatio", {
17189
17245
  exchangeName: walkerSchema.exchangeName,
17190
17246
  frameName: walkerSchema.frameName,
17191
17247
  }, path, strategyColumns, pnlColumns);
@@ -17226,17 +17282,17 @@ class WalkerUtils {
17226
17282
  * @returns Async generator yielding progress updates after each strategy
17227
17283
  */
17228
17284
  this.run = (symbol, context) => {
17229
- bt.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_RUN);
17230
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
17231
- bt.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_RUN);
17232
- bt.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_RUN);
17285
+ backtest$1.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_RUN);
17286
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
17287
+ backtest$1.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_RUN);
17288
+ backtest$1.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_RUN);
17233
17289
  for (const strategyName of walkerSchema.strategies) {
17234
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_RUN);
17235
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17290
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_RUN);
17291
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17236
17292
  riskName &&
17237
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN);
17293
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN);
17238
17294
  riskList &&
17239
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN));
17295
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_RUN));
17240
17296
  }
17241
17297
  const instance = this._getInstance(symbol, context.walkerName);
17242
17298
  return instance.run(symbol, context);
@@ -17261,17 +17317,17 @@ class WalkerUtils {
17261
17317
  * ```
17262
17318
  */
17263
17319
  this.background = (symbol, context) => {
17264
- bt.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_BACKGROUND);
17265
- const walkerSchema = bt.walkerSchemaService.get(context.walkerName);
17266
- bt.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_BACKGROUND);
17267
- bt.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_BACKGROUND);
17320
+ backtest$1.walkerValidationService.validate(context.walkerName, WALKER_METHOD_NAME_BACKGROUND);
17321
+ const walkerSchema = backtest$1.walkerSchemaService.get(context.walkerName);
17322
+ backtest$1.exchangeValidationService.validate(walkerSchema.exchangeName, WALKER_METHOD_NAME_BACKGROUND);
17323
+ backtest$1.frameValidationService.validate(walkerSchema.frameName, WALKER_METHOD_NAME_BACKGROUND);
17268
17324
  for (const strategyName of walkerSchema.strategies) {
17269
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_BACKGROUND);
17270
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17325
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_BACKGROUND);
17326
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17271
17327
  riskName &&
17272
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND);
17328
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND);
17273
17329
  riskList &&
17274
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND));
17330
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_BACKGROUND));
17275
17331
  }
17276
17332
  const instance = this._getInstance(symbol, context.walkerName);
17277
17333
  return instance.background(symbol, context);
@@ -17300,15 +17356,15 @@ class WalkerUtils {
17300
17356
  * ```
17301
17357
  */
17302
17358
  this.stop = async (symbol, walkerName) => {
17303
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_STOP);
17304
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17359
+ backtest$1.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_STOP);
17360
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17305
17361
  for (const strategyName of walkerSchema.strategies) {
17306
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_STOP);
17307
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17362
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_STOP);
17363
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17308
17364
  riskName &&
17309
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP);
17365
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP);
17310
17366
  riskList &&
17311
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP));
17367
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_STOP));
17312
17368
  }
17313
17369
  const instance = this._getInstance(symbol, walkerName);
17314
17370
  return await instance.stop(symbol, walkerName);
@@ -17327,15 +17383,15 @@ class WalkerUtils {
17327
17383
  * ```
17328
17384
  */
17329
17385
  this.getData = async (symbol, walkerName) => {
17330
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_GET_DATA);
17331
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17386
+ backtest$1.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_GET_DATA);
17387
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17332
17388
  for (const strategyName of walkerSchema.strategies) {
17333
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_GET_DATA);
17334
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17389
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_GET_DATA);
17390
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17335
17391
  riskName &&
17336
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_DATA);
17392
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_DATA);
17337
17393
  riskList &&
17338
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_DATA));
17394
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_DATA));
17339
17395
  }
17340
17396
  const instance = this._getInstance(symbol, walkerName);
17341
17397
  return await instance.getData(symbol, walkerName);
@@ -17356,15 +17412,15 @@ class WalkerUtils {
17356
17412
  * ```
17357
17413
  */
17358
17414
  this.getReport = async (symbol, walkerName, strategyColumns, pnlColumns) => {
17359
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_GET_REPORT);
17360
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17415
+ backtest$1.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_GET_REPORT);
17416
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17361
17417
  for (const strategyName of walkerSchema.strategies) {
17362
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_GET_REPORT);
17363
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17418
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_GET_REPORT);
17419
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17364
17420
  riskName &&
17365
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_REPORT);
17421
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_REPORT);
17366
17422
  riskList &&
17367
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_REPORT));
17423
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_GET_REPORT));
17368
17424
  }
17369
17425
  const instance = this._getInstance(symbol, walkerName);
17370
17426
  return await instance.getReport(symbol, walkerName, strategyColumns, pnlColumns);
@@ -17388,15 +17444,15 @@ class WalkerUtils {
17388
17444
  * ```
17389
17445
  */
17390
17446
  this.dump = async (symbol, walkerName, path, strategyColumns, pnlColumns) => {
17391
- bt.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_DUMP);
17392
- const walkerSchema = bt.walkerSchemaService.get(walkerName);
17447
+ backtest$1.walkerValidationService.validate(walkerName, WALKER_METHOD_NAME_DUMP);
17448
+ const walkerSchema = backtest$1.walkerSchemaService.get(walkerName);
17393
17449
  for (const strategyName of walkerSchema.strategies) {
17394
- bt.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_DUMP);
17395
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17450
+ backtest$1.strategyValidationService.validate(strategyName, WALKER_METHOD_NAME_DUMP);
17451
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17396
17452
  riskName &&
17397
- bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP);
17453
+ backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP);
17398
17454
  riskList &&
17399
- riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP));
17455
+ riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, WALKER_METHOD_NAME_DUMP));
17400
17456
  }
17401
17457
  const instance = this._getInstance(symbol, walkerName);
17402
17458
  return await instance.dump(symbol, walkerName, path, strategyColumns, pnlColumns);
@@ -17489,14 +17545,14 @@ class HeatUtils {
17489
17545
  * ```
17490
17546
  */
17491
17547
  this.getData = async (strategyName, backtest) => {
17492
- bt.loggerService.info(HEAT_METHOD_NAME_GET_DATA, { strategyName });
17493
- bt.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_DATA);
17548
+ backtest$1.loggerService.info(HEAT_METHOD_NAME_GET_DATA, { strategyName });
17549
+ backtest$1.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_DATA);
17494
17550
  {
17495
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17496
- riskName && bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_DATA);
17497
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_DATA));
17551
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17552
+ riskName && backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_DATA);
17553
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_DATA));
17498
17554
  }
17499
- return await bt.heatMarkdownService.getData(strategyName, backtest);
17555
+ return await backtest$1.heatMarkdownService.getData(strategyName, backtest);
17500
17556
  };
17501
17557
  /**
17502
17558
  * Generates markdown report with portfolio heatmap table for a strategy.
@@ -17525,14 +17581,14 @@ class HeatUtils {
17525
17581
  * ```
17526
17582
  */
17527
17583
  this.getReport = async (strategyName, backtest, columns) => {
17528
- bt.loggerService.info(HEAT_METHOD_NAME_GET_REPORT, { strategyName });
17529
- bt.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_REPORT);
17584
+ backtest$1.loggerService.info(HEAT_METHOD_NAME_GET_REPORT, { strategyName });
17585
+ backtest$1.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_GET_REPORT);
17530
17586
  {
17531
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17532
- riskName && bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_REPORT);
17533
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_REPORT));
17587
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17588
+ riskName && backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_REPORT);
17589
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_GET_REPORT));
17534
17590
  }
17535
- return await bt.heatMarkdownService.getReport(strategyName, backtest, columns);
17591
+ return await backtest$1.heatMarkdownService.getReport(strategyName, backtest, columns);
17536
17592
  };
17537
17593
  /**
17538
17594
  * Saves heatmap report to disk for a strategy.
@@ -17554,14 +17610,14 @@ class HeatUtils {
17554
17610
  * ```
17555
17611
  */
17556
17612
  this.dump = async (strategyName, backtest, path, columns) => {
17557
- bt.loggerService.info(HEAT_METHOD_NAME_DUMP, { strategyName, path });
17558
- bt.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_DUMP);
17613
+ backtest$1.loggerService.info(HEAT_METHOD_NAME_DUMP, { strategyName, path });
17614
+ backtest$1.strategyValidationService.validate(strategyName, HEAT_METHOD_NAME_DUMP);
17559
17615
  {
17560
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17561
- riskName && bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_DUMP);
17562
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, HEAT_METHOD_NAME_DUMP));
17616
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17617
+ riskName && backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_DUMP);
17618
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, HEAT_METHOD_NAME_DUMP));
17563
17619
  }
17564
- await bt.heatMarkdownService.dump(strategyName, backtest, path, columns);
17620
+ await backtest$1.heatMarkdownService.dump(strategyName, backtest, path, columns);
17565
17621
  };
17566
17622
  }
17567
17623
  }
@@ -17648,12 +17704,12 @@ class PositionSizeUtils {
17648
17704
  * @throws Error if sizing schema method is not "fixed-percentage"
17649
17705
  */
17650
17706
  PositionSizeUtils.fixedPercentage = async (symbol, accountBalance, priceOpen, priceStopLoss, context) => {
17651
- bt.loggerService.info(POSITION_SIZE_METHOD_NAME_FIXED, {
17707
+ backtest$1.loggerService.info(POSITION_SIZE_METHOD_NAME_FIXED, {
17652
17708
  context,
17653
17709
  symbol,
17654
17710
  });
17655
- bt.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_FIXED, "fixed-percentage");
17656
- return await bt.sizingGlobalService.calculate({
17711
+ backtest$1.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_FIXED, "fixed-percentage");
17712
+ return await backtest$1.sizingGlobalService.calculate({
17657
17713
  symbol,
17658
17714
  accountBalance,
17659
17715
  priceOpen,
@@ -17674,12 +17730,12 @@ PositionSizeUtils.fixedPercentage = async (symbol, accountBalance, priceOpen, pr
17674
17730
  * @throws Error if sizing schema method is not "kelly-criterion"
17675
17731
  */
17676
17732
  PositionSizeUtils.kellyCriterion = async (symbol, accountBalance, priceOpen, winRate, winLossRatio, context) => {
17677
- bt.loggerService.info(POSITION_SIZE_METHOD_NAME_KELLY, {
17733
+ backtest$1.loggerService.info(POSITION_SIZE_METHOD_NAME_KELLY, {
17678
17734
  context,
17679
17735
  symbol,
17680
17736
  });
17681
- bt.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_KELLY, "kelly-criterion");
17682
- return await bt.sizingGlobalService.calculate({
17737
+ backtest$1.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_KELLY, "kelly-criterion");
17738
+ return await backtest$1.sizingGlobalService.calculate({
17683
17739
  symbol,
17684
17740
  accountBalance,
17685
17741
  priceOpen,
@@ -17700,12 +17756,12 @@ PositionSizeUtils.kellyCriterion = async (symbol, accountBalance, priceOpen, win
17700
17756
  * @throws Error if sizing schema method is not "atr-based"
17701
17757
  */
17702
17758
  PositionSizeUtils.atrBased = async (symbol, accountBalance, priceOpen, atr, context) => {
17703
- bt.loggerService.info(POSITION_SIZE_METHOD_NAME_ATR, {
17759
+ backtest$1.loggerService.info(POSITION_SIZE_METHOD_NAME_ATR, {
17704
17760
  context,
17705
17761
  symbol,
17706
17762
  });
17707
- bt.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_ATR, "atr-based");
17708
- return await bt.sizingGlobalService.calculate({
17763
+ backtest$1.sizingValidationService.validate(context.sizingName, POSITION_SIZE_METHOD_NAME_ATR, "atr-based");
17764
+ return await backtest$1.sizingGlobalService.calculate({
17709
17765
  symbol,
17710
17766
  accountBalance,
17711
17767
  priceOpen,
@@ -17754,12 +17810,12 @@ class OptimizerUtils {
17754
17810
  * @throws Error if optimizer not found
17755
17811
  */
17756
17812
  this.getData = async (symbol, context) => {
17757
- bt.loggerService.info(OPTIMIZER_METHOD_NAME_GET_DATA, {
17813
+ backtest$1.loggerService.info(OPTIMIZER_METHOD_NAME_GET_DATA, {
17758
17814
  symbol,
17759
17815
  context,
17760
17816
  });
17761
- bt.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_DATA);
17762
- return await bt.optimizerGlobalService.getData(symbol, context.optimizerName);
17817
+ backtest$1.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_DATA);
17818
+ return await backtest$1.optimizerGlobalService.getData(symbol, context.optimizerName);
17763
17819
  };
17764
17820
  /**
17765
17821
  * Generates complete executable strategy code.
@@ -17771,12 +17827,12 @@ class OptimizerUtils {
17771
17827
  * @throws Error if optimizer not found
17772
17828
  */
17773
17829
  this.getCode = async (symbol, context) => {
17774
- bt.loggerService.info(OPTIMIZER_METHOD_NAME_GET_CODE, {
17830
+ backtest$1.loggerService.info(OPTIMIZER_METHOD_NAME_GET_CODE, {
17775
17831
  symbol,
17776
17832
  context,
17777
17833
  });
17778
- bt.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_CODE);
17779
- return await bt.optimizerGlobalService.getCode(symbol, context.optimizerName);
17834
+ backtest$1.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_GET_CODE);
17835
+ return await backtest$1.optimizerGlobalService.getCode(symbol, context.optimizerName);
17780
17836
  };
17781
17837
  /**
17782
17838
  * Generates and saves strategy code to file.
@@ -17790,13 +17846,13 @@ class OptimizerUtils {
17790
17846
  * @throws Error if optimizer not found or file write fails
17791
17847
  */
17792
17848
  this.dump = async (symbol, context, path) => {
17793
- bt.loggerService.info(OPTIMIZER_METHOD_NAME_DUMP, {
17849
+ backtest$1.loggerService.info(OPTIMIZER_METHOD_NAME_DUMP, {
17794
17850
  symbol,
17795
17851
  context,
17796
17852
  path,
17797
17853
  });
17798
- bt.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_DUMP);
17799
- await bt.optimizerGlobalService.dump(symbol, context.optimizerName, path);
17854
+ backtest$1.optimizerValidationService.validate(context.optimizerName, OPTIMIZER_METHOD_NAME_DUMP);
17855
+ await backtest$1.optimizerGlobalService.dump(symbol, context.optimizerName, path);
17800
17856
  };
17801
17857
  }
17802
17858
  }
@@ -17878,14 +17934,14 @@ class PartialUtils {
17878
17934
  * ```
17879
17935
  */
17880
17936
  this.getData = async (symbol, strategyName, backtest) => {
17881
- bt.loggerService.info(PARTIAL_METHOD_NAME_GET_DATA, { symbol, strategyName });
17882
- bt.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_DATA);
17937
+ backtest$1.loggerService.info(PARTIAL_METHOD_NAME_GET_DATA, { symbol, strategyName });
17938
+ backtest$1.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_DATA);
17883
17939
  {
17884
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17885
- riskName && bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_DATA);
17886
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_DATA));
17940
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17941
+ riskName && backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_DATA);
17942
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_DATA));
17887
17943
  }
17888
- return await bt.partialMarkdownService.getData(symbol, strategyName, backtest);
17944
+ return await backtest$1.partialMarkdownService.getData(symbol, strategyName, backtest);
17889
17945
  };
17890
17946
  /**
17891
17947
  * Generates markdown report with all partial profit/loss events for a symbol-strategy pair.
@@ -17927,14 +17983,14 @@ class PartialUtils {
17927
17983
  * ```
17928
17984
  */
17929
17985
  this.getReport = async (symbol, strategyName, backtest, columns) => {
17930
- bt.loggerService.info(PARTIAL_METHOD_NAME_GET_REPORT, { symbol, strategyName });
17931
- bt.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_REPORT);
17986
+ backtest$1.loggerService.info(PARTIAL_METHOD_NAME_GET_REPORT, { symbol, strategyName });
17987
+ backtest$1.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_GET_REPORT);
17932
17988
  {
17933
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17934
- riskName && bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_REPORT);
17935
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_REPORT));
17989
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
17990
+ riskName && backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_REPORT);
17991
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_GET_REPORT));
17936
17992
  }
17937
- return await bt.partialMarkdownService.getReport(symbol, strategyName, backtest, columns);
17993
+ return await backtest$1.partialMarkdownService.getReport(symbol, strategyName, backtest, columns);
17938
17994
  };
17939
17995
  /**
17940
17996
  * Generates and saves markdown report to file.
@@ -17969,14 +18025,14 @@ class PartialUtils {
17969
18025
  * ```
17970
18026
  */
17971
18027
  this.dump = async (symbol, strategyName, backtest, path, columns) => {
17972
- bt.loggerService.info(PARTIAL_METHOD_NAME_DUMP, { symbol, strategyName, path });
17973
- bt.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_DUMP);
18028
+ backtest$1.loggerService.info(PARTIAL_METHOD_NAME_DUMP, { symbol, strategyName, path });
18029
+ backtest$1.strategyValidationService.validate(strategyName, PARTIAL_METHOD_NAME_DUMP);
17974
18030
  {
17975
- const { riskName, riskList } = bt.strategySchemaService.get(strategyName);
17976
- riskName && bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_DUMP);
17977
- riskList && riskList.forEach((riskName) => bt.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_DUMP));
18031
+ const { riskName, riskList } = backtest$1.strategySchemaService.get(strategyName);
18032
+ riskName && backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_DUMP);
18033
+ riskList && riskList.forEach((riskName) => backtest$1.riskValidationService.validate(riskName, PARTIAL_METHOD_NAME_DUMP));
17978
18034
  }
17979
- await bt.partialMarkdownService.dump(symbol, strategyName, backtest, path, columns);
18035
+ await backtest$1.partialMarkdownService.dump(symbol, strategyName, backtest, path, columns);
17980
18036
  };
17981
18037
  }
17982
18038
  }
@@ -18077,8 +18133,201 @@ class ConstantUtils {
18077
18133
  */
18078
18134
  const Constant = new ConstantUtils();
18079
18135
 
18136
+ const EXCHANGE_METHOD_NAME_GET_CANDLES = "ExchangeUtils.getCandles";
18137
+ const EXCHANGE_METHOD_NAME_FORMAT_QUANTITY = "ExchangeUtils.formatQuantity";
18138
+ const EXCHANGE_METHOD_NAME_FORMAT_PRICE = "ExchangeUtils.formatPrice";
18139
+ /**
18140
+ * Instance class for exchange operations on a specific exchange.
18141
+ *
18142
+ * Provides isolated exchange operations for a single exchange.
18143
+ * Each instance maintains its own context and exposes IExchangeSchema methods.
18144
+ * The schema is retrieved once during construction for better performance.
18145
+ *
18146
+ * @example
18147
+ * ```typescript
18148
+ * const instance = new ExchangeInstance("binance");
18149
+ *
18150
+ * const candles = await instance.getCandles("BTCUSDT", "1m", new Date(), 100);
18151
+ * const formattedQty = await instance.formatQuantity("BTCUSDT", 0.001);
18152
+ * const formattedPrice = await instance.formatPrice("BTCUSDT", 50000.123);
18153
+ * ```
18154
+ */
18155
+ class ExchangeInstance {
18156
+ /**
18157
+ * Creates a new ExchangeInstance for a specific exchange.
18158
+ *
18159
+ * @param exchangeName - Exchange name (e.g., "binance")
18160
+ */
18161
+ constructor(exchangeName) {
18162
+ this.exchangeName = exchangeName;
18163
+ /**
18164
+ * Fetch candles from data source (API or database).
18165
+ *
18166
+ * @param symbol - Trading pair symbol (e.g., "BTCUSDT")
18167
+ * @param interval - Candle time interval (e.g., "1m", "1h")
18168
+ * @param since - Start date for candle fetching
18169
+ * @param limit - Maximum number of candles to fetch
18170
+ * @returns Promise resolving to array of OHLCV candle data
18171
+ *
18172
+ * @example
18173
+ * ```typescript
18174
+ * const instance = new ExchangeInstance("binance");
18175
+ * const candles = await instance.getCandles("BTCUSDT", "1m", new Date(), 100);
18176
+ * ```
18177
+ */
18178
+ this.getCandles = async (symbol, interval, since, limit) => {
18179
+ backtest$1.loggerService.info(EXCHANGE_METHOD_NAME_GET_CANDLES, {
18180
+ exchangeName: this.exchangeName,
18181
+ symbol,
18182
+ interval,
18183
+ since,
18184
+ limit,
18185
+ });
18186
+ return await this._schema.getCandles(symbol, interval, since, limit);
18187
+ };
18188
+ /**
18189
+ * Format quantity according to exchange precision rules.
18190
+ *
18191
+ * @param symbol - Trading pair symbol
18192
+ * @param quantity - Raw quantity value
18193
+ * @returns Promise resolving to formatted quantity string
18194
+ *
18195
+ * @example
18196
+ * ```typescript
18197
+ * const instance = new ExchangeInstance("binance");
18198
+ * const formatted = await instance.formatQuantity("BTCUSDT", 0.001);
18199
+ * console.log(formatted); // "0.001"
18200
+ * ```
18201
+ */
18202
+ this.formatQuantity = async (symbol, quantity) => {
18203
+ backtest$1.loggerService.info(EXCHANGE_METHOD_NAME_FORMAT_QUANTITY, {
18204
+ exchangeName: this.exchangeName,
18205
+ symbol,
18206
+ quantity,
18207
+ });
18208
+ return await this._schema.formatQuantity(symbol, quantity);
18209
+ };
18210
+ /**
18211
+ * Format price according to exchange precision rules.
18212
+ *
18213
+ * @param symbol - Trading pair symbol
18214
+ * @param price - Raw price value
18215
+ * @returns Promise resolving to formatted price string
18216
+ *
18217
+ * @example
18218
+ * ```typescript
18219
+ * const instance = new ExchangeInstance("binance");
18220
+ * const formatted = await instance.formatPrice("BTCUSDT", 50000.123);
18221
+ * console.log(formatted); // "50000.12"
18222
+ * ```
18223
+ */
18224
+ this.formatPrice = async (symbol, price) => {
18225
+ backtest$1.loggerService.info(EXCHANGE_METHOD_NAME_FORMAT_PRICE, {
18226
+ exchangeName: this.exchangeName,
18227
+ symbol,
18228
+ price,
18229
+ });
18230
+ return await this._schema.formatPrice(symbol, price);
18231
+ };
18232
+ this._schema = backtest$1.exchangeSchemaService.get(this.exchangeName);
18233
+ }
18234
+ }
18235
+ /**
18236
+ * Utility class for exchange operations.
18237
+ *
18238
+ * Provides simplified access to exchange schema methods with validation.
18239
+ * Exported as singleton instance for convenient usage.
18240
+ *
18241
+ * @example
18242
+ * ```typescript
18243
+ * import { Exchange } from "./classes/Exchange";
18244
+ *
18245
+ * const candles = await Exchange.getCandles("BTCUSDT", "1m", new Date(), 100, {
18246
+ * exchangeName: "binance"
18247
+ * });
18248
+ * const formatted = await Exchange.formatQuantity("BTCUSDT", 0.001, {
18249
+ * exchangeName: "binance"
18250
+ * });
18251
+ * ```
18252
+ */
18253
+ class ExchangeUtils {
18254
+ constructor() {
18255
+ /**
18256
+ * Memoized function to get or create ExchangeInstance for an exchange.
18257
+ * Each exchange gets its own isolated instance.
18258
+ */
18259
+ this._getInstance = functoolsKit.memoize(([exchangeName]) => exchangeName, (exchangeName) => new ExchangeInstance(exchangeName));
18260
+ /**
18261
+ * Fetch candles from data source (API or database).
18262
+ *
18263
+ * @param symbol - Trading pair symbol (e.g., "BTCUSDT")
18264
+ * @param interval - Candle time interval (e.g., "1m", "1h")
18265
+ * @param since - Start date for candle fetching
18266
+ * @param limit - Maximum number of candles to fetch
18267
+ * @param context - Execution context with exchange name
18268
+ * @returns Promise resolving to array of OHLCV candle data
18269
+ */
18270
+ this.getCandles = async (symbol, interval, since, limit, context) => {
18271
+ backtest$1.exchangeValidationService.validate(context.exchangeName, EXCHANGE_METHOD_NAME_GET_CANDLES);
18272
+ const instance = this._getInstance(context.exchangeName);
18273
+ return await instance.getCandles(symbol, interval, since, limit);
18274
+ };
18275
+ /**
18276
+ * Format quantity according to exchange precision rules.
18277
+ *
18278
+ * @param symbol - Trading pair symbol
18279
+ * @param quantity - Raw quantity value
18280
+ * @param context - Execution context with exchange name
18281
+ * @returns Promise resolving to formatted quantity string
18282
+ */
18283
+ this.formatQuantity = async (symbol, quantity, context) => {
18284
+ backtest$1.exchangeValidationService.validate(context.exchangeName, EXCHANGE_METHOD_NAME_FORMAT_QUANTITY);
18285
+ const instance = this._getInstance(context.exchangeName);
18286
+ return await instance.formatQuantity(symbol, quantity);
18287
+ };
18288
+ /**
18289
+ * Format price according to exchange precision rules.
18290
+ *
18291
+ * @param symbol - Trading pair symbol
18292
+ * @param price - Raw price value
18293
+ * @param context - Execution context with exchange name
18294
+ * @returns Promise resolving to formatted price string
18295
+ */
18296
+ this.formatPrice = async (symbol, price, context) => {
18297
+ backtest$1.exchangeValidationService.validate(context.exchangeName, EXCHANGE_METHOD_NAME_FORMAT_PRICE);
18298
+ const instance = this._getInstance(context.exchangeName);
18299
+ return await instance.formatPrice(symbol, price);
18300
+ };
18301
+ }
18302
+ }
18303
+ /**
18304
+ * Singleton instance of ExchangeUtils for convenient exchange operations.
18305
+ *
18306
+ * @example
18307
+ * ```typescript
18308
+ * import { Exchange } from "./classes/Exchange";
18309
+ *
18310
+ * // Using static-like API with context
18311
+ * const candles = await Exchange.getCandles("BTCUSDT", "1m", new Date(), 100, {
18312
+ * exchangeName: "binance"
18313
+ * });
18314
+ * const qty = await Exchange.formatQuantity("BTCUSDT", 0.001, {
18315
+ * exchangeName: "binance"
18316
+ * });
18317
+ * const price = await Exchange.formatPrice("BTCUSDT", 50000.123, {
18318
+ * exchangeName: "binance"
18319
+ * });
18320
+ *
18321
+ * // Using instance API (no context needed, exchange set in constructor)
18322
+ * const binance = new ExchangeInstance("binance");
18323
+ * const candles2 = await binance.getCandles("BTCUSDT", "1m", new Date(), 100);
18324
+ * ```
18325
+ */
18326
+ const Exchange = new ExchangeUtils();
18327
+
18080
18328
  exports.Backtest = Backtest;
18081
18329
  exports.Constant = Constant;
18330
+ exports.Exchange = Exchange;
18082
18331
  exports.ExecutionContextService = ExecutionContextService;
18083
18332
  exports.Heat = Heat;
18084
18333
  exports.Live = Live;
@@ -18114,6 +18363,7 @@ exports.getDate = getDate;
18114
18363
  exports.getDefaultColumns = getDefaultColumns;
18115
18364
  exports.getDefaultConfig = getDefaultConfig;
18116
18365
  exports.getMode = getMode;
18366
+ exports.hasTradeContext = hasTradeContext;
18117
18367
  exports.lib = backtest;
18118
18368
  exports.listExchanges = listExchanges;
18119
18369
  exports.listFrames = listFrames;