This commit is contained in:
lunaticbum 2026-06-01 13:37:07 +09:00
parent 3fcce5e5c6
commit 510e19b2e8

View File

@ -109,9 +109,9 @@ object AutoTradingManager {
if (KisSession.isAvailBuyTime(now) && isSuccess && completeTradingDecision != null) { if (KisSession.isAvailBuyTime(now) && isSuccess && completeTradingDecision != null) {
val decision = completeTradingDecision val decision = completeTradingDecision
println("${decision.stockName} ${decision.decision} ${buysCodes.contains(decision.stockCode) == false}") println("${decision.stockName} ${decision.decision}")
// 1. 이미 AI가 결정한 decision과 confidence를 신뢰함 // 1. 이미 AI가 결정한 decision과 confidence를 신뢰함
if (decision.decision == "BUY" && buysCodes.contains(decision.stockCode) == false) { if (decision.decision == "BUY") {
// AI가 이미 검증한 등급을 사용 (재계산 불필요) // AI가 이미 검증한 등급을 사용 (재계산 불필요)
val grade = decision.investmentGrade ?: InvestmentGrade.LEVEL_1_SPECULATIVE val grade = decision.investmentGrade ?: InvestmentGrade.LEVEL_1_SPECULATIVE
@ -121,9 +121,8 @@ object AutoTradingManager {
val maxBudget = KisSession.config.getValues(ConfigIndex.MAX_BUDGET_INDEX) * gradeRate val maxBudget = KisSession.config.getValues(ConfigIndex.MAX_BUDGET_INDEX) * gradeRate
TradingLogStore.addLog(decision,"BUY",decision.summary()) TradingLogStore.addLog(decision,"BUY",decision.summary())
var hasCodes = currentBalance?.getHoldings()?.any { it.code.equals(decision.stockCode) && it.quantity.toInt() > 2 && !it.isTodayEntry} var hasCodes = currentBalance?.getHoldings()?.any { it.code.equals(decision.stockCode) && it.quantity.toInt() > 2}
if (hasCodes == true) { if (hasCodes == true) {
buysCodes.add(decision.stockCode)
TradingLogStore.addNotice(decision.stockName,decision.stockCode,"물타기 시도 1주 매수") TradingLogStore.addNotice(decision.stockName,decision.stockCode,"물타기 시도 1주 매수")
} }
val calculatedQty = if(hasCodes == true) KisSession.tradeConfig.lowerAverageStockCount else (maxBudget / decision.currentPrice).toInt().coerceAtLeast(1) val calculatedQty = if(hasCodes == true) KisSession.tradeConfig.lowerAverageStockCount else (maxBudget / decision.currentPrice).toInt().coerceAtLeast(1)
@ -209,7 +208,7 @@ object AutoTradingManager {
rawGrade rawGrade
} }
} }
var buysCodes = arrayListOf<String>()
fun excuteTrade(decision: TradingDecision, orderQty: String, profitRate1: Double?, investmentGrade: InvestmentGrade = InvestmentGrade.LEVEL_2_HIGH_RISK) { fun excuteTrade(decision: TradingDecision, orderQty: String, profitRate1: Double?, investmentGrade: InvestmentGrade = InvestmentGrade.LEVEL_2_HIGH_RISK) {
scope.launch { scope.launch {
var basePrice = decision.currentPrice var basePrice = decision.currentPrice
@ -1043,7 +1042,6 @@ object AutoTradingManager {
} }
if (isExecuted) { executionCountMap[timeKey] = currentCount + 1 } if (isExecuted) { executionCountMap[timeKey] = currentCount + 1 }
if (now.hour >= 20) { if (now.hour >= 20) {
buysCodes.clear()
executionCountMap.clear() executionCountMap.clear()
noticeFilter.clear() noticeFilter.clear()
} }