본문 바로가기
systrader79 칼럼/실전 투자 전략

실전 투자 전략 (36) - 모멘텀 전략

by systrader79 2017. 3. 29.
728x90
반응형
728x170

1. 다중 모멘텀 전략

 이번 포스팅에서 살펴볼 내용은 다중 모멘텀 전략입니다. 

 n일 모멘텀 = 현재 주가 - n일 전 주가로 정의 되는데, 모멘텀 전략이란 n일 모멘텀 > 0, 매수, n일 모멘텀 < 매도하는 전략입니다. 

 모멘텀 전략에 대해서는 제 블로그에서 수도 없이 많이 다루었기 때문에 익히 잘 아시리라 생각합니다. 

 그럼 바로 시뮬레이션 결과 확인해보겠습니다. 

 유니버스와 모멘텀 주기, 시뮬레이션 방법은 이전 포스팅과 같습니다. 

 

<다중 모멘텀 포트폴리오>


<다중 이평선 포트폴리오>

 

 어떻습니까? 이전에 테스트했던 이평선 기반 전략들보다 성과는 더 우수하지요? 

 오해하지 마십시오. 저는 모멘텀 전략이 항상 이평선 전략보다 우수하다라고 단정짓는 것은 아닙니다. 이번 시뮬레이션에서만 그렇게 나온 것일 수도 있습니다. 

 

 2. 모멘텀 지표의 장점

 이평선 전략과 비교하여 모멘텀 기반의 전략이 우월한 점이 하나가 있는데요, 그것은 본질적으로 모멘텀 지표는 시계열상 lag이 없다는 점입니다. 

 이동 평균선은 이전 오랜 기간동안 주가가 낮게 유지되었다면, 오늘 주가가 급등했어도 이동평균선 계산 방식상 오늘 주가의 폭등이 이전의 낮았던 가격들에 의해 희석이 됩니다. 

 이는 물론 휩소를 줄여주는 장점도 있으나, 시장의 상황에 빨리 대처하지 못하는 lag을 발생시킵니다. 

 하지만, 모멘텀 지표는 단순히 n일 전 가격과 비교하는 구조이기 때문에, n일 전과 오늘 사이에 주가가 어떻게 움직였건과 무관하게 n일 전 가격에만 영향을 받기 때문에, 중간의 가격들에 의한 lag이 발생하지 않습니다. 

따라서, 시장의 변화에 좀 더 빠르게 대처가 가능하다는 구조적인 장점이 있지요. 

 

3. 모멘텀 지표, 왜 책에서는 안 가르쳐주나?

 그렇다면 왜 주식 책이나 기술적 분석 절대 다수에서 모멘텀 보다는 이평선 개념이 절대적으로 더 많이 다뤄져 있을까요? 

 이유는 저도 모릅니다만, 단순히 이전 가격과 비교하는 모멘텀의 컨셉은 너무 단순무식해보이고, 뭔가 이동평균을 낸다는 개념이 더 고급스럽고 있어보여서 그렇지 않나 생각해봅니다. 

 이평선 외의 다른 지표는 거의 다루지 않는 것도 하나의 이유라고 생각합니다. 

 별로 심오할 것도 없는 지극히 단순한 내용이지만 이평선 전략과 모멘텀 전략의 본질적인 차이에 대해서 깊이 생각해 본 사람도 의외로 많지 않으리라 생각합니다. 

 이후에 살펴볼 채널 돌파 전략도 마찬가지인데요, 


 '아 됐고, 전략의 조건식이 뭐야? 그래서 백테스트 결과가 뭐가 제일 좋아? 그래서 이거 쓰면 돈 벌수 있어? 제일 많이 버는 전략이 뭐야?


 같은 일차원적인 질문에 대한 해답만 얻으려하면 절대 발전이 없고, 과최적화된 전략에 빠질 수 밖에 없겠죠?  

 전략의 성과, 물론 중요하지만 그것보다 더 중요한 것은 성과가 좋게 나오면 왜 좋게 나왔는지, 나쁘게 나왔다면 왜 나쁘게 나왔는지 그 이유를 아는 것이 백테스트와 전략 개발의 진정한 목표라고 할 수 있겠습니다. 

 실패한 전략이라도 이런 분석과정을 통해 그 원인을 찾아내면, 다른 전략을 만들때 이런 문제를 구조적으로 미연에 방지할 수 있거나 더 나은 전략을 만드는데 큰 도움이 됩니다. 

 

