2014년 12월 3일 수요일

네오위즈인터넷 Charts (2014-12-02)


▶ 특이사항
  
    거래량이 3배 이상 증가하면서, MACD oscillator가 signal line을 golden cross
  

그림 1. MACD oscillator, signal line golden cross
  
▶ 엘리어트 패턴
  
    일봉에서 지그재그(:5-:3-:5) 패턴의 하락 조정 완성을 기다림 - 지그재그의 세 번째 파동이 한 단계 낮은 수준(degree)의 충격패턴 중 :L5로 마감될 것을 기대
  

그림 2. 일봉 엘리어트 패턴
  
    60분봉에서도 한 단계 더 낮은 수준의 :L5를 완성하는 상승 되돌림을 확인할 수 있는데, 이 되돌림이 두 단계의 수준을 동시에 완성하는 것으로 보임
  

그림 3. 60분봉 엘리어트 패턴

    일봉이 장대 양봉이지만, 60분봉에서 역망치형 캔들이 발생했으므로, 하락조정이 연장될 것인지 확인할 필요가 있음
  

2014년 12월 2일 화요일

KODEX 인버스 charts (2014-12-01)


▶ 특이사항
  
    1. 일봉 OBV 지표의 다이버전스
  

그림 1. OBV 지표

    2. Squat following Green
  

그림 2. Bill Williams' Profitunity Window

▶ 엘리어트 패턴
  
    충격패턴의 4번 파동이 지그재그 패턴으로 완성될 가능성이 있어 보임 - 패턴의 완성은 위 '특이사항'의 다이버전스를 근거로 한 것임  


그림 3. 엘리어트 패턴 - 방향성 움직임



2014년 10월 20일 월요일

PGCL+ (Parallel Graph Component Labeling and Linking)


  PGCL+, data-parallel 알고리즘을 사용하여, labeling된 이미지로부터 동일한 라벨을 갖는 픽셀을 연결(linking)하여 클러스터를 찾고 그 위치와 크기 및 클러스터의 수를 계산하기 위한 것이다.
  
  PGCL+는 내부적으로 GPU 메모리 상에 2 개의 변수를 관리한다. 하나는 각 클러스터에 속하는 오직 한 개의 쓰레드만이 전체 클러스터 수를 증가시키도록 하기 위한 변수(V1)이며, 또 다른 하나는 클러스터 전체 수를 저장하기 위한 것(V2)이다.
  

  • PGCL+ V1 변수
  V1은 결함이미지의 전체 픽셀 수와 같은 크기의 배열로서, 배열의 각 원소는 uint2 구조체(struct)이다. 구조체 uint2 unsigned int형 변수 2 개를 원소로 가지며, 이들 은 각각 '변수이름.x' '변수이름.y'로 참조할 수 있다.
  
  V1 배열 각 원소의 '.x' 원소는 Per-Cluster Cardinal Counter이다. 동일한 클러스터에 속하면, 즉 라벨이 같은 픽셀을 담당하는 쓰레드들은 V1의 해당 라벨 위치의 값을 1만큼 증가[1]시킨다(Figure 1 참조).
  
  '.y' 원소는 Inter-Cluster Ordinal Counter이다. 쓰레드들이 동시에 수행되더라도, 동일한 변수를 변경하는 경우 강제적으로 시차를 두게 함으로써 클러스터에 순서를 부여한다.
  

Figure 1. PGCL+ InitLink 1
  
  PGCL+는 세 단계를 거친다

  첫 번째 단계에서는 각 쓰레드로 하여금 해당하는 V1의 원소 중 '.x' 원소를, 더불어 첫 째 쓰레드 블록의 첫 째 쓰레드로 하여금 V2 0으로 초기화하도록 한다.
  
  두 번째 단계는, Figure 1과 같이, 결함픽셀을 담당하는 각 쓰레드로 하여금 Per-Cluster Cardinal Counter 1만큼씩 증가시키도록 한다

  이 과정에서 Counter 0에서 1로 증가시키는 쓰레드가 클러스터마다 유일하게 식별된다(Figure 1의 경우 Thread ID 57, 67, 172, 215에 해당). 이들 쓰레드로 하여금 V2 1만큼씩 증가시키도록 하면서 클러스터의 순서를 파악하고, Figure 2와 같이, 해당 쓰레드의 좌표와 Cardinal Counter의 값[2]을 기록한다.
  

