2012년 12월 25일 화요일

Dimensionality Reduction in Time Series

※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 

▶ Multiresolution Analysis with Wavelet Transform

  파동은 상이한 진폭과 상이한 주기(또는 주파수)를 갖는 다수의 신호들이 복합된 것(composite signal)이라고 볼 수 있다. 예를 들어 다음의 파동을 관찰해 보자.
그림 1. Composite signal
  많은 노력을 들이지 않더라도 그림 1의 파동은 다음 그림 2의 파동 (a), (b)와 (c)를 합쳐 놓은 것이라는 것을 알 수가 있다.
그림 2
  Multiresolution analysis 또는 Multiscale approximation은 위의 관점에서 파동을 해체한 후, 파동을 특정 resolution(또는 scale)의 approximation과 그 보다 낮은 resolution의 detail coefficient들로 재구성한다. ※ 자세한 사항은 Wavelet Transform 관련 서적을 참고하십시요.

▶ Multiresolution Decomposition

  다음 그림은 특정 시계열 데이터에 대해 multiresolution decomposition을 수행한 결과를 보여 준다.  (Haar a trous transform, scale 5)

그림 3-1. Approximation at scale 5
그림 3-2. Detail coefficients at scale 1
그림 3-3. Detail coefficients at scale 2
그림 3-4. Detail coefficients at scale 3
그림 3-5. Detail coefficients at scale 4
그림 3-6. Detail coefficients at scale 5
  위 그림 3의 6개 파동을 모두 합치면 어떤 모양이 될까? 위 decomposition 결과를 가지고 역으로 원래의 파동을 reconstruction하면 다음 그림 4의 결과를 얻을 수 있다.

그림 4. Reconstruction
  어디서 많이 본 듯한 파동의 모양이 아닌가? 그렇다. 바로 KOSPI 지수의 최근 140 거래일 동안의 파동이다. ※ 주의: 종가 기준이 아니라 고가와 저가의 평균가 기준임

▶ Dimensionality Reduction

  우리가 주식 시장에서 접하는 파동들은 분 단위, 시간 단위, 일 단위, 주 단위, 월 단위 등 time scale에 상관 없이 그림 4와 유사한 모양을 갖는다.

  Glenn Neely의 파동 분석 방법은 '중요한 저점 또는 고점'에서 시작된 일련의 monowave들의 구조 및 진행기호 분석에서 시작된다. Elliott Pattern Helper(EPH)를 이용하여 위 chart에서 monowave들을 추출하면 다음 그림과 같다.

그림 5. Monowaves
  가령 그림 5와 같이 박스 A로부터 monowave 분석을 시작해 나갈 수도 있을 것이며, 그림 6과 같은 중간 결과를 얻을 수도 있을 것이다.

그림 6. Structure/progress notation of monowaves
  그런데, 파동 분석이 어려운 이유 중의 하나는, 그림 6에서 간파했을지도 모르겠지만, 하나의 파동에 다양한 degree의 패턴이 뒤죽박죽 섞여 있다는 것이다.

  그림 6의 파동 중간에 위치한 작은 monowave 7개를 관찰해 보자. 각각은 그 이전 monowave와 비교했을 때 시간 및 길이에서 확연한 차이가 난다. 즉, 쉽게 생각해서 degree가 다르다고 볼 수 있는데, 이들의 구조 및 진행기호를 하나씩 하나씩 분석해 나가야 할까?

  이렇듯 우리는 파동 분석 과정에서 'dimensionality curse'를 겪을 수밖에 없는데, 이를 회피할 방법은 없을까?

  이번 글의 제목이자 주제인 바, dimensionality reduction이 이 문제의 해결을 위한 수단이 되지 않을까 생각해 본다.

  어떻게 보면, 큰 추세와는 상관이 없어 보이는 작은 파동들을 하나로 묶어 의미있는 파동 패턴을 쉽게 찾을 수 있도록 하는 방법이라고 볼 수도 있겠다.

▶ Transform and Filtering

  위에서 언급한 Haar a trous wavelet transform과 filtering을 적용한 후 EPH를 통해 구조/진행기호를 분석한 결과는 다음과 같다.

