지난 1편에서 기술한 대로 gopax에서 자동매매하기 프로그램을 완성하였다.
GOPAX에서 자동 매매하기
이 중 주문현황 기능은 적용하지 않고, 그냥 매수가 되면 매도 주문을, 매도가 되면 매수 주문을 넣었다. test 용으로 +-50원 정도에 자동 주문이 들어가도록 설정한 후 아침부터 돌려보고 있다. 점심 먹고 와서 확인해 보니 아래 사진과 같이 156회 정도 매매를 하고 있다.
개발 과정에 대하여 좀 더 자세하게 기술한다.
자동 매매 프로그램 흐름도
첫 글에서 적은 대략적인 자동 매매 흐름도이다.
for(영원히) {
if (체결) { # 1번 API
현재 주문현황을 가져온다. # 2번 API
매수 전략대로 매수 가격을 결정하고 체결된 수량만큼 매수 주문을 낸다. # 3번 API
}
wait(30초)
}
일단 주문과 체결내역을 가져오는 부분을 함수화하였다.
def getTrade() :
def order(cnt, amount, price, side, tradingPair) :
그리고 전체적인 흐름은 아래와 같이 약간은 복잡해졌다.
while(1) :
tradings = getTrade() # 새로운 체결 내역을 가져온다.
if ( 새로운 체결내역이 있으면) :
for i in range(len(tradings)): #체결내역을 하나씩 본다.
if ( 이전에 처리한 체결보다 새로운 체결이 있으면 ) :
if ( "EOS-KRW이 아니거나 체결수량이 1보다 적으면 ): # 0.xx로 주문이 쪼개지는 것 방지
무시
if (더 이상 새로운 체결이 없으면) :
break
if ( '매도' 주문이면) : # 매도한 수량만큼 정해진 가격에 다시 매수 주문
amount = tradings[i]['baseAmount'] # 매도한 수량만큼
price = tradings[i]['price'] - 50 # 판 가격에서 -50원
side = 'buy'
else : # 매수한 수량만큼 정해진 가격에 다시 매도 주문
amount = tradings[i]['baseAmount'] # 매수한 수량만큼
price = tradings[i]['price'] + 50 # 산 가격에서 +50
side = 'sell'
위에서 정의한 내용으로 주문을 한다.
# 신규 체결된 주문에 대하여 매수/매도 주문이 끝났으므로 10초간 휴식
time.sleep(10) # 10초간 휴식
자동 매매 프로그램 동작시킨 후 발견한 문제점들
막상 자동주문 프로그램을 돌려보니 아래와 같은 문제가 나타난다.
체결되는 주문의 양이 쪼개어져서 주문 수량이 1주로 수렴을 한다.
사거나 파는 사람이 수량을 맞추어서 주문하지 않기 때문에 10주 주문을 내어도 0.45주, 5주, 4.45주 이런식으로 분할 매도가 된다. 매도 후 그 수량만큼 매수를 하므로 주문이 자꾸만 쪼개어져서 1주, 2주 이런 식으로 주문이 들어간다.
대안) order id를 확인하여 원래 주문한 수량이 다 들어왔는지 확인한 후 다시 주문을 넣는다.주문체결 확인 후 다시 주문을 넣는데 약 9초 정도 걸린다. 그동안 호가가 변경될 수 있으므로, 좁은 범위의 주문은 수수료가 발생할 수 있다.
대안) 좀 더 넓은 범위로 자동 매매를 한다.
자동 매매 프로그램 개발 소감
수수료 캐쉬백 덕분에 자동매매의 가장 큰 걸림돌이던 슬리피지를 해소할 수 있어서 매매할수록 이익(?)이 나는 구조이다. 반면에 고팍스는 호가 공백이 너무 크고 매수/매도 수량이 적기 때문에 원하는 전략으로 사고팔 수가 없어서 어떤 전략을 적용하기는 어렵다.
이런 현 상황에서 가장 좋은 전략은 자동 박스권 매매이다.
본인이 예상하는 박스권을 설정한 후 매매를 시작하면 된다.
예를 들어 아래와 같은 단순한 전략을 적용하기에는 좋다.
- 매수 가격대비 +1000원에 매도하겠다.
- 매도가 되면 매도 가격에서 -1000원 가격에 매수 주문을 하겠다.
자동매매 프로그램이 돌고 있으니 또 다른 생각이 든다.
과연 수수료 이익(0.025%)을 보고 매매를 해도 되나?
즉 매수한 암호화폐 가격이 내려가면 큰 손해를 볼 수밖에 없다. 이 전략을 적용할 수 있는 암호화폐는 아래와 같은 움직임을 보여야 한다.
- 비교적 큰 박스권 움직임을 자주 보인다.
- 시간이 지나면 오른다.
1번 조건은 대부분의 암호화폐가 만족할 것 같다. 그런데 문제는 2번 조건이다. 과연 시간이 지나면 오르는 암호화폐가 있을까? 만약 그런 암호화폐가 있다면 그냥 사서 장기보유하면 된다. 골치 아프게 사고팔 이유가 하나도 없다.
음..
여기까지 작성하고 든 생각.
그럼 난 왜 이 작업을 한 걸까?
나도 모르겠다.
EOS에 대한 쓸데없는 믿음이랄까? 일단 믿고 EOS를 대상으로 자동매매 돌려본다.
이번 주말 동안 자동매매 프로그램 테스트를 더 해 본 후 +-1000원 전략을 적용해서 쭉 돌려놓을 예정이다.