[워치봇] 암호화폐 시스템 트레이딩

in #kr6 years ago (edited)

https://www.watchbot.co.kr/


 1. 왜 시스템 트레이딩을 해야 하는가?

 시스템 트레이딩 하는데 있어서 가장 중요한 것은

내가 원하는 대로 전략을 설정하고, 언제든 적용할 수 있느냐는 것입니다.

어떤 툴을 쓸지 깊게 고민하기 보다는, 위의 조건이 맞는 툴을 쓰시면 됩니다.  

 암호화폐 시장에는 여러 가지 툴이 있습니다. 

 몇몇 분들은 자비를 들여 툴을 구매하거나, 사용 기간에 따라 비용을 지불하기도 합니다. 

또 몇몇 전문가 집단은 팀을 이루어 자신들이 원하는 툴을 개발하여 사용하기도 합니다.

결국 어떤 툴을 사용하게 되든, 그 툴을 이용하기 위해서는 노력과 비용이 들게 마련입니다.

그렇다고 비용을 아끼기 위해 신뢰할 수 없는 암호화폐 다단계 펀드에 소중한 돈을 이체하여

거래를 맡기기에는 감당해야 할 위험부담이 큽니다.

그런데 이런 고민을 해결해 줄 수 있는 툴 가운데 하나가 워치봇 입니다 


  제 눈에 가장 먼저 띈 것은 무료라는 점입니다. 공짜라는데 마다할 이유는 없죠. 

그리고 알맹이를 살펴보니 내가 원하는 지표를 세팅해서 자동거래를 맡기면  

컴퓨터를 켜 두지 않아도 24시간 자동으로 거래가 됩니다. 

컴퓨터를 꺼둘 수 있다는 건 최소한 전기료는 아낄 수 있다는 것이죠. 

개인적으로 아쉬운 점은 선택할 수 있는 지표의 종류가 제한적이라는 것이었지만, 

추후 지표를 다양화하고, 여러 지표를 복합적으로 설정할 수 있게 한다면, 

그 이후에는 거의 무한대에 가까운 경우의 수, 다시 말해 무한대에 가까운 전략 세팅의 

자유도를 갖게 될 수 있을 것 같습니다. 

 

 한편, 트레이딩 전략과 관련해서 주지할 점은 절대적인 전략이나 방법은 없다는 것입니다.  

시장은 항상 변하고 언젠가는 좋았던 전략도 더이상 통하지 않게 됩니다. 

따라서 수익이 나는 방법은 유지하는 한편, 손실이 나는 방법은 중단하는 것이 기본이며, 

이를 위해 좋은 전략을 가능한 많이 확보해 두고 최근에 수익 잘 나는 것을 꺼내 활용하는 것이 

중요하다고 할 수 있습니다.  


 다만 그 과정에서, 손매매의 경우 보통 많은 레버리지를 쓰게 되기 때문에 

순간적으로 수익이 날 때는 시스템 트레이딩보다 훨씬 많은 수익을 주지만 

틀릴 때는 그 정신적 데미지가 더 크고 습관 때문에 거래 전략을 수정하기 어렵습니다. 

반면에 시스템 트레이딩의 경우 현재 쓰고 있는 전략이 맞으면 계속 하고 

틀리면  중단 또는 수정하면 됩니다.  


 요약하면, 절대적인 좋은 전략은 없으며, 결과적으로 유효한 전략을 최대한 많이 확보해두고, 

상황에 따라 효과적일 수 있는 전략을 적용 & 검증 & 리뷰 & 변경하는 과정이  중요합니다. 

그리고 시스템 트레이딩은 위 과정을 진행하는데 최적화되었으며, 

따라서 시간적 / 심리적으로 개인 투자자에게 큰 도움이 될 수 있다고 볼 수 있습니다. 



2. 좋은 전략이란 무엇인가? 


좋은 전략은 수익이 나는 전략입니다. 

미래의 수익을 알 수 없으나 과거에 손실 나는 전략을 사용하는 사람은 없을 것입니다. 

헤지펀드의 HFT처럼 확률이 높은 전략을 개발할 수는 없습니다. 

알 수 있는 것은 과거부터 현재까지의 데이터입니다. 

