수익률 평기 기준 통일

This commit is contained in:
Macbook
2026-06-20 09:47:35 +09:00
parent 6a5ac71344
commit fd63c101e5
6 changed files with 151 additions and 80 deletions
@@ -46,6 +46,7 @@ public class BacktestingService {
private final GcBacktestResultRepository resultRepository;
private final ObjectMapper objectMapper;
private final IndicatorSettingsService indicatorSettingsService;
private final StrategyDslTimeframeNormalizer timeframeNormalizer;
private static final BacktestSettingsDto DEFAULT_SETTINGS = new BacktestSettingsDto();
@@ -111,12 +112,20 @@ public class BacktestingService {
// ── 멀티 타임프레임 지원: DSL에서 상위봉 타입 추출 후 집계 시리즈 빌드 ──────
String primaryTf = normalizeTf(req.getTimeframe());
// scan-signals·전략평가 차트와 동일 — 차트 시간봉에 맞게 DSL 리매핑
if (buyDsl != null && !buyDsl.isNull()) {
buyDsl = timeframeNormalizer.remapForChartTimeframe(buyDsl, primaryTf);
}
if (sellDsl != null && !sellDsl.isNull()) {
sellDsl = timeframeNormalizer.remapForChartTimeframe(sellDsl, primaryTf);
}
Map<String, BarSeries> seriesOverrides = buildSeriesOverrides(
series, primaryTf, buyDsl, sellDsl);
String market = req.getSymbol() != null && !req.getSymbol().isBlank() ? req.getSymbol() : null;
StrategyDslToTa4jAdapter.RuleBuildContext ruleCtx =
new StrategyDslToTa4jAdapter.RuleBuildContext(
series, params, visual, null, null, false, seriesOverrides);
series, params, visual, market, null, false, seriesOverrides);
Rule entryRule = adapter.toRule(buyDsl, ruleCtx);
Rule baseExitRule = (sellDsl != null && !sellDsl.isNull())
? adapter.toRule(sellDsl, ruleCtx)