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

실전 투자 전략 (39) - 역추세 전략, RSI(2) system

by systrader79 2017. 4. 4.
반응형

 지금까지 다양한 형태의 추세 추종 매매기법을 살펴보았습니다. 추세추종매매기법은 커다란 가격의 흐름에 편승하여 장기적인 수익을 취하는 굵직굵직한 투자방법이라고 할 수 있겠죠?  

 하지만, 대다수의 투자자들에게 일반적으로 추세추종전략은 본능에 반하는 느낌으로 다가가기 쉽습니다. 왜냐면, 대부분의 투자자들은 추세를 따르는 것이 막연하게 비싸게 산다고 느끼는 경우가 많고, 실제로도 시장의 2/3 이상은 비추세장이라 10번 매매 중 7번 정도는 '비싼 자리'에 사서 '손절'이 발생하는 것을 경험하여 이런 나쁜 믿음이 더욱 강화되기 때문입니다

 또한 추세추종전략은 상대적으로 장기적인 투자 기간과 오랜 기다림을 요하고, 잦은 손절을 견뎌야 하기 때문에, 머리로는 좋다고 생각해도 이런 심리적인 장벽들을 극복할 시스템이 구축되어 있지 않다면 실제로 이를 유지하기란 정말 쉽지 않습니다

 그렇다면 대안은 없는 것일까요? '바닥에서 사서 꼭지에 팔고 싶고, 무의미하게 오래 기다리기보다는 효율적으로 짧은 기간만 보유하며 작은 수익을 자주 먹고, 손익비가 낮아도 승률이 월등히 높아 심리적으로 편안한 시스템' 추세 추종 매매의 단점과 완전히 반대인 전략, 따라서 심리적으로도 매우 편안한 전략 말입니다. 이런 전략이 있을까요? 있습니다. 지금 소개할 역추세 매매기법 입니다. 


1. 역추세 매매 기법이란? 

 지금까지 블로그에 지독하게 강조했던 부분이, '추세를 따라야 한다' '추세에 반하면 죽음이다' '물타기 하면 끝이다' '추세 추종을 해야 장기적으로 살아남는다' 였는데, 뜬금없이 '역추세 매매기법'을 소개하니 많이 당황하신 분도 계시리라 확신합니다. 

 "아니, 추세를 따르라고 그렇게 강조하더니, 완전히 추세에 역행해서 매매하라고? 추세 매매가 장기적으로 수익이 나는 전략이라면, 역추세는 완전히 거꾸로니 지속적으로 손실만 보는 것 아냐? "

 라고 생각하시는 것 잘 알고 있습니다. 

 그런데, 이것은 크나큰 오해입니다. 역추세 매매전략이 추세 매매의 전략의 매매신호를 거꾸로 적용하는 것도 아닐 뿐 더러, 본질적으로는 사실 추세 추종 매매에 속하기 때문입니다. 

 예를 들면, 20일 이평선 돌파 전략 (20일 이평선 상향 돌파시 매수, 하향 돌파시 매도) 이 추세 추종 매매라면, 반대로 20일 이평선 하향 돌파시 매수하여 20일 이평선 상향 돌파시 매도하는 것이 역추세 전략이 아니란 말입니다. 

 그렇다면 역추세 매매의 본질은 무엇일까요? 역추세 매매의 본질은, '장기적인 상승 추세'가 유지되는 상황에서, 일시적인 큰 폭의 '단기 급락' 이 발생할 경우, 이후에 '단기적인 반전'을 예상하고 진입하는 '단기 전략'입니다. 

 즉, 역추세 매매에서도 커다란 움직임은 반드시 '상승 추세'여야 한다는 전제 조건이 붙는다는 것이 매우 중요합니다. 이 전제조건을 이해하지 못하면 '어떻게 추세를 따르라고 하면서, 추세에 역행하라고 하냐?'라고 오해할 수가 있는 것이죠. 

 상승 추세가 유지되는 상황에서 일시적인 가격의 급락이 발생하면, 장기적인 상승 추세로의 평균 회귀 성향이 발동하게 되는데 이 짧은 추세의 반전을 취하는 방법이 바로 역추세 매매 기법입니다. 따라서, 거시적인 관점에서 보면 역추세 매매 또한 커다란 흐름은 상승 추세에 편승해야 한다는 조건이 충족되어야 한다는 전제 조건과, 급락 이후의 반전은 상승 추세로의 회귀를 의미하기 때문에 추세 추종 전략의 철학과 모순되지 않습니다

 역추세 전략의 세부적인 매매 룰은 얼마든지 여러분이 만들 수 있습니다. 'Trading for a living'의 저자로 유명한 알렉산더 엘더 박사는, 그가 고안한 삼중창 매매 시스템(triple screen system)을 제안했는데, 이는 단기 추세가 상승인 상태에서 단기 추세가 하락하는 조건을 충족시킨 상태에서, 단기적으로 방향을 바꿀때 진입하여 짧게 수익을 낸다는 개념입니다. 이것도 일종의 역추세 매매 기법으로 볼 수 있고 많은 분들이 잘 알고 있는 눌림목 매매 기법도 역추세 매매기법의 일종으로 해석할 수 있겠습니다. 

 주식 단타 기법 중에서도 상승 추세에 있는 급등주가 일시적으로 조정을 받을 때 짧은 손절선을 잡고 매매하는 전략이 많이 이용되고 있죠? 역추세 매매 전략, 알고 보니 어떻습니까? 여러분이 익히 알고 있는 개념이죠?


