Q1코인봇24가 무엇이죠? Show 코인봇24는 누구나 쉽게 암호화폐 트레이딩을 할 수 있도록 유저에게 자동매매 시스템을 서비스하고 있는 IT 회사입니다. Q2사용방법이 어떻게 되나요? 페이지 최상단의 '사용하기'버튼을 클릭, 본인의 카카오톡 계정으로 로그인을 하면 자동매매 시스템에 접근할 수 있습니다 Q3PC를 켜두어야 할까요? 코인봇24의 자동매매 시스템은 설치형 프로그램이 아닌, 서버에서 24시간 작동이 되는 형태로 PC를 켜놓으실 필요가 없습니다 Q4현재 자동매매가 가능한 거래소는 어디인가요? 가상화폐의 종류와 거래량이 많은 바이낸스 거래소를 지원하고 있고, 앞으로 더 많은 거래소를 지원할 예정입니다 Q5무료로 사용할 수 있나요? 네, 처음 가입을 하시면 체험가능 하도록 운용가능한 봇 3개와 1,000포인트가 무료로 제공됩니다. 암호화폐 트레이딩 봇최근 블로그 포스팅이 한 동안 뜸했던 이유는, 어느 날 트레이딩 봇을 만들고 싶은 욕구가 생겨서 여기에 지속적으로 힘을 쓰고 있었기 때문이다. 개발자라면 누구나 한 번쯤은 만들어본다는 이것을, 아직 나는 만들어본 적이 없으니 괜찮은 기회라 여겨 해보기로 했다. 설계를 여러번 수정하다가 이제서야 어느정도 완성도를 보이고 있어 블로그에 적기로 했다. 참고로 개발 언어는 파이썬이 아닌 Go 다. 그 이유는 아래에서하자. 트레이딩 봇을 구동한다. CLI 기반이기 때문에 GUI 같은건 없다.봇 같은 경우 주식 트레이딩은 봇은 아니고, 암호화폐 거래소 중 하나인 업비트에 암호화폐를 주문하고, 조건에 맞는 코인을 감지, 이후 감지된 마켓을 대상으로 전략을 실행할 수 있는 봇을 개발했다. 이미 서문만으로도 봇의 구조가 이미 노출되었지만, 이는 그저 프레임워크를 만들어낸 것 뿐이며 가장 중요한 것은 전략인데, 이는 기업 비밀이라 비공개다. 애초에 수익을 제대로 내고 있지도 않지만. docs.upbit.com/docs 업비트 개발자 센터 업비트 Open API 사용을 위한 개발 문서를 제공 합니다.업비트 Open API 사용하여 다양한 앱과 프로그램을 제작해보세요. docs.upbit.com 파이썬이 아닌 Go 언어로 개발한 이유이 프로젝트는 내가 Go 로 작성한 첫 번째 사이드 프로젝트다. 일반적으로 트레이딩 봇은 파이썬으로 개발된 경우가 많은데, 나같은 경우에는 Go 를 선택했다. Go 를 사용한 이유는 물론 현재 내 주력 언어가 Go 인 것이 가장 큰 이유이기도 하지만, Go 를 봇 개발에 사용했을때 가지는 간편하고 채널을 통한 동시성 제어에서의 이점이 크다고 여겼기 때문이다. 트레이딩 봇에서 여러 마켓의 감시를 위해 고루틴을 사용하여 동시성을 사용할 일은 많은데, 그 예는 설계에서 살펴보도록 하자. 내가 개발한 트레이딩 봇은 오픈소스다. 따라서 봇의 사용법이나 코어 소스코드가 궁금하다면 아래의 깃허브 레포지토리를 확인하자. 이 포스트에서는 봇에 대한 전반적인 설계를 살펴본다. https://github.com/pronist/upbot GitHub - pronist/upbot: 암호화폐 트레이딩 봇 (feat. 업비트) 암호화폐 트레이딩 봇 (feat. 업비트). Contribute to pronist/upbot development by creating an account on GitHub. github.com 설계봇은 가장 큰 관점에서 보자면, 봇은 업비트 서버의 관점에서 클라이언트라는 점이다. 어떤 서버에 요청을 보내는 클라이언트냐 하면 업비트 API 서버에 보내는 클라이언트라고 볼 수 있다. 어떠한 형태로든 트레이딩 봇은 업비트 서버에 요청을 보내게 된다. 그게 조회가 될 수도 있고 주문을 요청을 하는 것일 수도 있다. 트레이딩 봇은 업비트 Open API 서버로 요청을 보낸다.또한 시세를 주기적으로 감시하여 조건에 도달했는지를 판단하는 다이어그램을 보면 알겠지만, 봇은 중간에서 중개인의 역할을 수행하게 되며 예를 들어 업비트 API 클라이언트봇은 위에서 언급했듯 업비트의 API 서버에 요청을 보내는 클라이언트다. 따라서 업비트 API 에 요청을 보낼 수 있는 클라이언트 래핑 객체가 필요하게 된다. 물론 이 부분은 업비트 API 문서에 따라 작성된 것이기 때문에 그렇게 중요하지는 않지만, 실제로 업비트 API 서버에 요청을 보내는 역할을 하므로 짤막하게나마 이야기해본다. 자산 조회나 주문 요청의 경우 Jwt 가 필요하고, 그렇지 않은 일반적인 정보는 그냥 보내도 상관없다.업비트 API 서버는 두 종류로 나눌 수 있는데, type Client자산, 주문 요청을 업비트 서버에 보내기 위해 사용하는 클라이언트다. 당연하겠지만 여기에는 AccessKey, SecretKey 가 포함되어야 한다.
type QuotationClient
이렇게 선언된 두 개의 클라이언트는 트레이딩 봇type Bot
또한 main()
.Run()
추가적으로
위의 다이어그램은 .strategy(*coin, Strategy)
type AccountsAccounts 는 인터페이스다.
.order(*Bot, *Coin, string, float64, float64) (bool, error)오더에서는 실제로 업비트 계정에서는 주문을 요청하고, 테스트 계정에서는 내부의 자산 현황을 갱신하게 된다. 여기서 살펴볼 것은 실사용 계정에서 주문을 넣었으나 체결되지 않고 계속 기다리기만 하면 트래킹 중인 해당 마켓의 전략 고루틴이 락이 되어버릴 수도 있다는 점이다. 따라서 타이머를 두고 체결을 기다렸다가 체결이 되지 않으면 주문을 캔슬한다.
여기서 type Strategy
마치며트레이딩 봇을 만드는 과정은 흥미롭다. 프레임워크에 해당하는 틀은 어느정도 구성되었기에 이제 전략을 재미나게 생각하는 일만 남았다. 봇은 사실 전략이 제일 중요하다. 전략에 따라 수익이 날 수도 있고 안 날수도 있기 때문이다. 그러나 내가 이렇게 까지 구조적으로 봇을 작성한 이유는 이것을 단순 경험만으로 끝낼게 아니라 무언가 결과를 도출해볼 것이기 때문이다. 또한 이 프로젝트는 나의 첫번째 Go 언어 사이드 프로젝트라는 점에서 의미가 있으며 부가적인 써드파티 라이브러리들을 사용해볼 기회또한 있어서 나름 괜찮은 프로젝트라고 생각한다. 더 읽을거리Webpack 3 에서 Webpack 5 으로 바꾸기 위해 해야 할 일들 내가 개발한 티스토리 프로젝트 정리! 나만 알고 있기에는 너무 아깝잖아? 그래서 강의를 만들어봤어. 티스토리 구독 서비스 이전에 존재했던, 티스토리 이웃서비스 티네스(Tines) 개발 돌아보기 |