과거 데이터가 길면 길수록 좋으나 안타깝게도 암호화폐 시장 데이터는 다른 금융상품에 비해 

역사가 길지 않은 편입니다. 

많은 거래 횟수에 대한 정보를 얻을 수 없습니다. 

따라서 과거에 우상향 하는 것도 중요하지만 전략을 트레이더가 원하는 대로 구성하고 

의미 있게 동작하는지 주의 깊게 지켜봐야 합니다. 

시스템 트레이딩 입장에서의 좋은 전략은 다음과 같습니다. 


     a. 다양한 시장 상황에서 대응된 충분한 거래 횟수

     b. 트레이더가 견딜 수 있는 ‘한 거래 당 최대 손실’

     c. 트레이더가 견딜 수 있는 ‘승률’

     d. 슬리피지를 견딜 수 있는 ‘평균 손익’

     e. 트레이더가 이해할 수 있는 ‘단순함’

     (복잡함을 이해할 수 있는 사람은 복잡하게 만들어도 됩니다.) 


MDD나 수익을 중요하게 생각할 수도 있지만 

이는 시간이 흘러감에 따라 모두 벗어나게 될 것이기 때문에 크게 고려할 필요는 없습니다. 


전략을 만드는 일은 시간과 비용이 들어갑니다. 

따라서 너무 많은 시간을 투입해서 전략을 만들게 되면 그 전략이 시장에서 

통용되지 않았을 때의 실망감이 배가 될 것입니다. 

결국 효율적으로 전략을 구성하고 적용하고 퇴출하는 것이 좋습니다. 

쓰이는 지표는 어떤 것이 중요하지 않습니다. 

어떤 전략 어떤 지표가 옳고 그르다는 논쟁은 시간 낭비입니다. 

결국 시장에서 통하는 지표가 옳고 그렇지 않은 것은 틀립니다. 

  소위 몇몇 전문가들이 말로만 선 긋고 하는 지표 등의 경우, 실제 슬리피지를 반영하여 

과거에 데이터에 기반하여 거래를 반복했을 때 수익이 날 가능성은 매우 낮을 수 있습니다.  

 더 나아가 수익이 나지 않았거나, 심지어 시뮬레이션조차 해보지 않고 뱉는 말일 가능성이 높습니다. 

슬리피지 / 거래비용을 반영한 과거 누적 수익률을 보여주면서 선 긋는 전문가를 보기 어려운 현실이 

이를 반증해줍니다.  


초기 시장은 매우 비효율적이고 특히 암호화폐 시장은 다른 주식/파생 여타 상품들에 비해 

걸음마 단계에 있습니다. 이런 초기 시장에서는 단순한 전략도 잘 동작하는 편입니다. 

따라서 단순 이평 크로스로도 수익이 발생하고 있습니다. 

다른 성숙된 시장에서는 찾아보기 힘든 결과입니다. 

이는 아직 기관이나 전문가들보다 개인들이 더 많이 참여하고 있다는 반증이기도 합니다. 

 초기 코스피 200 선물 시장, 주식 선물 시장, CSI300 선물 시장 등등의 

비교적 얼리 스테이지에 있던 시장에서 시스템 트레이딩으로 많은 부를 축적한 사람들이 존재했고, 

아마도 암호화폐 시장에도 존재할 것으로 생각됩니다. 

시장이 성숙하면 초기 시장에 잘 벌던 전략도 수익이 나지 않게 되고 

좀 더 복잡한 형태의 전략으로 진화해 가야 할 것입니다. 



3. 전략 평가 및 모니터링 


전략은 최근에 수익이 나면 좋은 전략 그렇지 않으면 나쁜 전략입니다. 

나쁜 전략이라고 과거에 수익이 나지 않았던 것은 아닐 것입니다. 

모든 전략은 과거에 수익이 나도록 최적화를 하기 때문입니다. 

다만 쓰고 있는 시점 또는 모니터링하고 있는 시점을 기준으로 최근 3개월 또는 그 이상의 기간 동안 

수익이 나고 있으면 좋은 전략으로 평가할 수 있고 그렇지 않으면 중단해야 합니다. 

