Check if today is holiday for stock business date

This commit is contained in:
2023-06-07 01:42:07 +09:00
parent fcf2798029
commit adca64721f
8 changed files with 67 additions and 4 deletions

View File

@@ -128,7 +128,7 @@ extension Domestic {
public typealias KResult = HolidyResult
public var url: String { "/uapi/domestic-stock/v1/quotations/chk-holiday" }
public var method: Method { .post }
public var method: Method { .get }
public var header: [String: String?] {
[
@@ -142,8 +142,8 @@ extension Domestic {
public var body: [String: Any] {
[
"BASS_DT": baseDate,
"CTX_AREA_NK": String(repeating: " ", count: 20),
"CTX_AREA_FK": String(repeating: " ", count: 20),
"CTX_AREA_NK": " ",
"CTX_AREA_FK": " ",
]
}
public var result: KResult? = nil

View File

@@ -153,6 +153,14 @@ public struct HolidyResult: Codable {
case output = "output"
}
public func isHoliday(_ date: Date) -> Bool {
let dateString = Date().yyyyMMdd
guard let target = output?.first(where: { $0.baseDate == dateString }) else {
return false
}
return target.businessDayOpened != .yes
}
public struct OutputDetail: Codable {
///
public let baseDate: String

View File

@@ -68,6 +68,7 @@ extension Date {
components.hour = hour
components.minute = min
components.second = sec
components.nanosecond = 0
return Calendar.current.date(from: components)
}

View File

@@ -158,6 +158,15 @@ extension KissConsole {
return false
}
}
func checkHoliday(_ date: Date) async throws -> Bool {
guard await KissContext.shared.targetDate.yyyyMMdd != date.yyyyMMdd else {
return await KissContext.shared.isHoliday
}
let isHoliday = try await account!.getHolyday(baseDate: date).isHoliday(date)
await KissContext.shared.updateHoliday(isHoliday, targetDate: date)
return isHoliday
}
}

View File

@@ -578,6 +578,12 @@ extension KissConsole {
for item in all {
let semaphore = DispatchSemaphore(value: 0)
Task {
let holiday = try? await checkHoliday(Date())
if holiday == true {
print("DONE today is holiday")
return
}
let success = await getCandle(productNo: item.shortCode)
print("DONE \(success) \(item.shortCode)")
semaphore.signal()
@@ -614,6 +620,12 @@ extension KissConsole {
for item in all {
let semaphore = DispatchSemaphore(value: 0)
Task {
let holiday = try? await checkHoliday(Date())
if holiday == true {
print("DONE today is holiday")
return
}
let success = await getRecentCandle(productNo: item.shortCode, period: .daily, count: 250)
print("DONE \(success) \(item.shortCode)")
semaphore.signal()
@@ -655,6 +667,12 @@ extension KissConsole {
for item in all {
let semaphore = DispatchSemaphore(value: 0)
Task {
let holiday = try? await checkHoliday(Date())
if holiday == true {
print("DONE today is holiday")
return
}
let success = await getRecentCandle(productNo: item.shortCode, period: .weekly, count: 52)
print("DONE \(success) \(item.shortCode)")
semaphore.signal()

View File

@@ -0,0 +1,23 @@
//
// KissContext.swift
// KissMeConsole
//
// Created by ened-book-m1 on 2023/06/07.
//
import Foundation
actor KissContext {
static let shared = KissContext()
private(set) var targetDate: Date = Date(timeIntervalSince1970: 0)
private(set) var isHoliday: Bool = false
private init() { }
func updateHoliday(_ isHolyday: Bool, targetDate: Date) {
self.isHoliday = isHolyday
self.targetDate = targetDate
}
}

View File

@@ -10,6 +10,7 @@
341F5ED42A0A8B9000962D48 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 341F5ED32A0A8B9000962D48 /* main.swift */; };
341F5F052A13B82F00962D48 /* test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 341F5F042A13B82F00962D48 /* test.swift */; };
341F5F092A1463A100962D48 /* KissConsole.swift in Sources */ = {isa = PBXBuildFile; fileRef = 341F5F082A1463A100962D48 /* KissConsole.swift */; };
348168492A2F92AC00A50BD3 /* KissContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 348168482A2F92AC00A50BD3 /* KissContext.swift */; };
349327F72A20E3E300097063 /* Foundation+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 349327F62A20E3E300097063 /* Foundation+Extensions.swift */; };
349843212A242AC900E85B08 /* KissConsole+CSV.swift in Sources */ = {isa = PBXBuildFile; fileRef = 349843202A242AC900E85B08 /* KissConsole+CSV.swift */; };
34D3680D2A280801005E6756 /* KissConsole+Candle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D3680C2A280801005E6756 /* KissConsole+Candle.swift */; };
@@ -46,6 +47,7 @@
341F5EDB2A0A8C4600962D48 /* KissMe.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = KissMe.framework; sourceTree = BUILT_PRODUCTS_DIR; };
341F5F042A13B82F00962D48 /* test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = test.swift; sourceTree = "<group>"; };
341F5F082A1463A100962D48 /* KissConsole.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KissConsole.swift; sourceTree = "<group>"; };
348168482A2F92AC00A50BD3 /* KissContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KissContext.swift; sourceTree = "<group>"; };
349327F62A20E3E300097063 /* Foundation+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Foundation+Extensions.swift"; sourceTree = "<group>"; };
3498431E2A24287600E85B08 /* KissMeConsoleTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KissMeConsoleTests.swift; sourceTree = "<group>"; };
349843202A242AC900E85B08 /* KissConsole+CSV.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KissConsole+CSV.swift"; sourceTree = "<group>"; };
@@ -87,6 +89,7 @@
children = (
341F5ED32A0A8B9000962D48 /* main.swift */,
341F5F042A13B82F00962D48 /* test.swift */,
348168482A2F92AC00A50BD3 /* KissContext.swift */,
341F5F082A1463A100962D48 /* KissConsole.swift */,
34D3680C2A280801005E6756 /* KissConsole+Candle.swift */,
349843202A242AC900E85B08 /* KissConsole+CSV.swift */,
@@ -178,6 +181,7 @@
341F5F092A1463A100962D48 /* KissConsole.swift in Sources */,
341F5F052A13B82F00962D48 /* test.swift in Sources */,
349843212A242AC900E85B08 /* KissConsole+CSV.swift in Sources */,
348168492A2F92AC00A50BD3 /* KissContext.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};