되게 의욕있게 트레이딩 봇을 만들겠다고 선언한지도 2주가 되어가는데...

 

아무런 포스팅도 안올라갔다 ㅋㅋㅋㅋ

 

( 2주동안 인턴하랴, 연구실 과제하랴... 바빴다보니 ㅠㅠ)

 

오늘에서야 짬이 좀 나서 다시 건드려보는 트레이딩 봇

 

오늘은 백테스팅 코드를 작성해보려고 한다.

 

백테스팅이란게 뭔가 하니, 실제로 거래를 진행하기 전에 내 알고리즘이 유효한지, 이익이 나는지를 알아보기 위한

 

테스트? 같은 거라고 보면 된다.

 

물론 실제 환경이 아닌, 과거의 데이터들을 가져와서 테스트하는것이기 때문에 이 알고리즘이 먹혀든다! 라고는 말할 수 없다.

 

백테스팅 결과 이익이 난 알고리즘이라고 실제에서도 이익이 난다는 보장이 없고, 그 반대도 마찬가지...

 

하지만 적어도 하나의 평가 기준은 된다고 보는게 적절할듯 싶다.

 

그렇다면 백 테스팅을 진행할 알고리즘을 살펴봐야하는데

 

이번에 선택한 알고리즘은 변동성 돌파 + 이동평균선 관찰을 섞은 알고리즘이다

 

내가 생각해낸 알고리즘은 아니고... 투자 기법중에서 유명한 것들을 가져온 것이다.

 

(혹시 더 괜찮거나 추천해주실 알고리즘 있으시면 댓글에 부탁드립니다! 백테스팅 분석도 시간나면 해드려요!)

 

이동평균선이라는건 데이터가 상승하는중인지, 하락하는 중인지를 파악하는 지표이다.

 

과거의 5개정도의 데이터의 평균과 현재 가격을 비교했을때 현재가격이 평균보다 높다면 상승장, 낮다면 하락작을 뜻하는 것이다.

 

다음으로 변동성 돌파라는건 마지막 캔들( 주식 그래프에서 막대기 아시죠? ) 에서 최고점과 최하점의 차이에 일정 상수를 곱하고 ( 0.1~1.2 정도? 상수는 굉장히 다양한 것같다. 자신의 알고리즘에 맞춰서 조절해야될듯 )

 

마지막 종가에서 ( 변동 상수 * 종가 ) 보다 현재 가격이 높다면 매수해서 바로 다음번 봉에 매도하는 기법을 의미한다.

 

나는 이 두가지 기법을 섞어서 알고리즘을 작성했는데,

 

변동성 기법을 베이스로 트레이딩을 진행하되, 상승장인 경우에만 구매를 진행하는 것이다.

 

이를 토대도 백테스팅을 진행해보려는데 사소한? 문제가 있었다.

 

아무래도 주식의 경우 하루 단위로 백테스팅을 진행하는걸 많이 봤는데, 하루사이에도 변동폭이 큰 가상화폐 시장에서는 하루단위로 트레이딩을 진행해서는 갑작스런 폭락의 위험성도 있을거같고, 이득도 별로 없어 보였다.

 

따라서 분단위로 트레이딩을 해줘야하는데... api 요청 제한이 걸려있어서 sleep을 걸어주면서 진행해야된다는 문제점이 존재했다. 

 

현재 0.17초마다 sleep을 걸어주면서 테스트하고 있는데 1초에 5번 계산한다고 가정해도 한달 데이터를 백테스팅하는데 30일 * 24시간 * 60분 = 43200 번의 계산이 진행되어야 하고, 초당 5번이기때문에 나누기 300을 해주면 144분이라는 어마어마한 결과가 나오게 된다.

 

처음에 1년 테스트해보려다가 계산해보고 깜짝... 일단 한달만 테스트 해보기로 한다.

 

테스트 범위는 2018년 1월 1일부터 2018년 2월 1일까지 한달 데이터, 시작금액은 백만원으로 설정했다.

 

실제로도 그정도 금액으로 놀 예정이기 떄문에 백만원으로 설정했다.

 

테스트를 지금 돌리고 있는중인데 다 끝나면 이어서 써야지

 

한 두시간 정도 돌려봤는데... 생각보다 결과가 굉장하다

 

1년치 데이터를 돌리다 잘못된 부분이 있어 한달치 데이터만 테스트를 해보는데 대략 10배정도의 이익이 남았다.

 

솔직히 이정도까지 될거같지는 않은데 한번 소액으로 테스트를 한번 돌려봐야겠다

