파이썬 + 빗썸 API 로 코인 자동 매매 프로그램 만들기
목차
파이썬으로 비트코인을 자동매매 해보자
이번 글은 제 입장에서도 꽤나 흥미로운 주제가 될거 같습니다. 지금까지 프로그래머로 직장 생활을 하고 여러 개발 프로젝트 및 개발을 진행했지만 주로 “임베디드 시스템” 위주로 진행을 한 까닭에 실생활 활용도는 영 떨어졌던거 같습니다.
예를 들어 “통신 장비” 가 우리 집이나 가정에서 사용되지는 않는다는 뜻이지요. 제가 다녔던 회사들의 제품들은 주로 “B2B(기업간 거래)” 제품이기 때문에 일반 사람들이 들으면 낯선 제품들이 대다수였습니다.
임베디드 시스템 개발에 흥미나 재미는 있지만 실생활 활용은 떨어지기 때문에 최근에는 “웹/앱” 같은 실생활 위주의 개발에 대해 관심이 부쩍 많아졌습니다. 이쪽 분야에 대한 실제 경력은 없지만 지금까지 나름 취미로 꾸준히 접근은 하려고 했던거 같습니다.


그 중에 대표적인 취미 개발은 “파이썬의 활용” 입니다. 파이썬은 현재 IT 시장에서 꽤나 인기있는 언어 중에 하나입니다.
스크립트 언어이면서 쉬운 문법과 엄청나게 많은 라이브러리를 제공하기 때문에 어플리케이션 분야에서 많은 사용자를 확보한 언어중에 하나입니다. 제가 처음 접한 것은 대략 10년전쯤인데 처음엔 생소했지만 지금은 취미로 개발을 틈틈히 할 정도로 잘 활용을 하고 있습니다.

현재 파이썬은 “AI 분야” 에서도 꽤나 잘 활용되는 언어입니다. 대량의 데이터를 처리하기에 적합한 언어로 자리매김 하고 있어서인지 AI 관련 분야에서도 파이썬 개발자를 채용하는거 같아 보이는군요. 파이썬만 잘 해도 관련 업종에 취업이 가능할거 같습니다.
그만큼 파이썬은 꽤나 흥미롭고 매력적이며 활용도가 높은 프로그래밍 언어입니다. 저 개인적으로도 프로그래밍을 처음 시작할 때 “파이썬” 으로 시작하는 것을 추천드린바 있습니다.
이전에 파이썬 활용 관련하여 “쿠팡파트너스 API 활용” 이나 “트위터 API 활용” 등의 주제로 글을 올린 적이 있습니다. 이들은 각 플랫폼 회사들이 제공하는 API를 파이썬으로 호출하여 나만의 프로그램을 만드는 것에 중점을 두고 있습니다.
트위터 API는 이용료를 지불해야 사용하는 것으로 정책이 바뀌어서 현재는 사용을 안하고 있지만 쿠팡파트너스 API는 현재도 제가 잘 활용을 하고 있는 중입니다. 이처럼 파이썬으로 실생활을 좀더 편리하게 해주는 “나만의 컴퓨터 비서” 를 만드는게 가능합니다.
그렇게 생각한 나만의 프로그램이 “비트코인 자동매매 프로그램” 입니다.
가상화폐 거래소에서는 API를 무료로 제공한다
요즘 주식과 부동산 외에도 사람들이 가장 많이 알고 있는 “투자 상품” 이 있습니다. “가상화폐” 입니다.

