2012년 3월 30일 금요일

현대차 Weekly Chart (2012-03-30)

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


▶ Wave structure

그림 1. Weekly Chart - Wave Structure (2012-03-30)

현대차의 2012년 3월 30일 주봉 chart입니다. 긴 상승 추세를 T0에서 마감하고 조정을 받고 있는 모습인데요, T0 이후의 파동 흐름을 어떻게 분석해야 할까요?

위 그림1은 T0에서 T1까지 elongated flat이 형성되고 T1 이후에 contracting triangle이 형성된 것으로 판단한 것입니다. 물론 T1 지점에 x:c3가 숨겨져 있는 것으로 본 것이구요.

※ 분석은 분석자 개개인의 몫입니다.


DJIA Daily Chart (2012-03-29)

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


▶ Wave structure

그림 1. Daily Chart - Wave Structure (2012-03-29)


t1 이후의 파동이 파동 m1이 형성된 시간 t 내에 채널의 하단 추세선을 이탈하지 않았습니다. 하지만 위 그림 1을 보면 t1 이후의 조정이 끝난 것인지 확실하지 않습니다. 조정이 더 진행된다면 추세선을 이탈할 수도 있을텐데요.

아래 그림 2의 60분 chart를 보고 조정 파동의 완성 여부를 판단해 볼까요?


그림 2. 60분 Chart - Wave Structure (2012-03-29)


지그재그 패턴을 마치고 상승하는군요. 조심스럽긴 해야하지만 조정이 끝났기를 기대해 봅니다.

m-3부터 시작된 파동의 흐름을 충격 패턴으로 보고 분석하고 있습니다. 상승채널의 상단 및 하단 추세선에 맞닿은 접점이 현재까지 5개이지만, t0 이후의 접점은 한 단계(degree) 낮은 파동의 접점이라고 판단합니다.


KOSPI 60분 Chart (2012-03-29)

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


▶ Wave structure

그림 1. 60분 Chart - Wave Structure (2012-03-29)


지난 블로그에서 가능성을 보았던 것처럼 T2에서 T3까지 지그재그(:5-:F3-:L5) 패턴으로 x:c3가 형성되면서 조정이 연장되는 흐름입니다.

T3 이후의 파동 흐름을 위 그림 1처럼 충격 패턴이 진행 중인 것으로 판단한다면, T0에서 시작된 조정은 며칠 더 연장되어 이중 지그재그로 완성될 것으로 기대할 수 있을 것입니다. 그렇게 된다면 지수는 1990선 아래로 미끄러질 가능성이 커지겠지요.

2012년 3월 29일 목요일

KOSPI 60분 Chart (2012-03-28)

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


▶ Wave structure

그림 1. 60분 Chart - Wave Structure (2012-03-28)


지난 블로그에서 :3-:3-:5, 즉 플랫 패턴(T0에서 T2까지)이 진행 중이며 패턴의 완성을 확인해 보자고 했습니다. (마지막 :5를 지난 블로그에선 터미널 충격 패턴으로 분석했는데요, 위 그림 1처럼 충격 패턴으로 봐도 될 것 같습니다.)

여전히 T2 이후 t 기간 내에 추세선 이탈을 관측하는 관점을 가져갈 수도 있을테지만, T2 이후 지그재그(:5-:F3-:L5)가 완성되어 x:c3 역할을 하면서 조정이 연장되는 흐름으로 볼 수도 있을 듯 합니다.


2012년 3월 28일 수요일

KOSPI 60분 Chart (2012-03-27)

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


▶ Wave structure

그림 1. 60분 Chart - Wave Structure (2012-03-27)

T0에서 고점을 형성한 후 조정을 거치고 있습니다. T2에서 조정이 끝나는 것일까요?

위 그림 1에 표시된 조정파동 a는 :5-:3-:5, 즉 지그재그 패턴입니다. 마지막 :5가 형성된 시간보다 짧은 기간에 0-B 채널이 이탈된 것이 보입니다. 패턴이 완성된 것으로 볼 수 있는 것이겠지요.

마찬가지로 플랫 패턴으로 보이는 a-b-c 파동이 T2에서 완성되려면 t보다 짧은 기간 내에 a의 시점과 b의 종점을 이은 추세선이 이탈되어야 합니다. 지켜볼까요?


2012년 3월 27일 화요일

DJIA Daily Chart (2012-03-26)

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


▶ Wave structure

그림 1. Daily Chart - Wave Structure (2012-03-26)

