일전에 쓴 grid trading을 기반으로 주식 자동 매매를 돌리고 있습니다.

https://money-expert.tistory.com/74?category=781442 

 

[시스템트레이딩] 주식 grid trading

현재 upbit에서 일부 암호화폐에 대하여 grid trading 중인데요. 매매 대상을 넓히는 것이 수익률에 좋을 것 같아서 ebest api로 주식도 함께 거래하도록 개발을 하였습니다. 이전에 만든 소스가 있어서

money-expert.tistory.com

 

지난 6월 중순부터 계속 돌리고 있는데요.

중간 점검 차 현재 상태를 올려봅니다.

 

6월은 주가가 계속 내려가는 시기여서 평가손실이 발생하였으나 7월에는 매매가 어느 정도 이루어지면서 수익이 났습니다. 결과적으로 두달에 약 1.7% 수익이 발생하였습니다.

 

 

6/23일 부터는 kodex200도 매매 종목에 추가하였습니다. 그 이유는 거래세가 없기 때문에 grid를 좁게 가져가도 수익이 발생할 수 있기 때문입니다. 또한 kospi가 급등락을 반복하고 있어서 grid grading하기 좋은 종목으로 판단이 되었습니다.

 

현재 보유 종목은 총 27개이며 적당히 +- 상태를 유지하고 있습니다.

grid trading에서 수익이 많이 나오려면 매매가 많아야 합니다. 오늘까지 총 103회 매도가 되었습니다.

1회 투자금이 약 33만원. grid는 3.3%이므로 대략 1백여만원 매매 수익이 발생하였습니다.

현재 잔고 상태는 - 이지만 매매 차익 덕분에 +로 전환한 상태입니다. 

 

간단한 소회입니다.

- 종목 선택이 역시 중요하다. 하지만 영원히 하락하는 종목은 별로 없다. 즉 적절히 빠진 시점에 grid trading을 시작하면 결국 수익이 날 수 있다.

- 계속 빠지는 경우도 많다. 손실을 제한하기 위하며 grid 수를 제한한다. 최대로 살 수 있는 grid 수를 제한함으로써 지속적으로 우하향하는 경우에 손실을 제한할 수 있다. 현재는 grid 3개로 제한함(약 -10%)

- 매수 시작한 시점 이후 바로 상승하여 매수를 못한 경우도 있고, 한번 정도 매매하고 우상향한 경우도 있다. 이런 건 어쩔 수 없을 듯.

- 매수 종목이 많아야 매매가 자주 발생하는데, 종목을 늘리기 위해서는 투자금이 많이 들어간다. 적절한 투자 규모를 정하는 것이 필요하다. 증거금 관리가 중요한데 40% 증거금이 필요한 종목 위주로 포트폴리오를 구축하는 것도 좋다.

 

지금까지 운용해본 경험상 적당히 빠진 시총 높은 종목으로 grid trading을 하면 연 10% 정도는 나올 듯 합니다. 

 

한달에 한번씩 투자 상황을 정리해서 공유하겠습니다.

 

반응형

설정

트랙백

댓글

 

현재 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은 되겠군요.

 

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

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

 

 

반응형

설정

트랙백

댓글