이동평균 오실레이터

마지막 업데이트: 2022년 3월 14일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
그림 2. 0점선을 이용한 매매기법

이동평균 오실레이터

이전에 포스팅한 5. Pandas를 이용한 Naver금융에서 주식데이터 가져오기는 Naver금융에서 주식데이터를 수집하는 방법에 대해 알아보았다.
이번 포스팅에서는 수집한 주식 데이터를 가지고 주식 분석에서 필수 보조 지표라고 할 수 있는 MACD 를 Python의 pandas 모듈을 이용하여 구현해 보도록 한다.

1. MACD 란?

MACD 는 Moving Average Convergence Divergence의 약어로써, 이동평균선(MA)이 수렴과 발산을 반복한다 는 원리를 이용해 단기이동평균선(12)과 장기이동평균선(26) 사이의 관계를 보여주는 Gerald Appel 이 개발한 지표다. MACD에서 단기이동평균 으로는 12일 , 장기이동평균 으로는 26일 을 사용하고, MACD의 9일 이동평균선 을 Signal 이라고 하고, MACD와 Signal의 차이를 Oscillator 라고한다.

  • MACD : 단기이동평균(12)와 장기이동평균선(26)의 차이값
    • 보통 주식HTS에서는 이값을 파라미터 값으로써 조정할 수 있게 되어있다. 우리나라 주식시장에 맞는 5일과 20일 로 대체해서 사용하기도 한다.
    • 일반적으로 9일을 설정하여 MACD의 값들을 완충 및 일반화 하는 역할을 한다.
    • MACD의 값이 Signal값보다 클때는 양의 막대, 작을 때는 음의 막대가 그려진다.

    1) MACD 공식

    • MACD : MACD = < EMA >_ < 12 >- < EMA >_ < 26 >M A C D = E M A ​ 1 2 ​ ​ − E M A ​ 2 6 ​ ​ ( < EMA >_ < n >E M A ​ n ​ ​ : n n 일간의 지수이동평균선)
    • Signal : Signal=\frac < \sum _< t=1 >^< n >< < MACD >_ < t >> >< n >S i g n a l = ​ n ​ ​ ∑ ​ t = 1 ​ n ​ ​ M A C D ​ t ​ ​ ​ ​ (일반적으로 n=9 n = 9 로 설정)
    • Oscillator : Oscillator=MACD-Signal O s c i l l a t o r = M A C D − S i g n a l

    2) MACD를 이용한 주식분석 - 참고 : 앤트하우스

    2. pandas 를 이용해 MACD 구현하기

    위의 내용에서 MACD가 무엇이며 어떻게 활용하는지에 대해 알아보았다. 이제 부터는 python 의 pandas 모듈을 이용하여 MACD를 직접 구현해 보도록 한다.

    1) 이동평균 오실레이터 pandas.read_html() 을 이용해 krx에서 종목코드 가져오기

    네이버금융에서 원하는 종목의 주식데이터를 가져오기 위해 먼저 코스피(KOSPI)과 이동평균 오실레이터 코스닥(KOSDAQ)의 종목코드가 필요하다. 한국거래소(krx)에서는 주식시장에 상장된 기업들에 대해 종목코드 를 제공한다. pandas 모듈의 pandas.read_html() 을 이용해 종목코드를 가져올 수 있다. pandas.read_html()은 HTML에서 태그를 찾아 자동으로 DataFrame 형식으로 만들어준다. 아래의 소스코드를 통해 주식의 종목코드를 가져올 수 있다.

    head() 함수를 통해 상위 5개의 코드를 확인할 수 있다.

    N0.namecode
    0BYC001460
    1CJCGV
    2CJ씨푸드011150
    3DSR제강069730
    4KB금융105560

    2) Naver금융에서 일자별 주식데이터 가져오기

    이제 네이버금융에서 원하는 종목의 일자 데이터를 가져와 보도록 하자. 여기서는 신라젠(215600) 의 일자 데이터를 가져온다. 아래의 소스코드는 특정 종목뿐만 아니라 사용자가 원하는 종목의 일자데이터를 가져올 수 있도록 get_url 이라는 함수를 만들어 줬다. Naver금융에서 주식데이터를 가져오는 방법에 대해 자세히 알고 싶다면 5. Pandas를 이용한 Naver금융에서 주식데이터 가져오기를 참고하면 된다.

    아래의 소스코드는 추후에 데이터 분석에서 편하게 하기위해 추가적으로 처리해 준 코드이다.

    3) MACD 지표 구현하기

    MACD를 구현하기 위해 필요한 데이터들을 수집하였으면, 이동평균 오실레이터 이제 MACD를 구현해보도록 한다. 아래의 소스코드는 MACD를 get_macd() 라는 함수로 구현하였다.
    입력값으로 DataFrame, 단기(short=12), 장기(long=26), Signal을 구할때 사용할 일자(t=9)를 입력값으로 받으며, MACD 지표들이 추가된 DataFrame 을 리턴(return)해준다.

    위의 코드에서 구현한 get_macd() 를 이용해 아래의 코드를 입력하면 DataFrame 에 macd의 지표 macd, macds, macdo 가 포함되어 있는것을 확인할 수 있다.

    3. plotly 를 이용해 MACD 차트 그리기

    마지막으로 plotly 를 이용하여 MACD 차트를 그려보도록 한다. plotly 에 대한 설명은 이전 포스팅인 4. Plotly를 이용한 캔들차트-Candlestick chart 그리기를 참고하면 된다.
    아래의 소스코드를 통해 MACD 차트를 그릴 수 있다.

    이동평균 오실레이터

    그림 1. MACD 이동평균 오실레이터 보조지표 및 오실레이터

    주가의 단기 이동평균선과 장기 이동평균선의 수렴과 확산을 나타내는 지표이다. 단기 이동평균선과 장기 이동평균선이 주가의 변동으로 인해 수렴과 확산을 반복한다는 원리에 기반을 두고 두 이동평균선의 차이가 가장 큰 시점을 찾아내 추세 변화의 신호로 삼는 지표이다. MACD 는 크게 MACD 선과 시그널선( signal line )으로 구성된다. MACD 선은 단기 지수이동평균과 장기 지수이동평균의 차이로 구해지며 일반적으로 단기 이동평균선의 경우 12일, 장기 이동평균선의 경우 26일이 이용된다. 단기 이동평균 오실레이터 지수이동평균이 장기 지수이동평균보다 위쪽에 위치하면 MACD 선은 양수가 되고 이것은 주가가 상승하는 신호로 여겨진다. 반대로 단기 지수이동평균이 장기 지수이동평균보다 아래쪽에 있으면 MACD 선은 음수가 되고 이것은 주가가 하락하는 신호로 여겨진다.

    시그널선은 이동평균 오실레이터 일정 기간 동안의 MACD 지수 이동평균으로 정의되며 일반적으로 MACD 의 9일 지수이동평균이 이용된다. 즉 12일 동안의 이동평균 오실레이터 지수이동평균과 26일 동안의 지수이동평균을 구한 후 이들 간의 차이를 다시 9일 동안의 지수이동평균으로 산출하는 것이다. MACD 이동평균 오실레이터 선과 시그널선이 교차하는 시점이 바로 단기 이동평균과 장기 이동평균간의 차이가 가장 큰 것으로 간주된다. 그래서 MACD 선이 시그널선 위로 올라가게 되면 MACD 가 9일 동안의 평균보다 높게 형성되었다는 의미이므로 매수 신호, 반대로 MACD 선이 시그널선 아래로 내려가게 되면 MACD 가 9일 동안의 평균보다 낮게 형성되었다는 의미이므로 매도 신호로 해석된다.

    MACD 는 추세 전환 시점을 예측하기보다 추세의 방향과 주가의 움직임을 분석하는 데 유용한 지표로 평가된다.

    [네이버 지식백과] MACD [Moving Average Convergence and Divergence] (두산백과)

    MACD 보조지표를 이용한 매매기법

    1. 0점선을 이용한 매매기법

    이동평균 오실레이터 그림 2. 0점선을 이용한 매매기법

    MACD 보조지표에는 장기선과 단기선의 지수가 0점을 기준으로 +와 -가 발생되며 이를 기준으로 추세가 상승추세인지 하락추세인지를 알 수 있다. 이러한 특징을 이용하여 그림 2의 1번 포인트와 같이 장, 단기선이 0점을 통과하는 시점에 통과하는 방향으로 진입하며 2번 포인트와 같이 장, 단기선이 0점을 통과하는 시점에서 청산하는 방식이다.

    그러나 그림 2와 같이 이 0점선 기준 매매기법은 오로지 신호로 진입과 청산을 하는 것보다 0점선을 상승 또는 하락 돌파할 때 진입을 하고 목표수익을 정하여 수익청산하는 것이 가장 좋은 방법으로 활용할 수 있다. 그림 2의 1번 지점처럼 매수로 진입하여 일정 목표수익으로 청산한 후 2번 포인트에서 매도 진입을 시도하고 목표수익을 도달하지 않았을 경우 그다음 0점선을 돌파하는 시점에 손실 청산하면 손실을 크게 줄일 수 있는 안전장치가 될 수 있다.

    0점선 매매기법은 수익은 길게~ 손실은 짧게 할 수 있는 장점이 있으나 진입시점이 많지 않고 횡보하는 시장에서는 계속 손실만 볼 수 있다는 단점을 가지고 있어 횡보장에서는 진입할 수 없도록 다른 매매기법과 복합적으로 사용해야 한다.

    2. 단기선의 장기선 돌파 매매기법

    그림 3. 단기선의 장기선 돌파 매매기법(일명 MACD 크로스 매매기법)

    MACD 보조지표의 단기이평선과 장기이평선을 이용한 돌파 매매기법, 일명 MACD 크로스 매매기법은 단기선이 장기선 위에 있으면 상승 추세가 진행되고 아래에 있으면 하락 추세가 진행된다는 점을 이용한 매매기법이다. 그림 3의 1번 포인트를 보면 단기 이평선이 장기 이평선 아래에 있다가 크로스되어 올라오는 지점이다. 이때 단기 이평선이 장기 이평선 위로 올라가는 시점이기에 상승추세가 시작한다고 보고 매수 진입을 할 수 있는 포인트가 된다. 그림 3의 2번 포인트를 보면 단기 이평선이 장기 이평선 위에 있다가 크로스되어 내려오는 지점이다. 이때 단기 이평선이 장기 이평선 아래로 내려가는 시점이기에 하락추세가 시작한다고 보고 청산해야 하는 포인트가 된다.

    MACD 크로스 매매기법은 두 이평선이 크로스되어 돌파하는지가 명확하지 않을 수 있기 때문에 보통은 그림 3의 제일 아래 그래프와 같이 오실레이터를 보고 포인트를 잡는다. 물론 크로스에 대한 신호를 가격 그래프에 표시하도록 설정할 수도 있다.

    그림 4. MACD 크로스 매매기법의 단점

    MACD 크로스 매매기법은 0점선 기준 매매기법보다 빠르게 진입할 수 있고 빠르게 수익을 낼 수 있어 수익이 더 이동평균 오실레이터 크다는 장점이 있다. 그러나 그림 4와 같이 크로스가 발생하였으나 가격은 오히려 상승할 수도 있기 때문에 장기적인 이동평균 오실레이터 추세를 읽을 수 있는 실력을 갖추어야 한다.

    물론 0점 기준 매매기법과 혼합하여 0점 위에 단, 장기 이평선이 있으면 상승 추세(단기이평선이 장기이평선 위로 올라가는 크로스)만 진입하도록 변경하여 진입할 수 있다. 그러나 역시 이동평균 오실레이터 그림 4의 2번 포인트처럼 상승 돌파를 하였으나 바로 하락 돌파가 나올 수도 있다.

    이세상의 모든 매매기법에는 100%는 없기 때문에 항시 수익은 길게, 손실은 짧게 할 수 있도록 해야 한다.

    PS. 이 문서에서 소개된 매매기법은 단순히 기법을 소개하는 것으로 이를 이용하여 진행한 매매에 대한 수익과 손실의 책임은 실제 매매를 진행한 투자자에 있다.

    이동평균 오실레이터

    McClellan Oscillator는 Sherman 과 Marian McClellan이 개발한 지표로 시장의 등락을 기반으로 한 '이동평균 오실레이터 폭' 지표이다.

    A D- Line에 모멘텀을 부여해 이용한 지표로 MACD의 원리를 이용해 짧은기간의 등락과 긴 기간의 등락의 차이를 평활화 시켜 구한다.

    지표값이 양수를 가지면 단기 이동평균이 장기 이동평균보다 높은 것으로 상승 압력이 크다는 의미이다.

    지표값이 음수를 가지면 단기 이동평균이 장기 이동평균보다 낮은 것으로 하락 압력이 크다는 의미이다.

    지표값이 -70 이하로 하락했다 다시 상승하는 경우 매수 신호(과매도 상태)

    지표값이 70 이상으로 상승했다 다시 하락하는 경우 매도 신호(과매수 상태)

    지표값이 -100 이나 100을 넘어선다는 것은 현재 추세가 지속되고 있다는 의미이다.

    이동평균 오실레이터 McClellan 이동평균 오실레이터 Oscillator

    McCellan Oscillator = 단기 - 장기

    ADI = (상승종목수 - 하락종목수) ;

    단기 = ( ADI*0.1) + avg(ADI(1),period);

    장기 = (ADI*0.05) + avg(ADI(1),period1);

    기간의 표준은 장기는 39일, 단기는 19일을 많이 이용한다.

    ※McClenllan Oscillator의 수식은 설명해놓은 곳 모두 천차만별이다. 대표적인 수식을 기록해둔다. 단순하게 19일과 39일의 지수이동평균의 차를 구하는 수식등도 있고 0.1, 0.05의 곱을 안하는 수식등도 있다.

    이동평균 오실레이터

    해당 차트는 KOSPI의 2017/11~2019/6 차트에 McClellan Oscillator를 적용한 상태이다.

    +70과 -70선을 기준으로 상승하는 시점에 매매포인트들이 있다. +100과 -100을 넘어 추세가 확증되는 모습은 쉽게 찾을 수 없었지만 추세를 유사하게 추적하는 모습을 보여준다. 가격의 변곡을 정확하게 짚지는 못하지만 압력의 수준을 알 수 있다는 점에서는 유용할 듯 하다.

    [03. 기술적 분석] 029. 기술적 지표 – 오실레이터(Oscillator)

    오실레이터는 기본적인 추세분석을 한 후에 적용되는 보조적인 지표이다 . 중요한 움직임 초기에 오실레이터 분석은 오히려 잘못된 방향을 제시할 수 있다 . 오실레이터가 유용한 3 가지 경우가 있다 .

    1) 오실레이터는 상단 또는 하단에 가까운 최고치를 나타낼 때 가장 잘 들어맞는다 . 오실레이터의 값이 상단에 가까우면 시세가 과매수상태인 것을 의미하고 하단에 가까이 있으면 과매도상태인 것을 의미한다 .

    2) 오실레이터가 극단에 있을 때 오실레이터와 가격변화 사이에 일어나는 이탈은 중요한 예고이다 .

    3) 중심선에서 교차가 일어날 때 가격추세의 방향에서 중요한 거래신호를 나타낼 수 있다 .

    [그림 3.54] 오실레이터의 예

    대부분의 오실레이터 매수신호는 상승추세에서 가장 잘 맞고 매도신호는 하락추세에서 가장 잘 맞는다 . 따라서 , 시장분석의 우선순위는 추세분석이 선행되어야 한다 . 시장이 상승추세이면서 오실레이터가 과매도상태일 때 매수하고 , 시장이 하락추세이면서 오실레이터가 과매수상태일 때 매도하라 . 따라서 , 오실레이터는 유용한 도구 중 하나일 뿐이며 , 기본 추세분석의 보조도구로 사용되어야 할 것이다 .

    이동평균 오실레이터

    이번에는 MACD( Moving Average Convergence & Divergence, 이동평균 수렴&확산 지수 )에 대해서 알아보겠습니다.

    수식으로는 매우 간단합니다. 이전 글에서 언급한 이동평균만으로 다음과 같이 표현이 됩니다.

    • MACD : 12일 이동평균 - 26일 이동평균

    비교를 위해 쓰이는 시그널과 오실레이터는 다음과 같이 정의됩니다.

    • MACD시그널 : MACD의 9일 이동평균
    • MACD오실레이터 : MACD - MACD시그널

    다만 MACD시그널의 경우에는 이동평균의 이동평균인 점이 특이합니다.

    매수 신호로는 보통 다음과 같은 방식을 쓰라고 합니다.

    • MACD가 양수 범위에 있으면 매수(양수가 된 경우나, 양수 범위에서 증가하는 경우 모두)
    • MACD가 MACD시그널을 골든크로스하면 매수

    이제는 백테스트로 정말 이게 믿을만 한지 알아봐야겠죠?

    백테스트 기간은 최근 1년(2018/08/22~2019/08/23)으로 잡고, 다음과 같이 매수조건을 넣습니다.

    MACD가 양수이고, MACD가 MACD시그널을 골든크로스하고, MACD가 증가하면 매수합니다.

    위의 조건이 하나라도 풀리면 매도합니다. 우선순위도 MACD 내림차순으로 합니다.

    최종 설정조건은 다음과 같습니다.

    MACD test 설정조건

    과연 결과가 어떻게 나올까요?

    MACD test result


0 개 댓글

답장을 남겨주세요