diff --git a/src/main/kotlin/service/AutoTradingManager.kt b/src/main/kotlin/service/AutoTradingManager.kt index 4504b02..155d6d6 100644 --- a/src/main/kotlin/service/AutoTradingManager.kt +++ b/src/main/kotlin/service/AutoTradingManager.kt @@ -398,6 +398,11 @@ object AutoTradingManager { // 1. 기존 Watchdog이 있다면 제거 후 새로 시작 watchdogJob?.cancel() watchdogJob = scope.launch { + val activeTrades = DatabaseFactory.findAllMonitoringTrades() + var now = LocalTime.now(ZoneId.of("Asia/Seoul")) + if (activeTrades.isNotEmpty() && KisSession.isAvailBuyTime(now) == false) { + executeClosingLiquidation(activeTrades) + } while (isActive) { delay(WATCHDOG_CHECK_INTERVAL) val now = System.currentTimeMillis() @@ -770,7 +775,7 @@ object AutoTradingManager { withTimeout(CYCLE_TIMEOUT) { println("⏱️ [Cycle Start] ${LocalTime.now()}") val activeTrades = DatabaseFactory.findAllMonitoringTrades() - if (now.isAfter(LocalTime.of(15, 30)) && activeTrades.isNotEmpty()) { + if (now.isAfter(KisSession.endBuyTime()) && activeTrades.isNotEmpty()) { executeClosingLiquidation(activeTrades) } else { executeMarketLoop() @@ -817,7 +822,7 @@ object AutoTradingManager { } } var loadedTops = mutableListOf>() - var defaultStockCount = 150 + var defaultStockCount = 100 fun poll100Stocks(): List> { loadedTops.shuffle() val count = minOf(loadedTops.size, defaultStockCount) @@ -1073,6 +1078,9 @@ object AutoTradingManager { print("-> 기업명을 못찾아서 제외 | ") return@withTimeout } + if(currentBalance?.getHoldings()?.any { it.code.equals(stock.code) && it.quantity.toInt() > 2} == true) { + println("물타기 대상 분석") + } callback(TradingDecision().apply { this.stockCode = stock.code this.confidence = -1.0 @@ -1183,7 +1191,7 @@ object AutoTradingManager { } catch (e: Exception) { println("⚠️ [마감 에러] ${trade.name}: ${e.message}") } - delay(200) + delay(5) } }