Innovate With Data

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

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

Python으로 적정 원달러 환율 구하기(feat. 달러 투자 무작정 따라하기)

데이터위자드 2024. 3. 27. 23:05
반응형

Python으로 적정 원달러 환율 구하기(feat. 달러 투자 무작정 따라하기)

원달러 환율 급변하는 요즘 적정 환율을 구할 수 있는 방법을 알고 싶었다.

 

 
  재테크에 관심 있는 분들은 각자 본인만의 주종목이 있으실 겁니다. 저는 개인적으로 주식과 채권을 좋아하고 부동산에 약간 관심 있는 정도며, 주식 투자 중에서도 미국 일본 주식 등 해외주식에 평소 관심이 많은 편입니다. 그런 이유로, 시시각각 변하는 환율에 평소 지대한 관심이 있는 편이었습니다.

 

 

기간 평균환율을 매일 정해진 시간마다 Slack으로 알람이 오도록 해보기도 하였고요. (아래 이전 블로그 참조)

 

 

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

 

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

문제 인식 : 원달러 환율이 고공행진하는 요즘 기간별 환율 정보를 확인하고 싶었다. 재테크, 그중에서도 미국 주식 투자나 환테크에 관심에 많은 분들이라면 시시각각 변하는 환율에 평소 지대

datawizard.co.kr

 

 

 그러다 문득 의문이 들었습니다.

 

 

적정 주가를 구하는 공식들은 다양하게 있는데, 적정 환율을 구하는 공식은 없는 걸까?

 

 

 그 의문에 대한 답을 찾아보고자 달러 투자에 대한 여러 책들을 탐독하게 되었고, 아래 책에서 그 질문에 대한 답을 얻게 되었습니다.

 

 

 

 

달러 투자 : 무작정 따라하기

COUPANG

www.coupang.com

 

 

 

 흔히 하는 말로 '환율은 신의 영역이다.' 라며 예측이 사실상 불가하다는 말을 종종 듣곤 하였는데요.

 

저 또한, 해당 서적에서 제시하는 의견이 맞는지 틀린 지는 저 역시 아직 확신이 들진 않는 상황이긴 합니다. 하지만, 해당 서적에서 제시한 의견을 Python으로 자동화하여 검증해 본다면, 유의미한 성과가 있을 것이라는 기대감에 Python으로 자동화해 보기로 하였습니다.

 

 
이번에도 역시 도움 받을 Python 라이브러리는 yfinance, pandas입니다. 🤑
 

 

* 본 포스팅에서 언급된 모듈 등은 필자와 무관함을 알립니다. 또한, 투자 결정 및 그에 따른 결과는 투자자 본인의 책임입니다.

 

 

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

 

yfinance

Download market data from Yahoo! Finance API

pypi.org

 


 yfinance 라이브러리의 기능 중, 특정 Ticker(종목)를 기간별로 조회하여 데이터 프레임 형식으로 반환하는 method를 이용하여 기간 달러 지수 중앙값 및 기간 환율 중앙값을 조회해 보도록 하겠습니다.  
 

yfinance 특정 Ticker 의 History 받아오기

 


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

 

 

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

 

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

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

datawizard.co.kr


 

yfinance, datetime, pandas를 이용하여 달러지수 및 환율정보 가져오기 자동화하기

 

 
 시작에 앞서, 데이터 프레임 처리를 위해 pandas, 달러 지수와 환율 정보를 가져오기 위한 yfinance, 그리고 기간 자동화를 위해서 datetime 모듈에서 datetime, date, timedelta, 그리고 마지막으로 time.sleep()을 처리하기 위해 time 라이브러리까지 import 하여 줍니다.
 

 

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

 

 

 다음으로, 1년 치 달러지수와 1년 치 환율정보를 가져오는 코드를 작성합니다.

참고로, yfinance 패키지에서 원달러환율 종목명(Ticker)은 'USDKRX=X'이며, 달러지수의 종목명(Ticker)은 'DX=F'입니다.

 

   
start2 = str(date.today() - timedelta(days=365))
end = str(date.today() + timedelta(days=1))

usd_index_data = yf.download(['DX=F'],start=start2, end=end)
usd_krw_data = yf.download(['USDKRW=X'],start=start2, end=end)              
 

 

 
 'usd_index_data'라는 dataframe과 'usd_krw_data'라는 dataframe에 각각 1년 치 달러지수와 원달러 환율 정보를 담아줍니다.

 

이어서, 각 dataframe에서 1년 달러지수와 원달러 환율의 중앙값을 구해줍니다.

Pandas에서 중앙값을 찾는 method는 median()입니다.
 


                    today_usd_index = usd_index_data['Close'].iloc[-1]
                    today_usd_index = round(today_usd_index,2)    # 현재 달러 인덱스 구하기

                    usd_index_median = usd_index_data['Close'].median()  
                    usd_index_median = round(usd_index_median,2)      # 1년 달러 인덱스 중앙값 구하기
                    usd_krw_median = usd_krw_data['Close'].median()  
                    usd_krw_median = round(usd_krw_median,2)      # 1년 환율 중앙값 구하기
                   
                    usd_gap_ratio_mean = (계산식) * 100     # 1년 달러 갭 지수 구하기
                    usd_gap_ratio_mean = round(usd_gap_ratio_mean,2)

                    usd_gap_ratio = (계산식) * 100       # 현재 달러 갭 지수 구하기
                    usd_gap_ratio = round(usd_gap_ratio,2)

                    usd_krw_estimate = (계산식)   # 적정 원달러 환율 구하기
                    usd_krw_estimate = round(usd_krw_estimate,2)

                    usd_gap_persentage = (계산식) * 100
                    usd_gap_persentage = round(usd_gap_persentage,1)

                    slackout('적정 원달러 환율 ' + str(usd_krw_estimate) + ' 원')

 


 dataframe에서 중앙값 median()을 이용해 52주 달러지수와 원달러 환율을 찾는 프로그램을 작성하였습니다.

 