3월26일 지수가 상승하면서 상승채널 하단의 지지를 받는 것처럼 보입니다. 하지만 위 그림 1에서 시간 t 내에 채널 하단을 이탈한다면 파동 mm-3부터 시작된 충격패턴의 :L5로 고려해 보아야 할 것입니다.

그렇지 않고 지수가 채널 하단을 이탈하지 않은채 상승한다면, 파동 m은 이후에 형성될 파동들과 폴리파동을 구성함으로써 더 긴 :L5의 일부가 될 것입니다. 그럴 경우 지수 상승의 목표치를 어떻게 가늠해야 할까요?


KOSPI Daily Chart (2012-03-26)

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


▶ Elliott wave oscillator와 fractal count

그림 1. Daily Chart - Fractal Count (2012-03-26)


▶ Wave structure

그림 2. Daily Chart - Wave Structure (2012-03-26)


그림 1의 Fractal count 31번 이후의 파동을 어떻게 분석해야 할까요?

그림 2의 Wave structure chart를 보면, 3월 26일 candle에서 종가는 하락했지만 고가와 저가의 평균가가 상승하는 모양입니다. 분석을 하려면 직전 모노파동이 완성되어야, 즉 그림 2에 두 개의 적색선으로 표시된 고가 또는 저가를 이탈해야 합니다.

적색 물음표처럼 고가를 돌파한다고 가정을 하고 파동을 분석합니다. 몇 개의 파동들에 대해 Elliott Pattern Helper의 'Wave Structure' 기능을 순차적으로 실행해 보면,


그림 3-1

그림 3-2

그림 3-3

그림 3-1에서 3-3까지 터미널 충격 패턴이 완성되었다고 결과가 나오는군요. 물론 이 결과만 봐선 안되겠죠. 그림 3-1 chart 이전의 파동들까지 종합적으로 분석을 해봐야 할 것입니다.



2012년 3월 24일 토요일

KOSPI Daily Chart (2012-03-23)

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


▶ Wave Structure

그림 1. Daily Chart - Wave Structure (2012-03-23)


파동의 구조기호(:3 또는 :5)와 진행기호(F, c, L, sL, s 등)를 파악하는 것은 쉽지 않습니다만, L5는 판단기준이 명확하여 상대적으로 파악하기가 쉽습니다.

위의 그림 1에서, 현재 진행 중인 파동이 조정파동 a인지 아니면 c인지 판단하는 기준으로도 사용할 수 있지 않을까요?


KOSPI Weekly Chart (2012-03-23)

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


▶ Wave Structure와 channel

그림 1. Weekly Chart - Wave Structure (2012-03-23)


하락 추세선의 저항을 받고 있는 모습인데요, 저항을 뚫고 상승할 수 있을까요?

상승을 기대하더라도 단기적인 목표는 2,130 수준으로 잡아야할 것 같군요. 위 그림 1의 황색선(1.618*h) 상단부가 위치하는 지수대죠.

물론 다음 주에 지수가 하락하는 경우도 생각을 해 봐야 할 것입니다.


▶ Elliott wave oscillator와 fractal count

그림 2. Weekly Chart - Fractal Count (2012-03-23)

 

DJIA Weekly Chart (2012-03-23)

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


▶ Elliott wave oscillator와 fractal count

그림 1. Weekly Chart - Fractal Count (2012-03-23)

Down fractal 29번 이후에 언제 up fractal이 형성될지 관심을 가져야 할 듯합니다.

지난 주 candle에서 squat이 만들어졌고 이번 주에 고점을 갱신하지 못했습니다. 다음 주에도 고점을 갱신하지 못한다면 지난 주 candle이 up fractal이 되며, 충격패턴의 3번 파동이 완성되었다고 봐야할지도 모르겠습니다.


2012년 3월 17일 토요일

KOSPI Weekly Chart (2012-03-16)

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


▶ Elliott wave oscillator와 fractal count

그림 1. Weekly Chart - Fractal Count (2012-03-16)


현재 진행 중인 파동(위 그림 1. fractal count 23 이후)이 상승 추세의 충격패턴 중 마지막 5번 파동이라고 가정합니다. (※ 분석은 분석자 개개인의 몫입니다.)

DJIA와 마찬가지로 5번 파동의 한 단계 낮은 수준의 내부 파동 3번이 진행 중인 것처럼 보입니다. 상승의 목표치와 조정의 수준을 어떻게 가늠해야 할까요?


▶ Wave Structure

그림 2. Weekly Chart - 방향성을 고려한 Wave Structure (2012-03-16)


상승 추세의 충격패턴 중 5번이 진행 중이라면 monthly chart에서 5번 파동 목표치의 단서를 얻을 수 있을지 모르겠습니다.