가상화폐중에서는 가장 유명한게 “비트코인” 입니다. 비트코인은 그 값어치가 계속 올라서 현재 1억원을 훌쩍 넘는 가치를 지니고 있습니다. 이 외에도 이더리움, 리플, 솔라나, 테더 등의 가상화폐들이 국내외에 각 거리소에서 거래가 됩니다.
즉 “주식 거래” 와 매우 비슷한데요, 주식과 다르게 24시간/365일 내내 거래소가 열려 있고 이들 거래소에서 수시로 거래하는게 가능합니다. 그래서 한창 가상화폐 시장이 활황일때는 투자자들이 잠못자고 시세창을 들여다 보는 경우가 많았습니다.
따라서 이런 투자자들의 수고스러움을 덜하기 위해 “나만의 매매 프로그램” 에 대한 관심이 생겼던거 같습니다. 저 또한 현재도 비트코인을 비롯한 가상화폐에 대해 관심을 가지고 있으면서도 수시로 시세창을 들여다보는 것에 대해 불필요한 에너지 낭비라고 생각을 했었습니다.
최근에 IT 시장에서는 AI 에 대한 관심이 급속도로 늘어나는 바, 가상화폐도 뭔가 스마트하고 내 손길이 닿지 않아도 알아서 매매를 해주는 것이 필요하다는 생각이 들더군요. 주식 시장에서도 일정 조건이 되면 알아서 매수/매도를 하는 “프로그램 매매” 같은 거 말이지요.
이런 사용자나 투자들의 요구 사항은 이미 있어와서 인지, 주식 프로그램뿐만 아니라 가상화폐 거래소에서도 사용자들이 직접 호출하여 사용할 수 있는 “API” 들을 제공하고 있습니다. 국내 1~2위 가상화폐 거래소인 “업비트”,”빗썸” 등지에서도 API를 통해 거래소에 상장되어 있는 가상화폐들을 매매하는게 가능합니다.
따라서 해당 거래소의 계정만 있으면 별다른 비용 지불없이 무료로 API 들을 사용하는게 가능합니다. 업비트, 빗썸 모두 API 들을 제공하고 있어서 해당 거래소에 가입 및 API 신청만 하면 됩니다.
이런 좋은 기회를 놓치지 싶지 않아서 저는 거래소에 가입한 후 API 들을 활용하여 현재 “나만의 매매 프로그램”을 구동중입니다. 이번 글에서는 관련 내용에 대해 서술해 볼까 합니다.
빗썸 API 를 통해 자동매매를 하는 이유?
참고로 저는 “업비트 API” 와 “빗썸 API” 를 동시에 사용중인데요, 두개를 다 사용해 보고 나서 빗썸 API 를 언급한 이유는 다음과 같습니다.
- 거래 수수료가 저렴합니다(0.04%, 빗썸 API를 쓰는 가장 큰 이유)
- 거래 금액에 따른 등급제로 등급에 따라 거래 포인트 제공 (업비트에는 이런 혜택이 없음)
- 출석 체크에 따른 포인트 제공 (업비트에 없음)
- 거래 금액이 비례해서 룰렛 포인트 뽑기 혜택 제공 (업비트에 없음)
- 원화 예치금 수수료를 하루 단위로 지급 (업비트는 분기마다 지급)



일단 거래 수수료가 업비트에 비해 조금 더 쌉니다. 국내 가상화폐 거래소들은 가상화폐 거래에 따른 수수료를 부과하는데 업비트(0.05%)에 비해 0.01% 싼 편입니다. 0.01%가 별거 아닌거 같아 보여도 거래 금액이 커지고 매매 횟수가 늘어나면 무시할 수 없는 금액입니다.
또한 빗썸에서는 거래 금액이나 등급이 비례하여 지급하는 “포인트” 가 있습니다. 이 포인트는 “1 포인트 = 1원” 이기 때문에 포인트가 쌓이면 쌓일수록 내 수익이 늘어나는것 같은 효과를 누릴 수 있습니다.
참고로 빗썸에서는 출석체크나 시세 맞추기, 룰렛 뽑기 등의 기능으로 포인트를 추가로 지급하기 때문에 업비트에 비해 추가 수익을 누릴 수 있습니다.
추가로 빗썸은 원화 예치에 따른 예치금(은행 이자와 비슷)을 2.2%(세전) 으로 지급하는데 하루 단위로 지급하기 떄문에 저는 개인적으로 이 부분이 맘에 드는 부분이었습니다(하루 단위로 수익이 늘어나는 느낌)
반면에 업비트는 이런 포인트 지급 제도가 없기 때문에 상대적으로 빗썸이 제게는 좀더 나은 혜택을 제공하는거 같아 보이는군요. (업비트는 국내 1위 사용자의 거래소라 그런지 이런 혜택들이 없습니다)
물론 거래소의 선택은 당신 마음입니다. 저는 단지 빗썸의 혜택이 더 나아서 사용중이고 이번 글에서도 빗썸 API로 설명을 드려볼까 합니다.
빗썸 API 와 파이썬으로 가상화폐 자동매매를 어떻게 한다는 걸까?
그렇다면 빗썸 API 를 어떻게 파이썬으로 호출하여 가상화폐 자동매매 프로그램을 개발할 수 있을까요? 간단히 그림으로 설명드려 보겠습니다.