그림 7-1. Before wavelet transform
그림 7-2. After wavelet transform, layer 1 filtering
그림 7-3. After wavelet transform, layer 1 & 2 filtering

   그림 7-1에서 7-3까지, 'curse'로부터 벗어나기 위한 노력이 가치가 있을까? Daily chart가 아닌 weekly chart, weekly chart보다 더 긴 시간 단위의 monthly chart를 볼 때와는 달리 detail을 포기하지 않아도 될 듯한데...


※ 그림 1과 2는 'The Illustrated Wavelet Transform Handbook, Paul S. Addison'에서 차용한 것임을 밝힙니다.


2012년 12월 6일 목요일

KOSPI200 Charts (2012-12-06)

※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 

▶ Weekly, Wave Structure

그림 1

  Weekly chart 상으로는 11월 16일에 저점(사각 박스 하단 :L5 지점)이 형성된 후 상승 모노파동이 길이를 늘려가고 있는 모습입니다.


▶ Daily, Wave Structure

그림 2

  그림 2 Daily chart를 보면, 박스 하단부 :L5 이후 새로운 충격 패턴이 형성 중이라고 판단하기는 좀 어려워 보이죠?

  대신 이중 복합조정(빨간색으로 표시된 플랫과 지그재그) 후 그에 대한 반작용으로 조정 패턴이 진행 중이라고 보는 것이 옳을 듯 합니다. 이중 지그재그처럼 보이는군요.

  이중 복합조정의 되돌림 수준은 최대 80% 정도라고 하는데요, 그렇다면 어느 수준까지 상승할 수 있을까요?


▶ Daily, Fractal Count
그림 3

  그림 3의 빨간색 동그라미로 볼 수 있는 것처럼, 어제 green에 이어 오늘(12월6일) squat 캔들이 형성되었습니다.

  이 캔들이 어떤 역할을 할까요? Fractal count 25부터 시작된 단기 추세에 대해 trend continuation squat이 될지, 아니면 trend reversing 역할을 할지 향후 전개가 기대되는 군요. 예측은 하지 않는 것이 좋겠지요, trading은 대응의 영역이니까요.


2012년 12월 3일 월요일

KOSPI Charts (2012-11-30)

※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 

▶ Monthly, Fractal Count

그림 1

  11월 캔들이 꼬리를 달면서 양봉으로 마감되었습니다. Fractal count 20, 2011년 4월에 시작된 듯한 조정 패턴이 12월에는 어떻게 진행될까요?


▶ Monthly, Wave Structure

그림 2

  그림 2의 사각형 박스 속 파동의 모양을 언뜻 보면, 고점이 낮아지고 저점이 높아지는 삼각형(:3-:3-:3-:3-:L5) 패턴처럼 보입니다. 과연 그러한지 현재 상황에서는 확인하기 쉽지 않습니다.



▶ Weekly, Wave Structure
그림 3

  그림 3 Weekly chart를 보면, 세 번째 빨간색 파동이 :3인지 아니면 :5로 판단해야 하는지 확실하지 않군요.

  만약 :5라면 미달형 :3-:3-:L5 플랫 이후 x-wave로 연결된 조정 패턴이 지속되고 있다고 봐야할 듯 합니다. :3으로 본다면, 현재 삼각형 패턴의 :L5 파동이 위 그림 3의 작은 박스처럼 진행 중이겠지요.


▶ Daily, Wave Structure

그림 4

  그런데, :L5로 보기에는 파동의 모양이 좀 이상합니다. 플랫-(x-wave)-지그재그 이후 저점을 형성하고 상승하는 모양입니다. 다르게 해석할 방법이 있을까요..?


▶ Daily, Fractal Count

그림 5

  아무래도 그림 5 Daily chart의 fractal count 27 이후 진행되고 있는 상승 파동이 어떻게 마감될지 지켜본 후 판단하는 것이 좋을 듯합니다.


2012년 11월 28일 수요일

대우증권 Charts (2012-11-27)

※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 

▶ Monthly, Fractal Count

