News & Events
[페어 트레이딩/고급편] 23. 공적분 계수 추정 알고리즘 (VBA)
- 2019년 1월 7일
- Posted by: 인사이트캠퍼스
- Category: 금융/AI/IT 기사
페어트레이딩 (Pairs Trading) – 추가편(7)
공적분 계수 추정 알고리즘 (VBA)
공적분 계수를 추정할 때 엑셀의 해찾기 기능을 이용하지 않고 알고리즘으로 추정하는 방법에 대해 알아본다 (몇몇 분이 질문을 하셔서 VBA로 간단히 구현해 보았습니다).
스프레드의 자기상관계수 (시차=1)는 아래식과 같이 공적분 계수에 대한 함수로 표현할 수 있고, 그 관계는 오른쪽 그래프와 같다. 공적분 계수가 증가할수록 자기상관함수가 감소하다가, 다시 상승함을 알 수 있다. 즉, 유일한 최솟값이 존재한다. 자기상관함수가 최소가 되는 공적분 계수를 구하려면, 아래식의 자기상관함수를 공적분 계수에 대해 미분한 후, 미분값이 0 이 되는 공적분 계수를 구하면 된다. 그러나 아래 식을 미분하는 것이 쉬워보이지는 않는다 (조금 시도하다가 포기하였음).
위의 식을 미분하여 Closed-form으로 공적분 계수를 구하는 식을 만들어 놓으면 좋겠지만, 쉽지 않으므로, 수치해석을 이용하여 공적분 계수를 구하는 방법에 대해 알아보기로 한다. 아래 그림처럼 정해진 구간 내에 (lower, upper) 최솟값이 1개 존재하는 경우에 적용할 수 있는 쉬운 알고리즘으로, 동등 구간 검색법 (Equal interval search)에 의해 구간을 절반씩 나누어가는 방법과, 좀 더 개량된 방법으로 황금비율 구간 검색법 (Golden section search)이 있다. 여기서는 황금비율 구간 검색법으로 공적분 계수를 추정해 보기로 한다.
원리는 위의 그림과 같이 [lower, upper] 구간 사이에 새로운 구간 [x1, x2]을 반복적으로 만들어 가는 방식이다. 자세한 원리는 아래의 알고리즘을 보면 쉽게 이해할 수 있을 것이다.
알고리즘 절차
1. 공적분 계수의 최초 구간을 설정한다 (lower 및 upper). 이 때 자기상관함수의 최솟값은 이 범위 안에 있어야 한다. (ex: 공적분 계수의 범위 : -10 ~ +10)
2. 아래 공식으로 lower와 upper 사이의 구간 (x1, x2)을 설정한다.
x1 = lower + 0.618 * (upper – lower)
x2 = upper – 0.618 * (upper – lower)
3. f(x1) 과 f(x2)를 계산한다. f(x1)은 공적분 계수가 x1일 때의 자기상관계수이고, f(x2)는 공적분 계수가 x2 일 때의 자기상관 계수이다.
4. f(x1)과 f(x2)의 결과에 따라 구간을 새로 변경한다.
f(x1) > f(x2) 인 경우: lower=lower, upper=x1, x1=x2, x2=upper – 0.618*(upper-lower)
f(x1) < f(x1) 인 경우: lower=x2, x2=x1, upper=upper, x1=lower – 0.618*(upper-lower)
5. (upper – lower) 가 허용오차 (ex : 0.0001) 보다 작을 때까지 위의 3번 과정을 반복한다. 허용오차 이내에 들어오면 공적분 계수 = (upper + lower) / 2로 계산한다.
아래 그림은 KT-SKT 페어 스프레드의 공적분 계수를 추정한 예시이다. 해찾기로 추정한 결과와 위의 과정으로 추정한 결과가 정확히 일치한다 (상세내역은 첨부파일 참조).
[출처]23. 공적분 계수 추정 알고리즘 (VBA)|작성자아마퀀트