본문 바로가기
시스템트레이딩

우상향 추세의 평가

by 오늘밤날다 2023. 4. 19.

 

안정적인 우상향 추세를 어떻게 수치로 나타낼 수 있을지 고민하다가 상관계수와 결정계수를 이용해 보기로 했다.

전체 시계열 데이터 중에서 매일 동안 과거 일정 기간을 정한 후에 이 기간 동안의 값을 계산하기 위해서는 연산값이 많아서 속도가 꽤나 지연되는 현상이 있었다. Numpy, Scipy, Custom func with Numba 등 여러 가지를 활용해 봤지만 그냥 Pandas의 내장 함수를 이용하는 것이 속도 측면에서 가장 좋은 성과를 보였다.

 

 

우선 0부터 행의 개수만큼 1씩 증가하는 straight_line(직선)을 하나 만들고 이것과 종가('close')와의 상관관계를 rolling.corr() 함수를 사용해서 구한 뒤에 이 값을 다시 결정계수로 바꿔주면 된다. 

 

tf = 120
df['straight_line'] = np.arange(0, len(df))
df['corr'] = df['close'].rolling(window=tf).corr(df['straight_line'])
df['r2'] = df['corr'] ** 2

 

 

 

 

 

삼성전자(005930)을 가지고 straight_line과의 상관관계를 120일 동안 구한 값들을 그래프로 나타낸 것이다. 상관관계가 1에 가까운 높은 값을 유지하면서 한동안 일정하게 유지되는 구간들이 있다. 이를테면 2016년부터 2017년 말까지는 큰 흔들림 없이 우상향 하는 흐름을 보여주는데 이 시점에는 상관관계가 1에 가깝게 높은 위치에 머무르게 된다.

 

 

삼성전자(005930) - 120일 상관관계

 

삼성전자(005930) - 120일 상관관계 (2016 ~ 2017)

 

 

 

 

 

꾸준히 상승세를 유지하고 있는 두 종목(선광, 대성홀딩스)에 적용해 봤다.

선광(003100) - 120일 상관관계 (2019 ~ 현재)
대성홀딩스(016710) - 120일 상관관계 (2019 ~ 현재)

 

 

 

 

 

상장 이후 고점을 찍고 한동안 지속적으로 하락하기만 했던 박셀바이오의 경우 한동안 straight_line과 상관관계가 매우 낮게 유지되었다.

 

박셀바이오(323990) - 120일 상관관계 (상장이후)

 

 

 

 

 

마지막으로 셀트리온에 적용한 결과. 꾸준히 상승해 온 것 같지만 절치부심이 많았다. 결과론이지만 대상승을 보여준 2017년 하반기에 대략 상관관계가 0.8을 넘는 구간에서만 투자했더라도 큰 수익을 봤을지도?

셀트리온(068270) - 120일 상관관계 (상장이후)

 

셀트리온(068270) - 120일 상관관계 (2017 ~ 2019)