트레이딩 봇을 만들겠다는 목표도 정했고, 트레이딩을 위한 API 키까지 발급받았다면 준비는 끝났다.

 

실제로 거래를 시작하기 위한 자금, 즉 가상화폐가 필요한 것이다.

 

우선 나는 보유하고 있는 가상화폐가 아예 없기때문에 원화를 입금하고, 원화로 가상화폐를 구매해야한다.

 

가상화폐 마켓들은 저번에도 설명했듯이 업비트, 빗썸, 코인원등 여러가지지만 나는 업비트에서 트레이딩을 하기로 정했기때문에 업비트 계정에 가상화폐를 입금해야한다.

 

하지만.. 업비트에서 원화를 입금할수 있는 방법은 현재로서는 존재하지 않는다. ( 신규 가입자 기준 )

 

업비트에서 원화입금을 하려면 2017년이었던가? 막 붐이 불고 있던 당시에 원화 입금 계좌를 인증한 사용자에 한해서만 입금을 진행할 수 있게 해준다.

 

 

따라서 신규 가입자인 나는 업비트에서 원화입금이... 불가능 하다는 것이다.

 

그렇다면 업비트에서는 거래를 진행하지 못하느냐? 그건 또 아니다.

 

'원화'입금이 막혀있는것이지, 그 외의 '가상화폐'입금이 막혀있는건 아니기 때문이다.

 

다른 마켓에서 거래하던 가상화폐를 업비트 계정으로 입금한다면 그 화폐로 업비트에서 거래를 진행할 수 있다.

 

물론 원화 출금도 가능하다. 

 

따라서 원화 입금을 위한 다른 마켓을 찾아야한다.

빗썸... 다시는 들어갈일 없을껍니다 ㅂㄷㅂㄷ...

처음 눈에 들어온 곳은 빗썸, 업비트 다음으로 큰 국내 거래소이기도 하고 2017년에 잠깐 나도 해볼까하는 마음으로 10만원 정도 넣어봤던 곳이기에 회원가입을 따로 하지 않아도 된다는 편함이 있어 눈에 들어왔다.

 

근데 ㅋㅋㅋ 진짜 일처리가 엉망이다 빗썸은. 비밀번호를 잊어버려 새로 발급받았다. 발급받는것도 문자인증, 신분증 인증... 귀찮았지만 보안이 중요하니 그대로 따라했다. 그렇게 로그인 되나 했더니 2차 비밀번호... 당연히 기억 못하는게 당연했고 똑같은 과정으로 임시 2차 비밀번호를 발급받았지만 문자 인증을 한번 더 해달래서 마지막이라고 생각하고 했더니 문자가 안오네? 그래서 고객센터에 문의했더니 자기들이 해줄수 있는 방법이 없댄다..ㅋㅋ 담당부서에 전달은 해준다는데 그러면 나중에 연락을 주냐고 물었더니 니가 다시 전화해야한단다. 어이가 없어서 빗썸은 버리기로 했다.

 

물론 내가 거대 고객도 아니고 그냥 학생 나부랭이, 개미 나부랭이라지만 너무 대응이 미흡하다.

 

코인원 PC 메인화면, 파란색이 마음에 든다.

 

다음으로 찾은 곳은 코인원이다. 다섯손가락 안에 드는 국내 거래소인거같기도 하고 해서 여기서 진행하는것으로 했다. 여러 인증을 거치고 원화를 입금했다. 코인원은 원화 입금을 위해서 자기 명의의 농협계좌가 필요하니 참고하도록 하자.

 

참고로 농협 계좌는 올원뱅크에서 비대면으로 쉽게 개설이 가능하다. ( 올원뱅크 비대면 계좌 검색 ! )

 

그렇게 원화입금이 완료되고 나는 가장 만만한 리플을 구매했다.

 

이제 업비트로 리플을 옮기기만... 하면 되는데 문제가 생겼다. ( 아직 봇은 개발도 못했는데 너무 힘들다 ㅋㅋㅋ )

 

이렇게 자산 페이지에 보면 입금과 출금 관련 내용들이 있는데, 업비트에서 입금을, 코인원에서 출금을 선택한다.

 

업비트에서 제공해주는대로 입금 주소와 데스티네이션 태그를 복사해서 코인원의 출금에 입력해주면 송금이 완료되는데

 

????????

 

처음으로 원화입금을 진행하면 72시간동안은 출금이 제한되고, 72시간뒤에 수동으로 SMS 인증, 신분증 인증, 마지막으로 상담원과의 영상통화를 진행해서 출금 제한을 풀어야 출금을 진행할수 있단다...ㅠㅠㅠㅠㅠ 진짜 다 때려치고 싶었는데 마지막이라 생각하고 내일 통화해서 풀어봐야지...

 

