59 lines
1.7 KiB
Kotlin
59 lines
1.7 KiB
Kotlin
package model
|
|
|
|
import java.time.LocalDateTime
|
|
|
|
const val feesAndTaxRate = 0.33
|
|
const val minimumNetProfit = 0.4
|
|
const val buyWeight = 2.0
|
|
|
|
data class AppConfig(
|
|
// [DB 저장 데이터]
|
|
// 실전 3종
|
|
val realAppKey: String = "",
|
|
val realSecretKey: String = "",
|
|
val realAccountNo: String = "",
|
|
|
|
// 모의 3종
|
|
val vtsAppKey: String = "",
|
|
val vtsSecretKey: String = "",
|
|
val vtsAccountNo: String = "",
|
|
|
|
// [세션 데이터 - 메모리에서만 관리]
|
|
var marketToken: String = "",
|
|
var marketTokenExpiredAt: LocalDateTime? = null, // 만료 시간 추가
|
|
|
|
var tradeToken: String = "",
|
|
var tradeTokenExpiredAt: LocalDateTime? = null,
|
|
|
|
val htsId: String = "",
|
|
|
|
var websocketToken: String = "",
|
|
val isSimulation: Boolean = true,
|
|
val modelPath: String = "",
|
|
val embedModelPath: String = "") {
|
|
|
|
val accountNo : String
|
|
get() {
|
|
return if (isSimulation) vtsAccountNo else realAccountNo
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
// [신규] 전역에서 참조할 단일 세션 객체
|
|
object KisSession {
|
|
var config: AppConfig = AppConfig()
|
|
fun getWebSocketKey() = config.websocketToken
|
|
// 시장 데이터 토큰 유효성 검사 (만료 5분 전부터는 유효하지 않은 것으로 간주)
|
|
fun isMarketTokenValid(): Boolean {
|
|
return config.marketToken.isNotEmpty() &&
|
|
config.marketTokenExpiredAt?.isAfter(LocalDateTime.now().plusMinutes(5)) ?: false
|
|
}
|
|
|
|
// 매매용 토큰 유효성 검사
|
|
fun isTradeTokenValid(): Boolean {
|
|
return config.tradeToken.isNotEmpty() &&
|
|
config.tradeTokenExpiredAt?.isAfter(LocalDateTime.now().plusMinutes(5)) ?: false
|
|
}
|
|
} |