From 558a39e2d31dfbd50c1eba58c49b427817d8de9b Mon Sep 17 00:00:00 2001 From: lunaticbum Date: Mon, 1 Jun 2026 17:55:10 +0900 Subject: [PATCH] ... --- src/main/kotlin/service/AutoTradingManager.kt | 15 ++++++------ src/main/kotlin/ui/TradingDecisionLog.kt | 24 ++++++++++++++++++- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/service/AutoTradingManager.kt b/src/main/kotlin/service/AutoTradingManager.kt index a1e0870..03d186c 100644 --- a/src/main/kotlin/service/AutoTradingManager.kt +++ b/src/main/kotlin/service/AutoTradingManager.kt @@ -818,10 +818,10 @@ object AutoTradingManager { } } var loadedTops = mutableListOf>() - + var defaultStockCount = 200 fun poll100Stocks(): List> { loadedTops.shuffle() - val count = minOf(loadedTops.size, 200) + val count = minOf(loadedTops.size, defaultStockCount) if (count == 0) return emptyList() // 앞의 100개를 복사 @@ -911,7 +911,7 @@ object AutoTradingManager { val pendingStocks = DatabaseFactory.findAllMonitoringTrades().map { it.code } if (remainingCandidates.isEmpty()) { - if (loadedTops.size < 200) { + if (loadedTops.size < defaultStockCount) { loadedTops.addAll(StockUniverseLoader.loadUniverse()) loadedTops.shuffle() println("✅ 총 ${loadedTops.size}개의 종목이 로드되있음.") @@ -941,16 +941,17 @@ object AutoTradingManager { reanalysisList.clear() if (KisSession.tradeConfig.lowerAveragePrice) { currentBalance?.getHoldings()?.map { - if(!it.isTodayEntry && + if( it.quantity.toInt() > KisSession.tradeConfig.lowerAverageTargetCount && it.profitRate.toDouble() < (KisSession.tradeConfig.lowerAverageMaxRate * -1) && - it.profitRate.toDouble() > (KisSession.tradeConfig.lowerAverageMinRate * -1) ) { - remainingCandidates.add(RankingStock(mksc_shrn_iscd = it.code, hts_kor_isnm = it.name)) + it.profitRate.toDouble() > (KisSession.tradeConfig.lowerAverageMinRate * -1) ) + { + candidates.add(RankingStock(mksc_shrn_iscd = it.code, hts_kor_isnm = it.name)) } } } remainingCandidates.addAll(candidates.filter { - if (KisSession.tradeConfig.lowerAveragePrice) { true } else {it.code !in myHoldings} && + (if (KisSession.tradeConfig.lowerAveragePrice) { true } else {it.code !in myHoldings}) && it.code !in pendingStocks && it.code !in executionCache.values.map { it.code } && it.code !in failList && diff --git a/src/main/kotlin/ui/TradingDecisionLog.kt b/src/main/kotlin/ui/TradingDecisionLog.kt index fa9f877..a5c51f4 100644 --- a/src/main/kotlin/ui/TradingDecisionLog.kt +++ b/src/main/kotlin/ui/TradingDecisionLog.kt @@ -53,6 +53,7 @@ import network.StockUniverseLoader import service.AutoTradingManager import java.io.File import java.net.URI +import kotlin.math.abs @OptIn(ExperimentalMaterialApi::class) @Composable @@ -509,7 +510,28 @@ fun TradingDecisionLog() { Spacer(Modifier.height(16.dp)) Text("⚙️ 기타 고급 설정", style = MaterialTheme.typography.h6, modifier = Modifier.padding(8.dp)) - + Row(horizontalArrangement = Arrangement.SpaceEvenly) { + SettingInputField( + modifier = Modifier.weight(1.0f, true), + label = "매수 분석 현 변동율 처저 기준", + initialValue = (tradeConfig.minusFilter * -1).toString(), + onSave = { + tradeConfig.minusFilter = abs(it.toDouble()) + KisSession.saveTradeConfig() + }, + helperText = "현제 변동율이 이것보다 커야 분석 함." + ) + SettingInputField( + modifier = Modifier.weight(1.0f, true), + label = "매수 분석 현 변동율 최고 기준", + initialValue = (tradeConfig.plusFilter).toString(), + onSave = { + tradeConfig.plusFilter = it.toDouble() + KisSession.saveTradeConfig() + }, + helperText = "현제 변동율이 이것보다 작아야 분석 함." + ) + } // Boolean 설정들 SettingSwitchField( label = "미체결 자동 취소 (매수)",