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

종목선정을 위한 ADF 테스트, 허스트 지수, Half-life테스트 하기

by 인터넷떠돌이 2019. 4. 28.
반응형

안녕하세요?

 

이번 포스팅에서는 지난주에 이래저래 신흥의 주식을 가지고서 기계학습을 해서 실패만 했는데, 다시 한주가 지났기 때문에, 이번 주에는 어떤 종목이 적절한지 알아보기 위해서 한번 ADF 테스트만이 아니라 허스트 지수(hurst exponent)라는 것과, 얼마만에 다시 평균가격으로 돌아오는지 알아보는 Half-life 테스트도 같이 진행을 했습니다.

 

먼저 이 작업-지난번에 ADF 테스트는 했으므로, 이번에는 허스트 지수를 해 보기 위해서는 먼저 numpy를 가지고 와야 했으므로, import해 오도록 합니다.

 

그리고 나서 위 스크린샷처럼 한번 허스트 지수를 계산해 주는 메서드를 한번 [머신러닝을 이용한 알고리즘 트레이딩 시스템 개발]이라는 책에 나와 있는 그대로 가지고 오도록 합니다.

 

다음으로는 일단 허스트 지수를 계산하라고 하고, 그 값을 일단 테스트로 출력을 하도록 만들어 보도록 합니다. 이렇게 해서 제대로 메서드가 작동을 하는지 알아보는 것 입니다.

 

그리고 나서 모든 종목을 대상으로 해서 할 필요는 지금 당장은 없기 때문에, 위 스크린샷처럼 한번 범위를 제한해 보도록 합니다.

 

그런데 한번 작동을 해 보니까, 에러가 하나 발생하는 것을 볼 수 있었습니다. 에러의 내용은 메서드에서 1 positional argument but 2 were given 이라는 것 입니다.

 

 

 

 

그래서 위에서 나오는 것처럼, self라는 것을 빼먹어서 생기는 문제라는 것을 볼 수 있었습니다. 이렇게 추가를 하고 나서 다시금 실행을 시켜 보도록 합니다.

 

이제서야 위 스크린샷에서 나오는 것처럼 허스트 지수가 나오는 것을 확인할 수 있기는 있었습니다. 이제 문제가 없으니 본격적으로 Half-life테스트를 하도록 해 봅니다.

 

먼저 위 스크린샷과 같이 허스트 지수가 0.9 이상이면 해당하는 txt파일에 적어 주도록 하고, 아니면 0.6이상일 시에 또 해당하는 txt파일에 들어가도록 합니다. 그도 아니면 그냥 통과합니다.

 

다음은 역시 책에서 나온 것처럼 메서드를 작성해서, 이번에는 평균으로 회귀하는데 얼마나 시간이 많이 걸리는 지를 한번 테스트 하도록 해 봅니다.

 

그리고 나서 이번에도 한번 위 스크린샷에서 나와있는 것처럼 제대로 작동이 되는지 print함수까지 써 가면서 테스트를 해 보도록 합니다.

 

 

그리고 이제는 제대로 문제없이 마치는 것으로 봐서, 아직 문제는 없다는 생각이 듭니다. 아무튼 이로 인해서 이제 문제가 없으니 다음 코딩으로 넘어 가도록 합니다.

 

그리고 나서, 평균회귀에 걸리는 시간이.... 100이하로 가장 짧은 애들은 애들끼리 모으도록 하고, 나머지는 나머지대로 모으도록 해 봅니다.

 

그리고 나서, 모든 작업을 해보기 위해서, 위 스크린샷처럼, 한번 input을 받도록 만들어 주도록 합니다. 이렇게 함으로써, 이제 준비는 끝났습니다.

 

일단 하다가 위 스크린샷처럼 에러가 나와서, 잠시 중간에 멈추는 것을 볼 수 있기도 했습니다만, 중간에 번호가 찍혀 있기 때문에 큰 문제는 없습니다.

 

이렇게 하는 것으로 어떻게 해서, 해당하는 모든 종목을 다 끝내기는 끝내는 것을 확인할 수 있기는 있었습니다. 이제 결과를 정리할 차례입니다.

 

일단 위 스크린샷처럼 일련의 결과들이 각각 adf 테스트, 허스트 지수, half-life등이 나오는 것을 확인할 수 있기는 있었습니다.

 

그런데 허스트 지수에 대해서 잘못 알아서, 다시한번 테스트를 해야 했습니다. 허스트 지수라는 것이 0.5에 확실하게 맞으면 이건 평균회귀가 아닌, 랜덤워크인 것이 맞고, 그 다음으로는 0에서 0.5미만이면 평균으로 회귀, 0.5를 초과해서 1에 가까우면 이는 계속해서 상향하는 성향이 있다는 것을 알려준다고 합니다.

 

이렇게 하는 것으로 이제는 위 스크린샷에서 나오는 것처럼 새로이 허스트 지수를 확보할 수 있기는 있었습니다. 먼저 위 스크린샷처럼 0.5미만이면 under, 초과면 positive로 들어가고, 그 외에는 weak로 들어가도록 해 보았습니다.

 

이제 결과를 한번 엑셀파일에 일단 정리를 했는데, 이를 이제 비교 분석해야 하는 일이 남아 있기는 있습니다. 어찌어찌 되었건 건에......... 이 작업을 수작업으로 하기는 너무 양이 많은데, 어떻게 자동으로 해보는 방법을 고안해 보기는 봐야 겠다는 생각이 듭니다.

반응형