4. 단순함의 위대함 - 깊이 따져보면 단순한게 단순한게 아니다.

 모멘텀 지표와 모멘텀 전략은 무수히 많은 기술적 지표 및 이에 기반한 트레이딩 기법 중 단연코 '가장 단순무식한' 추세 추종 지표이자 전략입니다. 

 그런데 이래저래 복잡하게 가공한 지표보다 대충 보면 성과가 꽤 잘나오고 robust 합니다. 

 그 이유는 복잡한 기술적 지표나 전략에 무의식적으로 전제되어 있는 '가격의 움직임에 대한 일반적인 가정'이 없기 때문인데요, 일반적인 가정이란 예를 들자면 이런 개념입니다. 

 '이런 이런 조건을 충족시키면, 일반적으로 주가가 이렇게 움직일 가능성이 높을 거야'

 '가격의 움직임에는 일반적으로 이런 원칙이 있을거야. 그래서 이런 조건을 집어 넣으면 일반적으로 성과도 더 좋게 나올 거야'

 주가의 움직임에 대한 일반적인 규칙성이 존재한다면 이런 사항들을 반영한 정교하고 복잡한 지표가 당연히 성능도 더 좋게 나오겠지만, 아쉽게도 그런 전제 조건은 통할 때도 있지만 그렇지 않은 경우도 많기 때문에 오히려 단순한 지표가 더 안정된 성과를 내는 경우가 더 많습니다. 

 그래서 최적화를 안하면 수익 곡선은 보기 안좋고 삐뚤삐뚤하지만, 장기적으로는 시장에서 살아남을 가능성은 더 높습니다.

  

5. 주가의 움직임은 랜덤 워크인가?

  "주가의 움직임에 대한 일반적인 규칙성이 없다면, 그러면 주가의 움직임은 랜덤 워크란 말이냐?" 

 주가의 움직임이 랜덤 워크라고 주장하는 사람도 있지만, 주가의 움직임은 랜덤 워크와는 분명히 다른 속성을 지니고 있음이 수많은 연구를 통해 입증되어 있습니다. 

 주가의 움직임에는 다음과 같은 '일반적인 속성'이 있어 랜덤워크와는 분명히 구별이 됩니다. 

  

 "추세, 변동성 군집, 변동성 순환"

 

 '어 그러면, 추세와 변동성 군집, 변동성 순환의 원리를 짬뽕해서 넣으면 극강의 전략이 나오겠네?' 

 

 라고 생각하시겠지요? 네, 사실 꽤 괜찮은 전략이 나옵니다. 요건 다음 포스팅에서 살펴보기로 하겠습니다. 

 그럼에도 불구하고, 이 세 개를 다 짬뽕하면 항상 단순한 전략보다 절대적으로 우월하냐? 그건 또 아닙니다. 

 

 '아 뭐야 왜 이랬다 저랬다 하냐? 일반적인 규칙성은 없는데 일반적인 속성은 있고, 이걸 다 합치면 꽤 괜찮은 게 나오는데 그렇다고 단순한 것보다 절대적으로 우월하지는 않고? 대체 말이야 빵구야?'

 

 결론부터 말씀드리겠습니다. 빵구입니다. 

  

 정리하자면, 말이 요상하긴 하지만, 이렇게 설명할 수 있겠습니다. 

 '주가의 움직임에는 불규칙적이고 예측불가능한, 일반적인 속성이 존재한다'

 '주가의 움직임은 완전한 랜덤 워크는 아니다. 일반적인 속성은 분명히 존재한다. 하나, 이 속성이 언제 나타날지, 얼마나 자주 나타날지는 불규칙적이고, 예측이 불가능하다'

 약간 감이 잡히시나요? 이게 상당히 중요한 내용입니다. 

 

