...
This commit is contained in:
parent
ce07537eef
commit
fd8283c507
@ -855,19 +855,8 @@ object AutoTradingManager {
|
|||||||
}
|
}
|
||||||
var loadedTops = mutableListOf<Pair<String, String>>()
|
var loadedTops = mutableListOf<Pair<String, String>>()
|
||||||
var defaultStockCount = 30
|
var defaultStockCount = 30
|
||||||
fun poll100Stocks(): List<Pair<String, String>> {
|
|
||||||
loadedTops.shuffle()
|
|
||||||
val count = minOf(loadedTops.size, defaultStockCount)
|
|
||||||
if (count == 0) return emptyList()
|
|
||||||
|
|
||||||
// 앞의 100개를 복사
|
|
||||||
val batch = loadedTops.subList(0, count).toList()
|
|
||||||
|
|
||||||
// 원본에서 삭제 (이 작업이 큐의 pop/remove 역할을 합니다)
|
|
||||||
loadedTops.subList(0, count).clear()
|
|
||||||
|
|
||||||
return batch
|
|
||||||
}
|
|
||||||
var currentBalance : UnifiedBalance? = null
|
var currentBalance : UnifiedBalance? = null
|
||||||
private var lastFetchTime: Long = 0L // 마지막 성공 시간 (Millisecond)
|
private var lastFetchTime: Long = 0L // 마지막 성공 시간 (Millisecond)
|
||||||
private val FETCH_INTERVAL = 2 * 60 * 1000 // 30분을 밀리초로 환산 (1800000 ms)
|
private val FETCH_INTERVAL = 2 * 60 * 1000 // 30분을 밀리초로 환산 (1800000 ms)
|
||||||
@ -963,11 +952,14 @@ object AutoTradingManager {
|
|||||||
if (remainingCandidates.isEmpty()) {
|
if (remainingCandidates.isEmpty()) {
|
||||||
if (loadedTops.size < defaultStockCount) {
|
if (loadedTops.size < defaultStockCount) {
|
||||||
loadedTops.addAll(StockUniverseLoader.loadUniverse())
|
loadedTops.addAll(StockUniverseLoader.loadUniverse())
|
||||||
loadedTops.shuffle()
|
|
||||||
println("✅ 총 ${loadedTops.size}개의 종목이 로드되있음.")
|
println("✅ 총 ${loadedTops.size}개의 종목이 로드되있음.")
|
||||||
}
|
}
|
||||||
poll100Stocks().forEach { (code, name) ->
|
loadedTops.shuffle()
|
||||||
addToReanalysis(RankingStock(mksc_shrn_iscd = code, hts_kor_isnm = name))
|
val count = minOf(loadedTops.size, defaultStockCount)
|
||||||
|
for (i in 0 ..< count) {
|
||||||
|
loadedTops.removeFirst().let {
|
||||||
|
addToReanalysis(RankingStock(mksc_shrn_iscd = it.first, hts_kor_isnm = it.second))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val candidates: MutableList<RankingStock> = fetchCandidates(KisTradeService).apply {
|
val candidates: MutableList<RankingStock> = fetchCandidates(KisTradeService).apply {
|
||||||
@ -989,7 +981,6 @@ object AutoTradingManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.filter { !it.name.contains("호스팩", true) }
|
.filter { !it.name.contains("호스팩", true) }
|
||||||
.sortedBy { (it.prdy_ctrt.toDoubleOrNull() ?: 0.0) }
|
|
||||||
.toMutableList()
|
.toMutableList()
|
||||||
|
|
||||||
if (reanalysisList.isNotEmpty()) {
|
if (reanalysisList.isNotEmpty()) {
|
||||||
@ -1022,8 +1013,8 @@ object AutoTradingManager {
|
|||||||
it.code !in executionCache.values.map { it.code } &&
|
it.code !in executionCache.values.map { it.code } &&
|
||||||
it.code !in failList &&
|
it.code !in failList &&
|
||||||
it.code !in isSafetyBeltStockCodes
|
it.code !in isSafetyBeltStockCodes
|
||||||
}
|
}.distinctBy { it.code })
|
||||||
.distinctBy { it.code })
|
remainingCandidates.shuffle()
|
||||||
} else {
|
} else {
|
||||||
println("미확인 데이터 ${remainingCandidates.size}")
|
println("미확인 데이터 ${remainingCandidates.size}")
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user