매수, 매도 색상 수정
This commit is contained in:
+97
@@ -0,0 +1,97 @@
|
||||
package com.goldenchart.service;
|
||||
|
||||
import com.goldenchart.entity.GcLiveStrategySettings;
|
||||
import com.goldenchart.repository.GcLiveStrategySettingsRepository;
|
||||
import com.goldenchart.storage.Ta4jStorage;
|
||||
import com.goldenchart.trading.pipeline.OrderExecutionQueue;
|
||||
import com.goldenchart.websocket.TradingWebSocketBroker;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import org.ta4j.core.Bar;
|
||||
import org.ta4j.core.BarSeries;
|
||||
import org.ta4j.core.BaseBarSeriesBuilder;
|
||||
import org.ta4j.core.bars.TimeBarBuilderFactory;
|
||||
import org.ta4j.core.num.DoubleNumFactory;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class BarCloseStrategyEvaluationServiceTest {
|
||||
|
||||
@Mock private LiveStrategyEvaluator liveStrategyEvaluator;
|
||||
@Mock private TradeSignalService tradeSignalService;
|
||||
@Mock private OrderExecutionQueue orderExecutionQueue;
|
||||
@Mock private GcLiveStrategySettingsRepository liveSettingsRepo;
|
||||
@Mock private StrategyConditionTimeframeService conditionTimeframes;
|
||||
@Mock private TradingWebSocketBroker broker;
|
||||
@Mock private Ta4jStorage ta4jStorage;
|
||||
|
||||
private BarCloseStrategyEvaluationService service;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
service = new BarCloseStrategyEvaluationService(
|
||||
liveStrategyEvaluator, tradeSignalService, orderExecutionQueue,
|
||||
liveSettingsRepo, conditionTimeframes, broker, ta4jStorage);
|
||||
}
|
||||
|
||||
@Test
|
||||
void onMaturedBarClose_evaluatesOnlyDslTimeframes_andDedupesSameBarEnd() {
|
||||
GcLiveStrategySettings setting = new GcLiveStrategySettings();
|
||||
setting.setStrategyId(10L);
|
||||
setting.setIsLiveCheck(true);
|
||||
setting.setExecutionType("CANDLE_CLOSE");
|
||||
setting.setMarket("KRW-BTC");
|
||||
when(liveSettingsRepo.findActiveByMarket("KRW-BTC")).thenReturn(List.of(setting));
|
||||
when(conditionTimeframes.usesTimeframe(10L, "5m")).thenReturn(true);
|
||||
when(conditionTimeframes.usesTimeframe(10L, "15m")).thenReturn(false);
|
||||
when(liveStrategyEvaluator.evaluateSettingOnCandleClose(eq(setting), eq("KRW-BTC"), eq("5m"), anyInt()))
|
||||
.thenReturn("NONE");
|
||||
|
||||
Bar bar = sampleBar(Duration.ofMinutes(5), Instant.parse("2026-05-29T10:05:00Z"));
|
||||
service.onMaturedBarClose("KRW-BTC", "5m", 0, bar);
|
||||
service.onMaturedBarClose("KRW-BTC", "5m", 0, bar);
|
||||
|
||||
verify(liveStrategyEvaluator, times(1))
|
||||
.evaluateSettingOnCandleClose(setting, "KRW-BTC", "5m", 0);
|
||||
verify(broker, never()).publish(anyString(), anyString(), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldEvaluateOnClose_falseWhenNoMatchingTimeframe() {
|
||||
when(liveSettingsRepo.findActiveByMarket("KRW-ETH")).thenReturn(List.of());
|
||||
assertFalse(service.shouldEvaluateOnClose("KRW-ETH", "3m"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldEvaluateOnClose_trueWhenStrategyUsesTimeframe() {
|
||||
GcLiveStrategySettings s = new GcLiveStrategySettings();
|
||||
s.setStrategyId(1L);
|
||||
s.setIsLiveCheck(true);
|
||||
when(liveSettingsRepo.findActiveByMarket("KRW-BTC")).thenReturn(List.of(s));
|
||||
when(conditionTimeframes.usesTimeframe(1L, "10m")).thenReturn(true);
|
||||
assertTrue(service.shouldEvaluateOnClose("KRW-BTC", "10m"));
|
||||
}
|
||||
|
||||
private static Bar sampleBar(Duration period, Instant end) {
|
||||
return new BaseBarSeriesBuilder()
|
||||
.withBarBuilderFactory(new TimeBarBuilderFactory())
|
||||
.withNumFactory(DoubleNumFactory.getInstance())
|
||||
.build()
|
||||
.barBuilder()
|
||||
.timePeriod(period)
|
||||
.endTime(end)
|
||||
.openPrice(1).highPrice(2).lowPrice(0.5).closePrice(1.5).volume(10)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user