파이썬 FDR 패키지를 활용한 주식 데이터 분석
금융 데이터를 분석하는 데 있어 FinanceDataReader(FDR) 패키지는 강력한 도구입니다. FDR은 다양한 시장 데이터를 빠르고 쉽게 수집할 수 있으며, 이를 바탕으로 심층적인 기술적 분석을 수행할 수 있습니다. 이 글에서는 FDR 패키지를 활용해 상승률이 특정 임계치 이상인 종목, 거래량 급등을 감지하는 방법, 그리고 50일 이동평균선이 200일 이동평균선을 돌파한 종목을 찾아내는 방법을 설명하겠습니다.
글의 순서
특정 상승률(Threshold) 이상 상승한 종목 찾기
거래량 급등을 감지하는 방법
50일 이동평균선이 200일 이동평균선을 돌파한 종목 찾기 (Golden Cross)
특정 상승률(Threshold) 이상 상승한 종목 찾기
주가가 일정 비율 이상 상승한 종목을 찾아내는 것은 투자자들이 상승 모멘텀을 감지하고 기회를 포착하는 데 유용합니다. FDR 패키지를 사용해 특정 상승률을 초과한 종목을 필터링할 수 있습니다.
방법을 간단히 정리하면, FDR 패키지로 KRX 전체 종목 리스트 가져온 후, 아래의 2단계를 적용합니다. 실습코드01에 구체적인 방법을 나타내었습니다.
step1) 어제의 종가와 오늘의 종가를 비교해 상승률 계산
step2) 상승률이 사용자가 지정한 임계치(예: 25%) 이상인 종목 필터링
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import FinanceDataReader as fdr import pandas as pd # FDR 패키지로 KRX 전체 종목 리스트 가져오기 krx = fdr.StockListing('KRX') def get_stocks_by_threshold(threshold): result = [] for _, row in krx.iterrows(): code = row['Code'] name = row['Name'] df = fdr.DataReader(code, '2023-09-12', '2023-09-13') # 어제와 오늘 데이터 if len(df) == 2: # 상승률 계산 yesterday_close = df['Close'][0] today_close = df['Close'][1] increase_rate = (today_close - yesterday_close) / yesterday_close * 100 # 임계치 이상 상승한 종목 필터링 if increase_rate >= threshold: result.append({'Code': code, 'Name': name, 'Increase (%)': increase_rate}) return pd.DataFrame(result) # 20% 이상 상승한 종목 찾기 df_stocks = get_stocks_by_threshold(threshold=25) print(df_stocks) |
1 2 3 4 5 6 7 8 9 10 |
Code Name Increase (%) 0 038870 에코바이오 27.554180 1 100590 머큐리 29.968944 2 088800 에이스테크 29.748529 3 088290 이원컴포텍 29.968454 4 002870 신풍 29.553265 5 179530 애드바이오텍 29.894180 6 000325 노루홀딩스우 29.880478 7 090355 노루페인트우 29.780724 8 000227 유유제약2우B 27.216857 |
거래량 급등을 감지하는 방법
거래량 급등은 종목에 대한 관심이 증가하고 있음을 나타내는 중요한 신호입니다. 일반적으로, 일정 기간 동안 평균 거래량에 비해 거래량이 급증한 종목은 잠재적인 가격 변동 가능성이 큽니다. 이를 통해 단기적으로 큰 변동성이 예상되는 종목을 필터링할 수 있습니다.
FDR 패키지로 KRX 전체 종목 리스트 가져온 후, 아래의 2단계로 찾아낼 수 있으며, 실습코드02에 이를 구현하였습니다. 이 코드는 오늘의 거래량이 지난 10일 평균 거래량 대비 4배 이상(threshold_factor=4)인 종목을 걸러냅니다.
step1) 최근 며칠간의 평균 거래량 계산
step2) 오늘의 거래량이 평균 거래량보다 급격히 증가한 종목 필터링
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
import FinanceDataReader as fdr import pandas as pd # FDR 패키지로 KRX 전체 종목 리스트 가져오기 krx = fdr.StockListing('KRX') def get_volume_spike_stocks(threshold_factor): result = [] for _, row in krx.iterrows(): code = row['Code'] name = row['Name'] df = fdr.DataReader(code, '2024-08-20', '2024-09-13') # 최근 데이터 if len(df) > 10: # 10일간 평균 거래량 avg_volume = df['Volume'][:-1].mean() today_volume = df['Volume'][-1] # 거래량 급등 감지 if today_volume >= avg_volume * threshold_factor: result.append({'Code': code, 'Name': name, 'Volume Spike': today_volume}) return pd.DataFrame(result) # 거래량이 2배 이상 급등한 종목 찾기 df_volume_spike = get_volume_spike_stocks(threshold_factor=4) print(df_volume_spike) |
1 2 3 4 5 6 7 8 9 10 11 12 |
Code Name Volume Spike 0 010130 고려아연 581021 1 009410 태영건설 0 2 009970 영원무역홀딩스 23252 3 078130 국일제지 0 4 000670 영풍 33812 .. ... ... ... 183 009415 태영건설우 0 184 283100 노보믹스 12629 185 208890 미래엔에듀파트너 62 186 103660 씨앗 24008 187 308700 테크엔 0 |
50일 이동평균선이 200일 이동평균선을 돌파한 종목 찾기 (Golden Cross)
이동평균선 교차는 주식 분석에서 매우 중요한 신호입니다. 특히 50일 이동평균선이 200일 이동평균선을 상향 돌파하는 경우(Golden Cross)는 장기 상승 추세를 나타내며, 강력한 매수 신호로 해석할 수 있습니다.
FDR 패키지로 KRX 전체 종목 리스트 가져온 후, 아래의 방법을 적용합니다. 실습코드03에 이를 나타내었습니다.
step1) 50일과 200일 이동평균 계산
step2) 50일 이동평균이 200일 이동평균을 상향 돌파한 종목 필터링
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
import FinanceDataReader as fdr import pandas as pd # FDR 패키지로 KRX 전체 종목 리스트 가져오기 krx = fdr.StockListing('KRX') def get_golden_cross_stocks(): result = [] for _, row in krx.iterrows(): code = row['Code'] name = row['Name'] df = fdr.DataReader(code, '2022-01-01', '2023-09-01') # 200일 이상의 데이터 if len(df) >= 200: # 50일, 200일 이동평균 계산 df['MA50'] = df['Close'].rolling(window=50).mean() df['MA200'] = df['Close'].rolling(window=200).mean() # 최근 Golden Cross 여부 확인 if df['MA50'][-1] > df['MA200'][-1] and df['MA50'][-2] <= df['MA200'][-2]: result.append({'Code': code, 'Name': name}) return pd.DataFrame(result) # Golden Cross가 발생한 종목 찾기 df_golden_cross = get_golden_cross_stocks() print(df_golden_cross) |
1 2 3 4 5 6 |
Code Name 0 317870 엔바이오니아 1 002600 조흥 2 036170 클라우드에어 3 017000 신원종합개발 4 071460 위니아 |
마치며 …
파이썬 FDR(FinanceDataReader) 패키지를 통해 주식 시세에 대한 기술적 분석을 손쉽게 자동화할 수 있습니다. 이 포스팅에서는 상승률 기준, 거래량 급등, 그리고 이동평균 교차와 같은 기술적 지표를 활용하는 방법을 예로 들었습니다. 여기서 설명한 방법을 활용하셔서 현재 주가에 대한 통찰을 얻어보시기 바랍니다.
함께 참고하면 좋은 글
▶ 파이썬으로 금융시장 분석하기 : FDR(FinanceDataReader) 패키지 활용법
▶ 파이썬 FDR 패키지로 금융시장 분석 : 투자 유의 종목 걸러내는 방법
▶ yfinance로 주식, 암호화폐, 원자재까지: 파이썬으로 금융 데이터 쉽게 분석하기
▶ 한국투자증권 API 신청 방법
▶ 한국투자증권 파이썬 패키지 pykis로 준비하는 알고리즘 투자
▶ RESTful API : 웹 애플리케이션 개발자를 위한 기초부터 실전까지
▶ 파이썬 데이터 분석을 위한 API 이해, REST API, WebSocket API
▶ 파이썬 바이낸스 API로 시계열 데이터를 가져오는 파이썬 프로그래밍
▶ 업비트 REST API를 이용한 비트코인 가격 추출 파이썬 프로그래밍