This commit is contained in:
lunaticbum 2026-03-23 10:54:54 +09:00
parent d804c7061b
commit dc18d5baaf
2 changed files with 35 additions and 22 deletions

View File

@ -199,7 +199,7 @@ object RagService {
val financialScore = FinancialAnalyzer.calculateScore(financialStmt) val financialScore = FinancialAnalyzer.calculateScore(financialStmt)
val scores = technicalAnalyzer.calculateScores(financialScore) val scores = technicalAnalyzer.calculateScores(financialScore)
if (scores.avg() > 50) {
result(tradingDecision, false) result(tradingDecision, false)
tradingDecision.techSummary = technicalAnalyzer.generateComprehensiveReport() tradingDecision.techSummary = technicalAnalyzer.generateComprehensiveReport()
@ -215,7 +215,10 @@ object RagService {
) )
tradingDecision.newsContext = searchResult.matches().joinToString("\n") { it.embedded().text() } tradingDecision.newsContext = searchResult.matches().joinToString("\n") { it.embedded().text() }
result(tradingDecision, false) result(tradingDecision, false)
result(decideTrading(stockCode, scores,financialStmt,tradingDecision), true) result(decideTrading(stockCode, scores, financialStmt, tradingDecision), true)
} else {
result(tradingDecision, false)
}
} else { } else {
result(tradingDecision, false) result(tradingDecision, false)
} }

View File

@ -96,7 +96,10 @@ object AutoTradingManager {
TradingLogStore.addLog(completeTradingDecision) TradingLogStore.addLog(completeTradingDecision)
println("🚀 [자동매수 실행] ${completeTradingDecision.stockName}") println("🚀 [자동매수 실행] ${completeTradingDecision.stockName}")
if (completeTradingDecision != null && !completeTradingDecision.stockCode.isNullOrEmpty()) { if (completeTradingDecision.confidence < 10) {
addToReanalysis(RankingStock(mksc_shrn_iscd = completeTradingDecision.stockCode,hts_kor_isnm = completeTradingDecision.stockName))
TradingLogStore.addLog(completeTradingDecision,"HOLD","분석 신뢰도 오류 인지로 재분석 대기열에 추가")
}else if (completeTradingDecision != null && !completeTradingDecision.stockCode.isNullOrEmpty()) {
var basePrice = completeTradingDecision.currentPrice var basePrice = completeTradingDecision.currentPrice
var stockCode = completeTradingDecision.stockCode var stockCode = completeTradingDecision.stockCode
println("basePrice $basePrice") println("basePrice $basePrice")
@ -156,8 +159,11 @@ object AutoTradingManager {
TradingLogStore.addLog(completeTradingDecision,"HOLD","✋ [관망] 토탈 스코어(${String.format("%.1f[${minScore}]", totalScore)}) 또는 신뢰도 (${String.format("%.1f[${MIN_CONFIDENCE}]", completeTradingDecision.confidence)}) 미달") TradingLogStore.addLog(completeTradingDecision,"HOLD","✋ [관망] 토탈 스코어(${String.format("%.1f[${minScore}]", totalScore)}) 또는 신뢰도 (${String.format("%.1f[${MIN_CONFIDENCE}]", completeTradingDecision.confidence)}) 미달")
} }
} }
if (completeTradingDecision?.decision?.contains("매수") == true) {
completeTradingDecision.decision = "BUY"
}
when (completeTradingDecision?.decision) { when (completeTradingDecision?.decision) {
"BUY" -> { "BUY","매수" -> {
append = buyWeight append = buyWeight
TradingLogStore.addLog(completeTradingDecision,"BUY","[$stockCode] 매수 추천 resultCheck: ${completeTradingDecision?.reason}") TradingLogStore.addLog(completeTradingDecision,"BUY","[$stockCode] 매수 추천 resultCheck: ${completeTradingDecision?.reason}")
resultCheck(completeTradingDecision) resultCheck(completeTradingDecision)
@ -668,11 +674,11 @@ object AutoTradingManager {
this.monthly = monthly.await() this.monthly = monthly.await()
} }
} }
if (analyzer.isValid()) {
RagService.processStock(currentPrice, analyzer, stock.name, stock.code) { decision, isSuccess ->
RagService.processStock(currentPrice,analyzer, stock.name, stock.code) { decision, isSuccess ->
callback(decision?.apply { this.currentPrice = currentPrice }, isSuccess) callback(decision?.apply { this.currentPrice = currentPrice }, isSuccess)
} }
}
println("✅ [분석 종료] ${stock.name} (${LocalTime.now()})") println("✅ [분석 종료] ${stock.name} (${LocalTime.now()})")
} }
} catch (e: Exception) { } catch (e: Exception) {
@ -862,6 +868,8 @@ data class InvestmentScores(
longTerm $longTerm longTerm $longTerm
""".trimIndent() """.trimIndent()
} }
fun avg() = listOf(ultraShort, shortTerm, midTerm, longTerm).average()
} }
@Serializable @Serializable
@ -871,6 +879,8 @@ class TechnicalAnalyzer {
var daily: List<CandleData> = emptyList() var daily: List<CandleData> = emptyList()
var min30: List<CandleData> = emptyList() var min30: List<CandleData> = emptyList()
fun isValid() = listOf(min30,monthly, weekly,daily).filter { it.size > 0 }.size == 4
fun isOverheatedStock(): Boolean { fun isOverheatedStock(): Boolean {
if (min30.size < 20 || daily.size < 20) return false if (min30.size < 20 || daily.size < 20) return false