Implement "candle all resume" command

This commit is contained in:
2023-06-11 13:39:19 +09:00
parent a3788f15af
commit 3880033e4d
3 changed files with 42 additions and 10 deletions

View File

@@ -199,7 +199,7 @@ class KissConsole {
case .now: await onNow(args)
case .candle: await onCandle(args)
case .candleAll: onCancleAll()
case .candleAll: onCancleAll(args)
case .candleDay: onCandleDay(args)
case .candleWeek: onCandleWeek(args)
case .candleValidate: onCandleValidate(args)
@@ -601,7 +601,18 @@ extension KissConsole {
}
private func onCancleAll() {
private func onCancleAll(_ args: [String]) {
let semaphore = DispatchSemaphore(value: 0)
Task {
await KissContext.shared.update(candleResuming: false)
if args.count == 1, args[0] == "resume" {
await KissContext.shared.update(candleResuming: true)
}
semaphore.signal()
}
semaphore.wait()
let all = getAllProducts()
for item in all {
let semaphore = DispatchSemaphore(value: 0)
@@ -612,6 +623,16 @@ extension KissConsole {
return
}
if await KissContext.shared.isCandleResuming {
let curDate = Date()
let url = KissConsole.candleFileUrl(productNo: item.shortCode, period: .minute, day: curDate.yyyyMMdd)
let r = validateCsv(filePriod: .minute, url: url)
switch r {
case .ok, .invalidFileName: return
default: break
}
}
let success = await getCandle(productNo: item.shortCode)
print("DONE \(success) \(item.shortCode)")
semaphore.signal()
@@ -721,13 +742,7 @@ extension KissConsole {
var lastTime = Date.appTime
for (index, url) in urls.enumerated() {
let r: CandleValidation
switch filePriod {
case .minute: r = KissConsole.validateCandleMinute(url)
case .day: r = KissConsole.validateCandleDay(url)
case .weak: r = KissConsole.validateCandleWeek(url)
}
let r = validateCsv(filePriod: filePriod, url: url)
switch r {
case .ok, .invalidFileName:
break
@@ -746,6 +761,15 @@ extension KissConsole {
}
func validateCsv(filePriod: CandleFilePeriod, url: URL) -> CandleValidation {
switch filePriod {
case .minute: return KissConsole.validateCandleMinute(url)
case .day: return KissConsole.validateCandleDay(url)
case .weak: return KissConsole.validateCandleWeek(url)
}
}
private func onCandleValidate(_ args: [String]) {
let period: CandleFilePeriod?
if args.count == 1 {

View File

@@ -13,6 +13,7 @@ actor KissContext {
private(set) var targetDate: Date = Date(timeIntervalSince1970: 0)
private(set) var isHoliday: Bool = false
private(set) var isCandleResuming: Bool = false
private init() { }
@@ -20,4 +21,8 @@ actor KissContext {
self.isHoliday = isHolyday
self.targetDate = targetDate
}
func update(candleResuming: Bool) {
self.isCandleResuming = candleResuming
}
}

View File

@@ -7,8 +7,11 @@ KissMeMatrix 는 다양한 주식의 지표 집합(index set) 통해서 교집
* Index Tool 들을 조합하여 모델을 만들고, 구동한 뒤에 INPUT / PROCESSING / OUTPUT 레이어를 설계
* 각 레이어별로 디버깅 환경 구성
* 각 레이어별로 시뮬레이션을 진행할 수 있도록 구성
* INDEX SET
* 종목 + 추가되는 정보들
* score (+값: 매수희망, -값: 매도희망, 교집합을 작성할 때 매수/매도의 성향에 영향)
* INPUT
* 지표 데이터들
* 지표 데이터들(ARRAY OF INDEX SET)
* 지표 데이터는 각종 csv 에서 데이터를 수집.
* PROCESSING
* model.json 에 기술된 내용으로 지표 데이터를 수집하고 정리.