그림 1


  Fractal count 12 이후로 조정 패턴이 진행되고 있습니다. 물론 중간중간에 한 단계 또는 더 낮은 수준의 충격 패턴이 섞여 있습니다. 나무가 아닌 숲을 본다고 할 때 파동을 어떻게 분석해야 할까요?


▶ Monthly, Wave Structure

그림 2

  Fractal count 12부터 그림 2의 T1 시점까지를 flat pattern(a:F3-b:c3-c:L5)의 a-b 파동으로 무방할 듯 합니다.

  그렇다면 마지막 c:L5를 어디까지로 봐야할까요? 현재 시점에선 확인이 어렵습니다. 아직은 A-C 추세선이 돌파될 가능성이 매우 적기 때문입니다.


▶ Weekly, Wave Structure

그림 3

  그림 2의 T1에서 T2까지의 파동을 weekly chart에서 보면 그림 3과 같습니다. 터미널 충격 패턴으로 파악해도 되지 않을까요? Chart 하단부의 Elliott oscillator 변화 추이를 보면 그렇게 판단해도 될 듯 한데요.

  만약에 그렇다면 T2에서 flat 패턴이 완성된 것일테지만, 더 지켜봐야 하겠습니다.


2012년 11월 27일 화요일

LG화학 Charts (2012-11-27)

※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 

▶ Monthly, Fractal Count

그림 1

  Fractal count 20부터 23까지 급격한 하락 이후 횡보하는 느낌입니다.


▶ Monthly, Wave Structure

그림 2

  그림 2의 빨간색으로 표시된 파동을 Zig-zag로 본다면 A-C 추세선을 돌파하지 못하여 조금 애매한 상황입니다.


▶ Weekly, Wave Structure

그림 3

  그런데 그림 3 weekly chart를 보니 A-C 추세선을 돌파한 이후 지지를 받는 모습이네요. 그렇다면 우선은 zig-zag 조정 패턴이 완성된 것으로 봐야겠습니다.

  하지만 타원으로 표시된 파동을 x-wave로 보고 조정이 연장되고 있다고 판단하는 것이 옳을 듯합니다. 물론 이후 파동 전개를 확인해야 할 것입니다.

현대제철 Charts (2012-11-26)

※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 

▶ Monthly, Fractal Count

그림 1

  Fractal count 18 이후의 파동을 어떻게 봐야 할까요?


▶ Monthly, Wave Structure

그림 2

  Zig-zag처럼 보이는 패턴 이후 현재 진행 중인 파동이 어떤 패턴으로 진행될지 지금 판단하기는 쉽지 않습니다.


▶ Weekly, Wave Structure

그림 3

  그림 2처럼 zig-zag 패턴 :5-:3-:5가 완성되었다면, 마지막 :5가 그림 3처럼 터미널 충격패턴으로 마감되었다고 판단해야 합니다. 그런 다음 새로운 조정 패턴이 시작되었다고 봐야겠죠. 그림 3의 타원으로 표시된 부분의 파동이 x-wave의 역할을 하면서, 이후 조정 패턴이 얼마나 길어질지 예측하기 힘든 상황이 되는 것이지요.

  그림 2의 zig-zag가 완성되지 않았다고 가정하면 어떻게 될까요? 그렇다면 마지막 :5 중 1번 파동이 그림 3의 터미널 패턴으로 완성된 후 2번 파동에 이어 3번 파동이 진행 중이라고 봐야 할 것 같습니다.


2012년 11월 26일 월요일

KOSPI Charts (2012-11-23)

※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 

▶ Weekly, Wave Structure


그림 1


▶ Daily, Wave Structure

그림 2


▶ Daily, Fractal Count

그림 3


  Fractal count 20 이후 x-wave로 연결된 이중 조정(Flat과 Zig-zag combination)이 완성되는 듯한 모습입니다.

  Fractal count 27이 20 이후의 하락을 마감하는 역할을 할 수 있을까요? Weekly chart를 보면 조금 짧아보이는데요...


2012년 11월 23일 금요일

LG패션 Charts (2012-11-23)

※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 

▶ Monthly, Wave Structure

그림 1

▶ Weekly, Wave Structure