6. 급등주 단타 기법은 깊이가 없는 전략인가? 

 주가의 움직임에는 분명히 추세, 변동성 군집, 변동성 순환과 같은 분명히 입증된, 도저히 부인할 수 없는 일반적인 속성이 존재하기 때문에, 이런 속성을 완전히 무시하거나 고려하지 않은 전략을 구사하면 반드시 망하게 되어 있습니다.

 예를 들자면, 폭락장에서 물타기 하는 거죠. 주가의 움직임이 완벽히 랜덤 워크라면, 이론적으로는 현금과 리밸런싱하면서 물타기를 하면 장기적으로 반드시 우상향하게 되어 있지만, 실제로는 그렇지 않지요?  

 강한 추세장에서는 시계열으로 자기 상관 계수가 뚜렷이 커지는 현상이 분명히 나타납니다.

 정작 주가의 움직임이 덜한 변동성이 적은 구간에서는 매수를 안하다가 정작 상한가 치면서 불기둥을 뽑으면 상한가 꼭대기에서 사면 담날 폭락을 맞는 것도 변동성 군집의 원리로 설명이 됩니다. 

 추세, 변동성 군집, 변동성 순환을 잘 이용하는 대표적인 부류들이 급등주 단타 치는 고수들입니다.  

 변동성 군집과 변동성 순환의 원리를 이용하면 큰 수익을 내기 위해서는 변동성이 커졌을 때보다 변동성이 줄었을 때 투자해야 한다는 것을 알게 됩니다. 

 주식 책 좀 섭렵하신 분들은 상식적으로 다 아는 내용이 있죠? 거래량이 줄었을 때 매수해라, 대량 거래량이 터지면 매도해라, 변동성이 줄었을 때 매수해라, 눌림목이 안전하다. 

 여기서 수많은 주식의 단타 매매의 원리들이 파생됩니다. 눌림목을 이용한 단기 변동성 돌파 매매, 플랫 베이스 패턴의 돌파 매매 등등...

 '엥? 급등주 단타 치는 원리에 뭐 이런 심오한 내용이 있어? 걔네 들은 그냥 사파 아냐?'

 라고 생각하실지 모르지만, 매매 원리를 잘 분석하면 전혀 그렇지 않습니다. 

 표면적으로는 깊이가 없어보일지 모르나 사실은 앞서 언급한, 추세, 변동성 군집, 변동성 순환과 같은 주가의 움직임에 대한 기본 원리에 상당히 충실한 전략을 구사합니다. 

 그런 의미에서 저는 개인적으로 급등주 단타 매매의 원리도 엄연한 '기술적 퀀트'이자 시스템 트레이딩으로 분류합니다. 

 추세, 변동성 군집, 변동성 순환과 같은 '고급진 용어'를 쓰면 뭔가 좀 깊이 있어보이고, 그냥 일반적인 주식 용어를 쓰면 '없어보인다' 고 생각한다면 본질을 보지 못하는 것입니다. 

 이는 마치 허영에 찬 소개팅녀가 '저는 시나몬은 아주 좋아하는데, 계피는 싫어해요'라고 얘기하는 거랑 똑같습니다. 

 자꾸 삼천포로 빠지는 것 같아 이 부분은 담번에 따로 설명하겠습니다.  

 

7. 가격의 움직임은 불규칙적인 규칙성이다.  

 이번 포스팅에서는 다중 모멘텀 포트폴리오에 대해 다루었지만, 그보다 훨씬 더 중요한 내용이 방금 언급한 내용입니다. 

 

 '주가의 움직임에는 불규칙적이고 예측불가능한, 일반적인 속성이 존재한다'

 '주가의 움직임은 완전한 랜덤 워크는 아니다. 일반적인 속성은 분명히 존재한다. 하나, 이 속성이 언제 나타날지, 얼마나 자주 나타날지는 불규칙적이고, 예측이 불가능하다'

 

 따라서, 우리가 성공하는 투자자가 되기 위해서는, 이러한 일반적인 주가의 속성에 충실한 매매 전략을 개발하되, 이 속성의 발현은 랜덤하고, 예측이 불가능하기 때문에 이를 잘 인지하고 대비해야 한다'

 가 되겠습니다. 이런 불규칙성과 예측 불가능함에 대비하는 방법은 전략 자체가 아니라, 전략의 포트폴리오, 자금 관리, 포트폴리오 관리 같은 부차적인 장치입니다. 

 이 원리를 모르면, 주가의 움직임은 완벽히 랜덤 워크라고 착각하거나 아니면 정반대로 극단적으로 단일 전략 자체만으로는 절대 해결할 수 없는 불확실성을 완벽하게 극복하려 하다가 자신도 모르는 새 과최적화의 늪에 빠져버리게 됩니다. 

 단일 전략 자체보다 훨씬 더 중요한 전략의 포트폴리오, 자금 관리, 포트폴리오 관리 같은 요소는 아예 생각조차 못하게 되지요. 이것이 절대 다수의 투자자가 자신도 모르게 범하는 크나큰 오류입니다. 

 

 '주가의 움직임에는 불규칙적이고 예측불가능한, 일반적인 속성이 존재한다'

 이 말의 의미가 상당히 중요합니다.

 주가의 움직임이 불규칙해보이는 이유는, 주가의 움직임을 설명할 수 있는 일반적인 규칙성이 없어서가 결코 아니라, 

 분명히 존재하는 규칙적인 원리가 불규칙적으로, 그리고 예측 불가능하게 나타나기 때문임을 결코 잊어서는 안 될 것입니다. 