빗썸에서는 자사의 API를 “REST API” 형태로 제공을 하고 있습니다. 따라서 이 API를 REST API 형태로 get/set 하면 됩니다.
이때 API 를 호출하기 위해서 파이썬 코드에서 빗썸 서버로 REST API 형태로 데이터 포맷을 만들어 보내줘야 하는데 이 부분은 걱정할 필요가 없습니다. 이미 만들어진 빗썸 파이썬 라이브러리나 REST API 파이썬 라이브러리를 사용하면 간단합니다.
물론 직접 REST API 호출 코드를 만들어 보는 것도 꽤나 흥미로운 일입니다. 저는 일단 시간을 절약하기 위해서 공개되어 있는 빗썸 API 파이썬 라이브러리를 사용해 보기로 했습니다. (이 부분은 아래에서 설명합니다)
나만의 자동매매를 위한 PC or 서버
빗썸 API + 파이썬으로 자동매매를 하기 위한 준비물은 “24시간 365일 자동매매가 가능한 PC 나 서버” 입니다. 위에서 언급했듯이 가상화폐는 24시간 365일 매매가 가능하므로 이에 걸맞는 365일 내내 켜놓을 수 있는 PC 나 서버가 필요합니다.
일단 3가지를 예를 들어보겠습니다.
- 집에 사용하지 않는 PC 를 활용한다.(혹은 라즈베리파이)
- 집에 나스가 있다면 나스를 활용한다.
- 클라우드 서비스(예 AWS 라이트세일 등)를 활용한다.
이 중에서 가장 추천드리는 건 “클라우드 서비스” 를 이용하는 겁니다. 그 이유는 “안정성” 때문입니다.

전 이미 “AWS 라이트세일” 을 사용중인데 이 서비스를 사용하는 가장 큰 이유가 바로 안정성 때문입니다. 특히 AWS 라이트세일 같은 클라우드 서비스는 저렴한 가격대비 안정성이나 하드디스크 용량, 트래픽 용량등을 넉넉히 제공하기 때문에 만족도가 높은 편입니다.
특히나 “클라우드 서비스” 는 가상화폐 매매같은 24시간/365일 돌리는 프로그램의 성격에는 적절합니다. 가장 큰이유가 “네트워크 이상” 이나 “전원 차단” 같은 예외 상황에 대처가 편리하기 때문이지요. 이런 클라우드 서비스는 서비스 제공회사에서 안정성을 최우선으로 여기기 때문에 갑자기 전원이 나가거나 네트워크 이상이 발생할 확률이 매우 낮습니다.
하지만 저는 현재 클라우드 서비스를 사용하지 않습니다. 집에 있는 “시놀로지 나스” 에 도커를 구동하여 사용중입니다.

관련 글은 위 링크에서 확인하실 수 있습니다.
나스를 통해서 구동하는 이유는 나스를 24시간 돌려놓기 때문입니다. 또한 가상화폐 자동매매 프로그램이 대량의 데이터 처리나 트래픽을 요구하는 프로그램이 아니기 때문에 나스의 도커를 통해서도 충분히 구동이 가능합니다.
대신에 집에서 구동하는 나스는 “네트워크 이상” 이나 “전력 차단”에 매우 취약합니다. 저 또한 지금까지 가상화폐 프로그램을 나스로 구동하면서 집에 형광등을 수리하러 왔던 수리기사에 의해 전원차단이 되버리는 바람에 나스 구동이 중지가 된적이 있습니다.
따라서 이런 상황 때문에 “클라우드 서비스” 로 이전을 고민중입니다. 아무래도 가상화폐 매매 도중 수익 중에 전원이 차단되버린다면 손실이 발생할 가능성도 있기 때문이지요.
이 외에 만약 집에 나스를 구동하기 어렵다면 집에 남는 PC 나 “라즈베리파이” 같은 오픈 하드웨어를 이용해도 됩니다. 저는 집에서 개인 PC 에 gitea 를 구동하여 사용중인데 큰 문제없이 사용을 잘 하고 있습니다.

