[swift] PromiseKit를 이용한 주가 정보 조회 및 분석

이번 포스트에서는 PromiseKit를 사용하여 주가 정보를 조회하고 분석하는 방법에 대해 알아보겠습니다.

목차

  1. PromiseKit란
  2. 주가 정보 조회
  3. 주가 분석
  4. 마무리

PromiseKit란

PromiseKit는 비동기 작업을 처리하는 데 사용되는 Swift 라이브러리입니다. 이는 약속 (Promise)과 미래 값(future value)을 사용하여 비동기 작업을 쉽게 관리할 수 있도록 도와줍니다.

주가 정보 조회

API 호출

먼저, 주가 정보를 가져오기 위해 외부 API를 호출해야 합니다. PromiseKit는 비동기 작업을 관리하는데 사용되므로, API 호출은 Promise로 래핑되어야 합니다.

[Example code]

func fetchStockData() -> Promise<StockData> {
    return Promise { seal in
        APIManager.fetchStockData { result in
            switch result {
            case .success(let data):
                seal.fulfill(data)
            case .failure(let error):
                seal.reject(error)
            }
        }
    }
}

위 코드에서는 fetchStockData 함수를 정의하여 외부 API를 호출하고 결과를 Promise로 래핑합니다. API 호출이 성공하면 데이터를 fulfill하고 실패하면 에러를 reject합니다.

데이터 처리

API 호출 후에는 리턴된 주가 데이터를 처리해야 합니다. 이는 Promise chaining을 사용하여 수행할 수 있습니다.

[Example code]

fetchStockData()
    .then { stockData -> Promise<[Double]> in
        let closingPrices = stockData.closingPrices
        let movingAverages = calculateMovingAverages(closingPrices)
        return Promise.value(movingAverages)
    }
    .then { movingAverages in
        let bollingerBands = calculateBollingerBands(movingAverages)
        return Promise.value(bollingerBands)
    }
    .done { bollingerBands in
        print("Bollinger Bands:", bollingerBands)
    }
    .catch { error in
        print("Error:", error)
    }

위 코드에서는 fetchStockData 함수를 호출한 후에 then 메서드를 사용하여 데이터를 처리합니다. then 메서드는 이전 Promise가 fulfill된 후에 실행되는 closure를 받습니다. 이렇게 체인으로 연결된 then 메서드를 사용하여 데이터 처리를 계속할 수 있습니다.

주가 분석

이동 평균 계산

이동 평균은 주가의 흐름을 부드럽게 만들기 위해 사용되는 통계학적 지표입니다. 이를 계산하는 함수를 작성해보겠습니다.

[Example code]

func calculateMovingAverages(_ closingPrices: [Double]) -> [Double] {
    var movingAverages: [Double] = []
    for i in 4..<closingPrices.count {
        let sum = closingPrices[(i-4)...i].reduce(0, +)
        let movingAverage = sum / 5
        movingAverages.append(movingAverage)
    }
    return movingAverages
}

위 코드에서는 closingPrices 배열을 받아 이동 평균을 계산하여 배열로 리턴합니다.

볼린저 밴드 계산

볼린저 밴드는 주가의 변동성을 측정하기 위한 지표입니다. 이를 계산하는 함수를 작성해보겠습니다.

[Example code]

func calculateBollingerBands(_ movingAverages: [Double]) -> [(upper: Double, middle: Double, lower: Double)] {
    var bollingerBands: [(upper: Double, middle: Double, lower: Double)] = []
    for i in 19..<movingAverages.count {
        let stdDeviation = calculateStandardDeviation(Array(movingAverages[i-19...i]))
        let middle = movingAverages[i]
        let upper = middle + (stdDeviation * 2)
        let lower = middle - (stdDeviation * 2)
        bollingerBands.append((upper, middle, lower))
    }
    return bollingerBands
}

위 코드에서는 movingAverages 배열을 받아 볼린저 밴드를 계산하여 배열로 리턴합니다. 이때, 표준 편차를 계산하는 함수 calculateStandardDeviation를 사용합니다.

마무리

이번 포스트에서는 PromiseKit를 사용하여 주가 정보를 조회하고 분석하는 방법에 대해 알아보았습니다. PromiseKit는 비동기 작업을 관리하는데 큰 도움을 주는 라이브러리입니다. 이를 활용하여 앱에서 주가 정보를 실시간으로 조회하고 분석할 수 있습니다.

더 자세한 내용은 PromiseKit 공식 문서를 참조하시기 바랍니다.