시뮬레이션 파이썬 코드입니다. 


import pandas as pd

import matplotlib

import matplotlib.pyplot as plt

import numpy as np

from talib.abstract import *

import pandas_datareader.data as web

matplotlib.rc('font', family='Malgun Gothic',size=8, weight = 'bold')


주식리스트 = ['SPY', 'EFA', 'IWD', 'IWF', 'IJH', 'IWM', 'EWJ']

채권리스트 = ['IEF', 'TLT', 'LQD', 'IEF', 'TLT', 'LQD', 'IEF']

현금리스트 = ['SHY']

전체리스트 = 주식리스트 + 채권리스트 + 현금리스트


def 주가(stock, start):

    주가 = web.DataReader(name=stock, data_source='yahoo', start=start)['Adj Close']

    a = pd.DataFrame(주가.div(주가.iat[0]))

    a.columns = [stock]

    return a

    

def 모멘텀(데이터, 주기):

    a = pd.DataFrame()

    b = list(데이터)

    for i in b:

        a[i] = 데이터.iloc[:,0]

        a[i+'ROC'] = ROC(데이터, timeperiod=주기, price=i).shift(0)

        a[i+'수익'] = np.where(a[i+'ROC'].shift(1) > 0, a[i]/a[i].shift(1),1).cumprod()

    return a[i+'수익']

    

def 다중모멘텀(데이터, 주기1, 주기2, 주기3, 주기4, 주기5):

    a = pd.DataFrame()

    b = [주기1, 주기2, 주기3, 주기4, 주기5]

    for i in b:

        a[str(i)] = 모멘텀(데이터, i)

    return a.mean(axis=1)


def 전체데이터():

    a = pd.DataFrame()

    for i in 전체리스트:

        a = pd.concat([a,주가(i,'2003-01-01')],axis=1)

    return a


a = pd.DataFrame()

for i in 전체리스트:

    a = pd.concat([a,다중모멘텀(주가(i,'2003-01-01'),20,60,90,120,200)],axis=1)

a['mean'] = a.mean(axis=1)


전체데이터().mean(axis=1)

b = 전체데이터().mean(axis=1).to_frame()

b.columns = ['a']

다중모멘텀(b,20,60,90,120,200)


x = pd.DataFrame()

x = pd.concat([x, a['mean'],전체데이터().mean(axis=1),다중모멘텀(b,20,60,90,120,200)],axis=1)

x.columns = ['종목다중평균','전체평균','전체다중평균']

x.plot()

plt.show()


나가시기 전에 블로그 글 맨 하단의 배너 광고를 한 번만 클릭해주시면 더 좋은 콘텐츠를 만드는데 큰 도움이 됩니다~ 감사합니다! >


1. 네이버 카페 '실전주식투자 연구소' (클릭) 으로 오시면, 본 블로그의 모든 내용을 순서대로 확인하실 수 있고, 다양한 실전 투자 정보도 얻을 수 있습니다~


2. 'systrader79의 주식 단기 매매 전략 온라인 강좌'가 뉴지스탁에서 진행 중입니다!

   개별 주식을 이용한 단기 매매 기법, 뉴지스탁을 통한 완전 자동 투자 매매 구현에 관한 폭넓         은 노하우를 다루고 있으니, 많은 성원 부탁드립니다~

   첫 번째 강의는 수강 신청없이 무료로 시청 가능합니다 (아래 링크 클릭 --> 1번 방송 클릭)

     강의 소개 (클릭)

     * 강의 바로가기 (클릭)



3. 여러분의 인생이 걸린 너무나도 중요한 소식! --- > 여기를 클릭하세요!


728x90
반응형
그리드형

댓글