@backtest-kit/ui 5.5.2 → 5.6.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.
Files changed (24) hide show
  1. package/build/index.cjs +1055 -48
  2. package/build/index.mjs +1056 -49
  3. package/build/modules/frontend/build/assets/{Background-sfxyUbnl.js → Background-BGXaqCCj.js} +1 -1
  4. package/build/modules/frontend/build/assets/{IconPhoto-B37p3oma.js → IconPhoto-NqvLnXp7.js} +1 -1
  5. package/build/modules/frontend/build/assets/{KeyboardArrowLeft-BPw3Kmsa.js → KeyboardArrowLeft-Brhl60Pa.js} +1 -1
  6. package/build/modules/frontend/build/assets/{Refresh-Bc99NRlg.js → Refresh-BGkaUatF.js} +1 -1
  7. package/build/modules/frontend/build/assets/hasRouteMatch-7UKYuS0a.js +1 -0
  8. package/build/modules/frontend/build/assets/html2canvas-D-Nv0RTX.js +1 -0
  9. package/build/modules/frontend/build/assets/{index-DF_GlUhQ.js → index-4xZ56Pw3.js} +9 -9
  10. package/build/modules/frontend/build/assets/index-9iaIzgTc.js +1331 -0
  11. package/build/modules/frontend/build/assets/{index-DDdv_hbu.js → index-BDV9EkEY.js} +1 -1
  12. package/build/modules/frontend/build/assets/{index-B5N6nFu7.js → index-BYCwoppH.js} +1 -1
  13. package/build/modules/frontend/build/assets/{index-CsOKHAMs.js → index-CbQBf22x.js} +1 -1
  14. package/build/modules/frontend/build/assets/index-CywcKDZi.js +1 -0
  15. package/build/modules/frontend/build/assets/index-D3HRM1Jy.js +1 -0
  16. package/build/modules/frontend/build/assets/{index-BAiSnt2X.js → index-DG7b0pa9.js} +1 -1
  17. package/build/modules/frontend/build/assets/index.es-BFfvVHkP.js +16 -0
  18. package/build/modules/frontend/build/assets/{markdownit-D_RkE_Cw.js → markdownit-GU6B-6e7.js} +1 -1
  19. package/build/modules/frontend/build/assets/purify.es-DpMHVkxQ.js +2 -0
  20. package/build/modules/frontend/build/index.html +1 -1
  21. package/package.json +3 -3
  22. package/types.d.ts +80 -0
  23. package/build/modules/frontend/build/assets/index-B94OJ088.js +0 -1
  24. package/build/modules/frontend/build/assets/index-BB9WGslo.js +0 -1
package/build/index.mjs CHANGED
@@ -6,7 +6,7 @@ import finalhandler from 'finalhandler';
6
6
  import serveHandler from 'serve-handler';
7
7
  import os from 'os';
8
8
  import { createActivator } from 'di-kit';
9
- import { Exchange, Notification, Storage, Log, Live, lib } from 'backtest-kit';
9
+ import { alignToInterval, Exchange, Notification, Storage, Log, Live, Backtest, Breakeven, Risk, Partial, HighestProfit, Schedule, Performance, Sync, Heat, Walker, lib } from 'backtest-kit';
10
10
  import fs, { readdir, readFile } from 'fs/promises';
11
11
  import path, { join, dirname } from 'path';
12
12
  import { createRequire } from 'module';
@@ -17,10 +17,10 @@ const CC_WWWROOT_HOST = process.env.CC_WWWROOT_HOST || "0.0.0.0";
17
17
  const CC_WWWROOT_PORT = parseInt(process.env.CC_WWWROOT_PORT) || 60050;
18
18
  const CC_ENABLE_MOCK = !!parseInt(process.env.CC_ENABLE_MOCK) || false;
19
19
 