그림 2


  늘어진 flat a-b-c 조정의 마지막 c 파동이 :5-:3-:5-:3-:5 충격 패턴으로 진행되는 것처럼 보입니다. 그 중 세 번째 파동 :5가 한 단계 낮은 수준의 미달형 충격 패턴으로 마감되고 네 번째 파동이 시작된 듯한 모습입니다.

KOSPI 증권 Monthly Charts (2012-11-23)

※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 

▶ Monthly, Wave Structure

그림 1

▶ Monthly, Fractal Count

그림 2

  a-b-c 조정의 마지막 c 파동이 :3-:3-:3-:3-:5 터미널 충격 패턴으로 진행되는 것처럼 보입니다. 만약 그렇다면 :L5가 완성될 때까지 시간이 수 개월 더 소요될 듯 합니다.


2012년 11월 21일 수요일

KOSPI200 Charts (2012-11-21)

※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 

▶ Monthly, Wave Structure

그림 1

▶ Monthly, Fractal Count

그림 2

▶ Weekly, Wave Structure

그림 3

▶ Weekly, Fractal Count

그림 4

  고점은 낮아지고 저점은 높아지는 모양입니다. 그림 3과 같은 :3-:3-:3-:3-:3 패턴의 완성을 기다려야 할까요? 

  그림 4에 보이는 지난 주의 Squat이 불완전해 보이는 패턴의 완성을 예시하는 것이라고 기대하기는 좀 성급해 보이는군요.


Proof - Gradient of ANFIS w.r.t a premise parameter

※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 




Neuro-Fuzzy Control and Time-Series Forecasting

※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 


  이번 글에서는 지난 글에 이어 ANFIS를 사용하여 시계열(time-series) 데이터를 분석하고 그 결과를 기반으로 향후 흐름을 예측하는 방법을 하나 더 소개하겠습니다.

  지금 소개할 방법이 지난 글에 소개된 것과 조금 다른 점은 두 개의 ANFIS를 사용한다는 것입니다. 실제 예측을 수행하는 'Plant'로서의 ANFIS와 이것에 제공될 Control 신호를 생성하는 'Controller' ANFIS가 함께 사용되는 일종의 Neuro-fuzzy contol 형태를 구성하는 방법입니다.


그림 1. Neuro-fuzzy control

  ※ 참고 논문: George S. Atsalakis, Kimon P. Valavanis, 'Forecasting stock market short-term trends using a neuro-fuzzy based methodology', 2009.


1. 모델링

   기본적인 발상은, 주가의 흐름을 아래와 같이 descrete-time 도메인 상의 process-controller equation으로 이해하는 것입니다.

        x(k+1) = f(x(k), u(k))
        u(k) = g(x(k))

  시간 k+1에서의 주가 x(k+1)은 시간 k에서의 주가 x(k)와 control signal u(k)에 의해 결정되며, 궁극적인 문제는 x(k)로부터 u(k)를 찾는 것입니다.

  위 논문에서 사용된 controller ANFIS의 training data set은 [x(k), x(k+1); u(k)]입니다. x(k)x(k+1)은 각각 시간 kk+1에서의 주가의 변화이며, u(k)는 |x(k) - x(k+1)|입니다. Membership function은 Gaussian 2로 각각의 input에 대해 5 개, 총 25 개의 inference rule로 400 epoch 동안 training을 수행했습니다.

  예측을 수행하는 plant ANFIS에서 사용할 signal u(k)의 값은 learning 이후의 controller ANFIS에서 input (x(k), xd(k+1))에 대해 계산한 output입니다. 여기서, xd(k+1)은 시간 k+1에서의 주가의 변화 x(k+1)을 미리 알 수 없기 때문에 사용한 값으로서, 시행착오 끝에 시간 k에서의 3일 이동평균 변화량을 채택했다고 합니다.

  주식시장의 프로세스 모델이라고 볼 수 있는 plant ANFIS는 data set [x(k-1), x(k), u(k); x(k+1)]으로 training한 후, 예측을 수행하도록 했습니다. 각각의 input에 대해 Gaussian 2 membership function을 3 개씩, 총 27 개 rule로 100 epoch 동안 training했습니다.


