현재 upbit에서 일부 암호화폐에 대하여 grid trading 중인데요.

매매 대상을 넓히는 것이 수익률에 좋을 것 같아서 ebest api로 주식도 함께 거래하도록 개발을 하였습니다.

이전에 만든 소스가 있어서 참고를 하려고 했는데, 너무 옛날에 만들 소스라서 그동안 개선한 사항들 update가 되어 있지 않아서 upbit에서 돌리는 소스를 기반으로 ebest에서도 동작할 수 있도록 수정하였습니다.

 

upbit api와 ebest api는 사용방법이 틀리기 때문에 upbit api 기반으로 ebest api를 변경한 wrapper를 하나 만들었습니다.

 

구조적으로 보면 아래 형태를 띕니다.

 

 

 

이건 class 개념을 알아야 사용할 수 있는데요. 일단 class를 안다고 가정합니다.

 

Exchange라고 하는 base class를 선언하고 Exchange를 부모 class로 갖는 Ebest, Upbit을 선언합니다. 그리고 관련 함수를 추가합니다.

 

이렇게 한 후 EBest를 사용하는 경우에는 EBEST라는 변수를 1로 설정하고 돌리면 전략 관련 코드는 수정할 필요없이 ebest용 api가 동작합니다. 전략 코드 내부에서는 exchange라고 하는 base class에 있는 함수만 사용하기 때문에 거래소가 어디인지 구분할 필요가 없습니다.

EBEST = 1
class Exchange:
   :
   :

class EBest(Exchange):
   :
   :

class Upbit(Exchange):
   :
   :

exchange = None
if EBEST :
   ebest = EBest()
   exchange = ebest
else :
   upbit = Upbit()
   exchange = upbit

do_trading(exchange)
 

 

특정 거래소만 사용하는 경우에는 이런 개념을 적용할 필요는 없습니다. 하지만 암호화폐 거래소도 거래량도 많고 변동성도 좋기 때문에 좋은 전략이 있다면 암호화폐 거래소에도 적용하지 않을 이유가 없습니다.

 

전략 자체가 워낙 간단하기 때문에 특별하게 언급할 필요는 없습니다만, 거래 여부를 확인하는 방법에 대하여 간단하게 기술합니다.

 

ebest api의 경우에는 거래가 발생하면 callback이 날아옵니다. 따라서 거래 여부를 실시간으로 확인이 가능합니다. 하지만 제가 사용한 원 소스가 upbit 기반이다 보니 거래 callback을 사용하지 않고 주기적으로 미체결 주문을 확인하여 거래 여부를 판단합니다.

 

코드 내부적을 관리해야할 정보입니다.

- 이전 주문 기록

- 거래가 발생한 경우 다음 주문 가격 결정

- 더 이상 매수 주문이 나가지 않는 가격 설정 (하락시 최소 매수가)

- 매도 후 다음 매수 주문을 낼 때 더 이상 매수 주문이 나가지 않는 가격 설정(상승시 최대 매수가)

 

이를 바탕으로 로직의 개략적인 흐름입니다.

 

초기화과정
while(1) :
  미체결 주문을 받는다.
  if 이전 주문과 차이가 있는가? :
       매수인지 매도인지 구분하여 다음 주문을 낸다.
 

흐름은 간단하지만 중간 중간 점검해야할 사항이 조금 많습니다. 흐름도에서는 단순히 "주문을 낸다" 이지만 주문시 이런 저런 조건이 있기 때문에 모두 check하고 주문을 내야할 상황인 경우에만 주문을 내야합니다. 이런 부분이 코드의 완성도를 좌우하며 조건에 따라 난이도가 틀립니다.

 

 

주말에 관련 개발을 하면서 발생했던 문제점들을 정리합니다. 향후 이와 유사한 전략을 개발하실 때 반드시 고려하시기 바랍니다.

 

1. 어떤 이유이건 매수 혹은 매도 주문이 실패할 수 있습니다. 이런 경우에 중복으로 주문이 나갈 수 있으므로, 이에 대한 대처 필요. 즉 주문을 하기 전에 동일한 주문이 있는지 반드시 확인

2. 가격에 따라 1 tick이 틀리다. 특히 1 tick이 변하는 구간에서는 주의해야한다. 예를들어 100,000원 이하는 100원 그 이상은 500원 단위

3. 장 종료시 일부만 거래가 된 경우에 다음날 거래시 반영(이 부분은 코드 난이도가 높기 때문에 수동으로 처리)

 

오늘 장이 급락하였을 때 일부 종목 매수하여 자동매매 시작하였습니다. 오늘 매도된 종목은 없고, 내일부터는 매수/매도가 반복될 듯 합니다.

 

grid trading은 박스권 중간 위치에서 매수를 시작하는 것이 좋습니다. 혹은 바닥에서 수량을 mutiple로 매수하고 시작하여도 되고요.

 

마지막으로 희망(?) 수익률도 정리해봅니다.

 

3.25% 구간으로 grid를 만든다고 가정합니다. 0.25%는 거래세. 따라서 실제 수익은 3% 정도이며, 한번 매매될 때 마다 9,900원 수익입니다. 2-3번 매매되면 치킨 한마리군요.

매매가 많이 될 수록 수익이 쌓이는 구조입니다. 이틀에 한번씩만 거래가 되어도 연 10%

 

물론 그리드 하방을 돌파하여 손실이 난 종목도 있겠죠?

보수적으로(?) 반은 손실이라고 가정하고 평균 20% 손실이면 -1백만원.. 이틀에 한번만 거래가 되면 even은 되겠군요.

 

결국 하방이 어느정도 막혀있는 박스권 종목을 잘 찾는 다면 좋은 전략이 될 듯 합니다.

아마도 지주사들, 금융사들, 고배당주들 정도?

 

 

반응형

설정

트랙백

댓글