▶ Monthly Chart

그림 3. Monthly Chart - Fractal Count (2012-03-16)


그림 4. Monthly Chart -  방향성을 고려한 Wave Structure (2012-03-16)


2012년 3월 16일 금요일

KOSPI 15분 Chart (2012-03-16)

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


▶ Elliott wave oscillator와 fractal count

그림 1. Oscillator와 Fractal Count


▶ Wave Structure

그림 2.Wave Structure


개인적으로는, 3월15일 블로그 60분 chart의 적색 동그라미 속 Squat 때문에 조정이 계속될 것이라는데 베팅을 하고 있었습니다.

결과적으로 보면 a-b-c 조정이 :5-:3-:5로 진행되었습니다. 단지 중간의 :3이 지그재그일 것으로 예측했습니다만 그림 2와 같이 터미널 충격 패턴처럼 형성되었네요.

그림 1의 fractal count를 보면 파동 c도 다섯 번째 내부 파동이 진행 중인 것으로 보입니다. 그렇다면 거의 조정의 끝자락이라는 얘기겠지요.


DJIA Weekly Chart (2012-03-15)

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


▶ Wave Structure

DJIA Weekly Chart (2012-03-15)

상승추세의 충격 패턴 중 마지막 5번 파동이 진행 중이라고 가정합니다. 물론 다른 분석도 가능하겠지요.

5번 파동의 한 단계 낮은 수준의 내부 파동 3번이 진행 중인 것처럼 보입니다. 상승의 목표치와 조정의 수준을 어떻게 가늠해야 할지 분석해 보시기 바랍니다.

그리고 가정한 5번 파동의 목표치를 어떻게 설정해야 할까요? Monthly chart를 보면 단서를 얻을 수 있을까요?

DJIA Monthly Chart (2012-03-15)



2012년 3월 15일 목요일

KOSPI 15분 Chart (2012-03-15)

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


▶ Elliott wave oscillator와 fractal count

그림 1. Oscillator와 Fractal Count


▶ Wave structure

그림 2. Wave Structure


파동이 어떻게 진행될까요? 조정이 끝났다면 그림 2의 1번처럼 상승할테지만 2번과 같이 조정이 계속 진행될수도 있을 것입니다.

60분 chart를 보면 분석에 도움이 될까요?


그림 3. 60분 chart



2012년 3월 11일 일요일

Fractal Counting chart의 활용


인접한 up fractal과 down fractal 사이에는 Elliott wave가 존재한다고 합니다.

"Whenever an up fractal, for example, is followed by a down fractal, what happens in between is always an Elliott wave of one degree or another.", Trading Chaos, p139

Fractal Counting chart는 fractal을 찾아 보여주는데요, 위의 주장을 염두에 두고 chart를 유심히 보시기 바랍니다.


▶ 20120309 weekly chart

그림 1. Fractal Counting


Fractal Counting chart의 한 기능인 Automatic wave counting은 up fractal 또는 down fractal의 추세 변화를 찾아 파동 분석에 활용하기 위한 것입니다. Automatic wave counting이 찾는 것은 다음과 같습니다.
  • Down fractal의 상승 추세 마감
  • Up fractal의 하락 추세 마감
  • Up fractal의 상승 추세 마감
  • Down fractal의 하락 추세 마감

아래 그림은 Automatic counting 결과로부터 wave counting을 한 것입니다. Up-up 또는 Down-down으로 동일한 방향의 것이 counting된 경우는 하나를 생략하여 분석한 것입니다.

이것과 Elliott chart의 구조/진행기호를 함께 분석해 보면 도움이 될까요? 함께 보시기 바랍니다.


▶ Automatic Counting

그림 2. Wave Counting


▶ Elliott chart

그림 3. Elliott chart


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

2012년 3월 8일 목요일

Elliott Pattern Helper와 HTS의 DDE 연동 기능 구현 3


※ 이 글은 EPH(Elliott Pattern Helper) beta 버전에만 적용되며, v1.0에는 기본으로 포함된 기능입니다.
※ EPH와 상관없이 엑셀에서 HTS의 DDE를 연계하는 것과 관련된 내용은 'Excel에서 HTS DDE 활용하기' 시리즈를 참고하십시요.  



지난 블로그에 이어 DDE를 통한 EPH와 증권사 HTS와의 연동에 관한 세 번째 블로그를 올립니다.

3. EPH chart 활용

이번 블로그에서는 두 가지의 이야기를 하려고 합니다.
  • Elliott Pattern Helper charts (Elliott chart, Fractal Counting)
  • 증권사 HTS의 DDE 연동 간소화를 위한 매크로 작성