2. 테스트 시스템

  위 논문에 소개된 neuro-fuzzy control 모델을 그대로 적용하였으며, membership funciton만 Gaussian 2가 아닌 Gauss membership function을 사용하여 테스트했습니다.

  테스트 데이터로는 680 여개의 KODEX 레버리지 지수 데이터를 사용했으며, 이를 90%와 10%로 나누어 각각 training data set과 검증용(check) data set으로 나누어 테스트를 진행했습니다. 


3. 테스트 결과

  아래 그림 2는 controller ANFIS에 의한 output입니다. Training data set에 대해서는 실제 u(k)와 계산된 u(k) 값이 거의 일치하는 것처럼 보입니다. 물론 마지막 input (x(k), xd(k+1))의 output은 실제 값과는 차이가 나는 것을 볼 수 있으며, 이는 당연한 결과일 것입니다. 


그림 2. Controller ANFIS Output

  다음 그림은 plant ANFIS를 100 epoch 동안 training하는 과정에서의 learning error 변화를 나타낸 것입니다.


그림 3. Plant ANFIS의 epoch 별 에러 추이

  위 결과에 따라 epoch 수를 72회로 조정하여 plant ANFIS를 다시 training했습니다. 다음은 controller ANFIS가 산출한 u(k)를 input signal로 받아 plant ANFIS가 예측한 output, 즉 x(k+1) = f(x(k-1), x(k), u(k))를 실제 주가 흐름과 대비하여 표시한 그림입니다. 


그림 4. Plant ANFIS Output

  위 그림 3의 결과를 보면 '모양은 비슷해 보이지만.., 한 발 늦는군...'요. 논문에서는 4,000여 개가 넘는 data로 training한 후 60%가 넘는 'hit ratio' 결과를 얻었다고 하는데요, 위 결과는 그에 미치지 못했습니다. Training data의 양을 늘려야 할까요..?


4. 결 론

  정리를 하면, 주식 시장의 프로세스 모델을 아래 식에 기반한 neuro-fuzzy control로 모델링하여 주가의 단기 흐름을 예측해 보았습니다.

        x(k+1) = f(x(k-1), x(k), u(k))
        u(k) = g(x(k))

  Control signal u(k)는 3일 이동평균 변화량에 대한 controller ANFIS의 output입니다. 

  위 참고논문에서는 연구 성과를 타 연구들과 대비하여 'Hit Ratio가 조금 더 낫다'라고 스스로 평가하고 있습니다. Hit ratio 60% 정도면 'Random Walk'보다는 좋겠지요...? 

  물론, 제가 직접 테스트한 결과 수치는 그 정도까지 나오진 않았습니다만 training data의 양을 크게 증가시키고 동일한 membership function을 사용한다면 더 좋은 결과가 나올 수도 있을 것입니다.


2012년 10월 15일 월요일

ANFIS and Time-Series Forecasting

※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 


  지난 9월의 한 글에서 시계열(time-series) 데이터를 분석하고 그 결과를 기반으로 향후 흐름을 예측하는 방법을 하나 소개했었지요. 그 방법은 과거의 주가 흐름을 단순한 형태의 Fuzzy time series로 구조화(Fuzzy Inference System, 이하 FIS)하여 분석하는 것이었습니다.

  이번 글에서는 신경망(Neural Network, 이하 NN) 기반의 인공지능(Artificial Intelligence, 이하 AI) 기법을 이용한 주가 예측 방법을 한 가지 소개하고, 실제 구현하여 테스트한 결과를 공개합니다. 

  이 또한 과거에 발표되었던 논문을 기준으로 한 것이며, 이 방법에 의한 예측 결과를 실제 투자의 기준으로 활용하는 것은 부적절할 수 있음을 미리 알립니다.

  ※ 참고 논문: George S. Atsalakis, Emmanouil M. Dimitrakakis, Constantinos D.Zopounidis, 'Elliott Wave Theory and neuro-fuzzy systems, in stock market prediction: The WASP system', 2011.


