호돌찌의 AI 연구소
article thumbnail

매매하는데 가장 기본적인 점은 특정 코인에 대해 차트 데이터들이 있어야 매매하는 데 있어야합니다. 이번 글은 티커와 특정 시간 데이터를 부르는 내용을 다루고자 합니다. 

 

 

데이터 부르기


pyupbit.get_ohlcv() 함수를 활용합니다. ohlcv 는 시가, 고가, 저가, 종가, 거래량을 뜻합니다. 사용하는 방법은 상당히 간단합니다. 티커와 구간을 입력하면 됩니다. 아래 코드는 원화마켓의 이더리움에 대해 일봉 데이터를 부르는 모습입니다. 

 

import pickle
import pyupbit

with open('./keypair/upbit_secret_key.pkl', 'rb') as k:
    secret_key = pickle.load(k)
    
upbit = pyupbit.Upbit(secret_key['access key'], secret_key['secret key'])

df = pyupbit.get_ohlcv('KRW-ETH', interval = "day")
df.head(5)

 

 

 

참고로 일봉뿐만 아니라, 1분, 3분, 5분, 1시간 등 더 짧은 데이터에 대해서도 데이터를 부를 수 있습니다. 더 디테일 하게 데이터를 불러보겠습니다. arguments는 다음과 같습니다.

- ticker : 암호화폐 티커

- interval : 시간 구간

- count : 총 몇개를 볼 것인지

- to  : 최대 출력 시간(YYYYMMDD HH:MM:SS 형태입니다)

- period : 요청 주기를 뜻합니다. 

 

df_15min = pyupbit.get_ohlcv('KRW-ETH',                  
                       interval = "minute15", 
                      count = 500,
                       to = '20220630 23:50:00',
                      period = 0.1)
df_15min

 

 

 

 

 

차트 그려보기


일봉 데이터에 대해서 그림을 그려보면 다음과 같습니다. 아래 글에서 사용하던 코드를 그대로 가져왔습니다. 

2021.09.10 - [Investment - Stock & Crypto/Common Sence] - 개별종목 지수편입 이벤트 스윙매매 (1)

 

3,5,10,20 이동평균선과 거래량을 추가로 구현한 내용입니다. 

df['MA3'] = df['close'].rolling(3).mean()
df['MA5'] = df['close'].rolling(5).mean()
df['MA10'] = df['close'].rolling(10).mean()
df['MA20'] = df['close'].rolling(20).mean()

index = df.index.astype('str') # 캔들스틱 x축이 str로 들어감

fig = plt.figure(figsize=(20,10))
top_axes = plt.subplot2grid((4,4), (0,0), rowspan=3, colspan=4)
bottom_axes = plt.subplot2grid((4,4), (3,0), rowspan=1, colspan=4, sharex=top_axes)
bottom_axes.get_yaxis().get_major_formatter().set_scientific(False) 

# 이평선
top_axes.plot(index, df['MA3'], label='MA3', linewidth=0.7)
top_axes.plot(index, df['MA5'], label='MA5', linewidth=0.7)
top_axes.plot(index, df['MA10'], label='MA10', linewidth=0.7)


candlestick2_ohlc(top_axes, df['open'], df['high'], 
                  df['low'], df['close'],
                  width=0.5, colorup='r', colordown='b')
# 거래량
color_fuc = lambda x : 'r' if x >= 0 else 'b'
color_list = list(df['volume'].diff().fillna(0).apply(color_fuc))
bottom_axes.bar(index, df['volume'], width=0.5, 
                align='center',
                color=color_list)

# 그래프 title 지정
top_axes.set_title('ETH', fontsize=22)
# X축 티커 숫자 20개로 제한
top_axes.xaxis.set_major_locator(ticker.MaxNLocator(10))
# X축 라벨 지정
bottom_axes.set_xlabel('Date', fontsize=15)

# ax.legend()
plt.grid()
plt.show()

 

 

 

추후 응용할 부분


분석이나 모델링을 하는데 있어서 데이터는 상당히 중요합니다. 그리고 전략을 만드는 것 보다 저장하고 데이터를 관리하는 것이 제일 어렵습니다. 저 또한 이러한 관리하는 부분 역량이 부족하여 생각은 있으나 실천을 하고 있지 않습니다. 하지만 이를 응용해서 하는 부분은 다음과 같습니다. 

 

1. 특정 시간에 코인 티커 데이터를 부른 후 특정 조건에 맞는 티커를 추출

2. 주기적으로 데이터를 불러 특정 조건에 맞는 경우 시그널 추출

 

조건이라고 하면 몇몇 지표가 맞는 경우를 뜻합니다. 1번은 주로 현물 거래에서 사용하고, 2번 다른 거래소 api를 활용하여 선물 거래에서 사용합니다. 추후에 이 부분에 대해서 한번 응용해보도록 하겠습니다. 

profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!