물론 개인 PC 에는 “리눅스”를 설치하여 사용중입니다. 이 외에도 “라즈베리파이” 같은 리눅스 기반의 오픈 하드웨어를 가상화폐 자동매매 머신으로 이용해도 괜찮습니다.


최근에 출시된 “라즈베리파이 5” 도 꽤나 괜찮은 성능을 지니고 있고 라즈베리파이 외에 대체품인 오픈하드웨어들도 가상화폐 자동매매 머신으로 사용하기 괜찮습니다. (예 오렌지파이)
따라서 가상화폐 자동매매 머신은 초기에는 PC나 라즈베리파이, 나스 등으로 구동했다가 어느정도 안정화나 수익이 발생한다면 “클라우드 서비스” 로 이전을 해도 될꺼 같다는 생각이 듭니다. 처음부터 굳이 비용이 지불되는 클라우드 서비스를 이용할 필요는 없을 테니깐요.
OS는 리눅스를 추천하는 이유
자동매매를 개발하기 위해서 사용하는 언어는 “파이썬” 입니다. 파이썬은 윈도우즈 뿐만 아니라 리눅스, 맥 등지에서도 자유롭게 사용할 수 있습니다.
그런데 OS를 리눅스를 추천하는 이유는 무엇일까요? 일단 범용성이 가장 좋습니다. 우리가 평상시에 가장 많이 사용하는 OS 인 “윈도우즈” 의 경우 Windows 10 은 올해 업데이트가 종료되고 Windows 11 의 경우에는 워낙 무겁고 라즈베리파이 같은 오픈하드웨어에 설치하여 사용하는게 불가합니다.
특히 Windows 11 의 경우에도 PC 사양이 꽤 높아진 걸을 볼 수 있는데, 이럴때 집에서 안쓰는 구형 PC들은 Windows 11 을 설치하는게 어렵습니다. 즉 자동매매 머신의 운신 폭이 줄어듭니다.

저도 현재 시놀로지 나스에서 도커를 통해 “우분투 20.04” 로 자동매매 프로그램을 구동중입니다. 메모리가 2GB 여도 현재까지 구동에 큰 문제가 없습니다.
즉 한정된 자원으로 자동매매 머신을 구축하려면 OS는 리눅스만한 게 없다는 뜻이 됩니다. 그래서 리눅스 사용을 추천드립니다.
만약 리눅스에 익숙치 않으시다면 이참에 배워보시는건 어떨까요?^^
빗썸 API 신청하기
지금까지 빗썸 API로 자동매매 프로그램 구현을 위한 개념과 구동에 필요한 머신에 대해 알아봤습니다. 그럼 빗썸 API 를 호출하여 자동매매 프로그램을 구현하기 위해 빗썸 API를 신청해야 합니다.
여기서 빗썸 회원 가입 절차는 생략하도록 하겠습니다.(만약 빗썸 회원이 아니시라면 빗썸 회원은 각자가 알아서 가입하세요^^)
API 신청을 하려면 모바일에서보다 PC 웹에서 접속이 필요합니다.

PC에서 빗썸 홈에 접속 후 로그인 을 해주세요. 오른쪽 상단에 보면 로그인 버튼이 있습니다.

로그인 후 고객지원 메뉴에서 “Open API” 메뉴가 보일겁니다. 요걸 클릭해 줍니다.

빗썸 API 를 발급받으면 “API Key” 형태로 발급이 됩니다. 이걸 발급받기 위해 “API KEY 발급 페이지” 로 이동하면 됩니다.
여기서 Private API 는 내 빗썸 계정의 개인정보 데이터를 호출할 수 있는 API를 의미합니다. (예를 들면 내 계정의 원화 자산 조회, 매수, 매도 등등)

그런다음 위의 그림과 같이 내 계정의 계정 정보가 나타나는데 여기서 내 이름을 클릭합니다.

그럼 위와 같이 “API 관리” 메뉴가 보입니다. 여길 클릭해 봅니다.