1. 기술적 배경

  분석에 사용한 이론적·기술적 방법은 ANFIS, 즉 Adaptive Network-based Fuzzy Inference System(이하 ANFIS)입니다.

  일종의 FIS인데요, 그 내부에서 사용되는 membership function(이하 MF)의 parameter들을 NN의 자기학습(learning)으로 최적화함으로써 예측이나 분류 등 다양한 분석 분야에 사용됩니다.


  • Fuzzy inference system
  보통 우리가 알고 있는 함수들은 input이 가령 x = 3, y = 4일 때 output z = x^2 + y^2 = 5^2이다...처럼 실수나 복소수 값(crisp value)들을 사용합니다. 그런데 이를 전제로 하는 함수 또는 식으로 모든 시스템을 simulation할 수는 없습니다.

  특정 분야의 어떤 전문가들은 가령 수온이 꽤 높을 때 밸브를 잠근다...처럼 오랜 경험에 기초하여 시스템을 운영하기도 합니다. 이러한 전문가들의 행위를 자동화한다면 시스템을 어떻게 모델링해야 할까요? 수온이 꽤 높다...? 80도? 90도? 어떤 특정 값으로 정의하기는 어렵습니다.

  이런 문제들을 모델링하기 위해 나온 것이 fuzzy value(또는 fuzzy set)라는 개념과 이에 기초한 FIS입니다.

  FIS는 input과 output으로 crisp value가 아닌 fuzzy value를 갖는 다수의 룰(inference rule, 함수에 대응)을 정의함으로써 시스템을 모델링 합니다. 그런데, fuzzy value는 MF로 정의됩니다. 가령 '꽤 높다'라는 fuzzy value는 수온에 대해 10℃를 0으로, 20℃ → 0, ..., 60℃ → 0, 70℃ → 0.5, 80℃ → 1, 90℃ → 1, 100℃ → 1 등으로 대응시키는 함수, 즉 MF(그림 1 참조)로 정의할 수 있습니다.

그림 1. Membership function

  따라서 어떤 시스템을 FIS로 모델링 또는 simulation 한다는 것은 input과 output을 몇몇 MF로 정의하고 이들 사이의 대응관계, 즉 inference rule을 찾는 것입니다. 

  • Neural network
  인공지능(AI)이나 신경망(NN)에 대한 구체적인 거론은 기회가 되면 하기로 하구요, ANFIS와 관련해서 필요한 사항만 언급하겠습니다.

  특정 시스템을 FIS로 구현하려면, 위에서 얘기했듯이 다수의 MF를 정의해야 합니다. 그런데, 시스템의 input과 output을 정의하는 것 뿐만 아니라 MF와 inference rule을 찾는 데에도 해당 분야의 전문적인 지식이 필요하며, 수많은 시행착오를 겪을 수밖에 없습니다.

  MF는 주어진 input에 대해 0에서 1 사이의 값인 membership grade를 대응시킵니다. 대표적인 형태로 triangle, trapezoid, gaussian, bell 및 sigmoid 등이 있는데, 각각의 형태에 대해 구체적인 모양을 규정하는 parameter들이 존재합니다. 이들을 premise parameters라고 합니다. 각각의 inference rule 또한 최종 output을 산출하기 위해 몇몇 parameter들을 사용하는데요, 이들은 consequent parameters라고 불립니다. (그림 2의 pi, qi, ri 등)