Figure 2. PGCL+ InitLink 2
  
  마지막 단계에서는 클러스터에 속하는 각 쓰레드로 하여금 해당 클러스터와 좌표를 수정하도록 함으로써 최종 좌표와 크기를 계산하도록 한다.
  

Figure 3. PGCL+ Link
  
  ※ 이 글의 저작권은 유진인스텍(주)와 (주)웨이브앤프랙탈에 있습니다.
  



[1] 다수의 쓰레드가 동일한 변수를 경쟁적으로 변경하는 경우이므로, exclusive access가 보장되도록 해야 한다.
[2] 클러스터에 속하는 결함픽셀의 수와 일치한다.
  
  


2014년 10월 16일 목요일

Using GSL 1.16 on CentOS 6.5


1. Uninstalling lower versions of GSL


    Check whether a lower version of GSL is installed as follows,


Figure 1. Checking installed version
  and, if it does, uninstall it.


Figure 2. Uninstalling GSL of lower versions


2. Downloading GSL 1.16 source files


    Download archive file gsl-1.16.tar.gz from GNU's GSL directory.


3. Extracting source files


    Open a terminal and change directory to where the downloaded file exists. As root, extract files as follows.


Figure 3. Extracting source files

4. Compiling and installing


    Compile GSL 1.16 sources and install as follows.

 
Figure 4. Compiling and installing

5. Registering GSL shared libraries for dynamic linking  

  
    As we specified as one of configure options, '--prefix=/usr/local/gsl-1.16'  (see Figure 2), installed GSL libraries reside in /usr/local/gsl-1.16/lib, which is not included in ld's lookup path. Force ld to include the path by adding a file in '/etc/ld.so.conf.d' as follows.
  

Figure 5. Registering shared libraries - 1
  
  Insert a line into the file.
  

Figure 6. Registering shared libraries - 2
  
  Call 'ldconfig', and check if GSL libraries are loaded.
  

Figure 7. Registering shared libraries - 3
  

6. Using GSL

  
    When developing, if you want to compile a source which utilizing GSL libraries, you need to specify the paths of GSL headers and libraries as compile options. For example, see Figure 8.
  
    ※ Makefile sample
  

Figure 8. Include and library path options



  



2014년 3월 19일 수요일

Forecasting using SVM 2 - Test Data & Program

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

  지난 글 'Forecasting using SVM' 작성을 위해 사용했던 테스트 데이터와 테스트 프로그램을 공개합니다.
  

▶ 테스트 데이터


  테스트에 사용한 엑셀 파일은 2004년 1월부터 현재(2014년 3월 18일)까지 10년 여 동안의 2,500여 개 KOSPI 지수 일자별 데이터를 포함합니다.
  

그림 1. 테스트 데이터 (엑셀 파일)



▶ 테스트 프로그램


  테스트 프로그램은 엑셀 Add-in으로서 몇몇 Technical Indicator와 SVM SMO 알고리즘을 구현한 것입니다.

  
  테스트 프로그램 사용법을 간략히 설명하겠습니다. ※ 엑셀 Add-in 설치방법은 생략합니다.

  
  테스트 프로그램(엑셀 Add-in)을 설치한 후, 테스트 파일을 열고, 다음 그림 2와 같이 시트 위에서 컨텍스트 메뉴의 'SVM SMO wnf → SVM SMO'를 클릭합니다.
  