그럼 위의 그림과 같이 API 관리 화면이 나타납니다. 여기서 API 활성 항목을 선택해 주는데 위의 그림과 같이 “출금 조회/출금하기/입금조회/입금하기” 등은 활성해 줄 필요가 없습니다. 그 외에 자산조회/주문조회/주문하기 정도만 선택합합니다. (내 계정의 해킹 염려가 있으므로 만약을 대비해서 입니다)
그리고 바로 하단에 “IP 주소 등록” 을 해 줍니다. 여기서 IP 는 내가 구동할 PC나 서버의 IP을 입력해 주면 됩니다. IP는 만약 공유기를 사용한다면 가상 IP(내부 IP) 가 아닌 공유기의 WAN IP를 입력해주면 됩니다. 만약 IP를 한개만 입력한다면 공유기로 연결된 디바이스 외에는 API의 사용이 불가합니다. 이럴 경우에는 다른 장소의 IP를 추가로 입력해 주면 됩니다.
그럼 다음에 오른쪽 상단의 동의 항목에 모두 체크 합니다. 그런 다음에 “API Key 생성” 버튼을 누르면 되겠습니다.

그러면 위와 같이 API Key 가 발급되었다는 메시지가 나타납니다. 여기서 주의할점은 필히 “API Key” 와 특히 “Secret Key” 를 잘 복사해서 저장을 해놔야 한다는 점입니다. 특히 Secret Key 는 API 신청 시에만 알 수 있기 때문에 만약 여기서 해당 키 값을 저장해 놓지 않으면 해당 API Key 는 사용이 불가합니다. (만약 Secret Key 를 모를 경우 해당 API Key 는 삭제하고 다시 발급해야 함)
따라서 API Key 및 Secret Key 는 확인 후 나만의 공간에 꼭 저장해 놓으셔야 합니다. (외부 유출도 특히 주의해 주세요)

