PYTHON/Back test

1.3 백테스팅하기 - talib 라이브러리 이용하기

  • -

이번에는 지난 게시글에서 불러온 지수 차트 데이터를 바탕으로 이동평균선 등과 같은 여러 가지 보조 데이터를 제작하기 위해 사용되는 talib 라이브러리의 사용 방법에 대해 살펴보고자 한다. 이 라이브러리는 설치하는 절차가 다소 복잡한 편인데, 그래도 그중에 가장 직관적이고 가장 깔끔하게 설명해둔 글이 있는 것 같아서 가져왔다. 설치는 아래의 링크에 들어가서 하는 것으로 하고, 여기서는 이동평균선 구축에 대해서만 살펴볼 예정이다.
※ [TA-lib 설치 방법, 링크 바로가기]

 

 

[파일명 : talib_calculator] 이동평균선 구축하기

talib을 설치했다면 여느 라이브러리와 마찬가지로 import를 해주어야 한다. 그 후 이동평균선을 제작하는 방법은 talib.MA(데이터프레임['칼럼명'], 기간)을 입력하면 된다. 아래의 예시를 참고해보자.
※ 물론 dataframe이라는 데이터 안에 'close'와 'high'라는 칼럼이 있어야 사용할 수 있다.
※ dataframe 안에 있는 칼럼명을 확인하고 싶다면 print()문을 사용해서 확인해보면 된다.

  • 종가 기준 10일 이동평균선 : talib.MA(dataframe['close'], 10)
  • 종가 기준 20일 이동평균선 : talib.MA(dataframe['close'], 20)
  • 고가 기준 10일 이동평균선 : talib.MA(dataframe['high'], 10)

 

아래의 코드는 함수를 통해 이동평균선을 제작하고자 할 경우 사용할 수 있는 코드이다. 즉, MA라는 함수에 주가 데이터가 포함된 변수인 df와 제작하고자 하는 이동평균선 일수 변수인 term을 전달해주면 제작한 후에 그 결과물을 함수를 호출했던 곳으로 전달해주는 것이다.

def MA(df, term):
    MA = "MA" + str(term)
    df[MA] = talib.SMA(df['close'], term)
    return df

 

아래는 바로 위에서 제작했던 것과 마찬가지이긴 하나, 사용할 이동평균선 일수를 직접 설정해준다는 차이가 있다. 그리고 all_MA()라는 함수에서는 전달받을 인자로 df 하나만 받는데, 그 이유는 5, 10, 20, 60, 120만 봐도 알 수 있듯이 이동평균선 일자를 설정하지 않아도 제작할 수 있게끔 모든 이동평균선 일자를 입력해두었기 때문이다.

def all_MA(df):
    df['MA5'] = talib.SMA(df['close'], 5)
    df['MA10'] = talib.SMA(df['close'], 10)
    df['MA20'] = talib.SMA(df['close'], 20)
    df['MA60'] = talib.SMA(df['close'], 60)
    df['MA120'] = talib.SMA(df['close'], 120)
    return df

 

 


728x90

 

 

[파일명 : boss] talib_calculator 호출해서 지수 차트에 이동평균선 제작하기

talib_calculator 파일에서 이동평균선을 제작하는 함수를 제작했다면 이제 그를 사용해야 하는데, 사용하기 위해서는 여느 라이브러리처럼 import를 해주는 과정을 거쳐야 한다. 현재까지 boss 파일 내에서 import 되어 있는 파일은 총 3개로, etc 폴더 내의 db_function 파일과 talib_calculator 파일, 그리고 algorithm 폴더 전체다.

from etc import db_function as dbf
from etc import talib_calculator as talc
import algorithm

class tradesystem(QMainWindow, form_class):
    def __init__(self):

 

이제 import를 통해 talib_calculator라는 파일을 as talc를 통해 talc만 입력하고도 해당 메서드를 사용할 수 있도록 해두었으니 지수 데이터를 조회하는 함수인   _load_index_data()  내에서 talc를 통해 지수의 이동평균선을 제작해보도록 하자.

def _load_index_data(self):
    kospi_index = dbf.load('kos_data', 'kospi_index', row=None).sort_values('date').reset_index(drop=True)
    self.kospi_index = talc.all_MA(kospi_index)
    kosdaq_index = dbf.load('kos_data', 'kosdaq_index', row=None).sort_values('date').reset_index(drop=True)
    self.kosdaq_index = talc.all_MA(kosdaq_index)

 

 

 


728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.