Innovate With Data

데이터로 더 큰 가치를 제공합니다.

맨땅에 프로그래밍/Python 복기장

Python으로 환율정보 가져오기 (기간 환율 평균 구하기)

데이터위자드 2023. 6. 12. 23:22
반응형

Python으로 환율정보 가져오기

문제 인식 : 원달러 환율이 고공행진하는 요즘 기간별 환율 정보를 확인하고 싶었다.

 
  재테크, 그중에서도 미국 주식 투자나 환테크에 관심에 많은 분들이라면 시시각각 변하는 환율에 평소 지대한 관심을 가지실 것이라 사료됩니다. 저 또한 그런 사람 중에 한명일 테구요.
 
 평소 기간별 평균 환율을 조회하기 위해서, 우리은행 사이트를 애용하곤 했는데요.
 

https://spot.wooribank.com/pot/Dream?withyou=FXXRT0016 

 

기간별평균환율조회 - 우리은행

기간별평균환율조회 중국 위안화 환율(CNY)은 홍콩시장에서 거래되는 위안화 환율(CNH)을고시합니다. -->

spot.wooribank.com

 

기간별 환율평균 조회 @우리은행
기간별 환율평균 조회 @우리은행

 
 매번 확인하기가 번거롭다는 생각에 Python으로 자동화하기로 하였습니다.
 
이번에 이용할 파이썬 패키지 역시 yfinance입니다.
 

https://pypi.org/project/yfinance/

 

yfinance

Download market data from Yahoo! Finance API

pypi.org

 
 yfinance 패키지 설명된 내용 중, 특정 Ticker(종목)를 기간별로 조회하여 데이터 프레임 형식으로 반환하는 예시를 활용하여 현재 환율 조회 및 기간 평균 조회를 하도록 하겠습니다.  
 

yfinance 특정 Ticker 의 History 받아오기
yfinance 특정 Ticker 의 History 받아오기

 
이전 포스팅에서 설명한 바와 같이,  'start'와 'end' 매개변수를 매번 일일이 입력해 줄 수는 없으므로, datetime 패키지를 이용하여 기간을 설정하도록 하겠습니다. (이전 포스팅 참조)
 

[Python 복기장] - datetime, date, timedelta로 날짜 자동화 하기

 

datetime, date, timedelta 로 날짜 자동화 하기

문제 인식 : datetime, date, timedelta를 이용하여 반복 작업 피하기 주식 자동 거래 RPA를 만들어 활용하고자, yfinance 모듈을 이용하여 특정 종목 혹은 지수의 기간동안의 데이터를 수집하고 싶었다. 먼

datawizard.co.kr


 

yfinance, datetime 이용하여 환율정보 가져오기 자동화

 
먼저, 데이터 프레임 처리를 위해 pandas 패키지, 환율 정보를 가져오기 위해 yfinance, 그리고 기간 자동화를 위해서 datetime 모듈에서 datetime, date, timedelta를 import 하여 줍니다.
 

 
from datetime import datetime, date, timedelta
import pandas as pd
import yfinance as yf
 

 
다음으로, 5년 치 환율정보를 가져오기 위한 코드를 작성하였습니다. yfinance 패키지에서 원달러환율 종목명(Ticker)은 'USDKRX=X'입니다
 

    start = str(date.today() - timedelta(days=1825))   # years 매개변수는 없다?? 3년 = 1095, 5년 = 1825
    end = str(date.today() + timedelta(days=1))
    rate_data = yf.download(['USDKRW=X'],start=start, end=end)

 
5년 치 원달러 환율 정보를 'rate_data' 데이터 프레임으로 만들고 현재 환율(마지막 환율)과 평균환율을 구하는 프로그램을 추가합니다.
 

    today_rate = rate_data['Close'].iloc[-1]
    today_rate = round(today_rate,2)    # 현재 환율 구하기
    print(today_rate)   # 현재 환율 프린트

    mean_rate = rate_data['Close'].mean()  
    mean_rate = round(mean_rate,2)      # 기간 평균 환율 구하기
    print(mean_rate)

 