여기에 계산식을 적용하여 적정 원달러 환율을 구해줍니다. (계산식에 대한 내용은 해당 책에서 확인하시기 바랍니다.)

 

 

 

 

달러 투자 : 무작정 따라하기

COUPANG

www.coupang.com

 

 

 

더 이상의 자세한 설명은 생략한다.
더 이상의 자세한 설명은 생략한다.

 

 

 

 

 여기에 조건식으로 적정환율과의 괴리율을 계산하여 일정 비율이상 높거나 낮을 경우 달러 매수/매도 알람을 주는 로직을 추가로 작성하였습니다.
 

 

 
                    if usd_gap_persentage > 5:
                        slackout('달러 단타 - 매도하세요!')
                    elif usd_gap_persentage < -5:
                        slackout('달러 단타 - 매수하세요!')
                    else:
                        slackout('달러 단타 없어요!')
 

 


 필자는 Slack를 활용하기 때문에 Slackout이라는 함수를 호출하여 알람을 푸시하는 기능을 넣었습니다. 이는 사용자 편의에 맞춰서 Slack이든 Telegram이든 문자 메시지든 카카오톡이든 메일과 같은 다양한 방법 중 본인에게 편리한 방법을 사용하시면 되겠습니다. 
 
전체 코드는 다음과 같습니다.
 

 
from datetime import datetime, date, timedelta
import pandas as pd
import yfinance as yf
import time
 
if __name__ == "__main__":
 
                     start2 = str(date.today() - timedelta(days=365))
                     end = str(date.today() + timedelta(days=1))

                     usd_index_data = yf.download(['DX=F'],start=start2, end=end)
                     usd_krw_data = yf.download(['USDKRW=X'],start=start2, end=end)              

                    today_usd_index = usd_index_data['Close'].iloc[-1]
                    today_usd_index = round(today_usd_index,2)    # 현재 달러 인덱스 구하기

                    usd_index_median = usd_index_data['Close'].median()  
                    usd_index_median = round(usd_index_median,2)      # 1년 달러 인덱스 중앙값 구하기
                    usd_krw_median = usd_krw_data['Close'].median()  
                    usd_krw_median = round(usd_krw_median,2)      # 1년 환율 중앙값 구하기
                   
                    usd_gap_ratio_mean = (계산식) * 100     # 1년 달러 갭 지수 구하기
                    usd_gap_ratio_mean = round(usd_gap_ratio_mean,2)

                    usd_gap_ratio = (계산식) * 100       # 현재 달러 갭 지수 구하기
                    usd_gap_ratio = round(usd_gap_ratio,2)

                    usd_krw_estimate = (계산식)   # 적정 원달러 환율 구하기
                    usd_krw_estimate = round(usd_krw_estimate,2)

                    usd_gap_persentage = (계산식) * 100
                    usd_gap_persentage = round(usd_gap_persentage,1)

                    slackout('적정 원달러 환율 ' + str(usd_krw_estimate) + ' 원')
 
                    if usd_gap_persentage > 5:
                        slackout('달러 단타 - 매도하세요!')
                    elif usd_gap_persentage < -5:
                        slackout('달러 단타 - 매수하세요!')
                    else:
                        slackout('달러 단타 없어요!')

 

 

여기에다 저는 추가로 Google Spreadsheet에 위 변수의 내용을 기록하여 지속적으로 성과를 측정하는 기능을 추가로 작성하였습니다. (Slack 푸시 기능과 더불어 위 내용도 기회 되면 포스팅하겠습니다.)

 

 

마치며, 

 

 

 이번 포스팅에서는, '달러 투자 무작정 따라 하기'라는 책의 내용에서 Insight를 얻어 적정 환율 계산과 더불어 달러지수/원달러환율의 괴리에서 기회를 포착하는 기능을 Python으로 자동화하는 과정을 소개해 보았습니다.

 

 개인적인 생각으로는,

 

위 예시 코드는 달러 환율의 단타 혹은 단기 스윙시에 활용하고, 기간 평균환율에 대한 정보는 중장기 환테크에 활용하면 유의미한 성과가 있지 않을까 합니다. (물론, 환율은 신의 영역이라는 말은 일부 동의하는 바입니다.) 

 

 

해당 원달러 환율 관련 자동화에서 도출되는 정보들은 앞으로 구글 스프레드시트에 계속 기록될 예정이며, 차후 의미 있는 성과가 있다고 생각되면 공유하는 시간을 갖도록 하겠습니다. (제발 효과 있어라...🙏)

 

 

 

환율은 신의 영역???
환율은 신의 영역???

 

 

* 본 포스팅에서 언급된 모듈 등은 필자와 무관함을 알립니다. 또한, 투자 결정 및 그에 따른 결과는 투자자 본인의 책임입니다.

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


 
도움이 되셨다면, 왼쪽 아래 '💗' 클릭 부탁드립니다. 감사합니다.

반응형