거래 횟수가 많은 전략은 짧은 기간으로도 좋고 나쁨을 판별할 수 있고, 거래 횟수가 적은 전략은

 몇 개월이 걸릴 것입니다. 

그렇기 때문에 거래 횟수가 많은 전략으로 구성하는 것이 좋습니다. 

거래 횟수가 많다는 것은 전략의 특성에 따라 달라집니다만 최소한 일주일에 한 번 이상은 

발생하는 것이 개인적으로 좋다고 생각합니다. 

그러나 슬리피지 때문에 거래 횟수와 수익은 역의 상관관계입니다.  

즉 많은 거래를 하면 많은 거래 비용이 발생하게 되고 따라서 기대 수익도 적어지게 됩니다. 

전략의 성과는 수익, 승률, 평균 손익 등등이 서로 보상관계에 있습니다. 

어떤 한 가지 수치를 좋은 것을 선택하면 다른 것이 나빠집니다. 

결국 적당한 값을 선택해야 하는데 그렇기 때문에 전략이 좋고 나쁨의 판별을 인간이 하게 되고 

결국 인간이 하는 것 과도 같아집니다. 

최종적으로 이 전략을 쓸지 말지도 인간이 판단하게 됩니다. 

물론 전략이 수천, 수 만개가 되면 이를 딥러닝 또는 다양한 포트폴리오 매니징, 리스크 매니징 

프로그램을 통해서 결정하게 됩니다만 이 또한 인간이 만든 프로그램입니다. 

딥러닝의 경우 비선형으로 어떠한 결과를 뱉을지 알 수는 없으나 딥러닝으로 설계된 

포트폴리오 프로그램도 많은 시뮬레이션을 하고 인풋과 아웃풋을 인간이 가공하여 

원하는 결과가 나올 때까지 학습하기 때문에 인간이 하는 행위라고 볼 수 있을 것입니다. 

이전에도 언급했으나 쓰던 쓰지 않던 의미 있는 전략은 많이 확보할수록 좋고 지속적으로 

그 성과를 모니터링하다가 좋으면 쓰고 안 좋으면 퇴출하는 과정을 계속 반복해 나가는 것이 

시스템 트레이딩의 기본입니다. 



4. 전략의 개발 


워치봇 전략의 프레임은 크게 매수/매도/safety로 구성됩니다. 

선물의 경우 매도가 하락에 베팅하는 것이지만 현물의 경우 불가능하기 때문에 

매도=매수 청산 조건으로 생각하면 될 것입니다. 

safety는 매도 조건 이외에 익절/손절/기타 청산 조건을 의미합니다. 

일단 매수 조건을 만족하게 되면 진입할 것이고 그 이후부터는 어떻게 청산할 것인지가

 가장 중요하게 됩니다. 

매도 조건으로 구현하지 못하는 청산을 safety에 표현하게 되는 것입니다. 

매수 조건과 매도 조건은 대칭일 수도 있고 비대칭일 수도 있습니다. 

대칭이란 매수 조건의 반대에서 청산되는 것을 의미하고 비대칭이란 매수 조건과는 별개로 매도 조건을 구성하는 것을 의미합니다. 

상승장과 하락장은 특징이 다르고 현물 가격은 0 이하로 내려갈 수 없기 때문에 현실은 비대칭이나 이해하기 편하게 대칭으로 구성하는 편입니다. 

다른 이유는 매수/매도 조건을 따로 구성할 경우 변수의 개수가 많아져서 최적화하는데 시간이 너무 많이 소요되게 됩니다. 

물론 처음부터 합리적인 최적화 구간을 설정해서 비대칭 전략을 구성하면 불가능한 것은 아닙니다만 대칭으로 구성하면 전략 동작의 특징을 편하게 이해할 수 있을 것입니다. 

전략을 개발하는 프로세스는 


    a. 적당한 지표를 선택해서 백테스팅

    b. 슬리피지를 제외하고 수익이 나는지 손실인지 파악 

    c. 손실이 크다면 매수/매도 조건을 반대로 적용

    d. 슬리피지를 적용해서 백테스팅

    e. 평균 손익이 슬리피지를 견디지 못할 경우 필터를 추가해서 평균 손익을 증가 시킴

    f. 매수/매도 변수를 세밀하게 조정

    g. 청산 조건 추가 입니다. 


