손절 (損切, StopLoss, 스탑로스)은 손실을 차단 또는 절단한다는 뜻입니다.
거래에서 포지션을 가지고 있는 상태에서, 시장의 가격이 포지션과 반대 방향으로 움직이면 손실이 발생하게 됩니다. 그러한 손실을 어느 정도에서 중단시킬 것인가를 결정하고, 손실이 그 지점에 다다르면 포지션이 무조건 청산되도록 하는 것입니다.
자동 거래하기
이 글은 자동매매 봇을 만들고 그 간의 과정을 정리하고 또 수익에 대한 기록을 남기기 위해 작성하게 되었고
본격적으로 매매 봇에 대한 6 - STOP LOSS 기능을 추가 이야기를 시작하기 전에 나에 대한 잡담으로 먼저 시작해본다.
코인을 접한지도 1년이라는 시간이 다 되어간다.
코로나 이후 주식을 시작하며 한창 코스피가 박살난 그 덕분에 사는 종목마다 괜찮은 수익을 맛보고
친구 따라 미국 주식을 시작하며 재미를 보다가 GME 사태에 합류하게 되면서 단기간에 큰 수익도 보았다.
그 전까진 그래도 나름 분산투자도 하며 조심히 운영을 했다고 생각했으나,
단기간에 큰 수익으로 재미를 보고 나니, 나도 모르게 눈이 돌아가고 결국 몰빵을 하다 크게 잃어 보기도 했다.
그 뒤로 시작한 코인은 마찬가지로 3월 ~ 4월 사이에 나에게 수익을 안겨다 주었으나 또 한번 큰 수익에 목말랐던 나는
다시 한 번 몰빵을 하게 되고 4 ~ 5월 대폭락을 겪으며 계좌는 또 한 번 반토막이 나버리게 되었다.
그 뒤로 내가 감당할 수 있는 금액만을 남겨 두고, 소소하게 치킨값이나 벌자는 마음으로
천천히 코인도 굴려보고, 하나의 코인을 사서 존버 해보자는 마음으로 2달간 보유해서 수익을 낸 코인도 있었다.
그렇게 코인에 대해서 공부도 하게 되었고, 차트를 본다거나 보조지표가 무엇인지에 대해서도 알게 되었다.
그렇게 과거에 무지성으로 했던 매매를 반성하며 중간에 큰 수익도 내서 일부지만 앞서 잃은 손해도 메우고 있다.
문제는 이렇게 한 번씩 큰 수익을 볼 때마다, 자꾸 큰 수익에 대한 미련이 남는 게 가장 큰 문제였다.
그러다 보니 매도 시기를 놓쳐 더 적은 수익을 보거나 어떤 경우는 손절을 하고 팔아야 하는 경우도 생겼다.
그렇게 인생은 한방이 아니라고 매번 다짐하며 마인드 컨트롤하다 보니 내가 그렇게 하기 힘들다면
차라리 프로그램이 하게 하면 어떨까? 하는 생각이 들었고 이를 계기로 자동매매 봇을 만들게 되었다.
앞서 이야기했던 것처럼, "계속 큰 수익에 6 - STOP LOSS 기능을 추가 목말라하기보단 작은 수익이라도 꾸준히 낼 수 있도록 하는 것"이
매매 봇을 만들게 된 결정적인 계기이자 목표였다.
가장 쉽게 생각해서 수익을 내려면 싸게 사서 비싸게 팔면 된다.
그리고 나는 이를 위해 보조지표를 활용하기로 했고, 볼린저밴드와 이동평균선을 기준으로 테스트를 진행하였다.
가장 먼저 생각한 건 이렇다
"볼린저 밴드 하단선을 이탈하고 V자 반등을 할 때 매수해서 2~3%의 수익을 달성하면 시장가로 매도하자"
위 그림과 같이 5분 봉을 기준으로 볼린저 밴드 하단을 이탈하고 V자 반등을 하는 구간에 매수하도록 코드를 만들고
테스트를 진행했다.
결과는 생각보다 괜찮았다. 기억으론 한 4~5만 원 정도 수익을 냈는데, 여기서 문제가 하나 있었다.
위 그림처럼 아무래도 5분 봉을 기준으로 하다 보니 장기적으로 하락 중일 때는 내가 설정한 구간에 매수를 했다간
물리기 딱 좋았다는 것이었다.
아무튼 봇이 정상적으로 작동하고 있는 것은 확인했으니, 이제 로직을 조금씩 수정해야 하는 시점이 왔다.
중간중간 조금씩 수정은 했으나 결과적으로 이야기하자면 현재는 2가지 케이스를 모두 충족하는 경우에 매수를 하도록 진행했다.
- 1시간 봉 기준으로 볼린저 밴드를 이탈하는지 + @
- 15분 봉 기준으로 볼린저 밴드를 이탈하는지 + @
※ 이번 글에서는 간단하게 볼린저 밴드만을 기준으로 설명하겠다. [email protected]는 나중에 다시 한번 이야기할 것.
예시를 한번 보자, 위 차트를 1번 조건인 1시간 봉을 기준으로 먼저 확인하면
9시 10시 13시 3번 이탈하는 것을 알 수 있다.
그리고 이걸 다시 15분 봉을 기준으로 쪼개어 보면 아래와 같이 나오는데
9-9:15 2번의 기회와 3-3:45 3번의 매수 기회가 발생하게 된다.
여기서 말하고 싶은 것은, 1시간 봉 기준으로 이탈했다고 15분 봉 기준으로 다 이탈하는 것이 아니라는 것과
15분 봉 기준(14:45)으로 이탈을 시작했어도 1시간 봉 (14:00)은 볼린저 밴드 하단 아래 위치하지 않을 수 있다는 것으로
단순히 기준 하나만 보는 것보다 다른 조건을 함께 보는 것이 보다 좋은 매수 기회를 노릴 수 있다는 것이다.
여기에 나는 [email protected]로 이동평균선과, 단순히 봉 하나만을 보는 것이 아닌 전, 전전 봉 등을 함께 확인하여 매수를 진행시켜
볼린저 밴드 하단을 이탈할 때마다 매수하여 물리는 경우를 방지하고자 하였다.
※ 쉽게 이야기하자면 현재 봉이 볼린저 밴드 하단에 위치하였을 때 전전 봉의 이평선(1)도 볼린저 6 - STOP LOSS 기능을 추가 밴드 하단에
위치하였을 경우 매수를 하도록 설정한다면 9시 구간에선 매수가 발생하지 않을 것이고 15시 구간에서만
매수가 발생하였을 것이다.
그리고 앞서 반등할 때 매수를 하도록 했더니 저점 대비 어느 정도 올라야 매수가 발생하게 되어, 반등 상관없이 매수하도록 설정하였더니 그 전보다 훨씬 더 저점에 매수하는 것을 확인할 수 있었다.
그리고 당연히 위 로직도 모든 경우의 수를 다 대응할 순 없기 때문에 최대 매수 코인 개수를 설정하거나, 각 코인 당
최대로 매수할 수 있는 금액을 설정하는 등 여러모로 물리는 경우를 대비하기 위해 안전장치를 설정해 두었다.
그리고 확실히 분할 매수/매도를 하도록 하였더니 현재 3.1% 이상 수익 발생하는 경우 매도를 하도록 되어 있는데,
은근 급등에 얻어걸려 10% 수익도 발생하고 최대 40%대 수익이 발생한 적도 있었다.
최근 연이은 하락장에 당연히 물려있는 코인도 있다. 이럴 경우 남겨둔 시드를 활용해 손 매매로 물 태워 탈출할 수 있도록
유도하고 있고 오늘도 그렇게 몇 코인 탈출시켜 두었다.
그리고 아래는 어느 정도 수익을 보고 매도를 했는지 확인하기 위해서 간단하게 알림으로 받아 볼 수 있도록
텔레그램 봇을 활용해 메시지를 받도록 하였다.
※ 문제는 시장가 매도를 하다 보니 실제 수익은 한 틱 낮게 나온다. (그래서 일부러 3.1%로 했다)
코인 봇에 대한 이야기는 오늘은 여기까지 하고자 한다.
12.15 기준으로 약 25만 원 정도의 누적 수익이 발생했고, 물린 애들도 탈출하면 30만 원 이상의 수익이 가능할 것 같다.
%로 따지기엔 전체 금액의 일부만 굴리고 있고, 그 금액마저도 설정한 구간에 도달하는 코인이 얼마나 있냐에 따라 달라
투자 금액 대비 몇 % 의 수익이다 라고 말 하긴 애매한 것 같다.
단 지켜보니 한 번에 최대 300만 원 정도 매수를 진행했던 적이 있어 300을 기준으로 따지면 약 7~8% 수익이 되지 않을까 싶긴 하다.
지금 다시 읽어봐도 참 글을 못 쓰긴 했는데. 맥주 한 캔 하다가 갑자기 생각나서 그냥 끄적인 것으로
당분간 봇의 수익 경과를 지켜보다 다시 한번 글을 쓰고자 한다.
파이썬 코인 자동매매 봇 만들기#6 - STOP LOSS 기능을 추가
들어가며 2021.08.19 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#1 - pybitumb 모듈 설치하기 2021.08.21 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#2 - 24시간 변동률 정렬하기 2021.08.24 - [IT/..
이전글을 못 보고 오신분들은 순차적으로 글을 보시고 오시는것을 추천드립니다.
목표
X초 동안 Y% 상승한 종목을 시장가에 매수하고,
Z% 추가 상승하면 매도하고, A초 후에는 무조건 시장가에 매도한다.
이였습니다. 하지만, 이 로직의 문제점은 매수 매도가 너무 자주 일어나고, 손절(STOP LOSS)기능이 없어서, 잃고 매도하고 잃고 매도하는 상태가 지속이 되어서, 수익률이 현저히 낮게 측정되었습니다.
A초 동안 B% 상승한 종목을 시장가에 매수하고,
C% 추가 상승하면 매도하고, D% 하락하면 손절하고,
E초 후에는 무조건 시장가에 매도한다.
여기서 진행될 로직에서는 바로 "STOP LOSS" 손절 이라는 항목이 추가되게 됩니다.
STOP LOSS 란?
손절 (損切, StopLoss, 스탑로스)은 손실을 차단 또는 절단한다는 뜻입니다.
거래에서 포지션을 가지고 있는 상태에서, 시장의 가격이 포지션과 반대 방향으로 움직이면 손실이 발생하게 됩니다. 그러한 손실을 어느 정도에서 중단시킬 것인가를 결정하고, 손실이 그 지점에 다다르면 포지션이 무조건 청산되도록 하는 것입니다.
우리는 매도를 현재가 보다 높은 가격에 걸어둘 경우, 그 가격이 오게 되면 팔 수가 있으나, 매도가격를 현재가 보다 낮은 가격에 주문은 하면, 그 즉시 현재가격으로 거래가 되어 버립니다.
STOP LOSS 기능은 더 이상 손해를 입지 않기 위해서 내가 정한 가격이 현재가가 되어 버리면 현재가에 바로 그 즉시 매도를 하게 됩니다.
주식에서는 이 STOP LOSS 는 MTS 상에서 지원하는 APP은 없는거 같으며, 보통 HTS 상에서 지원하며, 이 마저도 HTS 를 켜두고 있어야 하는 것이 많습니다.
어차피 만들고자 하는 코인 자동매매 봇은 계속해서 실시간으로 모니터링을 하면서 해야 하므로, 이 기능을 넣으면 좋겠다는 생각이 들어서 해당 로직을 추가하여 코딩을 해보았습니다.
파이썬 코인 6 - STOP LOSS 기능을 추가 자동매매 봇 만들기#6 - STOP LOSS 기능을 추가 전체 추가
기존에 사용했던, 상승률 로직이라던지, 큰 구조는 아니고, 살짝씩 변수가 변경되어 전체 코드를 올립니다.
STOP LOSS 부분 코드 설명
1) STOP_LOSS 라는 변수를 하나 추가하고, 정해진 D 값을 지정해 줍니다.
2) 변동률이 STOP LOSS보다 작으면 자로 매도해 버립니다.
상수값을 찾아서 시뮬레이션해보기
10초 동안 3% 상승한 종목을 시장가에 매수하고,
3% 추가 상승하면 매도하고, -3 % 하락하면 손절하고,
10분 후에는 무조건 시장가에 매도한다.
시뮬레이션 결과
9/4일 22시 부터 9/5일 8시까지 약 10시간 수행한 결과입니다.
장중 최고 수익률 15.78% 까지 수익이 났으나, 결국에는 잦은 STOP LOSS 설계로 인하여, -51.37% 으로 마무리 되었습니다. ㅠ_ㅠ
시간당 수익률은 -5.13%
한시간에 5%씩 까먹다니, 역시 돈벌기 쉽지 않나 봅니다. ㅎㅎ
문제점 분석
상승 추세가 바로 하락 추세로 전환하게 되며, 잦은 STOP LOSS가 일어남으로 인하여, 손실이 누적되는것으로 판단됩니다. 결국 상승 추세에 대한 사기로직을 보완하여, 하루에 1번 매수주문을 하더라도 수익을 낼 수 있는 구조로 변경하는것이 바람직하다고 생각됩니다.
자동 거래하기
최근 주식 AI 프로그램들이 인기입니다.
대표적으로 AIM, 핀트, 파운트 앱이 있는데 돈 넣어놓고 버튼 하나만 콕 누르면 알아서 6 - STOP LOSS 기능을 추가 주식 매수와 매도를 다 해주는 편리한 앱들입니다.
코인도 이런 AI 자동봇 프로그램이 있는데, 바로 파이넥스입니다.
구글 플레이스토어에서 앱을 다운받을수도 있고, PC로 홈페이지에 가서 진행도 가능합니다.
위 주식봇들과는 달리 굉장히 사용이 불편합니다.
기본적으로는 업비트처럼 거래소가 메인입니다.
해외(싱가폴) 거래소이며 원화 입출금이 안되고, 국내 거래소에서 코인을 구매해서 파이넥스 거래소로 보내야 합니다.
3. 트론( TRC20), 이더리움( ERC20), BEP20, HECO 코인 중에서 하나 클릭 후, 입금 주소 복사를 해 줍니다.
해당 홈페이지에서는 트론 코인을 넣으라고 추천합니다.
트론은 업비트, 빗썸, 바이비트 등 어느 거래소나 있는 메이저 코인중 하나입니다.
업비트를 예로 들면 업비트에서 트론 코인을 30만원치 가량 구매해 줍니다.
(봇을 돌릴 수 있는 최저 금액이 30만원 이상이기 때문입니다.)
트론은 6 - STOP LOSS 기능을 추가 6 - STOP LOSS 기능을 추가 현재 시세 기준으로 70원~160원 사이입니다.
글쓴이는 최근 코인이 상승장이라 130원이라는 고점에서 구매했습니다.
4. 업비트 입출금 메뉴 클릭 -> 트론 코인 클릭 -> 출금하기 클릭 -> 출금 수량 지정 -> 확인 누르면 입금 주소를 복사하라고 나옵니다.
5. 파이넥스 거래소에 나와있는 입금 주소를 붙여넣기하면 입금이 이루어 집니다.
6. 글쓴이는 트론 30만원치를 사 입금을 했는데 시간이 흘러도 입금이 되지 않았습니다.
글쓴이는 USDT 트론 코인이 아닌 원화(한국/KRW) 트론 코인을 사서 입금했기 때문에 입금이 되지 않는 줄 알고 업비트 고객센터에서 취소를 요청하려 했는데, 30분 가량 지나니 입금이 되었습니다.
만약 문제가 생기면, 보낸 코인이 사라지는게 아니라 출금 대기중이라 뜨고 코인은 사라지지 않으니 실수한다고 해서 코인이 사라지는 일은 일어나지 않습니다.
7. 입금이 이루어 지면 파이넥스 거래소에서 해당 코인을 모조리 팔아버립니다.
트론 30만원치를 입금했든, 이더리움 30만원치를 입금했든 코인이 아닌 실제 달러로 봇을 돌릴 수 있기 때문입니다.
글쓴이는 입금시키자 마자 시장가로 전량 매도시켰습니다.
8. 거래소로 가서 이제 봇을 돌릴 수 있습니다.
거래 메뉴로 가서 오른쪽 코인을 클릭하면 봇을 만들 수 있습니다.
BTC늘 누르면 비트코인 거래를 하며, ETH를 누르면 이더리움 거래를 시작하는 듯 합니다.
다른 코인도 가능하지만 기왕이면 메이저 코인인 비트나 이더리움에서 돌리는게 좋지 않을까 합니다.
우리같은 초보를 위해 버튼 하나만 누르면 될껄 괜히 복잡한 느낌입니다.
한국인은 창조성과 다양성이 없는 민족이라 선택지가 많으면 괴롭거든요.
대표적으로 많이 쓰이는 봇이 교차거래, BTC 천지봇(비트코인 천지봇), ETH천지봇(이더리움 천지봇) 3개입니다.
주문생성을 누르고 금액 입력을 한 뒤 한번더 주문 생성을 누르면 봇이 자동으로 매매를 시작합니다.
파이넥스는 전 세계 거래소 순위를 6 - STOP LOSS 기능을 추가 확인해 본 결과, 파이넥스는 사용량 88위를 기록하고 있었습니다.
1위가 바이낸스이며 업비트는 22위입니다.
전 세계 100위안에 드는 거래소이니 먹튀 가능성은 6 - STOP LOSS 기능을 추가 매우 낮은 편이며, 홈페이지나 앱을 보면 한국인 직원도 있는지 열심히 이런 저런 일을 하는 모습을 볼 수 있습니다.
글쓴이는 교차거래를 봇을 이용하고 있습니다.
현재 일주일째 봇을 돌리고 있는데
아직 일주일째니 현재 단계에서 성과를 운운하기는 힘들어 보입니다.
그러나 무조건적인 수익을 안겨주지는 않으니 참고하시길 바랍니다.
참고로 글쓴이는 교차거래 봇을 이용중이지만, 다른 유저들은 천지봇을 가장 높히 평가했습니다.
글쓴이는 게임 자동사냥 돌리는 기분으로 재미로 돌리고 있습니다.
해당 봇이 이득을 안겨주면 리밸런스봇과 천지봇도 100만원가량 더 해볼 생각입니다.
AI 자동매매 프로그램은 하루, 이틀 단타용이 아니라 긴 호흡으로 바라보는 장투용입니다.
주식 자동매매 프로그램을 돌려본 사람들은 알겠지만, 주식봇도 처음에는 손실이 소폭 나는것 같다가도 어느 순간 보면 이득을 안겨주는 경우가 대부분입니다.
자동 거래하기
취미로 파이썬으로 이것저것 해보고 있는 사람입니다 ㅎㅎ
코인 변동성돌파 전략을 구현하기 위해 자동매매 API를 최근에 접해보았는데요,
필수 기초적인 내용을 정리해 보았습니다.
본격적으로 6 - STOP LOSS 기능을 추가 시작하기 앞서 준비단계는 아래와 같습니다 !
1. 업비트 Open API 신청하기
먼저 시작하기 앞서서, 업비트 Opne api 를 사용하기 위해선 Acess Key를 발급받아야 합니다
주소링크는 아래 더보기를 열어주세요
Open API 사용하기를 누르면 Access Key를 발급 받을 수 있습니다.
업비트 개발자센터로 가면 Open API 레퍼런스를 볼 수 있으니, 개발에 참고하시기 바랍니다.
이곳에서 본인이 원하는 기능을 체크하고, 보안을 위해 특정IP에서만 실행을 해줍니다.
(출금하기 등 일부 기능은 필수적으로 하게 되어있음)
발급받게되면, Access Key 와 Secret Key 가 생성되는데 이걸 메모장에 잘 저장해놓으시면 됩니다.
Secret Key는 앞으로 더이상 조회 불가능.
저장한 API Key를 저장한 문서는 암호화를 권고드립니다.. 유출되면, 자산에 피해를 입을 수 있습니다.
참고) 본인 IP 주소 확인하는법
저는 ipconfig 를 통해 확인한 IP주소를 넣었는데, 안되더라구요 ㅋㅋ
위 링크에서 본인 IP확인하셔서 넣으시는걸 추천드립니다.
2. 파이썬 필요 라이브러리
import pyupbit
import jwt
import uuid
import hashlib
from urllib.parse import urlencode
import requests
위의 라이브러리중 설치가 안된분들은 pip install 명령을 통해 설치해주시면 됩니다.
자 이제 준비는 완료되었고 자동매매에 필요한 필수 코드를 살펴보겠습니다.
3. 먼저 자동매매 Class 와 init 함수를 생성해줍니다.
다른 함수에서도 key에 접근할수 있도록 앞에 self. 을 붙여주었습니다.
4. 계좌 정보 불러오기
upbit.get_balances()를 통해 계좌정보를 불러올 수 있습니다.
원화부터 코인들 각각의 정보가 리스트안 딕셔너리 형태로 반환되는 걸 볼 수있습니다.
만약 내 계좌에 있는 특정 코인이나 원화 잔고를 알고 싶다면 아래와 같이 개별 조회도 가능합니다.
get_current_price 함수에 티커를 넣어주면 조회가 됩니다.
6. 매수/매도 주문하기
위 코드에서 매수는 리플을 100원 가격으로 10개 주문을 넣은것이고
매도도 마찬가지로 100원으로 10개 주문을 넣겠다는 의미입니다.6 - STOP LOSS 기능을 추가
위 코드에서 매수는 리플을 10000원어치 시장가로 구매하겠다는 의미고
매도는 리플을 20개만큼 시장가로 팔겠다는 뜻입니다.
위의 주문 코드를 print 해보면 아래와 같이 반환값을 조회할 수 있습니다.
여기서 'uuid' 값으로 주문을 취소할 수도 있고 나중에 체결상태를 확인할 수 있으니 아래와 같이 반환값을 저장해두는 것이 좋습니다.
0 개 댓글