일전에 GoPAX 거래소에서 자동매매 개발에 관한 일지를 올린 적이 있다.
GOPAX에서 자동 매매하기
자동매매 프로그램은 지금도 잘 돌고 있다. 하지만 개점 휴업 상태이다. 익절의 폭을 10%정도 해 놓으니 거래가 거의 되지 않는다. 그렇다고 9천원에 사서 몇 백원 남기고 팔기에는 좀 아깝다는 생각이 든다. 종목과 결혼을 하면 안되는데, 이상하게도 EOS는 1만원 이하에서는 팔고 싶은 생각이 들지 않는다.
최근 거래소 코인들이 핫하다. CoinEX, FCoin 등등.
이 중 CoinEX에 들어가보니 거래가 너무나도 활발하다. 이런 곳에서 자동매매를 해야겠다는 생각이 들었다. 그래서 이번 주말 동안 작업을 해 보았다. 그 과정을 정리한다.
CoinEX 거래소에서 공식적으로 제공하는 API에 대한 사이트이다.
https://github.com/coinexcom/coinex_exchange_api/wiki
그런데 API와 관련된 문서만 있고, 예제가 없다. 이런 경우에는 선배 개발자를 찾아 보는 것이 좋다. github에서 coinex API와 관련된 것이 있는지 검색해 보았다.
빙고!!
역시 능력있는 개발자가 파이썬으로 lib를 만들어서 소스를 공개해 놓았다.
https://github.com/EchterAgo/coinex
관련 소스 받아서 작업을 시작한다. 문서화가 전혀되어 있지 않지만 함수 이름만 보고도 파악이 가능하다. CoinEX에 있는 API와 1:1 대응되기 때문에 CoinEX API 문서 내용을 주로 참고하였다.
주문하기 : coinex.order_limit()
체결결과조회 : coinex.order_finished('CETBTC')
lib를 워낙 잘 만들어 놓아서 큰 어려움 없이 잔고조회, 시세조회, 주문, 체결결과조회 등이 잘 되었다. 자동매매에 대한 전반적인 로직은 GoPAX 거래소에서 돌고 있는 자동매매 프로그램과 비슷하게 만들었다. 다만 몇가지 차이가 있었다. 그 내용을 정리하면 다음과 같다.
- 주문한 수량이 모두 처리되어야 체결결과조회에 보인다.
GoPAX의 경우에는 일부 수량이 체결이 되더라도 바로 체결결과조회가 되었는데, CoinEX는 전체를 한 묶음으로 처리하고 있다. 짜투리 수량이 나오지 않아서 장점으로 보인다. - 사용자가 많아서 그런지 주문을 내면 'Service unavailable' 이라는 오류 코드가 자주 뜬다. 조금 쉬었다가 재 주문을 하면 되기도 하고 또 같은 오류가 뜨기도 한다. 주문을 하는데 조금은 불안하다.
- 이게 가장 문제이다. 체결결과를 조회하면 최근에 체결된 순서로 나오지 않고, 주문을 넣은 순서로 나온다. 이렇게 되면 체결된 결과에 대한 대응 주문을 내는 것이 상당히 복잡해진다.
2번 문제는 해결 방법을 찾아볼 수 있겠지만 3번 문제는 추가적인 개발을 필요로 하기 때문에 좀 더 고민을 해 보고 방향을 정해야 될 것 같다.