가. Elliott Pattern Helper charts

제가 Elliott Pattern Helper(EPH)를 만든 이유는 증권사 HTS가 제공하는 차트로부터 모노파동들을 추출하고 추출된 각각의 모노파동을 분석하는 과정에서 일일이 수작업을 해야하는 불편함이 매우 컸기 때문이었습니다.
모노파동을 분석할 때 이전 모노파동들과의 관계, 이후 모노파동들과의 관계를 수작업으로 계산하여 선택가능한 구조/진행 기호를 책을 참조하여 도출하는 것이 여간 시간 소모적인 일이 아닐 수 없었습니다.
그래서 가능한 모든 계산 과정을 엑셀의 기능을 이용하여 자동화했으며, 이를 Add-In 프로그램으로 만든 것이 Elliott Pattern Helper입니다.

Elliott Pattern Helper가 제공하는 chart는 두 가지입니다. 하나는 Elliott chart로서 모노 파동의 선택가능한 기호들의 목록을 보여줍니다. EPH의 기능 중 하나가 Glenn Neely의 저서 Mastering Elliott Wave에 수록된 모노파동의 구조/진행 기호 분석 방법을 자동화하여 기호를 추출해 내면, 그 결과를 Elliott chart가 보여주는 것입니다. 이를 활용하여 진행 중인 폴리파동이 무엇인지 분석하고, 해당 파동이 어떤 모양으로 완성되어질지 예측해 보는 등 실제 투자 결정에 도움을 줄 수 있습니다.

그림 1. Elliott chart


다른 하나는 Fractal Counting chart입니다. 이는 Bill Williams의 저서 Trading Chaos에 소개된 몇몇 분석 기법들을 구현한 것으로서, Elliott wave fractal과 Elliott oscillator 및 Williams's MFI(Market Facilitation Index) 기능을 제공하여 Wave counting의 보조 수단으로 사용될 수 있습니다. 가령 Bill Williams가 언급한 5 Magic Bullets을 적용하는데에 Fractal Counting chart를 활용할 수 있을 것입니다.

그림 2. Fractal Counting chart

※ Elliott chart와 Fractal Counting chart에서 제공되는 정보를 적절히 활용하기 원하신다면 위에서 언급한 저서들을 꼭 읽어보시기를 권합니다.


 
나. 증권사 HTS의 DDE 연동 간소화를 위한 매크로 작성

아래에서 기술될 매크로를 작성한 후의 단순화된 과정을 먼저 얘기하겠습니다. 우선 아래 그림과 같이 해당 종목의 종목명으로 분봉 데이터를 저장합니다.

그림 3. 분봉 데이터 저장

엑셀에서 Alt키와 F8키를 같이 눌러 매크로 실행 창을 열고 작성한 매크로를 실행합니다.

그림 4. 매크로 실행


그러면 이전 블로그 'Elliott Pattern Helper와 HTS의 DDE 연동 기능 구현 2'의 과정 '나. DDE 함수 입력', '다. 엑셀 매크로 모듈 작성', '라. DDE update 이벤트 처리'가 모두 완료된 상태의 아래 파일로 바뀝니다. 이를 '매크로 사용 통합문서'로 저장하여 다시 Open하면 업그레이드된 Elliott Pattern Helper의 모든 기능을 바로 사용할 수 있게 됩니다.

그림 5. 완성된 엑셀 파일


그러면 위에서 실행한 매크로를 작성해 보도록 하겠습니다.

위의 그림 4를 보면 PERSONAL.XLSB라는 파일명이 보입니다. 이 파일을 활용하는 것이 아래 과정의 핵심입니다. 분봉 데이터를 저장한 파일은 '남해화학.xlsx'인데 실행할 매크로는 PERSONAL.XLSB의 매크로인 것처럼, 모든 엑셀 파일(workbook)에서 특정 매크로를 사용하고자 할 때 PERSONAL.XLSB 또는 엑셀 2003인 경우 PERSONAL.XLS에 사용하고자 하는 매크로를 저장하면 됩니다.

※ PERSONAL.XLS(B) 파일이 존재하지 않은 경우, 생성하셔야 합니다. 참고 하십시요.

매크로 작성 과정은 다음과 같습니다.
  • 종목코드 저장
  • MQuote 모듈 복사
  • 종목코드 검색 함수 작성
  • 매크로 자동 생성을 위한 매크로 작성

▶ 종목코드 저장

