매매하는데 가장 기본적인 점은 특정 코인에 대해 차트 데이터들이 있어야 매매하는 데 있어야합니다. 이번 글은 티커와 특정 시간 데이터를 부르는 내용을 다루고자 합니다.
데이터 부르기
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를 활용하여 선물 거래에서 사용합니다. 추후에 이 부분에 대해서 한번 응용해보도록 하겠습니다.
'Programming > Crypto' 카테고리의 다른 글
AWS 서버에 파일 전송하기 (FTP 프로그램 활용하기) (2) | 2022.07.18 |
---|---|
AWS EC2 서버 설정하기 (0) | 2022.07.17 |
pyupbit 활용 - 계좌 잔고 확인하기 (0) | 2022.06.26 |
pyupbit 활용 - 코인 매수/매도하기 (1) | 2022.06.15 |
pyupbit 활용 - 코인 정보 및 현재가/매수/매도 호가 가져오기 (0) | 2022.06.12 |