From 075a085b92c9a1405ebe92e764c8db9e9c98cfc4 Mon Sep 17 00:00:00 2001 From: lunaticbum Date: Mon, 8 Jun 2026 14:45:15 +0900 Subject: [PATCH] ... --- src/main/kotlin/service/AutoTradingManager.kt | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/service/AutoTradingManager.kt b/src/main/kotlin/service/AutoTradingManager.kt index b966559..d70c939 100644 --- a/src/main/kotlin/service/AutoTradingManager.kt +++ b/src/main/kotlin/service/AutoTradingManager.kt @@ -48,6 +48,7 @@ import java.time.ZoneId import java.util.concurrent.atomic.AtomicLong import kotlin.collections.List import kotlin.collections.filter +import kotlin.math.abs // service/AutoTradingManager.kt typealias TradingDecisionCallback = (TradingDecision?, Boolean)->Unit @@ -243,7 +244,7 @@ object AutoTradingManager { if (hasCode && oldTarget != null) { var avgPrive = oldTarget.avgPrice.toDouble() var qty = oldTarget.quantity.toDouble() - basePrice = ((avgPrive * qty) + (decision.currentPrice * orderQty.toInt())).div(qty!!.toInt() + (orderQty.toInt())) + basePrice = avgPrive//((avgPrive * qty) + (decision.currentPrice * orderQty.toInt())).div(qty!!.toInt() + (orderQty.toInt())) println("물타기 ${avgPrive}, ${qty} ${basePrice}") } } catch (e:Exception) {e.printStackTrace()} @@ -614,7 +615,7 @@ object AutoTradingManager { println("${holding.name} ${holding.profitRate.toDouble()} ${holding.valuationProfitAmount.toDouble()} ${KisSession.config.getValues(ConfigIndex.LOSS_MAX_MONEY)} , ${KisSession.config.getValues(ConfigIndex.LOSS_MINRATE)} , ${KisSession.config.getValues(ConfigIndex.STOP_LOSS)}") val profit = holding.profitRate.toDouble() var targetPrice = holding.currentPrice.toDouble() - targetPrice = MarketUtil.roundToTickSize(targetPrice + MarketUtil.getTickSize(targetPrice) * 3.0) + targetPrice = MarketUtil.roundToTickSize(targetPrice + MarketUtil.getTickSize(targetPrice) * KisSession.tradeConfig.autoSellOrderAppend) tradeService.postOrder( @@ -953,10 +954,17 @@ object AutoTradingManager { val rate = it.prdy_ctrt.toDouble() val corpInfo = DartCodeManager.getCorpCode(it.code) val isOk = (rate > 0 && rate < KisSession.tradeConfig.plusFilter) || (rate < 0 && rate > (KisSession.tradeConfig.minusFilter * -1)) + if (corpInfo?.cName.isNullOrEmpty()) { false - } else { + } else if (it.code !in myHoldings && + it.code !in pendingStocks && + it.code !in executionCache.values.map { it.code } && + it.code !in failList && + it.code !in isSafetyBeltStockCodes){ isOk + } else { + false } } .filter { !it.name.contains("호스팩", true) } @@ -971,8 +979,8 @@ object AutoTradingManager { currentBalance?.getHoldings()?.map { if( it.quantity.toInt() > KisSession.tradeConfig.lowerAverageTargetCount && - it.profitRate.toDouble() < (KisSession.tradeConfig.lowerAverageMaxRate * -1) && - it.profitRate.toDouble() > (KisSession.tradeConfig.lowerAverageMinRate * -1) ) + it.profitRate.toDouble() < (abs(KisSession.tradeConfig.lowerAverageMaxRate) * -1) && + it.profitRate.toDouble() > (abs(KisSession.tradeConfig.lowerAverageMinRate) * -1)) { candidates.add(RankingStock(mksc_shrn_iscd = it.code, hts_kor_isnm = it.name)) println("물타기 대상 추가 ${it.name}[${it.code}]")