자동으로 채워넣어야 할 DDE 함수는 KHRun|'025860'!'20'과 같이 종목코드를 포함하므로 어디로부터든 종목명으로 종목코드를 검색해와야 합니다. 가장 간편한 방법이 증권사 HTS에서 종목코드 목록을 엑셀로 내려받아 저장해 놓고 사용하는 것이겠죠. 키움증권 영웅문의 경우 아래 화면과 같이 엑셀로 저장하는 기능을 제공합니다.
그림 6. 종목코드 저장

증권사 HTS로부터 종목 코드를 내려받아 다음 그림과 같이 PERSONAL.XLS(B)의 sheet에 저장합니다.

그림 7. 종목코드 저장 sheet



▶ MQuote 모듈 복사

지난 블로그에서 작성한 MQuote 모듈을 PERSONAL.XLSB로 '파일 가져오기' 기능을 사용하여 복사합니다.


▶ 종목 코드 검색 함수 생성

종목코드 sheet에서 종목명으로 종목코드를 검색하는 함수를 작성합니다. 다음은 샘플 코드입니다.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function GetStockCode(name)
    GetStockCode = ""
    With Sheets("StockCode")
        If WorksheetFunction.CountIf(.Range("D:D"), name) > 0 Then
            found = .Columns(4).Find _
                 What:=name, After:=.Cells(1, 4), _
                 LookIn:=xlValues, _ 
LookAt:=xlWhole, SearchOrder:=xlByRows, _ 
SearchDirection:=xlNext).Address
            GetStockCode = .Range(found).Offset(0, -1).Value
            GetStockCode = _
                Replace(GetStockCode, "'", "")
        End If
    End With
End Function

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

위 코드에서
  • 두 번째 줄의 "StockCode"를 종목코드가 수록된 Sheet의 이름으로 변경
  • 네 번째 줄의 "D:D"를 종목명 Column에 맞게 수정
  • 열 번째 줄의 Offset(0, -1)에서 -1을 종목명 Column과 종목코드 Column 사이의 차이에 맞게 수정
  • 종목코드 셀의 값에 코드 외의 문자가 있을 경우 제거해주면 됩니다.


▶ 매크로 자동 생성을 위한 매크로 작성

다음 코드는 PERSONAL.XLSB의 모듈 MQuote를 분석하고자 하는 종목 데이터 파일에 복사하고 DDE update 이벤트 처리를 위한 코드를 삽입하는 매크로 샘플입니다.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub Fill_Quote()
    stockN = Left(ActiveWorkbook.name, _
                InStr(ActiveWorkbook.name, ".") - 1)
    MsgBox stockN
    stockC = GetStockCode(stockN)
    MsgBox stockC
    
    If stockC <> "" Then
        isExist = False
        For Each s In ActiveWorkbook.Sheets
            If s.name = "Quote" Then
                isExist = True
            End If
        Next s
        
        If isExist Then
            MsgBox ("Sorry! Delete Quote sheet first.")
            GoTo Continue1
        End If
            
        MsgBox ("Sheet Quote is to be created")
        Dim wbCode As String
        Dim modCode As String
        Dim xlmodule As Object
        Dim xlSheet As Worksheet
        Set xlSheet = ActiveWorkbook.Sheets.Add _
                        (After:=Worksheets(Worksheets.Count))
        xlSheet.name = "Quote"
        
        wbCode = "Private Sub Workbook_Open()" & vbNewLine _
            & "On Error Resume Next" & vbNewLine _
            & "ThisWorkbook.VBProject.References.AddFromFile " _
           & Chr(34) _
           & "C:\Users\drstones\ElliottPatternHelper.xlam" _
           & Chr(34) & vbNewLine _
            & "ThisWorkbook.SetLinkOnData " _
           & Chr(34) & "KHRun|'" & stockC & "'!'20'" _
           & Chr(34) & ", " & Chr(34) _
           & "Quote" & stockC & Chr(34) & vbNewLine _
            & "End Sub"
        'MsgBox wbCode
        nol = Application.Workbooks("PERSONAL.XLSB").VBProject.VBComponents("MQuote").CodeModule.CountOfLines
        modCode = Application.Workbooks("PERSONAL.XLSB").VBProject.VBComponents("MQuote").CodeModule.Lines(1, nol)
        modCode = Replace(modCode, "Sub Quote", "Sub Quote" & stockC)
        
        Worksheets("Quote").Cells(1, 1).Value = "현재가"
        Worksheets("Quote").Cells(1, 2).Value = "기준가"
        Worksheets("Quote").Cells(1, 3).Value = "거래량"
        Worksheets("Quote").Cells(1, 4).Value = "체결량"
        Worksheets("Quote").Cells(1, 5).Value = "체결시간"
        Worksheets("Quote").Cells(2, 1).Value = _
           "=KHRun|'" + stockC + "'!'10'"
        Worksheets("Quote").Cells(2, 2).Value = _
           "=KHRun|'" + stockC + "'!'307'"
        Worksheets("Quote").Cells(2, 3).Value = _
           "=KHRun|'" + stockC + "'!'13'"
        Worksheets("Quote").Cells(2, 4).Value = _
           "=KHRun|'" + stockC + "'!'15'"
        Worksheets("Quote").Cells(2, 5).Value = _
           "=KHRun|'" + stockC + "'!'20'"
        
