...
This commit is contained in:
@@ -49,7 +49,7 @@ object AutoTradingManager {
|
||||
|
||||
fun isRunning(): Boolean = discoveryJob?.isActive == true
|
||||
private var remainingCandidates = mutableListOf<RankingStock>()
|
||||
// private val processedCodes = mutableSetOf<String>() // 중복 처리 방지용 (선택 사항)
|
||||
// private val processedCodes = mutableSetOf<String>() // 중복 처리 방지용 (선택 사항)
|
||||
private val reanalysisList = mutableListOf<RankingStock>()
|
||||
private val retryCountMap = mutableMapOf<String, Int>()
|
||||
/**
|
||||
@@ -102,16 +102,14 @@ object AutoTradingManager {
|
||||
if (remainingCandidates.isEmpty()) {
|
||||
val candidates: MutableList<RankingStock> = fetchCandidates(tradeService).apply {
|
||||
println("후보군 총 개수 : $size")
|
||||
}
|
||||
.filter { (it.prdy_ctrt.toDoubleOrNull() ?: 0.0) in MIN_RISE_RATE..MAX_RISE_RATE }
|
||||
.filter { it.code !in myHoldings && it.code !in pendingStocks }
|
||||
.filter { !it.name.contains("호스팩", true) }
|
||||
}.filter { !it.name.contains("호스팩", true) }
|
||||
.sortedBy { (it.prdy_ctrt.toDoubleOrNull() ?: 0.0) }
|
||||
.toMutableList()
|
||||
|
||||
if (reanalysisList.isNotEmpty()) {
|
||||
candidates.addAll(reanalysisList)
|
||||
}
|
||||
remainingCandidates.addAll(candidates.distinctBy { it.code })
|
||||
remainingCandidates.addAll(candidates.filter { it.code !in myHoldings && it.code !in pendingStocks }.distinctBy { it.code })
|
||||
} else {
|
||||
println("미확인 데이터 ${remainingCandidates.size}")
|
||||
}
|
||||
@@ -148,7 +146,7 @@ object AutoTradingManager {
|
||||
delay(5000)
|
||||
}
|
||||
|
||||
waitForNextCycle(1)
|
||||
waitForNextCycle(0.5)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -200,7 +198,7 @@ object AutoTradingManager {
|
||||
}
|
||||
|
||||
|
||||
RagService.processStock(analyzer, stock.name, stock.code) { decision, isSuccess ->
|
||||
RagService.processStock(currentPrice,analyzer, stock.name, stock.code) { decision, isSuccess ->
|
||||
callback(decision?.apply { this.currentPrice = currentPrice }, isSuccess)
|
||||
}
|
||||
println("✅ [분석 종료] ${stock.name} (${LocalTime.now()})")
|
||||
@@ -217,6 +215,9 @@ object AutoTradingManager {
|
||||
// async { tradeService.fetchMarketRanking(RankingType.VOLUME1, true).getOrDefault(emptyList()) },
|
||||
// async { tradeService.fetchMarketRanking(RankingType.VOLUME0, true).getOrDefault(emptyList()) },
|
||||
async { tradeService.fetchMarketRanking(RankingType.VOLUME, true).getOrDefault(emptyList()) },
|
||||
async { tradeService.fetchMarketRanking(RankingType.VOLUME0, true).getOrDefault(emptyList()) },
|
||||
async { tradeService.fetchMarketRanking(RankingType.VOLUME1, true).getOrDefault(emptyList()) },
|
||||
async { tradeService.fetchMarketRanking(RankingType.VOLUME4, true).getOrDefault(emptyList()) },
|
||||
async { tradeService.fetchMarketRanking(RankingType.RISE, true).getOrDefault(emptyList()) },
|
||||
async { tradeService.fetchMarketRanking(RankingType.FALL, true).getOrDefault(emptyList()) },
|
||||
// async { tradeService.fetchMarketRanking(RankingType.RISE2, true).getOrDefault(emptyList()) },
|
||||
@@ -236,12 +237,13 @@ object AutoTradingManager {
|
||||
startAutoDiscoveryLoop(tradeService, callback)
|
||||
}
|
||||
|
||||
private suspend fun waitForNextCycle(minutes: Int) {
|
||||
private suspend fun waitForNextCycle(minutes: Double) {
|
||||
println("💤 대기 모드 진입...")
|
||||
val endWait = System.currentTimeMillis() + (minutes * 60 * 1000L)
|
||||
while (System.currentTimeMillis() < endWait && isRunning()) {
|
||||
lastTickTime.set(System.currentTimeMillis()) // 대기 중에도 Watchdog에 생존 신고
|
||||
delay(10000)
|
||||
println("💤 대기 모드 상태 확인...")
|
||||
delay(5000)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -273,9 +275,9 @@ object AutoTradingManager {
|
||||
println("🛑 [AutoTrading] 자동 발굴 중단됨")
|
||||
}
|
||||
|
||||
fun addStock(technicalAnalyzer : TechnicalAnalyzer,stockName: String, stockCode: String, result: TradingDecisionCallback) {
|
||||
fun addStock(currentPrice : Double , technicalAnalyzer : TechnicalAnalyzer,stockName: String, stockCode: String, result: TradingDecisionCallback) {
|
||||
scope.launch {
|
||||
RagService.processStock(technicalAnalyzer,stockName, stockCode, result)
|
||||
RagService.processStock(currentPrice,technicalAnalyzer,stockName, stockCode, result)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user