본문 바로가기
암호화폐 자동매매/모델 개발

[바이비트 (ByBit) 자동매매] python을 이용한 나스닥 지수 데이터 조회

by EMES_ 2024. 1. 18.

이번 포스팅은 모델 개발을 위한 또하나의 중요 feature 중 하나인 나스닥 지수 조회에 대한 글입니다.

 

나스닥을 비롯한 지수, 주가 등을 조회할 수 있는 방법은 많은데요, 대표적으로 finance-datareader, pandas-datareader, 야후 파이낸스 (yahoo-finance) 등의 라이브러리를 사용할 수 있습니다.

 

저는 그중 finance-datareader 를 이용하여 조회해 보겠습니다. 자료가 한국어로 되어있어 편하더라구요.

 

설치는 아래 명령어로 합니다. 여태 그랬던것 처럼 저는 가상환경에 설치해 주었습니다.

pip install -U finance-datareader

 

finance-datareader 사용을 위해서는 아래 라이브러리 설치가 필요합니다. 

  • bs4 (웹 크롤링 관련 라이브러리)
  • pandas (버전 1.0 이상)
  • plotly (시각화 관련 라이브러리)
  • bokeh (시각화 관련 라이브러리)

위 라이브러리들은 모두 pip install ~~ 명령어로 설치 가능합니다.

 

finance-datareader 에서는 지수 뿐만 아니라 아래와 같은 굉장히 많은 종류의 정보를 얻을 수 있습니다. 

  • 코스피, 코스닥 등 국내지수
  • 나스닥, S&P 500 등 미국 시장 지수
  • 상해 종합 지수, 닛케이 등 해외 지수
  • 국내 시장 개별 종목
  • 미국 시장 개별 종목
  • WTI, 금 등 상품 선물 가격
  • 환율
  • 암호화폐
  • 그외 등등...

Github 및 사용자 안내서를 참고하면 원하는 자료를 손쉽게 찾아볼 수 있습니다.

https://github.com/FinanceData/FinanceDataReader

 

GitHub - FinanceData/FinanceDataReader: Financial data reader

Financial data reader. Contribute to FinanceData/FinanceDataReader development by creating an account on GitHub.

github.com

https://financedata.github.io/posts/finance-data-reader-users-guide.html

 

FinanceDataReader 사용자 안내서

FinanceDataReader 사용자 안내서

financedata.github.io

 

사용법은 간단합니다. 라이브러리를 import 해주고 DataReader 함수를 통해 원하는 정보를 불러오면 됩니다. 리턴은 Date 가 index인 Dataframe 형태로 나오며 'Open','High','Low','Close','Volume' 의 열을 포함하고 있습니다.

 

올해 나스닥 지수를 불러와 보겠습니다. 아래 코드를 실행시키면 쉽게 결과를 얻어낼 수 있습니다.

import FinanceDataReader as fdr

df = fdr.DataReader('IXIC','2024-01-01','2024-01-18') # 2024/1/1 ~ 2024/1/18 까지 나스닥 지수
print(df)

 

참고로 미국 지수별 심볼은 아래와 같습니다. 자세한 정보는 위에 공유드린 링크를 통해 확인하시면 됩니다.

심볼 설명
DJI 다우존스 지수
IXIC 나스닥 지수
US500 S&P 500 지수
VIX S&P 500 VIX

 

코드 실행 후 결과는 아래와 같습니다.

 

시각화를 위해서 그래프를 그려보겠습니다. 아래 코드를 통해 쉽게 그래프를 그려볼 수 있다고 합니다. 그러나 저는 그려지지 않고 아무 반응이 없는데요, finance-datareader는 bokeh 라이브러리를 통해 아래 함수로 그래프를 그려준다고 하는데 bokeh 라이브러리 관련 문제인 듯 합니다.

fdr.chart.plot(df)

저는 나스닥 데이터가 중요한것이지 위의 fdr.chart.plot 함수가 제대로 작동하지 않는것은 큰 문제가 되지 않기 때문에 그냥 넘어갔습니다. 대신 비트코인 차트를 불러올때 사용했던 mplfinance를 사용하여 캔들 그래프를 그려보겠습니다.

import mplfinance as mpf

...

mpf.plot(df,type='candle',style='binance',volume=True)

혹은 대표적은 그래프 라이브러리인 matplotlib 을 이용해서도 그려볼 수 있습니다. 종가 기준으로 그래프를 그려보면 아래와 같습니다.

import FinanceDataReader as fdr
import matplotlib.pyplot as plt
import cycler

plt.rcParams["figure.figsize"] = (10,4)
plt.rcParams['lines.linewidth'] = 2
plt.rcParams['lines.color'] = "Black"
plt.rcParams['axes.prop_cycle'] = cycler.cycler(color='k')
plt.rcParams["axes.grid"] = True

df = fdr.DataReader('IXIC','2024-01-01','2024-01-18')
print(df)

df['Close'].plot()
plt.show()

여담이지만 plot의 선 색깔을 바꾸고 싶은데 lines.color 로 설정이 안되어서 헤맸네요...😅

 

이제 슬슬 시계열 예측 모델을 구현해보려고 합니다. 다만 쉽게 생각할 수 있는 LSTM 에 데이터 때려넣어서 학습시키는걸로 충분할지 고민이라서 모델 구성을 어떻게 할것인지, feature는 어떻게 구성할 것인지, return 은 어떤 형태로 구성되어야 할지, 그에따라 매수/매도 조건을 어떻게 가져갈 것인지 등등을 좀더 고민해 봐야할 것 같습니다.

어디서 들은 얘기로는 대부분이 알고 적용해서 수익을 낼수 있는 모델이 나오면 그게 적용되는 순간 깨지는 모델이라고 들었습니다. 어쩌면 당연한 얘기죠 그래서 흔한 모델이 아닌 독창적인 모델을 만들어야하지 않나 싶습니다. 짧은 지식을 이용해서 최대한 독창적으로 만들려 노력 해봐야겠습니다.