본문 바로가기
무모한 도전-주식 인공지능 만들기

백테스트의 에러찾기 여정 -1-

by 인터넷떠돌이 2021. 6. 21.
반응형

안녕하세요?

 

지난번 포스팅에서 어떻게 백테스트에서 무언가 한계에 부딪친 것 같다고 하면서도 어딘가 문제가 있다는 것을 언급하였는데, 실제로 문제가 있었습니다. 일단 이번 포스팅 부터 일련의 시리즈는 이런 에러를 잡기 위한 과정을 보여 드리고자 합니다.

 

우선 위 스크린샷에서 볼 수 있는 것처럼 자식 프로세스를 에러잡기 위해서 따로 실행을 하는데, 이전에 실패한 적이 있는 condition의 기록처럼 300만원 자본금에 30%씩 리스크와 손절매를 하라고 명령을 내렸습니다.

 

그리고 나서 다음으로 진행을 해 보았지만, 일단은 어떻게 1개의 종목만 가지고서 에러를 탐지하지는 못하는 것을 확인할 수 있었습니다.

 

결국 여러개의 종목을 투입하고 나서야 겨우겨우 에러가 나왔는데, 왜 인지 모르겠습니다만, 어째서 인지 int형식의 데이터가 너무 커서 float형식으로 바꿀 수 없다고 합니다.

 

 

그래서 일단 어떻게 된 일인가 싶어서 우선 원래라면 그냥 int형식으로 가만히 있을 애들을 float()함수를 써서 실수형으로 바꾸어 주도록 합니다.

 

그렇게 하고 나서 일단 디버그 모드로 돌려 보았더니, 어째서 인지 매수한 양이 이상하게 주식의 양 치고는 크다는 것을 확인할 수 있었습니다. 이런 데이터가 상식적으로 나오면 안됩니다.

 

이런 큰 매수량 때문인지 몰라도, OverflowError라는 것에 걸리게 되었습니다. 아무래도 저 부분이 문제인것 같은데, 일단 profitOfTrade가 도데체 어디가 문제인지 보도록 합니다.

 

아무래도 위 스크린샷에서 강조된 103590이란 종목에서 문제가 붉어진 것으로 보이는데, 문제는 이게 어떻게 해서 이런 에러가 나온건지 아직도 분명하지 않다는 것 입니다.

 

우선 position size를 계산하는 과정에서 무슨 문제가 있을 것으로 예상이 되었습니다. 일단 이 결과가 소수점 아래로는 무한히 존재할 수 있기 때문에, 이 문제를 해결하기 위해서 round() 함수가 사용하면 될 것이라고 생각을 했습니다.

 

문제는 이미 코드에 이 반올림을 하기 위한 과정이 있다는 것 입니다. 이런 상황에서는 아무래도 position size를 계산하기 위한 과정에서 나오는 무언가, 에러가 있다는 것인데, 이걸 단순히 반올림 한다고 해서 간단하게 해결될 문제가 아니라는 것 입니다.

반응형