xlSheet.Parent.VBProject.VBComponents("ThisWorkbook").CodeModule.InsertLines 1, wbCode
        Set xlmodule = xlSheet.Parent.VBProject.VBComponents.Add(1)
        xlmodule.name = "MQuote"
        xlmodule.CodeModule.InsertLines 1, modCode
        Set xlSheet = Nothing
        Set xlmodule = Nothing  
    Else
        MsgBox ("No matching stock name")
    End If
Continue1:
End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

위 코드에서
  • EPH Add-In 파일의 위치 'C:\Users\drstones\ElliottPatternHelper.xlam'를 적절하게 수정
  • DDE 파일 KHRun을 사용하시는 증권사에 맞게 수정 
  • 위에서 작성한 종목코드 검색 함수를 'End Sub' 밑에 append해 줍니다.

마지막으로 PERSONAL.XLS(B)를 저장하여 엑셀을 다시 Open하면 모든 엑셀 파일에서 위 매크로를 사용할 수 있게 됩니다.

위 내용과 관련하여 의문이나 문의사항이 있으시면 댓글 남겨 주십시요.


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

2012년 3월 3일 토요일

Elliott Pattern Helper와 HTS의 DDE 연동 기능 구현 2


※ 이 글은 EPH(Elliott Pattern Helper) beta 버전에만 적용되며, v1.0에는 기본으로 포함된 기능입니다.
※ EPH와 상관없이 엑셀에서 HTS의 DDE를 연계하는 것과 관련된 내용은 'Excel에서 HTS DDE 활용하기' 시리즈를 참고하십시요.  



지난 블로그에 이어 DDE를 통한 EPH와 증권사 HTS와의 연동에 관한 두 번째 블로그를 올립니다.

2. 캔들 정보 자동 생성

절차는 다음과 같습니다.
  • 분봉 데이터 엑셀 저장
  • DDE 함수 입력
  • 엑셀 매크로 모듈 작성
  • DDE update 이벤트 처리


가. 분봉 데이터 엑셀 저장

아래 그림 1과 같이 분석하고자 하는 종목에 대해 특정 분단위를 선택하여 HTS로 부터 분봉 데이터를 엑셀 파일로 저장합니다.

그림 1. LG전자 15분봉 데이터


나. DDE 함수 입력

다음 그림 2와 같이 새로운 sheet를 생성하여 sheet 이름을 'Quote'로 변경한 후 DDE 함수를 채웁니다. 이때 현재가, 거래량, 체결량 및 체결시간을 반드시 포함해야 합니다. 키움증권 영웅문의 경우 아래와 같이 입력하면 됩니다.

  • 현재가: KHRun|'??????'!'10'
  • 거래량:  KHRun|'??????'!'13'
  • 체결량:  KHRun|'??????'!'15'
  • 체결시간:  KHRun|'??????'!'20'

위에서 ??????는 해당 종목의 종목코드로 대체하면 됩니다.

※ 주의: 아래에서 제공하는 엑셀 매크로 모듈(MQuote.bas)를 다운로드하여 수정 없이 사용하시려면 그림 2와 같이 '기준가' 항목도 포함하셔야 합니다. 

증권사 HTS의 DDE 연결 기능을 활성화하면 DDE 함수를 입력한 셀의 값이 해당 종목 주식 거래가 체결될 때마다 지속적으로  update됩니다. 그림 2의 경우, 셀 A2, B2, C2, D2, E2가 update되는 것이죠.

그림 2. 영웅문 DDE 함수 입력


참고로 키움증권 영웅문에서 DDE 연결을 활성화하는 방법은 아래 그림과 같습니다.

그림 3. 키움증권 영웅문의 DDE 연결


다. 엑셀 매크로 모듈 작성

DDE를 통해 해당 종목의 체결 정보가 update될 때, 새로운 캔들을 생성하거나 기 생성된 캔들 정보(고가, 저가, 거래량 등)를 수정하기 위한 엑셀 매크로 모듈이 필요합니다.

