From fd8283c507d640beb40147ba4be445071e00774c Mon Sep 17 00:00:00 2001 From: lunaticbum Date: Fri, 19 Jun 2026 14:40:46 +0900 Subject: [PATCH] ... --- src/main/kotlin/service/AutoTradingManager.kt | 25 ++++++------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/main/kotlin/service/AutoTradingManager.kt b/src/main/kotlin/service/AutoTradingManager.kt index dfd0233..952d5f3 100644 --- a/src/main/kotlin/service/AutoTradingManager.kt +++ b/src/main/kotlin/service/AutoTradingManager.kt @@ -855,19 +855,8 @@ object AutoTradingManager { } var loadedTops = mutableListOf>() var defaultStockCount = 30 - fun poll100Stocks(): List> { - loadedTops.shuffle() - val count = minOf(loadedTops.size, defaultStockCount) - if (count == 0) return emptyList() - // 앞의 100개를 복사 - val batch = loadedTops.subList(0, count).toList() - // 원본에서 삭제 (이 작업이 큐의 pop/remove 역할을 합니다) - loadedTops.subList(0, count).clear() - - return batch - } var currentBalance : UnifiedBalance? = null private var lastFetchTime: Long = 0L // 마지막 성공 시간 (Millisecond) private val FETCH_INTERVAL = 2 * 60 * 1000 // 30분을 밀리초로 환산 (1800000 ms) @@ -963,11 +952,14 @@ object AutoTradingManager { if (remainingCandidates.isEmpty()) { if (loadedTops.size < defaultStockCount) { loadedTops.addAll(StockUniverseLoader.loadUniverse()) - loadedTops.shuffle() println("✅ 총 ${loadedTops.size}개의 종목이 로드되있음.") } - poll100Stocks().forEach { (code, name) -> - addToReanalysis(RankingStock(mksc_shrn_iscd = code, hts_kor_isnm = name)) + loadedTops.shuffle() + val count = minOf(loadedTops.size, defaultStockCount) + for (i in 0 ..< count) { + loadedTops.removeFirst().let { + addToReanalysis(RankingStock(mksc_shrn_iscd = it.first, hts_kor_isnm = it.second)) + } } val candidates: MutableList = fetchCandidates(KisTradeService).apply { @@ -989,7 +981,6 @@ object AutoTradingManager { } } .filter { !it.name.contains("호스팩", true) } - .sortedBy { (it.prdy_ctrt.toDoubleOrNull() ?: 0.0) } .toMutableList() if (reanalysisList.isNotEmpty()) { @@ -1022,8 +1013,8 @@ object AutoTradingManager { it.code !in executionCache.values.map { it.code } && it.code !in failList && it.code !in isSafetyBeltStockCodes - } - .distinctBy { it.code }) + }.distinctBy { it.code }) + remainingCandidates.shuffle() } else { println("미확인 데이터 ${remainingCandidates.size}") }