Archive for the Category » 금융공학 «

Monday, June 07th, 2010 | Author: salbang

Beyond System Trading

시스템 트레이딩은 알고리즘 트레이딩의 일부로 볼 수 있습니다. 그외에 시스템 트레이딩이 갖지 못하는 알고리즘 트레이딩만의 특징에 대해 시스템 트레이딩과의 비교 분석을 조금 해보겠습니다. (시스템 트레이딩은 우리나라에서 사용하는 일종의 콩글리쉬 같긴 합니당.)


시스템 트레이딩의 장점이자 단점이라 할 수 있는 면으로는, 오로지 매매 신호(Signal)에만 집중하고 있다는 점입니다. 때문에 전략 개발이 단순하기는 하나 보다 복잡한 전략은 만들 수 없습니다.  반면 알고리즘 트레이딩은 매매 신호 뿐만 아니라 Inventory management까지 통합적으로 관리할 수 있기 때문에 주문을 넣었다 취소했다 뺐다가 등등의 행동도 하고 현재 내 포지션의 상태를 검토하고 이를 바탕으로 전략을 수정한다던가 주문을 더/덜 하는 전략도 가능합니다.

시스템 트레이딩 툴은 Single asset의 주문에만 치중해 있습니다. 반면 알고리즘 트레이딩은 Multi asset에 대한 주문도 고려하기 때문에 Pairs 트레이딩 등의 전략 구현도 포함합니다.

국내에서는 증권사들이 제공하는 API를 사용하면 시스템 트레이딩을 넘어 알고리즘 트레이딩이 가능하긴 한데 백 테스팅이라던가 전략 개발 속도라던가 하는 면에서 많은 포기가 따릅니다. 보다 체계적이고 통합적인 알고리즘 트레이딩 전략 개발 툴이 필요한 것 같습니다. 외국의 예를 들면 이러한 플랫폼에는 Marketcetera, Apama 등이 있습니다.

Tuesday, May 25th, 2010 | Author: salbang
R. W. Hamming 왈
Digital filtering includes the process of smoothing, predicting, differentiating, integrating, separation of signals, and removal of noise from a signal. Thus many people who do such things are actually using digital filters without realizing that they are; being unacquainted with the theory, they neither understand what they have done nor the possibilities of what they might have done.
그래서 해야 함.

Quote 출처 :
Tim Tillson, Smoothing Techniques For More Accurate Signals, Stocks & Commodities, Volume 16, Issue 1 pp 33-37.

Sunday, February 14th, 2010 | Author: salbang

HTS에서 기본적으로 가격 Smoothing을 위해 제공하는 Low-pass(저역 통과) 디지털 필터에는 다음과 같은 3가지가 있다.

  1. 단순 이동 평균, y[n] := \sum_{k=0}^{L-1} \frac{1}{L}x[n-k].
  2. 가중 이동 평균, y[n] := \sum_{k=0}^{L-1}w_k x[n-k], where w_k = \frac{L-k}{\sum_{m = 1}^L m}.
  3. 지수 이동 평균, y[n] := (1-\alpha) y[n-1] + \alpha x[n], where \alpha = \frac{2}{L+1}.

이 글에서는 각 이동 평균 별로 주파수 도메인에서 어떤 특성을 갖고 있는지에 대해서 얘기해 보려 한다.

약간의 신호처리 기본에 대해 얘기하자면 위와 같은 입출력 관계는 다음과 같은 콘볼루션 식으로 나타낼 수 있다.

a*y[n] = b*x[n], where h*x[n] := \sum_{k = -\infty}^{\infty} h[k]\times x[n-k].

그리고 위와 같은 LTI(Linear Time Invariant) 시스템의 z 도메인에서의 응답(Response) H(z) := \frac{Y(z)}{X(z)}은 다음과 같다.

H(z) = \frac{\sum_{k=-\infty}^{\infty} b_k z^{-k}}{\sum_{k=-\infty}^{\infty} a_k z^{-k}}.

이 시스템의 주파수 응답은 H(e^{j\omega}), where j = \sqrt{-1}로 정의 된다. 이 주파수 응답의 의미는 위 시스템(T)에 복소 주기 수열(고유 벡터) x[n] := e^{j\omega n}이 입력으로 인가됐을 때의 출력에 대한 고유값(T\{e^{j\omega n}\} = H(e^{j\omega})e^{j\omega n}을 의미한다.

이제 각 이동 평균 별로 주파수 응답에 대해서 보자. Magnitude Response (진폭 응답?), |H(e^{j\omega})|을 보도록 하겠다. L = 4를 사용하도록 하겠다. -6 dB에 빨간 직선을 그은 것은 그 지점이 진폭이 반(20\log_{10}0.5 \approx -6)이 되는 지점으로 여길 기준으로 주파수가 Cut-off 되는 것으로 판단한다.

먼저 단순이동평균 : y[n] = \frac{1}{4}x[n] +\frac{1}{4}x[n-1] + \frac{1}{4}x[n-2] + \frac{1}{4}x[n-3].

단순 이동 평균의 진폭 및 위상 응답

x축은 Normalized Frequency라고 해서 Radian값을 \pi로 나눈 값이다. 각주파수로 생각하면 되는데 1이 의미하는 바는 \pi 즉 반주기(2\pi/2)인데 이는 Nyquist frequency 때문에 차트 상에서 2개의 Bar를 의미한다고 보면 된다. 위 그림에서 보면 알겠지만 0.5와 1에서 진폭 응답이 0(-\inftydB)임을 볼 수 있다. 즉 단순 이동평균은 4개 Bar(1/0.5 \times 2) 및 2개 Bar(1/1 \times 2)의 주기를 갖는 데이터는 완전히 날려 버리는 성질을 갖고 있다. 물론 이 필터를 사용하는 목적은 Low pass, 즉 낮은 주파수의 데이터를 통과시키는 것이기는 하지만 4일 이동 평균에서 2일 및 4일 주기의 정보를 완전히 날려버리는 것은 의도하지는 않았을 것이다. Cut-off 주기는 대략 봤을 때 0.3 \pi radian, 즉 1/0.3*2= 6.67 Bars 정도 되는 것을 알 수 있다.

다음으로 가중 이동평균 y[n] = \frac{4}{10}x[n] +\frac{3}{10}x[n-1] + \frac{2}{10}x[n-2] + \frac{1}{10}x[n-3]의 주파수 응답을 보자.

가중이동평균의 진폭 및 위상 응답

다행이 이 필터는 4 Bars 및 2 Bars의 주기를 갖는 정보를 완전히 날려버리지는 않는 것을 볼 수 있다. Cut-off 주기는 약 0.35 \pi radian, 즉 5.71 Bars 정도 되는 것을 알 수 있다.

이번에는 지수 이동 평균 y[n] = 0.6y[n-1] + 0.4x[n] (\alpha = 2/(4+1) = 0.4)을 보도록 하자.

지수이동평균의 진폭 및 위상 응답

전체적으로 가중이동평균과 비슷한 모습을 보이나 가중 이동평균과 같은 출렁임은 없다. Cut-off 주기는 약 0.29 \pi 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’);


덧 : 그런데 좀더 공부해 보니 단순 이동평균의 4일/2일 주기를 완전히 날려버리는 성질도 좋네요. 리플이 커서 그렇지. 이런 부분은 Elliptic Filter나 Chebyshev Type II 필터 아니면 원하는 스펙으로 디자인한  FIR필터를 사용하여 개선할 수 있습니다.