API Key 가 정상적으로 발급되었다면 위와 같이 API Key 발급 내역에 나타납니다. 해당 키는 유효기간이 1년이므로 1년 후에는 다시 재 발급 하면 됩니다.
API 신청이 완료되었으면 이제 파이썬으로 직접 나만의 자동매매 코드를 구현할 차례입니다.
파이썬으로 빗썸 API 호출하여 나만의 자동매매 코드 구현
자 이제 여기서 부터는 이 글을 읽으시는 분들께서 직접 해야 하는 부분이 많습니다. 일단 기본적인 코드만 소개를 해 드리고 나만의 자동매매 코드를 구현하는 것은 여러분의 몫이 되겠습니다.
빗썸 API Wrapper 코드
앞 문단에서 빗썸 API가 REST API 로 되어 있다고 말씀드린적이 있습니다. 따라서 파이썬으로 빗썸 API 를 호출하려면 사용에 필요한 API 를 REST API 포맷으로 코드를 구현해야 하는데 이미 빗썸 API Wrapper 코드가 깃허브 등에 공개가 되어 있습니다.
따라서 별도로 REST API 코드를 구현하지 않아도 이미 만들어놓은 Wrapper 코드를 사용하면 됩니다. 저도 지금 구동중인 자동매매 프로그램은 이미 만들어진 코드를 사용중에 있습니다.
사실 저는 몇년전부터 가상화폐 자동매매에 관심이 꽤 있었는데요, 이와 관련하여 자동매매 코드구현에 꽤나 유명하신 분이 있었습니다. (관련 책도 출간되었음)
“조대표” 라는 분이었는데 처음에는 이분의 Wrapper 코드를 사용하려고 했으나 해당 라이브러리가 빗썸 Private 사용에 뭔가 오류가 있네요. 지금까지 수정은 되지 않은거 같습니다(안타깝게도 조대표님이 불치의 병으로 세상을 떠났습니다)
그래서 직접 REST API 를 호출하는 코드를 만들까 하다가 인터넷을 검색해 보니 “조코딩” 이라는 분이 만들어 놓은 Wrapper 라이브러리가 있네요.
해당 라이브러리는 위 링크를 참고하시면 됩니다.
유튜브에서 활동하시는 분인데, 조코딩님의 코드는 빗썸 Private API 의 사용이 가능합니다. 따라서 저는 조코딩님의 빗썸 API Wrapper 를 참고하였습니다.
해당 깃허브에는 빗썸 API 관련하여 사용법이 잘 나와 있으니 해당 내용을 참고하면 좋을꺼 같습니다. 요 API 라이브러리를 사용하려면 내 개발 환경에서 다음과 같이 파이썬 라이브러리를 설치해주면 됩니다.
pip install python-bithumb
파이썬 웹 소켓 구현하기
혹시 웹 소켓(WebSocket) 이란 용어를 들어보셨는지요? 저도 이번에 가상화폐 자동매매 프로그램을 개발하기 전에도 간혹 들은 용어였지만 이번에 자동매매 개인 프로젝트를 진행하면서 어느정도 개념이 잡히게 되었습니다.
웹에서 통신은 기본적으로 Client 에서 요청할때마다 서버에서 패킷이 전송되지만 웹 소켓은 “실시간성” 을 기반으로 하고 있습니다. 그렇다면 가상화폐 자동매매 프로그램에서 “실시간성” 이 필요로 할까요?
물론 구현하기 나름이겠지만 필요할 때가 있습니다. 내가 원하는 가격에 가상화폐 시세가 닿을때마다 매수/매도를 처리해야 하기 때문입니다.
이전에 가상화폐를 매매할때는 사실 “실시간성”을 고려하지 않았습니다. 파이썬으로 데몬을 구동하면서 일정한 주기로 (Polling 방식) 해당 가상화폐의 시세와 수익률을 비교하여 매매를 하는 방식으로 구동을 하였지요. 하지만 이 방식은 수시로 바뀌는 시세에 실시간으로 대응하지 못한다는 단점이 존재합니다.
그래서 실시간으로 가상화폐를 매수/매도 하기 위해서 “웹소켓” 기능 구현이 필요할 가능성이 높습니다. 내가 원하는 가격에 도달하면 즉각적으로 매수/매도 처리를 해주는게 좋겠죠?
파이썬으로 웹소켓을 구현하는 방법은 여러가지가 있겠으나 저는 “조대표” 님의 웹소켓 코드를 참고하여 구현해 봤습니다.
# -*- coding: utf-8 -*- import websockets import asyncio import json import multiprocessing as mp class WebSocketManager(mp.Process): """웹소켓을 관리하는 클래스 사용 예제: >> wm = WebSocketManager("ticker", ["BTC_KRW"]) >> for i in range(3): data = wm.get() print(data) >> wm.terminate() 주의 : 재귀적인 호출을 위해 다음의 guard를 반드시 추가해야 한다. >> if __name__ == "__main__" """ def __init__(self, type: str, symbols: list, ticktype: list=None, qsize: int=1000): """웹소켓을 컨트롤하는 클래스의 생성자 Args: type (str ): 구독 메시지 종류 (ticker/transaction/orderbookdepth) symbols (list ): 구독할 암호 화폐의 리스트 [BTC_KRW, ETH_KRW, …] ticktype (list, optional): tick 종류 리스트 (30M/1H/12H/24H/MID) qsize (int , optional): 메시지를 저장할 Queue의 크기 """ self.__q = mp.Queue(qsize) self.alive = False self.type = type self.symbols = symbols self.ticktype = ticktype if self.ticktype == None: self.ticktype = ["1H"] super().__init__() async def __connect_socket(self): uri = "wss://pubwss.bithumb.com/pub/ws" async with websockets.connect(uri, ping_interval=None) as websocket: connection_msg = await websocket.recv() # {"status":"0000","resmsg":"Connected Successfully"} if "Connected Successfully" not in connection_msg : print("connection error") data = { "type" : self.type, 'symbols' : self.symbols, 'tickTypes': self.ticktype } await websocket.send(json.dumps(data)) registration_msg = await websocket.recv() # {"status":"0000","resmsg":"Filter Registered Successfully"} if "Filter Registered Successfully" not in registration_msg: print("Registration error") while self.alive: recv_data = await websocket.recv() self.__q.put(json.loads(recv_data)) def run(self): self.__aloop = asyncio.get_event_loop() self.__aloop.run_until_complete(self.__connect_socket()) def get(self): if self.alive == False: self.alive = True self.start() return self.__q.get() def terminate(self): self.alive = False super().terminate()
multiprocessing 파이썬 라이브러리를 사용하여 빗썸의 웹소켓 url 을 접속하여 사용합니다. 가상화폐는 한개를 등록하여 사용해도 되고 여러개를 등록하여 사용해도 됩니다.(여러 코인들을 등록하면 그만큼 데이터량은 늘어납니다.)
이 클래스는 “조대표”님이 만들어놓은 코드인데 요걸 그대로 활용해 보기로 했습니다. 실제로 사용은 아래와 같이 하면 됩니다.
from websocket import * # 웹소켓 코드를 import 한다 # 비트코인 실시간 정보를 등록합니다. wm = WebSocketManager("ticker", ["BTC_KRW"]) while True: try: data = wm.get() print(f"[{data['content']['date']}]/[{data['content']['time']}] 코인:{data['content']['symbol']}, 전일종가:{data['content']['prevClosePrice']}, 시가:{data['content']['openPrice']}, 고가:{data['content']['highPrice']}, 저가:{data['content']['lowPrice']}, 종가(현재가):{data['content']['closePrice']}") except: wm.terminate() # 멀티 프로세스 종료
웹소켓 클래스를 하나의 파이썬 파일로 만든 다음에 웹소켓 클래스를 위의 소스와 같이 import 하여 사용하면 됩니다. webSocketMananer 클래스에서 티커에 “BTC_KRW” 를 등록합니다. (빗썸 웹소켓에서 각 가상화폐의 티커명 파악이 필요. 여기서는 BTC(비트코인))
그런 다음에 while 루프를 사용하여 웹소켓 클래스의 get( ) 함수를 사용하여 해당 가상화폐의 실시간 데이터들을 전송 받습니다. 그 데이터들은 data 변수에 저장됩니다.
이 데이터들은 거래가 될때마다 수신이 되므로 “실시간”으로 거래가 체결될때마다 가격정보들을 확인하는게 가능합니다. 따라서 체결 시점의 내 계좌의 정보와 매칭시켜서 매매를 처리하는게 가능할꺼 같습니다.
만약 위 루프가 종료된다면 terminate( ) 함수로 종료 처리를 해주면 되겠습니다.
참고로 웹소켓 데이터 포맷은 아래 링크 글에서 확인이 가능합니다.
로그 넣기
자동매매를 구현하면서 필요한 부분 중에 하나는 “로깅” 일 겁니다. 저도 자동매매 프로그램을 개발하면서 로그를 통해 구동중에 이상 유무나 매매가 정상적인지를 판단하는데 사용하고 있습니다.

