변동성이 큰 금융 시장에서 남들보다 한발 앞서 나가기 위해서는 실시간 데이터 흐름을 쥐고 있어야 합니다. 오늘 포스팅에서는 파이썬 yfinance 라이브러리를 활용해 주식, 채권, 원자재 등 다양한 자산군의 시세를 자동으로 수집하는 나만의 금융 데이터 파이프라인 구축 프로세스를 완벽하게 마스터해 보겠습니다.
yfinance 기반 실시간 금융 데이터 파이프라인 구축하기
금융 데이터 분석의 시작은 신뢰할 수 있는 소스로부터 데이터를 안정적으로 가져오는 것입니다. 야후 파이낸스(Yahoo Finance) API를 래핑한 yfinance는 별도의 유료 API 키 없이도 방대한 금융 데이터를 손쉽게 가져올 수 있는 최고의 오픈소스 도구입니다.
1. 데이터 파이프라인 환경 구성 및 라이브러리 설치
필수 라이브러리 및 가상환경 세팅
파이프라인을 구축하기 전, 데이터 처리를 위한 핵심 라이브러리를 설치해야 합니다. 터미널에서 다음 명령어를 입력하여 yfinance와 데이터 핸들링을 위한 pandas, 그리고 일정 주기마다 실행을 도와줄 schedule 라이브러리를 설치합니다.
pip install yfinance pandas schedule
라이브러리가 설치되었다면, 각 자산군을 대표하는 티커(Ticker) 심볼을 파악해야 합니다. 주식은 ‘AAPL’, 채권(미국 10년물 국채 금리)은 ‘^TNX’, 원자재(금)는 ‘GC=F’와 같은 고유 기호를 사용합니다.
요약: 파이썬 가상환경에 yfinance, pandas, schedule을 설치하고 자산군별 고유 티커 심볼을 준비합니다.
2. 다중 자산군 실시간 시세 수집 코드 구현
yfinance 기반 데이터 수집 스크립트 작성
이제 주식, 채권, 원자재의 데이터를 실시간으로 가져와 하나의 데이터프레임으로 결합하는 파이썬 스크립트를 작성할 차례입니다. yfinance의 `Ticker` 객체 또는 `download` 함수를 활용하면 실시간 가격(Live Price) 정보를 직관적으로 추출할 수 있습니다.
import yfinance as yf
import pandas as pd
from datetime import datetime
def fetch_financial_data():
# 주식(애플), 채권(미 미국 10년물 국채 금리), 원자재(금 선물) 티커 지정
tickers = {
'Stock_AAPL': 'AAPL',
'Bond_10Y': '^TNX',
'Commodity_Gold': 'GC=F'
}
current_data = {'Timestamp': datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
for asset, ticker in tickers.items():
# 실시간에 가까운 최신 1일치 데이터를 1분 단위로 가져옴
df = yf.download(ticker, period='1d', interval='1m', progress=False)
if not df.empty:
# 가장 최근 종가(Close)를 추출
current_data[asset] = round(df['Close'].iloc[-1], 2)
return current_data
print(fetch_financial_data())
위 코드는 각 자산의 가장 최신 1분 봉 데이터를 가져와 마지막 종가를 딕셔너리 형태로 반환합니다. 이를 활용하면 시장의 미세한 움직임까지 실시간으로 추적할 수 있습니다.
요약: yfinance.download 함수를 활용해 주식·채권·원자재의 1분 단위 최신 종가를 추출하는 파이썬 함수를 구현합니다.
3. 스케줄러 기반 데이터 파이프라인 자동화
지속적인 데이터 적재 및 파이프라인 실행
단발성 수집에 그치지 않고 지속적으로 시세를 축적하기 위해서는 데이터 자동화 파이프라인이 필요합니다. 수집된 데이터를 주기적으로 CSV 파일이나 데이터베이스에 저장하는 루프를 만들어 주어야 합니다.
import schedule
import time
import os
def run_pipeline():
data = fetch_financial_data()
df = pd.DataFrame([data])
# 파일이 없으면 헤더를 포함해 새로 만들고, 있으면 아래에 추가(append)
file_path = 'financial_pipeline.csv'
if not os.path.exists(file_path):
df.to_csv(file_path, index=False)
else:
df.to_csv(file_path, mode='a', header=False, index=False)
print(f"[{data['Timestamp']}] 데이터 파이프라인 적재 완료 완료.")
# 1분마다 파이프라인 함수 실행
schedule.every(1).minutes.do(run_pipeline)
print("실시간 금융 데이터 파이프라인 가동 중...")
while True:
schedule.run_pending()
time.sleep(1)
이 스크립트를 실행해 두면 매 1분마다 주식, 채권, 원자재의 가격이 로컬 CSV 파일에 차곡차곡 쌓이게 됩니다. 이는 향후 트레이딩 봇 개발이나 금융 데이터 분석 알고리즘의 기초 데이터셋으로 활용됩니다.
요약: schedule 라이브러리를 통해 1분 주기로 실시간 데이터를 수집하고 CSV 파일에 자동 적재하는 파이프라인을 완성합니다.
요약 및 파이프라인 구축 시 주의사항
- 무료 API의 한계 극복: yfinance는 과도한 요청(Rate Limit) 시 IP가 일시적으로 차단될 수 있으므로 요청 주기(예: 최소 1분 간격)를 적절히 조절해야 합니다.
- 데이터 지연 시간 인지: 야후 파이낸스의 실시간 시세는 거래소 및 자산 종류에 따라 대략 15분 내외의 지연이 발생할 수 있으므로 초단타 매매보다는 스윙 및 중장기 분석 파이프라인에 적합합니다.
- 자산군 확장의 용이성: 티커 딕셔너리에 암호화폐(예: BTC-USD)나 해외 지수(^IXIC)를 추가하는 것만으로도 파이프라인을 무한히 확장할 수 있습니다.
마치며: 나만의 데이터 허브로 도약하기
지금까지 파이썬과 yfinance 라이브러리를 활용해 주식, 채권, 원자재의 실시간 시세 데이터 파이프라인을 구축하는 방법을 알아보았습니다. 로컬 환경에서 CSV 파일로 데이터를 쌓는 데 성공했다면, 다음 단계로는 AWS 같은 클라우드 데이터베이스(DB)와 연동하여 24시간 중단 없는 시스템으로 고도화해 보시기 바랍니다. 안정적으로 정제된 나만의 금융 데이터 허브를 기반으로, 데이터 중심의 스마트한 투자 전략을 직접 설계하고 검증해 나가는 기쁨을 누려보세요.