전략조건 상세설명 기능 추가

This commit is contained in:
Macbook
2026-05-25 03:15:05 +09:00
parent 30dedc4abc
commit 67324ded9d
22 changed files with 1151 additions and 187 deletions
@@ -4,7 +4,7 @@ import com.goldenchart.dto.CandleBarDto;
import com.goldenchart.entity.GcLiveStrategySettings;
import com.goldenchart.repository.GcLiveStrategySettingsRepository;
import com.goldenchart.service.LiveStrategyEvaluator;
import com.goldenchart.service.LiveStrategyTimeframeService;
import com.goldenchart.service.StrategyConditionTimeframeService;
import com.goldenchart.service.TradeSignalService;
import com.goldenchart.trading.pipeline.OrderExecutionQueue;
import com.goldenchart.storage.Ta4jStorage;
@@ -15,7 +15,6 @@ import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
/**
* 3초 주기 라운드 로빈 스케줄러.
@@ -39,9 +38,9 @@ public class LiveStrategyScheduler {
private final LiveStrategyEvaluator evaluator;
private final Ta4jStorage ta4jStorage;
private final TradingWebSocketBroker broker;
private final BarBuilder barBuilder;
private final TradeSignalService tradeSignalService;
private final OrderExecutionQueue orderExecutionQueue;
private final StrategyConditionTimeframeService conditionTimeframes;
/**
* 3초마다 REALTIME_TICK 설정 종목을 순회하여 전략 판정 후 시그널 발행.
@@ -56,14 +55,19 @@ public class LiveStrategyScheduler {
if (!"REALTIME_TICK".equals(s.getExecutionType())) continue;
if (s.getStrategyId() == null) continue;
String market = s.getMarket();
String candleType = LiveStrategyTimeframeService.normalize(
s.getCandleType() != null ? s.getCandleType() : "1m");
String market = s.getMarket();
for (String candleType : conditionTimeframes.collectForStrategy(s.getStrategyId())) {
evaluateRealtimeTickForMarket(s, market, candleType);
}
}
}
if (!ta4jStorage.exists(market, candleType)) continue;
private void evaluateRealtimeTickForMarket(GcLiveStrategySettings s, String market,
String candleType) {
if (!ta4jStorage.exists(market, candleType)) return;
BarSeries series = ta4jStorage.getOrCreate(market, candleType);
if (series.isEmpty()) continue;
if (series.isEmpty()) return;
String signal = evaluator.evaluateRealtimeTick(market, candleType);
if ("BUY".equals(signal) || "SELL".equals(signal)) {
@@ -105,6 +109,5 @@ public class LiveStrategyScheduler {
log.warn("[LiveStrategyScheduler] 시그널 DB 저장 실패: {}", ex.getMessage());
}
}
}
}
}