백테스팅을 하는 과정에서 변수에 따라 선택을 해야 하는데 이때 제일 먼저 보게 되는 것은 충분한 거래 횟수(암호화폐 시장 데이터가 적어서 거래 횟수가 충분히 나오지 않는 경우가 많음)와 최근 하락장에 어떻게 반응하고 있는지입니다. 

2017년 12월 이전에는 상승장이 길어서 매수 위주의 신호가 발생해도 수익이 났겠지만 이후 최근까지의 큰 하락장이 발생함으로 인하여 의미 있는 과거 데이터가 생겼고 이 하락장에서 손실을 최소화하고 있는지를 잘 관찰해 볼 필요가 있을 것입니다. 

비트 코인의 원가가 유가에 연동된다면 유가를 참고해서 전략을 구성할 수도 있습니다. 

이처럼 거래 상품 이외의 데이터를 참조 데이터라고 하는데 여러 가지 참조 데이터를 이용해서 전략을 개발하면 이 두 데이터 간에 상관관계가 사라지면 전략의 기능은 사라지게 됩니다. 

전략의 복잡도도 올라가게 됩니다. 

가격 그 자체만 가지고 전략을 만드는 것이 시간 대비 아웃풋이 가장 효율적입니다. 



5. 전략의 적용 


전략이 완성되었다면 이를 적용하는 일만 남았습니다. 

코인원 데이터로 최적화했다면 바이낸스에서는 수익이 잘 나지 않을 수도 있습니다. 

그러나 같은 코인이라면 큰 흐름에서 어떤 거래소이던 수익이 나는 것이 정상입니다. 

만약 한 거래소에서만 수익이고 다른 거래소는 손실이라면 어떤 원인 때문에 이런 현상이 벌어지는지 확인할 필요가 있습니다. 

한 거래소에서만 수익이 난다고 해서 잘못된 전략이라는 것은 아닙니다. 

전략을 적용할 때는 포트폴리오를 구성하는 것이 좀 더 안전합니다. 

즉 여러 전략을 여러 거래소 또는 여러 코인에 동시에 사용해야 포트폴리오가 되고 안전합니다. 

최근에는 모든 코인들이 비슷하게 움직이고 있으나 이전에는 BTC와 알트들은 서로 역의 상관관계의 특징을 보여서 포트폴리오를 구성하기 좋았던 시절도 있었습니다. 

같은 전략을 여러 거래소에, 여러 전략을 같은 코인에, 여러 코인을 같은 전략에 적용하는 일이 가능할 것입니다. 

이렇게 구성했을 때 어떤 결과가 나오는지 포트폴리오 프로그램을 이용해서 확인합니다만 이런 포트폴리오 조차도 최적화의 일부이기 때문에 큰 의미를 둘 필요는 없습니다. 

페깅된 USDT를 기준으로 하는 거래소와 원화를 기준으로 하는 거래소는 달러 환율에 따라 달라진다는 것도 인지하고 있을 필요는 있을 것입니다. 

최근까지의 달러 가치 하락으로 같은 수익이라면 원화로 거래한 것이 조금 더 유리했을 것입니다. 



6. 지표 공개 


앞으로 계속 의미 있다고 관찰되는 지표 값을 공개할 예정입니다. 

현재 버전의 워치봇에서 가장 사랑받는 MA Double의 경우는 다음과 같은 결과를 얻었습니다. 


Test Spec 

Tool : Multichart 8.0

Exchange : Coinone

Timeframe : 15 min

Slippage&Commission : 20000원

Initial Capital : 1000000원

Period : 2017.01.01~2018.03.16

Value : BTC/KRW


워치봇과 Multichart 시뮬레이션 차이는 다음과 같습니다. 


    a. [투입 자금] 워치봇 : 복리 <><> Multichart : 단리     

    b. [수수료&슬리피지] 워치봇: %로 차감 / Multichart : 고정 단위 차감 

따라서 두 툴의 수익률 차이가 많이 벌어집니다. 

워치봇의 수익률 계산식은 곱셈이고, Multichart 수익률 계산식은 덧셈이기 때문입니다. 