이를 위해 엑셀에서 Alt 키와 F11키를 동시에 눌러 엑셀 VB 편집창을 띄운 후, 아래 그림 4와 같이 해당 종목의 분봉 데이터를 저장한 엑셀 파일에 모듈을 추가하고 이벤트 처리 루틴을 작성합니다.

그림 4. 엑셀 매크로 모듈 삽입 방법

매크로 작성 과정을 돕기 위해 제가 작성한 모듈을 올려 놓으니 다운로드 받으신 후 독자 여러분의 환경에 맞게 수정하여 사용하시기 바랍니다.

※ 모듈 다운로드 

위 파일을 다운로드 받으신 후 다음 그림 5와 같이 엑셀 VB 편집창에서 '파일 가져오기'를 실행하시면 됩니다.

그림 5-1. 매크로 모듈 가져오기 1

'파일 가져오기'를 실행하면 파일 선택창이 활성화되며, 다운로드 받은 파일(MQuote.bas)을 선택하여 '열기' 버튼을 클릭하시면 됩니다.

그림 5-2. 매크로 모듈 가져오기 2

'파일 가져오기'가 완료되면 다음 그림과 같이 삽입된 모듈을 확인할 수 있습니다.
※ MQuote.bas의 소스코드 내용과 관련하여 문의할 사항이 있으시면 댓글을 남겨 주세요.

그림 6


라. DDE update 이벤트 처리

마지막으로 DDE update 이벤트를 받아 위에서 작성한 매크로를 실행시키기 위한 trigger 코드를 추가합니다.

DDE value의 update 이벤트를 처리하는 방법이 Worksheet의 Worksheet_change()나 Worksheet_calculate() 메써드를 overriding하는 방법과 Workbook의 SetLinkOnData 함수를 사용하는 방법이 있다고 합니다.

그런데 키움증권 영웅문의 DDE 모듈인 KHRun.exe의 경우 무슨 이유에선지 DDE value update 이벤트가 Worksheet_change()나 Worksheet_calculate()를 triggering하지 못하더군요. 그래서 SetLinkOnData를 사용하는 코드를 추가하도록 하겠습니다.

아래 그림 7과 같이 해당 엑셀 파일의 'ThisWorkbook'에 코드를 삽입합니다.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Workbook_Open()
    On Error Resume Next
    ThisWorkbook.VBProject.References.AddFromFile _       
"C:\Users\drstones\AppData\Roaming\Microsoft\AddIns\ElliottPatternHelper.xlam"
    ThisWorkbook.SetLinkOnData "KHRun|'??????'!'20'", "Quote"
End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

위 코드에서 수정해야 할 부분이 두 군데 있습니다. 첫 번째는 Elliott pattern helper Add-In의 파일 위치를 수정하는 것입니다. 그리고 ??????는 해당 종목의 종목코드로 대체하면 됩니다.

그림 7. Trigger 코드 추가


이제 모든 작업이 끝났습니다. 해당 파일을 '매크로 사용 통합문서'로 저장한 후, HTS의 DDE를 실행시킨 후 파일을 다시 open합니다.

그림 8. 파일 저장


파일을 open한 후 해당 분봉의 단위시간이 지남에 따라 캔들 정보가 자동으로 생성 및 변경되는 것을 확인할 수 있습니다.

그림 9


그리고 'Quote' sheet에서 Elliott chart와 Fractal Counting chart를 생성하면 DDE update 이벤트가 발생할 때마다 chart가 변경될 것입니다.

위 과정이 조금 복잡한가요? 다음 블로그에서는 EPH chart를 활용하는 것과 관련된 얘기를 잠시 한 후, 위 모든 과정을 자동화할 수 있는 매크로를 작성해 보도록 하겠습니다.


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

2012년 3월 2일 금요일

Elliott Pattern Helper Upgrade


안녕하세요? Elliott Pattern Helper를 upgrade했습니다.

변경된 내용은 다음과 같습니다.

  1. 증권사 HTS의 DDE 기능 연동을 통한 실시간 chart 기능을 추가했습니다. 
  2. Chart 생성 시 EPH 또는 EPH_w sheet에서만 생성해야하는 제한을 없앴습니다.
  3. Fractal Count 로직을 원서 'Trading Chaos'에 충실하게 수정했습니다.
  4. 기타 사소한 버그 수정이 포함되었습니다.

증권사 HTS와의 DDE 연동을 통한 실시간 chart 기능은 현재 진행 중인 블로그를 참고하여 테스트 해 보시기 바랍니다.
기타 문의 사항이 있으시면 댓글 남겨 주십시요.




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