파이썬으로 로깅을 하는 법에 대해서는 위 글을 참고하시면 되겠습니다. 아래에는 제가 사용하는 파이썬 로그 입니다.
import logging.handlers class botLogger: def __init__(self, parent=None): self.logger = logging.getLogger('[trBit]') self.filename = 'log/trBit.log' self.fileMaxByte = 1024 * 1024 * 100 #100MB self.fileHandler = logging.handlers.RotatingFileHandler(self.filename, maxBytes=self.fileMaxByte, backupCount=10) self.fomatter = logging.Formatter('[%(levelname)s|[trBit]:%(lineno)s] %(asctime)s > %(message)s') self.fileHandler.setFormatter(self.fomatter) self.logger.addHandler(self.fileHandler) self.logger.setLevel(logging.DEBUG) def debug(self, str): self.logger.debug(str) def info(self, str): self.logger.info(str) def warning(self, str): self.logger.warning(str) def error(self, str): self.logger.error(str) def critical(self, str): self.logger.critical(str) if __name__ == '__main__': log = botLogger() log.error("메롱")
위 소스는 제가 사용하는 파이썬 로그의 클래스 입니다. 요 코드를 별도의 파이썬 소스로 만들어서 import 하여 사용하면 편리합니다.
내 텔레그램 봇으로 자동매매 관련 메시지 전달하는 법
자동매매를 해보면서 필요한 부분 중에 하나는 “내 자동매매 코드가 내가 의도한 대로 잘 동작하는가?” 입니다. 위에서 “로그”의 필요성에 대해 설명을 드렸지만 실제로 내가 짠 알고리즘에 맞게 동작하는지, 내 자동매매 프로그램이 오류가 나서 동작 하지 않는지 여부를 계속 판단하려면 PC에 접속해서 로그를 계속 쳐다봐야 할지도 모릅니다.
그런 불필요함이나 수고를 덜고 실제 매매가 잘 이뤄지는지 확인하는데 큰 도움이 되는 기능 중에 하나는 “텔레그램 봇” 을 이용하는 방법이 있습니다.