BTC 데이터는 기간이 길지만 두 툴의 거래 비용 차감 방식의 차이가 커서 Multichart에 적당한 비용을 반영하기 위해서 BTC 가격이 100만원 이상이고 거래량이 어느 정도 발생한 기간인 2017년부터 시뮬레이션 했습니다. 

15분 봉을 이용하는 이유는 1시간 봉에서는 거래 신호가 많이 발생하기 어렵기 때문에 통계적으로 의미 있는 결과를 얻기 위해 앞으로 15분 봉만 사용할 것입니다. 실 거래에서는 몇 분 봉을 사용하는 것은 미래의 결과에 아무런 영향을 미치지 않습니다.  

편한 분봉을 이용하시면 됩니다.   

 
if average(c,a1)>average(c,a2) then buy 1 contracts next bar at market;

if average(c,a1)</p>

1 contracts next bar at market;
 

 변수 값 전후에서도 peak를 치거나 몰려 있는 결과는 아닙니다.  


 Short Length는 50~75, Long Length는 100~145 사이에서 의미 있는 결과를 보입니다.  

(55, 130)의 경우 다음과 같은 결과를 보입니다.  

 단리로 28607000원의 수익이 발생했을 것이고 최대 손실은 852000원입니다.  

2017년 1월에 120만원 정도이고 2018년 3월이 890만원 정도이니 Buy&Hold 했으면 770만원의 수익이 생겼을 것입니다. 

단리가 아닌 복리로 투자했으면 어떤 결과가 나왔는지 확인해 보았습니다. 

수수료와 슬리피지의 합을 한번 거래시 0.5%가 발생한다고 가정하였습니다.  


 (55, 130) "lastBalance": 13870775, "earningsRate": 12.8708, "totalFee": 6911820, "tradeCount": 314, "from": "2017-01-01 10:00", "to": "2018-03-29 10:00", 

(65, 145) "lastBalance": 13800390, "earningsRate": 12.8004, "totalFee": 5548327, "tradeCount": 282, "from": "2017-01-01 10:00", "to": "2018-03-29 10:00", 

(65, 105) "lastBalance": 8130939, "earningsRate": 7.1309, "totalFee": 6311163, "tradeCount": 435, "from": "2017-01-01 10:00", "to": "2018-03-29 10:00", 


일단 존버보다는 높은 수익을 보입니다. 

그러나 드라마틱하게 보이지는 않습니다. 

시스템의 힘은 2018년 1월 1일부터 최근까지 하락장에서 어떤 결과가 나왔느냐 비교해 보면 알 수 있습니다. 

2018년 1월 1일 약 1850만원이던 BTC가 2018년 3월 16일 890만원 정도로 960만원 손실을 발생했습니다. 

그러나 위 Ma Double을 썼다면 


(55, 130) "lastBalance": 1208936, "earningsRate": 0.2089, "totalFee": 308468, "tradeCount": 52, "from": "2017-12-31 18:00", "to": "2018-03-29 10:00", 

(65, 145) "lastBalance": 1345386, "earningsRate": 0.3454, "totalFee": 289142, "tradeCount": 44, "from": "2017-12-31 22:45", "to": "2018-03-29 10:00", 

(65, 105) "lastBalance": 1339760, "earningsRate": 0.3398, "totalFee": 548054, "tradeCount": 79, "from": "2017-12-31 17:45", "to": "2018-03-29 10:00", 


20~30% 정도 수익이 발생했을 것입니다. 

위 수치로 ETH에 적용하면 어떤 결과가 나오는지 확인해 보면 다음과 같습니다. 


(55, 130) "lastBalance": 75509378, "earningsRate": 74.5094, "totalFee": 64917013, "tradeCount": 348, "from": "2017-01-01 13:15", "to": "2018-03-29 10:00", "lastBalance": 1251434, "earningsRate": 0.2514, "totalFee": 513463, "tradeCount": 62, "from": "2018-01-01 10:00", "to": "2018-03-29 10:00", 

