안녕하세요. 두번째 글 입니다.
이동평균선 (Moving average)
주식이나 코인에서 많이 사용하는 보조지표중 하나로 만약 5일(단기)간의 평균 종가가 15일(장)간의 평균 종가보다 높아질때 골든 크로스(Golden cross) 라 하며, 가격이 상승할 가능성이 있습니다. 반대로 5일 이평선이 15일 이평선보다 낮아진다면, 데드크로스(Dead cross)로 가격이 하락할 가능성이 높습니다. 여기서 5일, 15일은 각각 단기, 장기의 의미를 두고 있는 값으로, 꼭 5일 15일 사용할 필요는 없습니다.
이동평균선은 엄연히 보조지표로, 100%의 확률을 갖고 있지는 않습니다. 그러므로 여러 자동매매 프로그램에서는 이평선과 같은 몇가지 보조지표를 추가하여 확률을 높이는 방향으로 자동매매 프로그램을 짜게 됩니다.
제가 생각하기에 대부분의 지표는 가격이 변동이 있는 후 반영되는 후행성 지표들이기 때문에, 자동매매에 있어선 이동평균선, Rsi, 거래량 이 3가지 지표들을 사용하는것이 좋다고 생각합니다. 이런 방식 또한 필자의 생각이니 여러분이 스스로 필요한 지표들을 만들어 사용하는 방법을 권장합니다.
다음은 pyupbit 를 사용하여 특정 코인에 대한 ohlcv (open, high, low, close, volume) 정보를 dataframe으로 불러오는 코드를 알아봅시다.
import pyupbit
df = pyupbit.get_ohlcv('KRW-BTC', interval="days", count=5)
print(df)
위의 코드는 KRW 시장에 있는 비트코인에 대해 5일간의 ohlv 정보를 나타냅니다. 코드 결과는 아래와 같습니다.
#결과
open high low close volume value
2022-05-20 09:00:00 38781000.0 39298000.0 37267000.0 37762000.0 5865.610376 2.252696e+11
2022-05-21 09:00:00 37798000.0 38253000.0 37558000.0 38037000.0 2813.648150 1.067794e+11
2022-05-22 09:00:00 38037000.0 39150000.0 37886000.0 38933000.0 3336.520707 1.285776e+11
2022-05-23 09:00:00 38933000.0 39220000.0 37209000.0 37436000.0 4947.221049 1.903346e+11
2022-05-24 09:00:00 37436000.0 37680000.0 37185000.0 37512000.0 1726.463709 6.465909e+10
만약 KRW 시장의 이더리움(ETH)의 15분간 총 10개의 ohlv에대한 정보는 아래와 같이 작성하면 됩니다.
df = pyupbit.get_ohlcv('KRW-ETH', interval="minute15", count=5)
다음은 실시간으로 골든크로스,데드크로스를 체크하는 예제를 만들어보겠습니다.
import pyupbit
import time
def get_ma(ticker,num): #num일간, ticker의 이평선
df = pyupbit.get_ohlcv(ticker, interval="days", count=num)
ma = df['close'].rolling(num).mean().iloc[-1] #종가를 사용하여 평균값 계산
return ma
while True:
try:
ma5 = get_ma('KRW-BTC',5)
ma15 = get_ma('KRW-BTC',15)
if ma5 >= ma15:
print('실시간 골든 크로스 지점입니다')
else:
print('실시간 데드 크로스 지점입니다.')
time.sleep(60)
except Exception as e:
print(e)
time.sleep(1)
위의 함수는 pyupbit로 불러온 ohlcv를 가공시켜 평균을 return 하는 get_ma() 함수입니다.
또한 while문을 사용하여 1분 간격으로 골든크로스 지점인지, 데드크로스 지점인지 프린트 해주는 코드입니다.
실제 자동매매 코드도 이와 비슷한 형태로 필요한 함수들을 만들고, 위의 while문에 print대신 특정 조건에 매수, 특정 조건에 매도하는 코드를 작성하면 완성됩니다.
'Python-Autotrade (Upbit)' 카테고리의 다른 글
파이썬(Python)-업비트(Upbit) Schedule를 이용한 특정 시간마다 업비트 거래대금 상위 n개 추출 (0) | 2022.06.26 |
---|---|
파이썬(Python) - 업비트(Upbit) 거래대금 상위 n개 실시간 조회 (0) | 2022.05.15 |