Beyond System Trading
시스템 트레이딩은 알고리즘 트레이딩의 일부로 볼 수 있습니다. 그외에 시스템 트레이딩이 갖지 못하는 알고리즘 트레이딩만의 특징에 대해 시스템 트레이딩과의 비교 분석을 조금 해보겠습니다. (시스템 트레이딩은 우리나라에서 사용하는 일종의 콩글리쉬 같긴 합니당.)
Beyond System Trading
시스템 트레이딩은 알고리즘 트레이딩의 일부로 볼 수 있습니다. 그외에 시스템 트레이딩이 갖지 못하는 알고리즘 트레이딩만의 특징에 대해 시스템 트레이딩과의 비교 분석을 조금 해보겠습니다. (시스템 트레이딩은 우리나라에서 사용하는 일종의 콩글리쉬 같긴 합니당.)
Quote 출처 :
Tim Tillson, Smoothing Techniques For More Accurate Signals, Stocks & Commodities, Volume 16, Issue 1 pp 33-37.
HTS에서 기본적으로 가격 Smoothing을 위해 제공하는 Low-pass(저역 통과) 디지털 필터에는 다음과 같은 3가지가 있다.
.
, where
.
, where
.이 글에서는 각 이동 평균 별로 주파수 도메인에서 어떤 특성을 갖고 있는지에 대해서 얘기해 보려 한다.
약간의 신호처리 기본에 대해 얘기하자면 위와 같은 입출력 관계는 다음과 같은 콘볼루션 식으로 나타낼 수 있다.
, where
.
그리고 위와 같은 LTI(Linear Time Invariant) 시스템의 z 도메인에서의 응답(Response)
은 다음과 같다.
.
이 시스템의 주파수 응답은
, where
로 정의 된다. 이 주파수 응답의 의미는 위 시스템(
)에 복소 주기 수열(고유 벡터)
이 입력으로 인가됐을 때의 출력에 대한 고유값(
을 의미한다.
이제 각 이동 평균 별로 주파수 응답에 대해서 보자. Magnitude Response (진폭 응답?),
을 보도록 하겠다. L = 4를 사용하도록 하겠다. -6 dB에 빨간 직선을 그은 것은 그 지점이 진폭이 반(
)이 되는 지점으로 여길 기준으로 주파수가 Cut-off 되는 것으로 판단한다.
먼저 단순이동평균 :
.
x축은 Normalized Frequency라고 해서 Radian값을
로 나눈 값이다. 각주파수로 생각하면 되는데 1이 의미하는 바는
즉 반주기(
)인데 이는 Nyquist frequency 때문에 차트 상에서 2개의 Bar를 의미한다고 보면 된다. 위 그림에서 보면 알겠지만 0.5와 1에서 진폭 응답이 0(
dB)임을 볼 수 있다. 즉 단순 이동평균은 4개 Bar(
) 및 2개 Bar(
)의 주기를 갖는 데이터는 완전히 날려 버리는 성질을 갖고 있다. 물론 이 필터를 사용하는 목적은 Low pass, 즉 낮은 주파수의 데이터를 통과시키는 것이기는 하지만 4일 이동 평균에서 2일 및 4일 주기의 정보를 완전히 날려버리는 것은 의도하지는 않았을 것이다. Cut-off 주기는 대략 봤을 때 0.3
radian, 즉 1/0.3*2= 6.67 Bars 정도 되는 것을 알 수 있다.
다음으로 가중 이동평균
의 주파수 응답을 보자.
다행이 이 필터는 4 Bars 및 2 Bars의 주기를 갖는 정보를 완전히 날려버리지는 않는 것을 볼 수 있다. Cut-off 주기는 약 0.35
radian, 즉 5.71 Bars 정도 되는 것을 알 수 있다.
이번에는 지수 이동 평균
(
)을 보도록 하자.
전체적으로 가중이동평균과 비슷한 모습을 보이나 가중 이동평균과 같은 출렁임은 없다. Cut-off 주기는 약 0.29
radian, 즉 6.9 Bars 정도 되는 것을 알 수 있다. 가중이동평균에 비교하면 주파수를 좀 일찍부터 자르는 경향이 있는 것을 볼 수 있다.
각 이동평균별로 다른 주파수 응답 특성을 보이는데 어떤 디지털필터를 사용할지 판단하는데 위와 같은 분석이 도움이 되었으면 한다.
각 이동 평균들이 얼마나 빠르게 시세를 따라가는지를 보려면 위상응답을 분석해야 하는데 이는 다음에 얘기하도록 하겠다.
위 그림을 그리기 위해 사용한 매틀랩 코드는 다음과 같다.
L = 4;
% Simple Moving Average
b1 = ones(L, 1)/L;
figure;
freqz(b1);
hold on
plot(0:0.01:1, -6*ones(size(0:0.01:1)), ‘r’);
% Weighted Moving Average
b2 = (L:-1:1)/sum(L:-1:1);
figure;
freqz(b2);
hold on
plot(0:0.01:1, -6*ones(size(0:0.01:1)), ‘r’);
% Exponentially Weighted Moving Average
alpha = 2/(L+1);
b3 = [alpha];
a3 = [1, -(1-alpha)];
figure;
freqz(b3, a3);
hold on;
plot(0:0.01:1, -6*ones(size(0:0.01:1)), ‘r’);
Recent Comments