2. 역추세 매매 기법을 만드는 법 

 그럼 한 번 역추세 매매 기법을 만들어볼까요? 역추세 매매기법은 앞서 설명드린 역추세 매매 기법의 전제 조건만 잘 조합하면 됩니다

 - 장기 상승 추세 조건 

  다양한 기술적 지표를 이용하여 선정하면 됩니다. 이를 테면 주가 > 200일 이평선도 괜찮고, 200일 RSI > 50 같은 조건도 괜찮겠지요. 

 - 단기 급락 조건 

 역추세 매매 기법의 핵심은 단순한 단기 하락이 아닌 '단기 급락'이어야 합니다. 가격의 움직임은 변동성 군집 현상 때문에 변동성이 크게 갑자기 큰 폭으로 떨어져야 스프링처럼 큰 폭으로 튀어오르기 쉽기 때문입니다. 완만하게 천천히 떨어지면 추세가 상승반전되기보다는 천천히 하락추세가 강화되기가 쉽기 때문입니다. 단기 급락을 표현하기 위한 기술적 지표는 2~3일간의 짧은 기간 값에 해당하는 오실레이터 지표를 이용하면 됩니다. 예를 들면, 2일 스토캐스틱 값이나, 2일 RSI 값같은 지표를 이용하여, 이 값이 극단적으로 낮은 값을 가지도록 설정하면 됩니다. 

- 매도 조건 

 역추세 매매 기법에서는 단기 급락 신호가 출현하면 바로 매수에 참여한 후, 상승 반전되면 바로 매도합니다. 물론 이론적으로는 바닥을 찍고 터닝하는 찰나에 매수하여, 꼭대기를 확인 후 추세가 반전되는 것을 확인후 매도하는 것이 더 이상적이라고 생각할지 모르지만, 현실은 그렇지 않습니다. 실제로는 떨어지는 칼날을 잡아서 스프링처럼 튀어오를 때 바로 매도하는 전략이 승률이 훨씬 더 높게 나옵니다. 

 왜냐하면, 단기 추세는 워낙 짧기 때문에 일반적인 추세 추종 매매 처럼 추세가 반전되는 것을 확인하고 매수, 매도하면 건질게 없기 때문이죠. 