그림 2. SVM SMO wnf 실행 1
  
  'SVM SMO Settings' 폼이 팝업되면, 그림 3과 같이 'Use technical indices, 2 class classification' 체그박스를 체크하고, 'From' 텍스트 상자와 'Examples' 텍스트 상자에 각각 1,537과 800을 입력합니다. 테스트 데이터 중 후반부 1,000개를 사용하고, 그 중 800개를 training에 사용하겠다는 의미입니다.
  

그림 3. SVM SMO wnf 실행 2
  
  'Run' 버튼을 클릭하면, 그림 4와 같이 'Technical Indicators' 폼이 팝업됩니다. 사용할 지표들만 선택한 후 'Run' 버튼을 클릭하면 됩니다. ☞ (주의) 위에 첨부한 테스트 파일을 사용하지 않는 경우, 그림 4의 'Labels' 텍스트 상자의 값들을 수정해 주어야 합니다.
  

그림 4. SVM SMO wnf 실행 3
  
  다음 그림 5와 같이 테스트 결과를 확인할 수 있습니다.
  

그림 5. SVM SMO wnf 실행 결과
  
  

Forecasting using SVM

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

☞ 안내 및 사과의 글을 올립니다.

  동일한 제목으로 2013년 1월에 올렸던 글에 심각한 오류가 있었습니다. 테스트 프로그램의 버그로 인해 크게 왜곡된 결과를 게재했음을 뒤늦게 발견하게 되었습니다.
  
  죄송합니다.
  
  그리고, 관심을 갖고 오류를 찾는데 도움을 주신 연세대학교 경영대학원 석사과정 최재호님과 친구분께 감사의 말씀을 드립니다.
  


▶ 기술적 지표 (Technical Indicators)

  대부분의 트레이더는 매매기준을 설정하거나 매수/매도시점을 판단할 때 기술적 지표들을 많이 활용합니다. 뚜렷한 추세가 있을 경우에는 추세 추종형 지표를 많이 참고하고, 그렇지 않을 경우에는 변동성 지표나 모멘텀 지표에 더 무게를 두기도 합니다. 지수(또는 주가)와 지표 사이의 divergence를 매매신호로 보기도 하죠.

  그런데 이러한 지표들은 과거의 주가(또는 지수)와 거래량 등에 의해 계산되는 후행적인 성격을 갖기 때문에, 몇몇 지표만 가지고 시시각각 변하는 집단심리의 변화와 그에 의해 결정되는 주가를 예측한다는 것은 불가능한 일이라고 보는 것이 옳을 듯 합니다.

  더군다나 트레이더들이 사용하는 HTS는 지표 몇 개만 띄워 놓아도 화면이 가득찰 뿐만 아니라, HTS를 통해 더 많은 지표를 동시에 볼 수 있다고 하더라도 그 많은 숫자(지표)들이 주가의 향후 움직임과 어떤 관계가 있을지 파악하는 것은 어리석은 일일지도 모릅니다.

  그렇다면 다음 그림을 보죠.


Fig 1. Technical Indicators

  위 Fig 1과 같이 과거 일자별 주가와 여러 종류의 기술적 지표들로부터 상승할 때의 지표 조합과 하락할 때의 지표 조합을 분리해 낼 수 있다면 어떨까요? 만약 그럴 수 있다면 오늘의 기술적 지표들만 가지고 내일의 주가 흐름을 예측해 볼 수 있지 않을까요?

  이번 글에서는 위 의문에 대해 풀어나가고자 합니다. 기술적인 배경 파악을 위해 Wikipedia에 수록된 그림을 하나 보겠습니다.


Fig 2. Separating hyperplane

  Fig 2처럼 평면에서 점들을 그 특성에 따라 분리하는 선을 긋는다고 가정합시다. H1은 제대로 분리하지 못하지만, H2와 H3는 정확히 분리합니다. 물론 Fig 2와 같이 2차원 평면의 단순한 경우라면 분리선을 쉽게 그릴 수 있을 것입니다.

  하지만 3차원 공간에서 수많은 점들을 두 개로 분리하는 2차원 평면(hyperplane)을 찾는 경우라면 어떨까요? 더 나아가 Fig 1에서처럼 (지표 8, 등락 1개) 9차원 vector 공간의 vector 수 천개를 두 개의 부류로 분리하는 경우라면요?

  Machine learning 분야에서 Perceptron이나 Support Vector Machine의 개념이 등장한 것이 이런 문제들을 해결하기 위한 것이었습니다.