(65, 145) "lastBalance": 64087007, "earningsRate": 63.087, "totalFee": 47359098, "tradeCount": 306, "from": "2017-01-01 13:15", "to": "2018-03-29 10:00", "lastBalance": 1225341, "earningsRate": 0.2253, "totalFee": 466834, "tradeCount": 60, "from": "2018-01-01 10:00", "to": "2018-03-29 10:00", 

(65, 105) ""lastBalance": 116868232, "earningsRate": 115.8682, "totalFee": 126260236, "tradeCount": 452, "from": "2017-01-01 12:15", "to": "2018-03-29 10:00", "lastBalance": 1298670, "earningsRate": 0.2987, "totalFee": 706327, "tradeCount": 90, "from": "2018-01-01 10:00", "to": "2018-03-29 10:00",  


 ETH가 2018년 1월 100만원에서 50만원 이하로 내려간 것에 비교하면 훨씬 좋은 성과를 보입니다. 

최근 코인들 간에 상관관계가 높아졌기 때문에 다른 코인에서도 같은 값으로 적용해서 과거에 수익이 남을 확인 했다면 해당 값을 동시에 적용하면 포트폴리오 효과를 얻을 수 있을 것으로 기대할 수 있을 것입니다. 

물론 다른 코인에 대해서는 다른 변수 값을 적용해서 시뮬레이션 해보면 더 좋은 결과를 찾을 수 있습니다만 대표 상품인 BTC를 기준으로 연구를 마치고 다른 코인에 대한 연구를 할 계획이니 기다려 주시면 감사하겠습니다.  


 [XRP] 

(55, 130) "lastBalance": 21656981, "earningsRate": 20.657, "totalFee": 13144098, "tradeCount": 246, "from": "2017-05-12 22:30", "to": "2018-03-29 10:00", ""lastBalance": 985953, "earningsRate": -0.014, "totalFee": 477531, "tradeCount": 72, "from": "2018-01-01 10:00", "to": "2018-03-29 10:00", 

(65, 145) "lastBalance": 19377185, "earningsRate": 18.3772, "totalFee": 9025723, "tradeCount": 208, "from": "2017-05-12 22:30", "to": "2018-03-29 10:00", "lastBalance": 1061145, "earningsRate": 0.0611, "totalFee": 385915, "tradeCount": 58, "from": "2018-01-01 12:30", "to": "2018-03-29 10:00",

(65, 105) "lastBalance": 21855128, "earningsRate": 20.8551, "totalFee": 15463469, "tradeCount": 326, "from": "2017-05-12 22:30", "to": "2018-03-29 10:00", "lastBalance": 1212272, "earningsRate": 0.2123, "totalFee": 697250, "tradeCount": 94, "from": "2018-01-01 10:00", "to": "2018-03-29 10:00", 


[BCH] 

(55, 130) "lastBalance": 6570853, "earningsRate": 5.5709, "totalFee": 4338888, "tradeCount": 170, "from": "2017-08-11 22:30", "to": "2018-03-29 10:00", "lastBalance": 691737, "earningsRate": -0.3083, "totalFee": 272618, "tradeCount": 62, "from": "2018-01-01 10:00", "to": "2018-03-29 10:00", 

(65, 145) "lastBalance": 6538782, "earningsRate": 5.5388, "totalFee": 3178313, "tradeCount": 156, "from": "2017-08-11 22:45", "to": "2018-03-29 10:00", "lastBalance": 929121, "earningsRate": -0.0709, "totalFee": 257502, "tradeCount": 52, "from": "2018-01-01 10:00", "to": "2018-03-29 10:00", 

(65, 105) "lastBalance": 9984103, "earningsRate": 8.9841, "totalFee": 8079279, "tradeCount": 244, "from": "2017-08-11 22:45", "to": "2018-03-29 10:00", "lastBalance": 807382, "earningsRate": -0.1926, "totalFee": 420468, "tradeCount": 84, "from": "2018-01-01 14:00", "to": "2018-03-29 10:00",  

Sort:  

@watchbot, welcome and congratulations on making your first post! I gave you a $.02 vote! If you would be so kind to give me a follow in return that would be awesome!

Coin Marketplace

STEEM 0.17
TRX 0.15
JST 0.028
BTC 58391.36
ETH 2348.06
USDT 1.00
SBD 2.36