20
- const router$7 = Router({
20
+ const router$9 = Router({
21
21
  params: true,
22
22
  });
23
- router$7.get("/api/v1/health/health_check", async (req, res) => {
23
+ router$9.get("/api/v1/health/health_check", async (req, res) => {
24
24
  const [cpuLoad] = os.loadavg();
25
25
  return await micro.send(res, 200, {
26
26
  uptime: process.uptime(),
@@ -59,6 +59,8 @@ const connectionServices$1 = {
59
59
  };
60
60
  const metaServices$1 = {
61
61
  symbolMetaService: Symbol("symbolMetaService"),
62
+ backtestMetaService: Symbol("backtestMetaService"),
63
+ liveMetaService: Symbol("liveMetaService"),
62
64
  };
63
65
  const mockServices$1 = {
64
66
  notificationMockService: Symbol("notificationMockService"),
@@ -66,6 +68,7 @@ const mockServices$1 = {
66
68
  exchangeMockService: Symbol("exchangeMockService"),
67
69
  logMockService: Symbol("logMockService"),
68
70
  statusMockService: Symbol("statusMockService"),
71
+ markdownMockService: Symbol("markdownMockService"),
69
72
  };
70
73
  const viewServices$1 = {
71
74
  notificationViewService: Symbol("notificationViewService"),
@@ -73,6 +76,7 @@ const viewServices$1 = {
73
76
  exchangeViewService: Symbol("exchangeViewService"),
74
77
  logViewService: Symbol("logViewService"),
75
78
  statusViewService: Symbol("statusViewService"),
79
+ markdownViewService: Symbol("markdownViewService"),
76
80
  };
77
81
  const TYPES = {
78
82
  ...baseServices$1,
@@ -120,7 +124,7 @@ class ExchangeService {
120
124
  }
121
125
  const offsetMs = tick * step * 60 * 1000;
122
126
  const sDate = dto.signalStartTime - offsetMs;
123
- const eDate = Math.min(dto.signalStopTime + offsetMs, Date.now() - 1);
127
+ const eDate = Math.min(dto.signalStopTime + offsetMs, alignToInterval(new Date(), "1m").getTime());
124
128
  return await Exchange.getRawCandles(dto.symbol, dto.interval, {
125
129
  exchangeName: dto.exchangeName,
126
130
  }, undefined, sDate, eDate);
@@ -136,7 +140,7 @@ class ExchangeService {
136
140
  }
137
141
  const offsetMs = tick * step * 60 * 1000;
138
142
  const sDate = dto.currentTime - offsetMs;
139
- const eDate = Math.min(dto.currentTime + offsetMs, Date.now() - 1);
143
+ const eDate = Math.min(dto.currentTime + offsetMs, alignToInterval(new Date(), "1m").getTime());
140
144
  return await Exchange.getRawCandles(dto.symbol, dto.interval, {
141
145
  exchangeName: dto.exchangeName,
142
146
  }, undefined, sDate, eDate);
@@ -432,6 +436,136 @@ class StatusMockService {
432
436
  }
433
437
  }
434
438
 
439
+ const MOCK_DIR = "./mock/markdown";
440
+ const makeReader = (fileName) => singleshot(() => fs.readFile(path.join(MOCK_DIR, fileName), "utf-8"));
441
+ const makeDataReader = (fileName) => singleshot(async () => JSON.parse(await fs.readFile(path.join(MOCK_DIR, "data", fileName), "utf-8")));
442
+ const readBacktest = makeReader("backtest.md");
443
+ const readLive = makeReader("live.md");
444
+ const readBreakeven = makeReader("breakeven.md");
445
+ const readRisk = makeReader("risk.md");
446
+ const readPartial = makeReader("partial.md");
447
+ const readHighestProfit = makeReader("highest_profit.md");
448
+ const readSchedule = makeReader("schedule.md");
449
+ const readPerformance = makeReader("performance.md");
450
+ const readSync = makeReader("sync.md");
451
+ const readHeat = makeReader("heat.md");
452
+ const readWalker = makeReader("walker.md");
453
+ const readBacktestData = makeDataReader("backtest.json");
454
+ const readLiveData = makeDataReader("live.json");
455
+ const readBreakevenData = makeDataReader("breakeven.json");
456
+ const readRiskData = makeDataReader("risk.json");
457
+ const readPartialData = makeDataReader("partial.json");
458
+ const readHighestProfitData = makeDataReader("highest_profit.json");
459
+ const readScheduleData = makeDataReader("schedule.json");
460
+ const readPerformanceData = makeDataReader("performance.json");
461
+ const readSyncData = makeDataReader("sync.json");
462
+ const readHeatData = makeDataReader("heat.json");
463
+ const readWalkerData = makeDataReader("walker.json");
464
+ class MarkdownMockService {
465
+ constructor() {
466
+ this.loggerService = inject(TYPES.loggerService);
467
+ // Backtest
468
+ this.getBacktestData = async (symbol, strategyName, exchangeName, frameName) => {
469
+ this.loggerService.log("markdownMockService getBacktestData", { symbol, strategyName, exchangeName, frameName });
470
+ return readBacktestData();
471
+ };
472
+ this.getBacktestReport = async (symbol, strategyName, exchangeName, frameName) => {
473
+ this.loggerService.log("markdownMockService getBacktestReport", { symbol, strategyName, exchangeName, frameName });
474
+ return readBacktest();
475
+ };
476
+ // Live
477
+ this.getLiveData = async (symbol, strategyName, exchangeName) => {
478
+ this.loggerService.log("markdownMockService getLiveData", { symbol, strategyName, exchangeName });
479
+ return readLiveData();
480
+ };
481
+ this.getLiveReport = async (symbol, strategyName, exchangeName) => {
482
+ this.loggerService.log("markdownMockService getLiveReport", { symbol, strategyName, exchangeName });
483
+ return readLive();
484
+ };
485
+ // Breakeven
486
+ this.getBreakevenData = async (symbol, strategyName, exchangeName, frameName) => {
487
+ this.loggerService.log("markdownMockService getBreakevenData", { symbol, strategyName, exchangeName, frameName });
488
+ return readBreakevenData();
489
+ };
490
+ this.getBreakevenReport = async (symbol, strategyName, exchangeName, frameName) => {
491
+ this.loggerService.log("markdownMockService getBreakevenReport", { symbol, strategyName, exchangeName, frameName });
492
+ return readBreakeven();
493
+ };
494
+ // Risk
495
+ this.getRiskData = async (symbol, strategyName, exchangeName, frameName) => {
496
+ this.loggerService.log("markdownMockService getRiskData", { symbol, strategyName, exchangeName, frameName });
497
+ return readRiskData();
498
+ };
499
+ this.getRiskReport = async (symbol, strategyName, exchangeName, frameName) => {
500
+ this.loggerService.log("markdownMockService getRiskReport", { symbol, strategyName, exchangeName, frameName });
501
+ return readRisk();
502
+ };
503
+ // Partial
504
+ this.getPartialData = async (symbol, strategyName, exchangeName, frameName) => {
505
+ this.loggerService.log("markdownMockService getPartialData", { symbol, strategyName, exchangeName, frameName });
506
+ return readPartialData();
507
+ };
508
+ this.getPartialReport = async (symbol, strategyName, exchangeName, frameName) => {
509
+ this.loggerService.log("markdownMockService getPartialReport", { symbol, strategyName, exchangeName, frameName });
510
+ return readPartial();
511
+ };
512
+ // HighestProfit
513
+ this.getHighestProfitData = async (symbol, strategyName, exchangeName, frameName) => {
514
+ this.loggerService.log("markdownMockService getHighestProfitData", { symbol, strategyName, exchangeName, frameName });
515
+ return readHighestProfitData();
516
+ };
517
+ this.getHighestProfitReport = async (symbol, strategyName, exchangeName, frameName) => {
518
+ this.loggerService.log("markdownMockService getHighestProfitReport", { symbol, strategyName, exchangeName, frameName });
519
+ return readHighestProfit();
520
+ };
521
+ // Schedule
522
+ this.getScheduleData = async (symbol, strategyName, exchangeName, frameName) => {
523
+ this.loggerService.log("markdownMockService getScheduleData", { symbol, strategyName, exchangeName, frameName });
524
+ return readScheduleData();
525
+ };
526
+ this.getScheduleReport = async (symbol, strategyName, exchangeName, frameName) => {
527
+ this.loggerService.log("markdownMockService getScheduleReport", { symbol, strategyName, exchangeName, frameName });
528
+ return readSchedule();
529
+ };
530
+ // Performance
531
+ this.getPerformanceData = async (symbol, strategyName, exchangeName, frameName) => {
532
+ this.loggerService.log("markdownMockService getPerformanceData", { symbol, strategyName, exchangeName, frameName });
533
+ return readPerformanceData();
534
+ };
535
+ this.getPerformanceReport = async (symbol, strategyName, exchangeName, frameName) => {
536
+ this.loggerService.log("markdownMockService getPerformanceReport", { symbol, strategyName, exchangeName, frameName });
537
+ return readPerformance();
538
+ };
539
+ // Sync
540
+ this.getSyncData = async (symbol, strategyName, exchangeName, frameName) => {
541
+ this.loggerService.log("markdownMockService getSyncData", { symbol, strategyName, exchangeName, frameName });
542
+ return readSyncData();
543
+ };
544
+ this.getSyncReport = async (symbol, strategyName, exchangeName, frameName) => {
545
+ this.loggerService.log("markdownMockService getSyncReport", { symbol, strategyName, exchangeName, frameName });
546
+ return readSync();
547
+ };
548
+ // Heat
549
+ this.getHeatData = async (strategyName, exchangeName, frameName) => {
550
+ this.loggerService.log("markdownMockService getHeatData", { strategyName, exchangeName, frameName });
551
+ return readHeatData();
552
+ };
553
+ this.getHeatReport = async (strategyName, exchangeName, frameName) => {
554
+ this.loggerService.log("markdownMockService getHeatReport", { strategyName, exchangeName, frameName });
555
+ return readHeat();
556
+ };
557
+ // Walker
558
+ this.getWalkerData = async (symbol, walkerName) => {
559
+ this.loggerService.log("markdownMockService getWalkerData", { symbol, walkerName });
560
+ return readWalkerData();
561
+ };
562
+ this.getWalkerReport = async (symbol, walkerName) => {
563
+ this.loggerService.log("markdownMockService getWalkerReport", { symbol, walkerName });
564
+ return readWalker();
565
+ };
566
+ }
567
+ }
568
+
435
569
  const DEFAULT_LIMIT$1 = 25;
436
570
  const DEFAULT_OFFSET$1 = 0;
437
571
  const CREATE_FILTER_LIST_FN$1 = (filterData) => Object.keys(filterData).map((key) => (row) => new RegExp(filterData[key], "i").test(row[key]));
@@ -778,6 +912,178 @@ class StatusViewService {
778
912
  }
779
913
  }
780
914
 
915
+ class MarkdownViewService {
916
+ constructor() {
917
+ this.loggerService = inject(TYPES.loggerService);
918
+ this.markdownMockService = inject(TYPES.markdownMockService);
919
+ // Backtest
920
+ this.getBacktestData = async (symbol, strategyName, exchangeName, frameName) => {
921
+ this.loggerService.log("markdownViewService getBacktestData", { symbol, strategyName, exchangeName, frameName });
922
+ if (CC_ENABLE_MOCK) {
923
+ return await this.markdownMockService.getBacktestData(symbol, strategyName, exchangeName, frameName);
924
+ }
925
+ return await Backtest.getData(symbol, { strategyName, exchangeName, frameName });
926
+ };
927
+ this.getBacktestReport = async (symbol, strategyName, exchangeName, frameName) => {
928
+ this.loggerService.log("markdownViewService getBacktestReport", { symbol, strategyName, exchangeName, frameName });
929
+ if (CC_ENABLE_MOCK) {
930
+ return await this.markdownMockService.getBacktestReport(symbol, strategyName, exchangeName, frameName);
931
+ }
932
+ return await Backtest.getReport(symbol, { strategyName, exchangeName, frameName });
933
+ };
934
+ // Live
935
+ this.getLiveData = async (symbol, strategyName, exchangeName) => {
936
+ this.loggerService.log("markdownViewService getLiveData", { symbol, strategyName, exchangeName });
937
+ if (CC_ENABLE_MOCK) {
938
+ return await this.markdownMockService.getLiveData(symbol, strategyName, exchangeName);
939
+ }
940
+ return await Live.getData(symbol, { strategyName, exchangeName });
941
+ };
942
+ this.getLiveReport = async (symbol, strategyName, exchangeName) => {
943
+ this.loggerService.log("markdownViewService getLiveReport", { symbol, strategyName, exchangeName });
944
+ if (CC_ENABLE_MOCK) {
945
+ return await this.markdownMockService.getLiveReport(symbol, strategyName, exchangeName);
946
+ }
947
+ return await Live.getReport(symbol, { strategyName, exchangeName });
948
+ };
949
+ // Breakeven
950
+ this.getBreakevenData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
951
+ this.loggerService.log("markdownViewService getBreakevenData", { symbol, strategyName, exchangeName, frameName, backtest });
952
+ if (CC_ENABLE_MOCK) {
953
+ return await this.markdownMockService.getBreakevenData(symbol, strategyName, exchangeName, frameName);
954
+ }
955
+ return await Breakeven.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
956
+ };
957
+ this.getBreakevenReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
958
+ this.loggerService.log("markdownViewService getBreakevenReport", { symbol, strategyName, exchangeName, frameName, backtest });
959
+ if (CC_ENABLE_MOCK) {
960
+ return await this.markdownMockService.getBreakevenReport(symbol, strategyName, exchangeName, frameName);
961
+ }
962
+ return await Breakeven.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
963
+ };
964
+ // Risk
965
+ this.getRiskData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
966
+ this.loggerService.log("markdownViewService getRiskData", { symbol, strategyName, exchangeName, frameName, backtest });
967
+ if (CC_ENABLE_MOCK) {
968
+ return await this.markdownMockService.getRiskData(symbol, strategyName, exchangeName, frameName);
969
+ }
970
+ return await Risk.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
971
+ };
972
+ this.getRiskReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
973
+ this.loggerService.log("markdownViewService getRiskReport", { symbol, strategyName, exchangeName, frameName, backtest });
974
+ if (CC_ENABLE_MOCK) {
975
+ return await this.markdownMockService.getRiskReport(symbol, strategyName, exchangeName, frameName);
976
+ }
977
+ return await Risk.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
978
+ };
979
+ // Partial
980
+ this.getPartialData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
981
+ this.loggerService.log("markdownViewService getPartialData", { symbol, strategyName, exchangeName, frameName, backtest });
982
+ if (CC_ENABLE_MOCK) {
983
+ return await this.markdownMockService.getPartialData(symbol, strategyName, exchangeName, frameName);
984
+ }
985
+ return await Partial.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
986
+ };
987
+ this.getPartialReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
988
+ this.loggerService.log("markdownViewService getPartialReport", { symbol, strategyName, exchangeName, frameName, backtest });
989
+ if (CC_ENABLE_MOCK) {
990
+ return await this.markdownMockService.getPartialReport(symbol, strategyName, exchangeName, frameName);
991
+ }
992
+ return await Partial.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
993
+ };
994
+ // HighestProfit
995
+ this.getHighestProfitData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
996
+ this.loggerService.log("markdownViewService getHighestProfitData", { symbol, strategyName, exchangeName, frameName, backtest });
997
+ if (CC_ENABLE_MOCK) {
998
+ return await this.markdownMockService.getHighestProfitData(symbol, strategyName, exchangeName, frameName);
999
+ }
1000
+ return await HighestProfit.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1001
+ };
1002
+ this.getHighestProfitReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1003
+ this.loggerService.log("markdownViewService getHighestProfitReport", { symbol, strategyName, exchangeName, frameName, backtest });
1004
+ if (CC_ENABLE_MOCK) {
1005
+ return await this.markdownMockService.getHighestProfitReport(symbol, strategyName, exchangeName, frameName);
1006
+ }
1007
+ return await HighestProfit.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1008
+ };
1009
+ // Schedule
1010
+ this.getScheduleData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1011
+ this.loggerService.log("markdownViewService getScheduleData", { symbol, strategyName, exchangeName, frameName, backtest });
1012
+ if (CC_ENABLE_MOCK) {
1013
+ return await this.markdownMockService.getScheduleData(symbol, strategyName, exchangeName, frameName);
1014
+ }
1015
+ return await Schedule.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1016
+ };
1017
+ this.getScheduleReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1018
+ this.loggerService.log("markdownViewService getScheduleReport", { symbol, strategyName, exchangeName, frameName, backtest });
1019
+ if (CC_ENABLE_MOCK) {
1020
+ return await this.markdownMockService.getScheduleReport(symbol, strategyName, exchangeName, frameName);
1021
+ }
1022
+ return await Schedule.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1023
+ };
1024
+ // Performance
1025
+ this.getPerformanceData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1026
+ this.loggerService.log("markdownViewService getPerformanceData", { symbol, strategyName, exchangeName, frameName, backtest });
1027
+ if (CC_ENABLE_MOCK) {
1028
+ return await this.markdownMockService.getPerformanceData(symbol, strategyName, exchangeName, frameName);
1029
+ }
1030
+ return await Performance.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1031
+ };
1032
+ this.getPerformanceReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1033
+ this.loggerService.log("markdownViewService getPerformanceReport", { symbol, strategyName, exchangeName, frameName, backtest });
1034
+ if (CC_ENABLE_MOCK) {
1035
+ return await this.markdownMockService.getPerformanceReport(symbol, strategyName, exchangeName, frameName);
1036
+ }
1037
+ return await Performance.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1038
+ };
1039
+ // Sync
1040
+ this.getSyncData = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1041
+ this.loggerService.log("markdownViewService getSyncData", { symbol, strategyName, exchangeName, frameName, backtest });
1042
+ if (CC_ENABLE_MOCK) {
1043
+ return await this.markdownMockService.getSyncData(symbol, strategyName, exchangeName, frameName);
1044
+ }
1045
+ return await Sync.getData(symbol, { strategyName, exchangeName, frameName }, backtest);
1046
+ };
1047
+ this.getSyncReport = async (symbol, strategyName, exchangeName, frameName, backtest = false) => {
1048
+ this.loggerService.log("markdownViewService getSyncReport", { symbol, strategyName, exchangeName, frameName, backtest });
1049
+ if (CC_ENABLE_MOCK) {
1050
+ return await this.markdownMockService.getSyncReport(symbol, strategyName, exchangeName, frameName);
1051
+ }
1052
+ return await Sync.getReport(symbol, { strategyName, exchangeName, frameName }, backtest);
1053
+ };
1054
+ // Heat
1055
+ this.getHeatData = async (strategyName, exchangeName, frameName, backtest = false) => {
1056
+ this.loggerService.log("markdownViewService getHeatData", { strategyName, exchangeName, frameName, backtest });
1057
+ if (CC_ENABLE_MOCK) {
1058
+ return await this.markdownMockService.getHeatData(strategyName, exchangeName, frameName);
1059
+ }
1060
+ return await Heat.getData({ strategyName, exchangeName, frameName }, backtest);
1061
+ };
1062
+ this.getHeatReport = async (strategyName, exchangeName, frameName, backtest = false) => {
1063
+ this.loggerService.log("markdownViewService getHeatReport", { strategyName, exchangeName, frameName, backtest });
1064
+ if (CC_ENABLE_MOCK) {
1065
+ return await this.markdownMockService.getHeatReport(strategyName, exchangeName, frameName);
1066
+ }
1067
+ return await Heat.getReport({ strategyName, exchangeName, frameName }, backtest);
1068
+ };
1069
+ // Walker
1070
+ this.getWalkerData = async (symbol, walkerName) => {
1071
+ this.loggerService.log("markdownViewService getWalkerData", { symbol, walkerName });
1072
+ if (CC_ENABLE_MOCK) {
1073
+ return await this.markdownMockService.getWalkerData(symbol, walkerName);
1074
+ }
1075
+ return await Walker.getData(symbol, { walkerName });
1076
+ };
1077
+ this.getWalkerReport = async (symbol, walkerName) => {
1078
+ this.loggerService.log("markdownViewService getWalkerReport", { symbol, walkerName });
1079
+ if (CC_ENABLE_MOCK) {
1080
+ return await this.markdownMockService.getWalkerReport(symbol, walkerName);
1081
+ }
1082
+ return await Walker.getReport(symbol, { walkerName });
1083
+ };
1084
+ }
1085
+ }
1086
+
781
1087
  const symbol_list = [
782
1088
  {
783
1089
  icon: "/icon/btc.png",
@@ -919,6 +1225,41 @@ class PriceConnectionService {
919
1225
  }
920
1226
  }
921
1227
 
1228
+ const BACKTEST_LIST = [
1229
+ { id: "mock-backtest-1", symbol: "BTCUSDT", strategyName: "mock-strategy", exchangeName: "binance", frameName: "1m", status: "done" },
1230
+ { id: "mock-backtest-2", symbol: "ETHUSDT", strategyName: "mock-strategy", exchangeName: "binance", frameName: "1m", status: "running" },
1231
+ { id: "mock-backtest-3", symbol: "BNBUSDT", strategyName: "mock-strategy", exchangeName: "binance", frameName: "1m", status: "idle" },
1232
+ ];
1233
+ class BacktestMetaService {
1234
+ constructor() {
1235
+ this.loggerService = inject(TYPES.loggerService);
1236
+ this.list = async () => {
1237
+ this.loggerService.log("backtestMetaService list");
1238
+ if (CC_ENABLE_MOCK) {
1239
+ return BACKTEST_LIST;
1240
+ }
1241
+ return await Backtest.list();
1242
+ };
1243
+ }
1244
+ }
1245
+
1246
+ const LIVE_LIST = [
1247
+ { id: "mock-live-1", symbol: "BTCUSDT", strategyName: "mock-strategy", exchangeName: "binance", status: "running" },
1248
+ { id: "mock-live-2", symbol: "ETHUSDT", strategyName: "mock-strategy", exchangeName: "binance", status: "idle" },
1249
+ ];
1250
+ class LiveMetaService {
1251
+ constructor() {
1252
+ this.loggerService = inject(TYPES.loggerService);
1253
+ this.list = async () => {
1254
+ this.loggerService.log("liveMetaService list");
1255
+ if (CC_ENABLE_MOCK) {
1256
+ return LIVE_LIST;
1257
+ }
1258
+ return await Live.list();
1259
+ };
1260
+ }
1261
+ }
1262
+
922
1263
  {
923
1264
  provide(TYPES.loggerService, () => new LoggerService());
924
1265
  provide(TYPES.exchangeService, () => new ExchangeService());
@@ -928,7 +1269,9 @@ class PriceConnectionService {
928
1269
  provide(TYPES.priceConnectionService, () => new PriceConnectionService());
929
1270
  }
930
1271
  {
1272
+ provide(TYPES.liveMetaService, () => new LiveMetaService());
931
1273
  provide(TYPES.symbolMetaService, () => new SymbolMetaService());
1274
+ provide(TYPES.backtestMetaService, () => new BacktestMetaService());
932
1275
  }
933
1276
  {
934
1277
  provide(TYPES.notificationMockService, () => new NotificationMockService());
@@ -936,6 +1279,7 @@ class PriceConnectionService {
936
1279
  provide(TYPES.exchangeMockService, () => new ExchangeMockService());
937
1280
  provide(TYPES.logMockService, () => new LogMockService());
938
1281
  provide(TYPES.statusMockService, () => new StatusMockService());
1282
+ provide(TYPES.markdownMockService, () => new MarkdownMockService());
939
1283
  }
940
1284
  {
941
1285
  provide(TYPES.notificationViewService, () => new NotificationViewService());
@@ -943,6 +1287,7 @@ class PriceConnectionService {
943
1287
  provide(TYPES.exchangeViewService, () => new ExchangeViewService());
944
1288
  provide(TYPES.logViewService, () => new LogViewService());
945
1289
  provide(TYPES.statusViewService, () => new StatusViewService());
1290
+ provide(TYPES.markdownViewService, () => new MarkdownViewService());
946
1291
  }
947
1292
 
948
1293
  const baseServices = {
@@ -954,7 +1299,9 @@ const connectionServices = {
954
1299
  priceConnectionService: inject(TYPES.priceConnectionService),
955
1300
  };
956
1301
  const metaServices = {
1302
+ liveMetaService: inject(TYPES.liveMetaService),
957
1303
  symbolMetaService: inject(TYPES.symbolMetaService),
1304
+ backtestMetaService: inject(TYPES.backtestMetaService),
958
1305
  };
959
1306
  const mockServices = {
960
1307
  notificationMockService: inject(TYPES.notificationMockService),
@@ -962,6 +1309,7 @@ const mockServices = {
962
1309
  exchangeMockService: inject(TYPES.exchangeMockService),
963
1310
  logMockService: inject(TYPES.logMockService),
964
1311
  statusMockService: inject(TYPES.statusMockService),
1312
+ markdownMockService: inject(TYPES.markdownMockService),
965
1313
  };
966
1314
  const viewServices = {
967
1315
  notificationViewService: inject(TYPES.notificationViewService),
@@ -969,6 +1317,7 @@ const viewServices = {
969
1317
  exchangeViewService: inject(TYPES.exchangeViewService),
970
1318
  logViewService: inject(TYPES.logViewService),
971
1319
  statusViewService: inject(TYPES.statusViewService),
1320
+ markdownViewService: inject(TYPES.markdownViewService),
972
1321
  };
973
1322
  const ioc = {
974
1323
  ...baseServices,
@@ -979,11 +1328,11 @@ const ioc = {
979
1328
  };
980
1329
  init();
981
1330
 
982
- const router$6 = Router({
1331
+ const router$8 = Router({
983
1332
  params: true,
984
1333
  });
985
1334
  // ExchangeMockService endpoints
986
- router$6.post("/api/v1/mock/candles_signal", async (req, res) => {
1335
+ router$8.post("/api/v1/mock/candles_signal", async (req, res) => {
987
1336
  try {
988
1337
  const request = await micro.json(req);
989
1338
  const { signalId, interval, requestId, serviceName } = request;
@@ -1011,7 +1360,7 @@ router$6.post("/api/v1/mock/candles_signal", async (req, res) => {
1011
1360
  });
1012
1361
  }
1013
1362
  });
1014
- router$6.post("/api/v1/mock/candles_point", async (req, res) => {
1363
+ router$8.post("/api/v1/mock/candles_point", async (req, res) => {
1015
1364
  try {
1016
1365
  const request = await micro.json(req);
1017
1366
  const { currentTime, interval, requestId, serviceName, symbol, exchangeName } = request;
@@ -1045,7 +1394,7 @@ router$6.post("/api/v1/mock/candles_point", async (req, res) => {
1045
1394
  }
1046
1395
  });
1047
1396
  // NotificationMockService endpoints
1048
- router$6.post("/api/v1/mock/notification_list", async (req, res) => {
1397
+ router$8.post("/api/v1/mock/notification_list", async (req, res) => {
1049
1398
  try {
1050
1399
  const request = await micro.json(req);
1051
1400
  const { requestId, serviceName } = request;
@@ -1073,7 +1422,7 @@ router$6.post("/api/v1/mock/notification_list", async (req, res) => {
1073
1422
  });
1074
1423
  }
1075
1424
  });
1076
- router$6.post("/api/v1/mock/notification_one/:id", async (req, res) => {
1425
+ router$8.post("/api/v1/mock/notification_one/:id", async (req, res) => {
1077
1426
  try {
1078
1427
  const request = await micro.json(req);
1079
1428
  const { requestId, serviceName } = request;
@@ -1102,7 +1451,7 @@ router$6.post("/api/v1/mock/notification_one/:id", async (req, res) => {
1102
1451
  });
1103
1452
  }
1104
1453
  });
1105
- router$6.post("/api/v1/mock/notification_filter", async (req, res) => {
1454
+ router$8.post("/api/v1/mock/notification_filter", async (req, res) => {
1106
1455
  try {
1107
1456
  const request = await micro.json(req);
1108
1457
  const { requestId, serviceName, filterData, limit, offset } = request;
@@ -1131,7 +1480,7 @@ router$6.post("/api/v1/mock/notification_filter", async (req, res) => {
1131
1480
  }
1132
1481
  });
1133
1482
  // StorageMockService endpoints
1134
- router$6.post("/api/v1/mock/storage_one/:id", async (req, res) => {
1483
+ router$8.post("/api/v1/mock/storage_one/:id", async (req, res) => {
1135
1484
  try {
1136
1485
  const request = await micro.json(req);
1137
1486
  const { requestId, serviceName } = request;
@@ -1160,7 +1509,7 @@ router$6.post("/api/v1/mock/storage_one/:id", async (req, res) => {
1160
1509
  });
1161
1510
  }
1162
1511
  });
1163
- router$6.post("/api/v1/mock/storage_list/live", async (req, res) => {
1512
+ router$8.post("/api/v1/mock/storage_list/live", async (req, res) => {
1164
1513
  try {
1165
1514
  const request = await micro.json(req);
1166
1515
  const { requestId, serviceName } = request;
@@ -1188,7 +1537,7 @@ router$6.post("/api/v1/mock/storage_list/live", async (req, res) => {
1188
1537
  });
1189
1538
  }
1190
1539
  });
1191
- router$6.post("/api/v1/mock/storage_list/backtest", async (req, res) => {
1540
+ router$8.post("/api/v1/mock/storage_list/backtest", async (req, res) => {
1192
1541
  try {
1193
1542
  const request = await micro.json(req);
1194
1543
  const { requestId, serviceName } = request;
@@ -1217,7 +1566,7 @@ router$6.post("/api/v1/mock/storage_list/backtest", async (req, res) => {
1217
1566
  }
1218
1567
  });
1219
1568
  // LogMockService endpoints
1220
- router$6.post("/api/v1/mock/log_list", async (req, res) => {
1569
+ router$8.post("/api/v1/mock/log_list", async (req, res) => {
1221
1570
  try {
1222
1571
  const request = await micro.json(req);
1223
1572
  const { requestId, serviceName } = request;
@@ -1245,7 +1594,7 @@ router$6.post("/api/v1/mock/log_list", async (req, res) => {
1245
1594
  });
1246
1595
  }
1247
1596
  });
1248
- router$6.post("/api/v1/mock/log_one/:id", async (req, res) => {
1597
+ router$8.post("/api/v1/mock/log_one/:id", async (req, res) => {
1249
1598
  try {
1250
1599
  const request = await micro.json(req);
1251
1600
  const { requestId, serviceName } = request;
@@ -1274,7 +1623,7 @@ router$6.post("/api/v1/mock/log_one/:id", async (req, res) => {
1274
1623
  });
1275
1624
  }
1276
1625
  });
1277
- router$6.post("/api/v1/mock/log_filter", async (req, res) => {
1626
+ router$8.post("/api/v1/mock/log_filter", async (req, res) => {
1278
1627
  try {
1279
1628
  const request = await micro.json(req);
1280
1629
  const { requestId, serviceName, filterData, limit, offset } = request;
@@ -1302,7 +1651,7 @@ router$6.post("/api/v1/mock/log_filter", async (req, res) => {
1302
1651
  });
1303
1652
  }
1304
1653
  });
1305
- router$6.post("/api/v1/mock/candles_live", async (req, res) => {
1654
+ router$8.post("/api/v1/mock/candles_live", async (req, res) => {
1306
1655
  try {
1307
1656
  const request = await micro.json(req);
1308
1657
  const { signalId, interval, requestId, serviceName } = request;
@@ -1331,7 +1680,7 @@ router$6.post("/api/v1/mock/candles_live", async (req, res) => {
1331
1680
  }
1332
1681
  });
1333
1682
  // StatusMockService endpoints
1334
- router$6.post("/api/v1/mock/status_list", async (req, res) => {
1683
+ router$8.post("/api/v1/mock/status_list", async (req, res) => {
1335
1684
  try {
1336
1685
  const request = await micro.json(req);
1337
1686
  const { requestId, serviceName } = request;
@@ -1359,7 +1708,7 @@ router$6.post("/api/v1/mock/status_list", async (req, res) => {
1359
1708
  });
1360
1709
  }
1361
1710
  });
1362
- router$6.post("/api/v1/mock/status_one/:id", async (req, res) => {
1711
+ router$8.post("/api/v1/mock/status_one/:id", async (req, res) => {
1363
1712
  try {
1364
1713
  const request = await micro.json(req);
1365
1714
  const { requestId, serviceName } = request;
@@ -1389,11 +1738,11 @@ router$6.post("/api/v1/mock/status_one/:id", async (req, res) => {
1389
1738
  }
1390
1739
  });
1391
1740
 
1392
- const router$5 = Router({
1741
+ const router$7 = Router({
1393
1742
  params: true,
1394
1743
  });
1395
1744
  // ExchangeViewService endpoints
1396
- router$5.post("/api/v1/view/candles_signal", async (req, res) => {
1745
+ router$7.post("/api/v1/view/candles_signal", async (req, res) => {
1397
1746
  try {
1398
1747
  const request = await micro.json(req);
1399
1748
  const { signalId, interval, requestId, serviceName } = request;
@@ -1421,7 +1770,7 @@ router$5.post("/api/v1/view/candles_signal", async (req, res) => {
1421
1770
  });
1422
1771
  }
1423
1772
  });
1424
- router$5.post("/api/v1/view/candles_point", async (req, res) => {
1773
+ router$7.post("/api/v1/view/candles_point", async (req, res) => {
1425
1774
  try {
1426
1775
  const request = await micro.json(req);
1427
1776
  const { currentTime, interval, requestId, serviceName, symbol, exchangeName } = request;
@@ -1454,7 +1803,7 @@ router$5.post("/api/v1/view/candles_point", async (req, res) => {
1454
1803
  });
1455
1804
  }
1456
1805
  });
1457
- router$5.post("/api/v1/view/candles_live", async (req, res) => {
1806
+ router$7.post("/api/v1/view/candles_live", async (req, res) => {
1458
1807
  try {
1459
1808
  const request = await micro.json(req);
1460
1809
  const { signalId, interval, requestId, serviceName } = request;
@@ -1483,7 +1832,7 @@ router$5.post("/api/v1/view/candles_live", async (req, res) => {
1483
1832
  }
1484
1833
  });
1485
1834
  // NotificationViewService endpoints
1486
- router$5.post("/api/v1/view/notification_list", async (req, res) => {
1835
+ router$7.post("/api/v1/view/notification_list", async (req, res) => {
1487
1836
  try {
1488
1837
  const request = await micro.json(req);
1489
1838
  const { requestId, serviceName } = request;
@@ -1511,7 +1860,7 @@ router$5.post("/api/v1/view/notification_list", async (req, res) => {
1511
1860
  });
1512
1861
  }
1513
1862
  });
1514
- router$5.post("/api/v1/view/notification_one/:id", async (req, res) => {
1863
+ router$7.post("/api/v1/view/notification_one/:id", async (req, res) => {
1515
1864
  try {
1516
1865
  const request = await micro.json(req);
1517
1866
  const { requestId, serviceName } = request;
@@ -1540,7 +1889,7 @@ router$5.post("/api/v1/view/notification_one/:id", async (req, res) => {
1540
1889
  });
1541
1890
  }
1542
1891
  });
1543
- router$5.post("/api/v1/view/notification_filter", async (req, res) => {
1892
+ router$7.post("/api/v1/view/notification_filter", async (req, res) => {
1544
1893
  try {
1545
1894
  const request = await micro.json(req);
1546
1895
  const { requestId, serviceName, filterData, limit, offset } = request;
@@ -1569,7 +1918,7 @@ router$5.post("/api/v1/view/notification_filter", async (req, res) => {
1569
1918
  }
1570
1919
  });
1571
1920
  // StorageViewService endpoints
1572
- router$5.post("/api/v1/view/storage_one/:id", async (req, res) => {
1921
+ router$7.post("/api/v1/view/storage_one/:id", async (req, res) => {
1573
1922
  try {
1574
1923
  const request = await micro.json(req);
1575
1924
  const { requestId, serviceName } = request;
@@ -1598,7 +1947,7 @@ router$5.post("/api/v1/view/storage_one/:id", async (req, res) => {
1598
1947
  });
1599
1948
  }
1600
1949
  });
1601
- router$5.post("/api/v1/view/storage_list/live", async (req, res) => {
1950
+ router$7.post("/api/v1/view/storage_list/live", async (req, res) => {
1602
1951
  try {
1603
1952
  const request = await micro.json(req);
1604
1953
  const { requestId, serviceName } = request;
@@ -1626,7 +1975,7 @@ router$5.post("/api/v1/view/storage_list/live", async (req, res) => {
1626
1975
  });
1627
1976
  }
1628
1977
  });
1629
- router$5.post("/api/v1/view/storage_list/backtest", async (req, res) => {
1978
+ router$7.post("/api/v1/view/storage_list/backtest", async (req, res) => {
1630
1979
  try {
1631
1980
  const request = await micro.json(req);
1632
1981
  const { requestId, serviceName } = request;
@@ -1655,7 +2004,7 @@ router$5.post("/api/v1/view/storage_list/backtest", async (req, res) => {
1655
2004
  }
1656
2005
  });
1657
2006
  // LogViewService endpoints
1658
- router$5.post("/api/v1/view/log_list", async (req, res) => {
2007
+ router$7.post("/api/v1/view/log_list", async (req, res) => {
1659
2008
  try {
1660
2009
  const request = await micro.json(req);
1661
2010
  const { requestId, serviceName } = request;
@@ -1683,7 +2032,7 @@ router$5.post("/api/v1/view/log_list", async (req, res) => {
1683
2032
  });
1684
2033
  }
1685
2034
  });
1686
- router$5.post("/api/v1/view/log_one/:id", async (req, res) => {
2035
+ router$7.post("/api/v1/view/log_one/:id", async (req, res) => {
1687
2036
  try {
1688
2037
  const request = await micro.json(req);
1689
2038
  const { requestId, serviceName } = request;
@@ -1712,7 +2061,7 @@ router$5.post("/api/v1/view/log_one/:id", async (req, res) => {
1712
2061
  });
1713
2062
  }
1714
2063
  });
1715
- router$5.post("/api/v1/view/log_filter", async (req, res) => {
2064
+ router$7.post("/api/v1/view/log_filter", async (req, res) => {
1716
2065
  try {
1717
2066
  const request = await micro.json(req);
1718
2067
  const { requestId, serviceName, filterData, limit, offset } = request;
@@ -1741,7 +2090,7 @@ router$5.post("/api/v1/view/log_filter", async (req, res) => {
1741
2090
  }
1742
2091
  });
1743
2092
  // StatusViewService endpoints
1744
- router$5.post("/api/v1/view/status_list", async (req, res) => {
2093
+ router$7.post("/api/v1/view/status_list", async (req, res) => {
1745
2094
  try {
1746
2095
  const request = await micro.json(req);
1747
2096
  const { requestId, serviceName } = request;
@@ -1769,7 +2118,7 @@ router$5.post("/api/v1/view/status_list", async (req, res) => {
1769
2118
  });
1770
2119
  }
1771
2120
  });
1772
- router$5.post("/api/v1/view/status_one/:id", async (req, res) => {
2121
+ router$7.post("/api/v1/view/status_one/:id", async (req, res) => {
1773
2122
  try {
1774
2123
  const request = await micro.json(req);
1775
2124
  const { requestId, serviceName } = request;
@@ -1806,7 +2155,7 @@ function getModulesPath() {
1806
2155
  return join(basePath, "../../../");
1807
2156
  }
1808
2157
 
1809
- const router$4 = Router({
2158
+ const router$6 = Router({
1810
2159
  params: true,
1811
2160
  });
1812
2161
  // getModulesPath
@@ -1823,7 +2172,7 @@ const ASSET_32 = CC_ENABLE_MOCK
1823
2172
  const cache128 = new Map();
1824
2173
  const cache32 = new Map();
1825
2174
  const cacheSvg = new Map();
1826
- router$4.get("/icon/128/:filename", async (req, res) => {
2175
+ router$6.get("/icon/128/:filename", async (req, res) => {
1827
2176
  const filename = req.params.filename;
1828
2177
  // Check cache first
1829
2178
  if (cache128.has(filename)) {
@@ -1839,7 +2188,7 @@ router$4.get("/icon/128/:filename", async (req, res) => {
1839
2188
  }
1840
2189
  return await micro.send(res, 404, "File not found (128)");
1841
2190
  });
1842
- router$4.get("/icon/32/:filename", async (req, res) => {
2191
+ router$6.get("/icon/32/:filename", async (req, res) => {
1843
2192
  const filename = req.params.filename;
1844
2193
  // Check cache first
1845
2194
  if (cache32.has(filename)) {
@@ -1855,7 +2204,7 @@ router$4.get("/icon/32/:filename", async (req, res) => {
1855
2204
  }
1856
2205
  return await micro.send(res, 404, "File not found (32)");
1857
2206
  });
1858
- router$4.get("/icon/svg/:filename", async (req, res) => {
2207
+ router$6.get("/icon/svg/:filename", async (req, res) => {
1859
2208
  const filename = req.params.filename;
1860
2209
  // Check cache first
1861
2210
  if (cacheSvg.has(filename)) {
@@ -1871,7 +2220,7 @@ router$4.get("/icon/svg/:filename", async (req, res) => {
1871
2220
  }
1872
2221
  return await micro.send(res, 404, "File not found (svg)");
1873
2222
  });
1874
- router$4.get("/icon/:filename", async (req, res) => {
2223
+ router$6.get("/icon/:filename", async (req, res) => {
1875
2224
  const filename = req.params.filename;
1876
2225
  // Check cache first
1877
2226
  if (cache32.has(filename)) {
@@ -1888,10 +2237,10 @@ router$4.get("/icon/:filename", async (req, res) => {
1888
2237
  return await micro.send(res, 404, "File not found (root)");
1889
2238
  });
1890
2239
 
1891
- const router$3 = Router({
2240
+ const router$5 = Router({
1892
2241
  params: true,
1893
2242
  });
1894
- router$3.post("/api/v1/dict/symbol/list", async (req, res) => {
2243
+ router$5.post("/api/v1/dict/symbol/list", async (req, res) => {
1895
2244
  try {
1896
2245
  const request = await micro.json(req);
1897
2246
  const { requestId, serviceName } = request;
@@ -1919,7 +2268,7 @@ router$3.post("/api/v1/dict/symbol/list", async (req, res) => {
1919
2268
  });
1920
2269
  }
1921
2270
  });
1922
- router$3.post("/api/v1/dict/symbol/map", async (req, res) => {
2271
+ router$5.post("/api/v1/dict/symbol/map", async (req, res) => {
1923
2272
  try {
1924
2273
  const request = await micro.json(req);
1925
2274
  const { requestId, serviceName } = request;
@@ -1947,7 +2296,7 @@ router$3.post("/api/v1/dict/symbol/map", async (req, res) => {
1947
2296
  });
1948
2297
  }
1949
2298
  });
1950
- router$3.post("/api/v1/dict/symbol/one", async (req, res) => {
2299
+ router$5.post("/api/v1/dict/symbol/one", async (req, res) => {
1951
2300
  try {
1952
2301
  const request = await micro.json(req);
1953
2302
  const { requestId, serviceName, id } = request;
@@ -1976,6 +2325,630 @@ router$3.post("/api/v1/dict/symbol/one", async (req, res) => {
1976
2325
  }
1977
2326
  });
1978
2327
 
2328
+ const router$4 = Router({
2329
+ params: true,
2330
+ });
2331
+ router$4.post("/api/v1/markdown_mock/backtest_data", async (req, res) => {
2332
+ try {
2333
+ const request = await micro.json(req);
2334
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2335
+ const data = await ioc.markdownMockService.getBacktestData(symbol, strategyName, exchangeName, frameName);
2336
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2337
+ ioc.loggerService.log("/api/v1/markdown_mock/backtest_data ok", { request, result: omit(result, "data") });
2338
+ return await micro.send(res, 200, result);
2339
+ }
2340
+ catch (error) {
2341
+ ioc.loggerService.log("/api/v1/markdown_mock/backtest_data error", { error: errorData(error) });
2342
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2343
+ }
2344
+ });
2345
+ router$4.post("/api/v1/markdown_mock/backtest_report", async (req, res) => {
2346
+ try {
2347
+ const request = await micro.json(req);
2348
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2349
+ const data = await ioc.markdownMockService.getBacktestReport(symbol, strategyName, exchangeName, frameName);
2350
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2351
+ ioc.loggerService.log("/api/v1/markdown_mock/backtest_report ok", { request, result: omit(result, "data") });
2352
+ return await micro.send(res, 200, result);
2353
+ }
2354
+ catch (error) {
2355
+ ioc.loggerService.log("/api/v1/markdown_mock/backtest_report error", { error: errorData(error) });
2356
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2357
+ }
2358
+ });
2359
+ router$4.post("/api/v1/markdown_mock/live_data", async (req, res) => {
2360
+ try {
2361
+ const request = await micro.json(req);
2362
+ const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
2363
+ const data = await ioc.markdownMockService.getLiveData(symbol, strategyName, exchangeName);
2364
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2365
+ ioc.loggerService.log("/api/v1/markdown_mock/live_data ok", { request, result: omit(result, "data") });
2366
+ return await micro.send(res, 200, result);
2367
+ }
2368
+ catch (error) {
2369
+ ioc.loggerService.log("/api/v1/markdown_mock/live_data error", { error: errorData(error) });
2370
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2371
+ }
2372
+ });
2373
+ router$4.post("/api/v1/markdown_mock/live_report", async (req, res) => {
2374
+ try {
2375
+ const request = await micro.json(req);
2376
+ const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
2377
+ const data = await ioc.markdownMockService.getLiveReport(symbol, strategyName, exchangeName);
2378
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2379
+ ioc.loggerService.log("/api/v1/markdown_mock/live_report ok", { request, result: omit(result, "data") });
2380
+ return await micro.send(res, 200, result);
2381
+ }
2382
+ catch (error) {
2383
+ ioc.loggerService.log("/api/v1/markdown_mock/live_report error", { error: errorData(error) });
2384
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2385
+ }
2386
+ });
2387
+ router$4.post("/api/v1/markdown_mock/breakeven_data", async (req, res) => {
2388
+ try {
2389
+ const request = await micro.json(req);
2390
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2391
+ const data = await ioc.markdownMockService.getBreakevenData(symbol, strategyName, exchangeName, frameName);
2392
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2393
+ ioc.loggerService.log("/api/v1/markdown_mock/breakeven_data ok", { request, result: omit(result, "data") });
2394
+ return await micro.send(res, 200, result);
2395
+ }
2396
+ catch (error) {
2397
+ ioc.loggerService.log("/api/v1/markdown_mock/breakeven_data error", { error: errorData(error) });
2398
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2399
+ }
2400
+ });
2401
+ router$4.post("/api/v1/markdown_mock/breakeven_report", async (req, res) => {
2402
+ try {
2403
+ const request = await micro.json(req);
2404
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2405
+ const data = await ioc.markdownMockService.getBreakevenReport(symbol, strategyName, exchangeName, frameName);
2406
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2407
+ ioc.loggerService.log("/api/v1/markdown_mock/breakeven_report ok", { request, result: omit(result, "data") });
2408
+ return await micro.send(res, 200, result);
2409
+ }
2410
+ catch (error) {
2411
+ ioc.loggerService.log("/api/v1/markdown_mock/breakeven_report error", { error: errorData(error) });
2412
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2413
+ }
2414
+ });
2415
+ router$4.post("/api/v1/markdown_mock/risk_data", async (req, res) => {
2416
+ try {
2417
+ const request = await micro.json(req);
2418
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2419
+ const data = await ioc.markdownMockService.getRiskData(symbol, strategyName, exchangeName, frameName);
2420
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2421
+ ioc.loggerService.log("/api/v1/markdown_mock/risk_data ok", { request, result: omit(result, "data") });
2422
+ return await micro.send(res, 200, result);
2423
+ }
2424
+ catch (error) {
2425
+ ioc.loggerService.log("/api/v1/markdown_mock/risk_data error", { error: errorData(error) });
2426
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2427
+ }
2428
+ });
2429
+ router$4.post("/api/v1/markdown_mock/risk_report", async (req, res) => {
2430
+ try {
2431
+ const request = await micro.json(req);
2432
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2433
+ const data = await ioc.markdownMockService.getRiskReport(symbol, strategyName, exchangeName, frameName);
2434
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2435
+ ioc.loggerService.log("/api/v1/markdown_mock/risk_report ok", { request, result: omit(result, "data") });
2436
+ return await micro.send(res, 200, result);
2437
+ }
2438
+ catch (error) {
2439
+ ioc.loggerService.log("/api/v1/markdown_mock/risk_report error", { error: errorData(error) });
2440
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2441
+ }
2442
+ });
2443
+ router$4.post("/api/v1/markdown_mock/partial_data", async (req, res) => {
2444
+ try {
2445
+ const request = await micro.json(req);
2446
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2447
+ const data = await ioc.markdownMockService.getPartialData(symbol, strategyName, exchangeName, frameName);
2448
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2449
+ ioc.loggerService.log("/api/v1/markdown_mock/partial_data ok", { request, result: omit(result, "data") });
2450
+ return await micro.send(res, 200, result);
2451
+ }
2452
+ catch (error) {
2453
+ ioc.loggerService.log("/api/v1/markdown_mock/partial_data error", { error: errorData(error) });
2454
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2455
+ }
2456
+ });
2457
+ router$4.post("/api/v1/markdown_mock/partial_report", async (req, res) => {
2458
+ try {
2459
+ const request = await micro.json(req);
2460
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2461
+ const data = await ioc.markdownMockService.getPartialReport(symbol, strategyName, exchangeName, frameName);
2462
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2463
+ ioc.loggerService.log("/api/v1/markdown_mock/partial_report ok", { request, result: omit(result, "data") });
2464
+ return await micro.send(res, 200, result);
2465
+ }
2466
+ catch (error) {
2467
+ ioc.loggerService.log("/api/v1/markdown_mock/partial_report error", { error: errorData(error) });
2468
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2469
+ }
2470
+ });
2471
+ router$4.post("/api/v1/markdown_mock/highest_profit_data", async (req, res) => {
2472
+ try {
2473
+ const request = await micro.json(req);
2474
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2475
+ const data = await ioc.markdownMockService.getHighestProfitData(symbol, strategyName, exchangeName, frameName);
2476
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2477
+ ioc.loggerService.log("/api/v1/markdown_mock/highest_profit_data ok", { request, result: omit(result, "data") });
2478
+ return await micro.send(res, 200, result);
2479
+ }
2480
+ catch (error) {
2481
+ ioc.loggerService.log("/api/v1/markdown_mock/highest_profit_data error", { error: errorData(error) });
2482
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2483
+ }
2484
+ });
2485
+ router$4.post("/api/v1/markdown_mock/highest_profit_report", async (req, res) => {
2486
+ try {
2487
+ const request = await micro.json(req);
2488
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2489
+ const data = await ioc.markdownMockService.getHighestProfitReport(symbol, strategyName, exchangeName, frameName);
2490
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2491
+ ioc.loggerService.log("/api/v1/markdown_mock/highest_profit_report ok", { request, result: omit(result, "data") });
2492
+ return await micro.send(res, 200, result);
2493
+ }
2494
+ catch (error) {
2495
+ ioc.loggerService.log("/api/v1/markdown_mock/highest_profit_report error", { error: errorData(error) });
2496
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2497
+ }
2498
+ });
2499
+ router$4.post("/api/v1/markdown_mock/schedule_data", async (req, res) => {
2500
+ try {
2501
+ const request = await micro.json(req);
2502
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2503
+ const data = await ioc.markdownMockService.getScheduleData(symbol, strategyName, exchangeName, frameName);
2504
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2505
+ ioc.loggerService.log("/api/v1/markdown_mock/schedule_data ok", { request, result: omit(result, "data") });
2506
+ return await micro.send(res, 200, result);
2507
+ }
2508
+ catch (error) {
2509
+ ioc.loggerService.log("/api/v1/markdown_mock/schedule_data error", { error: errorData(error) });
2510
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2511
+ }
2512
+ });
2513
+ router$4.post("/api/v1/markdown_mock/schedule_report", async (req, res) => {
2514
+ try {
2515
+ const request = await micro.json(req);
2516
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2517
+ const data = await ioc.markdownMockService.getScheduleReport(symbol, strategyName, exchangeName, frameName);
2518
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2519
+ ioc.loggerService.log("/api/v1/markdown_mock/schedule_report ok", { request, result: omit(result, "data") });
2520
+ return await micro.send(res, 200, result);
2521
+ }
2522
+ catch (error) {
2523
+ ioc.loggerService.log("/api/v1/markdown_mock/schedule_report error", { error: errorData(error) });
2524
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2525
+ }
2526
+ });
2527
+ router$4.post("/api/v1/markdown_mock/performance_data", async (req, res) => {
2528
+ try {
2529
+ const request = await micro.json(req);
2530
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2531
+ const data = await ioc.markdownMockService.getPerformanceData(symbol, strategyName, exchangeName, frameName);
2532
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2533
+ ioc.loggerService.log("/api/v1/markdown_mock/performance_data ok", { request, result: omit(result, "data") });
2534
+ return await micro.send(res, 200, result);
2535
+ }
2536
+ catch (error) {
2537
+ ioc.loggerService.log("/api/v1/markdown_mock/performance_data error", { error: errorData(error) });
2538
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2539
+ }
2540
+ });
2541
+ router$4.post("/api/v1/markdown_mock/performance_report", async (req, res) => {
2542
+ try {
2543
+ const request = await micro.json(req);
2544
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2545
+ const data = await ioc.markdownMockService.getPerformanceReport(symbol, strategyName, exchangeName, frameName);
2546
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2547
+ ioc.loggerService.log("/api/v1/markdown_mock/performance_report ok", { request, result: omit(result, "data") });
2548
+ return await micro.send(res, 200, result);
2549
+ }
2550
+ catch (error) {
2551
+ ioc.loggerService.log("/api/v1/markdown_mock/performance_report error", { error: errorData(error) });
2552
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2553
+ }
2554
+ });
2555
+ router$4.post("/api/v1/markdown_mock/sync_data", async (req, res) => {
2556
+ try {
2557
+ const request = await micro.json(req);
2558
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2559
+ const data = await ioc.markdownMockService.getSyncData(symbol, strategyName, exchangeName, frameName);
2560
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2561
+ ioc.loggerService.log("/api/v1/markdown_mock/sync_data ok", { request, result: omit(result, "data") });
2562
+ return await micro.send(res, 200, result);
2563
+ }
2564
+ catch (error) {
2565
+ ioc.loggerService.log("/api/v1/markdown_mock/sync_data error", { error: errorData(error) });
2566
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2567
+ }
2568
+ });
2569
+ router$4.post("/api/v1/markdown_mock/sync_report", async (req, res) => {
2570
+ try {
2571
+ const request = await micro.json(req);
2572
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2573
+ const data = await ioc.markdownMockService.getSyncReport(symbol, strategyName, exchangeName, frameName);
2574
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2575
+ ioc.loggerService.log("/api/v1/markdown_mock/sync_report ok", { request, result: omit(result, "data") });
2576
+ return await micro.send(res, 200, result);
2577
+ }
2578
+ catch (error) {
2579
+ ioc.loggerService.log("/api/v1/markdown_mock/sync_report error", { error: errorData(error) });
2580
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2581
+ }
2582
+ });
2583
+ router$4.post("/api/v1/markdown_mock/heat_data", async (req, res) => {
2584
+ try {
2585
+ const request = await micro.json(req);
2586
+ const { requestId, serviceName, strategyName, exchangeName, frameName } = request;
2587
+ const data = await ioc.markdownMockService.getHeatData(strategyName, exchangeName, frameName);
2588
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2589
+ ioc.loggerService.log("/api/v1/markdown_mock/heat_data ok", { request, result: omit(result, "data") });
2590
+ return await micro.send(res, 200, result);
2591
+ }
2592
+ catch (error) {
2593
+ ioc.loggerService.log("/api/v1/markdown_mock/heat_data error", { error: errorData(error) });
2594
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2595
+ }
2596
+ });
2597
+ router$4.post("/api/v1/markdown_mock/heat_report", async (req, res) => {
2598
+ try {
2599
+ const request = await micro.json(req);
2600
+ const { requestId, serviceName, strategyName, exchangeName, frameName } = request;
2601
+ const data = await ioc.markdownMockService.getHeatReport(strategyName, exchangeName, frameName);
2602
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2603
+ ioc.loggerService.log("/api/v1/markdown_mock/heat_report ok", { request, result: omit(result, "data") });
2604
+ return await micro.send(res, 200, result);
2605
+ }
2606
+ catch (error) {
2607
+ ioc.loggerService.log("/api/v1/markdown_mock/heat_report error", { error: errorData(error) });
2608
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2609
+ }
2610
+ });
2611
+ router$4.post("/api/v1/markdown_mock/walker_data", async (req, res) => {
2612
+ try {
2613
+ const request = await micro.json(req);
2614
+ const { requestId, serviceName, symbol, walkerName } = request;
2615
+ const data = await ioc.markdownMockService.getWalkerData(symbol, walkerName);
2616
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2617
+ ioc.loggerService.log("/api/v1/markdown_mock/walker_data ok", { request, result: omit(result, "data") });
2618
+ return await micro.send(res, 200, result);
2619
+ }
2620
+ catch (error) {
2621
+ ioc.loggerService.log("/api/v1/markdown_mock/walker_data error", { error: errorData(error) });
2622
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2623
+ }
2624
+ });
2625
+ router$4.post("/api/v1/markdown_mock/walker_report", async (req, res) => {
2626
+ try {
2627
+ const request = await micro.json(req);
2628
+ const { requestId, serviceName, symbol, walkerName } = request;
2629
+ const data = await ioc.markdownMockService.getWalkerReport(symbol, walkerName);
2630
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2631
+ ioc.loggerService.log("/api/v1/markdown_mock/walker_report ok", { request, result: omit(result, "data") });
2632
+ return await micro.send(res, 200, result);
2633
+ }
2634
+ catch (error) {
2635
+ ioc.loggerService.log("/api/v1/markdown_mock/walker_report error", { error: errorData(error) });
2636
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2637
+ }
2638
+ });
2639
+
2640
+ const router$3 = Router({
2641
+ params: true,
2642
+ });
2643
+ router$3.post("/api/v1/markdown_view/backtest_data", async (req, res) => {
2644
+ try {
2645
+ const request = await micro.json(req);
2646
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2647
+ const data = await ioc.markdownViewService.getBacktestData(symbol, strategyName, exchangeName, frameName);
2648
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2649
+ ioc.loggerService.log("/api/v1/markdown_view/backtest_data ok", { request, result: omit(result, "data") });
2650
+ return await micro.send(res, 200, result);
2651
+ }
2652
+ catch (error) {
2653
+ ioc.loggerService.log("/api/v1/markdown_view/backtest_data error", { error: errorData(error) });
2654
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2655
+ }
2656
+ });
2657
+ router$3.post("/api/v1/markdown_view/backtest_report", async (req, res) => {
2658
+ try {
2659
+ const request = await micro.json(req);
2660
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName } = request;
2661
+ const data = await ioc.markdownViewService.getBacktestReport(symbol, strategyName, exchangeName, frameName);
2662
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2663
+ ioc.loggerService.log("/api/v1/markdown_view/backtest_report ok", { request, result: omit(result, "data") });
2664
+ return await micro.send(res, 200, result);
2665
+ }
2666
+ catch (error) {
2667
+ ioc.loggerService.log("/api/v1/markdown_view/backtest_report error", { error: errorData(error) });
2668
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2669
+ }
2670
+ });
2671
+ router$3.post("/api/v1/markdown_view/live_data", async (req, res) => {
2672
+ try {
2673
+ const request = await micro.json(req);
2674
+ const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
2675
+ const data = await ioc.markdownViewService.getLiveData(symbol, strategyName, exchangeName);
2676
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2677
+ ioc.loggerService.log("/api/v1/markdown_view/live_data ok", { request, result: omit(result, "data") });
2678
+ return await micro.send(res, 200, result);
2679
+ }
2680
+ catch (error) {
2681
+ ioc.loggerService.log("/api/v1/markdown_view/live_data error", { error: errorData(error) });
2682
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2683
+ }
2684
+ });
2685
+ router$3.post("/api/v1/markdown_view/live_report", async (req, res) => {
2686
+ try {
2687
+ const request = await micro.json(req);
2688
+ const { requestId, serviceName, symbol, strategyName, exchangeName } = request;
2689
+ const data = await ioc.markdownViewService.getLiveReport(symbol, strategyName, exchangeName);
2690
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2691
+ ioc.loggerService.log("/api/v1/markdown_view/live_report ok", { request, result: omit(result, "data") });
2692
+ return await micro.send(res, 200, result);
2693
+ }
2694
+ catch (error) {
2695
+ ioc.loggerService.log("/api/v1/markdown_view/live_report error", { error: errorData(error) });
2696
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2697
+ }
2698
+ });
2699
+ router$3.post("/api/v1/markdown_view/breakeven_data", async (req, res) => {
2700
+ try {
2701
+ const request = await micro.json(req);
2702
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2703
+ const data = await ioc.markdownViewService.getBreakevenData(symbol, strategyName, exchangeName, frameName, backtest);
2704
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2705
+ ioc.loggerService.log("/api/v1/markdown_view/breakeven_data ok", { request, result: omit(result, "data") });
2706
+ return await micro.send(res, 200, result);
2707
+ }
2708
+ catch (error) {
2709
+ ioc.loggerService.log("/api/v1/markdown_view/breakeven_data error", { error: errorData(error) });
2710
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2711
+ }
2712
+ });
2713
+ router$3.post("/api/v1/markdown_view/breakeven_report", async (req, res) => {
2714
+ try {
2715
+ const request = await micro.json(req);
2716
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2717
+ const data = await ioc.markdownViewService.getBreakevenReport(symbol, strategyName, exchangeName, frameName, backtest);
2718
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2719
+ ioc.loggerService.log("/api/v1/markdown_view/breakeven_report ok", { request, result: omit(result, "data") });
2720
+ return await micro.send(res, 200, result);
2721
+ }
2722
+ catch (error) {
2723
+ ioc.loggerService.log("/api/v1/markdown_view/breakeven_report error", { error: errorData(error) });
2724
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2725
+ }
2726
+ });
2727
+ router$3.post("/api/v1/markdown_view/risk_data", async (req, res) => {
2728
+ try {
2729
+ const request = await micro.json(req);
2730
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2731
+ const data = await ioc.markdownViewService.getRiskData(symbol, strategyName, exchangeName, frameName, backtest);
2732
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2733
+ ioc.loggerService.log("/api/v1/markdown_view/risk_data ok", { request, result: omit(result, "data") });
2734
+ return await micro.send(res, 200, result);
2735
+ }
2736
+ catch (error) {
2737
+ ioc.loggerService.log("/api/v1/markdown_view/risk_data error", { error: errorData(error) });
2738
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2739
+ }
2740
+ });
2741
+ router$3.post("/api/v1/markdown_view/risk_report", async (req, res) => {
2742
+ try {
2743
+ const request = await micro.json(req);
2744
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2745
+ const data = await ioc.markdownViewService.getRiskReport(symbol, strategyName, exchangeName, frameName, backtest);
2746
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2747
+ ioc.loggerService.log("/api/v1/markdown_view/risk_report ok", { request, result: omit(result, "data") });
2748
+ return await micro.send(res, 200, result);
2749
+ }
2750
+ catch (error) {
2751
+ ioc.loggerService.log("/api/v1/markdown_view/risk_report error", { error: errorData(error) });
2752
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2753
+ }
2754
+ });
2755
+ router$3.post("/api/v1/markdown_view/partial_data", async (req, res) => {
2756
+ try {
2757
+ const request = await micro.json(req);
2758
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2759
+ const data = await ioc.markdownViewService.getPartialData(symbol, strategyName, exchangeName, frameName, backtest);
2760
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2761
+ ioc.loggerService.log("/api/v1/markdown_view/partial_data ok", { request, result: omit(result, "data") });
2762
+ return await micro.send(res, 200, result);
2763
+ }
2764
+ catch (error) {
2765
+ ioc.loggerService.log("/api/v1/markdown_view/partial_data error", { error: errorData(error) });
2766
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2767
+ }
2768
+ });
2769
+ router$3.post("/api/v1/markdown_view/partial_report", async (req, res) => {
2770
+ try {
2771
+ const request = await micro.json(req);
2772
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2773
+ const data = await ioc.markdownViewService.getPartialReport(symbol, strategyName, exchangeName, frameName, backtest);
2774
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2775
+ ioc.loggerService.log("/api/v1/markdown_view/partial_report ok", { request, result: omit(result, "data") });
2776
+ return await micro.send(res, 200, result);
2777
+ }
2778
+ catch (error) {
2779
+ ioc.loggerService.log("/api/v1/markdown_view/partial_report error", { error: errorData(error) });
2780
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2781
+ }
2782
+ });
2783
+ router$3.post("/api/v1/markdown_view/highest_profit_data", async (req, res) => {
2784
+ try {
2785
+ const request = await micro.json(req);
2786
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2787
+ const data = await ioc.markdownViewService.getHighestProfitData(symbol, strategyName, exchangeName, frameName, backtest);
2788
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2789
+ ioc.loggerService.log("/api/v1/markdown_view/highest_profit_data ok", { request, result: omit(result, "data") });
2790
+ return await micro.send(res, 200, result);
2791
+ }
2792
+ catch (error) {
2793
+ ioc.loggerService.log("/api/v1/markdown_view/highest_profit_data error", { error: errorData(error) });
2794
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2795
+ }
2796
+ });
2797
+ router$3.post("/api/v1/markdown_view/highest_profit_report", async (req, res) => {
2798
+ try {
2799
+ const request = await micro.json(req);
2800
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2801
+ const data = await ioc.markdownViewService.getHighestProfitReport(symbol, strategyName, exchangeName, frameName, backtest);
2802
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2803
+ ioc.loggerService.log("/api/v1/markdown_view/highest_profit_report ok", { request, result: omit(result, "data") });
2804
+ return await micro.send(res, 200, result);
2805
+ }
2806
+ catch (error) {
2807
+ ioc.loggerService.log("/api/v1/markdown_view/highest_profit_report error", { error: errorData(error) });
2808
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2809
+ }
2810
+ });
2811
+ router$3.post("/api/v1/markdown_view/schedule_data", async (req, res) => {
2812
+ try {
2813
+ const request = await micro.json(req);
2814
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2815
+ const data = await ioc.markdownViewService.getScheduleData(symbol, strategyName, exchangeName, frameName, backtest);
2816
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2817
+ ioc.loggerService.log("/api/v1/markdown_view/schedule_data ok", { request, result: omit(result, "data") });
2818
+ return await micro.send(res, 200, result);
2819
+ }
2820
+ catch (error) {
2821
+ ioc.loggerService.log("/api/v1/markdown_view/schedule_data error", { error: errorData(error) });
2822
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2823
+ }
2824
+ });
2825
+ router$3.post("/api/v1/markdown_view/schedule_report", async (req, res) => {
2826
+ try {
2827
+ const request = await micro.json(req);
2828
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2829
+ const data = await ioc.markdownViewService.getScheduleReport(symbol, strategyName, exchangeName, frameName, backtest);
2830
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2831
+ ioc.loggerService.log("/api/v1/markdown_view/schedule_report ok", { request, result: omit(result, "data") });
2832
+ return await micro.send(res, 200, result);
2833
+ }
2834
+ catch (error) {
2835
+ ioc.loggerService.log("/api/v1/markdown_view/schedule_report error", { error: errorData(error) });
2836
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2837
+ }
2838
+ });
2839
+ router$3.post("/api/v1/markdown_view/performance_data", async (req, res) => {
2840
+ try {
2841
+ const request = await micro.json(req);
2842
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2843
+ const data = await ioc.markdownViewService.getPerformanceData(symbol, strategyName, exchangeName, frameName, backtest);
2844
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2845
+ ioc.loggerService.log("/api/v1/markdown_view/performance_data ok", { request, result: omit(result, "data") });
2846
+ return await micro.send(res, 200, result);
2847
+ }
2848
+ catch (error) {
2849
+ ioc.loggerService.log("/api/v1/markdown_view/performance_data error", { error: errorData(error) });
2850
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2851
+ }
2852
+ });
2853
+ router$3.post("/api/v1/markdown_view/performance_report", async (req, res) => {
2854
+ try {
2855
+ const request = await micro.json(req);
2856
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2857
+ const data = await ioc.markdownViewService.getPerformanceReport(symbol, strategyName, exchangeName, frameName, backtest);
2858
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2859
+ ioc.loggerService.log("/api/v1/markdown_view/performance_report ok", { request, result: omit(result, "data") });
2860
+ return await micro.send(res, 200, result);
2861
+ }
2862
+ catch (error) {
2863
+ ioc.loggerService.log("/api/v1/markdown_view/performance_report error", { error: errorData(error) });
2864
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2865
+ }
2866
+ });
2867
+ router$3.post("/api/v1/markdown_view/sync_data", async (req, res) => {
2868
+ try {
2869
+ const request = await micro.json(req);
2870
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2871
+ const data = await ioc.markdownViewService.getSyncData(symbol, strategyName, exchangeName, frameName, backtest);
2872
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2873
+ ioc.loggerService.log("/api/v1/markdown_view/sync_data ok", { request, result: omit(result, "data") });
2874
+ return await micro.send(res, 200, result);
2875
+ }
2876
+ catch (error) {
2877
+ ioc.loggerService.log("/api/v1/markdown_view/sync_data error", { error: errorData(error) });
2878
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2879
+ }
2880
+ });
2881
+ router$3.post("/api/v1/markdown_view/sync_report", async (req, res) => {
2882
+ try {
2883
+ const request = await micro.json(req);
2884
+ const { requestId, serviceName, symbol, strategyName, exchangeName, frameName, backtest } = request;
2885
+ const data = await ioc.markdownViewService.getSyncReport(symbol, strategyName, exchangeName, frameName, backtest);
2886
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2887
+ ioc.loggerService.log("/api/v1/markdown_view/sync_report ok", { request, result: omit(result, "data") });
2888
+ return await micro.send(res, 200, result);
2889
+ }
2890
+ catch (error) {
2891
+ ioc.loggerService.log("/api/v1/markdown_view/sync_report error", { error: errorData(error) });
2892
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2893
+ }
2894
+ });
2895
+ router$3.post("/api/v1/markdown_view/heat_data", async (req, res) => {
2896
+ try {
2897
+ const request = await micro.json(req);
2898
+ const { requestId, serviceName, strategyName, exchangeName, frameName, backtest } = request;
2899
+ const data = await ioc.markdownViewService.getHeatData(strategyName, exchangeName, frameName, backtest);
2900
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2901
+ ioc.loggerService.log("/api/v1/markdown_view/heat_data ok", { request, result: omit(result, "data") });
2902
+ return await micro.send(res, 200, result);
2903
+ }
2904
+ catch (error) {
2905
+ ioc.loggerService.log("/api/v1/markdown_view/heat_data error", { error: errorData(error) });
2906
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2907
+ }
2908
+ });
2909
+ router$3.post("/api/v1/markdown_view/heat_report", async (req, res) => {
2910
+ try {
2911
+ const request = await micro.json(req);
2912
+ const { requestId, serviceName, strategyName, exchangeName, frameName, backtest } = request;
2913
+ const data = await ioc.markdownViewService.getHeatReport(strategyName, exchangeName, frameName, backtest);
2914
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2915
+ ioc.loggerService.log("/api/v1/markdown_view/heat_report ok", { request, result: omit(result, "data") });
2916
+ return await micro.send(res, 200, result);
2917
+ }
2918
+ catch (error) {
2919
+ ioc.loggerService.log("/api/v1/markdown_view/heat_report error", { error: errorData(error) });
2920
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2921
+ }
2922
+ });
2923
+ router$3.post("/api/v1/markdown_view/walker_data", async (req, res) => {
2924
+ try {
2925
+ const request = await micro.json(req);
2926
+ const { requestId, serviceName, symbol, walkerName } = request;
2927
+ const data = await ioc.markdownViewService.getWalkerData(symbol, walkerName);
2928
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2929
+ ioc.loggerService.log("/api/v1/markdown_view/walker_data ok", { request, result: omit(result, "data") });
2930
+ return await micro.send(res, 200, result);
2931
+ }
2932
+ catch (error) {
2933
+ ioc.loggerService.log("/api/v1/markdown_view/walker_data error", { error: errorData(error) });
2934
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2935
+ }
2936
+ });
2937
+ router$3.post("/api/v1/markdown_view/walker_report", async (req, res) => {
2938
+ try {
2939
+ const request = await micro.json(req);
2940
+ const { requestId, serviceName, symbol, walkerName } = request;
2941
+ const data = await ioc.markdownViewService.getWalkerReport(symbol, walkerName);
2942
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2943
+ ioc.loggerService.log("/api/v1/markdown_view/walker_report ok", { request, result: omit(result, "data") });
2944
+ return await micro.send(res, 200, result);
2945
+ }
2946
+ catch (error) {
2947
+ ioc.loggerService.log("/api/v1/markdown_view/walker_report error", { error: errorData(error) });
2948
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2949
+ }
2950
+ });
2951
+
1979
2952
  const router$2 = Router({
1980
2953
  params: true,
1981
2954
  });
@@ -2007,6 +2980,34 @@ router$2.post("/api/v1/global/signal_pending_price", async (req, res) => {
2007
2980
  });
2008
2981
  }
2009
2982
  });
2983
+ router$2.post("/api/v1/global/backtest_list", async (req, res) => {
2984
+ try {
2985
+ const request = await micro.json(req);
2986
+ const { requestId, serviceName } = request;
2987
+ const data = await ioc.backtestMetaService.list();
2988
+ const result = { data, status: "ok", error: "", requestId, serviceName };
2989
+ ioc.loggerService.log("/api/v1/global/backtest_list ok", { request, result: omit(result, "data") });
2990
+ return await micro.send(res, 200, result);
2991
+ }
2992
+ catch (error) {
2993
+ ioc.loggerService.log("/api/v1/global/backtest_list error", { error: errorData(error) });
2994
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
2995
+ }
2996
+ });
2997
+ router$2.post("/api/v1/global/live_list", async (req, res) => {
2998
+ try {
2999
+ const request = await micro.json(req);
3000
+ const { requestId, serviceName } = request;
3001
+ const data = await ioc.liveMetaService.list();
3002
+ const result = { data, status: "ok", error: "", requestId, serviceName };
3003
+ ioc.loggerService.log("/api/v1/global/live_list ok", { request, result: omit(result, "data") });
3004
+ return await micro.send(res, 200, result);
3005
+ }
3006
+ catch (error) {
3007
+ ioc.loggerService.log("/api/v1/global/live_list error", { error: errorData(error) });
3008
+ return await micro.send(res, 200, { status: "error", error: getErrorMessage(error) });
3009
+ }
3010
+ });
2010
3011
 
2011
3012
  const require = createRequire(import.meta.url);
2012
3013
  function getPublicPath() {
@@ -2019,20 +3020,26 @@ const router = Router({
2019
3020
  params: true,
2020
3021
  });
2021
3022
  router.all("/api/v1/health/*", (req, res) => {
2022
- return router$7(req, res, finalhandler(req, res));
3023
+ return router$9(req, res, finalhandler(req, res));
2023
3024
  });
2024
3025
  router.all("/api/v1/mock/*", (req, res) => {
2025
- return router$6(req, res, finalhandler(req, res));
3026
+ return router$8(req, res, finalhandler(req, res));
2026
3027
  });
2027
3028
  router.all("/api/v1/view/*", (req, res) => {
2028
- return router$5(req, res, finalhandler(req, res));
3029
+ return router$7(req, res, finalhandler(req, res));
2029
3030
  });
2030
- router.all("/icon/*", (req, res) => {
3031
+ router.all("/api/v1/markdown_mock/*", (req, res) => {
2031
3032
  return router$4(req, res, finalhandler(req, res));
2032
3033
  });
2033
- router.all("/api/v1/dict/*", (req, res) => {
3034
+ router.all("/api/v1/markdown_view/*", (req, res) => {
2034
3035
  return router$3(req, res, finalhandler(req, res));
2035
3036
  });
3037
+ router.all("/icon/*", (req, res) => {
3038
+ return router$6(req, res, finalhandler(req, res));
3039
+ });
3040
+ router.all("/api/v1/dict/*", (req, res) => {
3041
+ return router$5(req, res, finalhandler(req, res));
3042
+ });
2036
3043
  router.all("/api/v1/global/*", (req, res) => {
2037
3044
  return router$2(req, res, finalhandler(req, res));
2038
3045
  });