2012년 3월 1일 목요일

Elliott Pattern Helper와 HTS의 DDE 연동 기능 구현 1

※ 이 글은 EPH(Elliott Pattern Helper) beta 버전에만 적용되며, v1.0에는 기본으로 포함된 기능입니다.
※ EPH와 상관없이 엑셀에서 HTS의 DDE를 연계하는 것과 관련된 내용은 'Excel에서 HTS DDE 활용하기' 시리즈를 참고하십시요.


안녕하세요? 오랜만에 블로그를 올리는군요.

증권사 HTS가 제공하는 DDE 기능을 이용하여 Elliott chart와 Fractal counting chart를 자동으로 갱신하는 기능을 구현하는 과정을 몇 회에 걸쳐 올리도록 하겠습니다.

목표는 3분, 5분, 15분, 30분, 60분 등 증권사 HTS가 제공하는 모든 시간단위 분차트를 대상으로 합니다.

아이디어는 간단합니다.
아래 그림과 같이 현재가, 거래량, 체결량 및 체결시간을 HTS가 제공하는 DDE 함수를 사용하여 실시간으로 받고, 해당 분단위의 캔들 정보-시가/고가/저가/종가/거래량-를 생성한 후 Elliott Pattern Helper의 chart에서 자동으로 반영하도록 하는 것입니다.


그림 1


글의 구성은 다음과 같습니다.

  1. 캔들 정보 생성 로직
  2. 캔들 정보 자동 생성
  3. EPH chart 활용


생성되는 캔들 또는 최근 캔들의 업데이트 정보를 chart에 자동으로 반영하는 기능을 추가하기 위해 Elliott Pattern Helper를 upgrade했습니다. 물론 사소한 버그 수정 및 기능 개선도 포함되었구요. 조만간 upgrade된 버전을 올리도록 하겠습니다.



1. 캔들 정보 생성 로직

우선, 처음부터 캔들을 하나, 둘, 자동으로 생성하지는 않을 것입니다. 충분히 많은 수의 캔들이 포함된 차트를 분석에 사용하고자 할 것이기 때문입니다. 그러므로 HTS를 통해 데이터를 내려받는 것으로부터 시작합니다.

3분봉 chart를 보는 것으로 가정하겠습니다. 아래 그림은 키움증권 영웅문을 통해 저장한 엑셀 파일 화면으로서 LG전자의 3분봉 데이터를 보여줍니다.


그림 2


아홉시 삼분(09:03) 직후에 내려받은 파일이군요. 한 번 HTS를 통해 내려받은 파일은 자동으로 없데이트 되지 않죠. 그래서 엑셀 매크로를 작성하여 DDE 데이터를 수신할 때마다 위 파일을 자동으로 수정하도록 할 것입니다.

로직은 간단합니다.

그림 1과 같이 새롭게 수신한 DDE 정보가
i) 체결시간(KHRun|'066570'!'20')이 단위 시간을 지난 (09:06 이후) 첫 데이터일 때

  • 새로운 행을 추가
  • 추가한 행의 일자/시간 셀에 일자와 시간 자동입력
  • 추가한 행의 시가, 고가, 저가, 종가 셀을 모두 현재가(KHRun|'066570'!'10')로 입력
  • '직전 거래량' 계산: 거래량(KHRun|'066570'!'13') - 체결량(KHRun|'066570'!'15')
  • 거래량 셀을  체결량(KHRun|'066570'!'15')으로 입력

ii) 이후 단위 시간 경과 전(09:09 전)까지 수신한 데이터에 대해
  • 현재가(KHRun|'066570'!'10')가 최근 행의 고가 셀 값보다 클 경우 최근 행의 고가 셀을  현재가(KHRun|'066570'!'10')로 대체
  • 현재가(KHRun|'066570'!'10')가 최근 행의 저가 셀 값보다 작을 경우 최근 행의 저가 셀을  현재가(KHRun|'066570'!'10')로 대체
  • 최근 행의 종가 셀을  현재가(KHRun|'066570'!'10')로 대체
  • 최근 행의 거래량 셀을  [거래량(KHRun|'066570'!'13') - '직전 거래량']으로 대체


아래 그림은 위의 로직으로 자동 생성한 캔들 정보를 포함한 엑셀 sheet 입니다.

그림 3

※ 위 로직에 의문이 있으시거나 헛점이 보이실 경우 댓글 남겨 주십시요.


다음 블로그 '2. 캔들 정보 자동 생성'에서는 DDE update 이벤트를 처리하여 위 과정을 수행하는 매크로에 대해 기술하겠습니다.