여기에 조건식으로 현재환율이 기간환율보다 일정 비율이상 높거나 낮을 경우 알람을 주는 로직을 추가로 작성하였습니다.
 

 
    if today_rate < mean_rate:
        # slackout('현재 환율이 ' + str(today_rate) + '원으로, 환율 5년 평균 ' + str(mean_rate) + '보다 낮습니다.')
        print('현재 환율이 ' + str(today_rate) + '원으로, 환율 5년 평균 ' + str(mean_rate) + '원 보다 낮습니다.')
    elif (mean_rate * 1.1) > today_rate:
        # slackout('현재 환율이 ' + str(today_rate) + '원으로, 환율 5년 평균 ' + str(mean_rate) + '보다 10% 이상 높습니다.')
        print('현재 환율이 ' + str(today_rate) + '원으로, 환율 5년 평균 ' + str(mean_rate) + '원 보다 10% 이상 높습니다.')

 
필자는 Slack를 활용하기 때문에 Slackout이라는 함수를 호출하여 알람을 푸시하는 기능을 넣었으나, 사용자 편의에 맞춰서 Slack이든 Telegram이든 카카오톡이든 SNS 서비스나 메일과 같은 다양한 방법 중 본인에게 편리한 방법을 사용하시면 되겠습니다. (Slack과 텔레그램 푸시는 다음에 기회 되면 소개하도록 하겠습니다.)
 
전체 코드는 다음과 같습니다.
 

 
from datetime import datetime, date, timedelta
import pandas as pd
import yfinance as yf
 
if __name__ == "__main__":
 
    start = str(date.today() - timedelta(days=1825))   # years 매개변수는 없다?? 3년 = 1095, 5년 = 1825
    end = str(date.today() + timedelta(days=1))
    rate_data = yf.download(['USDKRW=X'],start=start, end=end)

    today_rate = rate_data['Close'].iloc[-1]
    today_rate = round(today_rate,2)    # 현재 환율 구하기
    print(today_rate)   # 현재 환율 프린트

    mean_rate = rate_data['Close'].mean()  
    mean_rate = round(mean_rate,2)      # 기간 평균 환율 구하기
    print(mean_rate)


    if today_rate < mean_rate:
        # slackout('현재 환율이 ' + str(today_rate) + '원으로, 환율 5년 평균 ' + str(mean_rate) + '보다 낮습니다.')
        print('현재 환율이 ' + str(today_rate) + '원으로, 환율 5년 평균 ' + str(mean_rate) + '원 보다 낮습니다.')
    elif (mean_rate * 1.1) > today_rate:
        # slackout('현재 환율이 ' + str(today_rate) + '원으로, 환율 5년 평균 ' + str(mean_rate) + '보다 10% 이상 높습니다.')
        print('현재 환율이 ' + str(today_rate) + '원으로, 환율 5년 평균 ' + str(mean_rate) + '원 보다 10% 이상 높습니다.')

 
 실행 결과는,
 

파이썬 환율 정보 가져오기 실행화면
파이썬 환율 정보 가져오기 실행화면

 
실행화면과 앞서 소개한 우리은행 기간 평균 환율과 2원 정도 차이가 나는 것으로 보입니다. 이와 같은 현상이 생기는 이유를 추정하건대,
 

  1.  각 영업일마다 yfinance 환율 종가와 은행 고시 종가가 약간씩 다를 수 있는 점
  2. 기간설정이 며칠 차이가 나는 점

 
으로 발생하는 것으로 추정됩니다. (물론, 정확한 원인은 아닐 수 있습니다.)
 
도움이 되셨다면, 왼쪽 아래 '💗' 클릭 부탁드립니다. 감사합니다.

반응형