재정거래 봇 노하우와 소스 공개
땡글에 간만에 들러보니 재정거래 얘기가 있네요. (관련글 링크) 저도 작년초에 파이썬 처음 배우고 재정거래 열심히 했는데, 그 때 사용하던 코드를 공개해봅니다. 포트폴리오 방식을 택했는데, 구체적으로는 두 거래소간 가격차이가 많이 났을 때, 한쪽 거래소에서 파는 동시에 다른쪽 거래소에서 사고 천천히 거래소간 전송을 진행하는 것입니다.
재정거래가 원리는 쉬워도 봇으로 만들면 여러가지 세세한 부분에서 신경쓸 것이 많습니다. 간단히 노하우를 적어보자면..
거래소의 불안정한 API 및 접속장애 문제: 거래소가 렉이 심하거나 입출금이 먹통이거나, 아니면 지나치게 API 콜을 많이 해서 접속제한에 걸리거나 하는 일이 현실적으로 가장 큰 문제입니다. 이를 위해 실시간 모니터링이 필요하고요, 저는 이를 텔레그램으로 구현했습니다. 근데 가끔 텔레그램도 서버가 나가더라고요...; 한쪽 거래소가 먹통이거나 렉이 심한 것을 파악하고 대응하는 코드도 필요합니다. 저는 보통 API 콜에 타임아웃을 주고 이를 오버하면 봇 작동을 일정시간 중단하는 방법을 썼습니다.
코인별 전송시간 차이에 따른 비율 배분 문제: 비트코인과 비트쉐어의 경우 전송시간이 30분 대 3초로 매우 차이가 컸습니다. 이 경우 비트코인을 더 많이 들고 있어야 전송시간 차이를 어느 정도 극복할 수 있습니다. 즉, 비트쉐어가 몇 번 왔다갔다 하는 동안 비트코인은 한번 전송시키는거죠.
API 인증문제: 아마 봇을 만들 때 가장 큰 도전은 API 인증 부분일껍니다. 폴로같은 경우 코드가 잘 나와있어서 그냥 쓰면 됐지만 중국 거래소의 경우는 정말 삽질 많이 했습니다. 근데 몇 개 만들어보니 점점 쉽게 되더라고요 ㅎ
출금 API 미지원: 어떤 거래소의 경우에는 출금 API가 지원되지 않는 문제가 있습니다. BTC38이나 윤비가 그랬고요... 근데 이건 단점이자 기회입니다. 왜냐하면 봇이 적어지거든요. 저같은 경우 이 문제를 웹엔진(셀레니움)으로 해결했습니다. 원리는 가상 브라우저를 열어서 버튼을 찾아찾아 가는겁니다. 파이썬의 경우 구글 2FA 라이브러리도 있어서 키값만 알면 2단계 인증도 통과 가능합니다. 단점은 가끔씩 홈페이지가 바뀌어서 계속 신경을 써줘야 한다는 점과 속도가 느리다는 것입니다. 그리고 셀레니움을 쓰는 경우 페이지 로딩 타이밍이나 기타 등등 작지만 중요한 문제들이 많이 발생해서 잘 작동하도록 만들기까지 상당한 노력이 필요합니다.
허수 주문 처리문제: 제 코드를 보시면 아시겠지만 ticker를 사용하지 않고 order book을 긁어온 다음에 주윽 훑어가면서 평균값을 계산해갑니다. 그 과정에서 매우 작은 양의 dust order들은 제외하고요. 제 경험상 재정거래를 할 때에는 ticker는 의미가 별로 없습니다. 내 물량으로 사고 팔 수 있는 평균 가격이 얼마인지가 훨씬 더 중요합니다.
가장 큰 위험은 거래소 보안사고입니다. 거래소에 뭔가 이상이 있는것 같다 싶으면 자금을 안전한 곳으로 확 뺄 수 있는 코드도 필요합니다. 제가 올린 샘플코드엔 없지만 다른 봇에는 특정 명령어를 텔레그램으로 입력하면 제 개인지갑으로 모든 펀드를 다 전송하는 "탈출" 코드도 넣어놨습니다.
제 소스코드는 여기에 있습니다 (링크)
손댄지 한참 되서 에러를 뿜어낼 가능성이 매우 크지만, 기본적인 흐름을 파악하는 데에는 도움이 될 것으로 생각합니다.
파이썬은 이름만 들어봤는데..
활용하기에 따라 대단한 기능을 발휘하는 군요?
공을 많이 들이셨기에 가능하겠지요..
수익 많이 내세요~
클레이님 선견지명에 이마를 탁 치고 갑니다! 하루하루 코인판에서 배우는 내용이 새롭고 너무 재밌네요. 오늘같은 대폭락 김프장에서도 뭔가를 배워서 너무 행복합니다