본문 바로가기
카테고리 없음

[업비트 자동매매 시즌2] D-Auto Trading No.3 (백테스팅 Step-1)

by zemba 2022. 5. 14.
반응형
SMALL

안녕하세요! Zemba입니다~ 한동안 새로운 회사에 입사하고 정신없이 시간을 보내다가 포스팅이 점점 느려지고 있습니다.
빨리 적응해서 포스팅이 밀리지 않도록 노력을 해봐야 하겠습니다. ㅎㅎ🙏

역시나 지난 포스팅에서 언급한대로 백테스팅에 대해서 포스팅해보려고 합니다. 지난 포스팅에서 매매 전략을 세웠고 그럼 그에 맞는 백테스팅에 결과를 보고 익절과 손절 라인을 정하기 위해서 개인적으로 계속해서 테스팅을 돌려 보았습니다.
우선 매매전략에 대해서 못보신분들은 지난 포스팅을 참고 부탁드립니다 😄 (https://zemba.tistory.com/53)

 

[업비트 자동매매 시즌2] D-Auto Trading No.2 (전략 준비)

안녕하세요! Zemba입니다. 한동안 포스팅이 좀 뜸했습니다....ㅎ 개인적인 사정도 있었고 자아성찰을 좀 하다 보니 포스팅에 소홀해졌네요..ㅎㅎ 그러나!! 제가 아무것도 안 하고 논 것은 아니기에

zemba.tistory.com

이번 백테스팅의 포스팅이 왠지 좀 길어질 것 같은 느낌에 2개의 포스팅으로 나눠서 작성해보려고 합니다. 그만큼 이번에는 케이스를 많이 늘려서 백테스팅을 진행했기 때문에 할 말이 좀 많은 것 같습니다 ( ㅎ 그만큼 좀 더 공을 들여보았다고 생각하셔도 됩니다 ㅎㅎ )

먼저 지난번 포스팅에서 결정하지 못한 부분이 매도의 기준이였습니다. 즉 익절, 손절에 대한 %를 정하지 못하였습니다.
오토봇 시즌1에서 매수, 매도를 차트의 지표로만 설정한 것과 달리 시즌2를 준비하기 전까지 차트를 공부하면서 이것저것 자료를 참 많이도 찾아보았습니다. 여기서 가장 많이 느낀 것은 매수의 타이밍은 강좌나 유튜브에서도 많이 잘 나오지만 매도의 포인트는 절대 누구도 무조건 이렇게 따라하시면됩니다! 이러한 멘트를 날리는 사람이 아무도 없었습니다. 그래서 조금 생각을 좀 해보았고 주식에서도 매수는 기술, 매도는 예술이다 라는 명언(?)이 있다고 합니다. 이 명언을 곰곰이 생각해보니 많은 뜻을 담고 있었습니다. 

좀 더 제 생각을 정리해서 말씀드리자면 사람 각 개인에 따라서 투자의 방식은 서로 다릅니다. 그리고 또한 가지고 있는 자본에 차이도 다릅니다. 그렇기 때문에 누구 한 명의 절대적인 투자 방식과 기법을  따라가서는 안됩니다. 그런데도 각종 유튜브, 블로그 등에서 알려주는 매수 포인트도 잘 들여다보면 여기서 한 가지 중요한 포인트를 알게 된 것처럼 느껴졌습니다. 제가 내린 결론은 매수는 안전한 포인트(구간)에서 매수를 진행한다 라고 느껴졌습니다. 이게 무슨 의미냐면 장이 막 하락하고 있는 추세에서 갑자기 이제 오르겠지?라고 하면서 매수를 진행하게 되면 역시나 지하실에 지하실까지 보는 경험을 할 수 있습니다. 그렇기 때문에 장의 흐름과 상승을 어느 정도 예측할 수 있는 그런 구간에 해당하는 주가(또는 코인)를 매수해야지 안전한 거래로 수익을 가져갈 수 있다고 생각했습니다. 너무나도 당연하고 뻔한 내용이라고 생각할 수 있겠지만 이 포인트를 찾는 것이 저는 주식에서는 검색식이라고 생각했고 그 검색식을 바탕으로 거래를 한다면 좀 더 안전하게 수익을 가져갈 수 있을 것이다라고 생각하였습니다. ( 개인적인 이해 도니까 각자 잘 판단 부탁드립니다 ☺️ )

자 그렇다면 이제 매도에 대해서 제 생각을 얘기해보겠습니다. 매도는 예술이라는 말을 계속 생각하고 생각하고 하다보니 그냥 나온 말은 아닌 것 같습니다. 매수의 포인트는 차트를 기반으로 포인트를 찾을 수 있기 때문에 매도도 그런 자리를 찾을 수 있지 않을까?라고 해서 나름대로 실력도 없는 상태에서 그러한 패턴들을 좀 찾아보려고 노력했습니다. 그런데 계속 들여다보다 보니 매도는 기술로만 해서는 안 되겠다는 느낌을 받게 되었습니다. 이는 사람의 욕심이 개입되기 때문입니다. 어떠한 순간에도 매수 포인트를 잡았지만 내가 정말 1~3%만 수익구간을 내서 이익을 보고 정리하겠다고 가정하였습니다. 그런데 잘 정리를 하고 매도를 한 다음에 차트를 보니까 갑자기 내가 매도한 종목이 갑자기 7~15% 이상의 수익을 더 내기 시작했다고 한다면 여기서 사람은 당연히 아.... 잘못 팔았구나라고 생각할 수 있습니다. 욕심 때문에 다음에는 1~3% 수익이 아닌 최소한 5~7%로 내 생각과 마음이 매도 포인트를 변경할 것이고 만약 또 동일한 상황이 발생한다면 이후에는 10~15%로 수익구간을 변경할 수도 있습니다. 계속 이런 식으로 흔들린다면 결국에는 어떤 수익을 보더라도 만족하지 못하며 계속 전략을 바꾸게 될 것입니다. 그렇게 되면 이익은커녕 계속 손실이 커지는 상황이 발생할 수 있습니다. 간단한 예제를 살펴보겠습니다.

출처 - 업비트 리플 10분봉 비교 차트

위 그림을 보시면 대략적으로 제가 저번 포스팅에서 세운 전략의 시작점입니다. 해당 시작점 기준으로 최고가까지 수익을 봤을 때가 15.75%였습니다. 그럼 제 전략에서 익절가를 10%로 정했을 경우에 저는 분명 나중에 이 5%의 차이에 대해서 후회를 할 것입니다. 좀만더 있었으면 5%를 더 먹을 수 있었을 텐데.... 하면서 말이죠 ㅎㅎㅎ🤣 그렇다고 지금 이 종목의 차트만 보고서 익절 라인을 15%로 잡았다? 그러면 다른 종목에서는 또 이렇게 까지 이익을 보지 못할 수도 있습니다. ( 전부다 케바케입니다. ) 그럼 여기서 한 번 더 생각해볼 가치가 있는 포인트는 20~30%까지 그럼 더 기다려 볼 수도 있지 않나? 라고 생각할수 있지만 그림의 가장 오른쪽 그림을 보시면 최고점 기준으로 더기다려봤자 오히려 흐름이 떨어지는 추세를 보이면서 15%의 수익보다 적어지는것을 볼수 있습니다.

그렇기 때문에 각각의 사람이 생각하는 전략이 다르고 이익을 보고자 하는 구간이 서로 다르며 내면의 욕심을 제어하면서 내가 생각한 이익을 실현하고 난 다음 그것이 10% 이상 더 오른다 하여도 무덤덤하게 나는 다음 종목을 찾아서 다시 내 전략을 적용하겠다 라는 이 멘털과 마음가짐을 가지지 않으면 확실한 나만의 전략을 가져갈 수 없기 때문에 이러한 내면을 담고 있다고 생각하여 매도는 예술이라고 표현한 것으로 이해했습니다. 사실 전문가가 아니기 때문에 주변에서 주식한다는 사람들과 조금씩 얘기만 해봐도 서로의 의견이 다릅니다. 어떤 사람은 60%를 까지 생각하는 사람도 있고 20%까지만 해도 괜찮다는 사람이 있고 중장기로 보고 100%까지 수익을 가져가려는 사람들도 있습니다. 전부다 각자의 전략에 맞춰서 투자를 하고 있는 것이기 때문에 그것을 틀렸다고 할 수 없습니다. 그렇기 때문에 내가 정리한 전략의 기준으로만 매매를 진행하는 것이 옳은 방향이라고 생각합니다. 저같이 팔랑귀고 멘털이 약한 사람은 그래서 적당한 기준을 만들어서 이 기준에 맞는 매매를 자동으로 진행하게 만들려는것이 목적입니다. ( 지금도 계속 체크하는것을 보니까 멘탈이 정말 저는 약하더라고요 🤣 )


아 뭔가 잡설이 좀 너무 길어진 느낌입니다. ㅎㅎ 이제부터 자세히 어떤 식으로 백테스팅을 했고 그 결과 어땠는지를 좀 공유드리겠습니다.
이 전략을 만들면서 처음에 생각한 익절, 손절의 기준은 다음과 같았습니다.

  • 상승장
    • 익절 : 7%
    • 손절 : -5%
  • 하락장
    • 익절 : 3%
    • 손절 : -5%

매수 구간에서 조건에 맞는 종목을 사서 위와 같은 수익구간이 되면 자동으로 익절, 손절을 진행하려고 기준을 잡았고 백테스팅 프로그램을 구현한 다음에 실제로 테스팅을 진행해보았습니다. 테스트의 방법은 자본금 설정 후 매수 포인트에 해당하는 종목이 검색될 경우 10만 원으로 해당 종목을 사서 매도의 기준에 맞춰서 매도하고 그 결과를 합쳐서 다시 반복하는 방법을 사용했습니다. 이렇게 할 경우 익절, 손절의 횟수를 알아낼 수 있으며 매수의 금액이 정해져 있기 때문에 승/패에 대한 카운트만 있으면 총얼마의 손익을 가져갔는지 확인할 수 있을 것입니다. 더불어 익절이 될 경우의 총자본금이 늘어나니까 그에 따라서 종목을 좀 더 매수할 수 있기 때문에 그런 부분까지 고려해서 백테스팅을 구현하였습니다. 또 길어질 것 같아서 결과를 먼저 좀 공유드리겠습니다.

분봉 주기 1분부터 60분까지에 대해서 각각의 수익구간별 승패를 카운팅 해서 수익을 계산해 보았습니다. 보시는 것과 같이 생각보다 처참했습니다. 다시 잘 생각해보면서 왜 이런 결과가 나왔을까 해서 하락 매도 조건을 좀 더 변경해보고 상승구간도 10%까지 이익을 보는 방법으로 다시 돌려보았고 마지막 후보군에서는 심지어 하락 구간 전략에서는 1.5%만 수익내고 익절을 하도록도 변경해서 돌려보았지만 크게 달라지지는 않았습니다. 제 전략에서 상승장이라고 판단해서 매수를 하면 많아도 20회 이상 익절을 할 수 없었습니다. 

내... 전략이 10%도 못 먹는 건가......라고 생각하면서 계속 어떻게 하면 좋을까.... 고민했습니다. 아.. 참고로 240봉과 일봉은 테스팅 결과에 적합한 종목이 거의 없더라고요.... 그래서 아예 테스팅에서 제외시켰습니다. ㅎㅎ 24시간 돌아가는 코 인장이기 때문에 일봉보다는 좀 더 빠른 지표를 보는 것이 적합할 것 같기도 했습니다. ㅎㅎ 그런데 우선 저 위에 엑셀표를 보시면 눈치 채신 분들도 계시겠지만 뭔가 수익의 기준이 정리되지 않고 랜덤 하게 테스트를 한 것처럼 보이실 수도 있습니다. 네... 결국 제 뇌피셜로 요렇게 해보면 되지 않을까라고 생각해서 테스팅을 돌려 보았습니다. 익절, 손절 구간에 대한 각 분봉 별로 돌려서 확인한 것도 아니고 뭐 30분 봉에서는 요렇게만 60분 봉에서는 요렇게만 이런 식으로 테스팅을 하니까 제가 봐도 신뢰를 할 수가 없었습니다. (더구나 이걸 다 돌리는데 시간도 엄청 많이 걸리고요...)

그래서 우선 다시 결정하였습니다. 백테스팅을 고도화하여 여러 가지 케이스에 대해서 테스트를 해보기 위해서 이대로는 너무 오래 걸릴 것 같았습니다. 그래서 2021년도의 1, 3, 5, 10, 15, 30, 60, 240분 봉의 데이터를 DB화 해서 업비트의 티커의 OHLCV의 데이터를 API를 조회하는 시간도 줄이고 엄청 다양한 케이스들을 테스트해보려고 생각했습니다. API로 요청하는 것도 분당 Call 회수가 정해져 있다 보니까 내부적으로 delay를 줄 수밖에 없기 때문에 DB로 데이터를 가지고 있으면 훨씬 속도가 빠를 것이라고 판단했습니다. 다만 제일 처음에 DB 데이터를 구축하는데 시간과 어느 정도의 데이터량을 가질지가 예상이 되지 않아서 걱정을 하였지만 우선은 개인 장비에 DB구축을 하였습니다. 사실 뭐 거창하게 DB를 사용할 것이 아니다 보니 그냥 sqlite3로 *. db파일을 만들어서 데이터를 저장하였습니다.

DB 구축 결과

그림과 같이 DB에 각 분봉 별로 모든 데이터를 DB에 저장하였습니다. 전부 저장하는데 약 3일 정도... 걸린 것 같습니다. 분의 주기가 적을수록 데이터양이 많기 때문에 1, 3, 5분 봉은 데이터양이 엄청 많습니다 ㅎㅎ 하지만 생각보다 데이터 용량은 다행히 적당했습니다. 총 10.39GB가 나오네요 ( 위 그림 보시면 인덱스 설정까지 했을 때의 용량입니다. )

데이터도 이제 전부 수집했으니까 이제 각종 케이스에 대해서 테스트를 돌려보려고 합니다. 작성내용이 너무 많기 때문에 이쯤에서 한번 끊고 다음 포스팅에서 이 데이터에 대한 테스팅 결과를 다양하게 보여드리려고 합니다. ㅎㅎ 다음 포스팅도 최대한 늦지 않도록 빠른 시일 내에 작성하여 구축하도록 해야겠네요..ㅎㅎ 그럼 다음 포스팅에서 만나요!

더 나은 미래를 위하여!  시간이 돈이다! 

반응형
LIST

댓글