2011년 6월 30일 목요일

닐리 따라하기 - 5. 구조기호와 진행기호 분석 I

1. 닐리 사전구성법칙

  • 닐리의 사전구성법칙은 파동의 적용 Rule과 Condition에 따라 R-1a부터 R-7d까지 파동의 구조기호(:5, :3)와 진행기호(F, sL, L, s, c, x)를 도출하기 위한 일종의 사전입니다.

2. 구조기호와 진행기호 분석
  • 각각의 파동에 대해 길게는 m(-4) 부터 m(6)까지, 짧게는 m(0)부터 m(2)까지 파동들의 관계를 파악합니다.
  • 파동 사이의 관계는 길이의 비, 소요시간의 비, 특정 파동의 고점 돌파, 특정 파동의 저점 붕괴, 추세선 붕괴 등으로 파악됩니다.
  • 관계가 파악되면 닐리의 사전구성법칙 - '닐리 사전'이라고 부르겠습니다 - 에서 구조기호와 진행기호를 찾아냅니다.




    • 물론, Rule과 Condition에서 구조/진행 기호를 찾는 과정은 책을 주의깊게 살펴보면서 신중하게 해야 하므로 시간이 많이 소요되는 작업입니다. 자동화가 절실해지죠.

    • '닐리 사전' 검색 과정을 다른 엑셀 매크로들 처럼 자동화 할 수 있겠지요? 물론 그렇습니다. 

    • 그런데..., 자동화의 단점 중 하나는 False Positive가 많다는 겁니다. 예를 들어, 차트를 보면 x:c3가 나올 파동이 아닌데 매크로를 실행하니 x:c3가 함께 나올 수 있는 것이죠.
    • 그런 False Positive를 쉽게 제거하려면.... 바로 경험이 필요한 것입니다.
    • 그래서 닐리 사전을 자주 찾아보시길 권합니다.

    닐리 따라하기 - 쉬어가기3

    이오테크닉스 2011-06-30



    • 내친김에 하나 더...
    • 차트 중간 상단부에 :L5가 보이네요.
    • 그 이후 엄청난 하락이 진행됩니다. 하락 추세의 충격파동 1-2-3-4-5로 보여지는 파동이 있네요. 조정 2파동은 :3-:3-:5 플랫으로 보여지고, 조정 4파동은 :5-:3-(:5-:3-:5) 즉, 파동c가 지그재그인 지그재그 조정인가요...?
    • 아무튼 5파동이 연장된 충격패턴으로 보입니다. 2파동과 4파동의 alternation, 그리고 1파동 3파동 5파동 간의 길이도 패턴의 기준을 만족하는 것 같죠?
    • 그리고... 긴 하락 추세를 마감하는 것인가요...? 좀 더 지켜보는 것이 좋겠습니다.
    • 왜냐하면...5파동 이후 조정의 폭이 확인되지 않았습니다.

    • 그럼 쉬어가는 것은 이 정도로....

    닐리 따라하기 - 쉬어가기2

    녹십자 2011-06-30



    • 어차피 쉬어갈거 하나 더 볼까요?
    • 모노파동 차트에 방향성 움직임을 적용한 차트입니다.
    • 상승 추세에서 조정을 끝내고 다시 속도를 내는 모습이네요. 
    • 그건 그렇고, 구조기호와 진행기호가 별로 마음에 들지 않네요. 닐리의 사전구성법칙을 적용한 것인데요... 역시 책에 있는 내용만으로는 부족함이 있습니다.
    • 무엇이 더 필요할까요...?




    • 경험입니다.

    닐리 따라하기 - 쉬어가기1

    대우조선해양 2011-06-29


    • 차트 중간 하단 부분에 있는 :L5에서 이전 흐름의 조정이 완성되고 새로운 상승 추세가 형성되는 것이 확연히 드러납니다.
    • 그런데, 좀 의심스러운 측면은 :L5 이후에 충격파동의 특성이 나타나지 않고 있는데, 그것은 1, 3, 5 파동으로 생각할 수 있는 파동들 중에 가장 긴 파동이 다음으로 긴 파동의 1.618배 이상으로 형성되지 않았다는 것입니다.
    • 어떻게 봐야 할까요...? 충격파동인가요..., 아니면 지그재그일까요...?

    • 닐리 따라하기 다음 단계는 위 차트에서 보시듯이 파동들의 구조기호와 진행기호를 파악하는 것입니다.

    2011년 6월 29일 수요일

    닐리 따라하기 - 3. 되돌림 법칙 (계속)

    1. 닐리의 파동 적용 Rule과 Condition

    • Rule과 Condition의 기준을 구현한 엑셀 vb 프로그램 소스 예시
            Function mw_R_and_C(ParamArray varArgs() As Variant)

            On Error GoTo EH_mw_R_and_C:

                m1_end = varArgs(0)
                m1_start = m1_end
                If UBound(varArgs) > 0 Then
                    m1_start = varArgs(1)
                Else
                    m1_start = mw_start(m1_end)
                End If
            
                m0_start = mw_m0_start(m1_start, m1_end)
                m0_end = m1_start
                m2_start = m1_end
                m2_end = mw_m2_end(m1_start, m1_end)
        
                rc = "R-"
                ret_ratio = (Range(m2_end).Value - Range(m2_start).Value) / _
                                (Range(m1_end).Value - Range(m1_start).Value)
        
                If ret_ratio < -2.618 Then
                    rc = rc + "7"
                ElseIf ret_ratio <= -1.618 Then
                    rc = rc + "6"
                ElseIf ret_ratio <= -1 Then
                    rc = rc + "5"
                ElseIf ret_ratio < -0.618 Then
                    rc = rc + "4"
                ElseIf ret_ratio = -0.618 Then
                    rc = rc + "3"
                ElseIf ret_ratio <= -0.382 Then
                    rc = rc + "2"
                Else
                    rc = rc + "1"
                End If

                ret_ratio = (Range(m0_end).Value - Range(m0_start).Value) / _
                                (Range(m1_end).Value - Range(m1_start).Value)

                Select Case rc
                    Case "R-1"
                        If ret_ratio < -1.618 Then
                            rc = rc + "d"
                        ElseIf ret_ratio <= -1 Then
                            rc = rc + "c"
                        ElseIf ret_ratio <= -0.618 Then
                            rc = rc + "b"
                        Else
                            rc = rc + "a"
                        End If
                    Case "R-2"
                        If ret_ratio < -1.618 Then
                            rc = rc + "e"
                        ElseIf ret_ratio <= -1 Then
                            rc = rc + "d"
                        ElseIf ret_ratio <= -0.618 Then
                            rc = rc + "c"
                        ElseIf ret_ratio <= -0.382 Then
                            rc = rc + "b"
                        Else
                            rc = rc + "a"
                        End If
                    Case "R-3"
                        If ret_ratio < -2.618 Then
                            rc = rc + "f"
                        ElseIf ret_ratio <= -1.618 Then
                            rc = rc + "e"
                        ElseIf ret_ratio <= -1 Then
                            rc = rc + "d"
                        ElseIf ret_ratio <= -0.618 Then
                            rc = rc + "c"
                        ElseIf ret_ratio <= -0.382 Then
                            rc = rc + "b"
                        Else
                            rc = rc + "a"
                        End If
                    Case "R-4"
                        If ret_ratio < -2.618 Then
                            rc = rc + "e"
                        ElseIf ret_ratio <= -1.618 Then
                            rc = rc + "d"
                        ElseIf ret_ratio <= -1 Then
                            rc = rc + "c"
                        ElseIf ret_ratio <= -0.382 Then
                            rc = rc + "b"
                        Else
                            rc = rc + "a"
                        End If
                    Case Else
                        If ret_ratio < -2.618 Then
                            rc = rc + "d"
                        ElseIf ret_ratio <= -1.618 Then
                            rc = rc + "c"
                        ElseIf ret_ratio <= -1 Then
                            rc = rc + "b"
                        Else
                            rc = rc + "a"
                        End If
                End Select
        
                mw_R_and_C = rc
        
                Exit Function

            EH_mw_R_and_C:
                'MsgBox (Err.Description)
                'mw_R_and_C = CVErr(xlErrNA)
                mw_R_and_C = rc

            End Function


    2. Rule과 Condition 적용

    • 평균가 데이터와 모노파동 데이터가 기록된 엑셀 시트에 각 모노파동의 Rule과 Condition을 구하여 기록하는 매크로를 작성 및 실행하고 그 결과를 이후 분석 과정에서 활용할 수 있다.
    • (예시)


            Sub RuleAndCondition()

            Range("E1").Value = "R_And_C"

            'On Error GoTo EH_RuleAndCondition:

                addr = Range("C2").Address
                addr = Range(addr).Offset(1, 0).Address
     
                Do Until Range(addr).Value = ""
                    p = Range(addr).Value
                    If (p - Range(addr).Offset(-1, 0).Value) * (Range(addr).Offset(1, 0).Value - p) _
                                < 0 Then                   
                        Range(addr).Offset(0, 2).Value = mw_R_and_C(Range(addr).Address)             
                    End If
     
                    addr = Range(addr).Offset(1, 0).Address     
                Loop
     
                'Exit Sub
     
            'EH_RuleAndCondition:

            End Sub

    • 엑셀 화면 예시




    2011년 6월 28일 화요일

    닐리 따라하기 - 3. 되돌림 법칙

    1. 모노파동 분석 과정

    • 분석 대상 모노파동을 m1이라고 할 때, m1을 분석하기 위해서는 m1 이후의 시장 움직임과 m1 이전의 흐름을 함께 분석해야 한다.
    • 즉, m1이 그 이후의 시장 움직임에 의해 되돌려지는 수준과, m1이 그 이전의 시장 움직임을 되돌린 수준을 기본적으로 함께 분석해야 한다는 것이다.
    • 따라서 m1 이후의 파동 m2와, m1 이전의 파동 m0를 관찰해야 한다.




    2. m1과 m2, m1과 m0

    • m1 이후의 파동 m2는 m1의 고점이 돌파되거나 또는 m1의 저점이 붕괴되어야 식별할 수 있다. 즉, 고점이 돌파될 경우, m1과 고점과 돌파 시점 사이의 최저점이 m2의 종점이 된다(위 그림의 m1, m2). 반면 저점이 붕괴될 경우 붕괴 이후 모노파동의 종점이 m2가 된다(위 그림의 a1, a2).
    • m1이전의 파동 m0 또한 같은 방법으로 식별한다. (아래 그림 참조)

    • 위 그림에서 m1의 이전 파동 m0는 7개의 모노파동으로 구성된 모노파동 그룹이다. 반면 a1의 경우는 모노파동 a0이다.
    • m1을 분석하기 위한 첫 단계는 m1에 대한 m2의 되돌림 수준, m0에 대한 m1의 되돌림 수준을 파악하는 것이다.


    3. 되돌림 법칙

    • (m2의 길이 ÷ m1의 길이)에 따라 Rule 1 ~ Rule 7까지 구분한다.
    • 각 Rule에 대해 (m1의 길이 ÷ m0의 길이)에 따라 Condition a ~ Condition d (또는 f)까지 구분한다.

    • 위 그림은 각각의 모노파동에 대해 닐리의 Rule, Condition을 분석한 결과의 예시이다.
    • 마찬가지로, 엑셀 매크로를 작성하여 각 파동의 Rule, Condition 분석을 자동화할 수 있다.

    4. Rule, Condition 분석
    • m1의 시작점과 종점이 주어졌을 때, m2의 종점과 m0의 시작점만 찾을 수 있다면 길이의 비와 Rule, Condition을 쉽게 구할 수 있다.
    • 이전 블로그에서 평균가 데이터로부터 모노파동을 식별하는 엑셀 매크로를 실은 적이 있다. 그 매크로를 실행한 결과 데이터에 적용하여 주어진 m1에 대하여 m2의 종점과 m0의 시작점을 구해내는 매크로를 작성할 수 있다.

    • m2의 종점을 구하는 엑셀 함수 예시


    • m0의 시작점을 구하는 엑셀 함수 예시


    닐리 따라하기 - 2. 모노파동 만들기

    1. 모노파동이란?

    • 모노파동이란 가격의 방향이 형성된 후 그것의 방향이 변화되기 전까지의 가격 움직임을 말하는 것으로, 가장 단순한 형태의 파동이다.
    장중 고가와 저가의 평균가 차트와 식별된 모노파동 차트

    • 위의 그림에서 파란색 선은 장중 고가와 저가 사이의 평균가를 차트화 한 것이며, 그 차트로부터 모노파동들을 식별하여 차트화 한 것이 붉은색 선의 흐름이다.
    • 엘리어트 파동 분석의 기본 대상이 바로 이들 모노파동들이다.

    2. 평균가 데이터로부터 모노파동 식별하기

    • 엑셀 매크로를 작성하여 평균가 데이터로부터 모노파동을 식별할 수 있다.


    • 식별된 모노파동 차트를 파동분석의 기초 데이터로 사용한다.


    • (엑셀 매크로 예시)
    모노파동을 찾기 위한 엑셀 매크로 (예시)


    닐리 따라하기 - 1. 가격 데이터 획득

    1. 가장 적절한 현물 가격 데이터

    • 연속적으로 거래되는 현물시장에서 하루에 하나의 데이터를 구하기 위해서는 일간 고가와 저가의 평균을 사용한다.
    • 만약 일중 가격 움직임을 더 자세히 나타내기 위해서 하루에 2개의 데이터를 사용하고자 한다면, 첫 번째는 하루의 거래를 전반부와 후반부로 나눈 후 각 부분의 고가와 저가의 평균값을 계산하는 방법이다. 다른 방법은 장중 고가와 저가를 발생 순서대로 나열하는 것이다. 후자가 더 좋은 방법이다.
    2. HTS에서 엑셀로 데이터 가져오기
    • 고가와 저가가 포함된 일별주가 데이터를 '복사' 또는 '엑셀로 보내기' 등의 기능을 사용하여 엑셀로 가져온다.
    키움증권 HTS를 통해 엑셀로 저장한 KOSPI 데이터

    • 엑셀의 차트 기능을 사용하면 HTS의 봉차트와 거의 흡사한 차트를 얻을 수 있다.
    엑셀의 차트기능을 이용한 봉차트


    • 종가는 장 중의 가격변화를 반영하지 않으므로 분석을 위한 기초 데이터로 사용하지 않는다. 대신 장 중 고가와 저가의 평균값을 사용한다.
    • HTS가 고가와 저가의 평균값 데이터를 제공하지 않을 경우 간단한 vb 프로그램으로 쉽게 평균값 데이터를 확보할 수 있다.
    • (vb 프로그램 예)
    엑셀에서 Alt-F11로 실행시킨 매크로 작성 창

    • 작성한 엑셀 매크로를 실행하여 장중 고가와 저가의 평균값 데이터를 구한 후, 봉차트가 아닌 단일가 차트를 엑셀의 차트 기능을 사용하여 확인할 수 있다.

    닐리 따라하기 - 개요

    글렌 닐리의 저서 Mastering Elliott Wave에 기술된 방법에 따라 파동을 분석하는 과정을 몇 편에 나누어 기술합니다.



    분석 과정은 기본적인 수준으로만 기술합니다. 상세한 내용은 글렌 닐리의 저서나 기타 엘리어트 파동이론과 관련된 책을 참조하십시요.

    가격 데이터를 HTS로부터 복사(또는 Import)하여 엑셀 시트에 옮긴 후 모든 과정은 엑셀 내에서만 진행됩니다.

    대략적인 과정은 다음과 같습니다.


    1. 가격 데이터 획득


    2. 모노파동 만들기



    3. 되돌림 법칙의 적용




    4. 방향성, 유사성과 균형의 법칙 적용


    5. 파동의 구조 및 진행기호 분석


    6. 포지션 지표의 구성


    7. 패턴 분리


    8. 폴리파동 분리

    Mastering Elliott Wave