3. 가장 대표적인 역추세 매매 기법 

 앞서 설명드린 원리를 조합하면 얼마든지 여러분 자신만의 역추세 매매기법을 개발할 수 있습니다. 여기서는 세계적으로 가장 널리 알려져 있으면서도 효과도 꽤 robust하게 잘 나오는 RSI(2) system이라는 역추세 매매 기법을 소개하겠습니다. 

 RSI(2) 매매 기법은 Larry Connor가 그의 저서 "How Markets Really Work" 에서 공개한 방법으로, 그는 이 저서에서 "세상에는 무수히 다양한 지표가 있어 특정 한가지 지표를 고른다는 것이 어불성설이지만, 딱 하나만 골라야 한다면 RSI(2) 지표를 고르겠다' 라고 언급한 바 있고, 이 RSI(2) 지표를 이용해서 훌륭한 단기 역추세 매매 기법을 개발했습니다. 

 RSI(2) 시스템은 수많은 사람들에 의해 검증되었는데, 단순하지만 꽤 잘먹히는 시스템으로 인정받고 있는데 조건은 다음과 같습니다. 

 매수 조건 : 가격 > 200일 이평선 + 가격 < 5일 이평선 + RSI(2) < 5 

 가격이 200일 이평선 위에 있다는 것은 장기적으로 상승 추세임을 의미하고, 5일 이평선 아래에 있다는 것은 단기적으로는 하락 추세임을 의미합니다. 2일 RSI값이 5이하로 떨어진 것은 최근 2일 사이에 상당한 폭의 급락이 있음을 시사합니다. 200이나 5와 같은 값은 개인의 취향에 맞게 조절해서 쓰면 됩니다.

 매도 조건 : 가격 > 5일 이평선 

 즉, 장기 상승 추세 + 단기 급락 상황에서 매수하여 단기 반전이 확인되는 순간 매도하는 단순한 시스템입니다. 어떻습니까? 간단하죠?


4. 시뮬레이션 결과

 RSI(2) 전략이 발표된 이후, 다양한 변종 전략이 많이 등장했는데, 대표적인 것이 RSI(2)의 제한값을 5가 아니라 10이나 20 정도로 더 완화시켜 매매 신호를 더 많이 잡으려는 시도입니다. 여기서도 RSI(2) 값을 좀 더 올려서 시뮬레이션 해보겠습니다.

 다음은 이전 포스팅에서 소개한 멀티 asset portfolio (주식군만을 대상)으로 한 결과입니다. 장기 추세를 판단하는 조건으로 꼭 200일이어야만 할 이유는 없지요? 과최적화를 방지하기 위해 장기 추세 기간값을 널찍널찍하게 5단계(90일, 120일, 150일, 180일, 200일)로 분산시키고, RSI(2) 값의 역치도 20 정도로 늘려 신호를 많이 잡아서 시뮬레이션 해보겠습니다. 


 

 수익곡선이 안정된 것을 볼 수 있습니다. 기간값이나 RSI(2) 변수값을 적절한 범위에서 아무렇게나 조절해도 우상향하는데는 큰 문제가 없습니다. 앞서 언급한 바와 같이,전략의 구조에만 충실하면 어떤 기술적 지표를 선택, 조합하고 어떻게 변수값을 조절할지에 대한 가능성은 무궁무진합니다.

 

 단기 역추세 시스템은 추세 추종 시스템과 달리 승률이 70%가 넘어 심리적으로 안정될 뿐만 아니라, 단기간에 수익을 짧게 짧게 실현하는 재미가 있어, 구조가 정반대인 추세 추종 시스템과 조합시 분산 투자 효과가 상당히 크다고 할 수 있습니다. 

 마치 주식과 채권의 조합처럼 상관성이 낮은 자산군에 분산하면 리스크가 줄어드는 것처럼 추세 추종 시스템과 역추세 시스템은 구조적으로 상반된 전략이기 때문에, 양쪽에 분산하면 '구조적으로' 서로 간의 단점을 상쇄시키는 효과가 있어 절대 수익 곡선을 만드는데 큰 효과를 발휘합니다.


