package model import analyzer.ScalpingSignalModel import analyzer.TechnicalAnalyzer import kotlinx.serialization.Serializable import service.InvestmentGrade @Serializable data class RealTimeTrade( val code: String, val time: String, // 체결 시간 (HH:mm:ss) val price: String, // 체결가 val change: String, // 전일 대비 (대비 기호 포함) val volume: String, // 체결량 val type: TradeType // 매수체결(빨강) / 매도체결(파랑) ) enum class TradeType { BUY, SELL, NEUTRAL } @Serializable class TradingDecision { var corpName : String = "" var stockName : String = "" var ultraShortScore: Double = 0.0 // 초단기 (분봉/에너지) var shortTermScore: Double = 0.0 // 단기 (일봉/뉴스) var midTermScore: Double = 0.0 // 중기 (주봉/재무) var longTermScore: Double = 0.0 // [추가] 화면 전환용 종목명 var currentPrice: Double = 0.0 var stockCode: String = "" var decision: String? = null var reason: String? = null var confidence: Double = 0.0 var newsScore : Double = 0.0 var systemScore : Double = 0.0 var financialScore : Double = 0.0 var technicalScore : Double = 0.0 var investmentGrade : InvestmentGrade? = null var techSummary : String? = null var newsContext : String? = null var financialData : String? = null var analyzer : TechnicalAnalyzer? = null var signalModel : ScalpingSignalModel? = null var maxRealisticProfitRate :Double = 0.0 var reboundDaysDaily: Double = 0.0 // 일봉 기준 평균 반등 소요일 var isWatering: Boolean = false var reboundWeeksWeekly: Double = 0.0 // 주봉 기준 평균 반등 소요주 var isReboundApproaching: Boolean = false // 반등 주기에 근접했는지 여부 var reboundGuideMessage: String = "반등 주기 데이터 없음" // UI나 로그에 노출할 가이드 메시지 fun shortPossible() = listOf(ultraShortScore, shortTermScore).average() fun profitPossible() = listOf(ultraShortScore, shortTermScore, midTermScore, longTermScore).average() fun safePossible() = listOf( midTermScore, longTermScore).average() fun summary( targetProfitRate: Double) : String{ return """ $corpName[$stockName] 수익실현 가능성 : ${profitPossible()} investmentGrade:${investmentGrade!!.name} ultraShortScore :$ultraShortScore shortTermScore :$shortTermScore midTermScore :$midTermScore longTermScore :$longTermScore systemScore :$systemScore technicalScore: $technicalScore financialScore: $financialScore newsScore: $newsScore decision: $decision reason: $reason 예측가능 수익율 : ${maxRealisticProfitRate} 반등 주기 가이드: ${analyzer?.generateMTFReboundGuide(targetProfitRate)} """.trimIndent() } override fun toString(): String { return """ $corpName($stockName) 수익실현 가능성 : ${profitPossible()} ultraShortScore :$ultraShortScore shortTermScore :$shortTermScore midTermScore :$midTermScore longTermScore :$longTermScore decision: $decision investmentGrade:${investmentGrade!!.name} reason: $reason confidence: $confidence 기술 분석: $techSummary 뉴스 점수: $newsScore 반등 주기 가이드: $reboundGuideMessage """.trimIndent() } } //재무재표: $financialData //뉴스: $newsContext