전략평가 MA 참조에러 수정

This commit is contained in:
Macbook
2026-06-13 01:25:56 +09:00
parent 24128e6a0a
commit 207374a08e
10 changed files with 451 additions and 77 deletions
@@ -0,0 +1,59 @@
package com.goldenchart.service;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* MA1~MA11 슬롯 ↔ SMA period1~11 매핑 및 레거시 MA20·MA60(기간 인코딩) 호환.
*/
class MaDslFieldAdapterTest {
private StrategyDslToTa4jAdapter adapter;
@BeforeEach
void setUp() {
adapter = new StrategyDslToTa4jAdapter();
}
@Test
void resolveMovingAveragePeriod_slotUsesSmaParams() {
Map<String, Object> sma = Map.of("period3", 20, "period5", 60);
assertEquals(20, adapter.resolveMovingAveragePeriod("MA3", "MA", sma));
assertEquals(60, adapter.resolveMovingAveragePeriod("MA5", "MA", sma));
}
@Test
void resolveMovingAveragePeriod_legacyPeriodEncoding() {
Map<String, Object> sma = Map.of("period3", 20, "period5", 60);
assertEquals(20, adapter.resolveMovingAveragePeriod("MA20", "MA", sma));
assertEquals(60, adapter.resolveMovingAveragePeriod("MA60", "MA", sma));
}
@Test
void resolveMovingAveragePeriod_oldSlotBugWouldUseLiteralDays() {
Map<String, Object> sma = Map.of("period3", 20, "period5", 60);
// MA3 must NOT resolve to 3-day SMA when period3=20
assertEquals(20, adapter.resolveMovingAveragePeriod("MA3", "MA", sma));
assertEquals(60, adapter.resolveMovingAveragePeriod("MA5", "MA", sma));
}
@Test
void formatMovingAverageFieldLabel_slotLabels() {
Map<String, Map<String, Object>> params = Map.of(
"SMA", Map.of("period3", 20, "period5", 60));
assertEquals("MA3(20일)", adapter.formatMovingAverageFieldLabel("MA3", params));
assertEquals("MA5(60일)", adapter.formatMovingAverageFieldLabel("MA5", params));
}
@Test
void formatMovingAverageFieldLabel_legacyLabels() {
Map<String, Map<String, Object>> params = Map.of(
"SMA", Map.of("period3", 20, "period5", 60));
assertEquals("MA(20일)", adapter.formatMovingAverageFieldLabel("MA20", params));
assertEquals("MA(60일)", adapter.formatMovingAverageFieldLabel("MA60", params));
}
}