@backtest-kit/ui 12.8.0 → 13.3.0
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/README.md +254 -254
- package/build/index.cjs +575 -0
- package/build/index.mjs +576 -1
- package/build/modules/frontend/build/3rdparty/ace_1.4.12/ace.js +21337 -21337
- package/build/modules/frontend/build/3rdparty/ace_1.4.12/mode-javascript.js +797 -797
- package/build/modules/frontend/build/3rdparty/ace_1.4.12/theme-chrome.js +137 -137
- package/build/modules/frontend/build/3rdparty/ace_1.4.12/theme-twilight.js +115 -115
- package/build/modules/frontend/build/3rdparty/ace_1.4.12/worker-javascript.js +15012 -15012
- package/build/modules/frontend/build/3rdparty/qfchart_0.8.7/echarts.min.js +45 -45
- package/build/modules/frontend/build/assets/{Article-Da78GEhK.js → Article-sbYRbQe0.js} +1 -1
- package/build/modules/frontend/build/assets/{Background-0ACHD5B6.js → Background-dyHMipOI.js} +1 -1
- package/build/modules/frontend/build/assets/{IconPhoto-BPAbqALJ.js → IconPhoto-CHqApvRw.js} +1 -1
- package/build/modules/frontend/build/assets/{KeyboardArrowLeft-YMeBM3Q3.js → KeyboardArrowLeft-CHOMu6qx.js} +1 -1
- package/build/modules/frontend/build/assets/{PictureAsPdfOutlined-CA7hIpf4.js → PictureAsPdfOutlined-DzknxeSi.js} +1 -1
- package/build/modules/frontend/build/assets/{Refresh-CTa-W1su.js → Refresh-DmSh3yQM.js} +1 -1
- package/build/modules/frontend/build/assets/emitters-BNMcCjB_.js +1 -0
- package/build/modules/frontend/build/assets/{hasRouteMatch-Dz1eRfX0.js → hasRouteMatch-DqwdOTLY.js} +1 -1
- package/build/modules/frontend/build/assets/{html2canvas-CuvtHslW.js → html2canvas-CHKh6bmw.js} +1 -1
- package/build/modules/frontend/build/assets/{index-fv31BaKN.js → index-0MseBgyH.js} +15 -15
- package/build/modules/frontend/build/assets/{index-jg7SuL7J.js → index-9MTo_fXC.js} +1 -1
- package/build/modules/frontend/build/assets/{index-Dye20IcA.js → index-BGUfC2GH.js} +1 -1
- package/build/modules/frontend/build/assets/index-BkciU9PY.js +1 -0
- package/build/modules/frontend/build/assets/{index-C0qezHrv.js → index-Bm2KpX4M.js} +1 -1
- package/build/modules/frontend/build/assets/{index-tg1njHyT.js → index-COEOSThW.js} +1 -1
- package/build/modules/frontend/build/assets/{index-CGTByLJp.js → index-C_bLqeg4.js} +1 -1
- package/build/modules/frontend/build/assets/{index-C19KVXyR.js → index-CkS6tnju.js} +1 -1
- package/build/modules/frontend/build/assets/index-DUb1EyrG.js +1 -0
- package/build/modules/frontend/build/assets/{index--CAl9k-j.js → index-DYoETulh.js} +1 -1
- package/build/modules/frontend/build/assets/{index-DO3lwaMI.js → index-Dq8WsVMT.js} +1 -1
- package/build/modules/frontend/build/assets/{index-DCkqZSEX.js → index-DrklJPOF.js} +1 -1
- package/build/modules/frontend/build/assets/index-DtlxmULa.js +1 -0
- package/build/modules/frontend/build/assets/{index.es-DtUP6yiZ.js → index.es-Bnd2KFus.js} +2 -2
- package/build/modules/frontend/build/assets/{markdownit-Bj4vpJSk.js → markdownit-CWkrj-EI.js} +1 -1
- package/build/modules/frontend/build/index.html +87 -87
- package/build/modules/frontend/build/manifest.json +23 -23
- package/package.json +118 -118
- package/types.d.ts +85 -0
- package/build/modules/frontend/build/assets/emitters-CwOzUPwS.js +0 -1
- package/build/modules/frontend/build/assets/index-C5c7YQ-Q.js +0 -1
- package/build/modules/frontend/build/assets/index-CgLCD4kl.js +0 -1
- package/build/modules/frontend/build/assets/index-EnF3Est3.js +0 -1
package/build/index.cjs
CHANGED
|
@@ -108,6 +108,7 @@ const mockServices$1 = {
|
|
|
108
108
|
environmentMockService: Symbol("environmentMockService"),
|
|
109
109
|
setupMockService: Symbol("setupMockService"),
|
|
110
110
|
runtimeMockService: Symbol("runtimeMockService"),
|
|
111
|
+
controlMockService: Symbol("controlMockService"),
|
|
111
112
|
};
|
|
112
113
|
const viewServices$1 = {
|
|
113
114
|
notificationViewService: Symbol("notificationViewService"),
|
|
@@ -123,6 +124,7 @@ const viewServices$1 = {
|
|
|
123
124
|
environmentViewService: Symbol("environmentViewService"),
|
|
124
125
|
setupViewService: Symbol("setupViewService"),
|
|
125
126
|
runtimeViewService: Symbol("runtimeViewService"),
|
|
127
|
+
controlViewService: Symbol("controlViewService"),
|
|
126
128
|
};
|
|
127
129
|
const TYPES = {
|
|
128
130
|
...baseServices$1,
|
|
@@ -2197,6 +2199,237 @@ class RuntimeViewService {
|
|
|
2197
2199
|
}
|
|
2198
2200
|
}
|
|
2199
2201
|
|
|
2202
|
+
const MOCK_STRATEGY_PATH = "./mock/strategy.json";
|
|
2203
|
+
const MOCK_STRATEGY_INFO_PATH = "./mock/strategy-info.json";
|
|
2204
|
+
const READ_STRATEGY_FN = functoolsKit.singleshot(async () => {
|
|
2205
|
+
const data = await fs.readFile(MOCK_STRATEGY_PATH, "utf-8");
|
|
2206
|
+
return JSON.parse(data);
|
|
2207
|
+
});
|
|
2208
|
+
const READ_STRATEGY_INFO_FN = functoolsKit.singleshot(async () => {
|
|
2209
|
+
const data = await fs.readFile(MOCK_STRATEGY_INFO_PATH, "utf-8");
|
|
2210
|
+
return JSON.parse(data);
|
|
2211
|
+
});
|
|
2212
|
+
class ControlMockService {
|
|
2213
|
+
constructor() {
|
|
2214
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
2215
|
+
this.getStatus = async (symbol, context) => {
|
|
2216
|
+
this.loggerService.log("controlMockService getStatus", {
|
|
2217
|
+
symbol,
|
|
2218
|
+
context,
|
|
2219
|
+
});
|
|
2220
|
+
const strategyInfo = await READ_STRATEGY_INFO_FN();
|
|
2221
|
+
const pendingSignal = await READ_STRATEGY_FN();
|
|
2222
|
+
const currentPrice = pendingSignal?.pnl?.priceClose ?? pendingSignal?.priceOpen ?? 0;
|
|
2223
|
+
return { strategyInfo, pendingSignal, currentPrice };
|
|
2224
|
+
};
|
|
2225
|
+
this.getAveragePrice = async (symbol, context) => {
|
|
2226
|
+
this.loggerService.log("controlMockService getAveragePrice", {
|
|
2227
|
+
symbol,
|
|
2228
|
+
context,
|
|
2229
|
+
});
|
|
2230
|
+
const pendingSignal = await READ_STRATEGY_FN();
|
|
2231
|
+
return pendingSignal?.pnl?.priceClose ?? pendingSignal?.priceOpen ?? 0;
|
|
2232
|
+
};
|
|
2233
|
+
this.commitOpenPending = async (symbol, context, dto) => {
|
|
2234
|
+
this.loggerService.log("controlMockService commitOpenPending", {
|
|
2235
|
+
symbol,
|
|
2236
|
+
context,
|
|
2237
|
+
dto,
|
|
2238
|
+
});
|
|
2239
|
+
};
|
|
2240
|
+
this.commitAverageBuy = async (symbol, context, dto) => {
|
|
2241
|
+
this.loggerService.log("controlMockService commitAverageBuy", {
|
|
2242
|
+
symbol,
|
|
2243
|
+
context,
|
|
2244
|
+
dto,
|
|
2245
|
+
});
|
|
2246
|
+
};
|
|
2247
|
+
this.commitClosePending = async (symbol, context, dto) => {
|
|
2248
|
+
this.loggerService.log("controlMockService commitClosePending", {
|
|
2249
|
+
symbol,
|
|
2250
|
+
context,
|
|
2251
|
+
dto,
|
|
2252
|
+
});
|
|
2253
|
+
};
|
|
2254
|
+
this.commitBreakeven = async (symbol, context) => {
|
|
2255
|
+
this.loggerService.log("controlMockService commitBreakeven", {
|
|
2256
|
+
symbol,
|
|
2257
|
+
context,
|
|
2258
|
+
});
|
|
2259
|
+
};
|
|
2260
|
+
}
|
|
2261
|
+
}
|
|
2262
|
+
|
|
2263
|
+
/** Grid step (percent) the hard stop-loss distance snaps to. */
|
|
2264
|
+
const HARD_STOP_STEP_PERCENT = 2.5;
|
|
2265
|
+
/**
|
|
2266
|
+
* Computes the hard stop-loss distance percent for an opened position.
|
|
2267
|
+
*
|
|
2268
|
+
* Snaps the configured max stop-loss distance to a {@link HARD_STOP_STEP_PERCENT} grid
|
|
2269
|
+
* (rounded to the nearest step), then steps one notch down so the result stays strictly
|
|
2270
|
+
* below CC_MAX_STOPLOSS_DISTANCE_PERCENT — which the signal validator rejects at the
|
|
2271
|
+
* boundary (e.g. 20% config yields 20.008% after price rounding).
|
|
2272
|
+
*
|
|
2273
|
+
* @param maxDistance - CC_MAX_STOPLOSS_DISTANCE_PERCENT
|
|
2274
|
+
* @returns Hard stop-loss distance in percent (e.g. 11 -> 7.5, 10 -> 7.5, 20 -> 17.5)
|
|
2275
|
+
*/
|
|
2276
|
+
const COMPUTE_HARD_STOP_FN = (maxDistance) => Math.round(maxDistance / HARD_STOP_STEP_PERCENT) * HARD_STOP_STEP_PERCENT - HARD_STOP_STEP_PERCENT;
|
|
2277
|
+
class ControlViewService {
|
|
2278
|
+
constructor() {
|
|
2279
|
+
this.loggerService = inject(TYPES.loggerService);
|
|
2280
|
+
this.controlMockService = inject(TYPES.controlMockService);
|
|
2281
|
+
this.getStatus = async (symbol, context) => {
|
|
2282
|
+
this.loggerService.log("controlViewService getStatus", {
|
|
2283
|
+
symbol,
|
|
2284
|
+
context,
|
|
2285
|
+
});
|
|
2286
|
+
if (CC_ENABLE_MOCK) {
|
|
2287
|
+
return await this.controlMockService.getStatus(symbol, context);
|
|
2288
|
+
}
|
|
2289
|
+
const liveList = await BacktestKit.Live.list();
|
|
2290
|
+
const liveTarget = liveList.find((live) => live.symbol === symbol);
|
|
2291
|
+
if (liveTarget) {
|
|
2292
|
+
const currentPrice = await BacktestKit.Exchange.getAveragePrice(symbol, {
|
|
2293
|
+
exchangeName: liveTarget.exchangeName,
|
|
2294
|
+
});
|
|
2295
|
+
const strategy = await BacktestKit.Live.getStrategyStatus(symbol, context);
|
|
2296
|
+
const pending = await BacktestKit.Live.getPendingSignal(symbol, currentPrice, context);
|
|
2297
|
+
return { strategyInfo: strategy, pendingSignal: pending, currentPrice };
|
|
2298
|
+
}
|
|
2299
|
+
throw new Error("ControlViewService getStatus live target not found");
|
|
2300
|
+
};
|
|
2301
|
+
this.getAveragePrice = async (symbol, context) => {
|
|
2302
|
+
this.loggerService.log("controlViewService getAveragePrice", {
|
|
2303
|
+
symbol,
|
|
2304
|
+
context,
|
|
2305
|
+
});
|
|
2306
|
+
if (CC_ENABLE_MOCK) {
|
|
2307
|
+
return await this.controlMockService.getAveragePrice(symbol, context);
|
|
2308
|
+
}
|
|
2309
|
+
const liveList = await BacktestKit.Live.list();
|
|
2310
|
+
const liveTarget = liveList.find((live) => live.symbol === symbol);
|
|
2311
|
+
if (liveTarget) {
|
|
2312
|
+
return await BacktestKit.Exchange.getAveragePrice(symbol, {
|
|
2313
|
+
exchangeName: liveTarget.exchangeName,
|
|
2314
|
+
});
|
|
2315
|
+
}
|
|
2316
|
+
throw new Error("ControlViewService getAveragePrice live target not found");
|
|
2317
|
+
};
|
|
2318
|
+
this.commitOpenPending = async (symbol, context, dto) => {
|
|
2319
|
+
this.loggerService.log("controlViewService commitOpenPending", {
|
|
2320
|
+
symbol,
|
|
2321
|
+
context,
|
|
2322
|
+
dto,
|
|
2323
|
+
});
|
|
2324
|
+
if (CC_ENABLE_MOCK) {
|
|
2325
|
+
return await this.controlMockService.commitOpenPending(symbol, context, dto);
|
|
2326
|
+
}
|
|
2327
|
+
const liveList = await BacktestKit.Live.list();
|
|
2328
|
+
const liveTarget = liveList.find((live) => live.symbol === symbol);
|
|
2329
|
+
if (liveTarget) {
|
|
2330
|
+
const currentPrice = await BacktestKit.Exchange.getAveragePrice(symbol, {
|
|
2331
|
+
exchangeName: liveTarget.exchangeName,
|
|
2332
|
+
});
|
|
2333
|
+
const pending = await BacktestKit.Live.getPendingSignal(symbol, currentPrice, context);
|
|
2334
|
+
const config = BacktestKit.getConfig();
|
|
2335
|
+
if (pending) {
|
|
2336
|
+
throw new Error("ControlViewService commitOpenPending already have pending signal");
|
|
2337
|
+
}
|
|
2338
|
+
const percentStopLoss = COMPUTE_HARD_STOP_FN(config.CC_MAX_STOPLOSS_DISTANCE_PERCENT);
|
|
2339
|
+
return await BacktestKit.Live.commitCreateSignal(symbol, context, {
|
|
2340
|
+
...BacktestKit.Position.moonbag({
|
|
2341
|
+
position: dto.position,
|
|
2342
|
+
currentPrice,
|
|
2343
|
+
percentStopLoss,
|
|
2344
|
+
}),
|
|
2345
|
+
cost: dto.cost,
|
|
2346
|
+
note: dto.note,
|
|
2347
|
+
});
|
|
2348
|
+
}
|
|
2349
|
+
throw new Error("ControlViewService commitOpenPending live target not found");
|
|
2350
|
+
};
|
|
2351
|
+
this.commitAverageBuy = async (symbol, context, dto) => {
|
|
2352
|
+
this.loggerService.log("controlViewService commitAverageBuy", {
|
|
2353
|
+
symbol,
|
|
2354
|
+
context,
|
|
2355
|
+
dto,
|
|
2356
|
+
});
|
|
2357
|
+
if (CC_ENABLE_MOCK) {
|
|
2358
|
+
return await this.controlMockService.commitAverageBuy(symbol, context, dto);
|
|
2359
|
+
}
|
|
2360
|
+
const liveList = await BacktestKit.Live.list();
|
|
2361
|
+
const liveTarget = liveList.find((live) => live.symbol === symbol);
|
|
2362
|
+
if (liveTarget) {
|
|
2363
|
+
const currentPrice = await BacktestKit.Exchange.getAveragePrice(symbol, {
|
|
2364
|
+
exchangeName: liveTarget.exchangeName,
|
|
2365
|
+
});
|
|
2366
|
+
const pending = await BacktestKit.Live.getPendingSignal(symbol, currentPrice, context);
|
|
2367
|
+
if (!pending) {
|
|
2368
|
+
throw new Error("ControlViewService commitAverageBuy has no pending signal");
|
|
2369
|
+
}
|
|
2370
|
+
const isOk = await BacktestKit.Live.commitAverageBuy(symbol, currentPrice, context, dto.cost);
|
|
2371
|
+
if (!isOk) {
|
|
2372
|
+
throw new Error("ControlViewService commitAverageBuy failed");
|
|
2373
|
+
}
|
|
2374
|
+
return;
|
|
2375
|
+
}
|
|
2376
|
+
throw new Error("ControlViewService commitAverageBuy live target not found");
|
|
2377
|
+
};
|
|
2378
|
+
this.commitClosePending = async (symbol, context, dto) => {
|
|
2379
|
+
this.loggerService.log("controlViewService commitClosePending", {
|
|
2380
|
+
symbol,
|
|
2381
|
+
context,
|
|
2382
|
+
dto,
|
|
2383
|
+
});
|
|
2384
|
+
if (CC_ENABLE_MOCK) {
|
|
2385
|
+
return await this.controlMockService.commitClosePending(symbol, context, dto);
|
|
2386
|
+
}
|
|
2387
|
+
const liveList = await BacktestKit.Live.list();
|
|
2388
|
+
const liveTarget = liveList.find((live) => live.symbol === symbol);
|
|
2389
|
+
if (liveTarget) {
|
|
2390
|
+
const currentPrice = await BacktestKit.Exchange.getAveragePrice(symbol, {
|
|
2391
|
+
exchangeName: liveTarget.exchangeName,
|
|
2392
|
+
});
|
|
2393
|
+
const pending = await BacktestKit.Live.getPendingSignal(symbol, currentPrice, context);
|
|
2394
|
+
if (!pending) {
|
|
2395
|
+
throw new Error("ControlViewService commitClosePending has no pending signal");
|
|
2396
|
+
}
|
|
2397
|
+
return await BacktestKit.Live.commitClosePending(symbol, context, {
|
|
2398
|
+
id: pending.id,
|
|
2399
|
+
note: dto.note,
|
|
2400
|
+
});
|
|
2401
|
+
}
|
|
2402
|
+
throw new Error("ControlViewService commitClosePending live target not found");
|
|
2403
|
+
};
|
|
2404
|
+
this.commitBreakeven = async (symbol, context) => {
|
|
2405
|
+
this.loggerService.log("controlViewService commitBreakeven", {
|
|
2406
|
+
symbol,
|
|
2407
|
+
context,
|
|
2408
|
+
});
|
|
2409
|
+
if (CC_ENABLE_MOCK) {
|
|
2410
|
+
return await this.controlMockService.commitBreakeven(symbol, context);
|
|
2411
|
+
}
|
|
2412
|
+
const liveList = await BacktestKit.Live.list();
|
|
2413
|
+
const liveTarget = liveList.find((live) => live.symbol === symbol);
|
|
2414
|
+
if (liveTarget) {
|
|
2415
|
+
const currentPrice = await BacktestKit.Exchange.getAveragePrice(symbol, {
|
|
2416
|
+
exchangeName: liveTarget.exchangeName,
|
|
2417
|
+
});
|
|
2418
|
+
const pending = await BacktestKit.Live.getPendingSignal(symbol, currentPrice, context);
|
|
2419
|
+
if (!pending) {
|
|
2420
|
+
throw new Error("ControlViewService commitBreakeven has no pending signal");
|
|
2421
|
+
}
|
|
2422
|
+
const isOk = await BacktestKit.Live.commitBreakeven(symbol, currentPrice, context);
|
|
2423
|
+
if (!isOk) {
|
|
2424
|
+
throw new Error("ControlViewService commitBreakeven failed");
|
|
2425
|
+
}
|
|
2426
|
+
return;
|
|
2427
|
+
}
|
|
2428
|
+
throw new Error("ControlViewService commitBreakeven live target not found");
|
|
2429
|
+
};
|
|
2430
|
+
}
|
|
2431
|
+
}
|
|
2432
|
+
|
|
2200
2433
|
{
|
|
2201
2434
|
provide(TYPES.loggerService, () => new LoggerService());
|
|
2202
2435
|
provide(TYPES.exchangeService, () => new ExchangeService());
|
|
@@ -2224,6 +2457,7 @@ class RuntimeViewService {
|
|
|
2224
2457
|
provide(TYPES.environmentMockService, () => new EnvironmentMockService());
|
|
2225
2458
|
provide(TYPES.setupMockService, () => new SetupMockService());
|
|
2226
2459
|
provide(TYPES.runtimeMockService, () => new RuntimeMockService());
|
|
2460
|
+
provide(TYPES.controlMockService, () => new ControlMockService());
|
|
2227
2461
|
}
|
|
2228
2462
|
{
|
|
2229
2463
|
provide(TYPES.notificationViewService, () => new NotificationViewService());
|
|
@@ -2239,6 +2473,7 @@ class RuntimeViewService {
|
|
|
2239
2473
|
provide(TYPES.environmentViewService, () => new EnvironmentViewService());
|
|
2240
2474
|
provide(TYPES.setupViewService, () => new SetupViewService());
|
|
2241
2475
|
provide(TYPES.runtimeViewService, () => new RuntimeViewService());
|
|
2476
|
+
provide(TYPES.controlViewService, () => new ControlViewService());
|
|
2242
2477
|
}
|
|
2243
2478
|
|
|
2244
2479
|
const baseServices = {
|
|
@@ -2268,6 +2503,7 @@ const mockServices = {
|
|
|
2268
2503
|
environmentMockService: inject(TYPES.environmentMockService),
|
|
2269
2504
|
setupMockService: inject(TYPES.setupMockService),
|
|
2270
2505
|
runtimeMockService: inject(TYPES.runtimeMockService),
|
|
2506
|
+
controlMockService: inject(TYPES.controlMockService),
|
|
2271
2507
|
};
|
|
2272
2508
|
const viewServices = {
|
|
2273
2509
|
notificationViewService: inject(TYPES.notificationViewService),
|
|
@@ -2283,6 +2519,7 @@ const viewServices = {
|
|
|
2283
2519
|
environmentViewService: inject(TYPES.environmentViewService),
|
|
2284
2520
|
setupViewService: inject(TYPES.setupViewService),
|
|
2285
2521
|
runtimeViewService: inject(TYPES.runtimeViewService),
|
|
2522
|
+
controlViewService: inject(TYPES.controlViewService),
|
|
2286
2523
|
};
|
|
2287
2524
|
const ioc = {
|
|
2288
2525
|
...baseServices,
|
|
@@ -2851,6 +3088,175 @@ router$b.post("/api/v1/mock/status_one/:id", async (req, res) => {
|
|
|
2851
3088
|
});
|
|
2852
3089
|
}
|
|
2853
3090
|
});
|
|
3091
|
+
// ControlMockService endpoints
|
|
3092
|
+
router$b.post("/api/v1/mock/control_status", async (req, res) => {
|
|
3093
|
+
try {
|
|
3094
|
+
const request = await micro.json(req);
|
|
3095
|
+
const { symbol, context, requestId, serviceName } = request;
|
|
3096
|
+
const data = await ioc.controlMockService.getStatus(symbol, context);
|
|
3097
|
+
const result = {
|
|
3098
|
+
data,
|
|
3099
|
+
status: "ok",
|
|
3100
|
+
error: "",
|
|
3101
|
+
requestId,
|
|
3102
|
+
serviceName,
|
|
3103
|
+
};
|
|
3104
|
+
ioc.loggerService.log("/api/v1/mock/control_status ok", {
|
|
3105
|
+
request,
|
|
3106
|
+
result: omit(result, "data"),
|
|
3107
|
+
});
|
|
3108
|
+
return await micro.send(res, 200, result);
|
|
3109
|
+
}
|
|
3110
|
+
catch (error) {
|
|
3111
|
+
ioc.loggerService.log("/api/v1/mock/control_status error", {
|
|
3112
|
+
error: functoolsKit.errorData(error),
|
|
3113
|
+
});
|
|
3114
|
+
return await micro.send(res, 200, {
|
|
3115
|
+
status: "error",
|
|
3116
|
+
error: functoolsKit.getErrorMessage(error),
|
|
3117
|
+
});
|
|
3118
|
+
}
|
|
3119
|
+
});
|
|
3120
|
+
router$b.post("/api/v1/mock/control_average_price", async (req, res) => {
|
|
3121
|
+
try {
|
|
3122
|
+
const request = await micro.json(req);
|
|
3123
|
+
const { symbol, context, requestId, serviceName } = request;
|
|
3124
|
+
const data = await ioc.controlMockService.getAveragePrice(symbol, context);
|
|
3125
|
+
const result = {
|
|
3126
|
+
data,
|
|
3127
|
+
status: "ok",
|
|
3128
|
+
error: "",
|
|
3129
|
+
requestId,
|
|
3130
|
+
serviceName,
|
|
3131
|
+
};
|
|
3132
|
+
ioc.loggerService.log("/api/v1/mock/control_average_price ok", {
|
|
3133
|
+
request,
|
|
3134
|
+
result: omit(result, "data"),
|
|
3135
|
+
});
|
|
3136
|
+
return await micro.send(res, 200, result);
|
|
3137
|
+
}
|
|
3138
|
+
catch (error) {
|
|
3139
|
+
ioc.loggerService.log("/api/v1/mock/control_average_price error", {
|
|
3140
|
+
error: functoolsKit.errorData(error),
|
|
3141
|
+
});
|
|
3142
|
+
return await micro.send(res, 200, {
|
|
3143
|
+
status: "error",
|
|
3144
|
+
error: functoolsKit.getErrorMessage(error),
|
|
3145
|
+
});
|
|
3146
|
+
}
|
|
3147
|
+
});
|
|
3148
|
+
router$b.post("/api/v1/mock/control_open_pending", async (req, res) => {
|
|
3149
|
+
try {
|
|
3150
|
+
const request = await micro.json(req);
|
|
3151
|
+
const { symbol, context, dto, requestId, serviceName } = request;
|
|
3152
|
+
const data = await ioc.controlMockService.commitOpenPending(symbol, context, dto);
|
|
3153
|
+
const result = {
|
|
3154
|
+
data,
|
|
3155
|
+
status: "ok",
|
|
3156
|
+
error: "",
|
|
3157
|
+
requestId,
|
|
3158
|
+
serviceName,
|
|
3159
|
+
};
|
|
3160
|
+
ioc.loggerService.log("/api/v1/mock/control_open_pending ok", {
|
|
3161
|
+
request,
|
|
3162
|
+
result: omit(result, "data"),
|
|
3163
|
+
});
|
|
3164
|
+
return await micro.send(res, 200, result);
|
|
3165
|
+
}
|
|
3166
|
+
catch (error) {
|
|
3167
|
+
ioc.loggerService.log("/api/v1/mock/control_open_pending error", {
|
|
3168
|
+
error: functoolsKit.errorData(error),
|
|
3169
|
+
});
|
|
3170
|
+
return await micro.send(res, 200, {
|
|
3171
|
+
status: "error",
|
|
3172
|
+
error: functoolsKit.getErrorMessage(error),
|
|
3173
|
+
});
|
|
3174
|
+
}
|
|
3175
|
+
});
|
|
3176
|
+
router$b.post("/api/v1/mock/control_average_buy", async (req, res) => {
|
|
3177
|
+
try {
|
|
3178
|
+
const request = await micro.json(req);
|
|
3179
|
+
const { symbol, context, dto, requestId, serviceName } = request;
|
|
3180
|
+
const data = await ioc.controlMockService.commitAverageBuy(symbol, context, dto);
|
|
3181
|
+
const result = {
|
|
3182
|
+
data,
|
|
3183
|
+
status: "ok",
|
|
3184
|
+
error: "",
|
|
3185
|
+
requestId,
|
|
3186
|
+
serviceName,
|
|
3187
|
+
};
|
|
3188
|
+
ioc.loggerService.log("/api/v1/mock/control_average_buy ok", {
|
|
3189
|
+
request,
|
|
3190
|
+
result: omit(result, "data"),
|
|
3191
|
+
});
|
|
3192
|
+
return await micro.send(res, 200, result);
|
|
3193
|
+
}
|
|
3194
|
+
catch (error) {
|
|
3195
|
+
ioc.loggerService.log("/api/v1/mock/control_average_buy error", {
|
|
3196
|
+
error: functoolsKit.errorData(error),
|
|
3197
|
+
});
|
|
3198
|
+
return await micro.send(res, 200, {
|
|
3199
|
+
status: "error",
|
|
3200
|
+
error: functoolsKit.getErrorMessage(error),
|
|
3201
|
+
});
|
|
3202
|
+
}
|
|
3203
|
+
});
|
|
3204
|
+
router$b.post("/api/v1/mock/control_close_pending", async (req, res) => {
|
|
3205
|
+
try {
|
|
3206
|
+
const request = await micro.json(req);
|
|
3207
|
+
const { symbol, context, dto, requestId, serviceName } = request;
|
|
3208
|
+
const data = await ioc.controlMockService.commitClosePending(symbol, context, dto);
|
|
3209
|
+
const result = {
|
|
3210
|
+
data,
|
|
3211
|
+
status: "ok",
|
|
3212
|
+
error: "",
|
|
3213
|
+
requestId,
|
|
3214
|
+
serviceName,
|
|
3215
|
+
};
|
|
3216
|
+
ioc.loggerService.log("/api/v1/mock/control_close_pending ok", {
|
|
3217
|
+
request,
|
|
3218
|
+
result: omit(result, "data"),
|
|
3219
|
+
});
|
|
3220
|
+
return await micro.send(res, 200, result);
|
|
3221
|
+
}
|
|
3222
|
+
catch (error) {
|
|
3223
|
+
ioc.loggerService.log("/api/v1/mock/control_close_pending error", {
|
|
3224
|
+
error: functoolsKit.errorData(error),
|
|
3225
|
+
});
|
|
3226
|
+
return await micro.send(res, 200, {
|
|
3227
|
+
status: "error",
|
|
3228
|
+
error: functoolsKit.getErrorMessage(error),
|
|
3229
|
+
});
|
|
3230
|
+
}
|
|
3231
|
+
});
|
|
3232
|
+
router$b.post("/api/v1/mock/control_breakeven", async (req, res) => {
|
|
3233
|
+
try {
|
|
3234
|
+
const request = await micro.json(req);
|
|
3235
|
+
const { symbol, context, requestId, serviceName } = request;
|
|
3236
|
+
const data = await ioc.controlMockService.commitBreakeven(symbol, context);
|
|
3237
|
+
const result = {
|
|
3238
|
+
data,
|
|
3239
|
+
status: "ok",
|
|
3240
|
+
error: "",
|
|
3241
|
+
requestId,
|
|
3242
|
+
serviceName,
|
|
3243
|
+
};
|
|
3244
|
+
ioc.loggerService.log("/api/v1/mock/control_breakeven ok", {
|
|
3245
|
+
request,
|
|
3246
|
+
result: omit(result, "data"),
|
|
3247
|
+
});
|
|
3248
|
+
return await micro.send(res, 200, result);
|
|
3249
|
+
}
|
|
3250
|
+
catch (error) {
|
|
3251
|
+
ioc.loggerService.log("/api/v1/mock/control_breakeven error", {
|
|
3252
|
+
error: functoolsKit.errorData(error),
|
|
3253
|
+
});
|
|
3254
|
+
return await micro.send(res, 200, {
|
|
3255
|
+
status: "error",
|
|
3256
|
+
error: functoolsKit.getErrorMessage(error),
|
|
3257
|
+
});
|
|
3258
|
+
}
|
|
3259
|
+
});
|
|
2854
3260
|
// HeatMockService endpoints
|
|
2855
3261
|
router$b.post("/api/v1/mock/heat_data", async (req, res) => {
|
|
2856
3262
|
try {
|
|
@@ -3610,6 +4016,175 @@ router$a.post("/api/v1/view/status_one/:id", async (req, res) => {
|
|
|
3610
4016
|
});
|
|
3611
4017
|
}
|
|
3612
4018
|
});
|
|
4019
|
+
// ControlViewService endpoints
|
|
4020
|
+
router$a.post("/api/v1/view/control_status", async (req, res) => {
|
|
4021
|
+
try {
|
|
4022
|
+
const request = await micro.json(req);
|
|
4023
|
+
const { symbol, context, requestId, serviceName } = request;
|
|
4024
|
+
const data = await ioc.controlViewService.getStatus(symbol, context);
|
|
4025
|
+
const result = {
|
|
4026
|
+
data,
|
|
4027
|
+
status: "ok",
|
|
4028
|
+
error: "",
|
|
4029
|
+
requestId,
|
|
4030
|
+
serviceName,
|
|
4031
|
+
};
|
|
4032
|
+
ioc.loggerService.log("/api/v1/view/control_status ok", {
|
|
4033
|
+
request,
|
|
4034
|
+
result: omit(result, "data"),
|
|
4035
|
+
});
|
|
4036
|
+
return await micro.send(res, 200, result);
|
|
4037
|
+
}
|
|
4038
|
+
catch (error) {
|
|
4039
|
+
ioc.loggerService.log("/api/v1/view/control_status error", {
|
|
4040
|
+
error: functoolsKit.errorData(error),
|
|
4041
|
+
});
|
|
4042
|
+
return await micro.send(res, 200, {
|
|
4043
|
+
status: "error",
|
|
4044
|
+
error: functoolsKit.getErrorMessage(error),
|
|
4045
|
+
});
|
|
4046
|
+
}
|
|
4047
|
+
});
|
|
4048
|
+
router$a.post("/api/v1/view/control_average_price", async (req, res) => {
|
|
4049
|
+
try {
|
|
4050
|
+
const request = await micro.json(req);
|
|
4051
|
+
const { symbol, context, requestId, serviceName } = request;
|
|
4052
|
+
const data = await ioc.controlViewService.getAveragePrice(symbol, context);
|
|
4053
|
+
const result = {
|
|
4054
|
+
data,
|
|
4055
|
+
status: "ok",
|
|
4056
|
+
error: "",
|
|
4057
|
+
requestId,
|
|
4058
|
+
serviceName,
|
|
4059
|
+
};
|
|
4060
|
+
ioc.loggerService.log("/api/v1/view/control_average_price ok", {
|
|
4061
|
+
request,
|
|
4062
|
+
result: omit(result, "data"),
|
|
4063
|
+
});
|
|
4064
|
+
return await micro.send(res, 200, result);
|
|
4065
|
+
}
|
|
4066
|
+
catch (error) {
|
|
4067
|
+
ioc.loggerService.log("/api/v1/view/control_average_price error", {
|
|
4068
|
+
error: functoolsKit.errorData(error),
|
|
4069
|
+
});
|
|
4070
|
+
return await micro.send(res, 200, {
|
|
4071
|
+
status: "error",
|
|
4072
|
+
error: functoolsKit.getErrorMessage(error),
|
|
4073
|
+
});
|
|
4074
|
+
}
|
|
4075
|
+
});
|
|
4076
|
+
router$a.post("/api/v1/view/control_open_pending", async (req, res) => {
|
|
4077
|
+
try {
|
|
4078
|
+
const request = await micro.json(req);
|
|
4079
|
+
const { symbol, context, dto, requestId, serviceName } = request;
|
|
4080
|
+
const data = await ioc.controlViewService.commitOpenPending(symbol, context, dto);
|
|
4081
|
+
const result = {
|
|
4082
|
+
data,
|
|
4083
|
+
status: "ok",
|
|
4084
|
+
error: "",
|
|
4085
|
+
requestId,
|
|
4086
|
+
serviceName,
|
|
4087
|
+
};
|
|
4088
|
+
ioc.loggerService.log("/api/v1/view/control_open_pending ok", {
|
|
4089
|
+
request,
|
|
4090
|
+
result: omit(result, "data"),
|
|
4091
|
+
});
|
|
4092
|
+
return await micro.send(res, 200, result);
|
|
4093
|
+
}
|
|
4094
|
+
catch (error) {
|
|
4095
|
+
ioc.loggerService.log("/api/v1/view/control_open_pending error", {
|
|
4096
|
+
error: functoolsKit.errorData(error),
|
|
4097
|
+
});
|
|
4098
|
+
return await micro.send(res, 200, {
|
|
4099
|
+
status: "error",
|
|
4100
|
+
error: functoolsKit.getErrorMessage(error),
|
|
4101
|
+
});
|
|
4102
|
+
}
|
|
4103
|
+
});
|
|
4104
|
+
router$a.post("/api/v1/view/control_average_buy", async (req, res) => {
|
|
4105
|
+
try {
|
|
4106
|
+
const request = await micro.json(req);
|
|
4107
|
+
const { symbol, context, dto, requestId, serviceName } = request;
|
|
4108
|
+
const data = await ioc.controlViewService.commitAverageBuy(symbol, context, dto);
|
|
4109
|
+
const result = {
|
|
4110
|
+
data,
|
|
4111
|
+
status: "ok",
|
|
4112
|
+
error: "",
|
|
4113
|
+
requestId,
|
|
4114
|
+
serviceName,
|
|
4115
|
+
};
|
|
4116
|
+
ioc.loggerService.log("/api/v1/view/control_average_buy ok", {
|
|
4117
|
+
request,
|
|
4118
|
+
result: omit(result, "data"),
|
|
4119
|
+
});
|
|
4120
|
+
return await micro.send(res, 200, result);
|
|
4121
|
+
}
|
|
4122
|
+
catch (error) {
|
|
4123
|
+
ioc.loggerService.log("/api/v1/view/control_average_buy error", {
|
|
4124
|
+
error: functoolsKit.errorData(error),
|
|
4125
|
+
});
|
|
4126
|
+
return await micro.send(res, 200, {
|
|
4127
|
+
status: "error",
|
|
4128
|
+
error: functoolsKit.getErrorMessage(error),
|
|
4129
|
+
});
|
|
4130
|
+
}
|
|
4131
|
+
});
|
|
4132
|
+
router$a.post("/api/v1/view/control_close_pending", async (req, res) => {
|
|
4133
|
+
try {
|
|
4134
|
+
const request = await micro.json(req);
|
|
4135
|
+
const { symbol, context, dto, requestId, serviceName } = request;
|
|
4136
|
+
const data = await ioc.controlViewService.commitClosePending(symbol, context, dto);
|
|
4137
|
+
const result = {
|
|
4138
|
+
data,
|
|
4139
|
+
status: "ok",
|
|
4140
|
+
error: "",
|
|
4141
|
+
requestId,
|
|
4142
|
+
serviceName,
|
|
4143
|
+
};
|
|
4144
|
+
ioc.loggerService.log("/api/v1/view/control_close_pending ok", {
|
|
4145
|
+
request,
|
|
4146
|
+
result: omit(result, "data"),
|
|
4147
|
+
});
|
|
4148
|
+
return await micro.send(res, 200, result);
|
|
4149
|
+
}
|
|
4150
|
+
catch (error) {
|
|
4151
|
+
ioc.loggerService.log("/api/v1/view/control_close_pending error", {
|
|
4152
|
+
error: functoolsKit.errorData(error),
|
|
4153
|
+
});
|
|
4154
|
+
return await micro.send(res, 200, {
|
|
4155
|
+
status: "error",
|
|
4156
|
+
error: functoolsKit.getErrorMessage(error),
|
|
4157
|
+
});
|
|
4158
|
+
}
|
|
4159
|
+
});
|
|
4160
|
+
router$a.post("/api/v1/view/control_breakeven", async (req, res) => {
|
|
4161
|
+
try {
|
|
4162
|
+
const request = await micro.json(req);
|
|
4163
|
+
const { symbol, context, requestId, serviceName } = request;
|
|
4164
|
+
const data = await ioc.controlViewService.commitBreakeven(symbol, context);
|
|
4165
|
+
const result = {
|
|
4166
|
+
data,
|
|
4167
|
+
status: "ok",
|
|
4168
|
+
error: "",
|
|
4169
|
+
requestId,
|
|
4170
|
+
serviceName,
|
|
4171
|
+
};
|
|
4172
|
+
ioc.loggerService.log("/api/v1/view/control_breakeven ok", {
|
|
4173
|
+
request,
|
|
4174
|
+
result: omit(result, "data"),
|
|
4175
|
+
});
|
|
4176
|
+
return await micro.send(res, 200, result);
|
|
4177
|
+
}
|
|
4178
|
+
catch (error) {
|
|
4179
|
+
ioc.loggerService.log("/api/v1/view/control_breakeven error", {
|
|
4180
|
+
error: functoolsKit.errorData(error),
|
|
4181
|
+
});
|
|
4182
|
+
return await micro.send(res, 200, {
|
|
4183
|
+
status: "error",
|
|
4184
|
+
error: functoolsKit.getErrorMessage(error),
|
|
4185
|
+
});
|
|
4186
|
+
}
|
|
4187
|
+
});
|
|
3613
4188
|
// HeatViewService endpoints
|
|
3614
4189
|
router$a.post("/api/v1/view/heat_data", async (req, res) => {
|
|
3615
4190
|
try {
|