# 개념
매매 신호 추출 시 칼만필터(Kalman Filter)를 이용하여 시변(Time-adaptive) 회귀상수를 계산한 뒤 종목 간 스프레드를 계산하였다. 스프레드를 활용해서 Pair trading 한다.
# 왜 칼만 필터를 사용하나?
칼만필터는 시간에 따라 들어온 최신정보에 맞게 최적값을 갱신하는 알고리즘이면서 동시에 효율적인 저장/연산이 가능한 방법이다. 주식가격이 움직이는 물체라면 매시점마다 들어오는 주식가격의 상태정보(기울기;속도, 평균;위치)를 바탕으로 최적의 "미래가격을 추정"할 수 있음.
The advantage of the Kalman filter is that we don't need to select a window length. It makes predictions based on the underlying model (that we set parameters for) and the data itself. We do open ourselves up to overfitting with some of the initialization parameters for the filter, but those are slightly easier to objectively define. There's no free lunch and we can't eliminate overfitting, but a Kalman Filter is more rigorous than a moving average and generally better.
# 칼만 필터란?
노이즈가 포함된 측정치로 부터 실체 상태를 추정(推定, estimation)하는 도구다
상태벡터 = 과거의 "상태벡터(속도,위치 등)와 프로세스 잡음"의 선형조합
주식가격 = 현재의 상태벡터와 측정 잡음의 선형조합
프로세스 잡음 (Process Noise) w와 측정 잡음 (Measurement Noise) z의 경우, 두 잡음의 평균이 0 이라고 (즉, White Noise) 가정함. 또한, w와 z 간에는 상호 작용(correlation)이 없어야 합니다. 즉, 어떤 시간 k에서든 w_{k}와 z_{k}는 독립적인 랜덤 변수(independent random variable) 이어야 한다. 오차의 정규성 가정이 필요하지만, 없어도 무방함.ㅎ
## 어떻게 작동하지?
At each time step, it makes a prediction, takes in a measurement, and updates itself based on how the prediction and measurement compare. 매 시점마다 예측하고 관측치와 비교하면서 오차를 줄여나가는 회귀모형.
- 각 시점의 상태변수와 표준편차를 가진다.
- 각 시점의 표준편차를 가중치로 사용해 이전 시점과 현 시점에 대한 "상태변수(값)의 가중평균"을 계산함.
= [(sd1)^2 + (sd2)^2] / [(sd1)^2 * (sd2)^2]
*표준편차가 클수록 가중치가 작음.
# 실습코드
# Compute rolling mean and rolling standard deviation
ratios = S1/S2
kf = KalmanFilter(transition_matrices = [1],
observation_matrices = [1],
initial_state_mean = 0,
initial_state_covariance = 1,
observation_covariance=1,
transition_covariance=.001)
state_means, state_cov = kf.filter(ratios.values)
state_means, state_std = state_means.squeeze(), np.sqrt(state_cov.squeeze())
window = 5
ma = ratios.rolling(window=window,
center=False).mean()
zscore = (ma - state_means)/state_std
Source
- lovely-embedded.tistory.com/15
- gaussian37.github.io/ad-ose-lkf_basic/
- codingcoding.tistory.com/439
- medium.com/@haohanwang/kalman-filters-and-pairs-trading-1-5d191032234
- mkjjo.github.io/finance/2019/01/20/kalmanfilter.html
'Trading > Strategies' 카테고리의 다른 글
ALT - Short position setup (trend strat.) (0) | 2020.12.19 |
---|---|
ALT - Long position setup (trend strat.) (0) | 2020.12.18 |
ALT - Mean reversion Strategy (0) | 2020.11.27 |
ALT - Long-Short Equity Strategy (0) | 2020.11.27 |
ALT - Momentum Strategy (0) | 2020.11.27 |