되게 의욕있게 트레이딩 봇을 만들겠다고 선언한지도 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배정도의 이익이 남았다.
솔직히 이정도까지 될거같지는 않은데 한번 소액으로 테스트를 한번 돌려봐야겠다
'프로그래밍 > Trading Bot' 카테고리의 다른 글
[가상화폐 트레이딩 봇] 코인 구매! ( 원화 입금 ) (0) | 2019.10.14 |
---|---|
업비트 API 코드 - upbitpy (0) | 2019.10.07 |
Trading Bot 1일차 - 시작하기 (0) | 2019.10.06 |