brunch

You can make anything
by writing

C.S.Lewis

by 엔데 Nov 14. 2021

4. 코인 자동매매 봇 만들기(3)

저번까지 다룬 내용으로 모든 코인들을 사고파는 중요한 동작들을 할 수 있다. 이번 글에서 소개할 내용은 없어도 되지만 있어서 더 좋은 일종의 트리비아(Trivia)다.


1. 슬랙(Slack)으로 현 상황 보고하기

원래 자동매매 봇을 만들게 된 계기가, 시도 때도 없이 업비트나 빗썸 같은 코인 앱을 보지 않고, 혼자서 잘 돌아가도록 만들기 위함이었다. 그런데 만약 컴퓨터를 켜 두고 밖으로 나갔을 때, 코드가 잘 돌아가고 있는지 없는지 확인할 방도는 많지 않다. 물론 나야 원격 접속을 사용해서 태블릿으로 접근하고 있지만, 그것도 꽤 성가신 일이다.

따라서 간편하게 코드가 돌아가고 있음을 보고하거나, 에러가 나면 알 수 있는 방법이 있어야 한다. 이를 위해서 슬랙이라는 메신저 프로그램에 채널을 따로 판 다음, 코인을 사고파는 이벤트가 발생하거나 에러가 생기면 신호를 보내도록 설정해 줄 수 있다. 예시는 다음과 같다.

위의 예시에는 에러 상황은 없지만, 에러가 났을 때 에러 사실을 보고하기는 한다.

코드는 다음과 같다.

아주 간단하게 새긴 post_message() 메소드다. 이 메소드를 작동하게 하기 위해선 슬랙 API에서 토큰을 발급받고(이 부분은 인터넷에 더 자세히 나타나 있다), 메소드에 토큰, 메시지를 띄울 채널명(이 경우에는 #crypto) 그리고 보낼 메시지를 입력하면 된다.

위 사진은 예외를 처리하는 부분인데, 예외를 처리하면서 '에러가 발생했다'라고 보고하게 한다. 물론 따로 예외를 처리하진 않는다....... 그냥 넘어갈 뿐. 만약 에러가 지속적으로 생기면 조치를 취해야 하긴 하지만.

위 사진은 실질적으로 코인의 거래가 이루어지는 부분이라 중간에 post_message 메소드를 사용해서 매수/매도 여부나 그때의 가격, 시간 등을 보고하게 하였다. 


2. 거래량 상위 코인 고르기

데이터를 이용해서 거래를 하는 만큼, 어느 정도 경향성이 있는 코인을 사용해야 하고, 경향성이 있기 위해서는 거래량이 뒷받침되어야 한다(고 누가 그랬다). 아래 코드는 중 value_indentifyer()는 거래량이 상대적으로 낮은 코인을 거르는 메소드로, 코드 실행일의 일봉에서의 거래총액(ohlcv 데이터에서 volume 외에도 들어있는 데이터가 있다)을 나열한 다음, 내림차순으로 정렬한 뒤, 임의의 숫자(여기서는 line이라고 임의로 정한) 만큼만 취해 결과를 리스트로 리턴한다.

예를 들면 위의 첫 번째 사진에서는 모든 코인 중 거래량 상위 80개만 사용하겠다는 의미이다. 이 코드의 아쉬운 점이라면 첫 번째 사진에서 나온 것처럼, 코드가 지속적으로 작동되는 while문 안에 있지 않아서 하루 이상 코드를 작동시키면 거래량 순위가 변한 코인들이 반영되지 않는다는 점이다.


3. 잔고 초기화 하기

이건 정말 필요 없는 기능 중 하나이다. 바로, 코드 시작 시에 보유하고 있는 모든 코인들을 팔아버리는 기능이다. 

가끔 말도 안 되는 알고리즘을 써서 돈을 빠르게 잃을 때, 일단 초기화하기 위해 사용한다. 일종의 항복 선언이랄까. 코드 가장 바깥에서 딱 한 번만 실행되면 된다.



트리비아 까지 포함해서, 코인 자동 매매에 필요한 봇의 모든 부분이 설명되었다. 누가 볼까 부끄러운 수준의 수준 낮은 코드인 건 알지만 그래도 작동하기는 한다. 앞으로는 내가 시도했던 알고리즘들과, 지금 도전하고 있는 여러 가지 자동 매매에 대한 생각들을 두서없이 풀어 볼 생각이다.


여기까지 써놓고, 나는 애초에 이걸 왜 시작했나, 왜 이렇게 까지 빠져들었나 생각해본다. 하루 이틀 곰곰이 생각해 본 답은, 본디 내가 엔지니어이기 때문이라고 생각한다. 100번 싸우면 100번 다 이기는 답을 찾는 게 과학자라면, 100번 싸웠을 때 70번, 65번, 60번...... 이렇게 조금이라도 맞는 답을 찾아가는 게 엔지니어의 일이다. 논리적으로 생각해서 말이 안 되거나, 왜 통하는지 몰라도 상관없다. '작동하면 된다'라는 심플한 생각. 그리고 그 인식의 저변에는 세상이 일종의 해석하기 힘든 법칙들로 이루어져 도통 사람들 앞에 제 온전한 모습을 드러내지는 않지만, 어쨌든 법칙이 존재하며, 그것을 알아내기 위해 끊임없이 실험하고, 조사하고, 알아보고...... 결국 일시적이고 항상 맞지 않더라도 그 세상의 법칙, 답, 해를 알아내는 게 엔지니어라고 생각한다. 나는 뼛속까지 엔지니어가 되어버렸나 보다.

물론 이렇게 재수없게 말해놓고 나면 부끄럽기는하다. 있는대로 잘난 척 하고 있기는 하지만, 최근 Stock들의 price action에 대한 논문을 읽고 있자니, 새삼 트레이더 들이나 관련 전공자들도 엄청난 일을 하고 있구나 하고 감탄하게 된다. 과연 비전공자에, 코딩도 잘 못하고, 귀찮음 까지 많은 내가 답을 찾을 수 있을까...?



매거진의 이전글 3. 코인 자동매매 봇 만들기(2)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari