....
This commit is contained in:
parent
d804c7061b
commit
dc18d5baaf
@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user