그림 2. ANFIS

  FIS를 정의하는 이 parameter들을 찾기 위해, ANFIS는 노력과 시행착오를 줄이기 위한 방편으로 NN의 자기학습(learning) 기법을 사용합니다.


  2. 시스템 모델링

   모델링 대상은 time-series로서 KOSPI 종목 LG전자 주가의 흐름이며, 시스템의 input과 output은 위 논문의 내용을 따릅니다. 아이디어를 간략히 기술하면, 3일 동안의 Elliott wave oscillator(이하 EWO) 흐름으로 주가 흐름을 예측하는 것으로서, EWO가 (+)에서 (-)로 또는 (-)에서 (+)로 바뀔 때를 의미있는 진입시점으로 관측하기 위함입니다.
  • Input: 3일간의 Elliott wave oscillator (EWOt-2, EWOt-1, EWOt)
  • Output:(t+1)일의 주가 흐름 (if positive rate of change then 1, else -1)
  각각의 input에 대한 membership function의 갯수는 2개로서 '높다'와 '낮다' 두 개의 fuzzy value만을 사용하는 것입니다.

  논문에서는 MF를 이런 저런 형태로 바꿔가면서, NN의 step size(learning과 관련된 parameter)를 다양한 값으로 변경해가며, 총 42개의 ANFIS 모델을 사용했다고 합니다. 테스트 데이터(training data set)에 대해 학습을 수행한 후 에러율이 낮은 모델을 선택하여 예측치를 산출하고 그 결과를 바탕으로 진입/청산을 한 것이지요. 자세한 내용은 논문을 참조하시기 바랍니다.

  이 글은 위 논문의 아이디어를 LG전자 종목에 대해 제가 구현한 테스트 시스템을 사용하여 몇몇 MF type으로 테스트한 결과를 포함합니다.


3. 테스트 시스템 구축

  테스트 시스템은 Ubuntu(VirtualBox guest)에서 GNU Scientific Library(GSL)를 사용하여 개발한 후, Windows용으로 porting하여 향후 Elliott Pattern Helper에서 활용할 수 있도록 했습니다.

  이 과정에서 GSL을 Windows용으로 porting해야 했는데요, 다행히도 Visual Studio용 솔루션 파일을 구할 수 있었습니다. 이것을 이용하여 Visual Studio 2012 Express에서 GSL을 porting 했습니다.
  테스트 데이터로는 2008년 6월 10일부터 2012년 10월 5일까지 총 1,084개의 LG전자 주가 데이터를 사용했으며, 이를 NN의 training data set과 검증용(check) data set으로 나누어 테스트를 수행했습니다. 


4. 테스트 결과

  Training data set으로는 전체 1,084 개의 데이터 중 50%를 사용하고 나머지 50%를 검증에 사용했습니다. 

  반복 learning 횟수(epochs)는 MF 별로 over fitting으로 인한 error measure의 상승이 관측되기 전까지로 했으며, error measure로는 Root Mean Square Error(이하 RMSE)를 사용했습니다. 

  결과는 실제 주가의 흐름(상승 또는 하락)과 ANFIS의 계산 결과(+ 또는 -)를 단순비교하여 백분율로 표시하겠습니다.

  • Gauss MF, 500 Epochs

그림 3. Epoch별 RMSE 추이 - Gauss MF

             ▶ 결과: training data set: 57%
                          check data set:   49%

  • Bell MF, 240 Epochs

그림 4. Epoch별 RMSE 추이 - Bell MF

             ▶ 결과: training data set: 52%
                          check data set:   52%


  • Triangle MF, 300 Epochs
그림 5. Epoch별 RMSE 추이 - Triangle MF


             ▶ 결과: training data set: 52%
                          check data set:   50%

  • Trapezoid MF, 64 Epochs

그림 6. Epoch별 RMSE 추이 - Trapezoid MF

             ▶ 결과: training data set: 57%
                          check data set:   46%



  • Sigmoid MF, 200 Epochs

그림 7. Epoch별 RMSE 추이 - Sigmoid MF


             ▶ 결과: training data set: 45%
                          check data set:   45%



5. 결 론

  Training data set에 대해서는 최고 57%의 결과를 얻었지만, learning 이후 실제 예측에서는 최고 52%로 그리 만족할만한 수치가 아니군요. Training data set의 비율을 70%, 80%로 늘려도 결과는 거의 비슷하게 나왔습니다.

  소득이 있다면, MF의 종류에 따라 그 결과가 확연히 다르다는 것을 알 수 있었다는 것입니다. 그렇다면 MF의 수를 달리하면 어떻게 될까요..? 그리고, LG전자가 아닌 다른 종목에 대해 테스트를 하면 어떻게 될까요..?

  우선은 ANFIS 테스트 시스템을 구축한 것으로 만족해야 겠습니다. 이후에는 input과 output을 EWO나 주가 등락이 아닌 다른 변수로 바꾸어가며 테스트를 해보고 그 결과를 올리도록 하겠습니다.