본문 바로가기
Dev/Python

matplotlib 를 이용한 DataFrame 그래프 출력

by zemba 2021. 11. 1.
반응형
SMALL

이번 포스팅에서는 자동매매 관련 코드를 작성하다가 알게 된 Python에 강력한 Lib인 matplotlib를 이용하여 그래프를 출력하는 방법에 대해서 알아보려고 합니다. matplotlib는 Dataframe의 데이터 형태를 그래프로 출력해주는 좋은 시각화 도구입니다.

 

우선 저는 이 그래프를 보면서 실제 업비트의 차트와 동일하게 차트 곡선이 그려지는지 확인하였습니다.

(이렇게 검증해야 실제로 제가 생각한 보조지표의 기준으로 자동매매의 알고리즘을 적용할 수 있기 때문에 시도해보았습니다.)

from matplotlib import pyplot as plt

from src.main.indicator.macd import macd
from src.main.module.UpbitApi import get_ohlcv

if __name__ == '__main__':
    df = get_ohlcv("KRW-XRP", 'minute240')
    macd(df)
    plt.plot(df.index, df.macd, label='MACD Line', color='#EBD2BE')
    plt.plot(df.index, df.signal, label='Signal Line', color='#E5A4CB')
    plt.legend(loc='upper left')
    plt.show()

코드를 보면 get_ohlcv 함수는 기본 upbit의 분봉캔들을 조회하는 함수입니다. 데이터는 기본 200개의 DataFrame형태로 데이터를 Return 하고 있기 때문에 해당 데이터를 사용하여 차트를 그려보려고 합니다.

 

cross(df)라는 코드에서는 내부적으로 보조지표인 macd 곡선의 정보를 얻기 위해서 별도로 구현한 함수입니다.

아래코드는 macd지표를 구하는 기본적인 python의 코드입니다. ( 구글에서 찾다 보면 엄청 많이 조회됩니다 ㅎㅎ )

short_ma = ohlcv.close.ewm(span=12, adjust=False).mean()  # Short
long_ma = ohlcv.close.ewm(span=26, adjust=False).mean()  # Long

# Short - Long
macd = short_ma - long_ma
# MACD로 Signal 구하기
signal = macd.ewm(span=9, adjust=False).mean()

ohlcv['short_ma'] = short_ma
ohlcv['long_ma'] = long_ma
ohlcv['macd'] = macd
ohlcv['signal'] = signal

위 코드와 같이 ohlcv의 DataFrame의 데이터를 통해서 macd의 지표를 계산하여 DataFrame에 다시 정보를 추가하여 실제로 필요한 macd곡선과 signal 곡선의 데이터를 사용하여 그래프를 그리기 위함입니다.

그래서 다시 그래프를 그리기 위한 코드를 살펴 보겠습니다.

plt.plot(df.index, df.macd, label='MACD Line', color='#EBD2BE')
plt.plot(df.index, df.signal, label='Signal Line', color='#E5A4CB')
plt.legend(loc='upper left')
plt.show()

DataFrame의 macd정보와 Signal정보를 통해 Line을 각각 그릴 거고 Label과 곡선의 Color를 지정해줍니다.

legend함수는 그래프의 범례(곡선의 설명 같은 것)를 표시할 위치에 대한 정의입니다.

마지막으로 show() 함수를 통해서 그래프를 출력합니다. 그럼 실제로 실행하게 되면 다음과 같은 곡선을 얻을 수 있습니다.

XRP의 240분봉 차트

실제로 업비트의 리플 차트와 비슷하게 그려지는지 한번 비교를 해보았습니다.

업비트 XRP 240분동차트와 비교한 모습

대략적으로 곡선의 흐름과 교차점이 업비트 차트와 비교하니 동일한 형태로 그려지는 것을 확인할 수 있습니다.

기본적으로 차트를 그리기 위한 옵션은 좀 더 다양하게 있지만 저는 필요한 내용이 이 정도면 충분하기 때문에 이 정도로만 사용해서 검증을 해보았습니다. 이처럼 코인, 주식 등의 보조지표를 추출하여 알고리즘을 적용하기 위해서는 각 보조지표에 대한 구현을 하고 실제로 동일한 결과를 얻었는지 검증을 하기 위한 용도로 사용하면 좋을 것 같습니다. ( 저는 지금 코인 자동매매를 사용하기 때문에 이렇게 사용 중입니다 ㅋ)

 

다른 지표 분석 등 비교를 위한 데이터를 DataFrame에 저장하여 그래프를 출력하기에 좋은 방법인 것 같습니다.

반응형
LIST

댓글