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