솔직히 10만원정도 소액은 제한 없어도 되지않을까 싶은데, 아무래도 코인 시장이 많이 조심스러운 것 같다. 그럴수 밖에 없을거 같긴하지만 너무 신경쓸것이 많아서 사용자 입장에서는 귀찮을 수 밖에 없다.

 

내일 출금 제한 해제하고, upbit API로 구현해 놓은 함수들 손봐서 기능 테스트를 진행 해보려고 한다. 포스팅하면서 Github에 올리긴 할건데... 나보다 더 잘 구현하시는 분들이 구현 해놓은게 많아서 굳이 내 코드를 사용할 사람은 없을거같다. ㅋㅋㅋㅋㅋ 그럼 20000

트레이딩 봇을 구현하기에 앞서..

 

API를 사용해서 거래할 거래소를 찾아야한다.

 

대표적인 거래소로는 업비트, 빗썸, 코인원 등등이 있는데 아무래도 국내 거래소 중에서 가장 순위가 높은?

 

업비트에서 트레이딩을 진행하기로 했다.

 

업비트 화면

웬만한 거래소가 그렇지만 업비트에서도 트레이딩을 위한 API를 제공한다.

 

자세한 주소는 https://www.upbit.com/service_center/open_api_guide서 확인할 수 있다.

 

업비트 개발자 센터로 들어가보면 다양한 언어로 작성된 예제 코드들을 볼 수 있는데

 

자산 조회, 주문, 출금, 입금같은 기본적인 기능 외에 특정 종목, 캔들, 체결, Ticker(가 뭐지?)를 조회할 수 있는 기능까지 제공한다. 

 

사실 이정도만 주어져도 대부분의 기능 구현에는 무리가 없을 것 같다.

 

예제 코드들은 대표적으로  Node.js Python Ruby Java 코드로 존재하는데 일단은 파이썬 코드가 제일 익숙하니 그걸로 시작해볼 계획이다. 좀 더 익숙해지면 주문 조회정도는 java로 짜보는것도 괜찮을 것 같다. 어플로 만들어서 조회 기능만 넣어두면 실시간으로 돌아가는걸 볼 수 있을테니...

 

예제 코드를 보고 구현하던중 자꾸만 오류가 발생해서 다른 분들이 만드신 API를 참조할까도 생각중이다. 사실 API 구현 자체가 힘든건 아닌데 뭔가 내 코드보다 더 잘 짜실거같아서..ㅋㅋㅋ

 

내가 찾은 api는 Upbitpy이다. (https://github.com/inasie/upbitpy)

 

만드신 분께서는 거래량을 늘려보고자 공개하셨다고 하는데 나같은 사람들에게는 그저 감사할뿐.. 

 

코드를 보면 코인 가격 조회, 분봉 가져오기, 거래량 비율 등 다양하게 코드들이 구현되어있다. 적당히 가져다 쓰던지 참고해서 코드를 작성하면 될 것같다.

 

아참, api를 사용하려면 업비트에서 개발자 key를 발급 받아야한다. 여러가지 인증을 걸친 후에 secret key와 public키를 발급 받게 되는데 한번 받은 키는 발급 당시에만 기록되니 다른 곳에 기록해두고 잃어버리지 않도록 하자.

 

api를 찾아보니 api자체는 어려운게 없어보이니 몇일만 살펴보면 구현에는 문제가 없어보인다.

 

다만 구현하는 알고리즘은 내가 알고 있는 것이 전혀 없으니 선형회귀나 백테스팅 같은 알고리즘을 찾아보면서 구현 해야 될 것으로 보인다.

암호화폐 트레이딩 봇을 개발하고 테스트하는 페이지를 개설했다.

 

말로는 거창하게 트레이딩 봇이지만 실상은 API 가져다 쓰면서 공부할겸 개발하는 프로그램임...

 

필자가 가지고 있는 얕은 지식으로는 성공할 수 있을지 잘 모르겠지만 매일매일 기록하면서 개선해나가려고 한다.

 

- 참고로 프로그램이 잘 돌아가도 팔 생각은 없으니 대답도 안해드리는 구매요청보다는 제 블로그에서 지식을 얻어가셨으면 좋겠습니다. ( 첫날부터 너무 김칫국인지는 모르겠지만 ㅋㅋㅋ 내 블로그니까... )

 

+ Recent posts