크립토

[python] 이동평균선 데이터시각화 및 상승/하락 추세 판단 활용

코대장 2021. 5. 19. 00:15
반응형

이동평균선(이평선) 데이터 활용한 상승/하락

돈을 벌기위한 기초투자 전략은 바로 저점에서 사서(매수) 고점에서 파는(매도)일 것입니다.
하지만 그 누구도 언제가 저점인지, 고점인지 알 수가 없지요.
이번 포스팅에서는 이동평균선을 통해 시장 추세 판단에 활용하는 내용을 담으려고 합니다.
단, 절대적 지표로 삼을 수는 없으며 하나의 참고사항일 뿐입니다.
[중요] 모든 투자의 책임은 투자자 본인에게 있습니다.

2021년 5월 18일(화요일)
이더리움 차트 중 지표세팅으로 MA5(이동평균선 5일), MA10(이동평균선 10일) 표시해놓은 모습입니다.

출처: 업비트

출처: 업비트
그럼 업비트 오픈API 활용해 이동평균선 차트를 그려보고, 간략하게 상승장/하락장 구분을 해보겠습니다.
업비트 오픈API 사용을 위한 가입절차와 서비스키 생성등의 내용은 다음에 기회가 되면 다루고 일단 생략할게요!

소스코드

개발환경 : 주피터노트북
주피터노트북 화면너비를 넓게 해주는 코드입니다. 주피터노트북도 개발환경을 커스텀으로 꾸밀 수 있는데
해당 내용도 포스팅으로 소개해 드릴게요!

from IPython.core.display import display, HTML
display(HTML("<style>.container { width:80% !important; }</style>"))

기초라이브러리 import 해줍니다.
python 에서는 데이터시각화할 때 matplotlib 이라는 강력한 라이브러리가 있지만,
차트 그리기는 plotly 라이브러리를 사용합니다.
주식 HTS 차트에서 마우스 호버링 할때 바로바로 수치값을 보여주는 강력한 기능이 있쬬.

import pandas as pd
import pyupbit
import matplotlib.pyplot as ply
import plotly.express as px
import plotly.graph_objects as go
from datetime import datetime

이동평균선 계산을 위해 일봉데이터를 불러와 데이터프레임에 담습니다.
일자별 시가(open), 고가(high), 저가(low), 종가(close), 거래량(volumn) 데이터를 확인 할 수 있습니다.

df = pyupbit.get_ohlcv("KRW-ETH")
df.head()
df.tail()

데이터프레임(df)에서 종가만 Series로 가져와 rolling() 함수로 평균값을 계산해 줍니다.

# 5일 이동평균 계산
ma5 = df['close'].rolling(window=5).mean() 

# 10일 이동평균 계산
ma10 = df['close'].rolling(window=10).mean()

날짜도 컬럼 값을 매칭시키기 위해 reset_index() 함수를 사용합니다.

ma5 = ma5.reset_index()
ma10 = ma10.reset_index()
fig = go.Figure()
fig.add_trace(
    go.Scatter(x=ma5['index'], y=ma5['close'],
              name='이동평균선 5일')
)
fig.add_trace(
    go.Scatter(x=ma10['index'], y=ma10['close'],
              name='이동평균선 10일')
)
fig.update_layout(
    title_text = '종가기준 이동평균선 시각화',
    yaxis_tickformat = ','
)
fig.show()

추가적으로 현재가격 정보를 가져와 이동평균선과 비교를 통해 상승장/하락장에 대한 판단을 해보겠습니다.
이더리움 원화 가격을 얻고

price = pyupbit.get_current_price('KRW-ETH')

이동평균선 5일 데이터에서 전날 종가를 가져옵니다.

last_ma5 = ma5['close'].iloc[-2]

현재가격과 종가가격 비교를 통해 상승/하락을 구분해 보겠습니다.

if price > last_ma5:
    print('상승장 입니다.')
else:
    print('하락장 입니다.')

현재가격을 Scatter 함수를 사용해 하나의 점으로 표시해 보겠습니다.

fig = go.Figure()
fig.add_trace(
    go.Scatter(x=ma5['index'], y=ma5['close'],
              name='이동평균선 5일')
)
fig.add_trace(
    go.Scatter(x=ma10['index'], y=ma10['close'],
              name='이동평균선 10일')
)
fig.add_trace(
    go.Scatter(x=[datetime.today().date()], y=[price],
              name='현재가격')
)
fig.update_layout(
    title_text = '종가기준 이동평균선 시각화',
    yaxis_tickformat = ','
)
fig.show()


https://github.com/mskim8717/python-scripts/commit/2a38b060b0a27a10a4d39dd67bc4e194bcfe0f69

[가상자산] 이동평균선 데이터시각화 및 상승하락 추세 판단 활용 · mskim8717/python-scripts@2a38b06

Permalink This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. Browse files [가상자산] 이동평균선 데이터시각화 및 상승하락 추세 판단 활용 Loading branch information Show

github.com

이상. 끝.