내 텔레그램 계정에서 봇을 생성하여 전송 메시지를 구현하는 방법에 대한 자세한 내용은 위 링크 글을 참고하시면 되겠습니다.
나만의 봇에서 자동매매 코드 곳곳에 텔레그램 메시지를 통해 동작 여부를 전송하면 어떨까요? 꽤나 편리할 겁니다. 저도 현재 텔레그램 봇과 메시지를 통해서 자동매매 구동 현황을 잘 파악하고 있습니다.
#-*- coding: utf-8 -*- import argparse import requests BOT_TOKEN = "내봇 토큰값" CHAT_ID = "내봇ID" def send_message(message): response = requests.post( 'https://api.telegram.org/bot%s/%s' % (BOT_TOKEN, 'sendMessage'), data={ "chat_id": CHAT_ID, "text": message, } ) #if response.status_code > 200: #print "Error:", response def main(): parser = argparse.ArgumentParser("Send messages to my phone") parser.add_argument("messages", nargs="+") args = parser.parse_args() for message in args.messages: send_message(message) if __name__ == "__main__": main()
현재 제가 사용하는 텔레그램 메시지 전송 파이썬 코드입니다. 위 코드에 내 봇의 토큰값과 ID 를 넣어준 다음에 해당 함수를 이용하면 내 텔레그램 봇으로 메시지를 전송할 수 있습니다.
코드도사 빗썸 API 자동매매 파이썬 클래스 코드 공개
자 지금까지 빗썸 API + 파이썬으로 나만의 자동매매 구현 관련한 내용 전반적인 부분에 대해 설명을 드렸습니다. 여기까지 읽으셨다면 이제 남은 건 직접 “나만의 자동매매 코드를 구현” 하는 일만 남았습니다.
파이썬을 많이 다뤄보셨거나 개발일이 본업인 분들은 큰 어려움 없이 제가 설명한 부분들이 이해가 되셨을 겁니다. 그런데 아직 파이썬이 익숙치 않거나 개발이 본업이 아닌 분들은 약간의 어려움이 뒤따를 수 있습니다.
그래서 이번에 제가 직접 빗썸 API 를 사용하여 만들어본 자동매매 파이썬 클래스를 깃허브에 올려봤습니다.
https://github.com/devcodedosa/tr-pybithumb.git
일단 위 코드를 사용하시면 빗썸 계정에서 기본적인 매수/매도/웹소켓/내 자산 등의 확인이 가능합니다. 또한 파이썬 로깅, 텔레그램 메시지 전송 등의 코드도 포함되어 있습니다.
소스 파일들은 다음과 같습니다.
- pybit_logger.py – 파이썬 로그 관련 파일
- telegram_send.py – 텔레그램 메시지 전송
- websocket.py – 빗썸 웹소켓 클래스
- trCoinBithumb.py – 빗썸 기본 매매 클래스(코드도사 구현)
여기서 trCoinBithumb.py 소스의 trCoinBit 클래스에 매매 관련 기본 함수들을 만들어 놨습니다. 요걸 활용해서 나만의 자동매매 프로그램을 직접 만들어 보실 수 있을꺼 같네요.
참고로 소스 안에는 데몬 관련 함수도 들어있어서 리눅스 환경에서 자동매매 프로그램을 “데몬” 형태로 구동이 가능합니다. 또한 웹소켓을 사용하신다면 2개의 프로세스가 동시에 생성이 되므로 이 부분 참고하시기 바랍니다.
주석으로 각 함수에 대한 대략적인 설명을 달아놓았으니 참고하시기 바라며, 이제 직접 위 코드를 참고하셔서 빗썸 계정으로 자동매매 프로그램을 만들어 보실 수 있습니다. 이제 각자의 몫만 남았네요 ㅎ
위에 설명드렸던 코드들은 저의 깃허브 저장소에 다 들어있으므로 깃허브 저장소를 clone 하셔도 무방합니다. 코드 관련하여 자세한 설명은 깃허브 저장소에 시간날때 업데이트 해놓도록 하지요.
코드 관련하여 질문은 댓글을 사용해 주세요. 그럼 Enjoy!