▶ Support Vector Machine (SVM)

  Fig 2의 H2와 H3는 모두 분리선(separating hyperplane)의 역할을 하지만 점들과의 거리가 더 먼 것이 H3라는 사실이 명확하게 드러납니다. H3와 같이 separating hyperplane들 중에서 점들과의 거리가 가장 먼 것을 maximum-margin hyperplane이라고 하며, maximum-margin hyperplane과 가장 가까운 점들을 support vector라고 합니다.

  이와 같이 수많은 샘플 데이터로부터 maximum-margin hyperplane과 support vector를 자동으로 찾아낸 후, 새로 입력된 데이터에 대해 패턴 또는 특성을 자동으로 인식하게끔 하는 learning 모델이 바로 SVM입니다.


▶ 기술적 지표를 통한 예측 모델

  서두에 품었던 의문, 즉 축적된 기술적 지표들로부터 주가를 예측하는 것이 가능한가의 문제에 대한 접근방법이 어느정도 가시화된 느낌입니다.

  Fig 1과 같이 축적된 데이터를 가지고 Support Vector Machine을 training시킨 후 예측을 하게끔 하는 모델을 직접 테스트해 보겠습니다.


▶ 테스트 시스템

  테스트 시스템은 MS Excel과 Excel VBA 모듈로만 구성했습니다. VBA 모듈은 두 개로 작성했는데, 첫 번째는 주가(시가, 고가, 저가, 종가)와 거래량으로부터 기술적 지표를 계산하는 모듈이고, 두 번째는 SVM을 구현한 것입니다.


Fig 3. Technical indicator 모듈 Interface

  SVM 모듈은 Sequential Minimal Optimization(SMO) 알고리즘을 사용하도록 작성했는데,  SVM 또는 SMO와 관련된 구체적인 내용들을 이번 글에서는 언급하지 않도록 하겠습니다.


Fig 4. SMO 모듈 Interface


  테스트 데이터는 2009년 1월 12일부터 2013년 1월 9일까지 총 1,000개의 일별 KOSPI 지수 를 사용하였으며, 이 중 800개를 training에, 나머지 200개를 예측(검증)에 사용했습니다.


▶ 테스트 결과

  테스트 결과에 대한 검증은 실제 주가의 상승 또는 하락 여부와 training된 SVM의 output 값을 비교하는 것으로 했습니다. 즉, SVM의 output이 (+)이면 상승, (-)이면 하락이라고 가정한 후 일치하는지의 여부를 비교한 것입니다.
  
  5-34 MACD(OSCP)와 CCI, Stochastic(%K, %D, Slow %D), RSI, ROC, OBV 지표를 사용했을 때, 총 200일에 대한 Hit ratio는 47%였습니다.
  

Fig 5. 테스트 결과 1
  
  지표의 개수를 줄여서 MACD와 CCI, RSI, Williams' %R, A/D만을 사용했을 때에는 48%의 결과를 얻을 수 있었습니다.
  

Fig 6. 테스트 결과 2
  
  MACD 지표 대신 5일 및 10일 Disparity 지표를 사용한 결과는 비슷한 결과치를 보였습니다.
  

Fig 7. 테스트 결과 3
  
  Training 데이터를 800에서 900 개로 늘리고, 나머지 100개의 데이터에 대해 검증을 해보니 다음과 같은 결과가 나왔습니다.
  

Fig 8. 테스트 결과 4
  
  
  위 결과들로 판단을 한다면, 몇몇 기술적 지표만을 활용한 SVM 모델은 Random Walk와 비교해 별 차이가 나지 않는다고 말할 수 있을 듯 합니다.