다음은 파이썬 코드입니다.

from bokeh.charts import Line

from bokeh.plotting import show, output_file

from bokeh.charts import Chart, Line

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 RSI전략(데이터, 매수기간, RSI값):

    a = pd.DataFrame()

    b = list(데이터)

    for i in b:

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

        a[i+'RSI'] = RSI(데이터, timeperiod=2, price=i)

        a[i+'매수시그널'] = np.where((a[i]>a[i].rolling(매수기간).mean().shift(0)) & (a[i+'RSI'].shift(0)<RSI값) & (a[i]<a[i].rolling(5).mean().shift(0)),1,0)

        a[i+'매도시그널'] = np.where(a[i]>a[i].rolling(5).mean().shift(1),1,0)

        a[i+'마켓포지션'] = np.where(a[i+'매수시그널']==1,1,np.where(a[i+'매도시그널']==1,0,np.nan))

        a[i+'최종포지션'] = a[i+'마켓포지션'].ffill()

        a[i+'수익'] = np.where(a[i+'최종포지션'].shift(1) == 1, a[i]/a[i].shift(1),1).cumprod()

    return a[i+'수익']


def 다중RSI전략(데이터, 주기1, 주기2, 주기3, 주기4, 주기5, RSI값):

    a = pd.DataFrame()

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

    for i in b:

        a[str(i)] = RSI전략(데이터, i, RSI값)

    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,다중RSI전략(주가(i,'2003-01-01'),90,120,150,180,200,5)],axis=1)

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


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

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

b.columns = ['a']

chart = Line(다중RSI전략(b,90,120,150,180,200,20), ylabel='수익', xlabel='날짜')

show(chart)


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


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


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

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

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

     강의 소개 (클릭)

     * 강의 바로가기 (클릭)



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


반응형

댓글3

  • 이도원 2017.06.05 05:44

    블로그를 통해 많이 배우고있습니다.
    감사합니다.^^
    자세한 표가 아니라 그래프만 제시되어있어
    정확한 것은 모르겠지만
    2008-2009년 수익그래프나
    MDD를 보면 굉장히 안정적으로 보입니다
    장기추세 위에 있는 종목만 매수하게되니
    자연스레 폭락장에서 투자를 중지하게 된 것으로
    이해해도 될지요?
    그리고 매도 조건 중 손절 조건도 알수있을까요?
    답글

  • BK 2017.10.22 12:41

    시스님 좋은글 잘 보고 있습니다. 궁금한 점이 있어 글을 남기네요. 위에서 소개된 RSI(2) 전략이 역추세매매로 소개가 되었는데 결론적으로는 주가가 장기 이동평균선 위에 있다고 하는 전제조건에서 보면 장기추세 안에서의 눌림목에서 매수하는 방법이므로 이를 역추세매매로 볼 수가 있는지요? 따라서 저 매매가 다른 추세추종매매와 구조적으로 상반된 매매가 맞는지... 이를 전략 포트폴리오로 두었을 때 두 전략이 서로의 손실을 상쇄 시켜줄 수 있는지 궁금하네요... 시스님의 고견을 듣고 싶습니다.
    답글

  • j9k 2018.01.29 00:48

    잘 봤습니다. 한데 위의 글도 그렇고 전략 시뮬레이션에 대한 결과를 구체적인 수치로 제시해 주시지 않으셔서 어떤 정도인지 감이 안오는 부분이 많네요. 어제 이번에 새로 쓰신 주식투자 ETF로 시작하라를 구매하여 완독하였는데 그 책에서도 우상향하는 그래프만 있고 구체적인 중요 수치들이 빠진 페이지들이 몇몇 있어서 아쉬웠습니다.
    답글