목 차 발간에 즈음하여 ............................... 오류! 책갈피가 정의되어 있지 않습니다. 추천의 글 ....................................... 오류! 책갈피가 정의되어 있지 않습니다. 미래를 향하여 .................................. 오류! 책갈피가 정의되어 있지 않습니다. 제 1 장 시스템 트레이딩..................... 오류! 책갈피가 정의되어 있지 않습니다. 1. 2. 3. 4. 매매(TRADING) ............................. 오류! 시스템 트레이딩(SYSTEM TRADING) ..... 오류! 시스템 트레이딩의 장점과 단점 ......... 오류! 시스템 트레이딩 준비물 .................. 오류! 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 제 2 장 사이보스 트레이더를 이용한 시스템 트레이딩오류! 책갈피가 정의되어 있지 않습니다. 1. 사이보스 트레이더 따라하기 ............. 오류! 2. CT세부기능 ................................. 오류! 3. CT 주문 유형 ............................... 오류! 4. 시스템 트레이딩 전략의 구성 ............ 오류! 5. 시스템 트레이딩의 개발 준비 단계 ..... 오류! 6. 시스템 트레이딩 개발 과정............... 오류! 7. 전략 평가 및 최적화 (기초) .............. 오류! 8. CT를 이용한 실전 매매 ................... 오류! 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 제 3 장 시스템 트레이딩 따라하기 ......... 오류! 책갈피가 정의되어 있지 않습니다. 1. 2. 3. 4. 꼭 알아 두어야 할 것들 ................... 오류! 데이트레이딩 ............................... 오류! 단기매매(SHORT TERM TRADING) ........ 오류! 정리 .......................................... 오류! 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 제 4 장 진입 전략............................. 오류! 책갈피가 정의되어 있지 않습니다. 1. 2. 3. 4. 5. 6. 돌파전략(BREAK OUT STRATEGY) ........ 오류! 수렴 돌파 전략 ............................. 오류! 추세선, 지지/저항선 분석 전략 .......... 오류! 모형(GEOMETRIC PATTERN)분석 전략 ... 오류! 패턴(PATTERN)분석 전략 ................. 오류! 기술적 지표를 이용한 전략............... 오류! 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 제 5 장 청산 전략............................. 오류! 책갈피가 정의되어 있지 않습니다. 1. 2. 3. 4. 진입 이후 가격 움직임 .................... 오류! 청산 전략 개념 정리....................... 오류! 복합 청산(COMPOSITE EXIT)전략......... 오류! 정리 .......................................... 오류! 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 책갈피가 정의되어 있지 않습니다. 제 6 장 자산관리전략......................... 오류! 책갈피가 정의되어 있지 않습니다. 1. 2. 3. 4. 기초 .......................................... 오류! 책갈피가 정의되어 있지 않습니다. 계약수 변경 방법 .......................... 오류! 책갈피가 정의되어 있지 않습니다. 투자자산 변화에 따른 계약수 변경 방법오류! 책갈피가 정의되어 있지 않습니다. 정리 .......................................... 오류! 책갈피가 정의되어 있지 않습니다. 제 7 장 평가 및 최적화 ...................... 오류! 책갈피가 정의되어 있지 않습니다. 1. 평가(EVALUATION).......................... 오류! 책갈피가 정의되어 있지 않습니다. 2. 최적화(OPTIMIZATION) ..................... 오류! 책갈피가 정의되어 있지 않습니다. 7TH 감각, 시스템 트레이딩................... 오류! 책갈피가 정의되어 있지 않습니다. 참고자료 ........................................ 오류! 책갈피가 정의되어 있지 않습니다. 색 인 ............................................ 오류! 책갈피가 정의되어 있지 않습니다. 제 1 장 시스템 트레이딩 투자의 핵심 원칙: 수익은 크게, 손실은 작게 (Let Profit Run, Cut Loss) 매매를 하는 이유는 당연히 수익을 창출하기 위함이다. 수익은 가격 변동에서 발생된다. 물론 손실도 가격 변동에서 발생된다. 따라서 가격 변동을 발생시 키는 요인을 분석하면 수익을 창출할 수 있게 된다. 현물 시장에서의 가격은 다양한 경제, 경영, 정치, 사회적 요인에 의해서 영 향을 받는다. 즉 거시적 및 미시적 변수에 영향을 받는데, 주요 분석 방법으 로는 거시적인 분석인 경제 분석(economic analysis), 기업 내재가치 분석인 기본적인 분석 (fundamental analysis), 주가 자체를 분석하는 기술적 분석 (technical analysis) 이 있다. 반면 파생상품 시장인 선물, 옵션 시장의 가격 변화 요인은 현물시장과 마찬 가지로 다양한 분야에서 영향을 받지만, 가장 큰 특징은 기본적 분석을 할 수 없다는 것이다. 따라서 기술적 분석이 유용하게 사용된다. 특히 파생상품의 대상이 종합주가지수인 주가지수 선물과, 옵션 시장의 경우에는 더욱 더 기술 적 분석을 이용한 가격 변화 분석이 주로 사용된다. 현물 시장에서는 매수만 허용되기 때문에 가격이 상승할 경우 수익이 발생하 고, 가격이 하락할 경우에는 손실이 발생한다. 반면 파생상품인 선물이나 옵 션의 경우에는 매수, 매도가 모두 허용되기 때문에 가격이 상승하든, 하락하 든 현재의 매매 포지션과 같은 방향이면 수익이 발생하고 그 반대이면 손실이 발생하게 된다. 이러한 가격의 변동요인분석을 통해 수익 창출의 기회를 찾는 방법을 두 가지 로 구분할 수 있다. 투자(investment)와 매매(trading)이다. 투자는 현물시장에 주로 사용되는 방법으로서 해당 산업의 비전이나 해당 기 업의 향후 성장성 등 장기간의 가격 변화를 이용해서 수익을 창출하는 방법이 다. 주로 대규모 자금을 운용하는 기관 투자가의 매매 형태에 속하는 것으로 서 단기변화 분석 보다는, 중장기 변화에 영향을 주는 기본적 분석이나 경제 분석을 이용한다. <그림 1-1> 투자(Investment) 6 5 (단위: 원) 550,000 (단위: US $) DDR 가격 DDR 가격 500,000 4 450,000 3 400,000 2 삼성전자 주 350,000 삼성전자 주가 1 0 001-11-14 2001-12-27 2002-02-08 2002-03-22 2002-05-03 2002-06-14 300,000 250,000 <그림 1-1> 은 삼성전자 주가(우측)와 256메가 DDR 가격(좌측)을 동시에 표시한 그림이다. 그림에서 보면 DDR 가격의 움직임과 삼성전자 주가는 동행하는 것을 알 수 있다. 즉 DDR 가격이 횡보하기 시작하면서 주가는 서서히 상승세로 전환되었고, DDR 가격이 상승하면서는 주가가 본격적으로 상승 하였다. 그 뒤 재차 DDR 가격이 하락세로 전환되었고, 주가는 시차를 두고 하락 전환 2 되었다. 이 국면에서는 DDR 가격이 주가 보다 오히려 선행하는 선행성을 보여 주고 있다. 매매 방법은 삼성전자의 내재가치 변화를 나타내는 DDR 가격이 상 승하면 매수, 하락하면 매수 청산 전략을 사용하는 것이 될 것이다. 반면 매매는 내재가치가 없는 파생상품시장이나, 현물시장에서도 단기 가격 변화를 포착하여 수익을 창출하는 방법으로서 단기분석이 가능한 기술적 분석 을 주로 사용하게 된다. 일반 투자가들은 자금력이나 정보 분석력이 떨어지기 때문에 거의 “매매”를 통해서 수익창출 기회를 포착하게 된다. 특히 만기가 3 개월인 선물 시장 및 만기가 1개월인 옵션 시장에서는 투자기 간을 길게 가져갈 수가 없고, 현물 시장 보다 레버리지(leverage)가 커 단기 수익 창출이 주된 목적이 될 수 밖에 없다. 또한 위험도 커서 포지션을 내일 로 가져가는 오버나잇(over-night)보다는 장중에 청산하는 데이트레이딩(day trading)이 주를 이룬다. <그림 1-2> 매매(Trading) <그림 1-2>의 예처럼 매매는 가격 자체의 변화를 사용하게 되는데, 이동평균 선(60일)을 상향 돌파하면 매수, 하향 돌파하면 매수 청산을 하는 형태로서 주가 자체 변화를 중시하는 형태라 할 수 있다. 시스템 트레이딩은 위와 같은 매매 방법 중 하나이다. 다음에 매매 방법에 대 해 좀더 자세히 알아보자. 1. 매매(Trading) 매매를 해서 수익을 창출하여 성공한 투자가가 되는 것이 모든 투자가들의 염 원이다. 그러나 이렇게 성공한 투자가는 전체 시장에서 소수뿐이라는 것은 모 두 알고 있을 것이다. 특히 선물시장에서는 제로섬 게임이므로 투자자 중 80% 는 손실이 발생하고, 오직 20%만 수익이 발생하는 구조를 이루고 있다. 그러면 어떻게 20%의 성공한 투자가가 될 수 있을 것 인가? 간단하다. 매매를 잘해서 수익을 많이 발생시키면 된다. 사고 파는 개념으로 보면 “높게 매수해 서 더 높게 매수 청산하고, 낮게 매도해서 더 낮게 매도 청산하는 방법”을 사 용하거나 “저가에 사서 고가에 파는 전략”을 구사하면 된다. 이러한 사고 파는 의사결정을 하는 방법에 따라서 주관적인(discretionary) 매매 방법과 시스템 트레이딩(system trading)매매 방법으로 구분할 수 있다. (1) 주관적인 매매(Discretionary Trading) 주관적인 매매는 말 그대로 자신의 직감(intuition)이나 정보(hot-tip) 등에 의존하는 매매를 말한다. 즉 지금 매수를 해야 할 시점인가를 자신이 가지고 있는 고유의 매매 감각이나, 현재 시장에서 유포되고 있는 정보 사항 및 다양 한 뉴스, 시황을 종합하여 결정하는 형태이다. 따라서 순간 순간마다 매매에 대한 의사 결정이 변경되기도 하여 규칙성이 없 4 으며, 상황에 따라 변화되는 형태의 매매 방법이다. 이러한 매매 방법으로 수익을 창출할 수 있는가? 가능하다. 하지만 꾸준히 수익을 낼 수 있는가? 불가능할 것이다. 예를 들어 작전주로 단기 수익을 낼 수도 있지만, 결국은 손실로 이어지는 사례가 더 많다는 것이다. 최근에 들어서 성공 매매에 관련 된 책자가 많이 있다. 그런 책을 보면 다양 한 자신만의 매매 원칙을 설명하고 있으며, 이러한 매매의 기본 원칙을 준수 하면 돈을 번다고 설명한다. 따라서 대부분의 성공 투자가들은 주관적인 매매 자라기 보다는 시스템 트레이더에 가깝다고 볼 수 있다. (2) 시스템 매매(System Trading) 시스템 매매는 매매 방법론적인 관점에서는 규칙성이 있는 매매 원칙을 사용 하는 것이다. 주관적인 매매 방법이 주로 계량화 할 수 없는 부분도 사용한다 면, 시스템 매매는 주로 계량화 할 수 있는 시계열(time series) 및 횡단면 (cross-section)데이터 등을 사용해서 매수, 매도 원칙을 매매에 적용하는 것 이다. <그림 1-3> 주관적인 매매 방법 및 시스템 매매 계량화 가능한 항목은 주가, 거래량, 매매동향, 기술적 지표 등 과거 수치로 표현되는 항목을 말하며, 수치로 표현 가능한 항목을 통해 자신의 매매 원칙 을 과거 기간을 대상으로 검증하고 확인하는 과정도 포함된다. 시스템 매매라 해서 자신의 매매 원칙이 변화되지 않는 것은 아니다. 주관적 인 매매 방법은 자신의 매매 원칙의 잘못을 파악하지 못하지만, 시스템 매매 방법은 자신의 매매 원칙의 잘못을 파악할 수 있다. 또한 시대의 변화에 따라 변화될 수 있는 능력을 갖게 하는 장점이 있다. 대부분의 시스템 매매는 주가 자체를 이용하거나 기술적 지표를 이용해서 사 용한다. 따라서 기술적 분석의 범주에 속하게 되며, 기술적 분석의 강점인 단 기매매가 가능하여 선물시장에 적용하기에 용이하며, 과거 검증이 가능해서 수익과 위험을 분석하는 합리적인 의사결정이 가능해진다. 이제부터 시스템 매매에 대해 본격적으로 알아보자. 2. 시스템 트레이딩(System Trading) 시스템 트레이딩은 매매의 한 방법으로서 합리적인 의사결정 과정을 말한다. 즉 자신의 매매 원칙이 어느 정도 수익이 나는지, 매매 위험이 어느 정도인지 등을 과거 주가를 통해서 분석하여 파악한 후, 실전 매매에 적용하는 방법이다. 역사적으로 살펴보면, 세계 2 차 대전에서 미군이 독일군의 폭격 시점을 예측 하기 위해서 예전의 폭격 시점들을 지수 평균화하여 사용했던 이동평균 방법 이 전쟁 후 주가 예측 및 주식 매매에 이용한 것이 시초이다. 특히 앞서 설명 한 것처럼 선물이란 파생상품이 생겨 나면서 내재 가치가 없는 선물 투자 접 근법으로서 다양한 시스템 매매 방법이 사용되기 시작한 뒤부터 폭발적으로 시스템 트레이딩이 활성화 되었다. 6 파생상품시장 활성화에 따라서 시스템 트레이딩 뿐만 아니라, 금융공학도 큰 폭으로 성장하게 되는데 이 둘은 수익 창출에 원천을 둔 것으로서 크게 다르 지 않다. 다만 금융공학적 측면에서는 가격결정, 상품개발 등의 모델 위주이 지만, 시스템 트레이딩은 실제 매매에서의 수익 창출에 중심을 둔다. 시스템 트레이딩 방법은 과연 어느 정도 사용되고 있을까? 과연 주관적인 매 매 방법보다 수익이 더 좋을까? 한국 시장에서는 그 현황이 미미한 수준이다. 하지만 간접적이나마 아래의 미국시장을 통해서 향후 발전 방향 등을 알아볼 수 있다. 항목 연도 1987 <표 1-1> 매매 방법에 따른 년간 수익률(%) 주관적 시스템 주관적 매매 매매 매매누적 56.45 63.03 56.45 시스템 매매누적 63.03 1988 39.83 12.21 96.28 75.24 1989 33.68 1.17 129.96 76.41 1990 21.41 34.59 151.37 111 1991 4.42 13.35 155.8 124.4 1992 -0.41 3.25 155.38 127.6 1993 9.54 8.19 164.9 135.8 1994 1.9 -3.2 166.8 132.6 1995 4.2 15.28 171 124.7 1996 1.45 11.6 172.5 136.3 1997 2.62 12.76 175.1 149 1998 -6.2 8.12 168.9 157.2 1999 3.23 -3.71 172.1 153.4 2000 2.14 9.89 174.3 163.3 2001 -0.11 2.99 174.15 166.32 2002 11.17 11.93 185.32 178.25 주) 주관적 매매: 65% 이상을 주관적 판단으로 매매함. 2003년 기준 69개 시스템 매매: 95% 이상을 시스템 매매로 함. 2003년 기준 290개의 과거수익률 (출처: Barclay Indices Report) “The Barclay Group”에서 제공하는 통계를 보면, 미국의 CTA(Commodity Trading Advisor: 선물 자산 운용사)중 2/3 정도가 시스템 트레이딩을 하는 것으로 조사되어 있다(과거로부터 꾸준히 이 수준을 유지하고 있다). 또한 상위 30개 CTA 중 70%가 시스템 트레이딩을 사용한 것으로 조사되며, 수 익 또한 주관적인 매매 기법보다 좋은 것으로 분석되고 있다. 주로 사용하는 전략은 현물시장에서는 장기 추세 추종적인(long term trend following) 전략 을 사용하며, 다수의 시장에서 동시에 매매하는 전략을 사용한다. 구체적으로 주관적 매매 기법과 시스템매매 기법을 사용하는 CTA의 수익관련 현황을 비교해보면, 비교기간 16년 중 5년을 제외하고 시스템 매매에 의한 연 간 수익률이 주관적인 매매에 의한 연간 수익률을 상회하고 있다<표 1-1 참조>. <그림 1-4> 누적 수익률 추이 220 주관적매매 누적 y = 5.6419x + 106.44 R2 = 0.6314 200 180 160 140 120 시스템매매 누적 y = 8.9198x + 65.436 R2 = 0.9561 100 80 60 40 20 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 <그림 1-4>에서 보듯이 역사적으로 시스템매매의 수익 성장도가 주관적인 매 매 보다 좋다는 것을 한 눈에 알 수 있다. 주관적매매 누적수익의 선 적합도 가 63% 인데 반해 시스템매매 누적수익곡선의 선 적합도는 95%로 수익의 편차 가 적고, 직선 방정식의 기울기도 8.9198로 주관적인 매매의 기울기(5.6419) 보다 좋다는 것을 보여준다. 8 결국 주관적인 매매 방법보다 시스템 매매가 수익 창출에 유용하다는 결론을 얻을 수 있을 것이다. 다음에는 아직까지 남아있는 한국 시장에서의 시스템 매매에 대한 일반적인 오해에 대해서 살펴보자 (1) 일반적인 오해 첫째, 시스템 트레이딩 기법이 일종의 증권시장의 유행이라는 오해이다. 즉 우리나라에서 이제 시스템 트레이딩이 시작인가? 아니면 이제 퇴조 하는가? 물론 매매 기법은 유행이 될 수 있다. 예를 들어 최근에 한국시장에 유행하는 일목균형표 전략이 대표적이라 할 수 있다. 유행의 경우 그 기법에 의한 예측 이 안 맞기 시작하면 이제 더 이상 일반의 관심을 끌지 못하게 된다. 하지만 시장 원리에 원칙을 둔 매매 기법은 유행이 아니어서 꾸준한 관심을 유지할 수 있다. 즉 원론적으로 시스템 트레이딩은 시장 원리를 바탕으로 하기 때문 에 시장의 변화에 따라 사라지거나 유행하는 것이 아니다. 오히려 선물 시장 및 옵션 시장이 활성화 되고 다양화 될수록 더욱 더 많이 사용될 것이다. 더구나 한국 시장에서는 시스템트레이딩 기법이 이제 시작이라 할 수 있다. 시스템 트레이딩은 위험을 인식하고 제어하는 것이 기본 원리로 사용된다. 즉 우리나라에서는 이제야 위험이란 개념을 인식하는 단계라고 해도 과언이 아니 다. 둘째, 시스템 트레이딩이 아주 특별한 매매 기법으로 엄청난 수익을 내는 방 법이다. 흔히 매매전략의 성배(holy grail)를 찾는다고 들 한다. 즉 매매 마다 100% 수익을 발생하는 전략을 말하는 것이다. 결론적으로 말하면 그런 시스템은 없다. 과거에 100% 수익이 나는 시스템이 미 래에도 100% 수익이 나는 시스템일까? 생각해보면 금방 답이 나온다. 『미래는 알 수가 없다』가 정답이기 때문이다. 그러면 시스템 트레이딩은 무엇일까? 가장 근접한 대답으로서는 “꾸준하게 수익을 창출하는 매매 방법”을 말한다. 즉 위험을 제어하고 수익을 키우는 매매 전략을 사용하여 꾸준한 수익 증가를 목적으로 한다. 셋째, 시스템 트레이딩은 자동 주문이다. 시스템 트레이딩을 하기 위해서는 물론 자동 주문이 필요하다. 비용을 감소시 키고 빠른 시장 변화에 대응할 수 있기 때문이다. 하지만 이것은 시스템 트레 이딩을 하기 위한 수단이지, 목적이 아니다. 시스템 트레이딩의 목적은 언제 사고, 언제 파느냐를 시장 원리에 입각하여 계획을 세우고, 매매 전략으로 사 용하는 것이다. 넷째, 전략의 공개 및 비공개 여부이다. 전략이 공개되면 그때부터 유용성이 떨어진다 물론 대규모 펀드에서 사용되는 전략이 공개될 경우 반대 세력이 이것을 이용 할 가능성이 있다. 하지만 대부분의 경우 공개 되더라도 시장에서는 별 반응 이 없는 것이 일반적이다. 그리고 시장원리에 충실한 매매 전략은 공개하더라 도 시장의 원리대로 수익을 창출할 수 있을 것이다. 외국 서적에서는 많은 전략들이 공개된다. 수익을 많이 내서 유명한 Larry William, Jake Bernstein 등과 같은 저자들의 책을 보면 많은 전략들이 공개 되며 한국시장에서도 적용 가능하다. 10 <그림 1-5> 공개 전략 사이트 주) https://www.tradestationworld.com <그림 1-6> 매매 전략 개발 전문 잡지 주) http://www.traders.com/S&C_homepg.html 다섯째, 비공개 되는 판매 시스템은 복잡할 것이고, 수익이 날 것이다. 비공개 전략을 판매하는 사이트가 외국이나 국내에서도 존재한다. 판매 시스템들 의 경우 대부분 비공개를 원칙으로 하는데 중요한 원리는 다음과 같다. 우선 수익 을 내는 시스템은 매우 간단한 시스템이다. 앞서 설명한 CTA가 가장 많이 사용하 는 전략은 아주 간단한 이동평균이나 주가 채널을 이용한 전략의 변형일 가능성이 크다. 실제로 수익을 내는 전략은 복잡하지 않고, 간단하다는 것이 정설이다. <그림 1-7> 판매용 시스템 주) http://www.traderclub.com: 시스템 별 250$(US) 정도) 또 하나 자세히 관찰할 것은 어느 정도 오랫동안 판매해왔는가? 이다. 오랜 기간 동안 꾸준히 판매된 시스템은 아주 훌륭한 시스템으로 평가할 수도 있을 것이다. 하지만 대부분의 판매 시스템은 구입할 필요가 없다. 미국 시장에서도 매년 수없이 많은 판매 시스템이 생성되고 얼마 가지 않아 사라진다. 이유는 실제 로 수익이 지속적으로 발생하지 않기 때문이다. Jack D. Schwager는 효용성이 떨어지는 판매 시스템의 문제점을 다음과 같이 지적하였다. 판매 시스템은 너무 잘 맞는 사례만을 보여준다. 과거 수익 곡선에 나쁜 부분을 임의로 보정한다. 위험을 무시하거나, 아예 관리 전략이 없다. 과 최적화를 통해서 가장 좋은 결과를 사용한다. 비용(특히 슬리피지)을 감안하지 않은 결과를 보여준다. 위와 같이 시스템 트레이딩에 대한 잘못된 오해를 통해서 진정한 시스템 트레 이딩의 의미를 파악해 보았다. 이제부터 시스템 트레이딩의 장단점에 대해서 알아보기로 하자. 12 3. 시스템 트레이딩의 장점과 단점 주관적인 매매 방법에서 벗어나, 시스템 트레이딩을 통해 얻을 수 있는 장점 은 크게 세 가지이다. (1) 인간의 감정을 제어할 수 있다. 진입(매수, 매도) 의사 결정을 하였을 경우, 주가가 상승할 거라는 탐욕 (greed)과 하락하면 어쩌나 하는 공포(fear)가 상존하게 된다. <그림 1-8> 청산 전략 - 탐욕과 공포 제어 이러한 불안정하며 쉽게 변화되는 인간 감정은 추가 매수 기회를 놓치게 하거 나, 무한대의 손실을 보게 하는 주 원인이 된다. 시스템 트레이딩을 이용하게 되면 기계적으로 인간의 감정이 제어된 매매를 할 수 있게 된다. 모든 매매에서 가장 하기 힘든 것이 손절매이다. 손절매는 인간 감정의 극단 치를 테스트한다고 해도 과언이 아니다. 일반적으로 손절매만 잘해도 소원이 없겠다는 이야기를 자주 듣는데, 이것이 바로 심리적인 요인으로서 투자 시 가장 방해되는 부분이다. 시스템 트레이딩을 사용할 경우, 이러한 인간의 극단적 감정을 제어할 수 있 게 된다. 반면 실제로 시스템 트레이딩을 하는 과정에서 자신이 개발한 전략일지라도 심리적 거부감이 크게 작용하여 잘 따라 하기가 힘들다. 그래서 시스템 트레 이딩에서는 자동 주문을 사용한다. 자동 주문을 하게 되면 실제로 매매 중 발생하는 심리적 거부감을 제어할 수 있으며, 빠른 주문으로서 슬리피지를 감 소시키는 효과를 보게 된다. 심지어 모니터를 끄고 매매를 하기도 한다. 사이보스 트레이더에서는 알람 기 능(매매 체결 시 소리 발생)이 있다. 이를 이용해서 자동 주문을 설정한 뒤, 모니터를 끄고 PC가 정상적으로 작동하는지 만을 체크하며 매매할 수 있다. 왜 이런 것이 필요할까? 간단하다. 인간의 탐욕과 공포는 쉽게 제어 되지 않 기 때문이다. 오랜 기간 동안 시스템 트레이딩을 한 베테랑 시스템 트레이더 라고 자부하는 투자자도 이러한 심리적 요소 때문에 상당히 부담스러워 하는 것이 현실이다. 더 나아가 [투기와 환상]의 심리도 조심해야 할 인간의 감정이다. 시스템이 수익이 발생하기 시작하면 “아 대단한 시스템을 개발했다” 라는 환상을 가지 고 계약수를 늘리거나, 1 최소 마진 트레이딩을 하게 된다. 이게 실패의 가장 큰 원인이 된다. 또한 계속되는 손실이 발생하면 원금을 빨리 회복하겠다는 심정으로 계약수를 늘리는 방법인 마틴게일 방법(6장 자산관리 참조)을 사용 하게 된다. 이 또한 실패의 지름길이 된다. 1 총거래대금의 15%만을 계좌에 보유한 채 매매하는 것으로서 계좌의 규모에 비해 거래대금 이 커지므로 약간의 매매손실에도 원금을 크게 훼손 할 가능성이 커지는 매매방법이다. 14 <그림 1-9> 환상과 투기 <그림 1-9>는 과거 테스트 결과가 아주 좋다고 해서 공격적인 매수 전략을 사 용해서 결국 큰 손실이 발생하는 가상적인 경우를 보여주고 있다. 이러한 형 태는 투기적인 매매 형태로서 조심해야 한다. 시스템 트레이딩을 하더라도 인간의 감정이 쉽게 제어되지 않는데, 주관적인 매매 방법으로서는 더욱 인간의 감정에 좌우되기 때문에 투자로서 수익을 발 생할 가능성 희박해진다. (2) 수익(Profit)과 위험(Risk)의 계량분석(Quantitative Analysis)이 가능하다. 시스템 트레이딩은 일정한 매매 전략을 기계가 이해할 수 있는 언어로 입력하 고, 여기에 따른 과거 수익 및 위험을 분석할 수 있으며, 그 외에도 유용한 통계적인 분석이 가능하다. 따라서 향후 이 시스템을 이용할 경우 기대되는 수익이 얼마이고, 예상 손실폭은 어느 정도인지, 시스템을 지속적으로 사용하 기 위해서 필요한 자본금은 얼마인지 등을 미리 판단할 수 있다. 여기서 중요한 것은 사전에 평가한다는 것이다. 시스템 트레이딩은 진입 시점 에서 모든 가정(수익, 위험, 계약수)을 이미 설정하고 진입하는 방법이다. 예를 들어 보자. 두 가지 장단기 이동평균선을 이용한 매매가 매매 전략이라 고 할 경우, 매매 전략을 작성하여 테스트를 하게 되면 간단하게 전략의 유용 성 및 수익, 손실 등을 파악할 수 있게 된다. <표 1-2> 평가 결과: 10일/30일 이동평균 교차 <그림 1-10> 연결 선물지수 일간 차트 및 누적수익곡선 16 평가 결과 위 전략은 횡보 장세에서 수익이 발생하지 않는 것을 알 수 있으며 (원호 부분) 매매당 기대수익은 100만원 정도이며, 최대 손실은 846만원으로 서 위험이 상당히 크다는 것을 알 수 있다. 실전매매에 적용하기에는 다소 무 리가 있지만 어쨌든, 실제 매매할 때 진입 시점에서 이익이 발생하면 평균 1 백 만원 정도, 최대 예상 손실은 846만원 임을 사전에 파악할 수 있다. 물론 향후 가격의 변화를 예측할 수 없고, 과거 수익이 미래 수익을 보장하는 것이 아니기 때문에 기대 수익률이 달성될지는 알 수가 없다. 하지만 통계적 검증 자체의 한계성을 제외하고는, 유용성 검증 등 다양한 검증 과정은 전략 개발에 가장 중요한 과정이 된다. (3) 지속적(Consistent)이고, 동시적(Simultaneous)으로 다수 시장 매매가 가능하다. 지속성은 계량화된 전략을 지속적으로 적용할 수 있어 자신만의 매매 패턴을 고정시키고 합리화시킬 수 있다는 의미와, 위험(risk) 관리를 지속적으로 할 수 있다는 점에서 중요하다. 또한 하나의 시장뿐만 아니라, 자신이 모르는 다 른 시장도 깊은 지식 없이 충분히 수익과 위험을 분석하면서 동시에 매매할 수가 있다는 장점을 가지고 있다. 투자의 기본 원칙 중 중요한 것은 어떻게 수익을 내는가 가 아니고, 어떻게 시장에서 살아남아 또 다른 투자 기회를 가지는가 이다. 계란을 한 바구니에 담지 말라는 말과 같이 분산 투자의 원칙도 마찬가지 의미로 해석할 수 있는 데, 어쨌든 지속적으로 매매를 하기 위해서는 계획적이고 합리적인 매매가 우 선되어야 한다. 이러한 지속성은 합리적인 시스템 트레이딩 방법을 사용하게 되면 가능해지고, <그림 1-11>처럼 꾸준한 수익을 창출할 수 있게 된다. <그림 1-11> 한국 주가지수 선물시장 적용 주) 데이트레이딩 전략(2000년 1월 4 일 ~ 현재, 10분 차트) 누적수익곡선 동시적인 매매는 합리적인 시스템 트레이딩 매매 방법을 사용하게 되면 현물 시장, 옵션 시장, 선물 시장에 동시에 적용하여 사용할 수 있게 된다. 나아가 <그림 1-12>처럼 한국시장 및 미국시장 등에도 동시에 적용하여 사용할 수 있 게 된다. <그림 1-12> 나스닥 지수 적용 주) Tradestation 7.1 버전 이용, 10분 지수 차트, 누적 수익곡선 이러한 동시성을 이용할 경우 대규모 자금을 쉽게 운용할 수 있게 된다. 예를 들어 30개 종목에 같은 전략을 적용해서 포트폴리오 투자가 가능해지는 것이다. 18 지금까지 지적한 3가지 장점을 가진 시스템 트레이딩 매매 방법은 가장 중요 한 실행 원칙이 있다. 어떠한 경우에도 매매 신호대로 꼭 따라 해야 한다. 역시 심리적인 요소를 이야기 하는 것으로서 실전매매에서 매매 신호대로 실 천하지 않으면, 과거 테스트는 무의미해지고 다양한 장점들은 사라지고, 주관 적인 투자 방법을 사용하는 것이 되기 때문이다. 단점도 존재한다. 미래 가격 변화의 불확실성 그 자체로서 인간으로서는 제어 할 수 없는 부분이다. 첫째, 역사는 늘 똑같이 반복되지 않는다. 시장 가격의 변화가 반복적이라고 가정하면 모든 과거 테스트의 수익 및 위험 은 미래에도 보장된다. 하지만 주가가 과거와 같은 변화가 아닌 새로운 형태 의 변화가 발생하여 미래 결과는 과거와 달라질 수 있다. 예를 들어 과거 10 년 간 20일 이동평균선이 가장 적합한 수익을 보장했지만 앞으로 계속 20 일 이동평균선이 최적일 수도 없을 뿐만 아니라, 최악의 수익을 내는 이동평균선 이 될 수도 있다. 둘째, Random Event는 제어할 수 없다. 미국의 블랙 먼데이(black monday), 9. 11 테러 쇼크 등은 예측이 불가능한 Random Event로서 시스템 트레이딩으로도 제어되지 못한다. 더욱이 최근에는 장 종료 이후 그 다음날 아침 장 시작 전에 유발된 정보로 발생한 Open Gap (시가가 전일 종가보다 급변하여 형성되는 현상)도 제어할 수 없는 위험이다. 이러한 제어할 수 없는 위험을 피하기 위해서는 데이트레이딩도 하나의 회피 방법이 될 것이다. 위 두 가지는 다 시스템 트레이딩의 단점이라기 보다는, 매매에 대한 불확실 성이라 할 수 있다. 따라서 단점보다는 장점이 더 유용하게 작용하는 관계로 시스템 트레이딩은 유용한 매매 방법이라고 평가할 수 있다. 그러면 이제부터 시스템 트레이딩을 하기 위한 준비물을 알아보자. 4. 시스템 트레이딩 준비물 시스템 트레이딩을 하기 위해서는 1)PC 2)소프트웨어 3)과거 데이터가 필수적 으로 필요하다. 이러한 준비물이 제대로 구비되고 난 뒤, 매매 전략을 코딩 할 수 있게 된다. (1) PC 요즘 PC의 속도 및 성능이 놀라운 속도로 발달하고 있다. 따라서 이제 PC는 별문제가 되지 않는다, 다만 복잡한 계산을 수행하거나 포트폴리오 트레이딩 등을 하기 위해서는 펜티엄-Ⅳ 이상 정도를 구비해야 할 것이다. 실전 매매를 하는 투자가 중 두 대의 PC를 사용하는 경우도 많다. 이유는 인 터넷이 갑작스런 장애가 발생할 경우를 대비해서 다른 인터넷 망을 이용해서 PC 한 대는 백업용을 사용하는 것이다. (2) 소프트웨어(Software) 시스템 트레이딩을 구사하기 위해서는 시스템 트레이딩이 가능한 소프트웨어 가 꼭 필요하다. 이러한 전문 소프트웨어는 두 가지 방식이 있다. 사용자 언 어를 제공하는 개방(open tool box)형과 자체적으로 개발한 매매방법만을 이 20 용하게 하는 폐쇄형(black box)이 있다. 최근에는 폐쇄형보다는 개방형이거나, 개방형과 폐쇄형 혼합된 모듈이 포함된 형태의 소프트웨어가 주 추세를 이룬다, 미국 시장에서 시스템 트레이딩 툴 박스로는 대표적으로 Tradestation, MetaStock 등이 있다. 둘 다 오랜 역사를 자랑하며 강력한 내부 언어를 가지 고 있다. 언어를 가지고 있는 소프트웨어는 어떠한 아이디어도 구사할 수 있 다는 큰 장점을 가지게 된다. 투자 의사 결정 방법은 개인별로도 상당한 차이 를 보이기 때문에, 자신의 전략을 개발하고 구현하고 싶은 시스템 트레이더라 면 당연히 강력한 언어를 가지고 있는 소프트웨어가 바람직할 것이다. <그림 1-13> Tradestation 2000i 주) 판매가: 약 1,700$(US), Tradestation 7.1버전 사용료(월): 200$(US) 이상 (사용 모듈에 따라 추가요금) <그림 1-14> MetaStock 8.0 주) 판매가: 1,695$(US) Tradestation 경우 최근 7.0 버전으로 업그레이드 되면서 온라인 용으로, 월 사용료를 지불하는 방법으로 전환 되었다. MetaStock의 경우에는 오프라인과 온라인 버전이 있으며, 온라인 버전의 경우에는 판매 가격이 큰 폭 증가한다. 이 이외에도 언어를 제공하는 소프트웨어는 Amibroker, Aiq, Signal, Welthlab, Neuroshell trader, Tickquest, Tradingsolution, Aspengraphics, Investor, Stockwiz 등이 있다. 이러한 개방형 소프트웨어는 사용자 언어를 숙달해야 하며 전산적인 지식도 필요하며, 매매 전략을 전혀 모르는 투자자에게는 상당히 접근하기 힘들 수 있다. 하지만 외국도 마찬가지로 전략 코딩은 코딩을 전문적으로 해주는 사이 트나 단체가 있어 그리 큰 문제가 되지 않는다. 위에서 소개한 Tradestation은 우리나라에서도 많이 사용되는 소프트웨어이다. 현재 한국 주가 데이터를 Tradestation과 MetaStock에 제공해주는 데이터 벤 더회사도 있다. 22 한국에서는 Yestrader와 대신증권에서 개발한 사이보스트레이더가 있다. 사이 보스 트레이더는 미국의 우수 개방형 소프트웨어인 Tradestation, MetaStock 과 같이 강력하고, 유용한 개방형 소프트웨어 형태로 개발되었다. 사이보스 트레이더는 한국에서 오히려 Tradestation과 MetaStock 보다 더 강 력하고 유용한 소프트웨어인데, 그 이유는 두 소프트웨어를 이용할 경우 과다 한 비용과 한국 실정에 맞지 않는 부분이 있기 때문이다. 우선 시스템트레이딩을 하기 위해서 필요한 주변 환경을 살펴보자. 인터넷망으로 주문이 전달되기 때문에 주문의 안정성이 확보되어야 한다 과거 테스트를 하기 때문에 무결점 데이터가 제공되어야 하며, 실시간 데이 터도 안정적이어야 한다. 과거 테스트는 실제매매와 같은 환경으로 테스트 되어야 한다. 제도의 변화(증거금, 가격제한폭)도 즉각적으로 반영되어야 한다. 오류가 있을 경우, 즉각적인 수정이 가능해야 한다. 결국 안정된 네트워크, 소프트웨어의 안정성과 신속성, 발전 가능성이 가장 중요한 변수가 되는데 이 3가지를 위해서는 국내 환경에 잘 맞게 개발된 제품 이 우월성이 있을 것이다. 사이보스 트레이더는 다년간 HTS 시장에서 1등을 고수하는 프로그램인 사이보스 2004를 개발한 대신증권의 전산 노하우가 집적 되어 있는 소프트웨어로서 안정성 및 신속성이 탁월하다. 또한 대신경제연구소 금융공학실 전략 개발팀이 대신증권 전산 개발팀과 공동 개발을 하고 있어 소프트웨어의 성장성이 무궁무진하며, 전략개발 솔루션 및 웹 사이트 운영을 통해 고객 컨설팅이 유기적으로 잘 구성되어 있다. 그러면 외국 소프트웨어의 한국 시장에 부적합한 부분을 한 번 점검해보자. 우선 MetaStock의 경우는 사용자 언어를 사용하기는 편리한 형태지만, 전문적이고 세밀한 전략을 구 사하기에는 한계가 있다. 하나의 봉에서는 다수의 진입이나 퇴출을 할 수가 없어 전략 구사가 제한적 이다. 초기 자본금을 100,000원 이상으로 설정할 수가 없어 한국 실정에서는 정 확한 과거 테스트를 할 수가 없다. 자산관리, 위험관리 등이 시스템 트레이딩의 핵심 요소인데 이러한 전략을 사용할 수 가 없다(추가로 소프트웨어를 구입해야 함). 소프트웨어 가격이 비쌀 뿐만 아니라, 데이터 사용료를 지불해야 한다. 다음으로 Tradestation의 경우는 다음과 같은 문제점이 있다. 토요일을 자동으로 제어하여 한국 주가를 과거 테스트를 할 경우, 토요일을 누락한 데이터(98년 12월 이전에는 토요일 장이 있었음)를 이용해야 하기 때문에 테스트 결과가 정확하지 못한 결정적인 문제점을 가지고 있다. 수수료 및 슬리피지(slippage) 반영이 미국식으로, 한국 현실에 맞지 않다. 수수료 및 슬리피지는 시스템 평가 시 상당히 큰 영향을 주는 부분이다. 이 부분을 포함하지 못하는 경우에는 잘못된 평가를 할 가능성이 커진다. 데이터의 정확도(유실, 손실)가 보장되지 않는다. Tradestation 2000i는 더 이상 업그레이드가 안 된다. 현재 7.0 온라인 버 전으로 전환되었다. 소프트웨어 가격이 비쌀 뿐만 아니라, 데이터 사용료를 지불해야 한다. 이러한 다양한 문제점을 가지고 있기 때문에 검증된 소프트웨어인 사이보스 트레이더를 사용하기를 권장한다. 사이보스 트레이더는 현재 사이보스 2004 고객이면 누구나 사용할 수 있는 소프트웨어로서 구입비용이나 데이터 사용료 가 전혀 필요 없다. 24 <그림 1-15> 사이보스 트레이더 (3) 데이터(Data) 시스템 트레이딩을 하기 위한 가장 기초적인 준비물이 데이터이며, 데이터의 정확도가 기본이라 할 수 있다. 시스템 트레이딩에서는 다양한 시계열 데이터 를 요구한다. 심지어 매매 동향도 시계열 데이터로 사용할 수 있다. 광범위한 개념으로 계량화 할 수 있는 전략은 “언어로 구현할 수 있는 모든 데이터”가 될 수 있다. 경제 동향 데이터, 기업 재무 데이터, 통계적 모델링 등 금융시장에 영향을 주는 모든 것이 전략으로 사용된다. 전략으로 사용할 수 없는 것을 찾는 것이 좀더 빠른 이해가 될 것이다. “내일 A 기업이 실적을 발표하는데 새로운 사업이 성공해서 실적이 엄청 좋아진다더 라” “ 내일 금융 규제가 완화가 발표되는데 그러면 주가에 긍정적인 영향을 줄 것이다” 이러한 정보 사항은 계량화 할 수 없으며, 특히 미국 테러와 같은 돌발 상황 및 Open Gap의 원인 등도 계량화 할 수 없는 부분이다. 협의의 개념으로는 “금융시장 수급에 영향을 주는 데이터”로 정의 할 수 있으 며, 특히 기술적 분석이 가능한 데이터”로 다음과 같은 데이터를 말한다 주가(시가, 고가, 저가, 종가), 지수 거래량, 선물 미결제 약정 매매 동향(일반, 기관, 외국인 매매 동향 등) 체결 매수, 매수 거래량, 체결 매도, 매도 거래량 등 호가, 호가 잔량 등 신고가, 신저가, 상한가 종목 수 등 시장 판단 변수 비 연속적인 event 분석(공시 등) Î 시장 심리 지표에서 사용됨 대부분의 시스템 트레이딩 전략은 가격과 거래량을 이용한다. 그 외 시장 수 급과 시장 참여자에 관련된 항목들은 센티멘트지표(sentiment indicator)라 하는데, 이런 지표를 이용한 시스템도 유용하게 사용된다. 최근에 자사주 매 입, 증자 결정 등과 같은 비연속적인 공시 정보도 자동 시스템 매매에 일환으 로 사용되고 있다 우선 연속적인 시계열 데이터 중 가격 데이터에 한정해서 생각해보기로 하자. 첫째는 제공되는 데이터에 따라 시스템 트레이딩의 결과는 달라진다는 것이다. 예를 들어 MetaStock과 Tradestation을 이용해서 똑같은 전략을 적용하더라도 분석 결과는 제공되는 데이터의 차이로 인하여 달라진다. 따라서 시스템 트레 이딩을 하기 위해서 하나의 소프트웨어를 선택하였다면, 지속적으로 그 소프 트웨어를 사용해야 한다. 둘째는 외부 요인으로 인한 시계열 데이터의 왜곡 현상은 수정해야 한다. 시 장 수급의 변화에 따른 주가 변동을 제외한, 재무구조의 변화(감자, 합병 및 권리락, 배당락 등)와 같은 외부 요인으로 발생하는 주가 변화는 수정하여 시 스템 트레이딩에 적용해야 정확한 결과를 분석할 수 있다. 26 (4) 수정데이터 1) 현물 주가데이터 일반적으로 수정 배율을 이용해서 과거 주가를 수정한다. 사이보스 트레이더 에서는 일간, 주간, 월간에서도 수정 주가를 바로 적용하여 분석할 수 있게 구성되어 있다. 따라서 수정주가 차트를 이용한 매매 전략도 정확하게 분석 사용할 수 있다. <그림 1-16> 삼성전자 수정 주가 2) 선물(Futures) 지수데이터 3월, 6월, 9월, 12월 선물 만기일 때마다 최근월물과 차근월물간에 괴리(gap) 가 발생한다. 이를 수정한(gap adjusted) 선물지수를 연결선물지수 (continuous futures)라 하고, 수정하지 않고 최근월물만 단순 연결(gap 수정 하지 않음)한 지수를 근월물 지수(nearest futures)라 한다. 연결선물지수를 만드는 방법은 다양하다. 사이보스 트레이더에서는 만기 하루 전 기준으로 차근월물과 최근월물 지수의 차 값을 과거 주가에 더하거나 빼서 계산한다. 일간일 경우에는 연결선물지수를 사용한다. 분간일 경우에는 현재 개발 중이다. 이 책에 제공되는 전략의 과거 테스트는 연결선물지수 일간 및 분간 차트를 이용한다. <그림 1-17> 연결선물지수(일간) 이제 모든 준비가 다 되었다. 본격적인 사이보스 트레이더를 이용해서 시스템 트 레이딩을 하는 방법 및 좀더 구체적인 시스템 트레이딩 실체에 대해서 알아보자. 28 제 2 장 사이보스 트레이더를 이용한 시스템 트레이딩 투자의 핵심 원칙: 모든 투자 의사 결정은 진입 시점에서 (Trading As a Business) 이 장에서는 이제 구체적으로 시스템을 작성하는 방법과 사이보스 트레이더를 이용한 과거 테스트(back test, simulation), 실전매매 방법 및 자동 주문 방 법, 주요 평가 항목 및 최적화 과정에 대해서 설명하기로 하겠다. 세부사항은 다음과 같다. 1. 사이보스 트레이더 따라하기 2. CT(CybosTrader, 이하 CT)세부기능: CT기능 위주 설명 3. CT 주문 유형: Atmarket, Atstop, Atlimit 주문 등을 설명 4. 시스템 트레이딩 전략의 구성: 시스템 트레이딩의 논리적 설명 5. 시스템 트레이딩의 개발 준비 단계: 논리적 설명 6. 시스템 트레이딩 개발 과정: 논리적 설명 7. 전략 평가 및 최적화(기초): 논리적 설명 8. CT를 이용한 실전매매: 실전매매 방법에 대한 설명 우선 사이보스 트레이더를 이용해서 과거 테스트를 하는 기초적인 방법과 시 스템 트레이딩과 관련된 CT 화면 및 기능에 대하여 알아보자. 1. 사이보스 트레이더 따라하기 (1) 사이보스 트레이더 구동하기 사이보스 트레이더를 구동하는 방법은 2가지로서 대신증권 사이보스2004에서 플러그인 방식으로 구동하는 것과 사이보스 트레이더만을 독립적으로 구동하 는 방법이다. 1) 플러그인 구동 사이보스2004와 사이보스 트레이더를 설치하면 두 개의 아이콘이 바탕화면에 생성된다. 플러그인 구동은 사이보스2004아이콘을 더블 클릭하면 <그림 2-1> 과 같은 접속화면이 생기게 되며, 사이보스2004를 선택하고 통신id와 통신비 밀번호를 입력한 후 구동하면 된다. <그림 0-1> 사이보스2004 아이콘과 구동화면 2 사이보스2004가 실행된 후 <그림 2-2>와 같이 [설정]-[Cybos플러그인][CybosTrader]를 클릭하면 플러그인 구동이 완료된다. <그림 0-2> 사이보스 플러그인 구동 2) 독립모드 구동 독립모드 구동은 사이보스 트레이더만을 단독으로 실행 시키는 것으로서 <그 림 2-3>과 같이 아이콘을 더블 클릭하면 Online접속 여부를 확인하게 된다. 실제 매매를 한다거나 현재 시장의 상황을 보고자 할 경우는 [예(Y)]를 클릭 하고, 전략을 과거 테스트할 경우는 [아니오(N)]를 클릭하면 된다. <그림 0-3> 독립모드 구동 (2) 워크그룹과 차트생성 사이보스트레이더를 구동한 후 새로운 전략을 작성하기 위해서 사용자는 워크 그룹을 만들어야 한다. <그림 0-4> 새로 만들기 워크그룹을 만들려면[파일] Æ [새로 만들기]를 선택한다. <그림 0-5> 워크그룹 대화상자 그림과 같이 대화상자가 나타 나며 새 워크그룹 명을 입력하 고 [확인]을 선택한다. D<그림 0-6> 차트 마법사 차트마법사가 나타나면 종목코 드에 “10001”을 입력하고 [추 가]를 선택한 후 기간 및 주가 에 “분”, “10”을 입력하고 [확 인]을 선택한다. 종목을 계속 추가하면 4개까지 동시에 사용할 수 있다. 4 <그림 0-7> 워크그룹과 차트생성 그러면 새로운 워크그룹과 차트가 생성되어 시스템 트 레이딩을 하기 위한 기본준 비가 되었다. (3) 시스템 트레이딩 편집창 사용하기 생성된 워크그룹과 차트에 전략, 신호, 지표 등을 적용하기 위해 코딩이 필요 하다. 이것을 수행하는 곳이 편집창이며 사용법은 다음과 같다. <그림 0-8> 시스템 트레이딩 편집 [시스템 트레이딩]Æ[시스템 트레이딩 편집]을 선택한다. <그림 0-9> 새로 작성 편집창이 실행되며 이때, 편집 창의 메뉴에서 [파일]Æ[새로 작성]을 선택한다. <그림 0-10> 새로 작성 대화창 새로 작성/열기 대화상자가 실행되며 만들고자 하는 영역 을 선택한 후 이름을 입력하고 [작성]을 선택한다. <그림 0-11> 전략작성 [전략]을 선택하였으므로 화 면의 오른쪽 중단에 전략식 을 작성할 수 있는 작업공간 이 생겼다. 전략식을 이곳에 작성하게 된다. <그림 0-12> 유효성 검증 6 유효성 검증 작업공간에 전략을 입력한 후 [검증]Æ[유효성검증]을 선택하거나 [F5]를 누 르면 입력한 수식의 문법적 오류를 검색하며, 저장까지 이루어 진다. (4) 시스템 트레이딩전략 적용 <그림 0-13> 전략적용 작성한 전략을 적용하기 위해 [시스템트레이 딩]Æ[시스템 트레이딩 적용]Æ[전략]을 선택 한다. <그림 0-14> 시스템트레이딩 적용 대화창 시스템트레이딩 적용 대화창 이 생성되며 [전략]탭을 선 택한 후 “tset1”을 이미 찾아 작성한 선택하고 [차트에 적용]을 클릭한다. <그림 0-15> 전략속성창 적용하고자 하는 전략의 특성에 맞게 필수적으로 보유해야 할 Bar수와 매매주문 계약수, 당일청산/진입금지 시간을 입력하고 [확인]을 선택하면 전략이 적용된다. (5) 시뮬레이션 보고서 <그림 0-16> 시뮬레이션 보고서 확인 8 전략이 적용된 결과를 확인 하려면 [시스템 트레이 딩]Æ[시뮬레이션 보고서]를 선택한다. <그림 0-17> 시뮬레이션 보고서 활용 적용된 전략의 시뮬레이션 결과를 보여주는 보고서로서 종합보고서와 거래내역 및 각종 분석자료를 통해 정밀 한 검토가 가능하도록 구성 되어 있다. 2. CT세부기능 시스템 트레이딩 전략을 만드는 과정은 과거 테스트를 통한 분석과 평가가 기 초가 된다. 이러한 과정을 수행하기 위해서는 CT를 잘 사용할 수 있어야 한다. CT관련 책자는 기초적인 사용법을 소개하는 “CybosTrader”와 언어의 활용에 대한 “알기 쉬운 사이보스 트레이더 활용법”이 있다. 이 두 권의 책은 대신증 권에 계좌를 개설한 고객에게 무료로 배포된다. 또한 사이보스 트레이더 웹 사이트에서도 두 권의 책자를 인터넷에서 바로 볼 수도 있으며, 다운로드도 가능하다. <그림 0-18> 사이보스 트레이더 웹 사이트 주) http://power2.daishin.co.kr/Trader/ 우선 전략을 작성하고, 과거 테스트와 자동주문을 위해 다음과 같은 기능을 세부적으로 알아야 한다. 10 시스템 트레이딩 편집기(편집, 적용, 관리) 내보내기(import), 가져오기(export), 암호화 기능 시뮬레이션 보고서 전략 변수 최적화 보고서 전략 속성창 적용법 주문의 종류 모니터링 윈도우 자동 주문 설정 방법 <그림 0-19> CT 화면 시뮬레이션 보고서 차트 패드 시스템트레이딩 편집기 워크그룹 변수 최적화 보고서 사이보스트레이더는 <그림 2-19>와 같이 매매대상 종목의 가격과 기술적 지표 들을 표시한 ‘차트패드’와 적용할 전략 등을 작성/저장하는 ‘시스템 트레이딩 편집기’, 적용된 전략의 성과를 측정한 ‘시뮬레이션 보고서’, 전략에 사용된 변수의 최적조합을 검색하는 ‘변수최적화 보고서’로 이루어진다. (1) 워크그룹과 차트 사용자의 작업은 워크그룹(Workgroup)에서 이루어지며 동시에 4개의 워크그룹 을 사용할 수 있고, 하나의 워크그룹에 4개의 차트를 생성할 수 있으므로 4*4 = 16가지의 종목과 전략을 동시에 사용할 수 있다. (2) 전략 작성: 시스템 트레이딩 편집기 전략을 작성하거나 새로운 지표들을 만들 수 있는 공간으로서 강력한 사이보 스 트레이더 언어(이하 CTL)를 이용해서 작성한다. <그림 0-20> 시스템 트레이딩 편집기 저장 및 유효성 검증(F5) 다양한 영역 작성창 변수 우선 영역을 보면 사용자 함수 영역, 지표 영역, 신호 영역, 강조 영역, 추세 영역, 전략 영역으로 구분된다. 1) 사용자 함수 영역: 모든 영역에서 사용할 수 있는 사용자 함수를 작성 하는 영역이다. 따라서 공통적으로 많이 사용되는 부분은 여기서 작 성해서 나머지 영역에서 불러서 사용한다. 2) 지표 영역: 지표를 만들어서 사용할 수 있는 영역이다. 3) 신호 영역: 차트상에 표시할 수 있는 영역으로서 전략 개발 시, 가장 많이 사용되는 영역이다. 예를 들어 진입 시점, 청산 시점 등을 차트 에 표시할 수 있다. 4) 강조 영역: 조건에 따라 주가의 색깔을 바꾸어 표현할 수 있는 영역이다. 5) 추세 영역: 조건에 따라 상승, 하락, 횡보 추세를 수직선 등으로 표현 할 수 있는 영역이다. 12 6) 전략 영역: 전략을 만들 수 있는 영역이다. 작성된 전략, 지표, 신호 등은 [저장]과 [유효성검증]과정을 거쳐야 한다. 단 축키로는 [F5] 키를 이용하면 된다. 유효성 검증이 안된 전략은 차트에 적용 할 수 없다는 것을 명심하자. 새로 만들거나 수정할 경우, 유효성검증(F5)을 필히 해야 한다. CT에서는 만들어진 전략에 대해 암호화 작업을 하거나, 전략을 타인과 공유하 기 위한 [내보내기]나, [가져오기]가 가능하다. 방법은 시스템 트레이딩 편집 기에서 [편집] Æ [비밀번호 설정 및 해제] 와 [가져오기/내보내기]를 이용하 면 된다. 참고로 CT에 작성한 파일을 내보내거나 가져올 때의 확장자는 “…….cts” 가 된다. 언어의 기본 구조는 다음과 같은 구조를 가지고 있다 <수식 0-1> CT 언어 기본 구조 If 조건문 then Call 실행문 End if 언어에 대한 자세한 공부는 “알기 쉬운 사이보스 트레이더 활용법”을 참조하 기 바란다. (3) 차트에 적용 차트에 신호, 지표, 전략 등을 한번에 적용할 수 있는 구조로 되어 있다. <그림 0-21> 차트에 적용 매매 전략 매매 시점 및 청산 시점을 표시한 신호 수익 곡선 지표 차트에 적용과정 중에서 가장 신경을 써서 적용해야 할 부분은, 전략 속성창 을 설정하는 부분이다. <그림 0-22> 전략 속성창 14 전략 속성 창에는 입력 변수, 전략, 비용, 퇴출, 기본 설정 부분으로 구분되 는데 이중 기본 설정과 비용 부분은 필히 설정을 해주어야 한다. 다시 적용할 경우에도 잘 설정 되었는지를 확인해야 하는 부분이다. 1) 비용 비용은 과거 테스트를 하였을 경우, 필히 설정 해야 하는 부분이다. 원래 과 거 테스트가 실제 상황과 유사하게 설정되어 있어야 정확한 평가가 가능하기 때문이다. 비용은 두 가지로 구분된다. 수수료와 슬리피지 (slippage) 이다. 과거 테스트를 할 때 비용(수수료+슬리피지)을 꼭 설정하고, 테스트를 해야 한다. ①수수료 기본 설정을 선택하게 되면 현재의 대신증권 수수료 체계를 자동으로 사용할 수 있게 된다. 만약 수수료가 다른 형태로 적용이 가능하다면 수동 설정으로 선택하여 값을 입력하면 된다. 수수료를 빼고 과거 테스트를 하면 수익이 좋 아질 것이다. 하지만 이런 테스트를 통한 전략은 실전에서 수익을 보장할 수 가 없을 것이다. 더욱이 매매 건수가 많을 경우, 수수료 때문에 수익 구조가 완전히 달라지게 되므로 주의하기 바란다, ②슬리피지 (Slippage) 슬리피지란 실제 매매 가격과 주문 가격의 차이를 말한다. 예를 들어 시스템 에서 선물을 95 포인트에 매수 주문을 한다고 하였을 경우 실제로는 95.05에 체결될 가능성 있다. 이 차이를 슬리피지라 한다. 슬리피지를 시뮬레이션 결과에 반영하는 방법은 두 가지로 구분되는데 비용으 로 처리하는 방법과 가격에 반영하는 방법이 있다. 가. 비용으로 처리하는 방법은 진입이나 퇴출의 가격에는 영향을 주지 않는 것으 로 시뮬레이션 한 후 사용자가 지정한 슬리피지만큼을 총손익에서 비용으로 차감하는 방법이다. 나. 가격에 반영하는 방법은 사용자가 지정한 슬리피지만큼을 진입과 퇴출가격에 불리하게 포함시켜 매매한 것으로 시뮬레이션 결과를 산출하는 것이다. 본서에서는 위의 두 방법 중 가격에 반영한 결과를 기준으로 설명되었음을 밝 혀둔다. 슬리피지를 설정하지 않고 테스트를 할 경우, 실제로는 수익이 발생하지 않는 시스템이 과거 테스트에서는 수익이 발생하는 것으로 잘못 판단하는 경우가 발생하게 된다. 따라서 꼭 과거 테스트에서 사용해야 하는 항목이다. 이 슬리피지는 현물 시장에서는 최소 0.3%를 설정하여 사용하는 것이 바람직 하고, 선물에서 1틱(tick, 0.05포인트) 이상을 사용하는 것이 바람직하다. 슬 리피지를 많이 주고도 수익이 난다면 그만큼 훌륭한 전략이다. 선물일 경우 설정할 때, 최소 변동 단위를 선택하고, 1을 주면 0.05 포인트의 슬리피지를 주는 것이 된다(만약 2를 입력하면 0.1 포인트, <그림 2-22>는 선물 1틱을 슬 리피지로 설정한 화면임). 슬리피지를 사용해야 하는 또 하나의 이유는 전략 진입 가격이 호가와 일치하 지 않을 수 있기 때문이다. 예를 들어 95.07이 진입 가격이라고 계산되었을 경우 선물 호가가 95.05, 95.10으로 형성되기 때문에 95.10 포인트가 되어야 주문이 발생한다. 따라서 가상 매매 리포트에서는 95.07로 계산되나 실제로는 95.10 이 진입 가격이 되어 가상매매 결과가 수익이 증가하는 오류가 발생하게 된다. 따라서 슬리피지를 줌으로서 이러한 오류로 인한 수익 과대계상을 보정할 수 있게 된다. 16 2) 기본 설정 기본 설정에서는 주수 관련, 주문 관련, 진입 제어 관련 항목들이 있다. 이중 에서 제일 먼저 고려해야 할 항목은 [필수적으로 보유해야 할 바 수 (maxbarback)] 이다. 이 항목은 워크그룹에 열린 차트의 처음부터 어느 정도까지는 매매가 불가능 하게 하기 위한 설정이다. 예를 들어 20일 이동평균선을 이용한 매매 전략이 라면 로딩된 처음 데이터부터 20개의 데이터는 이동평균선이 존재하지 않을 것이다. 따라서 [필수적으로 보유해야 할 바수] = 20으로 설정하여 20개 봉 이후부터 매매 전략이 적용되도록 하는 것이다. <그림 0-23> 필수적으로 보유해야 할 바 수 = 20 주) 20 일 이동평균선 교차 시 매수, 매도 전략. 로딩된 데이터 처음 부분 만약 100일 이동평균선일 경우에는 필수적으로 보유해야 할 바 수를 100 이상 으로 설정하면 된다. 이 값은 앞으로 최적화 과정에도 영향을 주기 때문에 여유 있게 설정하는 것 이 바람직하다. 예를 들어 이동평균선 교차 전략을 개발하고 변수를 10~100일 까지의 변수를 사용해서 최적화를 한다면 [필수적으로 보유해야 할 바 수]를 100으로 설정하면 될 것이다. 이렇게 설정하게 되면 모든 변수가 100개의 봉 이후부터 테스트 되고, 10일 이동평균선이나 100일 이동평균선이 모두 테스트 되는 시점이 동일하게 되어 테스트 결과의 일관성을 얻을 수 있게 된다. 그 다음으로 매매 주 수인데, 처음 테스트는 단위 계약당 수익과 위험을 분석 하는 과정이므로 고정 주 수에서 1주(계약)를 사용하면 된다. 주문 설정은 [시험 적용]이 과거 테스트에서 사용하는 방법이 된다. 마지막으로 당일 청산과 당일 진입 금지가 있는데, 분봉을 이용할 경우 사용 하게 된다. 당일 청산은 종가 청산을 말하며, 시간을 설정하게 되면 그 시간 대에 청산하게끔 작동한다. CT 에서 주의할 점은 “동시호가”에 주문을 낼 수 가 없다는 것이다. 따라서 당일 청산의 경우 현물 시장은 14:49분, 선물 시장 은 15:04분을 이용해야 한다. 당일 진입 금지는 해당 시간 이후에 진입을 금지하는 경우인데, 앞서 설명한 것처럼 동시 호가를 포함한 종가에는 주문을 낼 수 가 없다. 만약 과거 테스 트에서 주문이 나간 것으로 계산된다면 그것은 오류일 것이다. 따라서 분봉에 서 현물 시장에서는 14:50 분, 선물 시장에서는 15:05분으로 설정하면 될 것 이다. 앞으로 데이트레이딩 전략을 소개하는 과정에서 자세히 설명할 것이다. (4) 시뮬레이션 보고서 <그림2-24>는 전략을 적용하여 산출된 결과를 보여주는 화면이다. 간단한 분석에서부터 전문적인 분석이 가능하도록 구성되었다. 또한 항목을 줄여서 간단하게 구성할 수 있어 자유자재로 변경이 가능하다. 간단히 구성을 살펴보면 종합 보고서에서는 주요 평가 항목들이 있으며 거래 내역에서는 상세 거래 내역이, 전략 분석에서는 전문적인 분석 내용이 포함되 18 어 있다. 자산 분석에서는 수익곡선을 분석하는 항목이 있으며 기간 분석에서는 월별, 주별 수익 등 기간별 수익을 상세히 분석해 준다. 시간 분석에서는 시장 참여 기간 및 이익 발생 시간 등에 대한 분석을 해주며 그래프에서는 수익 곡선, 자산잠식곡선(Underwater Equity Curve), 최대 미실현 손실(Maximum Adverse Excursion) 등과 같은 핵심적인 그래프 분석이 가능하게 구성되어 있다. <그림 0-24> 시뮬레이션 보고서 앞으로 간단한 평가 부분 및 수익 곡선 분석은 이 장에서, 자세하고 전문적인 분석은 4장 이후부터 다루기로 한다, (5) 변수 최적화 보고서 <그림 0-25> 변수 최적화 <그림2-25>는 변수 최적화 과정을 보여주는 화면이다. 우선 변수 최적화는 [전략 속성] 창에서 [입력변수]를 선택한 후, 최적화 하고 싶은 변수를 더블 클릭하면 [변수값변경]입력창이 나타난다. 이때 [최적화] 박스를 체크하여 초기치, 최종치, 증가치를 활성화시켜 원하는 값을 입력하고, 확인버튼을 클릭하면 변수를 자동으로 변화시키며 최적화가 실행되고, <그림 2-26>과 같이 변수최적화 보고서를 통해 결과를 확인할 수 있다. 20 <그림 0-26> 변수 최적화 보고서 변수 최적화 보고서에서는 보여줄 결과를 [필드편집]메뉴를 통해 임의 선택할 수 있고, 조건을 주어 필터링된 항목만 표시할 수도 있다. 또한 엑셀 파일로 저장할 수도 있다. 또한 강력한 그래프 기능을 가지고 있다. 3차원 차트, Range차트, Point차트 를 사용해서 최적의 변수를 쉽게 찾을 수 있다. 시스템 트레이딩을 하기 위해서 사용되는 CT 화면 및 기능적인 측면을 간단히 알아 보았다. 앞으로 이런 화면들을 이용해서 다양한 분석과 전략들을 만들어 갈 것이다. 그러면 이제 사이보스 트레이더에서 사용하는 주문 유형에 대해서 알아보기로 하자. 3. CT 주문 유형 CT에서 주문을 내는 방법은 과거 테스트나 실전 매매에서도 동일하게 적용되 는 데 우선 “사자”, “팔자”부터 알아보자. CT에서는 사자(매수)와 팔자(매도)가 다소 다르다. 우선 현물 시장의 경우 주식을 사는 것은 매수(buy)이다. 하지만 주식을 파는 것은 실제 매매에서는 매도인데, CT에서는 매수 청산(exitlong)이 된다. 신용거래를 제외하면 현물 에서는 매수 Æ 매수 청산 밖에 없다. 반면 선물/옵션시장에서는 매수청산과 신규매도가 구분된다. 즉 신규 매수는 buy 가 되고 매수 포지션을 청산하는 경우에는 매수 청산(Exitlong)이 되며, 신규로 매도를 하는 경우에는 sell 이 되며 매도 포지션을 청산하는 경우에는 매도 청산(Exitshort)이 된다. <표 0-1> 주문 방법 시장 구분 실제 시장 CT 주문 방법 현물 시장 사자, 매수 팔자, 매도 선물/옵션 시장 사자, 매수 팔자, 매도 매수 (buy) 매수 청산(Exitlong) 매수 (buy) 매수 청산(Exitlong) 매도(sell) 매도 청산(Exitshort) CT 주문 식 작성 법 Call buy(주문 명칭, 주문 유형, 계약수, 주문가격) Æ Atstop, Atlimit 경우 Call buy(주문 명칭, 주문 유형, 계약수) Æ atmarket, onclose 경우 Call sell(주문 명칭, 주문 유형, 계약수, 주문가격) Æ Atstop, Atlimit 경우 Call sell(주문 명칭, 주문 유형, 계약수) Æ atmarket, onclose 경우 Call Exitlong(주문 명칭, 주문 유형, 주문가격) Æ Atstop, Atlimit 경우 Call Exitlong(주문 명칭, 주문 유형) Æ atmarket, onclose 경우 Call Exitshort(주문 명칭, 주문 유형, 주문가격) Æ Atstop, Atlimit 경우 Call Exitshort(주문 명칭, 주문 유형) Æ atmarket, onclose 경우 22 예제 Call buy(“매수”, Atstop, def, high) Æ 고가를 돌파하면 def(default)= 속 성 계약수로 매수 Call buy(“매수”, atmarket, def)Æ 조건을 만족하면 그 다음봉 시가에 매수 Call sell(“매도”, Atstop, def, low) Æ 저가를 이탈하면 def(default)= 속 성 계약수로 매도 Call sell(“매도”, atmarket, def) Æ 조건을 만족하면 그 다음봉 시가에 매도 Call Exitlong(“매수 청산”, Atstop, low) Æ 저가를 이탈하면 매수 청산 Call Exitlong(“매수청산”, atmarket) Æ 조건을 만족하면 그 다음봉 시가에 매수 청산 Call Exitshort(“매도청산”, Atstop, high) Æ 고가를 돌파하면 매도 청산 Call Exitshort(“매도 청산”, atmarket) Æ 조건을 만족하면 그 다음봉 시가 에 매도 청산 ★ 매수, 매도와 매수청산, 매도 청산의 차이점은 계약수에 있다. 매수청산, 매도 청산은 계약수 표시가 없다. 즉 모든 포지션을 일괄 청산 한다. ★ atmarket, onclose 매수와 매도의 경우 계약수(def)를 생략할 수도 있다. 하지만 Atstop, Atlimit 매수, 매도는 계약수를 생략할 수 없다. Call buy(“매수”, atmarket) Æ (O) Call buy(“매수”, Atstop, high)Æ (X) Î Call buy(“매수”, Atstop, def, high) Æ (O) ★ 계약수(=def)에 해당하는 부분은 def를 사용하면 전략 속성창에서의 [기본 설정] Æ [매매 주 수 /금액 기본 설정]에 설정된 계약수로 결정된다. 하지만 실제 숫자 등을 사용할 경우, 속성창은 무시되고 실제 사용된 계약수로 작용한다. Call buy(“매수”, Atstop, 1, high) Æ (O): 1 계약으로 매수 Call buy(“매수”, Atstop, 2, high) Æ (O): 2 계약으로 매수 주문유형은 <표 2-2>같은 규칙으로 사용되므로 이 규칙들을 꼭 기억하기 바란 다. 그러면 앞에서 잠시 언급된 주문 유형인 Atstop, Atmarket 등에 대해서 알아보자. (1) Onclose, Atmarket <수식 0-2> Onclose 예제 If crossup(close, mov(close, 20, s)) Then ’종가가 20일 단순 이동평균선을 상향돌파하면 Call buy("매수", onclose)’그 봉 종가에 매수 하라 End If If crossdn(close, mov(close, 20, s)) Then ’종가가 20일 단순이동평균선을 하향돌파하면 Call sell("매도", onclose)‘ 그 봉 종가에 매도 하라 End If <수식 0-3> Atmarket 예제 If crossup(close, mov(close, 20, s)) Then ‘종가가 20일 단순 이동평균선을 상향돌파하면 Call buy("매수", atmarket) ‘ 그 다음봉 시가에 매수 하라 End If If crossdn(close, mov(close, 20, s)) Then ‘종가가 20일 단순 이동평균선을 하향돌파하면 Call sell("매도", atmarket) ‘ 그 다음봉 시가에 매도 하라 End If Onclose는 그 봉 종가에 매매하게 되며, Atmarket은 그 다음봉 시가에 시장가 주문(market order)을 내라는 의미이다. 우선 모든 주문(Atstop, Atlimit 포 함)은 시장가 주문이라는 것을 기억해두자. 그 이유는 시스템 트레이딩이란 조건이 만족하여 신호가 발생하면, 지체 없이 진입하거나 청산하는 “실현의 원칙”을 따르기 때문이다. 24 <그림 2-27>의 왼쪽 그림은 <수식 2-2>가 적용된 그림이며, 오른쪽 그림은 < 수식 2-3>이 적용된 그림이다. 왼쪽 그림을 보면 과거 테스트에서 돌파시점 종가에 매수, 매도한 것으로 표기되며 오른쪽 그림은 돌파된 뒤 그 다음 봉 시가에 진입한 것으로 표시되고 있다. 여기서 중요한 것은 Onclose 주문은 실 전매매에서는 Atmarket 주문과 동일하게 작동한다는 것이다. 왜냐하면 그 봉 종가에 매매를 할 수 없기 때문이다. 종가에 매수하기 위해서 는 종가라는 것을 인식해야 하는데 그 시점은 종가 형성되고 난 뒤 시점이 된 다. 따라서 과거 테스트는 종가에 매수, 매도 한 것처럼 표기되며 계산이 되 나, 실제 매매에서는 그 다음 봉 시가가 형성되고 시장가로 주문이 나간다. 따라서 실제 매매에서는 Onclose 주문과 Atmarket 주문은 동일하다. <그림 0-27> Onclose, Atmarket 적용 Onclose Atmarket 주) 연결선물지수 일간차트 실제 매매에서는 onclose주문과 atmarket주문은 동일하다. 따라서 Onclose로 주문식을 작성하는 방법은 과거 테스트나 실제 매매에서 사 용하기 부적합하므로, Atmarket 주문만을 사용하기를 권장한다. 또 하나 고려해야 할 부분이 있는데 주로 위와 같이 기술적 지표를 이용한 매 매일 경우에 종가가 형성되기 전에 주문이 나갈 수 있도록 해달라는 요청이 있다. 하지만 기술적 지표들은 주로 종가를 사용하는 식으로 구성되어 있어 실제로 종가 형성되어야 돌파 여부 등이 확인 된다. 만약에 현재 봉 중간에 돌파를 인식하게 되면 돌파 Æ 취소 Æ 돌파 Æ 취소 가 반복될 가능성이 커 실제 주문이 불가능하다는 것도 한 이유가 된다. 따라서 가장 기초적인 전략식은 “조건이 만족 된 다음, 그 다음 봉 시가에 무 조건 진입”하는 전략이 될 것이다. (2) Atstop, Atlimit Atstop과 Atlimit 주문 유형은 Atmarket의 현실성을 보완한 주문 유형이다. 즉 “그 봉 내에 진입” 하는 즉시성을 가지고 있는 유용한 전략이다. <표 0-2> Atstop과 Atlimit 주문 예 Atlimit 주문 Atstop 매수 높은 지정가격 이상이면 매수 낮은 지정가격 이하이면 매수 매도 낮은 지정가격 이하 이면 매도 높은 지정가격 이상이면 매도 매수 청산 낮은 지정가격 이하이면 매수청산 높은 지정가격 이상이면 매수청산 매도 청산 높은 지정 이상이면 매도청산 낮은 지정가격 이하이면 매도청산 26 예 매수의 경우 Atstop은 “일정가격(높은 지정가격)이 되면 매수하라”는 지정가 주문 형태이고 Atlimit 는 “일정가격(낮은 지정가격)이 되면 매수 하라” 라는 지정가 주문 형태이다. 역시 Atmarket, 0nclose와 마찬가지로 지정가에 만족 되면 시장가(market order) 주문이 된다. <수식 0-4> Atstop 예제 If close > mov(close, 20, s) Then ‘종가가 20일 단순이동평균선보다 크면 Call buy("매수", Atstop, def, high)‘ 고가를 상향 돌파하면 매수하라 End If If close< mov(close, 20, s) Then ‘종가가 20일 단순이동평균선 보다 작으면 Call sell("매도", Atstop, def, low) ‘ 저가를 하향 이탈하면 매도 하라 End If <수식 0-5> Atlimit 예제 If close> mov(close, 20, s) Then ‘종가가 20일 단순이동평균선보다 크면 Call buy("매수", Atlimit, def, low) ‘ 저가를 하향 이탈하면 매수 하라 End If If close < mov(close, 20, s) Then ‘종가가 20일 단순이동평균선보다 적으면 Call sell("매도", Atlimit, def, high) ‘ 고가를 상향 돌파하면 매도 하라 End If Atstop 과 Atlimit는 매수, 매도, 매수청산, 매도 청산에 따라서 사용 방법이 달라지게 된다. 이와 같은 규칙을 잘 이해하고 사용해야 한다. 잘못 사용할 경우에는 원하지 않는 주문이 발생할 가능성이 있기 때문이다. 예제를 통해 Atstop과 Atlimit주문의 차이를 확인해 보자. <그림 0-28> Atstop과 Atlimit Atstop Atlimit <그림 2-28>의 왼쪽 그림은 <수식 2-4>를 적용한 것이고 오른쪽 그림은 <수식 2-5>를 적용한 그림이다. 우선 왼쪽 그림을 보면 종가가 이동평균선 보다 작 아진 뒤 저가를 하향 이탈하는 그 가격에서 매도 주문이 발생하였고, 종가 이 동평균선 보다 커진 뒤 고가를 상향돌파 하는 시점에서 매수 주문이 발생하였 다. 따라서 종가가 이동평균선 보다 커진 상태에서 고가를 돌파하지 못하면 주문 신호가 발생하지 않는 다는 사실을 기억해 두자. 오른쪽 그림에서는 종가가 이동평균선 보다 작은 상태에서 고가를 상향 돌파 하는 시점에 바로 매도 주문이 발생하였으며, 종가가 이동평균선 보다 커진 상태에서 저가를 하향 이탈하는 시점에서 매수 주문이 발생하였다. 이 경우에 는 종가가 이동평균선 보다 큰 상태가 5일이나 경과 한 뒤에 발생하였다. 이와 같이 Atstop, Atlimit 주문형태는 Atmarket 주문처럼 조건을 만족하면 무조건 주문이 발생하는 것이 아니라, 조건이 만족하더라도 일정 가격을 돌파하거나(Atstop), 조정을 받는 가격대(Atlimit)에서 주문이 발생하는 유용한 주문 유형이다. 이 책에서도 대부분의 주문 유형이 Atstop과 Atlimit 형태로 구성되어있다. 왜냐하면 Atmarket보다 속임수(whipsaw)매매를 제어할 수 있어, 전략의 성과 가 향상되기 때문이다. 28 (3) 복수 주문 매수, 매도, 매수 청산, 매도 청산을 나열식으로 작성해서 표현하면, 가장 먼 저 만족하는 매매 조건으로 처리한다. 따라서 다수의 주문을 동시에 사용할 수 있는 구조가 된다. <수식 0-6> 복수 주문 If close> mov(close, 20, s) then Call buy(“매수”, Atstop, def, high) ‘ 종가가 20 이동평균보다 크면 ‘ 고가 돌파 매수 End if Call buy(“매수1”, Atstop, def, hhv(1, high, 20)) ’20 최고가 상향돌파 매수1 If close< mov(close, 20, s) then ‘ 종가가 20이동평균보다 작으면 Call sell(“매도”, Atstop, def, low) ‘ 저가 돌파 매도 End if Call sell(“매도1”, Atstop, def, llv(1,low, 20)) ‘ 20 최저가 하향돌파 매도 Call exitlong(“매수청산1”, Atstop, entrprice-0.1) ‘ 진입가-0.1에 매수 청산 Call exitshort(“매도청산”, Atstop, entrprice+0.1) ‘ 진입가 +0.1 에 매도 청산 Call exitlong(“매수청산1”, Atlimit, entrprice+0.2) ‘ 진입가 +0.2에 매수 청산 Call exitshort(“매도청산”, Atlimit, entrprice-0.2) ‘ 진입가 -0.2 에 매도 청산 이제 까지 CT를 이용한 과거 테스트의 적용 방법 및 CT 전략언어에서 사용하 는 주문유형에 대해 알아보았다. 기초적인 기능 부분으로서 전략을 개발하는 데 꼭 알아두어야 하는 내용이다. 그러면 이제부터 본격적으로 시스템 트레이딩에 대한 논리적인 접근을 시작해 보도록 하자. 그 첫 단계로 시스템 트레이딩 전략의 구성 요소부터 알아보기 로 하자. 4. 시스템 트레이딩 전략의 구성 시스템 트레이딩 전략, 즉 매매 전략은 다양한 의사 결정을 포함하게 된다. 언 제 매수하고, 몇 계약을 사고, 언제 청산할 것인가? 이다. 일반적으로 시스템 트레이딩을 처음 접하는 투자자는 다소 의아하게 생각되는 부분이 있는데, 그 부분은 언제 청산할 것인가를 진입하는 시점에서 왜 결정하느냐는 점일 것이다. 제 1장에서 설명했다시피 주관적인 매매 방법은 진입 이후 청산 시점이 상당 히 가변적이지만, 시스템 트레이딩은 그렇지 않다. 왜냐하면 모든 결정을 해 놓고 시장에 진입해야 정확한 위험 관리 및 자산 관리가 가능해지기 때문이다. 시스템 트레이딩은 진입 시점에서 모든 의사결정이 완결된다. Trading as a business 예를 들어 보자. 업종을 선정하여 창업할 때 이 제품을 만들어서 몇 개 팔면 이윤이 얼마가 될 것이다 등을 창업 시점에 생각하는 것과 같다. 모든 이익과 비용 계산은 창업 시점에서 계산되며, 수익이 비용보다 커야 비로소 창업이 되는 이치와 동일하다. 그러면 매매 의사결정에서 결정해야 할 요소는 무엇인 가? 간단하다. 3가지뿐이다. 진입방법(언제 사나?) 청산방법(언제 파나?) 자산관리(몇 계약(주)을 사나?) 제 4장부터 6장까지 위 3가지 요소에 대해 구체적으로 어떤 전략이 있는 지를 자세히 알아볼 것이다. 여기서는 기본 개념을 이해해 보도록 하자. 30 (1) 진입 방법(Entry) 무엇을 기준으로 언제 사느냐? 이다. 예를 들어 주가가 20일 이동평균선 보다 커 지면 매수한다. 오늘 갭이 발생하면 매수 한다 등의 다양한 기준 중에서 자신의 매매전략에 맞는 기준으로 시장에 진입하는 방법을 결정하는 것을 말한다. 구분 실제 시장 <표 0-3> 사이보스 트레이더 진입 및 청산 흐름도 현물시장 선물, 옵션 시장 매수 Æ 매도 Æ 매수 Æ 매도 매수 Æ 매도 Æ 매수 Æ 매도 사이보스 트레이더 매도는 매수 청산임 매수 Æ 매수 청산 Æ 매수 (buy) (exitlong) (buy) 매수는 매수와 매수 청산으로 매도는 매도와 매도 청산으로 매수Æ매수청산 Æ매도 Æ매도청산 매수 Æ매도주)Æ매도 청산Æ매수 매수(buy): 현재 포지션이 없는 경우는 해당 계약수 매수, 현재 포지션이 매도 인 경우는 매도 청산 이후 해당 계약수 매수 매도(sell): 현재 포지션이 없는 경우는 해당 계약수 매도, 현재 포지션이 매수 인 경우는 매수 청산 이후 해당 계약수 매도 매수 청산(exitlong): 현재 포지션이 매수일 경우에만, 기존 포지션 청산 매도 청산(exitshort): 현재 포지션이 매도일 경우에만, 기존 포지션 청산 주) 매수 후 매도주문을 내면, 매수청산이 된 후 신규로 매도 현물이나 선물 시장에서 잘 진입하는 것은 시스템 트레이딩에 아주 중요한 부 분이다. 좋은 가격에 진입할 수록 손실이 발생할 확률이 적고, 수익을 내고 청산 할 가능성이 커지기 때문이다. 잘 진입하는 방법은 상승 추세일 경우 매 수 시점을, 하락 추세일 경우 매도 시점을, 횡보 추세의 경우에는 고점 매도, 저점 매수 전략을 효과적으로 구사하는 것이다. 앞서 설명한 것처럼 현물 시장에서는 매수 만(신용거래를 제외할 경우) 가능 하고 선물, 옵션 시장에서는 매수, 매도가 모두 가능하다. 여기서는 매매 흐 름과 계약수와 관련돼 알아야 할 부분 위주로 설명한다. 앞서 설명한 것처럼 현물 시장에서 “주식을 판다”는 CT에서는 주식을 “매수청 산(exitlong) 한다.” 가 된다. 현물시장에서는 매도가 없어서 간단한 편이지 만 선물, 옵션시장에서는 신규 매도가 있어서 다소 복잡해진다. 선물, 옵션시장의 경우 실제 시장에서는 1계약 매수를 한 후, 1계약 매도를 하면 포지션이 없는 상태가 되며, 1계약 매수를 한 후 2계약 매도 주문을 하 면 1계약 매수 포지션이 청산 되고 신규 매도 포지션이 1계약 생기게 된다. CT 에서는 1 계약이 매수(buy)된 상태에서 매도하느냐, 매수 청산을 하느냐가 다르게 작동한다. 만약 1 계약 매수 이후 1계약 매도(sell)조건을 만족하면, 매수 포지션은 자동 으로 청산되고 1계약 신규 매도 포지션을 가지게 된다. 만약 2 계약 매도조건 을 만족하면 1계약 매수 포지션은 자동 청산 되고 2 계약 신규 매도 포지션을 가지게 된다. 반면, 1계약이 매수(buy) 된 상태에서 매수 청산(exitlong)조건을 만족하면 계약수와 관계 없이 모든 매수 포지션을 청산하여 포지션이 없는 상태가 된다. 만약 매수 청산 이후 신규 매도 포지션을 추가로 가지기 위해서는 신규 매도 를 해야 한다. 그리고 현재로는 하나의 전략 식에서 매수Æ 매수(추가 매수), 매도 Æ 매도 (추가 매도)는 불가능하다. 이런 형태를 실행하기 위해서는 전략을 따로 작성 하여 각각 적용하면 가능해진다. (2) 청산 방법(Exit) 앞서 설명한 부분 중에서 “청산”이란 단어가 붙어 있는 부분이다. 즉 매수청 산, 매도청산을 말한다. 청산은 두 가지로 구분된다. 손실을 최소화는 손절매 와 이익을 최대화하는 이익 보존 청산 방법이다. 시장에 진입한 이후 가격은 진입 가격에서 수익 증가 방향으로 움직이거나, 32 손실 증가 방향으로 움직인다. 이럴 경우 손실로 매매를 중단할 것인가, 아니 면 좀더 기다렸다가 수익으로 전환 되면 청산 할 것인가를 결정해야 한다. 그 리고 만약 수익이 발생한다면, 어느 정도까지 포지션을 가지고 갈 것인가를 결정해야 한다. 일반적으로 진입하는 것 보다. 시장에서 빠져 나오는 것이 더 힘들다. 왜냐하 면 인간의 감정(탐욕과 공포)이 계속해서 작용하여 상당 부분의 수익을 되돌 려 주고 청산한다든지, 손실폭이 더 커진 후에 청산하게 된다. 아니면 아예 청산을 못해서 현물 시장에서는 수년간 보유하는 경우가 발생하는 것이다. <그림 0-29> 진입 이후 주가 움직임 125 (%) n 120 o 115 110 p 105 100 95 q 90 r 85 80 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 주) 진입 이후 30 기간 동안의 수익률의 흐름 <그림 2-29>에서 보면 진입 이후 주가는 수익과 손실 구간으로 다양하게 움직 이게 된다. 이들 중 qr와 같이 손실구간으로 확장하는 경우도 있다. 따라서 손절매는 반드시 사용할 것을 권장한다. 사용을 안 할 경우, 자동으로 매매 포지션이 바뀌는 경우가 아니면 손실폭의 확대, 즉 위험 증가가 수반되기 때 문이다. 일부 시스템 트레이딩 전략 개발자들은 진입을 개발하는 것보다, 청산 전략을 개발하는데 더 많은 노력을 기울이라고 한다. 시스템의 효율성을 증가시키는 방법은 유용한 청산전략을 잘 사용하는 것이 해답이 될 수 있기 때문이다. 청산 전략를 적용하는 방법은 ‘전략 속성창”에서 선택하는 방법과 코딩을 하 는 방법이 있는데, 주로 코딩을 이용해서 다양한 청산 전략을 조합하는 방법 이 사용된다. (3) 자산관리(Money Management) <그림 0-30> 재 투자의 효과 50 (% ) 45 n 40 10% 수익을 10% 수익을 재 재 투자하였을 투자하였을 경우 경우 35 30 25 10%10% 수익을 재 투자하지 않았을 경우경우 수익을 재 투자하지 않았을 20 15 o 10 5 0 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 자산 관리는 진입과 청산이 완성되고 난 뒤에 적용하여 기하급수적인 수익 곡 선의 상승 (geometric growth)를 달성하기 위해서이다. <그림 2-30>는 매매마다 10% 수익이 발생하는 전략을 적용했을 때, 발생하는 수익을 전액 재투자하는 경우와 최초 투자금만 계속 투자하는 경우의 수익곡 선이다. 이론적인 그래프이지만, n처럼 재투자를 할 경우에는 기하급수적인 수익곡선 상승 효과가 발생하는 것을 알 수 있다. 34 어느 정도를 재투자 하는 것이 합리적인가를 포함하여 초기 자본금을 얼마로 가져갈 것인가를 결정하는 방법에 따라 시장에서 살아남느냐, 아니면 퇴출되 느냐가 결정된다. 따라서 이러한 결정을 하는 자산 관리 전략은 시스템 트레 이딩 전략에서 아주 중요한 부분을 차지하게 된다. 예를 들어 똑같은 전략을 2명의 투자자가 사용할 경우를 보자. 선물 1계약을 투자할 경우에 한 사람은 마진율 30%(1,500만원)의 자본으로 투자 전략을 수 립해서 매매를 하기로 하고, 다른 한 사람은 70% 마진율(3,500만원)로 투자 한다고 하자. 손실 매매가 연속적으로 발생하여 총 매매 대금의 15% 손실이 발생하였다고 하면, 100 포인트 * 50만원=5,000만원* 0.15= 750만원 손실이 된다. 그러나 30% 마진으로 투자하는 투자자는 750만원의 손실로 최소증거금인 1,500만원 이하가 되므로 <그림 2-31>처럼 더 이상 시장에 참여하지 못하는 상황이 된다. 거듭 강조하는 부분으로서 매매의 핵심 원칙은 수익이 우선이 아니고, 시장에 서 살아남는 게 우선이다. 그러기 위해서는 자산 관리의 중요성이 매우 커지 게 된다. <그림 0-31> 자산 관리 더 이상 매매할 수 없음 큰 수익 기회 상실 자산 관리 전략은 손절매와 밀접한 관계를 가진다. 시스템 트레이딩 시 투자 자가 직면하게 되는 위험은 크게 2가지로서 매매위험(한 건의 매매에서 단위 계약(주)수에 의해 실현 가능한 손실)과 자본위험(한 건의 매매에서 손실 발 생시 자본금 대비 감소금액)이다. 매매위험은 손절매로 관리가능하며, 자본위 험은 매매위험과 자산관리기법으로 관리할 수 있다. 따라서 매매위험과 자본 위험의 관계에 따라 몇 계약(주)을 사느냐가 결정된다. CT 에서는 코딩을 통해서 설정하는 방법과 전략 속성창에서 설정하는 방법이 있다. 우선 코딩을 통해서 계약수를 인위적으로 설정하는 방법을 간단하게 설 명하면 다음과 같다. <수식 0-7> CT 코딩으로 계약수를 제어하는 방법 call buy(“매수”, Atstop, 1, high) Æ 고가를 상향 돌파하면 1계약 매수 call buy(“매수”, Atstop, 10, high) Æ 고가를 상향 돌파하면 10계약 매수 call buy(“매수”, Atstop, def, high) Æ 고가를 상향 돌파하면 속성창 계약수 매수 Î 청산에선 청산 계약수를 제어할 수 없음. 일괄 청산 기준임 이제부터는 시스템 트레이딩 전략을 만들어 가는 과정에 대해서 알아보기로 하자. 5. 시스템 트레이딩의 개발 준비 단계 이제 시스템을 작성하고 개발하는 과정에 들어가 보자. 우선 전략을 개발하기 전에 결정해야 할 가장 기초적인 사항부터 살펴보자. 최우선적으로 매매 대 상을 결정하고, 매매 시간대와 매매 목적 및 매매 유형을 결정해야 한다. 36 (1) 매매 대상 결정 현물일 경우 대상 현물이나 선물, 옵션 등 매매 대상을 결정하는 것이다. 주 로 주식시장에서는 포트폴리오를 구성한 투자 형태를 많이 사용하고 있다. 하 지만 특정 종목을 선택하여 매매 매상을 결정할 수 있다. 일반적으로 시스템 트레이딩의 매매 대상은 선물이다. 특히 시장이 활성화 되어 있는 주가지수 선물이 주요 매매 대상이다. 매매 대상을 결정할 때, 두 가지 측면을 고려해야 한다. 첫째는 유동성이다. 유동성이 큰 종목이 실제 매매가 가능한 대상이 된다. 두 번째로는 변동성이 다. 변동성이 크다는 것은 수익을 창출할 기회가 크다는 이야기와 통하기 때 문이다. (2) 매매 시간대(Time Frame) 결정 매매 시간대를 결정하는 부분은 상당히 중요한 부분이다. 왜냐하면 매매 시간 대에 따라서 위험과 수익의 구조가 다르기 때문이다. 주간 차트 이용: 중기, 장기매매 일간 차트 이용: 단기매매, 중기매매 분간 차트 이용: 데이트레이딩, 단기매매 일간 및 분간 차트가 가장 많이 사용하는 차트가 될 것이다. 주간 차트를 사 용할 경우에는 세심한 주의가 필요하다. 왜냐하면 주간 차트에서 발생하는 매 매 포인트는 실제로는 실현 불가능한 매매 포인트로서 비용(슬리피지)이 과소 평가될 가능성 크기 때문이다(<그림 2-32>참조). <그림 0-32> 주간 차트와 일간차트 매매시점 비교 <그림 2-32>의 경우 주봉상 매매 신호가 95 포인트에 발생하고 주봉상으로는 95 포인트에 진입이 된 것으로 계산되지만은 실제로 일간 차트를 보게 되면 상승 갭이 있어 실제로는 시가인 95.90 포인트에 실제 주문이 발생할 것이다. 따라서 0.9 포인트의 수익이 과대 계상되는 오차가 발생한 것을 알 수 있다. 매매 시간대 결정은 매매 목적 결정과 깊은 관계가 있다. 매매 목적은 수익 창출을 어느 정도 기간으로 설정할 것인가를 결정 하는 것이다. (3) 매매 목적(Trading Frame) 결정 매매 목적은 데이트레이딩으로 국한 할 것인지, 단기매매 형태로 개발할 것이 지 등에 대한 결정을 말한다. 1) 중장기 매매(middle–term, long-term trading) 중장기 매매는 평균 매매 포지션 유지 기간이 1 개월 이상인 매매 형태를 말 한다. 당연히 현물 시장에서 종목 트레이딩을 할 경우, 사용되는 전략들이 대 부분이다. 선물, 옵션 시장의 경우 3개월, 1개월이 만기이기 때문에 제도적으 로 오랜 기간 포지션을 유지할 수 없다. 38 중장기매매는 주로 일간 차트나 주간 차트를 이용하게 되며, 추세를 추종하는 매매 형태가 될 것이다. 그러나 최근 현물 시장도 단기 매매가 성행하고 있어 점점 더 매매 포지션을 유지하는 기간이 짧아지는 경향이 있다. 2) 단기매매(short-term trading, swing trading) 단기 매매는 1~2주일의 주가 변화에 따라 매매하는 형태이다. 중장기 추세가 상승 추세라 하더라고 단기 스윙(변곡점)이 충분히 발생한다. 따라서 이러한 단기 스윙을 이용한 매매 형태라 해서 스윙 트레이딩(Swing Trading)이라고도 하며, 일간 및 분간 차트를 이용해서 구사하게 된다. 현물, 선물 시장에서 자주 사용되는 매매 형태이다. 하지만 선물시장에서 매 매 포지션을 그 다음날로 가져가는(over-night) 매매 형태는 심리적 거부감이 심한 편이다. 3) 일중 매매, 데이트레이딩(day trading) 일중 매매는 무조건 종가에 청산을 하는 전략이다. 종가에 청산을 하지 않는 경우는 일중 매매라 할 수 가 없다. 왜냐하면 그 다음날로 넘어가는 것과 그 날 청산하는 것은 위험이 다르기 때문이다(하락 갭, 상승 갭으로 인한 위험 증가). 일중 매매는 분간 차트를 사용하며 주로 5, 10, 15, 20, 30분 차트를 사용하 게 된다. 실제로 이 책의 구성도 선물 시장과 일중 매매를 중심으로 설명할 것이다. 앞서 설명한 바와 같이 테러와 같은 예기치 못한 충격이 발생할 경우, 제어하지 못하는 위험이 상당히 커지는 것이 선물, 옵션이기 때문이다. <그림 0-33> 오버나잇 위험 4) 초 단타매매, 스켈핑(scalping) 초 단타매매는 주로 호가나 단기 가격 동향을 이용하는 전략이다. 실제로는 시스템 트레이딩의 범위에 들어가면서도 다소 차이가 있는 매매 형태이다. 투 자가의 매매 기술의 성숙도를 살펴보면, 초 단타 매매로 수익을 발생시킨다면 상당한 전문가의 경지에 있다고 볼 수 있다. 단기 매매나 일중 매매에서 투자자 중 20% 정도의 투자가가 수익을 발생시킨 다면, 초 단타 매매의 경우에는 10% 미만의 투자가만이 수익을 획득한다고 할 수 있다. 따라서 상당한 전문가가 아니면 접근하기 힘든 매매 형태이다. 그러면 어떤 매매 목적으로 접근해야 할 것인가? 개인적인 사정에 따라 차이 가 난다고 할 수 있을 것이다. 매매에 초보자인 경우나, 장을 자주 볼 수 없 는 투자가들은 중장기 매매부터 시작하는 것이 무난할 것이다. 반대로 전문 투자가나 전업 투자가일 경우에는 단기 매매나 일중 매매, 초 단타 매매가 가 능할 것이다. 또한 현물 시장일 경우에는 중장기, 단기 매매가 적당할 수 있고 선물, 옵션 시장일 경우에는 단기 매매, 일중 매매, 초 단타 매매로 접근하는 것이 좋다. 40 이 책은 선물 시장의 전략만을 다루며 특히 데이트레이딩을 가장 핵심적인 대 상으로 접근할 것이다. (4) 매매 유형(Trading Style)결정 마지막으로 매매 유형을 결정하는 것이 전략 개발에 상당히 도움이 될 것이다. 매매 유형이란 진입 방법을 어떤 것으로 사용할 것인가를 결정하는 것이다. 진입 방법은 크게 3 가지로 구분된다. 1) 추세 추종적인 진입 추세 추종적인 진입은 추세를 쫓아가는 진입 형태이다. 즉 상승 추세가 발달 하고 난 뒤, 상승 추세가 확인되는 시점에서 매수 진입하는 방법이다. 간단한 예로 주가가 이동평균선을 상향 돌파하면 진입하는 형태의 전략을 말한다. 추세의 발달 초기에 진입하기는 힘들다. 즉 “무릎에서 사서 어깨에서 팔아라” 는 원칙에 충실한 특성을 가진다. 역사적으로 가장 유용한 전략 형태로 평가 받고 있다. 1장에서 설명한 바와 같이 CTA들이 추세 추종적인 매매 방법으로 수익을 내는 것을 보더라도, 추세 에 순응하는 매매 형태가 유용하다는 결론이다. <그림 0-34> 추세 추종적인 진입과 청산 50 이동평균 상향 돌파 매수, 하향 돌파 매도 이러한 추세추종적 시스템의 특성은 승률(이긴 매매횟수/전체 매매횟수)이 30~50% 정도 밖에 안 된다는 것이다. 낮은 승률로도 수익을 낼 수 있는 시스 템이 되는 이유는 평균 손익비(평균 이익/평균 손실) 비율이 2보다 커서 수익 이 날 때 큰 수익을 내고, 많은 수의 작은 손실을 큰 수익으로 커버하기 때문 이다. <표 0-4> 수익 구조 42 매매 횟수 승률 수익 1 승 2 2 패 -1 3 승 2 4 패 -1 5 승 2 6 패 -1 6번 매매 승률: 50% 평균손익비: 2 수익 합: 3 이러한 승률과 평균 손익비의 관계는 나머지 매매 유형에도 마찬가지로 적용 된다. 간단히 승률이 50% 이고 평균 손익비가 2인 시스템이 수익이 나는지를 간단히 계산해보면 <표 2-4>와 같다. 가장 대표적인 전략이 이동평균선, 주가 채널, 볼린저 밴드와 같은 추세를 나 타내는 기술적 지표들을 이용한 전락이다. 2) 역 추세 추종적인 진입 역 추세 추종적인 전략은 추세의 반대 방향으로 매매하는 형태의 전략이다. 일반적으로 스토케스틱과 같은 오실레이터(특정 범위 내에서 진동하는 지표) 를 이용한 과매수/과매도 활용 전략이 여기에 포함된다. 추세와 반대되게 움직이는 시점은 시장이 추세가 없는 비추세 국면일 것이다. 이럴 경우에는 수익이 발생하게 되어 추세 추종적인 매매 전략과 대조되는 형 태이다. <그림 0-35> 역 추세 추종적인 매매 전략 스토케스틱 80진입 매도, 20진입 매수 특징은 승률이 높고(50% 이상), 평균 손익비가 낮은 형태의 결과가 일반적이 다. 하지만 일시적으로 수익이 발생할 지는 몰라도, 장기로 매매를 지속할 경 우에 수익을 유지하기가 힘들어 바람직한 전략으로 보기 어렵다. 따라서 독립적으로 사용하기 보다는, 추세 추종적인 매매 방법과 함께 사용하 기도 하고 추세 형성 시점에서 저가 매수 기회로 활용하는 경향이 강하다. 3) 패턴 인식, 변동성 돌파 진입 단기 매매나 데이트레이딩에서 많이 사용되는 전략으로서 선물 투자자라면 가 장 관심을 가질 분야이다. 여기에 속하는 전략으로는 캔들 패턴, 모형 분석 (삼각형 등)을 이용한 매매 전략이거나, 변동성이 수렴 이후 확대, 돌파하는 방향으로 매매하는 형태 등 이 이에 속한다. <그림 0-36> 패턴 인식 시스템 갭 상승 매수, 갭 하락 매도 44 일부 학자들은 오실레이터를 이용한 매매 전략이 무용(無用)하다는 견해를 보 이고 있다. 이유는 기술적 지표들은 변수를 가지고 있는데 주가의 변화 따라 변수의 변화가 심해서 제대로 수익을 낼 수 없다는 논리이다. 또한 지표들을 이용할 경우 과거 주가에는 설명력이 아주 높은데, 미래에는 수익이 발생하지 않는 과 최적화 (over-fitting) 문제가 발생할 소지가 큰 것도 한 이유가 된 다. 따라서 패턴 인식과 같은 주가 자체만을 이용한 전략이 향후 수익가능성 이 커 유용하다는 견해이다. 어쨌든 단기 매매와 데이트레이딩 전략 개발에서 상당히 중요한 부분을 차지 하므로 중점적인 관심이 필요할 것이다. 승률이 50% 이상이어야 하고, 평균 손익비 2전후가 일반적이다. 그러면 위와 같은 전략 구분대로만 사용하는가? 아니다. 하나의 전략에 모든 개념이 들어가는 복합 전략을 사용할 수 있다. 실전적인 매매 전략은 추세도 파악하고, 역 추세적인 매매 전략도 사용하며, 패턴도 사 용한다. 따라서 유용한 전략은 모든 개념이 잘 녹아있는 전략일 것이다. 여기까지를 정리하면 다음과 같다. 우선 전략을 개발하기 전에 선물 투자가라 면 다음과 같은 사항을 정리해야 한다. <표 0-5> 선물 매매 매매 대상: 선물 매매 기간: 10분 차트 매매 목적: 데이트레이딩 매매 유형: 변동성 확대(돌파) 전략 위 사항이 결정되었다면 이제부터 매매 전략을 개발해보자 6. 시스템 트레이딩 개발 과정 앞서 설명한 시스템 트레이딩 매매 전략의 구성 요소 3가지인 진입, 청산, 자 산 관리를 사이보스 트레이더의 언어를 이용해서 코딩을 하고 이를 검증하여 수익은 커지고, 위험이 적어진 구조로 개발하는 과정이 시스템 트레이딩 개발 과정이다. 즉 전략이 유용한지를 평가하고, 개선하는 과정을 말한다. <표 0-6> 시스템 트레이딩 전략 개발 과정 매매 전략 환류 진입 전략 청산 전략 자산관리 전략 feed back 검증, 향상 과거 테스트 변수 최적화 사전 모의 투자 (paper trading) <표 2-6>에서 보는 것처럼 전략을 작성하고, 평가하는 과정을 반복하면서 시 스템을 만들어 간다. 즉 집을 짓는 것처럼 차곡차곡 완성해 나가는 과정인 것 이다. <그림 0-37> 전략 작성 흐름도 실전매매와 가상매매 평가 위험 수익 실전 매매 모의 투자 실행 과거 테스트, 코딩 오류 검증, 최적화 자산관리 적용 과거 테스트, 코딩 오류 검증, 최적화 청산 전략 작성 과거 테스트, 코딩 오류 검증 진입 전략 작성 <그림 2-37>처럼 과거 테스트, 최적화를 반복하면서 수익을 증가시키고 위험 을 감소시키는 과정을 거쳐 실제 매매 전략이 탄생하게 된다. 실제로 하나의 전략을 만들기 위해서는 적어도 3번 이상의 테스트를 하게 된다. 또한 코딩 46 오류도 간과해서는 안된다. 실제 매매가 안되게 코딩 되거나, 엉뚱한 주문이 나가게 될 수 있기 때문이다 이러한 개발 과정을 반복하다 보면 청산이나 자산 관리 전략 등이 어느 정도 정리가 되어 실제로는 더 빠른 개발이 가능해진다. 여기서는 초보자를 위한 step-by–step guide line을 제시하고자 한다, (1) 테스트 할 데이터를 차트에 띄운다. 어느 정도 데이터를 이용해서 테스트하는 것이 좋을까? 테스트 데이터는 길수 록 좋다. 오랜 기간의 데이터를 가지고 테스트를 하면 그만큼 많은 주가의 변 화를 내포하기 때문에 테스트 결과의 신빙성이 증가하게 된다. 매매 건수 측면에서는 통계적 유의성의 최소 개수인 30 건이 이상이 되어야 하 며, 많을수록 유의적인 결과를 도출한다. 일반적으로 데이트레이딩일 경우에는 매매 건수가 거의 매일 발생하므로 100건 이상의 매매 건수를 필요로 한다. 추세 측면에서는 상승과 하락, 횡보 추세가 모두 포함되게 끔 충분한 데이터 를 요구하며, 최소 2번 이상의 상승과 하락 추세 변화 구간을 포함하도록 하 는 방법을 권장한다. 그 이유는 상승 추세만을 테스트 하면 매수가 좋은 결과 가 나오고, 하락 추세만을 테스트 하면 매도가 좋게 나오기 때문이다. 테스트 주가는 가격의 연속성 때문에 현물 시장에서는 수정 주가를, 선물에서 는 연결 선물 지수를 사용해야 한다. 만약 수정이 안된 부분이 있다면 어떻게 해야 할까? 수정되기 전 과거 주가는 제외하고, 테스트 하는 것이 정석이다. 정리하면 테스트할 과거 주가 기간을 설정할 때는 충분한 매매 건수가 발생하 게 해야 하고, 추세의 변화가 잘 반영되며, 가격 괴리를 수정한 주가를 사용한다. (2) 진입 전략을 작성한다. 자신의 원하는 진입 전략을 프로그램언어로 작성해서 차트에 적용하는 것이다. 예를 들어 이동평균선을 이용한 매매일 경우 “주가가 이동 평균선을 상향 돌 파하면 매수하고, 하향 돌파하면 매도한다.”라고 작성하면 된다. 위와 같이 매수에서 매도로 전환되는 경우에는 별도로 청산이 필요하지 않지 만 현물 시장의 경우나 매수, 매도로 순환되지 않는 경우에는 기초적인 청산 전략이 필요해진다. 위와 같이 이동평균선 매매의 경우에는 “주가가 이동평균선을 상향 돌파하면 매수, 하향 돌파하면 매수 청산“을 기초 진입 전략으로 설정한다. 일중 매매 의 경우에는 종가 청산을 필히 기초 청산 전략으로 사용하면 된다. 처음에 진입 전략을 적용할 때에는 단위 계약당의 수익과 위험을 분석하는 것 이 목적이므로 1주, 1계약으로 적용해서 수익과 위험의 구조를 파악한다. (3) 진입전략의 과거 테스트 및 오류 검증 진입 전략을 작성하여 주가에 적용해서 과거 테스트(back test, simulation) 를 해본다. 우선 코딩 오류가 있는지부터 검증해서 잘못된 부분을 수정하여 재적용하도록 한다. 처음 적용할 경우 전략코딩만으로 의도하는 바와 같이 잘 표현되었는지 알 수 없으므로 지표나 신호 영역으로 차트에 표현되도록 하여 오류여부를 확인하도록 한다. 오류가 없다면 전략 평가 보고서를 살펴본다. 여기서 가장 먼저 고려해야 할 사항은 앞서 설명한 것처럼 전략 속성창에서 “비용(수수료+ 슬리피지)” 및 “필수적으로 보유해야 할 바 수” 가 적절한 지를 확인한다. 비용을 반드시 고 려하여 과거 테스트를 해야 한다. 48 비용 및 필수적으로 보유해야 할 바 수가 잘 설정되어 있다면, 이제 처음으로 수익은 얼마고 위험은 얼마인지를 파악한다. 이때에는 수익보다 위험이 클 수 도 있다. 하지만 수익이 전혀 발생하지 않을 경우에는 계속 진행하기 힘들어 진다. 따라서 수익이 발생하는 변수가 있는 지를 찾는 최적화 과정도 진행할 수 있다. 수익이 발생한다면 이제부터 청산 전략을 사용한다. (4) 청산 전략 사용: 손절매 적용 우선 손절매를 적용한다. 손절매를 통해 위험을 제어함으로써, 수익을 증가 시키는 형태로 발전시킨다. (5) 과거 테스트 및 오류 검증 손절매를 적용해서 다시 과거 테스트를 한다. 이때에도 코딩 오류를 자세히 볼 필요가 있다. 손절매 이후 원하지 않는 진입이 발생할 수 있기 때문이다. 그 다음으로 손절매를 적용하여 손실(특히 최대 손실)이 줄고, 수익은 증가하 였는지 확인한다. (6) 청산 전략 사용: 이익 보존 청산 적용 전략에 따라서는 위 손절매 적용에서 바로 가상 매매 단계로 진행 할 수 있다. 특히 매수에서 매도로 진행되는 전략일 경우에는 특별한 이익보존 전략이 필 요 없기도 한다. 하지만 때에 따라서는 심리적 안정감이 증가될 수 있게 이익 보존 청산 전략을 사용하게 된다. (7) 과거 테스트 오류 수정 손절매 적용 때와 마찬가지로 이익보존청산을 적용한 후 코딩 오류 등을 체크 해보아서 실제로 원하는 코딩이 되었는 지, 수익 증가, 위험 감소가 되었는지 체크 한다. 이익 보존 청산 방법을 사용하는 목적은 수익의 증가, 승률 및 손 익비 등의 증가를 꾀하는 것이다. 따라서 수익은 증가하나, 위험이 감소하지 않는 이익보존 청산 전략은 사용하기 곤란하다. (8) 자산 관리 전략 적용 및 테스트 테스트 마지막 단계로 자산 관리 전략을 적용해서 수익 구조의 변화 및 자산 관리에 대한 계획을 세운다. 두 가지를 결정하는데 초기 투자금은 얼마로, 매 매당 위험은 어떻게 결정하여 몇 계약을 진입할 것인 지 결정하는 것이다. (9) 모의 투자 및 실전매매 전략이 완성된 단계로 이제 실시간 데이터를 받으면서 매매 신호가 잘 발생하 는지, 수익 구조가 과거 테스트 결과와 유사한 흐름을 보이는지 실전 매매에 들어가기 전에 점검을 한다. 이제 실전 매매 단계로 들어가는데, 자동 주문을 사용할 것인지 등을 결정해 서 사용한다. (10) 비교 분석 실전 매매 내역과 가상 매매 내역을 비교 분석함으로써 비용이 과소 또는 과 대 계상됐는지, 실제 수익 구조와 가상 수익 곡선의 차이점이 발생하는 원인 이 무엇이지 등을 살펴보는 분석과정을 반복한다. 50 (11) 환류(Feed Back) 시스템을 개발하는 과정은 반복적인 환류를 거쳐서 계속해서 수익을 증가시키 고, 위험을 감소키는 과정이다. 따라서 하나의 전략을 개발하는 과정에서 수 익 구조가 다른 많은 전략이 개발 될 수 있다. 전략에서 진입과 손절매 및 이익 보존이 각각 하나로 구성되는 것은 아니다. 가장 간단하게는 진입 전략 + 손절매 이지만, 실제로는 다양한 결합을 통해서 사용하는 경우가 많다. <그림 0-38> 전략의 결합 전략 1 진입 1 손절매 1 진입 2 손절매 2 자산관리 전략 2 진입 3 이익보전 자산관리 전략 3 진입 4 이익보전 자산관리 진입 5 이익보전 진입 N 진입의 경우 스토케스틱 진입, 이동평균선 진입 등과 같은 다양한 결합으로 진입 전략을 구사할 수도 있고, 특히 청산의 경우 2~3가지 손절매 방법과 3 ~4가지 이익 보존 청산전략이 결합된 형태로 사용되기도 한다. 따라서 수십 가지 응용전략 개발이 가능해져서 이중에서 최상의 결과를 사용할 수도 있고, 2~3가지를 이용해서 복합 전략으로 사용할 수 도 있다. 이렇게 개발을 계속하다 보면 시스템 개발에서 가장 큰 문제점으로 부각되는 것이 범용성(robust)과 과최적화(over-fitting)이다. 이런 문제가 발생하게 되면 과거 테스트 결과는 좋으나, 실제로는 수익이 발생하지 않는 구조가 될 수 있다. 시스템을 개발하고 과거 테스트를 하는 과정은 실제 매매에서 수익을 창출하 기 위함이다. 그런데 과거 주가에 너무 맞추어 개발하는 모순에 빠지게 되면 실제로는 수익이 나지 않는 경우가 있다. 범용성은 3가지로 구분 가능하다. 첫 번째는 시장범용성(Market Robust)으로 현물시장, 지수선물시장, 국내시장, 외국시장에 상관없이 수익이 발생하는 전 략을 의미한다. 두 번째는 시간범용성(Time Robust)다. 데이트레이딩 전략 중 5/10/30/60/120 분 모두에서 수익이 발생하는 전략을 의미한다. <그림 0-39> 범용성 세 번째로 변수범용성(Parameter Robust)다. 전략에 사용되는 지표값을 포함 한 각종 변수들에 대한 범용성으로서 스토케스틱 (5, 3, 3), 이동평균(20)등 을 사용하는 전략의 경우, 변수에 해당하는 “5, 3, 3” 이나 “20”등의 기간값 을 변경해도 수익이 발생하는 것을 의미한다. 52 <그림 0-40> 과 최적화 (over-fitting) 최적화 최적화 이후 과 최적화란 주로 변수 최적화 과정에서 문제가 발생하는 경우이다. 최적의 변수를 찾는 과정이 시스템 개발에서 자주 사용되는데, 너무 많은 변수를 중 첩하여 사용하거나 현재 상황에 너무 맞춘 변수를 실제 사용할 경우, 실전에 서 수익이 발생하지 않는 경우를 말한다. 가장 쉬운 예로 MACD+STOC+RSI+이동평균선+TRIX+CCI 등을 중첩하여 같은 방향 일 때 매매 하는 전략의 경우를 살펴보자. 지표변수 합이 3+3+1+1+1+1=10개가 되며 이 변수들을 각각 일정 범위로 최적 화를 수행해서 최상의 최적 변수 조합을 찾아 사용한 경우일 것이다. 이런 경 우 실제 매매에서는 최적 변수의 변화가 생기면서 수익이 나지 않는 경우가 허다하게 발생한다. 일반적으로 진입 전략의 변수는 5개를 넘지 말라고 한다. 변수 하나가 추가 될수록 매매 전략의 자유도(Degree of Freedom)는 대폭 축소된다. 여기서 주의할 것은 청산 전략과 진입 전략의 변수를 모두 합한 합이 5개 이 하라는 이야기는 아니다. 청산 전략과 진입 전략 변수는 따로 생각하여도 무 방하다. 역시 청산 전략도 변수가 5개 이하가 바람직하다. 테스트 과정 및 범용성, 과 최적화부분은 앞으로 이 책 끝까지 반복적으로 설 명될 것이다. Step-by-step test 과정은 『3장 시스템 트레이딩 따라 하기』 에서 CT를 이용해서 실제 전략을 작성하면서 반복적으로 설명될 것이며, 범용 성과 최적화 부분도 반복적으로 설명될 것이다, 앞서 본 것처럼 시스템 트레이딩 전략의 개발은 평가의 반복이다. 즉 평가를 어떻게 하느냐도 상당히 중요한 문제가 된다. 여기서 우선적으로 기초적인 전 략의 평가 방법 및 최적화 방법에 대해서 알아보기로 하자. 7. 전략 평가 및 최적화 (기초) 전략을 평가한다는 것은 수익과 위험(손실)을 파악하는 것이다. 수익은 판단 하기 쉽다. 벌어들인 총 손익이 될 것이다. 그러면 위험은 무엇인가? 우선 제어되지 않는 위험부터 알아보자. 시장외적인 충격, 갑작스런 부도, 감 자 등 돌발 악재가 대표적이다. 차트상으로는 종가와 시가의 갭(gap)으로 표 현된다. 9.11 테러 때와 같이 엄청난 하락 갭은 선물/옵션 투자자들에는 절호 의 수익 창출 기회가 될 수도 있고, 파산의 위험이 될 수도 있다. 이러한 위 험은 절대 제어할 수 없다. 따라서 선물, 옵션 시장에서는 데이트레이딩이 위험을 줄이는 하나의 방법이 된다. 반면에 제어 가능한 위험은 무엇인가? 매매 손실이 제어 가능한 위험이다. 두 가지로 나누어 지는데 첫째는 한번 매매에서 발생하는 최대 손실이고, 두 번 째는 연속 손실이다. (1) 최대 손실 최대손실은 한번 매매에서 발생하는 손실폭을 의미한다. 최대손실 제어는 손 54 절매(stop-loss)를 적용하면 가능하다. 하지만 데이트레이딩 경우에는 계획적 인 제어가 가능하지만, 단기 매매부터는 제어가 안 되는 위험인 갭이 포함되 기 때문에 정확하게는 제어할 수 가 없다. 앞서 모든 전략에 되도록 이면 손 절매를 사용하는 것을 권장했는데, 이유는 역시 위험을 제어해서 사용하는 것 이 바람직하기 때문이다. 이 손절매 폭은 나중에 자산 관리와 같이 결합된다. 손절매는 매매에 대한 위 험이고, 자본에 대한 위험은 자본 투여에 대한 위험으로 간주되어 계약수 계 산 방법에서 상호 연관 작용을 한다. 예를 들어, 한번 매매에서 1계약당 손절 매 폭을 20,000원, 투하 자본대비 한번 매매에서 200,000원을 손해 볼 수 있 다고 계획하면 200,000/20,000=10계약을 사면 된다. 10계약을 진입하였을 경 우, 손절매가 발생하면 자본 손실은 200,000원 이기 때문이다. (2) 연속 손실(Drawdown)=자본인하액 연속 손실은 손절매가 연속적으로 발생하는 것을 말한다. 일반적으로 드로다 운이라고 하는데, 최대 드로다운을 최대 자본인하액 이라고 한다. 이것은 시 스템의 최대 위험을 의미한다. 사실 드로다운은 제어하기가 힘들다. 하지만 시스템을 구성하는 과정에서 최대 드로다운이 적게 개발할 수 있다. 드로다운 역시 데이트레이딩과 단기매매 이상의 오버나잇 전략과는 크기의 차 이를 보인다. 역시 데이트레이딩일 경우, 갭 발생 손실이 포함되지 않아 드로 다운이 적다. 많은 시스템 개발자들이 드로다운에 대해 고민을 한다. 실제 매 매에서는 과거 테스트보다 2 ~ 3 배로 드로다운의 크기가 증가하는 경우가 허 다하기 때문이다. 그러면 논리적으로 연속 손실이 발생하였을 경우, 투입 자본금을 보존하기 위 해서 달성해야 할 만회 수익률은 어느 정도 일까? 계산 방법은 다음과 같다. <표 0-7> 연속손실과 만회수익률 만회수익률(%) 연속손실(%) =((1/(1-손실%/100))-1)*100 5 5.26 10 11.11 15 17.65 20 25.00 25 33.33 30 42.86 35 53.85 40 66.67 45 81.82 50 100.00 60 150.00 70 233.33 80 400.00 90 900.00 표에서 보듯이 20% 손실이 발생하면 25%를 벌어야 투자 원금을 회복할 수 있 다. 만약 50% 손실이 발생하면 100% 수익을 획득해야 한다. 따라서 50% 이상 손실이 발생하면 원금을 회복하기가 불가능하다. 즉 추가 자본 투입이 필요하 게 된다. 논리적으로 보면 25% 이상의 손실은 회복하기가 힘들다는 것을 알 수 있다. 어떤 경우든 최대 25% 이상의 손실을 시스템에서 허용할 수 없다. 따라서 실 제 시스템의 과거 테스트 결과에서의 이 비율이 적을 수록 시스템은 유용하다 고 할 수 있다. 시스템을 개발하여 수익을 증가시키고, 위험을 감소시킨다는 것은 한번 매매 의 최대 손실과 최대 드로다운을 감소시켜서 수익을 증가시키는 것이다. 즉 수익을 증가시키는 방법으로 시스템을 개발하는 것이 아니고, 위험을 감소시 켜서 수익을 증가시키는 것이다. 또한 시스템을 평가하는 것은 수익과 위험 의 관계를 분석하는 것이다. 56 시스템 성능 향상은 위험을 감소시켜서, 수익을 증가시키는 것이다. 수익과 위험의 관계 분석이 시스템 평가이다. (3) 수익과 위험의 분석 시스템 평가 보고서에는 수익과 위험의 크기를 표시하는 다양한 통계 자료가 있다. 이중 향후 구체적인 분석을 하기 전에 필히 알아야 할 항목에 대해서 설명하겠다. 평가 항목 <표 0-8> 필수 분석 항목 최소기준 샘플 결과 총손익 >0 86,000,000 원 평균손익 >0 86,000 원 최대 손실 최소 -1,100,000원 총 매매수 >30 1,000 건 연속 이익 매매수 최대 9건 연속 손실 매매수 최소 6건 최대 자본 인하액 최소 5,300,000원 승률 >30% 54.65 % 손익비 >1 1.45 평균손익비 >1 1.20 보상 비율 >1 16.22 수익/위험 분석 1) 총손익(net profit) CT 에서는 초기 자본금 및 현재 포지션이 있을 경우의 손익을 제외한 총 벌어 들인 이익이다. 당연히 (+)가 나와야 한다. 긴 기간을 테스트 했을 경우 (+) 가 나오지 않는다면, 시스템을 다시 개발하든지 포기해야 할 것이다. 이 금액 은 클수록 좋다. 가장 기초적인 평가 항목으로서 (+) 발생과 크기가 중요하다. 2) 평균 손익(average profit) = 기대수익(expected return) 총손익을 매매 건수로 나눈 값이다(86,000,000원/1,000건). 즉 한번 매매에서 얻을 수 있는 손익을 말한다. 중요한 통계치로 한번의 매매로 시스템을 통해 서 얻을 수 있는 기대 수익(expected return)이 된다. 여기서 86,000원이 평 균손익이라 하면 100번 매매하면 8,600,000 원을 획득할 수 있다는 가정이 된 다. 당연히 (+)가 나와야 하고, 값이 클수록 기대 수익이 커지게 된다. 3) 최대 손실 앞서 설명한 것처럼 최대 손실은 한번 매매에서 발생하는 손실의 최대치로 작 을수록 좋다. 시스템을 개발하는 과정에서 이 최대 손실을 필수 항목으로 살 펴보면서 손절매 적용이나 청산 전략 적용 시 축소되는지를 관찰한다. 4) 총 매매수 총 매매수는 매매 횟수를 살펴보기 위해서다. 총손익 및 평균손익이 (+)인데 매매 건수가 30건 이하이면 사실 통계적 유의성 가지지 못한다. 앞서 설명한 대로 최소 30건 이상, 데이트레이딩에서 100건 이상을 권장한다. 여기서 총매매수와 확률적 오차에 대해 간단히 살펴보기로 하자. 엄밀한 의미 에서 신뢰수준과 표본의 개수를 통해 허용가능 최대오차를 계산해야 하나, 표 준오차 계산방식으로 계산시 무한모집단의 경우 95%의 신뢰수준에서의 계산과 근사값이 도출되므로 편의상 표준오차 계산방식을 따르도록 한다. 58 <표 0-9> 총매매수와 확률 오차 매매 횟수 표준오차(1/ 매매회수 ) 10 31.62% 30 18.26% 50 14.14% 100 10% 300 5.77% 500 4.47% 1,000 3.16% 2,000 2.23% 위의 표에서 매매 횟수가 30건일 경우 수익에서 ±18.26% 의 오차를 가지게 된다. 만약 100 건일 경우에는 수익에서 ±10% 오차가 발생할 수 있다는 이야 기다. 즉 테스트 결과 30건 매매에서 평균손익이 86,000원인 경우 101,700~70,300원의 평균손익의 변화를 예상할 수 있고, 100건 테스트 결과라 면 94,600~77,400 원 사이가 될 것이다. 따라서 테스트 매매 건수가 많을수록 테스트결과의 정확도가 높아짐을 알 수 있다. 5) 연속 이익 매매수, 연속 손실 매매수 상대적으로 연속 이익 매매수가 많고 연속 손실 매매수가 적은 것이 좋다. 이 두 항목은 드로다운과 관계가 깊다. 즉 연속 손실 매매 수가 많아지면 드로다 운이 커진다. 따라서 이 상대적 관계가 유리한 쪽이 좋다. 하지만 추세 추종 적인 전략일 경우에는 연속 손실 매매 수가 상대적으로 커도 유용한 전략일 수가 있다는 점을 기억해두자. 6) 최대 자본 인하액(maximum intra-day drawdown) 최대 자본 인하액은 앞서 설명한 대로 가장 관심 있게 보아야 할 위험이다. 연속 손실에 대한 개념은 크게 2 가지로 구분된다. 매매 기준으로 계산하는 방식과 미실현 손익을 포함해서 계산하는 방법이다. 드로다운(drawdown): 매매 기준으로 연속 손실 계산 일중 드로다운(intra-day drawdown): 매매 간 최대 미 실현 손실 폭을 포함 최대 드로다운(maximum drawdown): 드로다운 중 최대값 최대 일중 드로다운(최대 자본 인하액, maximum intra-day drawdown): 일중 드로다운 중 최대값 매매 기준으로 계산하는 방법은 드로다운(drawdown)이 되며, 이중 최대가 최 대 드로다운이 된다(maximum drawdown). 반면 매매 중간의 최대 하락폭을 감안하여 좀더 보수적으로 계산하는 방법이 일중 드로다운이라 한다(intra-day drawdown). 예를 들어 어떤 매매가 100,000원 손실이 발생하였는데 장중 흐름으로는 150,000원까지 하락하였다면, 150,000 이 일중 드로다운이 되고 100,000원은 드로다운이 된다. 이중 최대값 을 최대 일중 드로다운(maximum intra-day drawdown)이라 한다. 최대 자본 인하액은 이 두 가지 모두에 사용될 수 있다. 하지만 보수적인 접 근 방법을 기준으로 하여 최대 일중 드로다운을 일반적으로 최대 자본 인하액 이라 한다. 최대 자본 인하액은 시스템이 가지고 있는 최대 위험으로서 나중에 최초 필요 자본금을 결정하는데 사용된다. 시스템을 계속 적용하기 위해서는 최대 자본 인하액 이상의 자본을 준비해야 살아남을 수 있게 된다. 일반적으로 최초 필 요자본금은 [최대 자본 인하액*2 + 증거금]으로 결정한다. 역시 실전 매매에 서는 최대 자본 인하액이 커질 수 있기 때문이다. 7) 승률(hit – ratio) 총 매매 횟수 대비 이긴 매매횟수의 백분율이다. 역시 클수록 좋다. 하지만 명심해야 할 점은 승률이 0%인 시스템도 없고, 100%인 시스템도 없다. 또한 승률이 평가의 전부가 아니고, 손익비, 평균손익, 보상비율과 함께 분석해야 60 한다. 우선 기본적으로 매매를 했을 경우 이기거나, 지거나, 비긴다. 따라서 기초적 으로 이길 확률은 33.33% 이다. 따라서 최소 30% 이상이 되는 것이 바람직하 다. 더 나아가 비기는 경우를 제외하면 승률은 50% 가 된다. 데이트레이딩의 경우 수익을 획득하는 폭이 한정되어 있어 적어도 50% 이상을 요구한다. 이유 는 하루의 움직이는 폭이 한정되어 있기 때문에 평균 손익비 및 손익비가 2이 상이 되기 힘들기 때문이다. 일반적으로 추세 추종적인 시스템은 승률이 30% 전후라도 유용한 전략이 될 수 있다. 이유는 손익비 및 평균손익비가 2 이상으로서 한번 수익을 낼 때, 많은 수익을 내는 구조를 가지고 있기 때문이다. 따라서 한번이라도 매매를 따라 하지 않을 경우, 시스템 사용 결과는 장담할 수가 없게 된다. 반면 단기매매 이하 데이트레이딩 전략에서는 50%이상의 높은 승률과 손익비, 평균손익비는 2전후면 유용한 전략이 될 것이다. 8) 손익비, 평균손익비 손익비는 총이익/총손실을 나타내며, 평균 손익비는 평균 이익/평균 손실 이 다. 이 비율은 식에 알 수 있듯이 기본으로는 1보다 커야 한다. 1보다 적다는 것은 위험이 더 크다는 의미다. 앞서 설명한 것처럼 승률과 매매 방법에 따라 상대적인 평가를 해야 하는 항목이다. 이 비율은 단기 매매에서는 1.5이상, 추세 추종적인 매매에서는 2이상이 되는 구조가 바람직하고, 높을수록 좋다. 수익과 위험을 한번에 파악하는 주요한 분석항목이다. 9) 보상비율 보상비율은 총손익/최대자본인하액 이다. 역시 1보다 커야 하고 클수록 좋다. 최대 연속손실 대비 수익을 보는 통계치로서 손익비, 평균 손익비와 함께 평 가 한다. 위 <표 2-8>에서 보듯이 보상비율이 10이상으로 아주 좋은데, 데이트레이딩에 서는 가능하다. 앞서 누차 설명한 것처럼 데이트레이딩은 목표수익도 제한적 이고 손실폭도 제한적이다. 즉 최대 자본 인하액에 오버나잇 위험이 포함되어 있지 않아 위험이 적은 구조라는 것이다. 실제로 오버나잇하는 추세 추종적인 매매 전략일 경우 보상비율이 10이상을 넘기 힘들다. 각각의 항목에 대해서 알아보았다. 이제 종합적으로 보면 위 예시된 전략의 결과는 위험은 적고 수익이 발생하는 구조라는 것을 알 수 있다. 즉 실전 매 매에서 수익이 날 가능성이 크다는 것이다. 마지막으로 테스트 결과를 관찰하는 순서를 간단히 정리해보기로 하자. 일단 매매건수가 30건 이상이 되는지 확인한다. 총 손익과 평균 손익이 (+) 나는지 확인한다. 승률이 30% 이상, 손익비, 평균 손익비, 보상 비율이 1 보다 큰지를 확인한 다. 위 항목값의 크기, 최대손실의 크기, 드로다운의 크기 등을 확인한다. 하지만 이 평가 보고서는 결국 테스트의 마지막 포인트(마지막 매매 시점)에 서의 분석이다.즉 중간 과정의 변화에 대해서는 알 수가 없다. 따라서 추가적 인 분석을 필요로 하는데 주로 중간 과정의 수익구조 변화를 파악하는 것으로 대표적인 것이 누적 수익곡선 분석이다. 62 (4) 누적수익곡선(Equity Curve) 분석 누적 수익곡선이란 첫 매매에서부터 테스트 기간 마지막까지의 매매별 손익을 누적해서 표시하는 그래프이다. <그림 0-41> 누적 수익곡선 위 그림에서 선은 누적수익곡선을 나타내고, 점은 피크 점을 나타낸다. 점으 로 표시된 것들은 단기 고점을 나타내는데 이러한 고점이 많다는 것은 새로운 고점을 갱신한 횟수가 많다는 의미가 된다 결론적으로 점들이 많으면서 수익 곡선이 우상향하면, 매매 처음부터 끝까지 수익이 증가하는 구조로서 유용한 전략이라 볼 수 있다. 실제로 시스템 트레 이딩은 이 수익곡선을 우상향하게 만드는 과정이라 할 수 있다. 이 곡선이 우 향상하면 앞서 설명한 테스트 결과가 좋아지게 된다. 테스트 결과를 분석하고 수익곡선을 분석하는 과정이 시스템을 개발하는 과정이 되며, 이 과정은 앞으로 시스템 트레이딩 따라하기에서 자세히 설명하겠다. 우선 다양한 예제 평가 항목 및 수익 곡선에 대한 분석을 통해 평가를 제대로 할 수 있는 능력을 키우도록 하자. (5) 테스트 결과 예제 <표 0-10> 다양한 테스트 결과 평가 항목 예제1 예제2 예제3 -7,000,000원 86,000,000원 86,000,000원 평균손익 -86,000원 86,000원 86,000원 최대 손실 -1,100,000원 -1,100,000원 -1,100,000원 총 매매수 1,000건 1,000건 29건 연속 이익 매매수 5건 9건 5건 연속 손실 매매수 15건 15건 3건 최대 자본 인하액 20,300,000원 20,300,000원 5,300,000원 50.65% 54.65% 70.65% 손익비 0.45 0.95 1.45 평균손익비 0.20 1.0 1.20 보상 비율 0.34 4.24 16.22 평가 항목 예제4 예제5 예제6 86,000,000원 86,000,000원 86,000,000원 평균손익 86,000원 86,000원 86,000원 최대 손실 -5,100,000원 -1,100,000원 20,000원 총 매매수 1,000 건 1,000 건 1,000 건 연속 이익 매매수 3건 5건 999 건 연속 손실 매매수 15 건 25 건 0건 최대 자본 인하액 27,692,000원 87,000,000원 300,000원 18.65 % 34.65 % 99 % 손익비 1.45 1.45 100 평균손익비 1.20 1.20 100 보상 비율 3.22 0.98 286.66 총손익 승률 총손익 승률 64 위 결과들은 가상적으로 만든 결과이며 모두가 문제점을 가지고 있다. 우선 예제1을 보면 총손익과 평균 손익이 (-)로서 더 이상 분석이 필요 없다. 예제 2는 손익비가 1 이하로 문제가 있다. 승률은 좋지만 이긴 매매에서 수익이 적 거나 손실매매시 손실폭이 큰 것이므로 이익보존청산전략이나, 손절매전략의 수정 보완이 필요하다. 예제3은 승률이 70% 대이고 모든 통계치가 좋지만 매 매 건수가 29 건으로 통계적 유의성을 가지지 못하고 있다. 좀더 긴 기간을 테스트 해보아야 한다. 예제4는 수익이 나는 구조이나 승률이 18.65%, 연속 이익 매매수가 너무 적은 상태로 실전 매매에 적용하기 힘든 구조이다. 승률을 높이고 연속 손실을 줄 이는 방법으로 개발을 진행해야 한다. 예제5도 수익이 나는 구조이지만 보상 비율이 0.98로 문제가 있다. 연속손실이 너무 많은 것과 연관이 있다. 이런 시스템은 한, 두 번의 수익이 전체 수익의 대부분을 차지할 것이라는 것을 알 수 있는데, 손실매매를 줄이는 방법이 필요하다. 예제6은 아주 훌륭한 결과를 나타내고 있다. 1,000 번 매매 중에 1 번 이 손 실이 났을 뿐이다. 하지만 이런 결과는 과 최적화나, 실전에서는 매매 불가능 한 코딩을 포함한 전략일 가능성이 크다. 예제6과 같은 전략을 만들어 보자. <수식 0-8> 100% 시스템 If open(-1) > close*1.01 Then ‘내일 시가가 오늘 종가보다 1% 증가하면 Call buy("매수", Onclose) ‘ 오늘 종가에 매수하라 End If If open(-1) < close*0.99 Then ‘내일 시가가 오늘 종가보다 1% 하락하면 Call sell("매도", Onclose) ‘오늘 종가에 매도하라 End If Call exitlong("청산", Atmarket) ‘ 내일 종가에 매수 청산하라 Call exitshort("청산", Atmarket) ‘ 내일 종가에 매도 청산하라 불가능한 전략이다. 내일 가격을 어떻게 알겠는가? 결과는 다음과 같다. <표 0-11> 100% 시스템결과 평가 항목 샘플 결과 총손익 483,921,040원 평균손익 753,770원 최대 손실 0원 총 매매수 642건 연속 이익 매매수 642건 연속 손실 매매수 0건 최대 자본 인하액 5,936,550원 승률 100% 손익비 100 평균손익비 100 보상 비율 81.52 주) 연결 선물지수 일간 차트: 1996년~현재 <그림 0-42> 수익곡선 매매는 확률 게임이다. 위험을 줄일 수는 있지만, 완전히 없게 할 수는 없다. 특히 불확실한 미래는 더 많은 위험이 존재한다. 따라서 시스템을 과거 주가에 테스트 결과를 일정수준 이상 좋게 만드는 것은 무의미하다. 자신의 매매전략을 시스템화하여 검증하고 실현 가능한 전략으로 발전시키는 것이 중요하다. 66 (6) 최적화 (Optimization) 최적화란 과거 테스트 결과 중에서 최적의 결과를 나타내는 매매 전략이나 변 수를 찾는 과정을 말한다. 예를 들어 이동평균선같은 경우에는 주로 사용되는 변수가 5일에서 100일까지 일 것인데, 이 중 어느 변수가 과거에 수익을 냈는 지를 검증하는 것이다. 우선 변수의 수에 따라 최적화하는 과정을 구분하여 설명하겠다. 1) 하나의 변수 최적화 평가 방법의 범주는 위에서 설명한 기초평가 방법을 사용한다. 실제로 일간 선물 차트를 이용해서 주가가 이동평균선을 상향 돌파할 때 매수하고, 이동평균선을 하향 돌파할 때는 매도하는 아주 간단한 전략을 통해서 결과를 보자. <표 2-12>는 이동평균선을 10일부터 200일까지 10일씩 증가하면서 테스트 한 결과이다. 모든 변수에서 수익이 발생한다. 따라서 변수 범용성을 가진 매매 전략이라 할 수 있다. 최적화 과정에서 위와 같이 대부분이 변수에서 수익이 발생한 경우가 아니고, 최적화한 전체 변수 중에 5% 만 수익이 나고 95%는 손실이 발생할 경우에는 최적 변수를 사용하는 것에 문제가 있다. 전략 또한 실전 매매에 사용하기 힘 들다. 왜냐하면 최적 변수도 변화되기 때문에 많은 변수에서 수익이 발생해야 변수가 변화되더라도 수익을 유지할 수 있기 때문이다. <표 0-12> 최적화 결과 손익비 평균 손익비 보상 비율 최대자본인하액 39.86 1.09 1.65 0.63 -30,689.33 182 33.52 1.1 2.19 0.65 -26,101.46 206.97 151 29.8 1.24 2.91 0.95 -32,980.89 54,764.54 476.21 115 31.3 1.52 3.33 1.67 -32,768.93 50 55,031.66 539.53 102 27.45 1.59 4.21 2.64 -20,866.45 60 45,695.92 496.69 92 22.83 1.49 5.03 2.23 -20,455.45 70 19,997.14 212.74 94 22.34 1.18 4.11 1.08 -18,566.60 80 24,497.18 306.21 80 25 1.28 3.85 1.16 -21,033.88 90 36,787.46 510.94 72 25 1.49 4.46 1.37 -26,800.26 100 48,249.57 804.16 60 25 1.94 5.81 2.33 -20,741.06 110 64,626.24 1,196.78 54 33.33 2.73 5.46 2.05 -31,592.15 120 44,235.93 713.48 62 24.19 1.9 5.94 1.46 -30,267.01 130 30,863.30 497.8 62 27.42 1.56 4.12 1.02 -30,267.01 140 32,820.08 586.07 56 25 1.67 5.02 1.14 -28,717.17 150 51,745.90 1,176.04 44 22.73 2.46 8.36 1.94 -26,667.35 160 43,701.63 1,040.51 42 28.57 2.1 5.24 1.64 -26,667.35 170 41,646.11 1,224.89 34 23.53 2.1 6.84 1.64 -25,317.38 180 30,380.41 799.48 38 21.05 1.72 6.46 1.23 -24,642.17 190 39,509.52 987.74 40 20 2.15 8.59 1.24 -31,791.45 200 35,247.80 766.26 46 19.57 1.81 7.45 1.13 -31,116.57 매매 건수 승률 70.11 276 16,887.06 92.79 30 31,252.66 40 변수 총손익 10 19,350.34 20 평균 손익 주) 연결 선물 지수 1996년 ~ 현재, 68 : 최적값 <표 2-12>에서 변수값 간 최적항목이 다소 차이를 보이는데 총손익은 110일, 평균손익은 170일, 승률은 10일, 손익비는 110일, 평균손익비는 190일, 보상 비율은 50일, 최대 자본인하액의 최저값은 70일이 된다. 그러면 어느 변수를 사용해야 하나? 우선은 매매 목적에 따라 다를 수 있다. 중장기 투자를 원할 경우, 장기 변수 가 좋을 것이다. 그러나 단기 매매를 원할 경우에는 변수가 너무 긴 것은 문 제가 있다. <그림 0-43> 총손익 그래프 <그림 2-43>은 <표 2-12>의 결과를 “최적화 보고서”에서 [그래프 Æ line 그 래프]를 선택한 화면이다. 그림을 보면 단기 변수로는 40~50일, 장기로는 110, 150, 190이 피크 점인 것을 알 수 있다. 총손익은 110이 최대치이다. 직관적 으로 단기는 40일, 장기는 110일을(150, 190은 너무 장기에다, 총손익도 상대 적으로 적다)최적 변수로 선택 할 수 있다. 두 번째로 수익과 위험 기준으로 선택하는 방법이다. 즉 손익비, 평균 손익비, 보상 비율이 수익과 위험을 평가하는 항목인데, 이 항목들을 모두 함께 사용 해서 평가해보자 <그림 0-44> 손익비, 평균 손익비 3 2.5 손익비 보상비율 평균손익비 10 9 8 7 2 6 5 1.5 4 1 3 2 0.5 1 0 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 위 그림을 보면 각각의 피크점의 위치는 틀리지만, 피크를 공통적으로 형성하 는 시기를 보면 40 ~ 50일, 100 ~ 110일 140일임을 알 수 있다. 총손익 기준으로 최적 변수를 찾는 것보다, 수익과 위험의 비율들을 함께 활 용하는 방법이 바람직하다. 결론적으로 40일, 50일은 단기매매 용으로, 100일은 장기 매매용으로 최적 변 수라 할 수 있다. 2) 두 개의 변수 두 개의 변수일 경우에도 마찬가지로 수익과 위험의 관계를 분석하는 것이 바 람직하다. 이럴 경우 광범위한 변수가 최대의 수익이 나는 전역 최대값 (global maximum)을 찾는 게 중요하다. 우선 단기 이동평균선이 장기 이동평균선을 상향 돌파하면 매수하는 전략에서 두 가지 장단기 변수를 최적화 해보자. 70 <표 0-13> 두 변수 사용시 항목별 최적 변수 기준 항목 총손익 평균 손익 승률 손익비 평균 손익비 보상 비율 최대 자본 인하액 변수주) 10/30 20/30 80/90 10/70 10/30 10/30 10/30 총손익 66,125.5 52,906.9 17,554.2 55,180.9 66,125.5 66,125.5 66,125.5 1,160.1 928.19 516.3 1,780.03 1,160.11 1,160.11 1,160.11 57 57 34 31 57 57 57 승률 40.3 50.88 52.94 48.39 40.35 40.35 40.35 손익비 1.82 1.69 1.3 2.21 1.82 1.82 1.82 2.69 1.63 1.15 2.36 2.69 2.69 2.69 4.12 2.02 0.74 2.97 4.12 4.12 4.12 -16,031.5 -26,1 -23,620.1 -18,591.4 -16,031.5 -16,031.5 -16,031.5 평균 손익 매매 건수 평균 손익비 보상 비율 최대 자본 인하액 주) 연결선물 지수 일간: 1996년~현재 단기 변수 10 ~ 100 증감 10, 장기 변수 10~100 증감 10, 변수: 단기/장기 표에선 보면 우선 승률로 뽑은 최적변수는 보상비율이 0.74로 문제가 있어 제 외하면, 단기 변수는 10, 20 일 장기 변수는 30 일이 최적의 결과를 나타내며, 테스트 결과 예상 수익과 위험의 구조가 양호한 것을 알 수 있다. 좀더 자세 히 살펴 보기 위한 방법은 “최적화 보고서”에서 그래프 Æ 3D 차트나 Range(영역)차트, 포인트(point)차트를 통해서 확인하는 방법이 있다. <그림 0-45> 3D 차트 전역 최대값 국소 최대값 (Global Maximum) (Local Maxima) 그림을 보면 단기 변수 10, 20, 장기변수 20~50에 해당되는 구간에서 수익이 발생하는 것을 알 수 있다. 반면 단기 변수 70 ~80, 장기 변수 90 ~ 100 사이 도 수익이 발생하는데, 좁은 구간으로서 국소 최대값이 된다. 따라서 광범위 한 구간에서 수익이 나는 변수를 선택하게 된다. 따라서 단기 10, 장기 30을 선택할 수 있다. <그림 0-46> 영역형 차트 72 영역형 차트는 3D 차트를 평면에 투시한 형태이다. 3D 차트와 같은 결론을 낼 수 있다. 또한 포인트 차트도 같은 결론을 낼 수 있다(포인트 차트는 3개 이 상의 변수에서 사용해 보도록 하자). 그러면 여기서 수익과 위험을 분석하는 항목 중, 평균손익비를 3D 차트로 구 현해보자. <그림 0-47> 평균손익비 3D 차트 역시 마찬가지 결론으로서 단기 10 장기 30을 선택하게 된다. 3) 세 개 이상의 변수 세 개 이상의 변수에서 최적 변수를 찾는 것 또한 2개의 변수에서 찾는 것과 다르지는 않다. 우선 단기, 중기 장기 이동평균선을 이용해서 매매하는 전략을 생각해보자 장 기에서 단기 이동평균선이 정배열이면 매수하고 역배열이면 매도하는 전략을 이용한다. 그리고 단기 및 장기 이동평균선 중 어느 하나가 배열이 역전되면 청산 전략을 구사한다. <표 0-14> 세 변수 사용시 항목별 최적 변수 기준 항목 총손익 평균 손익 승률 손익비 평균 손익비 보상 비율 최대 자본 인하액 변수주) 25/30/60 15/30/60 10/70/90 10/70/80 10/40/50 25/30/60 10/70/50 총손익 54,124.3 49,615.0 34,116.5 33,569.0 37,924.5 54,124.3 33,569.0 1,061.26 1210.12 1176.43 1,049.03 881.97 1,061.26 1,049.03 51 41 29 32 43 51 32 승률 45.1 41.46 55.17 46.88 34.88 45.1 46.88 손익비 1.94 1.77 2.1 2.16 1.61 1.94 2.16 2.36 2.49 1.71 2.45 3.01 2.36 2.45 3.19 3.1 1097 2.66 2.08 3.19 2.66 -16,982.2 -19,01 -17,315.5 -12,640.6 -18,202.7 -16,982.2 -12,640.6 평균 손익 매매 건수 평균 손익비 보상 비율 최대 자본 인하액 주) 연결선물 지수 일간: 1996년~현재 단기 변수 5~50 증감 5, 중기 및 장기 변수 10~100 증감 10, 변수: 단기/중기/장기 가장 빈번한 변수를 보면 단기 10, 중기 30 장기는 60 이다. 그리고 단기, 중 기 및 장기 이동평균선의 적정한 거리를 생각한다면 평균 손익 기준인 15, 30, 60 이거나 평균손익 기준으로 10, 40, 50 이 될 것이다. 다음으로 차트를 이용해서 좀더 세밀한 분석을 하는데 2개의 변수와 마찬가지로 3D, Range, Point 차트가 모두 활용될 수 있다. 활용 방법은 단기 변수와 중기 및 장기변수의 관계, 중기 변수와 단기 및 장기변수의 관계, 장기 변수와 단기 및 중기변수와 관계를 각각 분석해서 각각의 최적 변수를 선택하면 된다. 74 <그림 0-48> 단기 변수와 중기, 장기 변수와의 관계 <그림 2-48>는 X축을 단기 변수로 설정하고 각 중기 변수 별, 장기 변수 별 총 손익의 위치를 전수 도표 표시한 차트다. 왼쪽은 단기 대 중기, 오른쪽은 단기 대 장기 변수이다. 포인트 차트는 점들이 수익이 높은 상태에서 모여있 으면(편차가 적다) 유용한 변수가 된다. 왼쪽 그래프에서는 전반적으로 각각의 단기 변수 대비 중기 변수들의 편차가 큰 편인데 단기 변수 5~25 변수가 유용한 변수라 할 수 있다. 오른쪽 그래프 는 장기 변수대비 상당히 안정적이면서 높은 수익을 내는 변수 대가 보인다. 이 구간은 단기 변수 5~25 이다. 결론적으로 단기 변수는 5~25 사이가 최적의 변수가 된다. <그림 0-49> 중기 변수와 단기, 장기 변수와의 관계 <그림 2-49>의 왼쪽 그림이 중기 변수 대비 단기 변수 그래프이고 오른쪽은 중기 변수 대비 장기 변수이다. 중기 대 단기에서는 20, 30, 중기 대 장기에 선 20, 30, 40 이 변수가 최적 변수로 선택 된다. <그림 0-50> 장기 변수와 단기, 중기 변수와의 관계 <그림 2-50> 장기 변수 대비 왼쪽은 단기, 오른쪽은 중기 변수를 나타낸다. 그림에서 보면 50, 60의 변수가 최적의 장기 변수임을 알 수 있다. 따라서 단기 변수는 5 ~ 25, 중기 변수는 20 ~ 40, 장기 변수는 50 ~ 60 이 된다. 즉 앞서 <표 2-14> 에서 15.30,60 과 10,40,50은 최적의 변수 조합이 되며, 이중 총 손익이 큰 15,30,60 이거나, 장단기 조합을 고려한 10,30,60 이 최적 변수 조합이 된다. 최적화 과정은 필요 악 이라 할 수 있다. 실제로 시스템 개발하는 전문가들은 되도록이면 최적화 하기를 꺼려한다. 하지만 생략할 수 없는 과정이다. 앞으로 평가 및 최적화에 대해서 좀더 깊은 내용은 뒤에서 자세히 연구하도록 하자. 8. CT를 이용한 실전 매매 이제 모든 준비가 되었다. 과거 테스트를 통하면서 시스템 매매 전략을 만들 었다. 이제 실제 매매에 적용하면 된다. 그러기 위해서는 온라인 모드에서 다 76 시 한번 매매 전략에 오류가 있는지, 차트 구성에 문제 없는지를 검증해보아 야 하며 실제매매에 들어가기 전에 일정기간 동안 가상매매(paper trading)를 해보는 것이 바람직하다. 간단히 흐름도를 만들어 보면 다음과 같다. <표 0-15> 실전 매매 흐름도 단계 1: 온라인 모드로 전환 단계 2: 저장된 차트를 재 생성 단계 3: 실시간 검증(차트 구성 및 오류 체크) 단계 4: 가상 매매 단계 5: 실전 주문 종류 선택(자동, 반자동 주문) 단계 6: 실제매매와 가상매매 비교 분석, 모니터링 윈도우 활용 (1) 온라인 모드 및 실시간 검증 온라인 모드로 전환하고 난 뒤 다시 차트를 불러오고, 실시간에서 매매 포인 트 및 신호, 지표가 생각한 대로 잘 구현되는지를 검증하게 된다. 실제로 주 문이 나갈 수 있는 단계로 여기서 오류를 처리하지 못하면, 실전 매매에서 실 제로 문제가 발생하게 된다. 이렇게 확인 과정을 거치면서 전략식 코딩이 길어지거나 제어문이 많이 들어 가면, 시스템의 속도가 저하되므로 이경우 신호, 지표 등은 사용하지 않는 것 이 바람직하다. 온라인 모드에서는 선물일 경우 두 가지 지수(연결선물지수, 근월물 지수)를 모두 사용할 수 있고, 주문이 가능하다. <그림 0-51> 온라인 모드 모니터링 윈도우 실제 주문을 설정할 차트 이 두 가지 지수를 사용할 수 있지만, 만기일에서는 다소 주의를 요한다. 즉 연결 선물 지수의 경우에는 만기일에 차 근월물로 치환된다. 데이트레이딩일 경우에는 문제가 되지 않으나, 단기 매매 이상의 매매에서는 근월물 포지션이 남아있게 된다. 따라서 근월물을 강제 청산해야 하고, 차 근월물을 신규 포지 션으로 잡아야 한다. 반면 근월물 지수를 사용할 경우에는 만기일까지 지수가 유지된다. 따라서 만 기일에도 근월물 주가를 이용해서 매매를 할 수 있게 된다. 그러나 단기 매매 이상의 매매에서는 차 근월물이 없는 상태가 되어 차 근월물 차트를 따로 생 성해서 매매를 하는 수 밖에는 없다. 되도록이면 분간이든 일간이든 연결 선물 지수를 사용하는 것이 바람직하며, 단기 매매 이상에서 만기 청산에 대한 전략이 포함되어 있지 않다면 강제 청 산, 재 진입을 수동으로 해야 한다. 78 (2) 가상 매매 그러면 이제 매매전략의 오류 등이 수정되었다면 가상매매를 시행한다. 가상 매매란 실제 주문을 내지 않는 상태에서 실시간으로 매매 포인트, 수익 등을 확인하는 과정이다. 실제로 전략을 적용하여 수익이 발생하지 않고 예상외의 손실이 크게 발생한 다면, 실전 매매를 할 수 없는 전략일 것이다. 이런 현상이 발생하는 이유는 전략이 과 최적화 되었거나, 현재 자신의 전략이 수익이 안 나는 구간이기 때문이다. 문제가 되는 것은 과 최적화다. 과 최적화의 경우 전략 자체가 문제점을 가지 고 있기 때문에 전략의 전면적인 수정이 필요하게 된다. 또한 여기서 추가적인 매매 아이디어를 개발할 수도 있다. 그러면 다시 매매 아이디어를 추가해서 과거 테스트, 가상매매를 시행한다. (3) 실전 매매 가상 매매에서도 만족스런 결과를 보인다면, 이제 실전 매매를 시행한다. 실 전 매매에서 가장 중요한 부분은 주문 방법을 설정하는 것이다. 주문 방법은 전략 속성창의 [기본설정]에서 설정한다. 수동 주문: 주문 발생 신호나 알람을 듣고 실제 주문 창을 이용한 주문 반자동 주문: 주문 발생시 알람 창이 뜨고, 한번 확인 버튼을 눌러 주문하는 형태 자동 주문: 자동으로 주문이 발생함 이러한 설정은 매일 반복적으로 시행해야 한다. 좀더 자세한 내용을 알아보자. 우선 <그림 2-52>에서 자동주문을 선택하였다면 매수진입가, 매수청산가, 매 도 진입가, 매도 청산가를 몇 호가 위나 아래로 할 것인가를 결정한다. 시스 템 트레이딩은 체결이 우선이다. 따라서 매수 2호가 이상을 설정하는 것이 바 람직하다. <그림 0-52> 전략속성 <표 0-16> 신규 적용 및 연속 적용 시스템상 현재 포지션 매수 1계약이 있는 경우 매도 1계약이 있는 경우 전략적용 후 처음 발생한 매매신호 신규 적용 연속 적용 매수청산: 실행 안됨 매수청산: 1계약 매수청산 매도: 1계약 매수 청산 매도: 매수청산, 1계약 매도 매도 청산: 실행 안됨 매도 청산: 1계약 매도청산 매수: 1계약 매도 청산 매수: 매도 청산, 1계약 매수 그 다음으로 연속 적용, 신규 적용을 선택한다. 신규 적용은 현재 시스템 상 80 포지션이 있더라도 무시하는 경우이며, 연속 적용은 시스템 상의 포지션을 인 식하게 된다. 그러므로 상황에 맞게 <표 2-16>처럼 적절하게 조정해야 한다. (4) 실전매매와 시뮬레이션 리포트 비교 분석 <표 0-17> 과거 테스트 결과와 실제 매매 결과 구분 거래일 시뮬레이션(슬리피지 1틱) 주문 유형 거래내역(실제매매) 손익차 진입가 청산가 손익 진입가 청산가 손익 9. 1 매수 98.3 98.15 -75,000 98.25 98 -125,000 50,000 9. 2 매수 98.7 98.6 -50,000 98.65 98.5 -75,000 25,000 9. 2 매수 98.92 98.5 -210,000 98.9 98.6 -150,000 -60,000 9. 3 매수 99.19 98.75 -220,000 99.15 98.75 -200,000 -20,000 9. 3 매도 98.53 98.85 -160,000 98.7 98.85 -75,000 -85,000 중략 9. 29 매도 88.95 89.45 -250,000 89.05 89.45 -200,000 -50,000 9. 30 매수 90.59 90.62 15,000 90.55 90.62 35,000 -20,000 9. 30 매도 90.07 89.8 135,000 90.1 89.7 200,000 -65,000 주) 단위: 원, P 이 과정은 과거 테스트를 너무 보수적으로 했는지, 과소하게 했는지 등을 분 석하는 과정이다. 일반적으로 과거 테스트를 하는 과정에서 슬리피지를 주는 데, 실제로 매매에서는 설정한 슬리피지 보다 더 비용이 발생할 수 도 있고, 적게 발생할 수도 있다. 따라서 비교 검증을 통해서 조절해주는 과정을 거치 는 것이 바람직하다. <표 2-17>과 같은 비교표를 통해 일정기간 동안의 실제매매의 손익과 시뮬레 이션손익을 비교하여 차이가 발생하는 만큼 슬리피지를 조정하면 보다 정확한 결과를 얻을 수 있다. (5) 기타 모니터링 윈도우를 통해서 CT에서 발생하는 모든 주문의 결과를 한눈에 파악 할 수 있다. 상당히 유용한 기능으로서 실전 매매에서 사용하길 권장한다. <그림 0-53> 82 제 3 장 시스템 트레이딩 따라하기 투자의 핵심 원칙: 고수익은 고위험을 감수해야 얻을 수 있다. (High Risk, High Returns) 이 장에서는 제 2장에서 설명한 전략 개발과정에 따라 매매 전략을 개발하기 위한 코딩 및 평가 등을 해보는 부분이다. 초보자라면 이 장을 통해서 매매 전략이 어떻게 만들어지는가를 이해하게 될 것이다. 시스템 트레이딩의 가장 관심이 되는 선물을 이용한 데이트레이딩 전략과 단 기 매매 전략에 중점을 두어 설명하기로 하겠다. 우선 시스템 트레이딩 매매 전략을 개발하는 과정에서 몇 가지 알아두어야 할 사항이 있다. 진입이나 청산, 자산 관리에서 공통적으로 많이 사용되는 함수식, 기본언어 등이 그것이다. 개발 과정에 들어 가기 전에 이 부분부터 알아보기로 하자. 1. 꼭 알아 두어야 할 것들 시스템 트레이딩 전략은 가격 및 거래량을 이용한 매매 전략들이 많은 편이다. 따라서 분간 차트를 이용하든지 일간 차트를 이용하든지, 가격 및 거래량을 표현하는 방법을 아는 것이 중요하다. <표 0-1> 가격 표시 방법 구분 해당 봉 일간 기준 주간 기준 월간 기준 년간 기준 시가 Open OpenD OpenW OpenM OpenY 고가 High HighD HighW HighM HighY 저가 Low LowD LowW LowM LowY 종가 Close CloseD CloseW CloseM CloseY 거래량 Volume VolumeD VolumeW VolumeM VolumeY 분봉, 일봉에서 분봉, 일봉, 주 분봉, 일봉, 주 분봉, 일봉, 주 사용 봉에서 사용 봉, 봉, 월봉, 년봉 비고 사용 월봉에서 에서 사용 예 1) 분봉에서 전일의 일봉 종가가 일봉 시가보다 크고, 오늘의 시가 보다 현재 봉의 종가가 크면…… if closed(1) > opend(1) and close > opend then 예 2) 일봉에서 전주의 종가가 시가보다 크고, 금주의 현재 고가가 전주의 고가보다 크면…… if closew(1) > openw(1) and high > highw(1) then 위와 같은 규약에 따라서 각각의 시간대뿐만 아니라, 각 주기별 주가 및 거래 량을 짧은 주기(일봉 주가를 분봉에서 활용)에 편리하게 적용할 수 있게 되어 있다. 분 차트를 이용한 매매전략에서도 그 다음 긴 주기(일봉)의 가격을 참 조하는 방법은 매매 전략을 작성할 때 자주 사용되는 방법으로서 <표 3-1>의 내용을 기억하기 바란다. 2 그 다음으로 주가 변화의 크기인 변동성(volatility)을 많이 이용하게 되는데, 주로 ATR, Range 등이 사용된다. 전략을 개발할 때 자주 사용되는 개념으로서 필히 알아두어야 한다. (1) 변동성(Volatility) 측정 지표 변동성이란 주가의 상승, 하락 방향성에 관계 없이 진폭만을 고려한 것으로 옵션에서는 아주 중요한 변수로 사용된다. 시스템 트레이딩에서도 자주 사용 되며, 매매 전략을 가격 변동에 따라 변화되게 끔 만들어주는 요소이다. 즉 변동성을 고려하게 되면 일률적인 적용에서 벗어나게 되며, 변동성의 크기에 따라 가변적(adaptive)으로 변화시킬 수 있게 된다. 가장 기초적으로는 고가(high) – 저가(low)의 거리를 이용한 Range 가 있다. 1) Range 레인지(Range) 는 [고가–저가]를 말한다. 주로 이동평균 시킨 값을 사용하게 되는데, CT언어로 표시하면 다음과 같다. <수식 0-1> Range 단순 이동평균식 CT 영역: 지표 이름: Arange(Average Range) Input: len(10) Var1=high-low ‘ 고가 - 저가를 var1에 저장 Var2=mov(var1, len, s) ‘ var1을 10일 단순 이동평균 시켜서 var2 에 저장 Call ploti1(“Arange”, var2) ‘var2를 지표로 표현 레인지값이 크면 변동성이 크다는 의미이고, 값이 적으면 변동성 적다는 의미 가 된다. 그 다음으로 더욱더 유용하게 사용되는 변동성 측정 지표로서는 TR(true range)과 ATR(average true range)이 있다. 2) TR, ATR ATR은 TR을 이동평균하는 개념으로서 TR을 먼저 이해해 보자. TR은 두 봉의 최대 거리를 표현하는 것이다. <그림> 0-1 TR TR TR TR n o p ① 현재의 고가 – 저가 ② 전 봉의 종가에서 현재의 고가 거리 ③ 전 봉의 종가에서 현재의 저가 거리 Î ①, ②, ③ 중 최대 값 = TR(True Range) 주) 관련 책자 및 저자: “New concepts in technical trading systems”, Welles j. Wilder, JR. 개발자(Wilder)는 TR에서 ATR을 계산할 때 지수 이동평균법(Exponential moving average method)과 유사한 방법을 사용하였다. 따라서 사이보스 트레 이더에서는 원전에서의 계산방식을 그대로 사용하였으나, TR을 단순 이동평균 하여 ATR을 계산하는 방법을 사용해도 무방하다. 이 2가지 방법은 다음과 같 이 코딩할 수 있다. <수식 0-2> ATR(Wilder방식) CT 영역: 지표 이름: ATR(Average True Range) Input: len(10) Var1=max(high, close(1)) - min(low, close(1)) ‘ TR 계산, var1에 저장 Var2=(var2(1)*(len-1)+var1)/len ‘고전적인 방법으로 ATR 계산, var2 에 저장 Call ploti1(“ATR”, var2) ‘var2를 지표로 표현 4 <수식 0-3> ATR(단순이평방식) CT 영역: 지표 이름: ATRS(Average True Range Simple) Input: len(10) Var1=max(high, close(1)) - min(low, close(1)) Var2=mov(var1, len, s) ‘ TR 계산, var1에 저장 ‘ var1을 10일 단순 이동평균 시켜서 var2 에 저장Î ATRS Call ploti1(“ATRS”, var2) ‘var2를 지표로 표현 ATR 이나 ATRS 역시 값이 크면 변동성이 크다는 것을 의미하고, 적으면 변동 성이 낮은 상태라는 것을 나타낸다. 그 다음으로 옵션에서는 아주 중요하게 사용되는 역사적 변동성(historical volatility) 이 있다. 3) 역사적 변동성(historical volatility) 역사적 변동성은 자연로그를 취한 종가 변화의 표준편차를 이용해서 변동성을 측정하는 방법이다. 주로 일간 차트에서 활용되는데 식은 다음과 같다. <수식 0-4> 역사적 변동성 CT 영역: 지표 이름: Historical Volatility Input: len(10) If close(1)>0 And close>0 Then ‘ 0으로 나누는 오류 방지 Var3=log(close/close(1)) ‘ 로그 수익률 계산 End If Var4=stdev(Var3, len, 1)*sqr(365) ‘표준편차 X 365 Call ploti1("historical volatility", Var4) 역사적 변동성 역시 값이 크면 변동성이 크다는 의미이고, 값이 작으면 변동 성이 작다는 의미이다. 여기서 Range, ATR, Historical Volatility를 일간 연 결 선물 지수에 적용하여 변동성의 의미를 파악해보기로 하자. <그림 0-2> 변동성 측정지표 높은 변동성 구간 낮은 변동성 구간 주) 기간 값: 10일, 연결선물지수 일간 차트 위 그림을 보면 모두다 가격 변동성을 잘 표현해주고 있다. 즉 주가가 상승하 거나 하락하는 것에 관계없이 가격 진폭이 증가하면 지표들 값이 상승하고, 진폭이 감소하면 하락하는 특징을 나타내고 있다. 이중 Range, ATR, ATRS의 흐름은 유사함을 알 수 있다. Historical Volatility 의 경우 급변 모형(sharp move)이 남아 있는 형태로서 시스템 트 레이딩에서 변동성을 추세적으로 판단하기 위해서는 잘 사용되지 않는다. 가 장 일반적으로 사용하는 지표는 ATR 이거나 ATRS 이다. 그 다음으로 이 책자에서는 대부분의 전략이 앞서 설명한 주문유형 중 Atstop 주문 유형으로 되어있는데 그 이유에 대해 알아보자. (2) Atstop 주문의 유용성 CT 주문 유형은 크게 Atmarket주문과 Atstop주문, Atlimit주문으로 구분된다. 6 이중에서 가장 유용하게 사용되는 주문 유형이 Atstop주문 유형이다. 우선 Atlimit주문과 Atstop주문 유형을 비교해보면, 매수의 경우 Atlimit는 지정가 주문(일정가격 이하이면 매수)으로서 역추세적인 진입 방법에서 자주 사용되는 주문 형태이다. Atstop은 “일정가격 이상이면 매수 하라”라는 확인 매수 형태이다. 매매 전략에 따라 차이는 있지만, 확인매매인 Atstop 형태가 시스템 효율성 증대 및 테스트 결과를 향상시키는 장점이 있어 Atstop 주문 형태가 좀더 유용하다고 할 수 있다. 1) Atstop과 Atmarket주문의 비교 <수식 0-5> Atstop 주문의 유용성 영역: 전략 이름: StopAtmarket_Test Input: len(60), method(1) If method=1 Then ‘ method 가 1 이면 If crossup(close, mov(close, len, s)) Then ‘종가가 이동평균선을 상향 돌파하면 Call buy("매수", Atmarket) ‘ 그 다음봉에 시장가 매수 하라 End If If crossdn(close, mov(close, len, s)) Then ‘ 종가가 이동평균선을 하향돌파하면 Call sell("매도", Atmarket) ‘ 그 다음봉에 시장가 매도하라 End If Else ‘ method 가 1 이 아니면 If close(1)>mov(close, len, s, 1) Then ‘ 전봉 종가가 전봉 이동평균선 보다 크면 Call buy("매수", Atstop, Def, high) ‘ 현재 봉 고가를 다음 봉이 돌파하는 시점에서 End If ‘ 매수 하라 If close(1)<mov(close, len, s, 1) Then ‘ 전봉 종가가 전봉이동평균선 보다 적으면 Call sell("매도", Atstop, Def, low) ‘ 현재 봉 저가를 다음 봉이 하향 돌파하는 End If ‘ 시점에서 매도하라. End If 예를 들어, “주가가 이동평균선을 상향돌파하면 매수하라”가 Atmarket 주문 형태이고 “주가가 이동평균선보다 커지면 돌파시점 이후의 고가를 돌파할 경 우에만 매수하라”가 Atstop 주문 형태이다. <수식 3-5>를 보면 method를 1로 입력하면 Atmarket주문 형태를 테스트 하게 되며 method를 1이외의 숫자를 입력하면 Atstop 형태의 주문을 테스트 하게 된다. 실제로 일간 연결선물지수를 이용해서 두 가지 주문 형태에 대해 테스 트를 해보자 <그림 0-3> Atmarket 주문일 경우 주) 연결선물지수 일간 차트: 이동평균선 60일, method: 1 <그림 0-4 > Atstop 주문일 경우 주) 연결선물지수 일간 차트: 이동평균선 60일, method: 2 8 <그림 3-4>을 보면 <그림 3-3>과 다르게 매수주문이 종가가 이동평균선보다 커진 뒤에 다시 가격이 고가 돌파가 발생하면 매수하는 것을 알 수 있다. 반 대의 경우에는 매도가 발생한다. 따라서 <그림 3-3>에서 발생하던 반복적인 속임수 매매가 제어됨을 알 수 있다. 이 두 가지 주문 방법의 테스트 결과는 다음과 같다. <표 0-2> 테스트 결과 비교 분석 평가 항목 총 손익 Atmarket 비 교 Atstop 52,322.30 < 70,558.91 평균 손익 545.02 < 1,720.95 최대 손실 -4,607.13 < -4,860.01 총 매매수 96 > 41 연속 이익 매매수 3 = 3 연속 손실 매매수 12 > 4 최대 자본 인하액 -20,454.44 < -13,929.59 승률 23.96 < 41.46 손익비 1.55 < 2.30 평균손익비 4.92 > 3.25 보상 비율 2.56 < 5.07 주) 단위: 천원, 테스트 기간: 1996. 04. 15 ~ 2003. 12. 02, 필수적으로 보유할 바 수: 50 <표 3-2>를 보면 전체적으로 Atstop이 속임수 매매가 적으면서도 더 많은 수 익을 발생한 것으로 분석되어 Atstop 이 Atmarket 보다 유용한 주문 형태 라 는 것을 알 수 있다(더 나아가 이동평균20~100일까지 최적화를 한 결과에서도 Atstop 주문이 유용함을 알 수 있었다). 결론적으로 Atstop 주문 형태가 자체적으로 속임수 매매를 제어하는 필터를 포함하게 되고, 봉 중간에 진입하는 즉시성을 가지고 있는 유용한 주문 방법 임을 알 수 있을 것이다. 전문적으로 Atstop 주문 형태를 “Setup “과 “Entry” 로 구분하는 방법이라 한다. 2) Setup 과 Entry 셋업(Setup)과 진입(Entry) 방법은 특히 기술적 지표를 이용한 매매전략에서 매매신호(event)가 발생하면 바로 진입하는 것이 아니라, 이를 셋업으로 정의 하고 실제 주문은 가격으로 확인하는 방법을 말한다. 예를 들어 “스토케스틱 이 신호선을 돌파하면 Setup 상태가 되고, 진입(Entry)은 3봉 고가를 상향 돌 파하면 매수” 와 같이 사용하는 것을 말한다. Charlie F. Wright의 “Trading as a Business” 에서 이러한 부분을 자세히 설 명하고 있는데, 셋업과 진입에 대하여 몇 가지 정리해보면 다음과 같다. 셋업과 진입의 종류(매수 경우) 셋 업 진 입 단기 이동평균선이 장기 이동평균선보다 현재 고가를 다음 봉이 돌파하면 매수 커지면 ADX 지표가 상승 추세이면 3봉 고가를 다음봉이 돌파하면 매수 주가가 주가 채널을 벗어나기 시작하면 3봉 저가가 현재 저가라면 다음 봉이 현재 고가를 돌파하면 매수 RSI, 스토케스틱 지표가 과매도(30) 구간 swing high 포인트를 상향 돌파하면 매수 에 들어가면 상승 갭이 전일 고가 이상으로 발생하면 3봉 연속 종가 상승이 발생하면 다음 봉이 현재 고가를 돌파를 할 경우에 매수 따라서 이 책에서는 거의 모든 전략이 셋업과 진입으로 구분되며, 주문 유형 은 Atstop 방법을 사용할 것이다. 이 이외에도 시간 함수 및 주문 횟수 제어, 전략 함수 사용 방법 등 기초적으 로 알아야 할 부분들이 많지만 이러한 부분들은 실제로 따라 하기를 진행하면 서 이해하도록 하자. 여기까지가 전략 개발하기 전에 알아두어야 할 내용들이다. CT 가격 함수 및 변동성, Atstop 주문의 유용성 등은 앞으로 전략을 개발할 때 필요한 기초 지 식이 될 것이다. 그러면 이제부터 데이트레이딩 전략을 개발해 보도록 하자. 10 2. 데이트레이딩 Jake Bernstein 의 “The Complete Day Trader” 에서는 데이트레이딩의 장점에 대해 다음과 같이 기술하였다. 왜 데이트레이드 인가? (Why Day Trade?) 자본을 최대한 활용할 수 있다(maximized equity): 오버나잇을 하면 마진콜 등 에 대비한 추가 증거금을 설정해야 하는데, 데이트레이딩은 이러한 오버나잇 위 험이 없어 자본을 최대한 활용할 수 있다. 위험 노출을 줄일 수 있다(reduced risk exposure): 그 다음날 시가갭의 위험에 노출될 위험을 없앨 수 있다. 강제 청산의 유용성(advantage of forced exit): 50% 승률이라도 오버나잇의 경 우 정확한 가격에 청산을 할 수가 없다. 하지만 연속적인 데이터를(open gap이 없는) 사용하는 day trading은 빠르고 정확한 가격 청산이 가능하다. 신호의 신뢰성(reliability of timing signals): 많은 시스템 트레이딩 신호는 긴 시간대보다 짧은 시간대에서 더 신뢰성이 크다. 빠른 회수가 가능하다(immediate feedback): 수익획득이나 손실이 빠른 시간내 에 확정되며, 매매전략의 수정 또한 빠르게 진행 할 수 있다. 빠른 개발이 가능하다(faster development time): 포지션 트레이딩 보다 빠른 개발과 테스트가 가능하다. 제 2 장에서 설명한 바와 같이 데이트레이딩은 하루 중에 매매 포지션을 완전 히 청산하는 방법을 사용한다. 그 이유도 설명하였는데 매매 포지션을 그 다 음날로 가져 간다는 것은 오버나잇 위험(시가갭)를 감수하겠다는 것으로서, 데이트레이딩에서는 오로지 장 중 위험만을 감수하고 장중 수익만을 획득하는 것이 목적이므로 절대 허용되지 않는다. 선물이나 옵션 등 파생 상품 매매에서는 데이트레이딩이 일반적이다. 그 이유 는 역시 오버나잇 위험이 크기 때문이다. 현물 시장에서는 미수가 발생하지 않는 경우에 오버나잇 이후 손실이 발생한 다면 오랜 기간 동안 보유(holding)하는 경우로 전환되어도 무방하다. 하지만 선물, 옵션 시장은 매매 증거금(margin)이 낮아 레버리지를 높여 수익 극대화 를 도모하는데, 당일 결제이기 때문에 오버나잇을 하여 손실이 발생하게 되면, 마진콜(margin call)이 발생하여 반대매매를 당할 수 있기 때문이다. 여기서 선물/옵션의 수익 구조에 대해 간단한 예를 통해서 살펴보자. 현재 선 물이 100포인트라 가정하자. 상승을 기대하고 1 계약을 매수할 경우 필요한 증거금은 100*1*500,000*0.15 = 7,500,000 원이 된다. 그런데 초기 증거금이 현재 규정상 15,000,000 원이 필요하므로 15,000,000 원으로 1계약을 100 포인트에 매수하게 된다. 이때 실 제로 매수한 금액 50,000,000 원이다. 다음날 선물가격이 5% 상승하여 105 포인트가 되었다. 따라서 105 에 매수청 산을 하였다면 매매금액은 52,500,000 원이 되어, 수익은 52,500,00050,000,000=2,500,000원이 발생한다. 투자 금액 대비 수익률은 2,500,000/15,000,000원 *100= 16.67%로 선물가격이 5% 상승함에 따라 투자금 액 대비 수익은 16.67% 발생하게 된다. 이러한 레버리지 효과로 인해 선물매 매는 상당히 매력적인 투자 방법이 된다. 반대의 경우를 생각해보자. 그 다음날 5% 하락하였다. 그러면 95 포인트가 되 고 손실은 50,000,000-47,500,000=2,500,000원이 되며 투자 금액 대비로 보면 2,500,000/15,000,000원으로 16.67% 손실이 발생하게 된다. 따라서 매수 청산 을 하였다면 12,500,000 원이 투자금액이 되어 추가 자금이 필요하게 된다. 옵션의 경우는 더하다. 주가지수 옵션의 경우 그 다음날 투자금액에 2~3 배 수익이 발생할 수 도 있고, 50 ~ 80% 이상 손실이 발생할 수 있다. 따라서 장중 매매로 충분히 수익이 발생할 수 있는 구조를 가지고 있는 것이 12 선물, 옵션 시장이기 때문에 투자자금이 적거나, 투자 경험이 적은 투자자뿐 만 아니라 전문투자자 들도 데이트레이딩을 선호하게 된다. 데이트레이딩은 장중 변동 및 방향성을 이용해서 수익을 발생시키는 매매 방 법이다. 장중 변동성이 크고 방향성도 한 방향으로 진행하면, 추세적인 매매 방법으로 수익을 발생시킬 수 있다. 반대로 장중 변동성이 크고 추세가 없으면, 역추세적인 매매 전략이 수익을 발생 시킬 수 있다. 그러나 장중 변동성이 적으면, 수익 폭이 적거나 손실이 발생할 확률이 크므로 매매를 자제하는 것이 바람직하다. <수식 0-6> 장중 추세 분석 지표 영역: 지표 이름: 추세 Input: len(10) If open<=close Then ‘종가가 시가보다 크거나 같으면(양봉이면) Var30 = high-open Var31=0 Else Var31=low-open Var30=0 ‘고가-시가를 var30에 할당 ‘var31에는 0을 할당 ‘ 종가가 시가보다 작으면(음봉이면) ‘ 저가 – 시가를 var31에 입력 ‘ var30 에는 0을 입력 End If Call ploti1("up", mov(Var30, len, s)) ‘var30의 단순 이동평균선을 표시 Call ploti2("dn", mov(Var31, len, s)) ‘ var31의 단순 이동평균선을 표시 그러면 선물 가격은 변동성과 어떤 관계인가? 앞서 설명한 바와 같이 변동성 을 분석하는 지표는 ATR(average true range)를 보면 알 수 있고, 추세는 이 동평균선을 통해서 파악할 수 있을 것이다. 추가로 장중 추세를 분석하기 위 해서 장 중 수익구조 지표를 만들어서 분석해보자 <수식 3-6> 는 장 시작할 때 시가를 기준으로 양봉이면 시가에서 고가까지를 매 수 힘으로 판단하고, 음봉이면 시가에서 저가까지를 매도 힘으로 판단하여 표시 하는 지표이다. 그러면 일간 연결 선물 지수에 표시를 하여 분석을 해보자 <그림 0-5> 과거 변동성 및 추세 분석 주) 연결선물 지수 일간 차트, 분석기간: 2001. 1 ~ 2003. 12 <그림 3-5> 는 제일 위에 ATR(10)과 ATR(30)을 동시에 표시하였다(굵은 선이 30) 중간에는 연결선물지수에 50일 단순 이동평균선을 표시하였다. 세 번째는 장중 추세 지표를 적용하였다. 0선 위는 시가에서 고가까지를 나타내고 0선 아래는 시가에서 저가까지를 나 타낸다. CT에서 제공하는 분데이터는 2000년 1월 4일부터 이므로 2000년 이후 를 분석해보면 그림에 표시된 것과 같이 ①, ②, ③, ④번 구간으로 나누어 질 수 있다. <표 0-3> 과거 변동성 및 추세 분석 구간 ATR 이동평균선 장중 추세 지표 ① >2, 높은 수준 하락 추세 높은 수준 ② <2, 낮은 수준 추세 없음 낮은 수준 ③ >2, 높은 수준 상승 및 하락추세 높은 수준 ④ <2, 낮은 수준 상승 추세 낮은 수준 14 ①, ③구간은 추세가 있으면서 변동성도 크고, 장중 추세도 큰 상황으로서 데 이트레이딩이나 단기매매에서 수익이 발생할 것을 예상할 수 있다. 반면 ②번 구간은 추세가 없고 장중 변동성도 낮은 수준으로서, 단기매매나 데이트레이 딩으로서 수익이 발생할 가능성이 적은 구간임을 알 수 있다. ④번 구간은 2003년 4 월 이후 상승추세 구간임에도, 변동성 및 장중 추세가 낮은 수준의 구간이다. 즉 상승추세로서 오버나잇을 통한 수익 창출은 가능하 지만, 데이트레이딩으로는 수익을 발생하기 힘든 특이한 구간임을 알 수 있다 (2003년 10월 이후에는 상승추세와 변동성, 장중 추세가 다시 증가하고 있어 데이트레이딩 가능 구간으로 바뀌고 있다). 따라서 데이트레이딩 전략을 테스트하면 ②, ④ 번 구간에서 수익이 발생하지 않 고 드로다운(연속손실)이 발생할 것이라 것을 예상할 수 있다. 특히 일반적으로 범용적(robust)인 데이트레이딩 전략은 대부분 돌파 전략이거나, 변동성 확대 (volatility expansion) 전략이다. 즉, 추세가 발달하는 방향으로 매매하는 추세 추종적인 형태의 전략이므로, ②, ④ 번 구간에서 수익 감소가 발생할 것이다. 이러한 현상을 잘 기억해야 한다. 왜냐하면 전략을 개발하다 보면 ②, ④번 구 간에서 수익이 발생하는 매매 알고리즘을 찾을 수 있을 것이고, 그렇게 된다면 기존의 매매 전략에 결합하여 상당히 시스템 효율성이 향상될 것이기 때문이다. 간단하게 각 구간별 대응 전략을 정리하고 이제부터 본격적으로 데이트레이딩 전략을 작성해보자. <표 0-4> 각 구간별 대응 전략 구간 대응전략 ① 숏텀, 데이트레이딩, 추세추종적인 돌파 전략 ② 데이트레이딩만 사용, 역 추세적인 매매 형태 적합 ③ 숏텀, 데이트레이딩, 추세추종적인 돌파 전략 ④ 숏텀 트레이딩과 데이트레이딩 전략을 동시에 사용 추세추종적인 돌파 전략에 역 추세적인 매매 가미 (1) 진입(Entry) 시장에 진입하는 의사 결정은 대부분 가격이나 거래량, 지지 및 저항선, 기술 적 지표 등에 의한다. 다양한 진입 방법은 4장에서 다루기로 하자. 여기서는 시가, 종가의 관계와 전일의 Range(high-low)간의 관계를 이용한 전략을 알아 보자. <그림 0-6> 매수의 경우 100 (%) n 90 80 70 수익확률 60 o 50 > 0 포인트 > 0.5 포인트 > 1 포인트 > 1.5 포인트 > 2 포인트 40 30 20 10 p q 0 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 -10 시가-저가/변동폭 (금일시가-금일저가)/전일 변동폭 <그림 3-6>은 금일 매수포지션을 취할 때 전일 변동폭(전일고가-전일저가) 대비 금일의 매도힘(금일시가-금일저가)의 비율(x축)에 따라 발생 가능한 수 익별 확률(y축)을 표현한 그래프이다. 수익규모에 따라 5가지로 나누었다. 은 0포인트이상, 는 0.5포인트이상, S는 1포인트이상, 는 1.5포인트이상, 은 2포인트이상 수익이 발생한 확 률을 의미한다. 그래프의 해석은 다음과 같다. 1은 금일 장 시작시 매수하여 종가청산 할 경우, 금일의 매도힘이 전일 변동 폭대비 0.05 미만이면, 0포인트 이상 수익이 발생할 확률은 98%라는 것이다. 16 2는 금일 장시작시 매수하여 종가청산 할 경우, 금일의 매도힘이 전일 변동 폭대비 0.2 이상 0.25미만인 경우 0포인트 이상 수익이 발생할 확률은 48%라 는 것이다. 3은 금일 장시작시 매수하여 종가청산 할 경우, 금일의 매도힘이 전일 변동 폭대비 0.2이상 0.25미만인 경우 1포인트 이상 수익이 발생할 확률은 18%라는 것이다. 4은 금일 장시작시 매수하여 종가청산 할 경우, 금일의 매도힘이 전일 변동폭 대비 0.05미만인 경우 2포인트 이상 수익이 발생할 확률은 19.5%라는 것이다. 그래프를 종합적으로 보면, [금일매도힘/전일 변동폭] 즉 X축 값이 1에 가까 워 질수록 매수시 수익이 발생할 확률이 급격히 줄어든다(<그림 3-6>에서 x축 의 값이 1에 가까워질수록 수익확률이 0에 수렴한다). [금일매도힘/전일 변동 폭]이 일정할 경우 수익이 크게 발생할 확률은 현저히 감소한다(수직선). 즉, 금일 시가대비 금일저가가 전일의 변동폭의 일정수준 이상 하락하는 경우 (매도힘이 전일 변동폭 대비 커질수록) 금일 종가는 금일 시가 이상에서 형성 되기 힘들다(매수 후 수익실현이 어렵다)는 것을 알 수 있다. 매도의 경우도 살펴보자. <그림 0-7> 매도의 경우 100 (%) 90 > 0 포인트 > 0.5 포인트 > 1 포인트 > 1.5 포인트 > 2 포인트 80 수익확률 70 60 50 40 o n 30 20 10 p 0 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 -10 (금일고가-금일시가)/전일 고가-시가/변동폭 변동폭 <그림 3-7>은 매도의 경우로서 발생가능 한 수익별 확률(y축)을 전일변동폭 대비 매수힘(금일고가-금일시가)의 비율(x축)에 따라 표현한 그래프이다. 1은 금일 장 시작시 매도하여 종가청산 할 경우, 금일의 매수힘이 전일변동 폭 대비 0.15이상 0.2미만인 경우 0.5포인트 이상 수익이 발생할 확률은 41% 라는 것이다. 2는 금일 장 시작시 매도하여 종가청산 할 경우, 금일의 매수힘이 전일 변동 폭 대비 0.05미만인 경우 1포인트 이상 수익이 발생할 확률은 44%라는 것이다. 3은 금일 장 시작시 매도하여 종가청산 할 경우, 금일의 매수힘이 전일 변동 폭 대비 0.55이상 0.6미만인 경우 0, 0.5, 1, 1.5, 2포인트 이상 수익이 발생 할 확률(점선)은 모두 10%를 넘지 못한다는 것이다. 매수의 경우와 같이 [금일 매수힘/전일변동폭]이 1에 가까워 질수록 매도시 수익이 발생할 확률은 급격히 줄어들며, [금일매수힘/전일변동폭]이 일정할 경우 수익이 크게 발생할 확률은 현격히 작아진다. 즉, 금일 시가대비 금일 고가가 전일 변동폭의 일정수준이상 상승하는 경우 (매수힘이 전일 변동폭 대비 커질수록) 금일 종가는 금일 시가 미만으로 형성 되기 힘들다(매도후 수익실현이 어렵다)는 것을 알 수 있다. 수익이 1 포인트 이상 발생할 확률만 가지고 표를 만들어 보면 다음과 같다. 18 <표 0-5> 수익이 1포인트 이상 발생할 확률 매 수 시가-저가/ 변동폭 매 도 건수 수익확률 고가-시가/ 변동폭 건수 수익확률 0.05 58 46.99 0.05 43 44.51 0.1 97 40.39 0.1 66 39.54 0.15 58 29.35 0.15 54 31.91 0.2 48 22.75 0.2 40 25.66 0.25 38 17.29 0.25 51 21.04 0.3 25 12.97 0.3 32 15.14 0.35 27 10.13 0.35 22 11.45 0.4 13 7.05 0.4 23 8.90 0.45 15 5.57 0.45 20 6.24 0.5 6 3.87 0.5 9 3.93 0.55 4 3.19 0.55 4 2.89 0.6 9 2.73 0.6 5 2.43 0.65 3 1.71 0.65 5 1.85 0.7 2 1.37 0.7 5 1.27 0.75 1 1.14 0.75 1 0.69 0.8 4 1.02 0.8 0 0.58 0.85 2 0.57 0.85 2 0.58 0.9 0 0.34 0.9 2 0.35 0.95 2 0.34 0.95 1 0.12 1 1 0.11 1 0 0.00 위 표를 보면 (금일시가-금일저가)/전일변동폭이 0.35를 초과하면 매수해서 수 익이 1포인트 발생할 확률이 10% 미만이며, 금일고가-금일시가/전일변동폭이 0.35를 초과하면 매도해서 1포인트 이상 수익이 발생할 확률이 10% 미만이 된다. “Long–Term Secrets to Short-Term Trading”의 저자 Larry William은 이런 분 석을 통해서 다음과 같은 결론을 도출하였다. ① 종가가 상승할 것으로 기대해서 시가보다 아주 낮은 가격에서 매수하려고 하지 마라(Don’t try to buy dips below the open on expected up close days). ② 매수 상태에서 시가보다 많이 하락하면 청산하라(If long and price fall much below the open on expected big up close days, ”Get out”). ③ 종가가 하락할 것으로 기대해서 시가보다 아주 높은 가격에서 매도하려고 하지 마라(Don’t try to sell big rally much above opening on expected large down days). ④ 매도 상태에서 시가보다 많이 상승하면 청산하라(If short and price rally much above opening on expected large down days, ”get out”). 이러한 원리를 근거로 Larry William, Pruitt 등 많은 전략 개발자들이 제시 하는 매매 전략은 시가 돌파 전략이다(예: Open-Range Breakout, Range Break, Volatility Breakout 등). 1) Range Break 전략 앞서 설명한 부분을 다른 의미로 설명하면 다음과 같다. 시가 대비 전일 변동 폭(Range)의 일정 수준이상 상승하면 종가가 시가 아래로 하락하기 힘들고, 반대로 시가 대비 전일 range의 일정 수준이상 하락하면 종가가 시가 이상이 되기가 힘들다는 이야기가 된다. 따라서 시가 대비 전일 Range의 일정 수준 이상을 돌파하면 매수, 시가 대비 전일 Range의 일정 수준 이하를 하향 돌파하면 매도하는 돌파 전략을 만들 수 있다. CT를 이용해서 전략을 만들어 보자 20 <수식 0-7> 데이트레이딩 전략(단계 1) 영역: 전략 이름: DD_Rangebreak(v 0.1) Input: len(0.3) Var1= highd(1)-lowd(1) ‘전일 Range를 var1에 입력 Call buy("매수", Atstop, Def, opend+var1*len) ‘금일 시가 + range * len 돌파 시 매수 Call sell("매도", Atstop, Def, opend-var1*len) ‘금일 시가 – range * len 돌파 시 매도 <수식 3-7>은 가장 기초적인 식이다. 위 식과 같이 작성할 경우, 데이트레이 딩이기 때문에 종가 청산을 적용해야 한다. 종가 청산은 2장에서 설명한 것처 럼 동시호가에는 청산 주문을 할 수 없다. 동시호가 바로 직전에 가능하다. 방법은 두 가지이다. 첫째는 전략 속성창에서 선택하는 방법과 코딩으로 제어 하는 방법이다. ①속성창에서 당일 청산 적용하기 <그림 0-8> 속성창에서 종가 청산 설정 전략을 연결선물지수 분간 차트 에 적용하고 과거 테스트를 할 때, 속성 설정에서 두 가지는 무 조건 결정해주어야 하는데, 첫째 는 슬리피지(Slippage)이다. 선 물의 경우 적어도 1틱(0.05 포인 트)은 설정해주어야 하며, 필수 적으로 보유해야 할 바 수를 넉 넉하게 설정해주어야 한다(제 2 장 참조). 그 다음으로 데이트레이딩일 경 우 종가 청산을 선택해서 시간을 입력하면 종가 청산이 작동하게 된다. 동시호가에 청산을 할 수 없으므로 동시호가 시작 바로 전인 15:04 분 으로 설정하면 된다. 우선 다음과 같은 순서로 속성창 설정까지 진행한다. 메뉴에서 [설정] Æ [모드 변환] Æ [오프라인 모드]로 설정하든지 처음부터 오프라인으로 접속한다. 새로운 위크 그룹을 생성하고, 연결 선물 지수 10분 차트를 생성한다. 데이터 로드는 2000년 1월 4일부터 ~ 현재까지(이 책에서는 일관성을 위해 서 2003년 9월 30일로 제한함) 전략 “RangeBreak(v0.1)을 적용한다. 이때 적용창의 “비용” 탭에서 슬리피지 적용방식을 가격에 반영, 슬리피지를 최소 변동 단위 선택과 “1”을 입력하여 0.05 포인트 슬리피지가 작동되도록 한다. “기본 설정”에서 필수적으로 보유해야 할 바 수를 50(이 전략의 경우 1 도 무방함)으로 설정하고 1 계약으로 매매하도록 한다. 주문 설정은 시험 적용으로 한다. 당일 청산을 선택하고 시간을 15:04 분으로 선택한다. 여기서 확인을 클릭하면 차트에 적용된다. 적용된 화면은 다음과 같다. <그림 0-9> 전략 적용 화면 주)10분 선물 차트, 기간: 2000. 01. 04 ~ 2003. 09. 30 22 시스템 개발을 해본 투자가의 경우 현재 코딩 오류가 포함되어 있다는 것을 바로 알 수 있지만, 초보자의 경우에는 파악하기 힘들 것 이다. 우선 코딩 오 류 등을 체크 하기 전에 전략 평가를 간단하게 해 보자(“시스템 트레이딩” Æ “시뮬레이션 보고서”). <표 0-6> 테스트 결과 평가 항목 총 손익 전 체 매 수 매 도 42,869.83 13,049.06 29,820.77 평균 손익 28.43 17.15 39.92 최대 손실 -4,263.38 -4,263.38 -1,529.01 총 매매수 1,508 761 747 연속 이익 매매수 7 5 8 연속 손실 매매수 10 10 10 최대 자본 인하액 -9,716.85 -11,826.21 -13,605.59 승률 43.50 44.15 42.84 손익비 1.12 1.07 1.17 평균손익비 1.46 1.36 1.57 보상 비율 4.41 1.10 2.19 주) 단위: 천원, 테스트기간: 2000. 01. 04 ~ 2003. 09. 30, 필수적으로 보유해야 할 바수: 50, 슬리피지: 1틱 <표 3-6>을 보면 전체적으로 수익 및 위험의 구조가 나쁜 편은 아니라는 것을 알 수 있다. 즉 추가 개발이 가능하다는 판단을 할 수 있다. 실제로 전략을 개발하는 첫 단계에서 진입과 기초 청산 만으로 너무 나쁜 수 익 구조를 가지고 있다면, 개발 지속을 생각하기 보다는 새로운 접근 방법을 사용하는 것이 바람직하다. 이제 수익곡선을 보자. <그림 0-10> 누적수익곡선 누적 수익곡선을 보면 현재까지 (-)수익으로 진행되지 않으므로 나쁘지는 않 다. 하지만 원호로 표시된 부분처럼 드로다운(연속 손실)이 상당기간 진행하 는 구간이 있음을 알 수 있다. 즉 2001년도나 2003 년부터 테스트를 한다면 총손익이 (-)를 기록할 것이라는 알 수 있다. 역시 이 구간은 <그림 3-5>의 ②, ④ 번 구간으로서 앞서 지적했던 바와 같이 돌파 전략이 수익이 발생하지 않는 구간임을 알 수 있다 (② 번 구간 비추세, 낮은 변동성, ④ 번 구간 상승추세, 낮은 변동성). 종가 청산을 이용하는 방법으로 15:04 분만 사용할 수 있을까? 아니다. 15:00 분도 가능하며 14:30 분도 가능하다. 장 종반에 근접할수록 장중 추세와 반대로 움직이는 경향이 강해진다. 그 이 유는 수익을 획득한 투자자가 장 종료시점에서 수익을 실현하기 때문이다. 따 라서 동시 호가 바로 전이 당일 청산 시점이 맞지만, 실제적으로는 14:30 이 후에는 포지션을 정리하는 당일 청산도 유용한 방법이 된다. 24 ②코딩을 통한 종가 청산 <수식 0-8> 데이트레이딩 전략(단계 1) 영역: 전략 이름: DD_openrangebreakout(v 0.1) Input: len(0.3) Var1= highd(1)-lowd(1) ‘전일 Range를 var1에 입력 Call buy("매수", Atstop, Def, opend+var1*len) ‘금일 시가 + range*len 돌파시 매수 Call sell("매도", Atstop, Def, opend-var1*len) ‘금일 시가-range*len 돌파시 매도 If ttime = 1500 then ‘ 시간이 15시이면 Call exitlong(“종가청산”, atmarket) Call exitshort(“종가청산”, atmarket) ‘매수 포지션을 청산하라 ‘매도 포지션을 청산하라 End if <수식 3-8>에서 15시 00분으로 시간을 주었을 경우 10분 봉에서는 그 다음봉 인 15시 10분봉 시가에 종가 청산이 발생한다. 따라서 앞서 설명한 속성창 설 정에서 15:04 분으로 설정한 것과 다른 포인트에서 청산이 발생하여 결과가 다르다는 것을 유의하자. 앞으로는 [속성창]의 [당일청산15:04]를 기준으로 진행 할 것이다. 이제 추가 개발을 계속 진행 해보자. 그 다음 단계인 코딩 오류를 체크하고, 새로운 알 고리즘을 추가하는 작업을 계속 진행하자. (2) 코딩 오류 및 알고리즘 추가 우선 자신이 원하는 대로 코딩이 되었는지를 검증하기 위해서는 신호 영역을 이용해서 진입과 청산의 위치가 정확한지, 이상한 진입이 없는지를 검증해야 한다. 그럼 신호 영역으로 매매시점을 표시해서 차트에 같이 표현해보자. <수식 0-9> 데이트레이딩 전략(단계 2) 영역: 신호 이름: DD_RangeBreak(v 0.1) Input: len(0.3) Var1=highd(1)-lowd(1) Call plots1("매수라인", opend+var1*len) Call plots2("매도라인", opend-var1*len) <그림 0-11> 신호 및 전략 적용 <그림 3-11>은 매도라인을 하향돌파 할 때 매도하고 매수라인을 상향돌파 할 때 매수하는 전략을 적용한 결과이다. ①②③번 매매 신호를 자세히 보자. ②는 매수라인을 상향돌파하는 시점에서 매수 주문이 발생하여서 원하는 대로 주문이 발생하였고, ③도 매도라인을 하향돌파해서 매도 주문이 정상적으로 발생하였다. 그런데 ①은 매수라인이나 매도라인을 돌파하지도 않았는데 주문 이 발생하는 잘못된 매매 신호임을 알 수 있다. 이유는 시간 제어가 되어있 지 않아 전일의 매도라인이 유효하기 때문이다. <수식 3-9>는 매수와 매도가 모든 봉에 활성화 되어 있어 연속적인 작동을 한 26 다. 하지만 데이트레이딩 전략일 경우에 해당 일에만 작동해야 하는데, 이렇 게 해당 일에만 작동하게 하기 위해서는 시간 제어를 해주어야 한다. 즉 “주 문은 몇 시까지만 작동하라” 라고 제어해야 하는 것이다. <수식 0-10> 데이트레이딩 전략(단계 3) 영역: 전략 이름: DD_RangeBreak(v 0.1) Input: len(0.3) Var1= highd(1)-lowd(1) ‘전일 Range를 var1에 입력 If ttime<1500 then ‘시간이 1500 분 보다 적으면 Call buy("매수", Atstop, Def, opend+var1*len) ‘금일 시가 + range*len 돌파시 매수 Call sell("매도", Atstop, Def, opend-var1*len) ‘금일 시가-range*len 돌파시 매도 End if <수식 3-10>에서는 시간 제어 구문이 주문 명령을 제어하게끔 구성을 하였다. 즉 15:00분 이후에는 주문이 발생하지 않게 하여 그 다음날에 연속적으로 영 향을 주지 않게 작성한 것이다. 여기서 15:00은 조절이 가능하다. 예를 들어 14:30 분 이후에는 신규 진입을 금지하기 위해서는 “ttime < 1430”으로 바꿔 주면 된다. 결과를 보면 다음과 같다. <그림 0-12> 시간 제어 추가 ①에 발생하였던 잘못된 진입이 제어되고, ②③의 올바른 신호만이 발생하는 것을 알 수 있다. 추가적으로 데이트레이딩 전략을 작성할 경우, 고려해야 할 부분은 “당일 진입금지” 이다. <그림 0-13> 속성창에서 당일 진입금지 설정 선물일 경우 15:05분부터 15:15분 까지는 동시호가 시간이다. 만약 이 시간대 에 진입이나 청산이 발생한다면 실제매매에서는 불가능한 주문이 된다. 특히 atmarket 주문일 경우 10분 차트에서 15:10분 봉에서 진입 조건이 완성되어 15:15 분 봉에 주문을 하라는 신호가 발생한다면, 실제로 동시호가에 시장가 주문을 내야 하는 문제가 발생한다. 따라서 “당일 진입금지”를 체크하고 그 시간대를 “당일 청산” 시간대 이후로 설정해 놓고 전략을 적용해야 한다. 매매 포인트에 오류가 없는 것이 확인되었다. 그러면 수익은 어떤지 확인해보자. <표 3-6>과 <표 3-7>을 비교해보면 코딩 오류 및 시간 제어를 거친 결과가 실 제 원하던 전략식이며, 그 결과 상당히 좋아진 것을 알 수 있다. 특히 보상비 율이 4.41에서 10.92로 위험대비 수익구조가 상당히 안정적으로 발전하였다. 28 <표 0-7> 테스트 결과 평가 항목 전 체 총 손익 매 수 매 도 71,704.88 32,500.25 39,204.63 평균 손익 64.54 58.04 71.15 최대 손실 -1,731.31 -1,731.31 -1,529.01 총 매매수 1,111 560 551 연속 이익 매매수 10 7 9 연속 손실 매매수 6 6 8 최대 자본 인하액 -6,567.95 -5,317.70 -6,899.01 승률 51.94 53.04 50.82 손익비 1.31 1.29 1.34 평균손익비 1.22 1.14 1.30 보상 비율 10.92 6.11 5.68 주) 단위: 천원, 테스트기간: 2000. 01. 04 ~ 2003. 09. 30, 필수적으로 보유해야 할 바 수: 50, 슬리피지: 1틱 누적 수익곡선을 보면 다음과 같다. <그림 0-14> 누적 수익곡선 <그림 3-14>를 보면 <그림 3-10>와 비교할 때, 수익곡선의 방향성이 좀더 좋 아진 것을 알 수 있으며, 수익이 안 나는 구간인 <그림 3-5>의 ②④구간에서 횡보 내지 소폭 상승으로 전환 되었음을 알 수 있다. 또한 2001년, 2003년에 서 시작하더라도 큰 손실이 없을 것이라는 것을 예상할 수 있다. 처음 과정인 진입 전략과 진입 전략의 오류 체크가 진행되었다. 이제 다음으 로 손절매(stoploss)를 적용해보자. (3) 손절매 적용 손절매는 손실을 최소화하여 수익을 증가시키는 목적으로 사용된다. 어떤 시 스템이든 예상치 못한 급변이 발생할 수 있다. 따라서 매수, 매도가 모두 포 함된 전략식이라도 손절매(stoploss)를 적용해 둘 필요가 있다. 또한 손절매는 매매에 대한 최소 방어선으로 매수 손절매가 발생한다면, 매수 방향으로 더 이상 진행하지 않을 것이라는 의미를 가지고 있다. 따라서 진입 시점과 가까운 손절매를 설정할 경우 잦은 손절매로 수익이 감소하게 되며, 넓은 손절매의 경우에는 한번의 손실이 커지는 효과가 있어 적절한 손절매를 설정하는 것이 중요해진다. 일반적으로 실전투자자 들은 좁은 손절매를 선호한다. 왜냐하면 잦은 매매를 하더라도 빠른 손절매가 심리적 안정을 주기 때문이다. 하지만 위험을 감소시 키고, 수익을 키우는 손절매는 가격이 적절히 움직일 수 있게 충분한 공간을 확보한 다소 넓은 손절매가 바람직 하다. 적절한 손절매 폭을 설정하는 방법 을 그림으로 설명하면 아래 그림과 같다. <그림 0-15> 매수 이후 주가 움직임과 손절매 매수 이후 바로 상승 매수 이후 하락 후 상승 매수 이후 하락 전환 30 <그림 3-15>는 매수 이후 예상 주가 움직임이다. 매수 이후 바로 상승하는 경 우, 잠시 하락하였다가 재상승하는 경우와 매수 이후 하락 전환하는 경우인 3 가지로 구분할 수 있다. 적절한 손절매 폭은 매수 이후 하락 후 상승하는 경 우에는 하락폭보다 넓게 설정되어야 하며, 매수 이후 하락 전환하는 경우에는 손실을 최소화하기 위해 좁게 설정해야 하므로 이 두가지를 동시에 만족하는 가격대를 손절매 폭으로 설정해야 한다. 적절한 손절매 폭을 찾는 방법은 두가지이다. 첫째는 최적화(optimization)로 설정하는 방법과 Maximum Adverse Excursion(MAE)을 이용하는 방법이다. MAE 를 이용하는 방법은 5장 청산전략에서 자세히 설명하기로 하고, 여기서는 최 적화를 통한 손절매 설정법을 사용하기로 하자. 손절매를 설정하는 방법은 다음과 같다. 절대금액이나 포인트 방법(예: 500,000 원, 1 포인트) 비율(%)를 사용하는 방법(예: 진입가의 1%) 변동성을 이용해서 가변적인 손절매를 설정하는 방법(예: ATR, Range이용) 절대금액이나 포인트를 이용하는 방법이 일반적일 수 있지만, 선물가격 수준 이 늘 같지 않다는 관점에서 비율을 사용하는 것이 바람직하다. 더 나아가 시 장의 흐름에 따라 변화되는 가변적인 방법도 권장할 만한 방법이 된다. 자세 한 가변적인 방법에 대해서는 청산전략 부분에서 다루기로 하고, 여기서는 비 율을 사용하는 방법을 먼저 사용하기로 한다. 1) 비율을 이용한 손절매 비율을 적용하는 방법은 두 가지 이다. 속성창에서 적용하는 방법과 코딩으로 적용하는 방법이다. 우선 속성창에서 적용하는 방법은 다음과 같다. 속성창에서 퇴출 항목에는 손절매, 목표수익, 최대 보유 바 수가 있는데, 이 중 손절매를 선택하고 1 %를 선택한 후 계산 방식에서 계약수나 포지션을 선 택하면, 손절매가 적용되게 된다. 목표 수익은 일정 수준(예 2%)에 도달하면 바로 청산하는 이익보존 청산 전략이고, 최대 보유 바수는 기간 청산으로서, 예를 들어 10이라면 매수 이후 10봉이 지나면 무조건 청산하는 방법이다. 다양한 청산 전략을 사용하기 위해서는 코딩을 통하는 방법이 바람직하다. 다 만 코딩을 하는 경우와 속성창에서 선택하는 방법은 차이가 있는데, 이 차이 는 꼭 기억하기 바란다. 그 차이는 진입 봉에서 손절매가 작동하느냐이다. 즉, 속성창에서 손절매를 적용하면 해당 진입 봉에서 손절매 조건에 맞으면 손절 매가 작동하게 된다. 하지만 코딩으로 손절매를 설정할 경우 진입 봉에서는 손절매가 작동하지 않고, 그 다음 봉에서부터 적용된다. <그림 0-16> 속성창에서 손절매 적용 그러면 이제부터 코딩을 통해서 손절매를 적용하고 최적의 손절매 포인트를 찾는 과정을 시작해보자. 32 <수식 0-11> 데이트레이딩 전략(단계 4) 영역: 전략 이름: DD_RangeBreak(v 0.1) Input: len(0.3), len1(0.01) Var1= highd(1)-lowd(1) ‘전일 Range를 var1에 입력 If ttime<1500 then ‘시간이 15시00분보다 적으면 Call buy("매수", Atstop, Def, opend+var1*len) ‘금일 시가 + range*len 돌파시 매수 Call sell("매도", Atstop, Def, opend-var1*len) ‘금일 시가-range*len 돌파시 매도 End if If position <>0 then ‘현재 포지션이 없지 않다면, 1=매수 포지션, -1 = 매도 포지션 Call exitlong(“매수손절”, Atstop, Entryprice*(1-len1)) ‘진입가 대비 매수 손절 Call exitshort(“매도손절”, Atstop, Entryprice*(1+len1)) ‘ 진입가 대비 매도 손절 End if 위와 같이 전략 식에다 손절매를 추가하여 재 적용하면, 손절매가 작동하게 된다. 최적화를 하기 전에 오류 검증부터 해보자 (4) 코딩 오류 및 최적화 손절매나 이익보존을 적용하는 과정에서 atmarket, onclose 주문의 경우에는 별 오류 문제가 없지만, Atstop, Atlimit의 경우에는 추가 진입이 바로 발생 하는 심각한 오류가 있을 수 있으므로 오류 체크가 아주 중요해진다. 현재 손 절매로 Atstop 주문을 사용하였는데, 이런 경우에는 진입가보다 낮은 가격에 서 청산이 발생하기 때문에 코딩 오류 문제는 발생하지 않는다. 우선 신호로 손절매 포인트를 표시해보자. <수식 0-12> 데이트레이딩 전략(단계 5) 영역: 신호 이름: DD_RangeBreak(v 0.1) (DD: 데이트레이딩, 버전은 0.1 이라는 의미) Input: len(0.3), len1(0.01) Var1=highd(1)-lowd(1) Call plots1("매수라인", opend+var1*len) Call plots2("매도라인", opend-var1*len) If i_position =1 Then '1=매수 포지션, Call plots3("매수손절", i_Entryprice*(1-len1)) '진입가 대비 매수 손절표시 End If If i_position=-1 Then '-1 = 매도 포지션 call plots3("매도손절", i_Entryprice*(1+len1)) ' 진입가 대비 매도 손절 표시 End If <수식 3-12>는 신호 영역으로 진입과 청산 시점을 표시하는 것인데, 자세히 살펴보면 <수식 3-10>과는 다른 i_position과 i_Entryprice과 같은 함수가 사 용된다. i_ 계열 함수로서 사용자 함수, 신호, 지표, 전략 등 모든 영역에서 사용할 수 있는 함수이다. 하지만 “i_” 가 없는 전략 함수는 전략 영역에서만 사용하여야 한다(“알기 쉬운 사이보스트레이더 언어 활용법” 책자를 참조). <그림 0-17> 손절매 적용화면 34 <그림 3-17>을 보면 손절매가 잘 적용되는 것을 알 수 있다. 그러면 어느 정 도 손절매 포인트가 최적일까? 진입 변수(0.3)와 함께 테스트를 해볼 수도 있 지만, 여기서는 손절매 포인트만 최적화를 통해서 알아보기로 하자. 우선 최적화의 범위를 생각해보자. 0.01(1%)일 경우 100 포인트라면 1 포인트 가 되며 0.05 라면 5포인트가 된다. 5포인트라면 데이트레이딩에서는 무척 큰 포인트이다. 따라서 0.005(0.5%=0.5 포인트)에서 0.03 까지 0.005 씩 증가시 키면서 최적화를 보기로 하자. <그림 0-18> 최적화 변수 입력 <표 0-8> 최적화 결과 손익비 평균 손익비 34.56 1.19 2.26 7.41 -6,515.44 1,239 46.49 1.24 1.42 8.6 -6,677.32 55.78 1,141 50.57 1.27 1.24 9.22 -6,901.53 69,844.17 62.42 1,119 51.56 1.30 1.22 10.63 -6,567.95 0.025 71,577.64 64.37 1,112 51.89 1.31 1.22 10.90 -6,567.95 0.03 71,247.75 64.13 1,111 51.94 1.31 1.21 10.85 -6,567.95 변수 총손익 평균 손익 0.005 48,254.39 29.16 1,655 0.01 57,434.08 46.36 0.015 63,640.12 0.02 주) 건수 승률 보상 비율 최대 자본인하액 : 항목별 최적변수값, 단위: 원, 배, % 최적화 결과 모든 변수에서 유의적인 결과가 도출되지만, 0.01 이하에서는 수익 이 급격히 줄고 매매 건수가 급격히 늘어나는 문제가 발생한다. 즉 100 포인트 기 준 1포인트 이하의 손절매는 너무 가까운 손절매 포인트라는 것을 알 수 있다. 또 하나 특징은 매수와 매도가 동시에 작동하고 있기 때문에 0.01 이상에서는 손절매 포인트의 변화에 그리 민감하게 반응하지 않음을 알 수 있다. 이 부분 은 전략에 따라 차이를 보일 것이다. 이 전략처럼 매수, 매도가 동시에 작동 하도록 구성된 전략일 경우 매수 시점에서는 매도선이, 매도시점에서는 매수 선이 손절매 역할을 하게 되는 것이다. 또한 <표 3-8>결과에 보듯이 최적 변수인 0.025를 사용하더라도, 손절매를 적 용하지 않은 결과값인 71,704,880원에 미치지 못한다는 것이다. 그러면 손절 매를 적용해야 하는가? 에 의문이 생긴다. 손절매의 효과는 한번 매매에서 발생하는 최대 손실이 제어되기 때문에 사용 되는 것이다. 0.025 와 0.02 의 위험과 수익 구조가 그리 차이가 없다(<표 39>). 편의상 100포인트 기준 2포인트 결과를 보기로 하자. 평가 항목 총 손익 평균 손익 최대 손실 총 매매수 연속 이익 매매수 연속 손실 매매수 최대 자본 인하액 승률 손익비 평균손익비 보상 비율 <표 0-9> 테스트 결과 전체 매수 69,844.17 32,722.90 62.42 58.12 -1,215.46 -1,215.46 1,119 563 10 7 6 6 -6,567.95 -5,751.06 51.56 52.75 1.30 1.29 1.22 1.16 10.63 5.69 매도 37,121.27 66.76 -1,213.25 556 9 8 -6,889.05 50.36 1.31 1.30 5.39 주) 단위: 천원, 테스트기간: 2000. 01. 04~2003. 09. 30, 필수적으로 보유해야 할 바 수: 50, 슬리피지: 1틱 <표 3-9> 과 <표 3-7>을 비교해 보았을 때 총손익은 소폭 줄었지만 한번 매매 에서 발생할 수 있는 최대 손실에 주목할 필요가 있다. <표 3-7>에서는 최대 손실이 -1,731,310원이었는데 여기서는 -1,215,460원(약2.4 포인트)으로 줄었 다. 즉 한번 매매에서의 손실 한도가 약 2 %로 고정이 되는 것이다. 36 이와 같이 손절매를 적용함으로 한번 매매에서 발생하는 손실 폭을 제한하게 되어 최대 손실을 관리하게 된다. 전략에 따라 손절매 폭은 다르다. 진입이 전환 포인트(turning point)에 가깝 다면 손절매 폭은 그리 크지 않게 설정해도 무방할 것이다. 따라서 손절매 폭 의 크기에 따라 전략의 유용성을 파악할 수 있다. 손절매 폭은 앞으로 자산관리와 밀접한 관계를 가지게 된다. 손절매 폭은 한 번 매매에서의 예상 최대 손실폭으로서, 이 금액이나 비율을 이용해서 계약수 를 결정하게 되는 것이다. 우선 여기서는 손절매를 2~2.5 % 수준이 합리적이라는 결과만 기억하고, 계속 이익 보존청산으로 진행하자. (5) 이익보존 청산 전략 이익 보존 청산 전략은 이익을 극대화하는 청산 전략이다. 손절매와 달리 다 양한 전략 유형이 있으며, 매수에서 바로 매도로 전환된다든지 할 경우에는 사용하지 않을 수 있다. 하지만 수익이 발생할 경우 수익을 빨리 실현해서 수익을 극대화하는 방법은 상당한 심리적인 안정을 가져다 준다. 많은 유형의 이익 보존 청산 전략들이 있다. 제 5 장에서 자세히 설명할 것이다. 우선 논리적인 접근부터 하자. 앞서 설명한 손절매와 마찬가지로 진입 이후 일정 수준이 지나고 나면 더 이상 손실을 생각할 필요가 없어지게 되는데, 이 포인트를 손익 분기점(breakeven point)이라 할 수 있다. 매수의 경우를 예 로 설명하면 다음과 같다. <그림 0-19> 매수 이후 주가 움직임과 손절매 매수 이후 바로 상승 매수 이후 하락 후 상승 매수 이후 하락 전환 <그림 3-19>의 세 번째 그림인 매수 이후 하락 전환 그림을 보면 매수 이후 일정 수준(실선)까지 상승하다 하락으로 전환되는 경우의 점선이 바로 손익 분기점이다. 즉 매수 이후 일정 수준을 넘어가면 더 이상 하락하지 않지만, 일정 수준을 넘지 못하면 손실로 전환 될 가능성이 있다는 것이다. 따라서 적절한 손익 분기점을 설정하고, 그 다음부터는 손절매 대신에 진입가격 이상으로 이익보 존 청산 전략을 사용하게 된다.(청산전략 편 참조) 이렇게 이익을 보존하는 형태의 이익보존 청산 전략에는 대표적으로 추적청산 (trailing stop)이 있다. 1) 추적청산(trailing stop) 추적청산(추적스탑)도 다양한 종류가 있지만, 원리는 최고 수익 대비 하락폭 을 설정하는 방법을 말한다. 앞서 설명한 손절매가 진입가격 대비 최대 하락 폭이라고 하면, 이익보존이 가미된 청산 방법은 최고 수익대비 최대 하락폭을 이용하는 것이다. 앞서 설명한 손절매와 추적청산을 동시에 사용하는 등 다양한 추적청산 방법 들이 있지만, 여기서는 손절매 대신에 추적청산을 적용하는 방법을 알아보자. 38 <수식 0-13> 데이트레이딩 전략(단계 6) 영역: 전략 이름: DD_RangeBreak(v 0.1) Input: len(0.3), len1(0.02) Var1= highd(1)-lowd(1) ‘전일 Range를 var1에 입력 If ttime<1500 then ‘시간이 15시00분 보다 적으면 Call buy("매수", Atstop, Def, opend+Var1*len) ‘금일 시가 + range*len 돌파시 매수 Call sell("매도", Atstop, Def, opend-Var1*len) ‘금일 시가-range*len 돌파시 매도 End If If position <>0 Then '현재 포지션이 없지 않다면, 1=매수 포지션, -1 = 매도 포지션 Call exitlong("추적스탑”, Atstop, hhv(1,high, barnumsinceEntry+1)*(1-len1)) '매수 이후 최고 고가 대비 일정 비율 하락하면 청산하라 Call exitshort("추적스탑", Atstop, llv(1,low, barnumsinceEntry+1)*(1+len1)) '매도 이후 최고 저가 대비 일정 비율 상승하면 청산 하라 End If <수식 0-14> 데이트레이딩 전략(단계 7) 영역: 신호 이름: DD_RangeBreak(v 0.1) Input: len(0.3), len1(0.02) Var1=highd(1)-lowd(1) Call plots1("매수라인", opend+Var1*len) Call plots2("매도라인", opend-Var1*len) If i_position=1 Then '1=매수 포지션 Call plots3("추적스탑”, hhv(1,high,i_barnumsinceEntry+1)*(1-len1)) '매수 이후 최고가 대비 2%하락시 청산 End If If i_position=-1 Then '-1=매도 포지션 Call plots3("추적스탑", llv(1,low,i_barnumsinceEntry+1)*(1+len1)) '매도 이후 최저가 대비 2% 상승시 청산 End If <수식 3-13>은 손절매 식 대신 매수의 경우, 진입 이후 최고 고가(= 최고수 익)에서 일정비율(예 2%) 하락하면 청산하라는 추적스탑을 적용한 것이다. 이 렇게 되면 추적청산이 손절매 역할까지 동시에 수행하게 된다. <수식 3-14>는 전략에 대한 신호식이다. 차트를 보면서 추적스탑을 이해해보자 <그림 0-20> 추적스탑 매도 라인을 하향돌파하는 시점에서 ① 번 매도가 발생하고, 추적스탑이 최고 수익대비 일정비율(0.02)을 유지하면서 진행하는 것을 알 수 있다. 결국 ② 번 시점에서 추적스탑이 작동해서 수익을 보존하게 된다. 그런데 ③번 매도가 다시 발생한다. 왜 일까? Atmarket의 경우와 달리 Atstop 매도 의 경우 일정 수준 이하(여기서는 시가-전일 range*0.3) 가 되면 무조건 매도가 발 생한다(매수도 동일). 따라서 추적스탑으로 포지션이 없어진 상태에서 매도 조건을 만족하기 때문에, 다시 매도가 바로 발생하게 되는 것이다. 이러한 오류는 이익보 존스탑을 사용할 경우 자주 발생하는 오류로서 코딩 수정을 반드시 해야 한다. 40 (6) 오류 수정 <수식 0-15> 데이트레이딩 전략(단계 8) 영역: 전략 이름: DD_RangeBreak(v 0.1) Input: len(0.3), len1(0.02) Var1= highd(1)-lowd(1) ‘전일 Range를 var1에 입력 Cond1= exitname(1)="매수추적스탑" And tdate=exitdate(1) _ And exitprice(1)>opend+Var1*len ‘ 청산이름이 “매수추적스탑”이고 청산일이 오늘이며 청산가격이 매수 진입가격보다 크면 ‘ true 아니면 false Cond2= exitname(1)="매도추적스탑" And tdate=exitdate(1) _ And exitprice(1)<opend-Var1*len ‘ 청산이름이 “매도추적스탑”이고 청산일이 오늘이며 청산가격이 매도 진입가격보다 적으면 ‘ true 아니면 false If ttime<1500 Then If Cond1=False Then ‘ cond1 이 거짓이면 Call buy("매수", Atstop, Def, opend+Var1*len) End If If Cond2=False Then ‘ cond2가 거짓이면 Call sell("매도", Atstop, Def, opend-Var1*len) End If End If If position <>0 Then '현재 포지션이 없지 않다면, 1=매수 포지션, -1 = 매도 포지션 Call exitlong("매수추적스탑”, Atstop, hhv(1, high, barnumsinceEntry+1)*(1-len1)) '매수 이후 최고 고가 대비 일정 비율 하락하면 청산하라 Call exitshort("매도추적스탑", Atstop, llv(1,low, barnumsinceEntry+1)*(1+len1)) '매도 이후 최고 저가 대비 일정 비율 상승하면 청산 하라 End If 위와 같은 오류를 수정하기 위해서는 진입 제어를 해야 한다. 우선 청산 시기 및 가격 등으로 진입을 제어하는 방법을 알아보자. <수식 3-15>에서 두 가지 condition문장(cond1,2)으로 진입 부분을 제어하였 다. 우선 cond1 은 매수를 제어하는 부분으로서 exitname(1)="추적스탑" 은 직전 청산 이름이 “추적스탑”이면 cond1=true 가 되는 부분이다. 그런데 청산 이 오늘 발생한 청산에만 해당하므로 tdate=exitdate(1) 청산일이 오늘이어야 cond1=true 가 된다. 그 다음으로 매수진입가격 보다 낮은 청산 가격은 손절 매로서 우리가 제어하려는 부분은 이익 발생 이후에 재 진입이므로 exitprice(1)>opend+var1*len으로서 이익이 발생할 경우에만 cond1= true 가 된다. 즉 추적스탑이고 오늘 청산이 발생하였고, 이익이 발생한 이익보존 청 산 전략일 경우는 cond1= true가 된다. 그러면 매수 진입 부분에서는 cond1=false 인 경우에만 매수 진입을 하면 된다. 매도 부분도 마찬가지이다. 신호 선을 수정할 필요가 없으므로 이제 차트를 보면서 제어가 잘 됐는지 확인을 해보자. <그림 0-21> 추적스탑(오류 제어) 앞서 본<그림 3-21>의 ③번 매도가 제어되었다. <수식 3-15>로 손절매 + 이익 보전 추적스탑이 적용된 전략식이 완성되었다. 식에 더 이상 오류가 없는 상 태이다. 그러면 테스트 결과를 보자. 42 <표 0-10> 테스트 결과 평가 항목 총 손익 전체 매수 매도 75,033.25 32,404.29 42,628.95 평균 손익 65.19 56.16 74.27 최대 손실 -1,215.46 -1,215.46 -1,213.25 총 매매수 1,151 577 574 연속 이익 매매수 10 9 9 연속 손실 매매수 6 6 7 최대 자본 인하액 -6,145.95 -6,949.57 -5,435.05 승률 51.17 51.99 50.35 손익비 1.34 1.29 1.39 평균손익비 1.28 1.19 1.37 보상 비율 12.21 4.66 7.84 주) 단위: 천원, 테스트기간: 2000. 01. 04~2003. 09. 30, 필수적으로 보유해야 할 바 수: 50, 슬리피지: 1틱 <표 3-9>와 비교 시, 수익이 증가하고 위험은 감소하여 보상비율이 10.63에서 12.21로 높아진 것을 알 수 있다. 비교 분석을 위해서 3가지 결과 비교 분석 해보자. <표 3-11>을 보면 손절매와 추적스탑이 적용된 전략의 매매수가 증가하면서 수익이 증가하였고 위험(최대손실, 최대자본인하액)이 감소하였으며 손익비, 평균손익비, 보상 비율이 증가하였다. 즉 수익은 증가하고 위험은 감소한 형태로 전략의 유용성이 증가한 것을 알 수 있다. <표 0-11> 테스트 결과 비교 분석(전체) 평가 항목 기초 총 손익 손절매 손절매+추적스탑 71,704.88 69,844.17 75,033.25 평균 손익 64.54 62.42 65.19 최대 손실 -1,731.31 -1,215.46 -1,215.46 총 매매수 1,111 1,119 1,151 연속 이익 매매수 10 10 10 연속 손실 매매수 6 6 6 최대 자본 인하액 -6,567.95 -6,567.95 -6,145.95 승률 51.94 51.56 51.17 손익비 1.31 1.30 1.34 평균손익비 1.22 1.22 1.28 보상 비율 10.92 10.63 12.21 주) 단위: 천원, 테스트기간: 2000. 01. 04~2003. 09. 30, 필수적으로 보유해야 할 바 수: 50, 슬리피지: 1틱 누적 수익곡선도 위와 같이 비교 분석해보자 <그림 0-22> 누적 수익곡선 비교 분석 90000.00 80000.00 손절매+추적스탑 70000.00 60000.00 50000.00 40000.00 30000.00 손절매 20000.00 기초 10000.00 0.00 1 44 224 447 670 893 1116 1339 1562 1785 2008 2231 2454 2677 2900 3123 3346 3569 3792 <그림 3-22>를 보면 기초와 손절매는 수익곡선이 거의 차이가 없으나, 추적스 탑을 적용한 수익곡선은 증가추세가 더 큰 것을 알 수 있다. 이와 같이 “진입 Æ 오류 수정 Æ 손절매 Æ 오류수정 Æ 이익보존청산 Æ 오 류 수정”과정을 통해서 수익은 증가시키고, 위험은 감소시켜 유용한 전략을 완성하게 된다. 초보자라면 위와 같은 개발 과정을 반복적으로 진행해야 하지 만, 조금만 숙달이 되면 상당히 빠른 시간에 개발이 가능하게 된다. 이제 마지막 단계로 자산 관리 방법을 적용해서 실전 매매를 준비하게 된다. 자산관리 또한 수익을 증가시키고, 위험을 감소시키는 방법으로 실제 시장에 서 살아남기 위해서는 아주 중요한 부분이다. 아주 중요함에도 불구하고 실제로는 많이 인식을 못하는 편이고, 다소 난해하 게 생각되는 부분으로서 “따라하기” 에서는 다루기가 힘든 것으로 판단된다. 따라서 6장 자산관리에서 자세히 다루기로 하자. 여기서는 우선 위 전략이 가지고 있는 문제 등을 좀더 개선하는 방향과, 다양 한 제어를 통해서 변형 전략을 만들어 보기로 하자. (7) 데이트레이딩전략의 개선 및 변형 앞서 설명한 DD_RangeBreak(v0.1) 전략을 좀더 유용한 전략이나, 변형된 전략 으로 만들어 보자. 여기서는 진입 조건을 추가한다기 보다, 최적화 및 다양한 진입 제어 등을 이용해서 전략을 개선, 변형시켜 보기로 하자. 다양한 청산 전략을 추가하거나, 변형하는 부분은 5장 청산전략 편에서 해보도록 하자. 앞서 손절매 포인트를 설정하는 과정에서 최적화를 시행하였다. 여기서는 <수 식 3-15>의 진입변수 len(0.3)과 추적스탑 청산 변수len1(0.02)를 동시에 최 적화하여 최적 변수를 찾아 보도록 하자. 1) 최적화(Optimization) 최적화는 입력 변수와 추적스탑 변수를 동시에 최적화한다. <표 0-12> 최적화 결과 승률 손익비 평균 손익비 보상 비율 최대 자본 인하액 934 53.3 1.46 1.28 12.8 -5,968.4 71.3 628 55.8 1.40 1.11 7.88 -5,688.4 49,193.8 76.0 647 55.4 1.46 1.17 11.0 -4,434.5 0.03 40,071.4 18.6 2,153 34.6 1.10 2.08 2.5 -15,992.3 0.4 0.015 ★72,557.1 74.2 977 52.0 1.45 1.34 13.9 -5,199.9 0.6 0.01 38,487.7 50.6 760 47.8 1.40 1.52 9.8 -3,893.5 len Len1 총손익 평균 손익 0.4 0.02 ★76,472.4 81.8 0.6 0.03 44,820.0 0.6 0.02 0.1 건수 주) 진입 변수: 0.1~ 1, 증가치 0.1, 추적스탑 변수: 0.005~0.03, 증가치 0.005 : 각 항목별 최적 변수 <표 3-12>는 각각의 주요 판단 항목에서(건수 제외, 최대자본인하액은 최소 값) 최대값만을 표시하였는데, 진하게 표시된 부분이 해당 항목을 의미한다. (0.4, 0.02)조합의 경우 총손익과 평균손익 기준으로 최적변수이며, (0.4, 0.015)조합은 보상비율기준으로 최적변수임을 알 수 있다. 따라서 최적 변수 로 두 조합 다 사용이 가능하다. <그림 0-23> 3D 차트(총손익 기준) 46 그림을 보면 넓은 구간에서 수익이 발생하는 광범위 변수인 것을 확인할 수 있다. 따라서 범용적인 전략으로서 어느 변수를 사용해도 무방하다는 것을 알 수 있다. 이제 좀더 세밀한 최적화를 해보자. 우선 진입 변수는 0.3~0.4 가 좋다는 것 을 알았다. 그러면 이 사이를 0.01 증가치로 세밀한 분석을 해본다. 추적스탑 변수는 0.01 ~ 0.02 사이가 좋다. 따라서 이 사이를 0.001 증가치로 다시 세 밀한 분석을 해본다. <표 3-13>처럼 총 손익이 다소 많이 차이가 나는(0.36, 0.01)조합을 제외한 나머지 변수들은 상당히 좋은 결과를 나타낸다. (0.4, 0.02)를 가장 유용한 변수로 선정할 수 있으나 (0.36, 0.015)와 (0.38, 0.013)도 최적 변수로 볼 수 있다. 이 세가지 변수에 대한 누적수익곡선을 비교 분석을 해보자. <표 0-13> 세밀한 최적화 결과(각 항목별 최적 변수) Len Len1 총손익 평균 손익 건수 승률 손익비 평균 손익비 보상 비율 최대 자본 인하액 0.36 0.015 80,128.25 75.9 1,055 50.7 1.45 1.41 18.6 -4,295.65 0.4 0.02 76,472.43 81.8 934 53.3 1.46 1.28 12.8 -5,968.48 0.37 0.015 79,540.11 77.1 1,031 51.2 1.46 1.39 17.2 -4,609.64 0.36 0.01 61,076.38 49.8 1,226 44.4 1.35 1.69 13.0 -4,689.01 0.38 0.013 71,884.04 67.8 1,060 50 1.43 1.43 18.8 -3,818.02 주) 입력 변수: 0.3~0.4 증가치 0.01, 추적스탑 변수: 0.01~0.02 증가치 0.001 <그림 0-24> 최적 변수 비교(누적수익곡선) 90000.00 (0.36, 0.015) 80000.00 (0.4, 0.02) 70000.00 60000.00 50000.00 40000.00 30000.00 20000.00 (0.38, 0.013) 10000.00 0.00 1 214 427 640 853 1066 1279 1492 1705 1918 2131 2344 2557 2770 2983 3196 3409 <그림 3-24>를 보면 최근 장세에서 (0.4, 0.02)와 (0.36, 0.015)의 수익곡선 이 역전되는 것을 알 수 있다. 즉 (0.4, 0.02)의 수익곡선 하락세가 최근 장 세에 다소 심하게 발생한다는 사실이다. 따라서 (0.4, 0.02)변수보다는 (0.36 0.015)변수가 최적 변수가 되며, 최근 장세에서 수익곡선횡보를 보이고 있는 (0.38, 0.013)도 사용 가능할 것으로 판단된다. <표 0-14> 최적화 결과 (0.36, 0.015) 평가 항목 전체 매수 매도 80,128.25 29,314.99 50,813.26 평균 손익 75.95 54.90 97.53 최대 손실 -1,081.98 -1,081.98 -852.71 총 매매수 1,055 534 521 연속 이익 매매수 7 6 8 연속 손실 매매수 6 6 7 최대 자본 인하액 -4,295.65 -5,814.97 -7,253.14 승률 50.71 50.19 51.25 손익비 1.45 1.32 1.60 평균손익비 1.41 1.31 1.52 보상 비율 18.65 5.04 7.01 총 손익 주) 단위: 천원, 배, % 48 위험(최대 손실, 최대 자본 인하액) 이 줄어들었고 수익은 증가하여 보상비율 이 18.65 로 증가하였음을 알 수 있다. <그림 0-25> 누적 수익곡선(0.36, 0.015) <그림 3-25>는 변수 0.36, 0.015의 누적 수익곡선인데 선형성이 개선 되었다 는 것을 알 수 있다. 여기서 한가지 짚고 넘어가야 할 문제가 있다. 전략 변수를 테스트 한 결과 대부분의 변수에서 수익이 발생하는 범용적인 전략이다. 그런데 지금의 최적 화는 과 최적화(over fitting)의 문제는 없는 것일까? 일단 변수는 2개로서 많은 변수를 사용하지 않았으므로 과 최적화의 범주에 들어가지는 않는다. 하지만 해답은 역시 테스트 이후 전략의 수익곡선이 과거 추이를 유지하는지를 향후 지켜보고 결정해야 할 것이다. 앞서 설명하였듯이 개발이 되었다 해서 바로 실전매매를 해서는 안 된다. 왜 냐하면 전략의 추가적인 오류 아니면, 과 최적화 여부를 판단해 볼 수 있도록 가상 매매를 일정 기간 진행해 보아야 한다. 시장은 변화된다. 따라서 변수들도 변화될 가능성 많다. 따라서 긴 기간을 테 스트 해서 최적 변수를 찾지만, 이 또한 변화를 겪을 수 있다. 여기에 대한 해결책은 명확하지 않다. 하나의 해결 방법은 가변적인(adaptive) 진입과 청 산 전략을 개발하는 것이다. 즉 진입변수값이 전일 변동폭의 0.3이 아니라 시장 상황에 따라 좀더 가변적 으로 변화되는 비율을 사용한다든지, 청산에서는 비율이 아니라 변동성(ATR, Range)을 이용한 가변적인 청산 전략을 사용하는 것이다. 진입 부분을 가변적으로 가져가거나, 다른 논리를 적용하는 방법은 4장 진입 전략 부분에서 다루기로 하고, 청산 부분을 가변적으로 변경하는 방법만을 간 단히 알아보기로 하자. 2) 가변적인 청산 전략으로 변경 가변적인 청산 전략 등 다양한 청산 전략에 대해서는 5장에서 자세히 설명하 겠지만, 여기서는 앞서 사용한 비율 추적스탑을 가변적인 추적스탑으로 변경 하여 사용하는 방법에 대해서만 알아보기로 하자. 가변적 추적스탑으로의 변경은 제 3 장 처음 부분에서 설명한 “변동성”을 이 용하면 된다. 즉 ATR 이나 Range 등을 사용해서 시장 상황에 맞게 변화되도록 청산 전략을 변경하게 된다. 앞서 설명한 DD_RangeBreak(v0.1)을 그대로 두고 버전 0.2를 새로 작성해서 사용해보기로 하자. 50 <수식 0-16> 가변 청산 전략 영역: 전략 이름: DD_RangeBreak(v 0.2) Input: len(0.3), atrlen(10), len1(3) Var1= highd(1)-lowd(1) ‘전일 Range를 var1에 입력 Cond1= exitname(1)="매수추적스탑" And tdate=exitdate(1) _ And exitprice(1)>opend+var1*len Cond2= exitname(1)="매도추적스탑" And tdate=exitdate(1) _ And exitprice(1)<opend-var1*len If ttime<1500 Then If Cond1=False Then ‘ cond1 이 거짓이면 Call buy("매수", Atstop, Def, opend+var1*len) End If If Cond2=False Then ‘ cond2가 거짓이면 Call sell("매도", Atstop, Def, opend-var1*len) End If End If If position <>0 Then Call exitlong("매수추적스탑”, Atstop, hhv(1, high, barnumsinceEntry+1)- _ atr(atrlen)*len1) '매수 후 최고 고가 대비 일정기간 동안의 ATR 값의 배수값을 차감한 값을 이탈하면 청산 Call exitshort("매도추적스탑", Atstop, llv(1, low, barnumsinceEntry+1)+ _ atr(atrlen)*len1) '매도 후 최고 저가 대비 일정기간 동안의 ATR 값의 배수값을 더한 값을 상향하면 청산 End if 신호도 동시에 작성해서 차트에 적용하기로 하자. <수식 0-17> 가변 청산 신호 영역: 신호 이름: DD_RangeBreak(v 0.2) Input: len(0.36), atrlen(25), len1(3.5) Var1=highd(1)-lowd(1) Call plots1("매수라인", opend+var1*len) Call plots2("매도라인", opend-var1*len) If i_position =1 Then '1=매수 포지션, Call plots3("추적스탑", hhv(1, high, i_barnumsinceEntry+1)-atr(atrlen)*len1) End If If i_position=-1 Then '-1 = 매도 포지션 Call plots3("추적스탑", llv(1, low, i_barnumsinceEntry+1)+atr(atrlen)*len1) End If 적용된 그림을 보면서 비율 추적스탑과 ATR 가변 추적스탑을 비교해보자 <그림 0-26> ATR 가변 추적스탑(1) 주) 연결선물 지수 10분 차트: 적용 전략 “ DD_RangBreak(v0.2)” 변수: len: 0.36, atrlen: 25, len1: 3.5 DD_RangeBreakout(v0.1)의 1.5% 추적스탑 포인트 동시 적용 52 <그림 3-26>에서 ATR 추적스탑이 비율 추적스탑보다 스탑 포인트가 가까운 것 을 알 수 있다. 비율 스탑의 경우 지수대가 높은 지수(예: 100)일 경우 상당 히 넓은 스탑 포인트를 가지게 된다. 반면 ATR 추적스탑은 스탑 포인트가 현 재의 변동성에 따라서 가변적으로 조절된다. 즉 변동성이 적은 시점에서는 진 입가격에 가까운 스탑을, 변동성이 큰 시점에서 진입가격에서 넓은 스탑 포인 트를 가지게 된다(9월 30일은 전일부터 변동성이 계속 줄어드는 관계로 ATR추 적스탑이 진입가격에 상대적으로 가까운 포인트를 설정하게 된다.). 또 하나의 ATR추적스탑의 큰 장점은 진입 이후 가격이 진입과 반대로 움직이 거나, 횡보추세가 발달하면 변동성이 감소 하면서(<그림 3-26>의 제일 위쪽 그림은 ATR 지표임) 진입 가격에 근접하는 움직임을 보인다. 반면 비율의 경우에는 최고 수익대비로 고정되어 있어 청산가격대까지 기다려 야 하지만, ATR추적스탑은 변동성을 기준으로 하므로 방향성 반대가 되면 청 산 포인트가 빠르다는 것을 알 수 있다. 이 부분이 시장의 흐름을 반영하는 ATR 추적스탑의 가장 큰 장점이다. <그림 0-27> ATR 가변 추적스탑(2) <그림 3-27>을 보면 9월 8일 장세가 하루 종일 횡보하는 현상을 보였다. 따라 서 9월 9월 시점에서 매수가 발생하였는데, ATR가변스탑이 진입가 대비 상당 히 가까운 가격대의 추적스탑 포인트를 나타냈다. 상승추세 진행 중에 횡보국 면에서는 비율일 경우에 같은 가격대를 가지는 반면, ATR스탑의 경우 최고 수 익에 좀더 다가가는 형태를 보이는 것을 알 수 있다. 결론적으로 시장의 변동성에 따라 가변적으로 변화되는 ATR 추적스탑이 실전 매매에서 좀더 유용하게 사용될 수 있음을 알 수 있다. 그러면 최적화 및 테 스트 결과를 보자. 최적화는 len, atrlen, len1을 모두 동시에 적용해 보자(1차 넓은 범위 테스 트 이후 상세 범위의 경우만 설명). <표 0-15> ATR 추적스탑 최적화 결과(각 항목별 최적 변수) 평균 손익 건수 승률 손익비 평균 손익비 보상 비율 최대 자본 인하액 83,858 73.3 1,143 47.5 1.5 1.66 20.2 -4,143.9 3.8 81,130 83.2 975 51.0 1.51 1.45 13.6 -5,954.7 30 4 75,571 79.0 956 52.0 1.46 1.34 14.9 -5,047.8 0.4 30 3.3 79,914 79.4 1,006 50.4 1.51 1.48 17.1 -4,664.6 0.36 10 2.1 63,025 47.3 1,330 43.3 1.37 1.79 11.6 -5,416.5 0.38 20 2.7 78,114 69.1 1,129 47.3 1.47 1.64 20.7 -3,765.5 atr len len1 0.37 20 2.7 0.4 10 0.4 len 총손익 주) len: 3~4 증가치 0.01, atrlen: 10 ~ 30 증가치 10, len1: 2 ~ 4 증가치 0.1 다양한 결과 중 평균손익비를 제외한 나머지 변수들은 유용한 변수들로서, 이 중 진입 시점이 빠르거나 중복 발생 변수인 0.37, 20, 2.7 과 0.38, 20, 2.7 을 선택할 수 있을 것이다. 0.37, 20, 2.7를 이용해서 테스트 결과를 비율을 이용한 DD_RangeBreak(v0.1) 의 테스트 결과와 비교해보자. 54 <표 0-16> 최적화 결과 비교 Rangebreakout 비교 (v0.1) 80,128.25 < Rangebreakout (v0.2) 83,858.50 평균 손익 75.95 > 73.37 최대 손실 -1,081.98 > -1,132.98 총 매매수 1,055 < 1,143 연속 이익 매매수 7 < 10 연속 손실 매매수 6 < 9 최대 자본 인하액 -4,295.65 < -4,143.91 승률 50.71 > 47.51 손익비 1.45 < 1.50 평균손익비 1.41 < 1.66 보상 비율 18.65 < 20.24 평가 항목 총 손익 주) 단위: 천원, %, 배 승률은 감소, 최대 손실은 다소 증가하였지만 DD_RangeBreak(v0.2)가 좀더 향 상된 결과를 보임을 알 수 있다. 또한 실제로 비율 1.5% 보다 atr(20)*2.7 배 가 전반적으로 진입가격에 가까운 청산가격을 보이고 있어, 실제 매매에서 위 험(예상 손실폭)이 적어 좀더 공격적인 전략 운용을 가능하게 해주고 위험 수 준이 낮아지는 효과가 있다. 그러면 v0.1 과 v0.2의 수익곡선을 비교해보자. <그림 0-28> 누적 수익곡선(v0.1, v0.2) 100000.00 90000.00 80000.00 70000.00 60000.00 50000.00 40000.00 30000.00 20000.00 10000.00 0.00 1 215 429 643 857 1071 1285 1499 1713 1927 2141 2355 2569 2783 2997 3211 3425 <그림 3-28>에서 굵은 실선이 v 0.2, 가는 실선이 v 0.1이다. v 0.2 가 최근 장세에서 수익이 v0.1 보다 크다는 것을 알 수 있다. 따라서 앞서 설명한 바 와 같이 시장 상황에 가변적으로 적용되며, 비율보다 다소 손절매 폭이 짧다. 횡보 시 빠른 방어 전략이 가능한 가변적인 추적스탑이 좀더 유용하다고 할 수 있다. DD_RangeBreak(v0.2)을 기준으로 다양한 진입제어를 추가하여 전략을 변경, 개선하는 방법에 대해서 알아보기로 하자. 3) 진입 제어 데이트레이딩에서 진입을 제어하는 이유는 앞에서 본 것과 같이 오류를 수정 하는 것 이외에도 다른 이유로 진입을 제어하게 된다. 선물 시장에서 하루에 가격이 추세적으로 움직일 수 있는 시간은 최대 6시간 이다. 초 단타매매(아주 짧은 시간대(예 1분, 1틱 등))를 이용하거나, 짧은 목표수익과 손절매를 가져가는 매매와 데이트레이딩을 구분해서 생각한다면, 데이트레이딩일 경우 하루에 1 ~ 5 번 정도의 매매 밖에는 일어나지 않는 게 정상적이다. 왜냐하면 추세가 변화되는 횟수가 적기 때문이다. 아침에 추세가 형성되어 계속 그 추세로 진행되는 경우도 많다. 이런 경우 1 번 진입으로 충분한 수익을 발생하게 된다. 반면 추세가 없는 구간에서는 매 매가 반복적으로 일어날 수 있다. 이런 경우에는 가장 쉬운 방법은 매매를 하 지 않는 것이 될 것이다. 따라서 과도한 진입이나 손절매 이후 같은 방향 진입을 금지한다든지, 하루에 한번만 매매 한다 등과 같이 진입 횟수나 진입 방향을 제어하는 형태를 자주 사용하게 된다. 56 그 유형은 아래와 같다. 하루에 한번만 매매: 추세가 형성되면 한번 매매로 충분한 수익을 발생할 수 있음 당일 매매 횟수 제한: 하루 중 여러 번 매매 발생시 비 추세일로서 수익이 발생할 가능성이 적기 때문임. 손절매 발생시 당일매매 중단: 매수 진입에서 손절매가 발생할 경우 오늘은 어떤 방향으로 진입해도 손실이 발생할 것이라는 가정에서 출발함. 이익 발생시 추가 진입 제한: 이익이 발생하면 이후로는 수익발생 가능성이 적다는 가정으로 추가 진입을 하지 않음. 같은 방향 매매 제어: 매수 이후 청산이 발생한 다음에 다시 매수 방향으로 매매가 발생해도 진입하지 않고 매수 이후 매도나 매수청산 이후 매도만을 진입하는 방법 14시 전에 진입이 발생하지 않으면 진입 금지: 강한 장중 추세 형성은 대부 분 아침 시간대에 형성될 가능성이 크기 때문에 오후에는 진입 하지 않음. 9시 30분 이후 진입: 아침 시간대는 추세를 탐색하는 시간대로 9 시 30분 이후나 10시 이후부터 진입을 허용하는 방법. 1차 매매와 2 차 매매의 청산 전략 변경: 하루 중 1차 매매와 2차 이후 매 매의 청산 속도를 구분하여 적용하는 형태 이 이외에도 다양한 변형이 가능하다. 중요한 것은 어떤 제어가 좋은 것이냐 가 아니라, 자신의 매매 스타일이나 자금 여력 등에 맞게 설정되어야 한다는 점이다. 위의 DD_RangeBreak(v0.2)를 이용해서 위의 진입 제어 중 성과가 좋은 2가지 와 이들을 결합한 전략을 구현해 보자. <수식 0-18> 당일 매매 횟수 제한 영역: 전략 이름: DD_RangeBreak(v 0.21) Input: len(0.37), atrlen(20), len1(2.7), tcount(2) Var1=highd(1)-lowd(1) If tdate(1)<>tdate Then ‘날이바뀐 첫봉에서 Var10=currentEntrynum ‘현재까지의 진입횟수를 var10에 저장한다. End If Cond1= exitname(1)="매수추적스탑" And tdate=exitdate(1) _ And exitprice(1)>opend+var1*len Cond2= exitname(1)="매도추적스탑" And tdate=exitdate(1) _ And exitprice(1)<opend-var1*len If ttime<1500 Then If currentEntrynum < Var10+tcount And Cond1=False Then ‘tcount가 2이므로 ‘당일의 매매가 2회발생하면 조건을 만족하지 못하므로 더 이상 매수하지 못함 Call buy("매수",Atstop,Def,opend+Var1*len) End If If currentEntrynum < Var10+tcount And Cond2=False Then ‘tcount가 2이므로 ‘당일의 매매가 2회 발생하면 조건을 만족하지 못하므로 더 이상 매도 하지 못함 Call sell("매도",Atstop,Def,opend-Var1*len) End If End If If position<>0 Then Call exitlong("매수추적스탑", Atstop, hhv(1, high, barnumsinceEntry+1)- _ atr(atrlen)*len1) Call exitshort("매도추적스탑", Atstop, llv(1,low, barnumsinceEntry+1)+ _ atr(atrlen)*len1) End If 58 <수식 0-19> 같은 방향 진입제어 영역: 전략 이름: DD_RangeBreak(v 0.22) Input: len(0.37), atrlen(20), len1(2.7) Var1=highd(1)-lowd(1) Cond1= tdate=exitdate(1) And position(1)=1 ‘직전의 포지션이 매수이고 ‘금일 청산한 적이 있으면 cond1이 true, 아니면 false Cond2= tdate=exitdate(1) And position(1)=-1 ‘직전의 포지션이 매도이고 ‘금일 청산한 적이 있으면 cond2가 true, 아니면 false If ttime<1500 Then If Cond1=False Then ‘직전포지션이 매수가 아니거나, 금일 청산한 적이 없으면, Call buy("매수", Atstop, Def, opend+var1*len) ‘매수 End If If Cond2=False Then ‘지전포지션이 매도가 아니거나, 금일 청산한 적이 없으면 Call sell("매도", Atstop, Def, opend-var1*len) ‘매도 End If End If If position<>0 Then Call exitlong("매수추적스탑", Atstop, hhv(1,high, barnumsinceEntry+1)- _ atr(atrlen)*len1) Call exitshort("매도추적스탑", Atstop, llv(1,low, barnumsinceEntry+1)+ _ atr(atrlen)*len1) End If <수식 0-20> 매매 횟수 및 같은 방향 진입제어 결합 영역: 전략 이름: DD_RangeBreak(v 0.3) Input: len(0.37), atrlen(20), len1(2.7), tcount(2) Var1=highd(1)-lowd(1) If tdate(1)<>tdate Then Var10=currentEntrynum End If Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If currentEntrynum < Var10+tcount And Cond1=False Then ‘<수식 3-18, 19> 참조 Call buy("매수", Atstop, Def, opend+var1*len) End If If currentEntrynum < Var10+tcount And Cond2=False Then Call sell("매도", Atstop, Def, opend-var1*len) End If End If If position<>0 Then Call exitlong("매수추적스탑",Atstop,hhv(1,high,barnumsinceEntry+1) - _ atr(atrlen)*len1) Call exitshort("매도추적스탑",Atstop,llv(1,low,barnumsinceEntry+1) + _ atr(atrlen)*len1) End If 60 평가 항목 <표 0-17> 테스트 결과 V0.21 V0.22 총 손익 V 0.3 85,187.11 93,116.18 92,964.53 평균 손익 78.37 97.81 98.90 최대 손실 -1,132.98 -1,132.98 -1,132.98 총 매매수 1,087 952 940 연속 이익 매매수 9 10 9 연속 손실 매매수 9 7 7 최대 자본 인하액 -3,834.51 -4,438.61 -4,382.02 승률 47.65 49.47 49.57 손익비 1.53 1.68 1.69 평균손익비 1.68 1.72 1.72 보상 비율 22.22 20.98 21.22 주) 단위: 천원, %, 배 총손익 기준으로 같은 방향으로 진입이 제한된 v0.22가 가장 좋은 결과를 나 타내지만, 최대자본인하액과 보상비율 등의 위험수준과 함께 고려한다면, 매 매횟수와 같은 방향 진입제한이 결합된 v0.3이 더욱 안정적이라 할 수 있다. 이제 데이트레이딩 전략 따라하기의 마지막으로 시간대 변경 부분을 알아보기 로 하자. 4) 시간대(time frame) 변경 위의 전략을 적용하는 시간대를 변경해보고 다시 최적화를 해봄으로 최적의 매매 시간대 및 전략의 범용성(robust)을 검증해볼 수 있다. 범용성 검증이 가능한 이유는 다양한 시간대에서 수익이 발생 한다면, 어떤 시간대를 사용해 도 무관하다는 결론을 얻을 수 있기 때문이다. 테스트는 DD_RangeBreak(v0.3)을 이용해서 3분, 5분, 7분, 10분, 15분, 20분, 25분, 30분 차트를 비교해보기로 하자. 최적화를 진입부터 모든 변수를 실행 해서 최적의 결과를 만들 수 있지만, atr기간값(atrlen)과 배수(len1)만을 이 용해서 최적화를 해보기로 하겠다. 테스트 조건은 다음과 같다. 1차 테스트 조건 ATRlen: 10 ~ 50, 증감치: 10 Len1: 3 ~ 5, 증감치: 0.2 1차 테스트 결과 15분 이상부터 atrlen 10, len1=1~2 사이가 최적 변수임 2차 테스트 조건 Atrlen: 5 ~ 15, 증감치: 1 Len1: 1 ~ 4, 증감치: 0.2 <표 0-18> 테스트 결과(DD_RangeBreak(v0.3) 평가 항목 총 손익 3분 5분 7분 10분 93,822.40 92,002.26 93,274.65 92,964.52 평균 손익 98.86 97.36 99.23 98.90 최대 손실 -1,327.50 -1,027.07 -1,132.98 -1,132.98 총 매매수 949 945 940 940 연속 이익 매매수 9 9 9 9 연속 손실 매매수 7 7 6 7 최대 자본 인하액 -4,543.84 -4,166.24 -4,451.95 -4,382.02 승률 50.47 49.31 51.06 49.57 손익비 1.65 1.68 1.67 1.69 평균손익비 1.62 1.73 1.60 1.72 보상 비율 20.65 22.08 20.95 21.22 len 0.37 0.37 0.37 0.37 atrlen 100 40 50 20 len1 5.5 3.8 3.4 2.7 2 2 2 2 tcount 62 평가 항목 15분 20분 25분 30분 83,812.25 79,737.59 81,597.17 83,122.69 평균 손익 89.64 85.92 89.57 90.65 최대 손실 -1,191.43 -1,147.25 -1,155.23 -1,961.54 총 매매수 935 928 911 917 연속 이익 매매수 6 9 8 6 연속 손실 매매수 7 7 7 7 최대 자본 인하액 -5,232.52 -5,173.20 -4,532.73 -3,983.74 승률 48.88 48.71 49.62 49.51 손익비 1.60 1.59 1.58 1.60 평균손익비 1.67 1.67 1.60 1.63 보상 비율 16.02 15.41 18.00 20.87 len 0.37 0.37 0.37 0.37 atrlen 14 10 9 8 len1 2.2 1.8 1.8 1.6 2 2 2 2 총 손익 tcount 주) 단위: 천원, %, 배 <표 3-18>의 테스트 결과 모든 시간대에서 수익이 유지되며 3분에서 가장 높 은 수익을 나타냄을 알 수 있다. 또한 시간대가 짧아 질수록 atrlen이 길어 지고 배수값(len1)은 커지게 된다. 이러한 현상은 시스템 트레이딩을 개발함 에 있어서 시간대 별로 어느 정도의 변수를 사용할 것인가에 대한 기준이 될 수 있을 것이다. 모든 시간대에서 수익이 발생하는 것을 알 수 있어 범용적인(robust) 매매 전 략임을 다시 한번 확인할 수 있었다. 그러면 여기서 10분 차트를 이용한 v0.2 와 v 0.3 과 최고 총손익을 보인 3분 차트 v0.3 의 누적 수익곡선을 관 찰해보자. <그림 0-29> 누적 수익곡선 120000.00 DD_rangebreak(v0.3): 3분 100000.00 80000.00 60000.00 40000.00 DD_rangebreak(v0.3): 10분 20000.00 DD_rangebreak(v0.2): 10분 0.00 1 213 425 637 849 1061 1273 1485 1697 1909 2121 2333 2545 2757 2969 3181 3393 <그림 3-29>를 보면 3분 및 10분 차트에 적용한 v0.3이 v0.2의 수익곡선 보다 꾸준하게 높은 수준을 유지하고 있음을 알 수 있다. 따라서 전략 개발 Æ 진입제어 Æ 시간대 조절 과정을 통해서 점점 더 수익구 조가 좋아졌다는 판단이 가능해진다. 특히 짧은 시간대 적용이 2003년 들어 수익곡선이 극도로 나빠지는 구간에서도 횡보내지 소폭 상승이 가능하다는 것 을 보여주고 있다. 이제 단기매매 전략 개발을 먼저 이해 보도록 하자. 3. 단기매매(Short Term Trading) 단기매매는 short–term trading, swing trading이라 한다. swing trading 이 란 의미로 사용되는 경우는 두 가지로 구분되는데 전략 자체가 가격의 스윙 (상승 Æ 하락 Æ 상승)을 전략화한 스윙 전략이란 의미가 있다. 이러한 주가 의 스윙 중에서 짧은 기간의 스윙(5일 이내)을 단기 매매에서 자주 사용하기 때문에 단기매매를 스윙트레이딩이라 한다. 64 어쨌든 단기매매는 장 종반에 무조건 청산을 하지는 않는 것이다. 즉 시점에 따라서 오버 나잇으로 수익을 창출하는 방법이다. 앞서 설명한 바와 같이 오 버나잇을 할 경우 시가 형성이 현재 포지션에 급격하게 반대로 움직이는 위험 (overnight risk)을 감수하는 매매 형태이다. 물론 현재 포지션과 같은 방향 으로 시가가 형성되면서 수익이 증가할 수도 있다. 선물매매에서 대부분의 전략들은 오버나잇을 하지 않는 데이트레이딩 전략이 다. 하지만 큰 수익의 획득은 오버나잇을 하여 큰 위험을 감수함으로써 가능 해진다. 단기매매는 분차트를 이용한 단기매매와 일간차트를 이용한 단기매매를 생각 할 수 있다. (1) 분 차트를 이용한 단기매매 여기서는 앞서 설명한 RangeBreak전략을 분차트에 적용하되 2가지 청산 전략 을 추가하기로 한다. 일정 시간대에서, 매수일 경우 금일 저가가 매도 라인 이상으로 진행된 적 이 있다면 당일 청산, 매도일 경우 금일 고가가 매수라인 이상으로 진행 된 적이 있다면 당일 청산을 한다. Æ 가격이 장 중 양방향으로 진행하였다면 당일청산한다. 진입 이후 지정한 날이 지난 시점의 시가와 진입가격을 비교하여 수익이 발 생한 상태이면 청산한다(Profitable Open Stop). 조심할 것은 앞서 설명한 데이트레이딩과 마찬가지로서 다음과 같은 오류를 제어해야 한다. 동시호가에 주문 발생하지 않도록 진입금지를 15 :05 분으로 설정한다. 시가에 주문오류가 발생하지 않도록 시간 제어(ttime<1500) 사용해야 한다. Atstop주문일 경우 수익 발생 후 바로 재주문이 발생하는 오류를 제어한다. 전략식과 신호식은 다음과 같다. <수식 0-21> 분차트를 이용한 단기매매전략 영역: 전략 이름: SS_RangeBreak(v 0.2) Input: len(0.37), atrlen(20), len1(3.2), entrystart(920), entrylimit(1430), dayin(3), method(0) ‘기본식------------------------------------------------------------If method = 0 then Var1=highd(1)-lowd(1) Cond1= exitname(1)="매수추적스탑" And tdate=exitdate(1) And tdate=Entrydate(1) _ And exitprice(1)>opend+Var1*len Cond2= exitname(1)="매도추적스탑" And tdate=exitdate(1) And tdate=Entrydate(1) _ And exitprice(1)<opend-Var1*len Cond3= exitname(1)="매수추적스탑" And tdate=exitdate(1) And tdate<>Entrydate(1) _ And exitprice(1)>opend+Var1*len Cond4= exitname(1)="매도추적스탑" And tdate=exitdate(1) And tdate<>Entrydate(1) _ And exitprice(1)<opend-Var1*len If ttime>Entrystart And ttime<Entrylimit Then If Cond1=False And Cond3=False Then Call buy("매수",Atstop,Def,opend+Var1*len) End If If Cond2=False And Cond4=False Then Call sell("매도",Atstop,Def,opend-Var1*len) End If End If If position<>0 Then Call exitlong("매수추적스탑", Atstop, hhv(1,high,barnumsinceEntry+1)- atr(atrlen)*len1) Call exitshort("매도추적스탑", Atstop, llv(1,low,barnumsinceEntry+1)+atr(atrlen)*len1) End If ‘손실발생 당일청산----------------------------------------------------Elseif method = 1 or method = 2 or method = 3 then If ttime =1450 And position<>0 Then ‘2시 50분에 포지션이 있다면 If position=1 And Entryprice > close Then ‘진입가격 보다 종가가 낮다면 Call exitlong("당일청산", Atmarket) End If 66 If position=-1 And Entryprice < close Then Call exitshort("당일청산", Atmarket) End If End If ‘방향성 청산---------------------------------------------------------Elseif method = 2 or method = 3 then If ttime =1450 And position<>0 Then If position=1 And (opend-Var1*len > lowd Or Entryprice > close) Then Call exitlong("당일청산", Atmarket) End If If position=-1 and ( opend+var1*len < highd or Entryprice < close) Then Call exitshort("당일청산", Atmarket) End If End If ‘Profitable Open Stop--------------------------------------------------Elseif method = 3 then If position=0 Then ‘날짜 변경을 카운트하기 위한 식 Var50=0 ‘ 초기화 End If If tdate<>tdate(1) And position<>0 Then ‘포지션이 있으면서 날짜가 변경되면 Var50=Var50 +1 ‘카운트를 1씩 증가시킨다. End If If Var50=dayin And tdate<>tdate(1) And position<>0 Then ‘ 카운트가 지정한 숫자가 되면 If Entryprice < opend Then ‘ 진입가격보다 시가가 크면 Call exitlong("시가청산", Atmarket) ‘청산 End If If Entryprice > opend Then Call exitshort("시가청산", Atmarket) End If End If End If 이 전략식은 기본진입전략과 ATR추적스탑을 기본으로 한 단기매매전략에 3가 지 청산전략을 결합한 것이다. 입력변수 중 method를 1로 입력하면 손실발생 당일 청산추가, 2는 방향성 청산추가, 3은 Profitable Open Stop이 추가되어 실행된다. Cond1은 금일 매수하여 금일 수익을 내고 청산한 후, 바로 재 매수되는 오류를 제 어한 것이다. Cond3은 금일 이전에 매수하여 금일 수익을 내고 청산한 후, 바로 재 매수되는 오류를 제어한 것이다. Cond2, Cond4는 매도에러 제어에 해당한다. 기본전략에 3가지 청산전략이 추가되어 성과가 변화하는 과정을 확인하기 위 해 단계별로 추가하면서 전략을 적용하였다. 결과는 다음과 같다. <표 0-19> SS_Rangebreak(v0.2) 단계별 적용결과 평가 항목 기본식 방향성청산 추가 손실청산추가 시가 청산 추가 71,593.48 63,495.11 72,103.35 72,851.43 평균 손익 84.73 73.32 82.22 82.97 최대 손실 -2,565.24 -1,574.60 -1,446.55 -1,446.55 총 매매수 845 866 877 878 연속 이익매매수 9 8 8 8 연속 손실매매수 12 12 9 9 최대자본인하액 -6,993.00 -6,780.04 -5,336.05 -5,336.05 승률 39.88 36.37 39.79 39.98 손익비 1.36 1.35 1.42 1.42 평균손익비 2.05 2.37 2.15 2.14 보상 비율 10.24 9.37 13.51 13.65 총 손익 주) 단위: 천원, %, 배, 필수적으로 보유해야할 바 수: 50 기본식에 손실청산을 적용하면 최대손실이 대폭 감소하는 현상을 볼 수 있으 나, 총손익이 감소하고 승률이 저하된다. 하지만 여기에 방향성 청산을 추가 할 경우 총손익이 유지되면서 최대손실, 연속손실매매수가 줄며 보상비율, 손 익비 등이 향상되는 것을 알 수 있다. 68 최종적으로 시가청산전략까지 추가하면 총손익, 최대손실, 최대자본인하액, 승률, 보상비율 등 전략전반의 성과를 향상시킬 수 있다. <그림 0-30> SS_Rangebreak(v0.2) 누적수익곡선 여기서 포트폴리오 트레이딩을 생각해보자. 단기매매인 SS_RangeBreak(v0.2) 와 데이트레이딩인 DD_RangeBreak(v0.3)을 동시에 매매하면 어떤 효과가 발생 할 것인가? 앞서 설명한 데이트레이딩 전략은 최근 국면에서 수익감소가 발생하였고, 단 기매매는 수익곡선이 점진적으로 증가되었다. 따라서 두 가지 전략을 동시에 사용하면 현재 국면에서 서로 상쇄, 내지 보완되는 효과를 나타낼 것이다. 다 음 그림을 보자. <그림 0-31> 포트폴리오 트레이딩 180000.00 160000.00 140000.00 120000.00 100000.00 80000.00 60000.00 40000.00 20000.00 0.00 1 213 425 637 849 1061 1273 1485 1697 1909 2121 2333 2545 2757 2969 3181 3393 2는 데이트레이딩 전략인 DD_RangeBreak(v0.3)이다. 3은 단기매매 전략인 SS_RnageBreak(v0.2)로서, 두 가지 전략을 상호 보완, 상쇄되는 움직임을 보 여 결합 수익곡선(1)의 상승 및 선형성이 증가하였음을 알 수 있다. 특히 최 근 장세에서도 수익곡선의 상승세를 유지하고 있음을 보여준다. 이와 같이 투자자본이 허용된다면 포트폴리오 전략매매로 위험을 감소시키는 방법이 바람직하다. 그럼 연결선물 지수 일간차트를 이용한 단기매매 전략을 만들어 보자. (2) 일간차트를 이용한 단기매매 일간 단기매매전략에서 진입방향성을 결정하는 방법이 다양하다. 70 전전일 종가가 전일 종가 보다 낮아지면 매수, 반대면 매도: 역 추세적인 진 입 방법으로서 종가 하락 이후 반등을 기대하여 매수 방향만 허용하는 방법. 전전일 종가가 전일 종가 보다 높아지면 매수, 반대면 매도: 추세적인 진입 방법으로서 종가 상승 이후 추세적인 상승 지속을 기대하고 매수 방향만으 로 매매하는 방법. 종가 비교, 고가 비교, 저가 비교, 평균값 비교, 시가 비교 등을 통한 변형 기술적 지표로서 방향성 결정: 이동평균선 보다 주가가 낮은 수준이면 매도 방향만, 높은 수준이면 매수 방향만으로 매매하는 방법. 여기서는 이러한 방향성 결정 방법 중 역추세적인 진입방법과 ATR추적스탑, 시가청산전략을 혼합하여 전략을 작성하겠다. 일간 연결선물지수에 전략을 적용할 경우 아래의 문제점들을 고려해야 한다. Open(-1) 사용: RangeBreak 전략은 해당일 시가를 이용해서 매매를 한다. 그러나 CT의 주문은 전일봉에서 조건이 만족되어야 발생하므로 해당일의 시가를 이용해서 매매하는 경우 다음날 매매가 발생한다. 그러나 Open(1)을 이용하면 금일봉에서도 주문을 발생시킬 수 있다(high(-1), low(-1), close(-1)은 사용 못함). 분차트에서도 동일하다. 같은 봉에서 동시 진입 제어: 같은 봉에서 동시 진입(매수, 매도)이 발생할 경우 실시간 매매에서는 가능한 매매 방법이 되나, 과거 테스트에서는 봉이 형성된 과정을 알 수가 없기 때문에 같은 봉 진입은 오류로 간주 된다. 따라서 과거 테 스트를 정확하게 하기 위해서는 같은 봉에서 매수, 매도주문이 동시에 발생하는 경우를 제어하는 함수(setbaroneentry)를 사용한다. <수식 0-22> 일간차트를 이용한 단기매매 전략 영역: 전략 이름: S_Rangebreak(v 0.2) Input: len(0.4), atrlen(3), profitlen(2), stoplen(4), len1(21), method(0) ‘진입전략-----------------------------------------------------------Var1=high-low ‘시가 고가의 거리 = range Setbarback ‘ 주문 발생시점 한 봉 전으로 If open(-1)<=open then ‘ 내일 시가가 오늘 시가보다 적거나 같으면 Call buy("매수",Atstop,Def,open(-1)+var1*len) End if If open(-1)>open then ‘내일 시가가 오늘 시가보다 크면 Call sell("매도",Atstop,Def,open(-1)-var1*len) End if If method = 1 then ‘시가청산조건식------------------------------------------------------If i_position<>i_position(1) Then Var10=0 ‘초기화 Var11=0 ‘초기화 End If If i_position=1 And open(-1)>=i_Entryprice + atr(atrlen) Then ‘현재 매수상태이며 진입 이후 시가가 진입가보다 일정수준 이상이면 Var10=var10+1 ‘var10을 1씩 증가 ElseIf i_position=-1 And open(-1)<=i_Entryprice - atr(atrlen) Then ‘현재 매도상태이며 진입 이후 시가가 진입가 보다 일정수준 이하이면 Var10=var10+1 ‘var10을 1씩 증가 End If If i_position=1 And open(-1)<=i_Entryprice Then ‘현재 매수상태이며 진입 이후 시가가 진입가 보다 일정수준 이하이면 Var11=var11+1 ‘var11을 1씩 증가 elseIf i_position=-1 And open(-1)>=i_Entryprice Then ‘현재 매도상태이며 진입 이후 시가가 진입가 보다 일정수준 이상이면 72 Var11=var11+1 ‘var11을 1씩 증가 End If ‘수익발생시가청산----------------------------------------------------If position=1 Then If Var10=profitlen Then Call exitlong("시가청산",Atmarket) End If Elseif position=-1 Then If Var10=profitlen Then Call exitshort("시가청산",Atmarket) End If End If ‘손실발생시가청산----------------------------------------------------If position=1 Then If Var11=stoplen Then Call exitlong("손실청산",Atmarket) End If Elseif position=-1 Then If Var11=stoplen Then Call exitshort("손실청산",Atmarket) End If End If ‘ATR추적스탑-------------------------------------------------------If position=1 Then Call exitlong("추적스탑",Atstop,hhv(1,high,i_barnumsinceEntry+1)-atr(atrlen)*len1) Elseif position=-1 Then Call exitshort("추적스탑",Atstop,llv(1,low,i_barnumsinceEntry+1)+atr(atrlen)*len1) End If End If <수식 0-23> 일간차트를 이용한 단기매매 신호 영역: 신호 이름: S_Rangebreak(v 0.2) Input: len(0.4), atrlen(3), len1(2.1) Var1=high(1)-low(1) ‘전일시가 고가의 거리 = range If open<=open(1) then Call plots1("매수라인",open+var1*len) End if If open>open(1) then Call plots2("매도라인", open-var1*len) End if If i_position=1 Then Call plots3("추적스탑", hhv(1,high, i_barnumsinceEntry+1)-atr(atrlen)*len1) Elseif i_position=-1 Then Call plots3("추적스탑", llv(1,low, i_barnumsinceEntry+1)+atr(atrlen)*len1) End If <표 0-20> S_Rangebreak(v0.2) 평가 항목 총 손익 기본진입전략 청산전략추가 108,087.34 113,694.63 평균 손익 360.29 338.38 최대 손실 -7,378.65 -3,691.87 총 매매수 300 336 연속 이익 매매수 11 8 연속 손실 매매수 9 13 최대 자본 인하액 -12,530.02 -8,106.99 승률 54.00 52.38 손익비 1.87 1.87 평균손익비 1.60 1.70 보상 비율 8.63 14.02 주) 최적 변수: len(0.4), atrlen(3), profitlen(2), stoplen(4), len1(2.1), 필수보유바수: 10 74 <수식 3-22>에서 수익발생시가청산은 진입 이후 시가를 기준으로 이익이 일정 수준이상 두 번 발생하면 시가에 청산하는 방법이며, 손실발생시가청산은 진 입 이후 시가를 기준으로 손실이 일정수준이상 세 번 발생하면 청산하는 방법 이다. <표 3-20>은 적용결과이다. 청산전략을 포함한 전략이 총손익, 최대 손실, 최 대자본인하액, 평균손익비, 보상비율 등에서 상대적으로 좋은 성과를 내는 것 을 알 수 있다. 이는 수익이 증가될 뿐 아니라 위험도 줄여주는 구조로서 청 산전략을 적용하는 것이 보다 효율적인 전략임을 알게 해준다. 신호선을 작성하여 전략과 함께 적용한 그림은 다음과 같다. <그림 0-32> 일간차트를 이용한 단기매매 전략 추적스탑 포인트 1에서 매도 하여 시가 수익이 두 번 발생한 2에서 수익발생 시가 청산하였 고, 3에서 매수하여 3봉 시가 손실이 발생한 4에서 손실발생 시가 청산하였 다. 그림에 표시된 추적스탑 포인트는 마지노선으로서 상당히 넓은 스탑포인 트를 가지고 있음을 알 수 있다. 또한 전략식에서 매수, 매도 방향성 제어를 사용하였으므로 setbaroneentry함수를 사용하지 않았다. 수익곡선은 다음과 같다. <그림 0-33> 수익곡선 역시 현재 시점에서 수익곡선이 상승하는 단기매매(오버나잇)의 효과를 잘 보 여주고 있다. 데이트레이딩 전략과 결합하여 포트폴리오 수익곡선의 변화를 보기로 하자. <그림 0-34> 포트폴리오 수익곡선 250000.00 n 200000.00 150000.00 o 100000.00 p 50000.00 0.00 1 76 173 345 517 689 861 1033 1205 1377 1549 1721 1893 2065 2237 2409 2581 2753 <그림 3-34>에서 e이 데이트레이딩 전략인 DD_RangeBreak(v0.3), d가 일간 단기매매 전략인 S_RangeBreak(v0.2), c이 결합된 수익곡선이다. 그래프에 화살표들을 보면 두 가지 전략이 서로 상호보완적으로 작용하여 결 합수익곡선(c)의 증가 추세가 상당히 개선되는 것을 알 수 있다. 특히 현시 점과 같이 추세가 있으면서 변동성이 낮은 국면에서는 단기매매 전략이 유용 하다는 것을 알 수 있다. <그림 3-31>와 비교하여도 <그림 3-34>의 결과가 더 좋은 것을 알 수 있다. 시스템 트레이딩 따라하기를 통해서 데이트레이딩 전략, 단기매매 전략 등 두 가지를 작성해 보았다. 4. 정리 다음페이지의 <표 3-21>에 제시된 전략은 총손익 기준 최고의 전략이 아닌, 적절한 수익과 위험 구조를 가진 것들로 선정하였다. 최대 손실을 보면 데이트레이딩(DD v0.3)과 분간 단기매매 전략(SS v0.2)은 유사 한 금액이지만 일간 단기매매전략(S v0.2)일 경우에는 226% 증가하여 일간단기매 매 전략의 위험이 크다는 것을 보여준다. 최대자본인하액은 데이트레이딩보다 분 간 단기매매 전략이 22% 증가하였고 일간 단기매매 전략은 데이트레이딩 전략보 다 85% 증가하였다. 수익 측면을 보면, 분간 단기매매의 경우 총손익이 -22%, 평균손익이 -16% 감 소하였으며, 일간 단기매매 전략의 경우에는 총손익이 22% 증가, 평균손익이 242%증가로 큰 폭 향상되었다. 수익과 위험의 증가율을 비교해 본 결과, 데이트레이딩 전략에서 분간 단기매 매로 전환시 위험은 증가하는 반면 수익은 감소하였다. 일간 단기매매로 전환 할 경우 위험도 증가하고 수익도 증가하는 양상이나, 분간 단기매매보다 위험 이 더 커진다는 것을 알 수 있다. 따라서 소규모자본으로 투자하는 일반투자 자는 데이트레이딩으로 접근하는 것이 바람직하다는 것을 기억하기 바란다. 평가 항목 총 손익 <표 0-21> 테스트 결과 DD_RangeBreak SS_RangeBreak (v0.3) (v0.2) 92,964.53 72,851.43(-22%) 평균 손익 98.90 82.97(-16%) 338.38(242%) 최대 손실 -1,132.98 -1,446.55(28%) -3,691.87(226%) 총 매매수 940 878 336 연속 이익 매매수 9 8 8 연속 손실 매매수 7 9 13 최대 자본 인하액 -4,382.02 -5,336.05(-22%) -8,106.99 (85%) 승률 49.57 39.98 52.38 손익비 1.69 1.42 1.87 평균손익비 1.72 2.14 1.70 보상 비율 21.22 13.65 14.02 10분 차트 len : 0.37 atrlen : 20 len1 : 3.2 비고 Entrystart : 920 Entrylimit : 1430 dayin : 3 주) 괄호 안의 비율은 DD_RangeBreak(v0.3) 기준 증감율임 10분 차트 len : 0.37 atrlen : 20 len1: 2.7 Tcount : 2 78 S_RangeBreak (v0.2) 113,694.63(22%) 일간차트 len : 0.4 atrlen :3 profitlen : 2 stoplen : 4 len1 :2.1 구분 <표 0-22> 제공된 전략들 전략명 설명 DD_RangeBreak(v0.1) 비율 추적스탑 적용 DD_RangeBreak(v0.2) ATR 추적스탑 적용 데이트레이딩 DD_RangeBreak(v0.21) 당일 매매 횟수 제한 (Day Trading) DD_RangeBreak(v0.22) 같은 방향 매매 제한 DD_RangeBreak(v0.3) 매매 횟수 + 같은 방향 매매 제어 매매 시간대 변경 3, 5,7,10,15 분 등 단기매매 SS_RangeBreak(v0.2) (Short –Term Trading) S_RangeBreak(v0.2) 추적스탑 + 방향성 청산 + 손실 시가 청산 + 이익시가 청산 진입 방향 제어 + 이익시가 청산 + 손실시가 청산 + 추적스탑 제 4 장 진입 전략 투자의 핵심 원칙: 저가 매수, 돌파 확인 진입 (Low Risk Entry, Break Out Entry) 진입 전략은 언제 시장에 신규 매수, 매도 하느냐를 결정하는 방법이다. 앞서 설명한 RangeBreak 전략은 시가에 전일 변동폭의 일정 부분을 더하거나 뺀 가 격대를 돌파하면 시장에 진입하는 방법이다. 이러한 형태의 전략을 일반적으 로 돌파(breakout)전략이라 한다. 즉 추세가 형성되는 것을 확인하고 시장에 진입하는 형태이다. 돌파 전략은 역시 추세 추종적인 매매 방법이다. 앞서 설명한 또 다른 유형 중에서 패턴 인식 전략, 변동성 확대 전략도 광의의 추세 추종적인 방법에 속 한다. 상당히 다른 유형의 전략으로는 역 추세(anti–trend, counter-trend) 추종적 인 매매 전략이 있다. 즉 저가 매수, 고가 매도 전략 형태를 말한다. 하지만 진정한 의미의 역 추세 추종적인 전략은 잘 사용되지 않는다. 예를 들어 스토 케스틱이 30이하로 하락하면 매수하는 전략의 경우, 다행히 30이하에서 바로 전환되면 모를까 그렇지 않는 경우에는 위험이 상당히 커지는 매매 전략이기 때문이다. 따라서 역 추세 추종적인 매매 전략이란 현재 진행 중인 추세가 약화되고 반 대 추세로 발달할 가능성이 있는 시점에서 진입하는 저가 매수, 고가 매도 전 략을 말한다. 스토케스틱의 경우에는 다음과 같은 형태로 진입하게 되면 저가 매수 진입 전략이 된다. 스토케스틱이 30이하에서 상승 전환하고, 연속 3양봉이 발생하면 매수 이러한 저가 매수, 고가 매도의 역추세 추종적인 전략은 사용 빈도가 높다. 왜냐하면 돌파 전략 보다 심리적 거부감이 적고, 진입 위험도 상당히 적은 편 이기 때문이다. 이동평균선을 이용한 많은 매매 전략이 있는데 이러한 전략들은 크게 두 가지 분류로 구분된다(매수 기준). 돌파 매수 형태: 이동평균선 상향 돌파 매수 저가 매수 형태: 이동평균선이 상승하고 있고 가격이 이동평균선 위에서 되 돌림(예: 3일 저가 형성)이 발생하고 다시 상승할 때 매수 Æ 눌림목 매수, 되돌림 매수 대부분의 진입 전략들은 기술적 분석에 근거한다. 왜냐하면 계량화 (Quantitative)가 가능하기 때문이다. 가격, 거래량, 매매 동향, 기술적 지표 들이 모두 사용 가능하다. 이 책에서는 6가지의 기술적 분석 분야별로 진입 전략을 제공할 것이다. 1. 돌파 전략 2. 수렴 돌파 전략 3. 추세선, 지지 / 저항선 분석 전략 4. 모형 분석(geometric pattern)전략 5. 패턴 분석(pattern) 전략 6. 기술적 지표를 이용한 전략 2 이 장에서 제공되는 진입 전략들의 조건은 다음과 같다. 전략유형 및 대상: 데이 트레이딩 전략, 선물 10분 차트 매매계약수: 1계약 매매(자산관리 전략 제외) 청산전략: 단순한 청산 전략 사용 필수적으로 보유해야 할 바 수: 초기값 100, 슬리피지 1틱 수수료: 대신증권 HTS수수료 기준 테스트 기간: 2000년 1월 4일~2003년 9월 30일 제공되는 전략은 다양한 기술적 분석 방법을 이용하는 매매 전략의 기초이므 로 직접 작성해보기를 권장한다. 또한 진입 제어, 시간대 최적화, 청산 전략, 자산 관리 전략 등을 다양한 형 태로 변형해 보고, 이런 과정을 통해서 자신의 자산규모나 매매스타일에 맞는 전략으로 완성할 것을 권한다. 본격적으로 진입 전략을 알아보기 전에 재진입과 진입 필터(filter)를 우선 이해하도록 하자. 재진입이라고 하는 것은 현재 시장에서 청산으로 수익을 획득하였는데, 그 후 에도 동일 방향으로 가격이 진행되어 같은 방향으로 다시 진입하는 것을 말한 다. 예를 들어 아침에 매수를 한 뒤 추적스탑으로 수익을 획득하였으나, 상승 추세가 계속 진행되어 퇴출 가격이나 장중 최고점을 갱신하면, 다시 매수 진 입을 하는 것을 말한다. 데이 트레이딩에서는 재진입의 필요성이 시간적 제한 때문에 적어진다. 하지만 일부 전략에서는 재진입이 필요한 경우가 많으므로 기억해 둘 필요가 있다. 두 번째로 진입 필터이다. 진입 필터는 많이 사용되는 개념이다. 앞으로 설명 할 전략들에서도 많이 사용되는데, 앞서 3장에서 설명한 진입 제어 방법도 일 종의 필터이다. 여기서 필터의 종류를 정리해보도록 하자. <표 0-1> 필터의 종류 필터유형 내용 가격(시, 고, 저, 종가)의 흐름 등으로 진입을 제어 시가보다 가격 필터 전일 종가보다 시가가 크면 매수 방향 전전일 금일 현재가가 크면 매수 방향 종가 보다 전일 종가가 낮으면 매수 방향 최고가가 전일 고가 보다 크면 매수 방향 거래량 감소시 진입 제어 거래량 필터 거래량 전일 증가 시 진입 거래량 보다 증가할 경우에만 진입 거래량 이동평균선이 증가하면 진입 매매 횟수 제한 등 진입 방향 필터 하루에 같은 한번매매 방향 진입제어 특정 시간대 매매 제어 시간 필터 9시 30분 전, 14,30분 이후 진입 제어 청산 이후 일정 시간 내 진입제어 기술적 지표를 필터로 사용 기술적 지표 필터 이동평균선이 ADX, 상승 중 일 때에는 매수만 DMI 지표가 상승 전환이거나 일정 수준 이상 일 때 만 진입 변동성 축소 구간에서 매매 제어 수렴 구간 필터 변동성 관련 지표(ATR,Range)가 상승 전환할 때만 진입 삼각수렴형 기타 패턴이나 직사각형 패턴이 발달하면 진입 제어 수렴 패턴 진입 제어 전략을 개발할 때 필터를 자주 사용하게 되는데 이때 조심하지 않으면 과 최 적화(over fitting)의 함정에 빠질 수 있다. 예를 들어 손실이 발생한 매매 건 별로 문제점을 파악하고, 그 문제점이 하나 의 매매에 국한된 경우라도 각각의 필터를 추가하여 매매 전략을 개발하는 경 우이다. 이럴 경우 상당히 긴 코딩이 될 뿐만 아니라 실제 매매에서는 발생하 4 지 않거나, 반대 현상이 발생하는 등의 문제가 있다. 이런 현상이 과 최적화 이며 과 최적화 시스템은 결국 수익을 발생하지 못하게 된다. 따라서 필터는 최소한으로 사용해야 하고, 일관되게 적용하는 것이 올바른 사 용법이다. 그럼 이제부터 기술적 분석의 6가지 유형에 따른 다양한 진입 전략 을 살펴보자. 1. 돌파전략(Break Out Strategy) 데이트레이딩에서는 돌파 전략 형태가 일반적이고 유용한 전략으로 평가 받고 있다. 추세 추종적인 전략 형태로 볼 수 있으며 단기 지지 / 저항선을 이용하 여 돌파 시점을 파악하는 전략들을 의미한다. 앞서 설명한 RangeBreak 전략도 돌파 전략이다. 추가적으로 자주 사용되는 돌 파 전략을 설명하기로 한다. (1) Pivot Point 이용 피봇 포인트(pivot point)를 이용하여 지지 / 저항선을 설정하고 이를 돌파하 는 방향으로 매매를 하는 방법이다. 피봇 포인트는 피봇 포인트, 1차 저항선, 2차 저항선, 1차 지지선, 2차 지지선 등의 5가지로 선으로 구성되어 있다. <표 0-2> 피봇 포인트 계산식 피봇 포인트 계산식 2차 저항선 피봇 포인트 + 전일 고가 전일 저가 1차 저항선 피봇 포인트 * 2 - 전일 저가 피봇 포인트 (전일 고가 + 전일 저가 + 전일 종가) / 3 1차 지지선 피봇 포인트 * 2 - 전일 고가 2차 지지선 피봇 포인트 + 전일 저가 전일 고가 피봇 포인트가 가장 중요한 중심선이 되고 아래 위로 각각 2개의 지지 / 저항 선이 위치하게 된다. 전일의 고가, 저가, 종가를 이용하여 계산한 값을 금일 의 지지 / 저항선으로 사용하는 것이다. 위의 식에서 변형된 다음과 같은 피 봇 포인트 계산 방식도 사용된다. <표 0-3> 피봇 포인트 계산식(변형) 피봇 포인트 계산식 2차 저항선 피봇 포인트 + 전일 고가 전일 저가 1차 저항선 피봇 포인트 * 2 - 전일 저가 피봇 포인트 (전일 시가 + 전일 고가+ 전일 저가 + 전일 종가) / 4 1차 지지선 피봇 포인트 * 2 - 전일 고가 2차 지지선 피봇 포인트 + 전일 저가 전일 고가 <표 4-3>은 지지 / 저항선 계산 방법은 <표 4-2>와 같은 반면, 피봇포인트를 계산할 때 전일 시가를 사용한다는 점에서 차이가 있다. 두 가지 식 모두 시가의 위치에 따라 지지 / 저항선이 바뀌게 되고 어느 지 지 / 저항선을 사용하는 것이 합리적인가를 결정해야 한다. <수식 4-1>은 두 가지 피봇 포인트를 모두 적용할 수 있도록 작성한 전략식이다. 6 <수식 0-1> DD_Pivot(일반) 영역: 전략 이름: DD_Pivot(일반) Input: len(3.2), method(1) If method=1 Then Var10 = (HighD(1) + LowD(1) + closed(1)) / 3 '피봇 Var11= Var10 * 2 - LowD(1) '1차 저항 Var12= Var10 + HighD(1) - LowD(1) '2차저항 Var9= Var10 * 2 - HighD(1) '1차 지지 Var8= Var10 - HighD(1) + LowD(1) '2차지지 Else Var10 = (HighD(1) + LowD(1) + closed(1)+opend(1)) / 4 '피봇 Var11= Var10 * 2 - LowD(1) '1차 저항 Var12= Var10 + HighD(1) - LowD(1) '2차저항 Var9= Var10 * 2 - HighD(1) '1차 지지 Var8= Var10 - HighD(1) + LowD(1) '2차지지 End If If Var9 > opend And opend> Var8 Then If TTIME<=1500 Then If position=0 And tdate<>entrydate(1) Then Call buy("매수1", Atstop, Def, Var9) Call sell("매도1", Atstop, Def, Var8) End If End If End If If Var10 > opend And opend>=var9 Then If TTIME<=1500 Then If position=0 And tdate<>entrydate(1) Then Call buy("매수2", Atstop, Def, Var10) Call sell("매도2", Atstop, Def, Var8) end If End If End if If Var11 > opend And opend>=var10 Then If TTIME<=1500 Then If position=0 And tdate<>entrydate(1) Then Call buy("매수3", Atstop, Def, Var12) Call sell("매도3", Atstop, Def, Var10) End If End If End If If Var12 > opend And opend>=var11 Then If TTIME<=1500 Then If position=0 And tdate<>entrydate(1) Then Call buy("매수4", Atstop, Def, Var12) Call sell("매도4", Atstop, Def, Var11) End If End If End If If opend>=var12 Then If TTIME<=1500 Then If position=0 And tdate<>entrydate(1) Then Call buy("매수5", Atstop, Def, opend+(Var12-var11)) Call sell("매도5", Atstop, Def, Var12) End If End If End If If opend<=var8 Then If TTIME<=1500 Then If position=0 And tdate<>entrydate(1) Then Call buy("매수6", Atstop, Def, Var8) Call sell("매도6", Atstop, Def, opend-(Var9-var8)) End If End If End If If position<>0 Then Call exitlong("매수청산", Atstop, hhv(1, high, barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산", Atstop, llv(1, low, barnumsinceentry+1)+atr(20)*len) End If 주) 신호 DD_Pivot(일반)도 제공됨. 필수적으로 보유할 바 수: 100 <수식 4-1>에서 method = 1일 경우에는 <표 4-2>의 방식으로 피봇 포인트를 계산하고 1이 아닐 경우에는 <표 4-3>의 방식으로 피봇 포인트를 계산한다. 매매는 시가가 형성되는 위치에 따라서 형성되는 피봇포인트를 이용하며, 매 수, 매도의 가격대는 가까운 지지 / 저항선이거나 두 번째로 가까운 지지 / 저항선을 이용하게 된다. 청산은 기초적인 ATR청산(3장 가변청산전략 참조)을 사용하였고 매매는 하루에 한번으로 제한하였다. 8 <그림 0-1> DD_Pivot(일반) 전략 주) method=1 적용 <그림 4-1>을 보면 시가가 형성된 위치에 따라 매수3, 매수2, 매수3(원호)이 연 속적으로 발생하였다. 시가의 위치에 따라 저항선이 각각 다르게 형성되며 이 저항선을 돌파하면 매수가 발생하게 된다. 적용결과는 <표 4-4>와 같다. 두 가지 전략 다 유용한 결과를 보였으며 이 중 방법 2가 더욱 좋은 결과를 보였다. 앞서 3장에서 설명한 바와 같이 위 전략에 다양한 변형이 가능하다. 하루에 두 번 매매를 허용한다든지, 청산 전략을 변경하는 등 다양한 변형에 따라 다른 결과를 보일 것이다. 더욱이 위 식에서 사용된 지지 / 저항선을 변경해 서 더 좋은 결과를 만들어 낼 수도 있을 것이다. 그러면 이제 기초적인 피봇 전략에다 역 추세적인 진입 방법을 추가해서 또 다른 피봇 전략을 만들어 보자. 총 손익 <표 0-4> DD_Pivot(일반)전략 적용결과 DD_Pivot(일반) DD_Pivot(일반) Method = 2 Method = 1 68,075.92 71,694.90 평균 손익 85.63 90.41 최대 손실 -1,349.60 -1,071.04 총 매매수 795 793 연속 이익 매매수 6 9 연속 손실 매매수 7 9 최대 자본 인하액 평가 항목 -5,762.18 -5,399.21 승률 49.81 48.68 손익비 1.49 1.52 평균손익비 1.50 1.61 보상 비율 11.81 13.28 변수 값(len1) 3.2, 1 3.2, 2 주) 2000년 1월4일 ~ 2003년 9월 30일 주) 필수적으로 보유해야 할 바 수: 100, 단위: 천원, %, 배 1) 피봇 역추세 전략 위 <수식 4-1>의 전략식에 포지션이 있는 상태에서 가격이 일정 수준 이상을 넘어섰을 경우에 바로 반대 포지션(예: 매수포지션 보유상태에서 매도포지션 으로 전환)으로 전환하는 역매매(Reversal)전략을 추가하는 방법을 사용한다. <수식 0-2> DD_Pivot(역추세) 영역: 전략 이름: DD_Pivot(역추세) Input: len(3.2), method(1) ’이상 <수식 4-1>과 동일-----------------------------------------------If tdate<>tdate(1) Then Var50=currententrynum End If If currententrynum-var50 =1 Then ‘당일 매매가 한번 이루어진 경우 If entryname="매수2" Or entryname="매수3" Then ‘진입명칭이 매수2, 매수3인 경우 If highd>var12 And low>var11 Then 10 Call sell("역매도", Atstop, Def, Var11) End If End If If entryname="매도2" Or entryname="매도3" Then ‘진입명칭이 매도2, 매도3인 경우 If lowd<var8 And high<var9 Then Call buy("역매수", Atstop, Def, Var9) End If End If End If <수식 4-2>는 <수식 4-1>에 역추세 진입 전략을 추가하였다. 매매 횟수는 하 루에 한번 진입에 역추세를 한번만 진입하는 방법을 사용하였고, 역추세는 매 수2, 매수3 의 경우에만 역매도 전략을 사용하고 매도2, 매도3 에서만 역매수 전략을 구사하게 된다. 적용한 그림은 다음과 같다. <그림 0-2> DD_Pivot(역추세) 주) method = 1 적용 <그림 4-2>를 보면 피봇 돌파로 인한 매수2가 발생하였으며 매수 청산이 발생 하기 전에 역매도가 발생하였다. 종가 청산으로 두 번 매매 모두 수익이 발생 한 경우이다. 위와 같이 역매도가 발생하는 전략을 추가하였을 때의 테스트 결과를 보자. <표 0-5> DD_Pivot(역추세) 전략 적용결과 DD_Pivot(역추세) DD_Pivot(역추세) 평가 항목 Method = 2 Method = 1 총 손익 73,143.87 70,680.26 평균 손익 89.97 87.58 최대 손실 -1,349.60 -1,654.70 총 매매수 813 807 연속 이익 매매수 6 9 연속 손실 매매수 6 8 최대 자본 인하액 -5,762.18 -5,683.29 승률 50.06 48.70 손익비 1.52 1.51 평균손익비 1.51 1.59 보상 비율 12.69 12.44 변수 값(len, method) 3.2, 1 3.2, 2 주) 단위: 천원, %, 배 테스트 결과 방법 1은 위험 구조가 직전의 DD_Pivot(일반)과 비슷한 반면 총 손익이 증가하는 효과를 나타내었다. 반면 방법 2의 경우에는 최대 손실이 증 가하고 총손익이 소폭 감소하여 역추세 진입 효과가 없다는 것을 알 수 있다. 역추세를 모든 진입에 사용하거나, 다른 청산 전략을 사용하는 등의 다양한 변형이 가능하다. 그럼 이제부터 더 큰 변화를 시도해보자. 2) 피봇 전략의 다른 변형 피봇 자체가 지지 / 저항선을 역할을 하는 선이라는 개념을 이용하여 앞서 설 명한 DD_RangeBreak 전략과 마찬가지로 시가에서 피봇을 이용한 지지 / 저항 선을 작성하는 전략을 생각할 수 있다. 즉 전일의 변동폭이 오늘의 지지 / 저 12 항선으로 사용되는 것이 아니고 전일 가격 움직임으로 계산된 피봇 및 지지 / 저항선의 폭을 이용해서 매매하는 전략이다. <수식 0-3> DD_Pivot(변경) 영역: 전략 이름: DD_Pivot(변경) Input: len(2.7), method(1), len1(0.64) If method=1 Then Var10 = (HighD(1) + LowD(1) + closed(1)) / 3 '피봇 Var11= Var10 * 2 - LowD(1)'1차 저항 Var12= Var10 + HighD(1) - LowD(1) '2차저항 Var9= Var10 * 2 - HighD(1) '1차 지지 Var8= Var10 - HighD(1) + LowD(1) '2차지지 Else Var10 = (HighD(1) + LowD(1) + closed(1)+opend(1)) / 4 '피봇 Var11= Var10 * 2 - LowD(1)'1차 저항 Var12= Var10 + HighD(1) - LowD(1)'2차저항 Var9= Var10 * 2 - HighD(1)'1차 지지 Var8= Var10 - HighD(1) + LowD(1)'2차지지 End If Var20=var11-var10 Var21=var10-var9 Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False: Then Call buy("매수", Atstop, Def, opend+var20*len1) End If If Cond2=False Then Call sell("매도", Atstop, Def, opend-var21*len1) End If End If If position<>0 Then Call exitlong("매수청산", Atstop, hhv(1,high, barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산", Atstop, llv(1,low, barnumsinceentry+1)+atr(20)*len) End If <수식 4-3>을 보면 두 가지 피봇 계산 방법은 동일하고 피봇과 1차 저항선과 의 거리와 피봇과 1차 지지선과의 거리를 금일시가에 더하거나 빼서 계산된 가격대를 지지 / 저항선으로 활용하는 방법이다. 매매는 같은 방향으로 제어 되어 있다. 적용된 그림은 다음과 같다. 그림 0-3 DD_Pivot(변경) 그림에서 보면 매수에서 손절, 매도로 이어지는 매매가 발생하였다. 두 가지 선이 지지 / 저항선으로 작동하게 되며, 앞서 설명한 DD_RangBreak와 유사한 전략 구조를 가지고 있다. 14 평가 항목 <표 0-6> DD_Pivot(변경) 전략 적용결과 DD_Pivot(변경) DD_Pivot(변경) Method = 2 Method = 1 총 손익 77,587.82 86,028.21 평균 손익 73.75 89.61 최대 손실 -1,020.67 -1,157.12 총 매매수 1,052 960 연속 이익 매매수 8 10 연속 손실 매매수 9 8 최대 자본 인하액 -4,327.60 -5,113.40 승률 48.00 48.96 손익비 1.46 1.60 평균손익비 1.58 1.66 보상 비율 17.93 16.82 2.7, 1, 0.64 2.7, 2, 0.74 변수 값 주) 필수적으로 보유해야 할 바 수: 100, 단위: 천원, %, 배 <표 4-6>을 보면 방법2가 상대적으로 방법1보다 수익이 큰 것을 알 수 있다. 기존의 피봇 전략보다 위험은 감소, 수익은 증가하는 형태로서 유용한 변형이 라 할 수 있다. 피봇과 마찬가지로 지지 / 저항선을 설정하는 방법으로 자주 사용되는 것이 디마크(DeMark) 지지 / 저항선이 있다. (2) 디마크(DeMark) 지지 / 저항선 디마크 지지 / 저항선(DeMark’s Projected Range)은 피봇 지지 / 저항선과 유 사하다. 계산 방법은 다음과 같다. 조 건 <표 0-7> 디마크 지지 / 저항선 계산식 계산식 금일 시가>전일 종가 목표 고가=(전일고가+전일종가+2*전일저가)/2-전일저가 목표 저가=(전일고가+전일종가+2*전일저가)/2-전일고가 금일 시가<전일 종가 목표 고가=(2*전일고가+전일종가+전일저가)/2-전일저가 목표 저가=(2*전일고가+전일종가+2*전일저가)/2-전일고가 금일 시가=전일 종가 목표 고가=(전일고가+2*전일종가+전일저가)/2-전일저가 목표 저가=(전일고가+2*전일종가+전일저가)/2-전일고가 금일 시가와 전일 종가의 관계에 따라 3가지 계산식으로 금일의 목표고가, 저 가를 설정하는 방법이다. 목표 고가는 저항선이고 목표 저가는 지지선이다. 테스트 결과 다음 3가지 방법이 유용한 결과를 나타내었다. DD_DeMark(일반): 피봇 일반 전략과 다르게 디마크 목표 고가와 목표 저 가 사이에서는 매매를 하지 않고, 목표 고가, 저가를 벗어 났을 경우에만 매 매를 한다. DD_DeMark(역추세): 일반 전략에다 디마크 목표 고가와 목표 저가 사이에 서는 역추세적인 매매를 하게 구성한다. DD_DeMark(변경): 시가에 디마크 목표 고가와 목표 저가의 폭의 일정 비 율을 가감해서 돌파 전략으로 사용한다. 피봇 사용법과 거의 같으나 DD_DeMark(일반)의 경우 목표 고가 및 목표 저가 사이에서는 매매를 안 하는 방법이 더 유용한 테스트 결과를 나타내어 이 방 법을 사용하였다. 3 가지 전략식은 다음과 같다. <수식 0-4> DD_DeMark(일반) 영역: 전략 이름: DD_DeMark(일반) Input: len(3.2), len1(0.34) If opend>closed(1) Then Var1=(highd(1)+closed(1)+2*lowd(1))/2-lowd(1) Var2=(highd(1)+closed(1)+2*lowd(1))/2-highd(1) Elseif opend<closed(1) Then 16 Var1=(2*highd(1)+closed(1)+lowd(1))/2-lowd(1) Var2=(2*highd(1)+closed(1)+lowd(1))/2-highd(1) Else Var1=(highd(1)+2*closed(1)+lowd(1))/2-lowd(1) Var2=(highd(1)+2*closed(1)+lowd(1))/2-highd(1) End If Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then If opend>var1 Then Call buy("매수1",Atstop,Def,opend+(Var1-var2)*len1) End If If opend<var2 Then Call buy("매수4",Atstop,Def,Var2) End If End If If Cond2=False Then If opend>var1 Then Call sell("매도1",Atstop,Def,Var1) End If If opend<var2 Then Call sell("매도4",Atstop,Def,opend-(Var1-var2)*len1) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len) End If <수식 0-5> DD_DeMark(역추세) 영역: 전략 이름: DD_DeMark(역추세) Input: len(3.2), len1(0.34 ), len2(0.07) If opend>closed(1) Then Var1=(highd(1)+closed(1)+2*lowd(1))/2-lowd(1) Var2=(highd(1)+closed(1)+2*lowd(1))/2-highd(1) Elseif opend<closed(1) Then Var1=(2*highd(1)+closed(1)+lowd(1))/2-lowd(1) Var2=(2*highd(1)+closed(1)+lowd(1))/2-highd(1) Else Var1=(highd(1)+2*closed(1)+lowd(1))/2-lowd(1) Var2=(highd(1)+2*closed(1)+lowd(1))/2-highd(1) End If Var3=(Var1+var2)/2 Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then If opend>var1 Then Call buy("매수1",Atstop,Def,opend+(Var1-var2)*len1) End If If opend<=var1 And opend>=var2 Then If lowd<var2 And high<var2+(Var1-var2)*len1 Then Call buy("역매수",Atstop,Def,Var2+(Var1-var2)*len2) End If End If If opend<var2 Then Call buy("매수2",Atstop,Def,Var2) End If End If 18 If Cond2=False Then If opend>var1 Then Call sell("매도1",Atstop,Def,Var1) End If If opend<=var1 And opend>=var2 Then If highd>var1 And low>var1-(Var1-var2)*len1 Then Call sell("역매도",Atstop,Def,Var1-(Var1-var2)*len2) End If End If If opend<var2 Then Call sell("매도2",Atstop,Def,opend-(Var1-var2)*len1) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len) End If <수식 0-6> DD_DeMark(변경) 영역: 전략 이름: DD_DeMark(변경) Input: len(2.7), len1(0.37) If opend>closed(1) Then Var1=(highd(1)+closed(1)+2*lowd(1))/2-lowd(1) Var2=(highd(1)+closed(1)+2*lowd(1))/2-highd(1) Elseif opend<closed(1) Then Var1=(2*highd(1)+closed(1)+lowd(1))/2-lowd(1) Var2=(2*highd(1)+closed(1)+lowd(1))/2-highd(1) Else Var1=(highd(1)+2*closed(1)+lowd(1))/2-lowd(1) Var2=(highd(1)+2*closed(1)+lowd(1))/2-highd(1) End If Var3=(Var1-var2) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then Call buy("매수1",Atstop,Def,opend+var3*len1) End if If Cond2=False Then Call sell("매도1",Atstop,Def,opend-var3*len1) End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len) End If 위 세가지 디마크 사용 방법은 피봇 사용법과 거의 유사하기 때문에 적용 그 림은 생략하고 테스트 결과를 보기로 하자. 20 평가 항목 총 손익 <표 0-8> DD_DeMark전략 적용결과 비교 DD_DeMark DD_DeMark (역추세) (일반) DD_DeMark (변경) 67,831.51 85,830.70 90,962.62 평균 손익 114.39 99.11 95.65 최대 손실 -1,047.33 -1,060.50 -1,132.98 총 매매수 593 866 951 연속 이익 매매수 9 9 10 연속 손실 매매수 6 7 7 최대 자본 인하액 -4,201.80 -5,448.99 -4,438.61 승률 52.45 50.58 49.42 손익비 1.79 1.66 1.67 평균손익비 1.62 1.62 1.71 보상 비율 변수 값 16.14 15.75 20.49 3.2, 0.34 3.2, 0.34,0.07 2.7,0.37 주) 필수적으로 보유해야 할 바 수: 100, 단위: 천원, %, 배 테스트 결과 DD_DeMark(변경)이 상대적으로 좋은 결과를 보였다. 피봇 전략들과 비교해 보더라도 보다 유용한 결과임을 알 수 있다. 피봇전략과 디마크의 전략의 특징적인 차이를 하나 더 설명하면, 현재 시점의 수익곡선의 차이를 들 수 있다. 피봇 및 디마크의 일반 전략의 누적 수익곡선을 보면서 설명하겠다. <그림 0-4> 피봇전략과 디마크 전략 비교 90000.00 80000.00 피봇(일반) y = 22.14x + 20469 R2 = 0.925 70000.00 60000.00 50000.00 40000.00 디마크(일반) y = 21.918x + 16683 R2 = 0.9668 30000.00 20000.00 10000.00 0.00 1 128 255 382 509 636 763 890 1017 1144 1271 1398 1525 1652 1779 1906 2033 2160 2287 2414 2541 2668 2795 <그림 4-4>는 피봇 전략(1번 방법)과 디마크 전략의 수익곡선을 동시에 표현 한 것으로서, 굵은 선이 디마크(일반) 전략의 수익곡선이다. 선형회귀식을 보 면 둘은 비슷하지만 현시점과 선형성에서 차이를 보인다. 디마크의 선 적합도 가 96%로 피봇 전략보다 더 높으며, 현시점에서 수익곡선의 상승유지 정도가 더 좋다는 것을 알 수 있다. 하지만 디마크 전략이 모든 상황에서 피봇 전략 보다 유용하다고 할 수는 없다. 이러한 현상은 위의 모든 디마크 전략에서 확 인 가능하다. 위와 같이 유사한 돌파 전략이라도 어떻게 지지 / 저항선을 설정하느냐에 따 라서 수익 및 위험의 구조가 바뀌게 되므로 합리적인 지지 / 저항선을 개발하 는 것이 중요하다는 것을 알 수 있다. 그러면 이제 다음으로 또 하나의 지지/저항 설정 방법에 대해서 알아보기로 하자. (3) 고정 시간대 돌파 전략(Time BreakOut) 고정 시간대 돌파 전략은 특정 시간대에서 지지 / 저항선을 설정하고, 이를 이용해서 매매하는 돌파 전략이다. 주로 장 시작 이후 일정 시간대를 이용하 게 되는데, 시가에서 일정 시간 동안은 그날의 추세를 형성하는 시간대로서 추세가 없으며, 해당 시간 이후의 진행 방향이 진정한 장중 추세를 의미한다 는 논리에 근거한다. 예를 들어 9시에서 10시 까지는 전일 포지션 정리 물량 및 오늘 신규 포지션 이 형성되는 시간대로 이 시간대에서는 매매를 하지 않고 이후 추세가 발달하 는 방향으로 매매를 하는 전략이다. 22 3가지 정도의 전략을 작성해 보기로 하자. DD_TimeBreak(시간) Î 시간 이용: 시간을 이용해서 전략식을 작성한다. 단, 개장이 10시에 시작되는 날(연초, 수능일)이나, 기타 특수한 상황으로 시간대 가 바뀐 경우는 제어해야 정확한 테스트가 가능해진다. DD_TimeBreak(Bar) Î 바 카운트 이용: 위와 같은 복잡한 제어를 피하기 위해서 시간 대신에 봉(바) 카운트를 적용한다. DD_TimeBreak(변형) Î 바 카운트 이용: 바 카운트에 적절한 필터를 적용 해서 변형 전략을 작성해 본다. <수식 0-7> DD_TimeBreak(시간) 영역: 전략 이름: DD_TimeBreak(시간) Input: timee(920), len(2.7), len1(2), len2(0.18) If tdate<>tdate(1) Then Var50=currententrynum End If If ttime=timee Then Var1=hhv(1,high,len1)-atr(20)*len2 Var2=llv(1,low,len1)+atr(20)*len2 End If If tdate<>20000104 And tdate<>20010102 And tdate<> 20010912 And tdate<>20011107 _ And tdate<>20020102 And tdate<>20021106 And tdate<>20030102 _ And tdate<>20031105 And tdate<>20040102 Then If ttime>timee And ttime<1500 Then If currententrynum-var50<=0 Then Call buy("매수", Atstop, Def, Var1) Call sell("매도", Atstop, Def, Var2) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len) End If <수식 4-7>에서 매매횟수를 하루에 한번으로 제어했으며, 9시 20분에서 2봉 최고가 및 최저가에 변동성을 감안한 지지 / 저항선을 작성하고 9시 20분 이 후에 돌파 방향으로 매매하는 전략식이다. 또한 연초, 수능시험일 등 매매 시 작 시간이 9시가 아닌 날은 매매를 하지 않게 되어 있다. <수식 0-8> DD_TimeBreak(Bar) 영역: 전략 이름: DD_TimeBreak(Bar) Input: barr(1), len(2.7), len1(2), len2(0.18) If tdate<>tdate(1) Then Var50=currententrynum Var49=barnum End If If barnum-var49=barr Then Var1=hhv(1,high,len1)-atr(20)*len2 Var2=llv(1,low,len1)+atr(20)*len2 End If If barnum-var49 > barr And ttime<1500 Then If currententrynum-var50<=0 Then Call buy("매수",Atstop,Def,Var1) Call sell("매도",Atstop,Def,Var2) End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len) End If <수식 4-8>은 <수식 4-7>과 유사하나, 차이점은 개장시점부터 봉을 카운트 해 서 지지 / 저항선을 결정하는 차이가 있다. 즉 10분봉 기준으로 barr=1 이면 9시 10분을 의미하게 되며, 3분봉 기준으로 barr= 3 이면 9시 9분이 된다. 그 러므로 거래소의 개장 시간이 변경되더라도 시간에 영향을 받지 않게 된다. 24 <수식 0-9> DD_TimeBreak(변형) 영역: 전략 이름: DD_TimeBreak(변형) Input: barr(1), len(2.7), len1(2), len2(0.18) If tdate<>tdate(1) Then Var50=currententrynum Var49=barnum End If If barnum-var49=barr Then Var1=hhv(1,high,len1)-atr(20)*len2 Var2=llv(1,low,len1)+atr(20)*len2 End If If barnum-var49 > barr And ttime<1500 Then If currententrynum-var50<=0 Then If opend<=close Then Call buy("매수", Atstop, Def, Var1) End If If opend>close Then Call sell("매도", Atstop, Def, Var2) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len) End If <수식 4-9>는 <수식 4-8>에 양봉이면(opend<=close) 매수 방향만, 음봉이면 매도 방향만 매매하라는 필터를 추가하였다. 자주 사용되는 유용한 필터이다. 한가지 유의할 점은 하루에 한번으로 매매가 제어되어 있더라도 매매가 두번 발생할 수 있다는 것이다. 대부분의 돌파 전략에서 발생할 수 있는데, 그 이 유는 너무 좁은 지지 / 저항선을 사용하는 경우이다. DD_TimeBreak(Bar)를 적용한 그림을 보자. <그림 0-5> DD_TimeBreak(Bar) 위 그림을 보면 네모로 표시된 부분에서 같은 봉에 매수, 매도가 동시에 발생 하는데 이는 지지 / 저항선의 폭이 좁아서 발생하는 것으로서 실시간 매매에 서도 하루에 두 번 매매가 발생할 수 있다. 이를 실시간 매매에서 제어하기 위해서 setbaroneentry란 함수를 사용해서 한 봉에서 한번 매매만 발생하게 할 수 있다. 위 세가지 시간대 돌파 전략의 테 스트 결과는 <표 4-9>와 같다. 26 평가 항목 총 손익 <표 0-9> 고정시간대 돌파전략 적용 결과 DD_TimeBreak DD_TimeBreak (bar) (시간) DD_TimeBreak (변형) 82,876.10 84,030.95 78,394.80 평균 손익 90.48 91.14 86.15 최대 손실 -1,092.32 -1,092.32 -1,092.32 총 매매수 916 922 910 연속 이익 매매수 7 7 7 연속 손실 매매수 10 10 10 최대 자본 인하액 -8,933.93 -9,000.66 -4,813.35 승률 45.31 45.34 44.73 손익비 1.58 1.58 1.53 평균손익비 1.90 1.90 1.89 보상 비율 9.28 9.34 16.29 920, 2.7, 2, 0.18 1, 2.7, 2, 0.18 주) 필수적으로 보유해야 할 바 수: 100, 단위: 천원, %, 배 1, 2.7, 2, 0.18 변수 값 위 결과를 보면 수익 측면에서 DD_Timebreak(변형)이 가장 낮은 수준이다. 하 지만 위험 측면을 보면 DD_Timebreak(시간) 및 DD_Timebreak(Bar) 전략의 최 대자본인하액이 약 900만원 전후로서 앞서 설명한 피봇 및 디마크 전략들보다 상당히 높은 수준인 것을 알 수 있다. 따라서 보상 비율이 10을 넘지 못한다. 반면, DD_Timebreak(변형) 전략은 480만원으로서 상대적으로 작은 수준임을 알 수 있고 앞서 설명한 피봇 및 디마크 전략과 유사한 수준이다. 따라서 DD_Timebreak(시간) 및 DD_Timebreak(Bar) 전략보다 DD_Timebreak(변 형) 전략이 수익은 다소 떨어지지만, 상대적으로 위험 수준이 낮아서 실제 사 용하기에 적절한 형태인 것으로 판단된다. 그럼 이제 장중 최고가, 최저가를 이용한 돌파 전략을 만들어 보기로 하자. (4) 장 중 최고, 최저가 이용 돌파 전략 분차트에서 장중 최고가는 highD, 최저가는 lowd로 표현된다. 이 두가지 값을 이용해서 돌파 시점을 설정하여 매매하는 것이 장 중 최고, 최저가 이용 돌파 전략이다. 즉 장중 최저가 + 일정 수준선을 저항선으로 설정하고 이를 상향 돌파할 때 매수하고, 장중 최고가 – 일정 수준선을 지지선으로 설정하고 이를 하향돌파할때에 매도한다. 일정 수준은 전일 변동폭을 사용한다. 전략식은 다음과 같다. <수식 0-10> DD_HighDLowDBreak 영역: 전략 이름: DD_HighDLowDBreak Input: len(2.9), len1(0.53) Var1=highd(1)-lowd(1) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If tdate<>tdate(1) Then Var50=currententrynum Var10=atr(20)*len1 End If If ttime<1500 Then If Cond1=False And currententrynum-var50<=1 Then ‘매매횟수 제한 Call buy("매수",Atstop,Def,lowd+var1*len1) End If If Cond2=False And currententrynum-var50<=1 Then ‘매매횟수 제한 Call sell("매도",Atstop,Def,highd-var1*len1) End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len) End If 위 식은 하루 중 매매 횟수를 제어하는 식이 추가되어 있다. 1 이면 2 번 매 매를 허용하고 2 이면 3번 매매를 허용한다. 두번, 세번매매를 테스트 해보자. 우선 적용된 그림은 다음과 같다. 28 <그림 0-6> DD_HighDLowDBreak <그림 4-6>을 보면 이 전략의 특징이 한눈에 파악된다. 위 그림에서처럼 최초 매수 발생 이후 가격이 상승하게 되면 매도선이 따라서 상승하고 매수선과 역 전된다. 따라서 추적 스탑 형태를 내포하게 될 뿐만 아니라 위 그림처럼 빠른 역매도가 가능하다. 테스트 결과는 다음과 같다. <표 0-10> DD_HighDLowDBreak전략 적용 결과 DD_HighDLowDBreak DD_HighDLowDBreak 평가 항목 세번 매매 두번 매매 총 손익 91,769.77 93,797.79 평균 손익 75.47 70.31 최대 손실 -1,632.56 -1,632.56 총 매매수 1,216 1,334 연속 이익 매매수 8 8 연속 손실 매매수 10 12 최대 자본 인하액 -4,863.61 -5,839.55 47.78 47.68 손익비 1.49 1.46 평균손익비 1.63 1.61 보상 비율 18.87 16.06 2.9, 0.53 2.9,0.53 승률 변수 값 주) 필수적으로 보유해야 할 바 수: 100, 단위: 천원, %, 배 테스트 결과 두 번 매매 보다 세번까지 매매를 허용하는 것이 더 좋은 수익을 발생하였으나, 보상비율이 낮아져 위험도 같이 증가한다는 것을 알 수 있다. 다른 전략과 차이를 보이는 것은 매매 건수이다. 매매 건수가 1,000 건 이상 이면서도 수익과 위험의 구조가 양호하다는 것을 알 수 있다. 문제점이 있다 면 연속 손실 횟수가 연속 이익 횟수보다 크다는 것으로서, 다소 나쁜 진입을 제어하는 전략이 추가되면, 더 유용한 전략이 될 것이라 판단된다. 2. 수렴 돌파 전략 수렴 돌파 전략은 가격 수렴이 발생한 다음에 돌파하는 방향으로 매매하는 전 략으로서 앞서 설명한 돌파 전략과 유사한 매매 전략이다. 하지만 수렴이 발 생하는 것을 전제로 한다는 차이점이 있다. 그러면 가격의 수렴이란 구체적으 로 무엇을 의미하는가? 수렴은 가격 흐름에 추세가 없고 쉬는 구간을 의미한다. 즉 횡보 추세를 의미하 는데, 이 횡보 추세가 발달하면 그 다음은 추세 구간(상승이나 하락)을 기대할 수 있다. 따라서 수렴이 발생한 다음 지지 / 저항선을 돌파하는 방향이 추세가 된다. 따라서 돌파 전략의 진입 제어인 필터(Filter)로서 유용하게 사용되며, 독립적인 전략으로도 사용 가능하다. 수렴은 Congestion, Consolidation 등으로 표기되며 주로 가격이 밀집되는 구 간이나 변동성이 축소되는 구간이라 설명할 수 있다. 기술적 분석을 통해 수 렴 국면을 찾는 다양한 방법이 있는데, 실제로 눈으로 찾기는 쉬우나 코딩을 통해 수렴 구간을 표현하기에는 어려운 점이 많다. 우선 기술적 분석에서 수 렴 구간을 표현할 수 있는 방법을 정리해보자. 30 <표 0-11> 기술적 분석을 통한 수렴 구간의 표현 구분 모형 분석 기술적 지표 항목 설명 삼각형(triangle) 상승추세선과 하락추세선의 교차 형태 사각형(rectangle) 상승추세선과 하락추세선의 평행 형태 ATR, Range, 표준편차, 역사적 변동성 등 변동성이 적은 구간 볼린저 밴드 밴드폭이 좁은 수렴 구간 그물망 장단기 이동평균선이 수렴하는 구간 일목균형표의 선행스팬 선행스팬1과 선행스팬2의 밀집구간 주가 채널 채널 폭이 좁은 구간 DMI, ADX 지표 Adx 지표가 일정 수준 이하 인사이드(inside day=ID) 전일고가>고가 and 전일저가<저가 ID1: 1 봉 인사이드 ID2: 2 봉 인사이드 Narrow range(NR) Range(고가-저가)가 적은 형태 NR2: 2 봉 수렴 NR3: 3 봉 수렴 패턴 분석 위와 같이 다양한 방법으로 수렴구간을 설정할 수 있다. 그러나 모형분석에 있어 한가지 명심해야 할 점은 깃대형이나 깃발형 또한 수렴패턴의 일종이지 만, 이것들은 상승이나 하락 후 조정(retracement)패턴으로 발생하므로 저가 진입이라는 관점에서 직전 추세와 같은 방향의 진입을 기초로 한다는 점이다. 수렴돌파 전략은 낮은 위험을 가진 진입(low risk entry)이라는 큰 장점을 가 지고 있다. 수렴이 발생하면 변동성이 작아 낮은 위험상태에서 진입할 수 있 다. 또한 되돌림 시점에서 진입하는 전략이므로 돌파 전략보다 유리한 가격 및 낮은 위험에서 진입을 하게 된다. 따라서 많은 계약수로 진입할 수 있게 되는 장점을 확보하는 전략 형태이다. 그러면 다양한 수렴 돌파 전략(DD_CongestionBreak)을 작성해보도록 하자. (1) ATR, Range 이용 ATR, Range로 수렴 국면을 설정하는 방법부터 알아보기로 하자. 변동성을 대 표하는 지표인 ATR과 Range를 이용해서 변동성이 축소 되었을 때만 매매를 하 는 전략을 고려할 수 있다. 여기서 우선 기억해야 할 것은 ATR은 시가 갭을 포함한 전략 식이고, Range는 시가 갭을 포함하지 않은 가격의 진폭만으로 변동성을 측정하는 차이가 있다 는 것이다. 즉 ATR의 경우 아침 시간대에 변동성이 크게 나타나는 현상이 Range를 이용하면 해결이 된다. 또 하나 고려해야 할 것은 ATR를 사용할 경우 과거 데이터의 처음값부터 참조 하기 때문에 오프라인과 온라인 모드에서 매매신호에 차이가 발생할 수 있다. 진입과 청산 전략 모두에서 ATR을 사용할 경우 매매 신호에 차이가 발생할 수 있는데, 그 이유는 온라인 모드의 데이터 길이가 짧기 때문이다. 따라서 매매 신호가 왜곡될 수도 있다. 이러한 데이터 길이에 따른 매매 신호 왜곡 가능성 은 지수이동평균(Exponential Moving Average)도 마찬가지이다. 이러한 차이점을 인식하고 ATR, Range를 동시에 적용할 수 있는 전략 식을 작 성해보자. <수식 0-11> DD_CongestionBreak(방법1) 영역: 전략 이름: DD_CongestionBreak(방법1) Input: len(10), len1(70), len2(0.37), s1(2.7), method(1), delay(8) If method=1 Then Var1=atr(len) Var2=atr(len1) Elseif method=2 Then Var20=high-low Var1=mov(Var20,len,s) Var2=mov(Var20,len1,s) 32 End If Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Var1<var2 Then Var10=1 Else Var10=0 End If If hhv(1,Var10,delay)=1 Then If ttime<1500 Then If Cond1=False And high<opend+(highd(1)-lowd(1))*len2 Then Call buy("매수",Atstop,Def,opend+(highd(1)-lowd(1))*len2) End If If Cond2=False And low>opend-(highd(1)-lowd(1))*len2 Then Call sell("매도",Atstop,Def,opend-(highd(1)-lowd(1))*len2) End If If Cond1=False And high>opend+(highd(1)-lowd(1))*len2 Then Call buy("매수1",Atstop,Def,hhv(1,high,delay)) End If If Cond2=False And low<opend-(highd(1)-lowd(1))*len2 Then Call sell("매도1",Atstop,Def,llv(1,low,delay)) End If End if End If If position<>0 then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s1) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s1) End If <수식 4-11>은 method = 1을 입력하면 ATR을 이용하게 되며 method = 2를 입 력하면 Range를 이용하게 된다. 수렴구간의 설정은 단기 ATR이 장기 ATR보다 적은 구간으로 설정하였고, 진입 방법은 RangeBreak와 일정기간 고정 돌파를 사용하였다. 적용그림은 다음과 같다. <그림 0-7> DD_CongestionBreakt(방법1) 주) 지표: DD_CongestionBreakt(방법1) 적용, 신호: 진입, 청산 적용 그림을 보면 단기 변동성이 장기 변동성이 이하에서 일정 기간 지속되면 변동 성 수렴 구간이 되며 이 구간에서 Rangebreak 이나 일정기간 고저돌파(위 그 림은 8봉 최저가 하향 돌파)로 시장에 진입하는 것을 보여주고 있다. ATR 및 Range 테스트 결과는 <표 4-12>와 같다. 34 <표 0-12> DD_CongestionBreak 전략 적용결과 비교 DD_CongestionBreak(방법1) DD_CongestionBreak(방법1) 평가 항목 Method = 2 Method = 1 총 손익 88,370.01 93,058.37 평균 손익 102.16 108.46 최대 손실 -1,132.98 -1,132.98 총 매매수 865 858 연속 이익 매매수 10 10 연속 손실 매매수 6 7 최대 자본 인하액 -4,143.31 -3,120.68 승률 50.64 51.52 손익비 1.80 1.86 평균손익비 1.75 1.75 보상 비율 21.33 29.82 변수 값 10, 70, 0.37, 2.7, 1, 8 10, 50, 0.37, 2.7, 2, 7 주) 필수적으로 보유해야 할 바 수: 100 둘 다 유용한 결과를 나타냈다. 특히 Range를 이용한 경우에 보상비율이 29.82로서 높은 수익에 적은 위험 구조를 갖게되었다. 위와 같이 변동성이 적 은 구간에서 매매를 하는 방법을 통해 시스템의 위험을 줄일 수 있다는 것을 알 수 있다. 그러면 이제부터 <표 4-11>에서 설명한 다른 기술적 지표들을 이 용해서 수렴구간 매매 전략을 작성해보도록 하자. (2) 볼린저 밴드(Bollinger Band) 볼린저 밴드란 이동평균선에 가격의 표준편차를 더하거나 빼서 밴드를 표시하 는 것으로서, 추세의 확장 및 수렴을 잘 설명하는 지표이다. 3가지 선으로 구 성된다. <표 0-13> 볼린저 밴드 내 용 구 분 상단선(Upper band) 중심선 + N 일간 종가의 표준편차 * 승수 중심선(Middle Band) N 일간 종가 단순 이동평균선 하단선(Lower Band) 중심선 - N 일간 종가의 표준편차 * 승수 밴드폭(상단선 - 하단선)이 넓다는 것은 가격 변동성이 크다는 것을 나타내고, 밴드폭이 좁다는 것은 가격 변동성이 적다는 것을 나타낸다. 또한 중심선은 이동평균선으로서 상승하면 상승추세, 하락하면 하락추세를 나타내어 추세 및 변동성을 동시에 파악 가능한 지표이다. 여기서는 수렴 구간에 대한 데이트레이딩 전략으로만 한정해서 전략식을 작성 하면 다음과 같다. <수식 0-12> DD_CongestionBreak(볼린저 밴드) 영역: 전략 이름: DD_CongestionBreak(BBand) Input: len(40), len1(1), len2(30), multi(5), delay(5), s1(0.37), s2(2.7) Var50=bbandtop(close,len,len1,s) Var49=bbandbot(close,len,len1,s) Var1=var50-var49 Var2=high-low Var3=mov(Var2,len2,s)*multi Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Var1<var3 Then Var10=1 Else Var10=0 End If If hhv(1,Var10,delay)=1 then If ttime<1500 Then If Cond1=False And bbandmid(close,len,len1,s)>bbandmid(close,len,len1,s,1) Then Call buy("매수",Atstop,Def,opend+(highd(1)-lowd(1))*s1) End If If Cond2=False And bbandmid(close,len,len1,s)<bbandmid(close,len,len1,s,1) Then Call sell("매도",Atstop,Def,opend-(highd(1)-lowd(1))*s1) 36 End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If <수식 4-12>를 보면 밴드폭이 평균 Range의 일정 배수 이하일 경우에 수렴 구 간으로 판단하고, 이 구간에서만 밴드중심선이 상승하면 RangeBreak 매수 전 략을, 중심선이 하락하면 Rangebreak 매도 전략을 구사하게 된다. 지표 및 적 용된 그림은 다음과 같다. <그림 0-8> DD_CongestionBreak(볼린저 밴드) 주) 신호: 진입, 청산 가격, 지표: DD_CongestionBreak(BBand) 적용 <그림 4-8>은 변동성 수렴(밴드폭 < Range)이 발생한 구간에서 매도 방향으로 매매가 발생하여 수익이 발생한 사례를 표시한 그림이다. 9월 22일에는 변동 성 확대가 지속되고 있어 매매가 발생하지 않게 된다. 테스트 결과는 나중에 보기로 하고 이제부터 그물망 차트를 이용한 수렴 구간 매매 전략에 대해서 알아보자. (3) 그물망 차트(Multi Moving Average Indicator) 그물망 차트란 이동 평균선의 변수값을 점진적으로 증가시키면서 중첩하여 표 시한 지표이다. 예를 들어 초기 이동평균 값이 20이고 이동 평균 개수가 10 , 증감은 2라고 하면, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40 이동 평균 선 11 개를 동시에 표시하는 지표이다. 이렇게 표시를 하게 되면 이동 평균선 들의 수렴과 확장이 잘 표시 된다. 볼린저 밴드와 함께 수렴국면 파악에 유용 하게 사용되는 지표이다. 여기서는 역시 수렴 국면 파악만을 이용한 전략을 작성하는데 수렴 국면은 이 동평균선들이 밀집되는 구간으로서 최대값을 가진 이동평균선과 최소값을 가 진 이동평균선의 차를 이용한다. <수식 0-13> DD_CongestionBreak(그물망) 영역: 전략 이름: DD_CongestionBreak그물망) Input :len(20), cont(10), stepp(2), multi(2), delay(5), s1(0.37), s2(2.7) Var50=mov(close,len,s) Var49=mov(close,len,s) For i = 1 To cont If Var50<mov(close,len+stepp*i,s) Then Var50=mov(close,len+stepp*i,s) End If If Var49>mov(close,len+stepp*i,s) Then Var49=mov(close,len+stepp*i,s) End If Next Var1=var50-var49 Var2=high-low Var3=mov(Var2,len,s)*multi Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Var1<var3 Then Var10=1 Else Var10=0 End If If hhv(1,Var10,delay)=1 And hhb(1,Var10,delay)=delay-1 Then If ttime<1500 Then 38 If Cond1=False Then Call buy("매수",Atstop,Def,opend+(highd(1)-lowd(1))*s1) End If If Cond2=False Then Call sell("매도",Atstop,Def,opend-(highd(1)-lowd(1))*s1) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If <수식 4-13>을 보면 20봉 이동 평균에서 40봉 이동평균선까지 작성하고 각 봉 마다 최대값과 최소값의 차인 변동성 폭과 Range의 가격 변동성 폭을 비교해 서 그물망의 폭이 적을 경우에 데이 트레이딩 돌파 전략을 구사하는 전략식이 다. 적용한 그림은 다음과 같다. <그림 0-9> DD_CongestionBreak(그물망) 주) 신호: 진입, 청산가격, 그물망차트, 지표: DD_CongestionBreak(그물망) <그림 4-9>를 보면 그물망 변동폭이 Range보다 적어져서 5봉(delay=5) 이 지 나면 수렴구간으로 판단하고, 돌파 전략이 작동하기 시작한다. 여기에 대한 테스트 결과도 일목균형표를 설명한 뒤 함께 보기로 한다. (4) 일목균형표(一目均衡表) 일본에서 개발된 일목균형표는 현재 우리나라에서 인기가 많은 지표로서 엘리 어트 파동 이론이나 갠 이론 등과 함께 종합 분석(패턴, 비율, 시간)이 가능 한 기술적 지표이다. 여기서는 일목 균형표의 선행스팬1과 선행스팬2로 구성 된 구름대의 폭 만을 이용해서 수렴구간을 설정하는 전략을 만들어 보자. <수식 0-14> DD_CongestionBreak(일목) 영역: 전략 이름: DD_CongestionBreak(일목) Input: len(9), len1(24), len2(20), multi(2), delay(8), s1(0.37), s2(2.7) Var50 = (hhv(1, high,len) + llv(1, low,len)) / 2 Var49 = (hhv(1, high,len1 ) + llv(1, low,len1) ) / 2 Var48=(Var50+var49)/2 Var47 = (hhv(1, high, len1*2) + llv(1, low, len1*2) ) / 2 Var46=var47(len1-1) '선행스팬2 Var45=var48(len1-1) '선행스팬1 Var1=abs(Var45-var46) '구름대 폭 Var2=high-low Var3=mov(Var2,len2,s)*multi Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Var1<var3 Then Var10=1 Else Var10=0 End If If hhv(1,Var10,delay)=1 Then If ttime<1500 Then If Cond1=False Then 40 Call buy("매수",Atstop,Def,opend+(highd(1)-lowd(1))*s1) End If If Cond2=False Then Call sell("매도",Atstop,Def,opend-(highd(1)-lowd(1))*s1) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If <수식 4-14>를 보면 최적화를 통해서 기본적으로 사용하는 변수값(선행스팬 1(9,26봉), 선행스팬2(52))과 다소 다르게 선행스팬1은 9, 24, 선행스팬2는 48을 사용하였다. 이 구름대의 폭이 Range보다 적으면 수렴 구간으로 간주하 고 돌파 전략을 구사한다. 적용한 그림은 다음과 같다. <그림 0-10> DD_CongestionBreak(일목) 주) 신호: 일목균형표(구름대), 지표: DD_CongestionBreak(일목) <그림 4-10>을 보면 구름대 폭이 range폭 보다 적은 구간(히스토그램)에서 데 이트레이딩 전략 중 Rangebreak의 진입 방법을 이용해서 매도를 두 번 시행한 구간을 표시하고 있다. 앞서 설명한 볼린저 밴드와 그물망 차트, 일목 균형표를 이용한 수렴 돌파 전 략의 테스트 결과를 동시에 보기로 하자. <표 0-14> 테스트 결과(볼린저 밴드, 그물망, 일목균형표) 평가 항목 총 손익 볼린저 밴드 그물망 일목균형표 79,483.71 89,154.10 83,626.37 평균 손익 106.12 100.29 98.85 최대 손실 -953.22 -1,132.98 -1,120.12 총 매매수 749 889 846 연속 이익 매매수 8 8 8 연속 손실 매매수 8 7 8 최대 자본 인하액 -2,917.82 -3,993.36 -4,197.29 승률 50.33 49.83 49.76 손익비 1.82 1.73 1.73 평균손익비 1.80 1.74 1.75 보상 비율 27.24 22.33 19.92 40,1,30,5,5,0.37,2.7 20,10,2,2,5,0.37,2.7 9,24,20,2,8,0.37,2.7 변수 값 주) 필수적으로 보유해야 할 바 수: 100, 단위: 천원, %, 배 세가지 전략 모두 평균손익이 10 만원 전후로 유용한 결과를 보였다. 특히 볼 린저 밴드의 경우 총손익이 가장 낮은 반면, 최대 손실 및 최대 자본인하액이 가장 낮은 수준으로 보상비율은 27.31로 가장 높게 나타났다. 또한 일목균형 표 보다는 그물망 차트가 수익과 위험 측면에서 좀더 좋은 결과를 나타냈다. 42 (5) 주가 채널(Price Channel) 주가 채널은 일정 기간 동안의 최고가 채널선과 최저가 선으로 구성된 지표이 다. 이동평균선과 함께 가장 기본적인 기술적 지표로서, 여기서는 수렴 돌파 형태로만 전략 식을 작성해 보도록 하자. <수식 0-15> DD_CongestionBreak(주가채널) 영역: 전략 이름: DD_CongestionBreak(주가채널) Input: len(15), multi(6), delay(5), s1(0.53), s2(2.7) Var1=hhv(1,high,len)-llv(1,low,len) Var2=high-low Var3=mov(Var2,len,s)*multi Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Var1<var3 Then Var10=1 Else Var10=0 End If If hhv(1,Var10,delay)=1 then If ttime<1500 Then If Cond1=False Then Call buy("매수1",Atstop,Def,lowd+(highd(1)-lowd(1))*s1) End If If Cond2=False Then Call sell("매도1",Atstop,Def,highd-(highd(1)-lowd(1))*s1) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End if <수식 4-15>를 보면 주가 채널의 폭이 Range의 일정 폭 이하일 경우에 수렴 국면이라 판단하고, 수렴 구간이 발생하면 돌파 진입 전략을 구사하는 전략식 이다. 적용된 그림은 다음과 같다. <그림 0-11> DD_CongestionBreak(주가채널) 주) 신호: 진입, 청산가격, 지표: > DD_CongestionBreak(주가채널) <그림 4-11>을 보면 가격에는 주가 채널(price channel)이 적용되어 있다. 이 상한폭이 Range의 일정 수준 이하면 수렴 국면이라 판단하고 돌파형태의 진입 전략을 구사하게 되는데, <그림 4-11>의 경우 매수 방향으로 매매가 발생하였 다. 테스트 결과는 DMI지표와 함께 확인하고 이제 DMI지표를 활용하여 수렴 돌파매매 방법에 대해서 알아보자. (6) DMI 지표 이용 DMI(Directional Movement Index) 지표는 가장 빈번하게 사용되는 수렴 구간 파악 지표로서 +DI, -DI, ADX, ADXR 의 4가지 선으로 구성되어 있다. 여기서는 자세한 공식의 전개를 피하고 간단하게 각각의 선의 의미만을 파악해보자. 우선 +DI지표는 상승(uptrend) 추세를 나타내며 –DI 지표는 하락(downtrend) 추세를 나타낸다. 따라서 +DI > -DI 이면 상승추세가 진행 중이고, 반대이면 44 하락추세가 진행 중임을 파악할 수 있게 된다. ADX지표는 변동성을 나타내는 지표로서 ADX가 일정 수준이나 ADXR보다 크고 상승 중이면 변동성이 증가하고 있다는 것을 나타내며, 일정수준 이하거나 하락 중이면 변동성 감소나 수렴 국면이라는 것을 나타내는 지표이다. ADXR지표는 ADX지표의 이동평균선 형태 의 지표이다. 따라서 ADX가 일정 수준 이하이거나 하락하고 있는 구간을 수렴 구간으로 정 의할 수 있으며, 이러한 지표의 특성을 이용해서 수렴 돌파 전략을 작성할 수 있게 된다. <수식 0-16> DD_CongestionBreak(DMI) 영역: 전략 이름: DD_CongestionBreak(DMI) Input: len(21), level(30), delay(2), s1(0.37), s2(2.7) Var1=adx(len) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Var1<level And Var1>var1(delay) Then If ttime<1500 Then If Cond1=False Then Call buy("매수",Atstop,Def,opend+(highd(1)-lowd(1))*s1) End If If Cond2=False Then Call sell("매도",Atstop,Def,opend-(highd(1)-lowd(1))*s1) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If <수식 4-16>을 보면 RangeBreak 전략을 사용하는데 ADX 지표가 일정 수준 이 하에서 상승 중일 경우에만 진입 하는 식으로 구성되어 있다. 적용된 그림은 다음과 같다. <그림 0-12> DD_CongestionBreak(DMI) 주) 신호: 진입, 청산 가격, 지표: DMI(ADX) <그림 4-12>를 보면 7월 11일에서는 ADX지표가 상승 중이어서 진입이 가능한 시점으로 출발하였으나 30선을 넘어서면서는 매매가 발생하지 못하게 되었다. 반면 7월14일에는 다시 ADX지표가 상승중으로 매매 발생이 가능하게 출발하였 고 매수 진입이 발생하였다. 앞서 설명한 주가 채널 방법과 함께 테스트 결과를 보기로 하자. 46 <표 0-15> 테스트 결과(주가채널, DMI 지표) 평가 항목 주가 채널 총 손익 DMI 지표 84,119.48 82,278.42 평균 손익 62.26 118.22 최대 손실 -1,215.33 -961.12 총 매매수 1,351 696 연속 이익 매매수 7 8 연속 손실 매매수 9 7 최대 자본 인하액 -4,870.95 -3,379.31 승률 46.34 51.15 손익비 1.42 1.95 평균손익비 1.64 1.86 보상 비율 17.27 24.35 15, 6, 5, 0.53, 2.7 21, 30, 2, 0.37, 2.7 변수 값 주) 필수적으로 보유해야 할 바 수: 100 <표 4-15>를 보면 비슷한 총 손익을 보이고 있으나 주가 채널의 경우 위험이 다소 커서 모든 판단 비율(손익비, 평균손익비, 보상비율) 이 다소 낮게 나타 났다. 또한 DMI지표의 경우 평균 손익이 11만원으로 적은 매매에서 높은 수익 이 발생하였음 보여주고 있다. 따라서 DMI지표를 진입 필터로 사용한 수렴돌 파 전략이 유용하다는 것을 알 수 있다. 그러면 이제부터 패턴 분석을 통한 수렴 돌파 전략에 대해서 알아보기로 하자. (7) 인사이드 데이(Inside Day = ID)전략 인사이드 데이란 전일 고가 보다 금일 고가가 낮고, 전일 저가 보다 금일 저 가가 높은 패턴을 말한다. 인사이드 데이 반대 패턴은 아웃 사이드 데이 (Outside Day= 전일 고가 보다 금일 고가가 높고, 전일 저가 보다 금일 저가 가 낮은 패턴) 라 한다. 인사이드 데이 패턴은 말 그대로 수렴되는 패턴이 된다. 여기서는 일간 패턴 으로 간주하지 않고 단순 봉 패턴으로 간주해서 전략식을 작성해보자. <수식 0-17> DD_CongestionBreak(ID) 영역: 전략 이름: DD_CongestionBreak(ID) Input: delay(9), s1(0.2), s2(2.7), s3(0.49) Var1=high-low Var2=mov(Var1,delay,s) Cond12=False If ttime<1500 Then Cond12=high(1)>=high And low(1)<=low And tdate=tdate(1) End If If Cond12=True Then Var10=1 Else Var10=0 End If Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If hhv(1,Var10,delay)=1 And tdate(hhb(1,Var10,delay))= tdate Then If ttime<1500 And Cond1=False Then If opend+(highd(1)-lowd(1))*s1<close Then Call buy("매수",Atstop,Def,high+var2*s3) End If End If If ttime<1500 And Cond2=False Then If opend-(highd(1)-lowd(1))*s1>close Then Call sell("매도",Atstop,Def,low-var2*s3) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If 48 <식 4-17>을 보면 당일 중에 ID 패턴이 발생하면 이후 9봉 이내(delay)에서는 고저 돌파 매매 전략을 구사하세 구성되어 있다. 여기에 추가로 매수의 경우 에는 시초가 대비 일정 수준 이상에서만 매수 발생, 시초가 대비 일정 수준 이하에서만 매도 발생하게 구성되어 있다. 적용된 그림은 다음과 같다. <그림 0-13> DD_CongestionBreak(ID) 주) 신호: DD_CongestionBreak(ID) 그림을 보면 하루 중 ID 패턴이 수 차례 발생하고 있음을 알 수 있다(저가에 화살표로 표시된 부분). 이 중에서 시초가 대비 일정 수준 이상을 나타내는 매수 레벨과 매도 레벨을 봉의 종가가 벗어난 방향으로만 매매를 하게끔 되어 있어, 위 경우에는 매도 신호가 발생하였다. (8) NR(Narrow Range) 전략 Narrow Range 패턴은 현재의 Range(고가- 저가)가 최근 N봉 중 가장 적을 경 우에 적용된다. 즉 3봉의 Range 중 현재 봉이 가장 적은 값을 가지면 NR 패턴 이 되며 이러한 패턴이 발생하면 돌파 전략을 구사하는 방법을 사용한다. <수식 0-18> DD_CongestionBreak(NR) 영역: 전략 이름: DD_CongestionBreak(NR) Input: len(2), s1(0.2), s2(2.7), s3(0.01) Var1=high-low Cond11=False Cond11= Var1=llv(1,Var1,len) And ttime<1500 Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then If Cond11=True And Cond11(1)=False Then If opend+(highd(1)-lowd(1))*s1<close Then Call buy("매수",Atstop,Def,high+var1*s3) End If End If End If If Cond2=False Then If Cond11=True And Cond11(1)=False Then If opend-(highd(1)-lowd(1))*s1>close Then Call sell("매도",Atstop,Def,low-var1*s3) End If End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If 50 <수식 4-18>의 경우 2 봉간 NR 이 비 연속적으로 발생한 시점에서 고저 돌파 진입 전략을 구사한다. 역시 시초가 대비 일정 수준 이상에서만 매수, 이하에 서만 매도 전략이 작동하도록 구성되어 있다. 적용된 그림을 보자. <그림 0-14> DD_CongestionBreak(NR) 주) 신호: DD_CongestionBreak(NR) <그림 4-14>의 원호부분을 보면 매수 레벨 이상에서 NR 패턴이 발생하였고 그 다음 봉에서 고점 돌파로 매수가 완성되었다. 그러면 이제 일간 ID, NR 패턴을 분간에 적용하는 방법을 사용해 보자. (9) 일간 ID, NR전략 일간 차트에서 Inside Day 나 Narrow Range가 발생하면 분간 차트에서 데이트레이 딩 돌파 전략을 구사하는 방법을 적용해보도록 하자. 이러한 형태는 전형적인 필터 링(Filtering) 기법으로서 일간 차트에서 패턴이 발생하여야만, 분 차트를 이용한 매매가 허용되기 때문에 나쁜 진입 신호를 필터링 해주는 역할을 한다. <수식 0-19> DD_CongestionBreak(IDNR_Day) 영역: 전략 이름: DD_CongestionBreak(IDNR_Day) Input: s1(0.37), s2(2.7) 'NR2 If highd(1)-lowd(1)=min(highd(1)-lowd(1),highd(2)-lowd(2)) Then Cond11=True Else Cond11=False End If 'ID,ID2 If (highd(2)>=highd(1) And lowd(2)<=lowd(1)) _ Or (highd(3)>=highd(2) And lowd(3)<=lowd(2) And _ highd(2)>=highd(1) And lowd(2)<=lowd(1))Then Cond12=True Else Cond12=False End If Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then If Cond11=True Or Cond12=True Then Call buy("매수",Atstop,Def,opend+(highd(1)-lowd(1))*s1) end if End If If Cond2=False Then If Cond11=True Or Cond12=True Then Call sell("매도",Atstop,Def,opend-(highd(1)-lowd(1))*s1) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If 52 <수식 4-19>를 보면 2일을 이용한 Narrow Range 패턴과 2일을 이용한 Inside Day, 3일을 이용한 2일 연속 Inside Day가 발생하는 ID2 패턴을 추가하였고, 이러한 패턴이 발생하면 10분차트에 RangeBreak전략을 구사하게끔 구성된 전 략 식이다. 적용 그림은 다음과 같다. <그림 0-15> DD_CongestionBreak(IDNR_Day) 주) 추세: DD_CongestionBreak(IDNR_Day), 신호: 진입, 청산 가격 <그림 4-15>는 추세 영역으로 매매일과 매매를 안하는 날을 표시하였다. 매매일 은 일간으로 ID, ID2, NR 패턴이 발생한 다음날이 된다. 위 그림에서 보면 매매일 날 매수 하여 수익이 발생하는 것을 보여준다. 그러면 여기서 앞서 설명한 ID, NR 전략과 함께 과거 테스트 결과를 살펴보자. <표 0-16> 테스트 결과(ID, NR, ID/NR Day) 평가 항목 ID NR 75,009.44 78,923.92 70,932.34 평균 손익 90.37 90.20 126.44 최대 손실 -923.53 -912.72 -1,132.98 총 매매수 830 875 561 연속 이익 매매수 8 9 8 연속 손실 매매수 7 7 6 최대 자본 인하액 -3,936.35 -3,678.22 -3,712.55 승률 50.48 49.14 51.87 손익비 1.68 1.68 1.96 평균손익비 1.65 1.73 1.82 보상 비율 19.06 21.46 19.11 8, 0.2, 2.7, 0.49 2, 0.2, 2.7, 0.01 0.37, 2.7 총 손익 변수 값 ID/NR_Day 주) 필수적으로 보유해야 할 바 수: 100 세가지 모두 총 손익 측면에서 앞서 설명한 전략들 보다 낮은 수준을 보인다. 하지만 ID/NR_Day 전략은 매매 건수가 561건으로서 가장 작은 매매 건수인 반 면, 평균 손익이 12만원으로 나쁜 매매가 잘 제어되어 높은 평균 손익을 달성 했다. 더욱이 승률도 52% 대로 충분히 사용 가능한 전략임을 알 수 있다. 3. 추세선, 지지/저항선 분석 전략 추세선 및 주가 채널, 지지 / 저항 포인트인 스윙 포인트를 활용하는 전략들 을 여기서 작성해보기로 하자. 역시 돌파 전략 형태로 분류될 수 있으며 실제 매매에서 자주 활용하는 방법들이다. 전략의 개념은 다음과 같다. 54 추세선 전략: 상승, 하락 추세선 돌파전략 LRS전략: 전일의 선형회귀선(linear regression line)과 전일의 표준편차 등 을 이용한 선형회귀 채널 돌파전략 Price channel(fibo) 전략: 주가 채널(price channel)에 피보나치 수열 (0.382,0.618 등)을 이용한 매매 전략 스윙(swing) 전략: 주가 스윙 포인트를 이용한 매매 전략 (1) 추세선(TrendLine) 전략 추세선은 두 가지로 구분된다. 상승하는 저점을 연결하는 상승 추세선(Up Trendline)과 하락하는 고점을 연결하는 하락 추세선(Down TrendLine)이 있다. 하 락 추세선을 저항선으로, 상승추세선을 지지선으로 설정하여 전략을 작성해보자. <수식 0-20> DD_TrendLine 영역: 전략 이름: DD_ TrendLine Input: len1(11), s1(0.36), s2(2.7) Set hvalue=Arrays(10,2) Set lvalue=Arrays(10,2) If shba(1,high,len1,len1)=len1 Then Var1=999999 For i = 9 To 1 Step - 1 hvalue(i,0)=hvalue(i-1,0) hvalue(i,1)=hvalue(i-1,1) Next hvalue(0,0)=shva(1,high,len1,len1) hvalue(0,1)=barnum For j = 1 To 9 If hvalue(j,0)>hvalue(0,0) Then Var1=j j=11 End If Next End If If Var1<=10 Then Var10=(hvalue(0,0)-hvalue(Var1,0))/(hvalue(0,1)-hvalue(Var1,1)) _ * shba(1,high,len1,len1)+hvalue(0,0) Else Var10=999999 End If If slba(1,low,len1,len1)=len1 Then Var2=999999 For i = 9 To 1 Step - 1 lvalue(i,0)=lvalue(i-1,0) lvalue(i,1)=lvalue(i-1,1) Next lvalue(0,0)=slva(1,low,len1,len1) lvalue(0,1)=barnum For j = 1 To 9 If lvalue(j,0)<lvalue(0,0) Then Var2=j j=11 End If Next End If If Var2<=10 Then Var11=(lvalue(0,0)-lvalue(Var2,0))/(lvalue(0,1)-lvalue(Var2,1)) _ * slba(1,low,len1,len1)+lvalue(0,0) Else Var11=99999 End If If tdate<>tdate(1) Then Var50=currententrynum End If If currententrynum-var50 = 0 Then If ttime<1500 Then If high<var10 And Var1<=10 Then call buy("매수",Atstop,Def,Var10) End If If low>var11 And Var2<=10 Then Call sell("매도",Atstop,Def,Var11) End If Call sell("매도1",Atstop,Def,opend-(highd(1)-lowd(1))*S1) Call buy("매수1",Atstop,Def,opend+(highd(1)-lowd(1))*S1) End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If 56 <수식 4-20>을 보면 배열을 사용해서 10개의 스윙고저(swing high/low)를 검 색하여 낮아지는 고가를 이용해서 하락 추세선을, 높아지는 저가를 이용해서 상승 추세선을 작성하여, 고가가 하락 추세선을 상향 돌파하면 매수, 저가가 상승 추세선을 하향 돌파하면 매도하는 전략이다. 여기에 Rangebreak 돌파 전 략을 동시에 진입 전략으로 사용하였다. 적용한 그림은 다음과 같다. <그림 0-16> DD_TrendLine 주) 신호: DD_Triangle 적용 <그림 4-16>을 보면 상승 추세선을 상향 돌파함으로서 매수(8월 13일)가 발생 하였으며, 그 다음날은 하락 추세선의 위에서 시가가 시작하고, 시가 + (전일 고가-저가)*0.36 시점을 돌파할 때 매수가 발생하는 것을 보여주고 있다 (Rangebreak 전략). 이와 같이 일반적인 돌파 전락과 추세선 돌파 방법을 병 행하는 방법을 사용하여 매매 건수 증감 및 수익 증가를 도모할 수 있게 된다. (2) LRS(Linear Regression Slope)전략 <수식 0-21> DD_LRS 영역: 전략 이름: DD_LRS Input: s1(2.1), len1(56), len2(2.7) If tdate<>Tdate(1) Then Var1=lrs(close,len1,1) Var2=Stdev(close,len1,s1,1) ' Var2=Stderr(close,len1,1)*S1 '표준오차 적용 Var10=1 Var3=var1*var10+opend End If If tdate=Tdate(1) Then Var10=var10+1 Var3=var1*var10+openD End If Var4=var3+var2 Var5=var3-var2 Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then Call buy("매수",Atstop,Def,Var4) End If If Cond2=False Then Call sell("매도",Atstop,Def,Var5) End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len2) End if 선형 회귀선은 기술적 분석에서 유용하게 사용하는 방법으로서, 채널 형태로도 자 58 주 사용된다. CT에서 제공하는 채널 형태는 다음과 같다. Raff Regression Channel: 일정 기간 동안의 선형 회귀선 아래 위로 고가, 저가 중 최대 거리를 표시한 채널 Standard Deviation Channel: 일정 기간 동안의 선형 회귀선 아래 위로 표 준 편차만큼을 더하거나 빼서 표시한 채널 Standard Error Channel: 일정 기간 동안의 선형 회귀선 아래 위로 표준 오 차만큼을 더하거나 빼서 표시한 채널 이러한 채널은 추세의 방향성을 파악하는데 유용하게 사용된다. <수식 4-21> 은 전일의 선형 회귀식을 통해서 계산된 기울기(=LRS)를 이용한 데이트레이딩 전략이다. <수식 4-21>은 날짜가 바뀌면 56개 봉에 대한 선형회귀선의 기울기 및 표준 편차를 계산하여 해당일 시가를 이용해서 회귀선 채널을 작성하는 방법을 사 용하였다. 여기서 56개 봉은 10분봉 기준으로 하루가 28개 봉이므로 2일간을 의미한다. 3일을 계산한다면 84개 봉을 이용하면 된다. 주석 처리된 부분은 표준편차 대신 표준오차(Standard Error)를 적용하는 전략이다. <그림 0-17> DD_LRS 주) 신호: DD_LRS <그림 4-17>에서 원호 부분을 보면 전일과 전전일 추세가 하락 추세인 날로서 하락 채널이 적용되어, 이 채널의 상단을 상향 돌파하여 매수가 발생하였다. 그 다음날은 상승 채널이 적용되어, 상단을 돌파하는 추세나 하단을 돌파는 추세가 없어 매매가 발생하지 않았다. 테스트 결과는 나중에 확인하기로 하고, 이제부 터 주가 채널을 이용하는 방법에 대해서 알아보기로 하자. (3) 주가 채널(Price Channel(Fibo)) 전략 주가 채널은 일정 기간의 최저가가 지지선이고, 최고가가 저항선으로 작용하 는 지표이다. 주가 채널을 활용하는 방법은 상당히 다양하다. 여기서는 피보 나치 되돌림 비율을 이용해서 저가 매수, 고가 매도하는 전략을 설명하겠다. 즉 주가 채널 상단선(일정 기간 최고가) 대비 피보나치 비율(0.382) 이상 하 락이 발생하면 매수 전략을 구사하게 되고, 주가 채널 하단선(일정 기간 최저 가) 대비 피보나치 비율(0.382) 이상 상승하면 매도 전략 구사하는 방법을 말 한다. 역추세적인 진입 방법으로서 가격 되돌림(Retracement)을 이용한 매매 전략이다. <수식 0-22> DD_Channel(Fibo) 영역: 전략 이름: DD_Channel(Fibo) Input: len1(200), ratio(0.382), s1(0.37), s2(2.7) Var1=hhv(1,high,len1)-llv(1,low,len1) Var2=var1*ratio Var3=hhv(1,high,len1)-var2 ' high retracement Var4=llv(1,low,len1)+var2 'low retracement Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If tdate<>tdate(1) Then Var50=currententrynum 60 End If If currententrynum-var50=0 Then If ttime<1500 Then Call buy("매수",Atstop,Def,opend+(highd(1)-lowd(1))*s1) Call sell("매도",Atstop,Def,opend-(highd(1)-lowd(1))*s1) If high<var3 And hhb(1,high,len1)<llb(1,low,len1) Then Call buy("매수1",Atstop,Def,Var3) End If If low>var4 And hhb(1,high,len1)>llb(1,low,len1) Then Call sell("매도1",Atstop,Def,Var4) End If End If End If If currententrynum-var50=1 Then If ttime<1500 Then If high<var3 And hhb(1,high,len1)<llb(1,low,len1) Then If Cond1=False Then Call buy("매수2",Atstop,Def,Var3) End If End If If low>var4 And hhb(1,high,len1)>llb(1,low,len1) then If Cond2=False Then Call sell("매도2",Atstop,Def,Var4) End If End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If <수식 4-22>를 보면 우선 장 시작 이후 초기 진입은 되돌림 매수, 매도와 함 께 돌파 진입을 사용하였고 두 번째 매매에서는 되돌림 매수, 매도만을 이용 하였다. 매매횟수는 하루에 두 번 매매로 제한하였다. 그림을 보면서 자세히 이해하기로 하자. <그림 0-18> DD_Channel(Fibo) 주) 신호: DD_Channel(Fibo), 필수적으로 보유해야 할 바 수: 200 적용 <그림 4-18>를 보면 4가지 선이 적용되어 있는데 제일 위의 선은 200 봉 중 최고가 선이고 제일 아래 선은 200봉 중 최저가 선이다. 중간에 두 선은 각각 되돌림 선이 된다. 11월 20일에는 기본적인 돌파 전략이 작동하여 매도가 발 생하였고, 11월 21일에는 고점 형성 이후 38% 되돌림이 발생한 후 바로 상단 되돌림 선을 상향 돌파하여 매수가 발생한 것을 보여주고 있다. (4) 스윙(Swing) 전략 스윙 전략은 갱신되는 고점이 최저점 대비 일정 수준이상이면 상승 방향(up swing)으로, 갱신되는 저점이 최고점 대비 일정 수준 이하이면 하락 방향 (down swing)으로 판단하는 기술적 분석 기법을 이용한 전략이다. 설명만으로 이해하기 힘든 부분이 있으므로 전략식 및 그림을 통해서 자세한 설명을 하기 로 하자. 62 <수식 0-23> DD_Swing 영역: 전략 이름: DD_Swing Input: perl(0.009), perh(0.017), s1(0.37), s2(2.7) If high>=var31*(1+perL) And Var1(1)<>1 Then Var1=1 Var3=high End If If low<=var3*(1-perh) And Var1(1)<>-1 Then Var1=-1 Var31=low End If If low<var31 Then Var31=low End If If high>var3 Then Var3=high End If If tdate<>Tdate(1) Then Var50=currententrynum End If If currententrynum-var50=0 Then If ttime<1500 Then If Var1=-1 And high<var31*(1+perL) Then Call buy("매수",Atstop,Def, Var31*(1+perL)) Call sell("매도1",Atstop,Def,opend-(highd(1)-lowd(1))*S1) End If If Var1=1 And low>var3*(1-perh) Then Call sell("매도",Atstop,Def, Var3*(1-perh)) Call buy("매수1",Atstop,Def,opend+(highd(1)-lowd(1))*S1) End If End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*S2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If <수식 4-23>을 보면 스윙 포인트를 설정 한 뒤 스윙 방향의 반대 방향으로는 스윙 선을, 같은 방향으로는 돌파 진입을 이용한 매매 전략이다. 우선 그림을 보면서 스윙 포인트부터 이해하기로 하자. <그림 0-19> 스윙 포인트 주) 신호: DD_Swing: 0.04, 0.04 적용 <그림 4-19>는 연결선물지수 10분 차트에 4% 스윙 신호를 적용한 그림이다. 4% 스윙 신호의 의미는 최고점 대비 4% 하락하면 최고점이 스윙 고점이 되며, 최저점 대비 4% 이상 상승하면 최저점이 스윙 저점이 되는 것을 말한다. 그림 을 보면 원호 시점이 최저점 대비 4% 이상 상승한 시점이 되어 상승 방향으로 전환되고, 최저점이 스윙 저점(SWINGLOW로 표시)으로 확인된 시점이 된다. 현 재는 상승 방향을 유지하는 가운데 최고점이 114 전후로서 110 포인트 전후가 4% 전환 포인트가 되는 것을 보여주고 있다. 위와 같은 스윙 포인트 및 스윙선을 이용한 매매전략을 적용한 그림을 보기로 하자. 64 <그림 0-20> DD_Swing 주) 신호: DD_Swing <그림 4-20>은 스윙 신호 및 스윙 전략을 적용한 그림이다. 날짜가 진행되면 서 스윙선 위에서 주가가 형성되어 있는 상황이 지속되어 돌파 매수 진입이 3 번 연속적으로 발생하였다(네모표시). 그 뒤 스윙선 하향 이탈이 발생하면서 스윙선을 이용한 매도 진입이 발생하는 것을 보여주고 있다(원표시). 따라서 위 전략은 스윙 지표를 이용한 방향성 매매에 단기 돌파 전략이 결합된 형태 라는 알 수 있다. 스윙 포인트를 설정하는 또 다른 방법은 변동성을 이용하는 방법이다. 위 식 을 다소 변형하여 변동성 스윙 전략을 작성해보자. <수식 0-24> DD_Swing(Range) 영역: 전략 이름: DD_Swing(Range) Input: perl(4.9), perh(10), len1(100), s1(0.37), s2(2.7) Var20=high-low Var21=mov(Var20,len1,S) If high>=var31+var21*Perl And Var1(1)<>1 Then Var1=1 Var3=high End If If low<=var3-var21*Perh And Var1(1)<>-1 Then Var1=-1 Var31=low End If If low<var31 Then Var31=low End If If high>var3 Then Var3=high End If If tdate<>Tdate(1) Then Var50=currententrynum End If If currententrynum-var50=0 Then If ttime<1500 Then If Var1=-1 And high<var31+var21*Perl Then Call buy("매수",Atstop,Def, Var31+var21*Perl) Call sell("매도1",Atstop,Def,opend-(highd(1)-lowd(1))*S1) End If If Var1=1 And low>var3-var21*Perh Then Call sell("매도",Atstop,Def, Var3-var21*Perh) Call buy("매수1",Atstop,Def,opend+(highd(1)-lowd(1))*S1) End If End If End If If currententrynum-var50=1 Then If ttime<1500 Then If Var1=-1 And high<var31+var21*Perl Then Call buy("매수2",Atstop,Def, Var31+var21*Perl) End If If Var1=1 And low>var3-var21*Perh Then Call sell("매도2",Atstop,Def, Var3-var21*Perh) End If End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*S2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If 66 <수식 4-24>를 보면 고가 - 저가인 Range를 이용해서 변동성를 계산하고 변동 성을 이용한 swing point 및 스윙선을 사용해서 매매를 하는 전략식이다. 전 략식은 %를 이용하는 경우와 동일하게 적용하였다. 적용된 그림을 보자. <그림 0-21> DD_Swing(Range) <그림 4-21>은 <그림 4-20>과 동일한 구간에 전략을 적용한 그림이다. 스윙선 위에 가격이 위치하고 있어 매수 방향만 매매하는 형태를 보이고 있는데, <그 림 4-20>과 다르게 8월 26일에도 스윙선 위에 주가가 위치하고 있어 신규매도 가 발생하지 않았다는 것을 알 수 있다. 이제 추세선, 지지 / 저항선 전략 들에 대해서 모두 알아 보았다. 여기서 설 명한 전략 이외에도 무수히 많은 진입 전략이 가능하다는 것을 이해하기 바라 며, 여기까지의 전략들의 과거 테스트 결과를 알아보기로 하자. <표 0-17> 테스트 결과 비교(추세선, 선형회귀선, 가격채널(피보나치)) 평가 항목 DD_TrendLine 총 손익 DD_LRS DD_Channel(Fibo) 84,027.20 82,981.46 81,033.54 평균 손익 94.95 95.16 90.14 최대 손실 -1,086.88 -878.74 -1,374.66 총 매매수 885 872 899 연속 이익 매매수 7 9 7 연속 손실 매매수 10 10 8 최대 자본 인하액 -4,801.51 -3,598.05 -3,995.77 승률 47.80 48.62 49.05 손익비 1.62 1.65 1.62 평균손익비 1.77 1.74 1.68 보상 비율 17.50 23.06 20.28 11,0.36,2.7 2.1,56,2.7 200,0.382,0.37,2.7 변수 값 주) 필수적으로 보유해야 할 바 수: 100, DD_Channel(Fibo): 200 <표 0-18> 테스트 결과 비교(스윙, 스윙(레인지)) 평가 항목 DD_Swing 총 손익 78,292.85 71,957.00 평균 손익 93.99 101.35 최대 손실 -919.18 -1,632.56 총 매매수 833 710 연속 이익 매매수 7 7 연속 손실 매매수 8 6 최대 자본 인하액 -4,457.04 -3,110.42 승률 47.18 51.55 손익비 1.61 1.73 평균손익비 1.80 1.63 보상 비율 17.57 23.13 0.009, 0.017, 0.37, 2.7 4.9, 10, 0.37, 2.7 변수 값 주) 필수적으로 보유해야 할 바 수: 100 68 DD_Swing(Range) <표 4-17>의 전략들이 유용한 결과를 나타냈다. 총손익은 DD_TrendLine전략이, 평균 손익과 승률, 손익비와 보상비율은 DD_Swing(Range)가 높게 나타났다. 최대자본인하액 및 최대 손실은 DD_LRS전략이 낮게 나타났으며, 평균 손익비 는 DD_Swing전략이 높게 나타났다. 전반적으로 추세선 및 지지 / 저항선을 이용한 매매전략에서는 수익곡선의 상 승 유지가 여타 전략들보다 다소 좋은 것이 특징이었다. 그럼 이제 모형 분석 전략에 대해서 알아보기로 하자. 4. 모형(Geometric Pattern)분석 전략 모형 분석이란 기하학적인 패턴(Geometric Pattern)분석을 말한다. 일반적인 바(Bar)나 캔들(Candle) 패턴 분석과 구분하여 사용하기 위해서 모형 분석이 라는 명칭을 사용한다. 흔히 알고 있는 삼각형, 머리어깨 천정형, 바닥형 등 이 해당된다. 여기서 전략으로 사용할 모형들을 간단히 설명해보면 다음과 같다. <표 0-19> 모형 모형 고점/저점 테스트 모형 사각모형 삼각형, 쐐기형 내용 고점, 저점을 테스트 하는 모형들을 이용한 전략 이중 바닥형, 천정형(Double Bottom, top) 상승 함정(Bull Trap), 하락 함정(Bear Trap) 위 두 모형을 내포한 전략 수렴 모형인 사각형 모형을 이용한 전략 수렴 모형인 삼각형과 쐐기모형을 동시에 사용한 전략 그러면 각각의 전략들을 자세히 살펴보기로 하자. (1) 고점, 저점 테스트 모형 전략 직전의 고점 및 저점을 테스트 하면서 전환 포인트를 만드는 모형을 이용한 매매 전략이다. 이중 바닥/천정형을 대표로 꼽을 수 있다. <그림 0-22> 고점, 저점 테스트 모형 이중 천정형 이중 바닥형 상승 함정 하락 함정 이러한 모형들은 결국 직전의 고저를 테스트하는 형태로 설명이 가능해진다. 그러면 전략식을 작성해보도록 하자. <수식 0-25> DD_GPattern(HiLoTest) 영역: 전략 이름: DD_GPattern(HiLoTest) Input: s1(0.37), s2(2.7), len1(0.88) Var1=highd(1)-lowd(1) Var2=max(highd(1),highd(2)) Var3=min(lowd(1),lowd(2)) If tdate<>Tdate(1) Then Var50=currententrynum Var10=Atr(20,1)*len1 End If If tdate<>Tdate(1) Then Var30=0 Var31=0 Cond1=False Cond2=False 70 Else If close>var2+var10 Then Cond1=True End If If close <var3-var10 Then Cond2=True End If If close>=var2-var10 And close<=var2+var10 And Cond1=False Then Var30=1 Else Var30=0 End If If close>=var3-var10 And close<=var3+var10 And Cond2=False Then Var31=1 Else Var31=0 End If End If If currententrynum-var50=0 Then If ttime<1500 Then If Var31=1 Then If high<var3+var10 Then Call buy("매수",Atstop,Def,Var3+var10) Else Call buy("매수",Atstop,Def,hhv(1,high,2)) End If End If If Var30=1 Then If low>var2-var10 Then Call sell("매도",Atstop,Def,Var2-var10) Else Call sell("매도",Atstop,Def,llv(1,low,2)) End If End If Call buy("매수1",Atstop,Def,opend+var1*s1) Call sell("매도1",Atstop,Def,opend-var1*S1) End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If If position=1 And entryname = “매수” Then If low>var2-var10 Then Call exitlong("청산1",Atstop,Var2-var10) End If End If If position=-1 And entryname = “매도” Then If high<var3+var10 Then Call exitshort("청산1",Atstop,Var3+var10) End If End If <수식 4-25>는 2일 동안의 최고값의 일정수준 아래 위를 레벨로 설정하고, 2 일 동안의 최저값의 일정수준 아래위를 레벨로 설정한다. 종가가 형성되는 시 점에서 고가 레벨에서는 매도를, 저가 레벨에서는 매수하는 전략으로 구성되 어 있다. 따라서 이중천정형이나 상승 함정이 발생하면 매도, 이중 바닥형이 나 하락함정이 발생하면 매수하게 된다. 또한 청산 전략에서도 모형 형성 실패 시 청산이 발생하도록 구성되어 있다. 여기에 추가 진입 방법으로 돌파 매매를 병행하였다. 적용된 그림은 다음과 같다. 72 <그림 0-23> DD_GPattern(HiLoTest) 주) 신호: DD_GPattern(HiLoTest) <그림 4-23>은 진입의 경우로서 원호로 표시된 2일간 저점을 이용해서 저점 대비 상단선과 하단선을 작성한다. 네모로 표시된 부분처럼 하단선을 종가가 하향 이탈하지 않을 경우 상단선을 돌파하는 시점에서 매수 진입을 한 그림이 다. 다음 청산1 이 발생한 그림을 보기로 하자. <그림 0-24> DD_GPattern(HiLoTest) 주) 신호: DD_GPattern(HiLoTest) <그림 4-24>를 보면 직전 고점을 테스트 하면서 시가가 시작하였으나 결국 매 도 진입이 발생하였고(원호) 진입 이후 저점 레벨까지 하락하여 “청산1”로 청 산되는 매매가 발생하였다. 실제로 많이 발생하지는 않는 청산 조건이지만 기 존 진입과 의미가 상통하는 청산 전략임을 알 수 있다. (2) 사각 모형 전략 사각 모형(Rectangle)을 이용한 매매 전략으로서 사각 모형을 수렴모형으로 간주하고, 수렴모형 돌파 방향으로 진입하는 전략을 구사하게 된다. 사각형을 설정하는 다양한 방법이 있는데 그 중 한가지 유용한 방법을 이용해서 전략 식을 작성해보도록 하자. <수식 0-26> DD_Rectangle 영역: 전략 이름: DD_Rectangle Input: len1(9), len2(17), ratio(0.3), factor(1.7), factor1(0.07), s1(0.37), s2(2.7) Var1=hhv(1,high,len1) Var2=llv(1,low,len1) Var3=var1-var2 Var11=hhv(1,high,len2,len1) Var12=llv(1,low,len2,len1) Var13=var11-var12 Cond1=False If Var3>0 And Var13>0 Then If Var3/var13<=ratio And Var3<=Atr(len1)*factor Then Cond1=True End If End If If tdate<>Tdate(1) Then Var50=currententrynum 74 End If If currententrynum-var50<=3 Then If ttime<1500 Then If Cond1=True Then Call buy("매수2",Atstop,Def,Var1+Atr(20)*factor1) Call sell("매도2",Atstop,Def,Var2-Atr(20)*factor1) End If End If End If If currententrynum-var50=0 Then If ttime<1500 Then Call buy("매수1",Atstop,Def,opend+(highd(1)-lowd(1))*s1) Call sell("매도1",Atstop,Def,opend-(highd(1)-lowd(1))*S1) End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*S2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If <수식 4-26>을 보면 현재의 주가 채널과 과거 일정기간 전의 주가 채널을 비 교하는 방법에 채널의 크기 및 변동성의 크기를 고려해서 현재 사각형 모형이 진행되는지를 판단하게 된다. 우선 진입 방법은 매매가 없을 경우에는 돌파 전략으로 진입하게 되며 하루에 4 번까지 사각형 형성 및 돌파 방향으로 진입 하는 방법을 사용하였다. 적용된 그림을 보자. <그림 0-25> DD_Rectangle 주) 신호: DD_Rectangle <그림 4-25>를 보면 장 시작 이후 매수로 진입하였으나 매수 이후 상당히 긴 기간 동안 횡보가 발생하여 사각형 모형이 형성되었다. 그 뒤 사각형의 하단 을 하향 이탈하는 순간 매도 진입이 발생하는 것을 보여주고 있다. 변수값 조 절에 따라서 사각형 발생 빈도가 상당히 큰 차이를 보인다 점을 기억해두자. (3) 삼각형(Triangle), 쐐기형(Wedge) 전략 삼각형은 사각모형과 마찬가지로 수렴형 패턴이고, 하락쐐기모형은 상승추세 에서 재 상승을, 상승 쐐기형은 하락추세에서 재 하락을 의미하는 진행형 패 턴으로서 사용된다. 여기서 조심해야 할 것은 쐐기형 패턴이 진행형으로 만 사용되지 않고, 전환형으 로 충분히 사용된다는 것이다. 따라서 직전 추세의 진행 여부에 관계없이 쐐기형 패턴이 형성되면 형성되는 반대 방향으로 매매를 하는 것이 보다 일반적이다. 76 <수식 0-27> DD_Triangle,Wedge 영역: 전략 이름: DD_Triangle, Wedge Input: len(8), s1(0.37), s2(2.7) slv1=slva(1,low,len,len) slv2=slva(2,low,len,len) slb1=slba(1,low,len,len) slb2=slba(2,low,len,len) shv1=shva(1,high,len,len) shv2=shva(2,high,len,len) shb1=shba(1,high,len,len) shb2=shba(2,high,len,len) If slb2>slb1 Then low_trendline =(slv1-slv2)/(slb2-slb1)*slb1+slv1 low_radian=(((slv1-slv2)/slv2)*100)/(slb2-slb1) End If If shb2>shb1 Then high_trendline =(shv1-shv2)/(shb2-shb1)*shb1+shv1 high_radian=(((shv1-shv2)/shv2)*100)/(shb2-shb1) End If Var1=round(atn(low_radian)*180/pi,2) Var2=round(atn(high_radian)*180/pi,2) If Var1>0 And Var2>0 And Var1>var2 And high_trendline>low_trendline Then '상향쐐기형 Cond1=True Else Cond1=False End If If Var1<0 And Var2<0 And Var1>var2 And high_trendline > low_trendline Then '하향쐐기형 Cond2=True Else Cond2=False End If If Var1>0 And Var2<0 And high_trendline>low_trendline Then '삼각형 Cond3=True Else Cond3=False End If Var10=highd(1)-lowd(1) If tdate<>tdate(1) Then Var50=currententrynum End If If ttime<1500 Then If currententrynum-var50=0 Then If Cond1=True And low>low_trendline Then Call sell("쐐기매도",Atstop,Def,low_trendline ) End If If Cond2=True And high<high_trendline Then Call buy("쐐기매수",Atstop,Def,high_trendline ) End If If Cond3=True And low>low_trendline And high<high_trendline Then Call buy("삼각매수",Atstop,Def,high_trendline ) Call sell("삼각매도",Atstop,Def,low_trendline ) End If Call buy("매수",Atstop,Def,opend+var10*S1) Call sell("매도",Atstop,Def,opend-var10*S1) End If End If If ttime<1500 Then If currententrynum-var50=1 Then If Cond1=True And low>low_trendline Then Call sell("쐐기매도",Atstop,Def,low_trendline ) End If If Cond2=True And high<high_trendline Then Call buy("쐐기매수",Atstop,Def,high_trendline ) End If End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-Atr(20)*S2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+Atr(20)*S2) End If <수식 4-27>을 보면 우선 두 점의 Swing High와 Low를 설정하여 추세선을 작 성하고, 추세선의 방향 및 위치를 고려해서 상향쐐기, 하향쐐기, 삼각형을 판 단하게 된다. 이렇게 모형을 판단하고 상향 쐐기형에서는 매도만을, 하향 쐐 기형에서는 매수만을 적용하고 삼각형일 경우에는 매수, 매도를 모두 시행하 는 방법을 사용하였다. 하루 중 첫번째 매매에서만 이와 같은 전략과 돌파 형 태의 전략을 병행해서 사용하게 되며, 두번째 매매가 발생할 때에는 쐐기형만 적용하였다. 78 <그림 0-26> DD_Triangle,Wedge 주) 신호: DD_Trendline <그림 4-26>을 보면 상단선이 한번 변화되는 가운데 상향 쐐기형이 발달되고 있었으며, 하단선을 하향 이탈하면서 매도가 발생한 예를 보여준다. <그림 0-27> DD_Triangle,Wedge <그림 4-27>은 삼각형 패턴이 형성되고 난 뒤 하단을 하향 이탈하면서 매도가 발생한 예제이다. 사각형 및 쐐기형을 이와같이 설정할 수도 있으며 앞서 설 명한 추세선 전략에서 사용한 코딩을 이용해서도 사용할 수 있다. 그러면 여 기서 위 세가지 모형 전략에 대한 과거 테스트 결과를 보기로 하자. <표 0-20> 모형분석 전략 테스트 결과 평가 항목 총 손익 DD_GPattern (HiLoTest) DD_Rectangle DD_Triangle,Wedge 91,085.36 87,167.71 76,332.02 평균 손익 107.54 96.75 82.25 최대 손실 -961.12 -1,120.12 -1,120.12 총 매매수 847 901 928 연속 이익 매매수 7 9 10 연속 손실 매매수 9 8 9 최대 자본 인하액 -4,131.54 -3,909.35 -4,711.45 승률 48.88 48.83 47.31 손익비 1.74 1.68 1.54 평균손익비 1.82 1.76 1.71 보상 비율 22.05 22.30 16.20 9,17,0.3,1.7,0.07, 변수 값 0.37, 2.7, 0.88 8, 0.37, 2.7 0.37,2.7 주) 필수적으로 보유해야 할 바 수: 100 테스트 결과를 보면 DD_GPattern(HiLoTest)가 총손익, 평균손익, 최대 손실, 손익비, 평균손익비 에서 우월한 결과를 나타냈으며, DD_Rectangle은 최대 자 본 인하액 및 보상비율에서 나은 결과를 나타내었다. 모형을 설정하는 코딩 부분은 위의 전략이 아니더라도 유용하게 사용할 수 있는 코딩이다. 이제부터 는 패턴 분석 전략들을 알아보기로 하자. 80 5. 패턴(Pattern)분석 전략 가격 패턴(price pattern)이란 하나의 봉의 패턴, 2~3개의 봉의 형태를 분석 하는 방법을 말한다. 우선 가격의 봉에 대해서 알아보면 미국식 봉(bar) 차트 와 일본식 캔들스틱(candlestick) 차트로 구분된다. 각각 봉 형태의 표현 방법은 다르나, 봉 패턴은 서로 중첩되는 경우가 많다. 대표적인 패턴 분석 방법은 일본식 캔들 스틱 분석 방법(하라미, 도찌 등)으 로서 선진국에서도 널리 사용되고 있다. 반면 미국식 봉 패턴 분석 방법도 다 양한 방법이 존재하는데 앞서 설명한 Inside Day나 Narrow Range 등이 봉패턴 분석 방법에 속한다. 여기서는 일본식, 미국식 패턴 분석 방법 중 유용한 방법을 소개하고자 한다. 대부분의 데이트레이딩 매매 전략은 패턴을 이용하는 방법이 기술적 지표를 이용하는 방법보다 더 유용하다. 또한 연구자들에 따라서는 뒤에서 설명할 기 술적 지표를 이용하는 방법보다 패턴을 이용한 매매 전략이 더 범용적 (Robust)이고, 실용적이라고 주장한다. 반면, 다른 연구자들은 패턴 분석 전 략이 과거 주가에 과 최적화되는 심각한 문제점이 있다고 주장을 한다. 어느 쪽이든 패턴을 이용한 단기 매매 전략에는 상당한 개발 및 노력을 기울 이는 것이 바람직하다. 왜냐하면 단기 추세의 움직임은 패턴으로 설명하는 것 이 유용하며, 다양한 전략들을 개발할 수 있기 때문이다. 그러면 상승 갭, 하 락 갭을 이용한 매매 전략부터 알아보기로 하자. (1) 갭(Gap) 전략 갭이란 전일 고가 보다 시가가 높게 시작하는 상승 갭(gap up)과 전일 저가 보다 시가가 낮게 시작하는 하락 갭(gap down)을 의미한다. 갭이 발생한다는 것은 장 시작 전에 가격에 영향을 주는 요인이 많다는 것을 의미한다. 그러므 로 매매전략작성시 중요한 의미를 갖는다. 매매 방법은 다음과 같이 정리할 수 있다. <표 0-21> 갭 매매 방법 매 매 갭 업(gap up)매수 갭 다운(gap down)매도 갭 필(gap fill)매수/매도 설 명 전일 고가보다 시가가 크면 매수 방향으로 매매 전일 저가보다 시가가 적으면 매도 방향으로 매매 전일 고가보다 시가가 크고 전일 고가를 하향 돌파하면 매도 전일 저가보다 시가가 적고 전일 저가를 상향 돌파하면 매수 크게 갭 업 매매와 갭 필 매매로 구분되는데, 여기서는 갭이 발생하였을 때 이 두 가지 매매 방법을 동시에 적용하는 방법으로 전략을 작성하기로 하자. <수식 0-28> DD_Pattern_Gap 영역: 전략 이름: DD_Pattern_Gap Input: ups(0.1), dns(0.1), gapup(0.29), gapfill(0.18), s2(2.7) If opend>highd(1) Then Var1=100*((opend-highd(1))/highd(1)) End If If opend<lowd(1) Then Var1=100*((lowd(1)-opend)/lowd(1)) End If If tdate<>tdate(1) Then Var50=currententrynum End If Cond1=exitdate(1)=tdate And position(1)=1 82 Cond2=exitdate(1)=tdate And position(1)=-1 If currententrynum-var50<=2 Then If ttime <1500 Then If opend>highd(1) And Var1>ups Then If Cond1=False Then Call buy("GapUp매수",Atstop,Def,opend+(highd(1)-lowd(1))*gapup) End If If Cond2=False Then Call sell("GapFill매도",Atstop,Def, _ max(highd(1),opend-(highd(1)-lowd(1))*gapfill)) End If End If If opend<lowd(1) And Var1>dns Then If Cond2=False Then Call sell("GapDown매도",Atstop,Def,opend-(highd(1)-lowd(1))*gapup) End If If Cond1=False Then Call buy("GapFill매수",Atstop,Def,_ min(lowd(1),opend+(highd(1)-lowd(1))*gapfill)) End If End If End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*S2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If <식 4-28>은 갭이 일정 비율 이상 발생할 경우 갭업 돌파전략과 갭필 돌파전 략을 적용한 식이다. 하루의 매매 횟수는 3번으로 제한 하였으며 ATR 추적 스 탑을 사용하였다. 적용된 그림을 보자. <그림 0-28> DD_Pattern_Gap 주) 신호: 진입, 청산 가격 <그림 4-28>을 보면 9월 8일 갭 다운이 발생하여 장중에 갭 필 매수 진입이 발생되었다. 그 다음날인 9월 9일에는 전일 고가보다 시가가 높은 갭 업이 발 생하였고, 갭 업 매수로 이어지면서 수익을 발생하였다. 9월 15일에는 갭이 발생하지 않아 매매가 일어나지 않게 된다. 이와 같이 매매가 일어나지 않는 날도 자주 발생하는 특성을 보이는 전략이다. 여기서 추가적인 갭 전략을 개발해보기로 하자. 1) 부분 갭(Partial Gap) 부분 갭이란 전일고가(저가)와 금일시가의 차이를 갭이라고 정의하지 않고, 전일 종가와 금일시가의 차이를 이용해서 갭으로 인정하는 것을 말한다. 즉 전일 종가 보다 시가가 크면 갭 업, 전일 종가보다 시가가 적으면 갭 다운으로 인정하는 것 이다. 따라서 종가보다 어느 정도 이상 상승해야 갭업으로 인정하고, 종가보다 어 느 정도 하락해야 갭 다운으로 인정하는 지를 결정하는 것이 주요 변수가 된다. 84 전략 식은 다음과 같다. <수식 0-29> DD_Pattern_PartialGap 영역: 전략 이름: DD_Pattern_PartialGap Input: ups(0.5), dns(0.3), gapup(0.34), gapfill(0.19), s2(2.7) If opend>=closed(1) Then Var1=100*((opend-closed(1))/closed(1)) End If If opend<closed(1) Then Var1=100*((closed(1)-opend)/closed(1)) End If If tdate<>tdate(1) Then Var3=0 Else If i_position<>0 And i_position(1)<>i_position Then Var3=var3+1 End If End If If tdate<>tdate(1) Then Var50=currententrynum End If Cond1=exitdate(1)=tdate And position(1)=1 Cond2=exitdate(1)=tdate And position(1)=-1 If currententrynum-var50<=1 Then If ttime <1500 Then If opend>closed(1) And Var1>ups Then If Cond1=False then Call buy("GapUp매수",Atstop,Def,opend+(highd(1)-lowd(1))*gapup) End If If Cond2=False then Call sell("GapFill매도",Atstop,Def,max(closed(1),opend-(highd(1)-lowd(1))*gapfill)) End If End If If opend<closed(1) And Var1>dns Then If Cond2=False Then Call sell("GapDown매도",Atstop,Def,opend-(highd(1)-lowd(1))*gapup) End If If Cond1=False Then Call buy("GapFill매수",Atstop,Def,min(closed(1),opend+(closed(1)-lowd(1))*gapfill)) End If End If End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(10)*s2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(10)*S2) End If <수식 4-29>가 적용된 그림은 갭 전략과 유사하므로 생략한다. 여기서 두 전 략의 과거 테스트 결과 및 누적 수익곡선을 살펴보기로 하자. <표 0-22> 테스트 결과 비교(Gap, Partial Gap) 평가 항목 DD_Pattern_Gap 총 손익 DD_Pattern_PartialGap 67,149.35 78,109.62 평균 손익 149.22 94.11 최대 손실 -963.31 -907.44 총 매매수 450 830 연속 이익 매매수 8 7 연속 손실 매매수 7 8 최대 자본 인하액 -4,791.24 -5,142.08 승률 51.11 47.71 손익비 2.06 1.61 평균손익비 1.97 1.77 보상 비율 14.02 15.19 0.1,0.1,0.29,0.18,2.7 0.5,0.3,0.34,0.19,2.7 변수 값 주) 필수적으로 보유해야 할 바 수: 100 86 테스트 결과 DD_Pattern_Gap 전략이 450건 매매에서 평균 손익 약 15만원이 발생하여 적은 매매에서 큰 수익이 발생함을 알 수 있다. 여기서 하나 좀더 자세히 관찰할 부분이 누적수익곡선의 발달 과정이다. DD_Pattern_Gap의 누적 수익곡선을 보기로 하자. <그림 0-29> DD_Pattern_Gap 누적수익곡선 주) DD_Pattern_Gap 전략 그림을 보면 최근 장세에서 꾸준한 수익증가가 발생하고 있고, 전체적으로 선 형성이 강하다는 것을 알 수 있다. 앞서 3장에서 살펴본 바와 같이 최근 장에 서 수익 증가가 유지되기 힘든데, 이 전략은 보다 좋은 선형성을 보여 주고 있다. 이러한 현상은 DD_Pattern_PartialGap 에서 발견할 수 있다. (2) 강도(Power) 분석 전략 봉이 형성될 때는 4가지 가격에 대한 정보가 있다. 즉 시가, 고가, 저가, 종 가이다. 이러한 4가지 가격이 어떻게 형성되는지를 분석하는 것이 패턴 분석 이 되며, 매수나 매도 강도에 중심을 두어 분석하는 방법의 기초가 된다. 앞서 설명한 DD_RangeBreak전략에서 전일의 고가-저가인 Range를 이용해서 돌 파 방향으로 매매하는 전략을 구사하였다. 역시 전일의 움직임이 그 다음날 주요 지지 / 저항선으로 사용되어 전일 Range가 적으면 빠른 돌파, 크면 늦은 돌파로 작동하게 된다. 이와 마찬가지로 전일 시가, 고가, 저가, 종가의 위치로 매수 / 매도 강도를 분석하여 다음날의 돌파 시점으로 사용할 수 있게 된다. 예를 들어 오늘 봉이 양봉이면 매수 강도를 종가 - 저가로 설정하고, 매도 강도는 고가 - 종가로 설정하여 다음날의 지지 / 저항선으로 사용하는 것을 말한다. 이러한 다양하 고 세밀한 패턴 분석을 통해서 DD_RangeBreak 전략은 좀더 높은 수익과 높은 승률을 가진 전략으로 진화된다. 연구 및 개발을 독자의 몫으로 남겨두고 간단하게 두 가지 전략을 만들어 보 기로 하자. 1) Max Power 전략 Max Power 전략은 전일 고가와 종가, 종가와 저가의 움직임 중에서 큰 움직임 을 다음날의 지지 / 저항선으로 사용하는 전략이다. 전략식은 다음과 같다. 88 <수식 0-30> DD_Pattern_MaxPower 영역: 전략 이름: DD_Pattern_MaxPower Input: s1(0.48), s2(2.7) Var1=highd(1) Var2=closed(1) Var3=lowd(1) Var4=closed(1) If abs(Var1-var4)>=abs(Var2-var3) Then Var10=abs(Var1-var4) Else Var10=abs(Var2-var3) End If Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Ttime<1500 Then If Cond1=False Then Call buy("매수",Atstop,Def,opend+var10*S1) End If If Cond2=False Then Call sell("매도",Atstop,Def,opend-var10*s1) End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If 위 식은 전일의 고가 - 종가 와 종가 - 저가 중 큰 값을 사용해서 돌파 전략으로 작성한 식이다. 앞서 반복적인 설명이 있었기 때문에 적용 그림은 생략한다. 2) TrueRange 이용 전략 전일 봉뿐만이 아니라 전전 일의 흐름도 같이 반영하여 금일의 지지 / 저항선 을 작성할 수 있다. 즉 TR(=TrueRange)를 이용하는 방법이다. <수식 0-31> DD_Pattern(TrueRange) 영역: 전략 이름: DD_Pattern(TrueRange) Input: s1(0.37), s2(2.7) Var1=highd(1) Var2=lowd(1) Var3=closed(2) Var10=max(Var1,Var3)-min(Var2,Var3) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Ttime<1500 Then If Cond1=False Then Call buy("매수",Atstop,Def,opend+var10*S1) End If If Cond2=False Then Call sell("매도",Atstop,Def,opend-var10*s1) End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If 역시 지지 / 저항선을 전일의 TR을 이용하였을 뿐 전 식과 차이는 없다. 그러 면 여기서 테스트 결과를 보기로 하자. 90 <표 0-23> 테스트 비교 결과(MaxPower, TrueRange) 평가 항목 DD_Pattern_MaxPower DD_Pattern(TrueRange) 총 손익 92,911.19 89,094.08 평균 손익 99.16 103.00 최대 손실 -906.98 -987.45 총 매매수 937 865 연속 이익 매매수 7 7 연속 손실 매매수 7 8 최대 자본 인하액 -4,178.53 -3,822.34 승률 50.27 49.71 손익비 1.69 1.74 평균손익비 1.67 1.76 보상 비율 변수 값 22.24 23.31 0.48,2.7 0.37,2.7 주) 필수적으로 보유해야 할 바수: 100 두 가지 모두 DD_RangeBreak 전략과 유사한 결과를 나타냄을 알 수 있으며 DD_Pattern_MaxPower전략의 승률 및 총손익이 다소 좋아졌다는 것을 알 수 있 다. 이와 같이 매수 강도, 매도 강도, 가장 큰 강도 등을 계량화 하여 새로운 변형 전략으로 사용가능하며 시장에 부합되는 알고리즘일수록 더 좋은 향상이 가능하다는 것을 기억하기 바란다. (3) 연속 패턴 전략 연속 패턴(consecutive pattern) 전략이란 연속적으로 발생하는 봉의 형태를 이용한 매매 전략을 말한다. 역시 패턴 분석의 기초적인 부분으로서 시가, 고 가, 저가, 종가의 흐름을 말하는데 보통 다음과 같은 분석을 의미한다. 연속 시가 상승: 시가가 연속적 상승하는 경우 연속 고가 상승: 고가가 연속적 상승하는 경우 연속 저가 상승: 저가가 연속적 상승하는 경우 연속 종가 상승: 종가가 연속적 상승하는 경우 위 경우 복수 결합 다양한 결합도 가능하며 변형도 가능한데, 여기서 3봉 연속 고가상승과 3봉 연속 저가하락 전략을 작성해 보도록 하자. <수식 0-32> DD_Pattern_Consec 영역: 전략 이름: DD_Pattern_Consec Input: len1(3), len2(2), level(0.13), s2(2.7), s3(0.01) Var1=opend+(highd(1)-lowd(1))*level Var2=opend-(highd(1)-lowd(1))*level Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Var1<high Then If countwhen(high>high(1),len1)=len1 Then If Cond1=False Then Call buy("매수",Atstop,Def,high+Atr(20)*S3) End If End If End If If Var2>low Then If countwhen(low<low(1),len2)=len2 Then If Cond2=False Then Call sell("매도",Atstop,Def,low-Atr(20)*S3) End If End If End If End If If position<>0 Then Call exitlong("추적스탑",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("추적스탑",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If 92 <수식 4-32>는 고가가 3봉 연속 상승하면 매수하고 저가가 연속 하락하면 매도 하는 전략식이다. 시가 대비 고가가 전일 Range의 0.13배 이상 상승해야 매수 방향으로만 매매를 하고 저가가 전일 Range 대비 0.13배 하락해야만 매도 방향 으로 매매하는 제어를 사용하였다. 또 다른 전략을 작성해보자. <수식 0-33> DD_Pattern_Consec(1) 영역: 전략 이름: DD_Pattern_Consec(1) Input: len1(2), len2(2), level(0), s2(2.7), s3(0.01) Var1=opend+(highd(1)-lowd(1))*level Var2=opend-(highd(1)-lowd(1))*level Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Var1<=close Then If countwhen(close>open,len1)=len1 And countwhen(close>close(1),len1)=len1 _ And countwhen(high>high(1),len1)=len1 Then If Cond1=False Then Call buy("매수",Atstop,Def,high+Atr(20)*S3) End If End If End If If Var2>close Then If countwhen(close<open,len2)=len2 And countwhen(close<close(1),len2)=len2 _ And countwhen(low<low(1),len2)=len2 Then If Cond2=False Then Call sell("매도",Atstop,Def,low-Atr(20)*S3) End If End If End If End If If position<>0 Then Call exitlong("추적스탑",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("추적스탑",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If <수식 4-33>은 2봉 종가가 연속 상승, 연속 양봉, 연속 고가 상승이 발생하면 매수하고, 2 봉 종가가 연속 하락, 연속 음봉, 연속 저가 하락이 발생하면 매 도하게 된다. 시가 보다 종가가 클 경우에만 매수, 적을 경우에만 매도하는 제어를 사용하였다. <수식 4-33>이 적용된 그림을 보고 두 가지 전략의 과거 테스트 결과를 보기 로 하자. <그림 0-30> DD_Pattern_Consec 주) 신호: DD_Pattern_Consec <그림 4-30>을 보면 그림에 표시된 숫자가 연속 상승(하락)횟수를 나타내고 있다. 9월 19일에는 2봉 연속 저가 하락이 계속적으로 발생하였으나 제어 구 문에 영향을 받아 상당 기간 이후에 매도가 발생하였다. 9월 22일에도 역시 매도가 발생하였다. 94 <표 0-24> 테스트 결과 평가 항목 DD_Pattern_Consec 총 손익 DD_Pattern_Consec(1) 77,195.18 71,979.58 평균 손익 116.43 84.98 최대 손실 -1,118.69 -883.00 총 매매수 663 847 연속 이익 매매수 10 10 연속 손실 매매수 9 8 최대 자본 인하액 -3,105.38 -2,987.64 승률 50.98 48.64 손익비 1.92 1.58 평균손익비 1.84 1.67 보상 비율 24.86 24.09 3,2,0.13,2.7,0.01 2,2,0,2.7,0.01 변수 값 주) 필수적으로 보유해야 할 바수: 100 테스트 결과를 보면 둘다 총 손익은 다소 적은 편이나, 평균 손익은 적정 수 준을 나타내고 있다. 최대 손실 및 최대 자본 인하액도 적은 수준이며 높은 보상 비율을 나타내고 있다. 또 다른 형태의 조합이나 연속 매매 방법들도 유 용한 전략이 될 것으로 판단할 수 있다. (4) 캔들 패턴 전략 일본식 캔들스틱 패턴을 이용한 전략을 말한다. 캔들스틱 패턴 전략에는 지속 형 및 전환형 패턴이 있는데, 여기서는 대표적인 전환형 패턴을 이용한 전략 을 작성해 보도록 하자. 사용될 전환형 패턴은 다음과 같다. <표 0-25> 전환형 패턴 상승 전환형 하락 전환형 하나의 봉 Hammer, Inverted Hammer Doji, Dragonfly Doji 하나의 봉 Hanging Man, Shooting Star, Doji, Gravestone 두개의 봉 Bullish Engulfing, Piercing 두개의 봉 Bearish Engulfing, Dark Cloud Cover 세개의 봉 Morning Star 세개의 봉 Evening Star <표 4-25>의 패턴 이외에도 다양한 전환형 패턴이 존재하며, 위의 패턴도 정 의하기에 따라 상당히 다른 결과를 나타내게 된다. 여기서 주의할 것은 너무 엄격한 조건으로서 패턴을 정의할 경우 매매건수가 상당히 줄어든다는 것이다. 그럼 전략 식을 작성해 보도록 하자. <수식 0-34> DD_Pattern_Reversal 영역: 전략 이름: DD_Pattern_ Reversal Input: s2(2.7), len1(3), len2(2), s3(0.9), s4(0.29) Var1=high-low '봉의 Range Var10=high+low If open>=close Then Var2=open-close '음봉 body Elseif close>open Then Var2=close-open '양봉 body End If Cond1=close(1)<open(1) And close>open And close>open(1) And close(1)>open 'bull engulfing Cond2=close(1)>open(1) And close<open And close<open(1) And close(1)<open 'bear engulfing Cond3=var2*2<min(open,close)-low And Var10*0.7 < max(open,close) 'hammer, hanging man Cond4=var2*2<high-max(open,close) And Var10*0.3 > min(open,close) 'inverted hammer 'shooting star Cond5= open=close 'doji Cond6= open=close And close>var10*0.7 'dragonfly doji Cond7= open=close And close<var10*0.3 'garvestone 96 Cond8=close(1)<open(1) And close>open And close>var10(1)*0.5 _ And close(1)>open And close<open(1) 'piercing Cond9=close(1)>open(1) And close<open And close<var10(1)*0.5 _ And close(1)<open And close>open(1) 'dark cloud ' 세개의 봉 Cond10=close(2)>open(2) And Var1(2)>var1(1) And close(1)>open(1) _ And close(2)<close(1) And close(2)<open(1) _ And open>close And close>close(2) 'evening star Cond11=close(2)<open(2) And Var1(2)>var1(1) And close(1)<open(1) _ And close(2)>close(1) And close(2)>open(1) _ And open<close And close<close(2) 'morning star If ttime<1500 Then If opend<=close Then If llv(1,low,len1)=low Then If Cond4 Or Cond5 Or Cond6 Then Call buy("매수",Atstop,Def,high+Atr(20)*S3) End If End If End If If opend>close Then If hhv(1,high,len1)=high Then If Cond4 Or Cond5 Or Cond7 Then Call sell("매도",Atstop,Def,low-Atr(20)*S3) end If End If End If End If If ttime<1500 Then If opend<=close Then If llv(1,low,len2)=low Then If Cond11 Or Cond1 Or Cond8 Then Call buy("매수",Atstop,Def,high+Atr(20)*S4) End If End If End If If opend>close Then If hhv(1,high,len2)=high Then If Cond10 Or Cond2 Or Cond9 Then Call sell("매도",Atstop,Def,low-Atr(20)*S4) End If End If End If End If If tdate<>tdate(1) Then Var50=currententrynum End If Cond50= tdate=exitdate(1) And position(1)=1 Cond49= tdate=exitdate(1) And position(1)=-1 If currententrynum-var50<=1 Then If ttime <1500 Then If opend>highd(1) Then If Cond50=False Then Call buy("GapUp매수",Atstop,Def,opend+(highd(1)-lowd(1))*0.3)' End If If Cond49=False Then Call sell("GapFill매도",Atstop,Def,max(highd(1),opend-(highd(1)-lowd(1))*0.2)) End If End If If opend<lowd(1) Then If Cond49=False Then Call sell("GapDown매도",Atstop,Def,opend-(highd(1)-lowd(1))*0.3) End If If Cond50=False Then Call buy("GapFill매수",Atstop,Def,min(lowd(1),opend+(highd(1)-lowd(1))*0.2)) End If End If End If End If If position<>0 Then Call exitlong("추적스탑",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("추적스탑",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If 98 <수식 4-34>는 전환 패턴이 발생하면 매매를 하도록 구성되어 있는데, 시가보 다 종가가 커야 매수 방향, 시가보다 종가가 작아야만 매도하는 제어가 포함 되어 있다. 또한 상승 전환일 경우에는 현재봉의 저가가 3봉 최저가를 형성해 야 하며, 매도의 경우에는 현재봉의 고가가 2봉 최고가를 형성하면 매도 하도 록 구성되어 있어 저가 매수전략 형태라 할 수 있다. 추가적으로 앞서 설명한 갭 매매 전략을 2번 매매까지 허용하도록 하였다. 적용한 그림은 다음과 같다. <그림 0-31> DD_Pattern_Reversal 주) 신호: DD_Pattern_Reversal <그림 4-31>을 보면 하락전환을 예고하는 도찌(Doji)가 발생하고 그 다음 봉 에 매도가 발생하였다. 그러나 가격이 재차 상승 전환하는 듯 하였으나 흑운 형(Dark Cloud Cover)가 발생하면서 하락이 가속화된 국면을 보여주고 있다. 실제로 패턴 전략을 작성할 때 제어가 되어 있다면 전환 패턴이 그리 자주 발 생하지 않는다. 따라서 장 시작 초기에 돌파나 연속형 패턴을 이용한 전략을 추가 사용하게 된다. 청산 전략에서도 전환형 패턴은 유용하게 사용될 것이라 는 것도 짐작할 수 있다. 테스트 결과는 다음과 같다. <표 0-26> 테스트 결과 평가 항목 DD_Pattern_Reversal 총 손익 68,114.18 평균 손익 121.20 최대 손실 -1,019.81 총 매매수 562 연속 이익 매매수 9 연속 손실 매매수 7 최대 자본 인하액 -4,547.17 승률 50.18 손익비 1.85 평균손익비 1.84 보상 비율 14.98 변수 값 2.7, 3, 2, 0.9, 0.29 주) 필수적으로 보유해야 할 바수: 100 테스트 결과를 보면 매매 건수가 562건에 평균 손익비가 12만원으로 적은 매 매에서도 상당한 수준의 수익을 창출하고 있음을 알 수 있다. 여기까지가 패 턴 분석을 통한 매매 전략이다. 추가적인 개발여지가 많은 부분이 패턴 전략 이며, 실제로 유용한 매매 전략의 상당수가 패턴을 이용한 매매 전략 분야에 속한다. 따라서 지속적이고 세밀한 관심을 갖길 바란다. 그럼 이제부터 기술적 지표를 이용한 매매 전략을 작성해 보자. 6. 기술적 지표를 이용한 전략 기술적 지표를 이용해서 진입 전략을 구현하는 방법을 말한다. 즉 이동평균선 이 상승 중이면 상승추세, 스토케스틱 지표가 과매도권이면 매수를 고려하거 나, 여러 지표들을 중첩하여 같은 방향 신호가 발생하면 그 방향으로 매매하 는 방법 등이 있다. 또한 기술적 지표들을 이용한 매매 전략은 작성하기 그리 100 힘들지 않다는 장점도 가지고 있다. 실제로 널리 사용되고는 있으나 그 실효성에 대해서 의문시된다는 의견이 많 다. 그 이유는 기술적 지표가 가지고 있는 변수 값이 미래에는 변화가 될 가 능성이 크다는 관점과 다양한 지표를 결합하여 사용하는 방법이 과 최적화 문 제를 피할 수 없다는 의견이다. 따라서 최소한의 지표만을 사용하거나, 필터 (Filter)로만 사용하기를 권장하기도 한다. 어쨌든 기술적 지표는 진입 방법에서 주요한 요소로 사용된다. 기술적 지표는 가격의 움직임을 계량화하여 추세 및 모멘텀을 파악할 수 있게 해주기 때문이 다. 우선 가격에 적용되는 다양한 기술적 지표 중에서 대표적인 지표들과 신 기술적 지표라고 하는 오실레이터 중 알아두면 유용한 지표들은 소개하면 다음과 같다. <표 0-27> 기술적 지표 구분 지표 가격에 적용된 기술적 지표 Price ROC, MACD, CCI, TRIX, STOCHASTIC, RSI, LRS, DMI, R-SQUARED 가격 오실레이터 거래량 오실레이터 구분 이동평균선, 그물망 차트, 주가 채널, 볼린저 밴드, 파라볼릭 사, 일목균형표, LRI Volume ROC, CO, MFI <표 0-28> 기술적 지표 활용법 사용 예 돌파 및 장단기 교차 가격이 이동평균선 돌파, 장단기 이동평균선 교차 신호선 교차 MACD 와 MACD Signal 선 교차 기준선 교차 Price ROC 가 0선 교차 과매수, 과매도 활용 다이버전스(Divergence) 활용 RSI 지표가 30 및 70 선 교차 가격은 저점을 낮추는데 지표는 저점을 높이는 Positive Divergence 및 가격은 고점을 높이는데 지 표는 고점을 낮추는 Negative Divergence 활용 기술적 지표를 이용하면 다양한 전략개발이 가능하며, 변형 또한 무수히 많다. 어떠한 형태로 전략을 개발하든 돌파 확인 진입 방법이 되거나, 저가 매수 방 법으로 개발하게 된다. 청산 전략에서도 지표들이 자주 사용된다는 점을 명심 하고, 기술적 지표를 이용한 매매 전략에 대해 몇 가지를 알아보기로 하자. (1) 이동 평균선 이동평균선을 이용한 매매전략을 말하는데, 상당히 많은 지표들이 이동평균선 를 이용하고 있다. 크게 두 가지로서 추세를 파악하여 매매를 제어하기 위한 필터(Filter) 형태로 가장 많이 사용되고, 두 번째로 실질적인 진입전략으로 사용된다. 여기서는 필터로 사용한 방법에 대해서 알아보자. 필터로 이동평균선을 사용하는 이유는 추세를 파악하기 위함이다. 즉 장단기 이동평균선들이 정배열되어 있다면 상승추세, 역배열되어 있다면 하락추세, 배열 관계가 불분명하다면 횡보추세로 구분하는 방법이 가장 일반적인 방법이 다. 앞서 설명한 RangeBreak전략을 이동평균선을 사용한 매수, 매도를 제어하 는 전략식으로 작성해 보자. <수식 0-35> DD_indicator_MAFilter 영역: 전략 이름: DD_indicator_MAFilter Input: s1(0.37), s2(2.7), s3(0.37), malen1(3), malen2(8), malen3(15) Var1=highd(1)-lowd(1) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If malen1*1.5 <=malen2 And malen2*1.5<=malen3 Then Var10=mov(close,malen1,S) Var11=mov(close,malen2,S) Var12=mov(close,malen3,S) Cond10=var10>var11 And Var11>var12 102 Cond11=var10<var11 And Var11<var12 If ttime<1500 Then If Cond10 Then If Cond1=False Then Call buy("매수",Atstop,Def,opend+var1*s1) End If End If If Cond11 Then If Cond2=False Then Call sell("매도",Atstop,Def,opend-var1*S1) End If End if If Cond10 =False And Cond11 =False Then If Cond1=False Then Call buy("매수",Atstop,Def,opend+var1*s3) End If If Cond2=False Then Call sell("매도",Atstop,Def,opend-var1*S3) End If End If End If End If If position<>0 Then Call exitlong("매수추적스탑",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*S2) Call exitshort("매도추적스탑",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If <수식 4-35>는 세가지 장단기 이동평균선이 정배열일때는 매수만, 역배열일때 는 매도만 하고, 정배열도 역배열도 아닐 경우에는 양 방향으로 매매하도록 구성된 식이다. 적용된 그림을 보자. <그림 0-32> DD_indicator_MAFilter 주) 단순 이동평균선 3, 8, 15 적용 <그림 4-32>를 보면 9월 17일은 역배열이 발생함으로서 매도 진입이 발생한 것을 보여주고 있고, 9월 18일은 이동평균선이 정배열도, 역배열도 아닌 시점 에서 매도가 발생한 사례이다. 이러한 필터 방법은 ADX, RSI, MACD 등 대부분 의 기술적 지표를 이용할 수 있다. (2) 오실레이터(Oscillator) 오실레이터는 일정 구간이나 기준선을 중심으로 순환 반복하는 지표를 말하는 데, 대부분의 오실레이터 지표는 가격 모멘텀을 잘 표현한다. 다양한 오실레 이터가 있는데 여기서는 스토케스틱 지표를 이용한 매매 전략을 만들어 보자. 104 <수식 0-36> DD_indicator_Stoch 영역: 전략 이름: DD_indicator_ Stoch Input: len1(25), len2(6), s1(0.37), s2(2.7), level(50) Var1=slowk(len1,len2) If tdate<>tdate(1) Then Var10=9999999 Var11=0 Var50=currententrynum Cond1=False Cond2=False End If If crossup(Var1,level) Then Var10=high End If If crossdn(Var1,level) Then Var11=low End If Cond1=crossup(Var1, level) Cond2=crossdn(Var1, level) If currententrynum-var50=0 Then If ttime<1500 Then If opend< closed(1) Then Call buy("매수",Atstop,Def,Var10) End If If opend> closed(1) Then Call sell("매도", Atstop,Def,Var11) End If If Var1>level Then Call buy("매수1",Atstop,Def,opend+(highd(1)-lowd(1))*s1) End If If Var1<level Then Call sell("매도1",Atstop,Def,opend-(highd(1)-lowd(1))*s1) End If End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1) - atr(20)*s2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If If Cond2 Then Call exitlong("지표청산",Atstop,llv(1,low,3)) End If If Cond1 Then Call exitshort("지표청산",Atstop,hhv(1,high,3)) End If <수식 4-36>은 스토케스틱 지표가 일정 수준(50)을 돌파하는 시점의 고가, 저 가를 이용해서 전일 종가보다 금일 시가가 적으면 매수 방향으로, 전일 종가 보다 금일 시가가 크면 매도 방향으로 매매를 하도록 구성되어 있다. 또한 하 루 중 일정 수준 이상 계속 유지되는 경우에도 매매가 발생하도록 돌파 전략 을 동시에 사용하였다. 청산 전략에는 추적 스탑 이외에 일정수준(50)을 교차할 때 3봉 고저를 이용 한 청산 전략을 함께 적용하였다. 적용된 그림을 보자. <그림 0-33> DD_indicator_Stoch 주) 지표: 스토케스틱 적용 <그림 4-33>을 보면 3월 31일 스토케스틱 지표가 50선을 하회하고 있어 돌파 진입(매도)이 발생하였고, 4월 1일에는 전일 종가 보다 낮은 상태에서 50선 돌파(수직선)로 매수가 발생한 사례를 표시하였다. 그러면 여기서 두 가지 스토케스틱 지표를 이용하는 돌파 전략을 작성해보자. 106 <수식 0-37> DD_indicator_DualStoch 영역: 전략 이름: DD_indicator_DualStoch Input:, len1(7), len2(10), ob1(90), os1(10), ob2(70), os2(30), level(0.01), s2(2.7) Var1=fastk(len1) Var2=fastk(len2) Cond1=var1>ob1 And Var2>ob2 '과매수 Cond2=var1<os1 And Var2<ob2 '과매도 Cond50= tdate=exitdate(1) And position(1)=1 Cond49= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond50=False Then If Cond1 Then If opend<close Then Call buy("매수",Atstop,Def,high+Atr(20)*level) End If End If End If If Cond49=False Then If Cond2 Then If opend>close Then Call sell("매도",Atstop,Def,low-Atr(20)*level) End If End If End If End If If position<>0 Then Call exitlong("추적스탑",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("추적스탑",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If <수식 4-37>은 두 가지 Fast Stochastic을 이용해서 서로 다른 수준의 과매수권에 진입하면 매수, 과매도권에 진입하면 매도하는 전략식이다. 적용된 그림을 보자. <그림 0-34> DD_indicator_DualStoch 주) 지표: 스토케스틱(fast) <그림 4-34>를 보면 Fast Stochastic지표가 각각 70, 90이하로 진입하게 되면 매도하게 되는데, 이틀 동안 과매도 권에서 두 번의 매도 진입이 발생하여 수 익이 발생한 것을 알 수 있다. 이러한 오실레이터 전략들은 지표들 마다 기본 개념이나 계산식이 유사하기 때문에 RSI, CCI 등 다른 지표를 이용해서 다양 한 전략들을 개발 할 수 있다 (3) 다이버전스(Divergence) 다이버전스는 오실레이터를 활용하는 방법 중 가장 중심이 되는 것이라 할 수 있다. 오실레이터가 모멘텀을 나타내고 있기 때문에 모멘텀의 강화 및 약화 현상인 다이버전스를 자주 활용하게 된다. 즉 상승 다이버전스는 가격의 저점 이 낮아지는데 지표의 저점은 높아져 곧 추세가 상승으로 전환할 것이라는 것 을 설명해주고, 하락 다이버전스는 가격의 고점이 높아지는데 지표의 저점이 108 낮아져 곧 하락 전환할 것이라는 것을 나타내준다. RSI지표의 다이버전스 특 성을 이용한 전략을 작성해보자. <수식 0-38> DD_indicator_SDIV 영역: 전략 이름: DD_indicator_SDIV Input: len1(14), len2(50), delay(4), level(0.16), s1(0.37), s2(2.7) Var1=rsi(close,len1) If Var1>llv(1,Var1,len2) And low<=llv(1,low,len2) Then Var11=1 Else Var11=-1 End If If Var1<hhv(1,Var1,len2) And high>=hhv(1,high,len2) Then Var12=1 Else Var12=-1 End If Cond1=hhv(1,Var11,delay)=1 And Var1>llv(1,Var1,len2) And Var1<60 Cond2=hhv(1,Var12,delay)=1 And Var1<hhv(1,Var1,len2) And Var1>40 If tdate<>tdate(1) Then Var50=currententrynum End If If currententrynum-var50=0 Then If ttime<1500 Then If Var1>40 And Cond2=False Then Call buy("매수1",Atstop,Def,opend+(Highd(1)-lowd(1))*s1) End If If Var1<60 And Cond1=False Then Call sell("매도1",Atstop,Def,opend-(Highd(1)-lowd(1))*s1) End If End If End If If currententrynum-var50<=2 Then If ttime<1500 Then If Cond1 And opend-(highd(1)-lowd(1))*level < close Then Call buy("매수",Atstop,Def,hhv(1,high,2)) End If If Cond2 And opend+(highd(1)-lowd(1))*level>close then Call sell("매도",Atstop,Def,llv(1,low,2)) End If End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*S2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If <수식 4-38>을 보면 RSI지표가 50봉 최저 RSI값보다 높아지는데, 가격은 50봉 최저가를 유지하는 경우 상승 다이버전스라 인식하게 된다(반대의 경우 하락 다이버전스). 상승 다이버전스가 발생하면 매수하고, 하락 다이버전스가 발생 하면 매도하는 전략을 구사하게 된다. 단, 하루 첫 매매는 RSI지표가 40보다 크고 다이버전스가 발생하지 않았으면 매수하고, RSI 지표가 60보다 적고 다 이버전스가 발생하지 않았으면 매도하는 전략을 병행하였다. 적용된 그림을 보자. <그림 0-35> DD_indicator_SDIV 주) 지표: DD_indicator_SDIV 110 <그림 4-35>에서 우선 하단에 있는 지표인 DD_indicator_SDIV를 보자. RSI지 표에 일정 기간 동안의 최고,최저 선이 작성되어 있으며 히스토그램으로 표시 된 부분은 상승다이버전스와 하락 다이버전스를 표시하고 있다. 8월 27일을 보면 시초가 이후 하락 다이버전스가 발생하기 전에 매수 조건이 성립되어 매 수하였다. 반면, 8월 28일 시초가는 50봉 최고가을 형성하였으나, 지표는 최 고가를 형성하지 못하여 하락 다이버전스가 발생하여 매도하였다. 단기 모멘 텀 괴리를 이용한 전략이라 할 수 있다. 그러면 여기서 테스트 결과를 보자. <표 0-29> 테스트 결과 비교(이동평균, 스토케스틱) 평가 항목 DD_indicator_MAFilter 총 손익 DD_indicator_Stoch 94,005.80 79,781.32 평균 손익 101.19 93.75 최대 손실 -1,132.98 -891.14 총 매매수 929 851 연속 이익 매매수 10 6 연속 손실 매매수 7 11 최대 자본 인하액 -2,941.89 -3,697.06 승률 49.84 47.83 손익비 1.74 1.69 평균손익비 1.75 1.84 보상 비율 31.95 21.58 0.37,2.7,0.37,3,8,15 25,6,0.37,2.7,50 변수 값 주) 필수적으로 보유해야 할 바수: 100 <표 0-30> 테스트 결과(듀얼 스토케스틱, 단기다이버전스) 평가 항목 DD_indicator_DualStoch 총 손익 DD_indicator_SDIV 80,806.84 81,967.62 평균 손익 72.34 83.73 최대 손실 -1,014.50 -987.45 총 매매수 1,117 979 연속 이익 매매수 7 7 연속 손실 매매수 8 8 최대 자본 인하액 -5,146.98 -3,459.40 승률 46.73 45.86 손익비 1.47 1.54 평균손익비 1.67 1.82 보상 비율 15.70 23.69 7,10,90,10,70,30,0.01,2.7 14,50,4,0.16,0.37,2.7 변수 값 주) 필수적으로 보유해야 할 바수: 100 테스트 결과 DD_indicator_MAFilter가 상대적으로 높은 수익과 적은 위험 수 준을 보이고 있다. 이동평균선 필터가 진입방향을 잘 제어하고 있다는 것을 알 수 있다. 나머지 결과 모두 유용한 결과를 보였으나, DD_indicator_DualStoch 경 우 다소 위험이 큰 구조임을 알 수 있다. 지금까지 돌파 전략에서부터 수렴 돌파, 모형, 패턴분석 전략 및 기술적 지표 를 이용한 진입전략들을 설명 하였다. 위의 진입 전략들만이 유용한 진입 전략의 전부는 아니다. 위의 전략들을 기 초로 하여 실전매매 경험이나, 또 다른 이론을 추가하여 더 유용한 결과를 만 들어 내기 위한 원천 정도로 생각하기 바란다. 예를 들어 위 스토케스틱 전략 을 다른 지표들로 응용하여 더 좋은 결과를 만들거나, 돌파 전략들을 복합적 으로 활용하여 더 유용한 전략으로 발전 시켜야 한다. 112 6. 기술적 지표를 이용한 전략 기술적 지표를 이용해서 진입 전략을 구현하는 방법을 말한다. 즉 이동평균선 이 상승 중이면 상승추세, 스토케스틱 지표가 과매도권이면 매수를 고려하거 나, 여러 지표들을 중첩하여 같은 방향 신호가 발생하면 그 방향으로 매매하 는 방법 등이 있다. 또한 기술적 지표들을 이용한 매매 전략은 작성하기 그리 힘들지 않다는 장점도 가지고 있다. 실제로 널리 사용되고는 있으나 그 실효성에 대해서 의문시된다는 의견이 많 다. 그 이유는 기술적 지표가 가지고 있는 변수 값이 미래에는 변화가 될 가 능성이 크다는 관점과 다양한 지표를 결합하여 사용하는 방법이 과 최적화 문 제를 피할 수 없다는 의견이다. 따라서 최소한의 지표만을 사용하거나, 필터 (Filter)로만 사용하기를 권장하기도 한다. 어쨌든 기술적 지표는 진입 방법에서 주요한 요소로 사용된다. 기술적 지표는 가격의 움직임을 계량화하여 추세 및 모멘텀을 파악할 수 있게 해주기 때문이 다. 우선 가격에 적용되는 다양한 기술적 지표 중에서 대표적인 지표들과 신 기술적 지표라고 하는 오실레이터 중 알아두면 유용한 지표들은 소개하면 다음과 같다. <표 오류! 지정한 스타일은 사용되지 않습니다.-1> 기술적 지표 구분 지표 가격에 적용된 기술적 지표 가격 오실레이터 거래량 오실레이터 이동평균선, 그물망 차트, 주가 채널, 볼린저 밴드, 파라볼릭 사, 일목균형표, LRI Price ROC, MACD, CCI, TRIX, STOCHASTIC, RSI, LRS, DMI, R-SQUARED Volume ROC, CO, MFI <표 오류! 지정한 스타일은 사용되지 않습니다.-2> 기술적 지표 활용법 구분 사용 예 돌파 및 장단기 교차 신호선 교차 MACD 와 MACD Signal 선 교차 기준선 교차 Price ROC 가 0선 교차 과매수, 과매도 활용 다이버전스(Divergence) 활용 2 가격이 이동평균선 돌파, 장단기 이동평균선 교차 RSI 지표가 30 및 70 선 교차 가격은 저점을 낮추는데 지표는 저점을 높이는 Positive Divergence 및 가격은 고점을 높이는데 지 표는 고점을 낮추는 Negative Divergence 활용 기술적 지표를 이용하면 다양한 전략개발이 가능하며, 변형 또한 무수히 많다. 어떠한 형태로 전략을 개발하든 돌파 확인 진입 방법이 되거나, 저가 매수 방 법으로 개발하게 된다. 청산 전략에서도 지표들이 자주 사용된다는 점을 명심 하고, 기술적 지표를 이용한 매매 전략에 대해 몇 가지를 알아보기로 하자. (1) 이동 평균선 이동평균선을 이용한 매매전략을 말하는데, 상당히 많은 지표들이 이동평균선 를 이용하고 있다. 크게 두 가지로서 추세를 파악하여 매매를 제어하기 위한 필터(Filter) 형태로 가장 많이 사용되고, 두 번째로 실질적인 진입전략으로 사용된다. 여기서는 필터로 사용한 방법에 대해서 알아보자. 필터로 이동평균선을 사용하는 이유는 추세를 파악하기 위함이다. 즉 장단기 이동평균선들이 정배열되어 있다면 상승추세, 역배열되어 있다면 하락추세, 배열 관계가 불분명하다면 횡보추세로 구분하는 방법이 가장 일반적인 방법이 다. 앞서 설명한 RangeBreak전략을 이동평균선을 사용한 매수, 매도를 제어하 는 전략식으로 작성해 보자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-1> DD_indicator_MAFilter 영역: 전략 이름: DD_indicator_MAFilter Input: s1(0.37), s2(2.7), s3(0.37), malen1(3), malen2(8), malen3(15) Var1=highd(1)-lowd(1) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If malen1*1.5 <=malen2 And malen2*1.5<=malen3 Then Var10=mov(close,malen1,S) Var11=mov(close,malen2,S) Var12=mov(close,malen3,S) Cond10=var10>var11 And Var11>var12 Cond11=var10<var11 And Var11<var12 If ttime<1500 Then If Cond10 Then If Cond1=False Then Call buy("매수",Atstop,Def,opend+var1*s1) End If End If If Cond11 Then If Cond2=False Then Call sell("매도",Atstop,Def,opend-var1*S1) End If End if If Cond10 =False And Cond11 =False Then If Cond1=False Then Call buy("매수",Atstop,Def,opend+var1*s3) End If If Cond2=False Then Call sell("매도",Atstop,Def,opend-var1*S3) End If End If End If End If If position<>0 Then Call exitlong("매수추적스탑",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*S2) Call exitshort("매도추적스탑",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If <수식 4-35>는 세가지 장단기 이동평균선이 정배열일때는 매수만, 역배열일때 는 매도만 하고, 정배열도 역배열도 아닐 경우에는 양 방향으로 매매하도록 구성된 식이다. 적용된 그림을 보자. 4 <그림 오류! 지정한 스타일은 사용되지 않습니다.-1> DD_indicator_MAFilter 주) 단순 이동평균선 3, 8, 15 적용 <그림 4-32>를 보면 9월 17일은 역배열이 발생함으로서 매도 진입이 발생한 것을 보여주고 있고, 9월 18일은 이동평균선이 정배열도, 역배열도 아닌 시점 에서 매도가 발생한 사례이다. 이러한 필터 방법은 ADX, RSI, MACD 등 대부분 의 기술적 지표를 이용할 수 있다. (2) 오실레이터(Oscillator) 오실레이터는 일정 구간이나 기준선을 중심으로 순환 반복하는 지표를 말하는 데, 대부분의 오실레이터 지표는 가격 모멘텀을 잘 표현한다. 다양한 오실레 이터가 있는데 여기서는 스토케스틱 지표를 이용한 매매 전략을 만들어 보자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-2> DD_indicator_Stoch 영역: 전략 이름: DD_indicator_ Stoch Input: len1(25), len2(6), s1(0.37), s2(2.7), level(50) Var1=slowk(len1,len2) If tdate<>tdate(1) Then Var10=9999999 Var11=0 Var50=currententrynum Cond1=False Cond2=False End If If crossup(Var1,level) Then Var10=high End If If crossdn(Var1,level) Then Var11=low End If Cond1=crossup(Var1, level) Cond2=crossdn(Var1, level) If currententrynum-var50=0 Then If ttime<1500 Then If opend< closed(1) Then Call buy("매수",Atstop,Def,Var10) End If If opend> closed(1) Then Call sell("매도", Atstop,Def,Var11) End If If Var1>level Then Call buy("매수1",Atstop,Def,opend+(highd(1)-lowd(1))*s1) End If If Var1<level Then Call sell("매도1",Atstop,Def,opend-(highd(1)-lowd(1))*s1) End If End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1) - atr(20)*s2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If If Cond2 Then Call exitlong("지표청산",Atstop,llv(1,low,3)) End If If Cond1 Then Call exitshort("지표청산",Atstop,hhv(1,high,3)) End If 6 <수식 4-36>은 스토케스틱 지표가 일정 수준(50)을 돌파하는 시점의 고가, 저 가를 이용해서 전일 종가보다 금일 시가가 적으면 매수 방향으로, 전일 종가 보다 금일 시가가 크면 매도 방향으로 매매를 하도록 구성되어 있다. 또한 하 루 중 일정 수준 이상 계속 유지되는 경우에도 매매가 발생하도록 돌파 전략 을 동시에 사용하였다. 청산 전략에는 추적 스탑 이외에 일정수준(50)을 교차할 때 3봉 고저를 이용 한 청산 전략을 함께 적용하였다. 적용된 그림을 보자. <그림 오류! 지정한 스타일은 사용되지 않습니다.-2> DD_indicator_Stoch 주) 지표: 스토케스틱 적용 <그림 4-33>을 보면 3월 31일 스토케스틱 지표가 50선을 하회하고 있어 돌파 진입(매도)이 발생하였고, 4월 1일에는 전일 종가 보다 낮은 상태에서 50선 돌파(수직선)로 매수가 발생한 사례를 표시하였다. 그러면 여기서 두 가지 스토케스틱 지표를 이용하는 돌파 전략을 작성해보자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-3> DD_indicator_DualStoch 영역: 전략 이름: DD_indicator_DualStoch Input:, len1(7), len2(10), ob1(90), os1(10), ob2(70), os2(30), level(0.01), s2(2.7) Var1=fastk(len1) Var2=fastk(len2) Cond1=var1>ob1 And Var2>ob2 '과매수 Cond2=var1<os1 And Var2<ob2 '과매도 Cond50= tdate=exitdate(1) And position(1)=1 Cond49= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond50=False Then If Cond1 Then If opend<close Then Call buy("매수",Atstop,Def,high+Atr(20)*level) End If End If End If If Cond49=False Then If Cond2 Then If opend>close Then Call sell("매도",Atstop,Def,low-Atr(20)*level) End If End If End If End If If position<>0 Then Call exitlong("추적스탑",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("추적스탑",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If 8 <수식 4-37>은 두 가지 Fast Stochastic을 이용해서 서로 다른 수준의 과매수권에 진입하면 매수, 과매도권에 진입하면 매도하는 전략식이다. 적용된 그림을 보자. <그림 오류! 지정한 스타일은 사용되지 않습니다.-3> DD_indicator_DualStoch 주) 지표: 스토케스틱(fast) <그림 4-34>를 보면 Fast Stochastic지표가 각각 70, 90이하로 진입하게 되면 매도하게 되는데, 이틀 동안 과매도 권에서 두 번의 매도 진입이 발생하여 수 익이 발생한 것을 알 수 있다. 이러한 오실레이터 전략들은 지표들 마다 기본 개념이나 계산식이 유사하기 때문에 RSI, CCI 등 다른 지표를 이용해서 다양 한 전략들을 개발 할 수 있다 (3) 다이버전스(Divergence) 다이버전스는 오실레이터를 활용하는 방법 중 가장 중심이 되는 것이라 할 수 있다. 오실레이터가 모멘텀을 나타내고 있기 때문에 모멘텀의 강화 및 약화 현상인 다이버전스를 자주 활용하게 된다. 즉 상승 다이버전스는 가격의 저점 이 낮아지는데 지표의 저점은 높아져 곧 추세가 상승으로 전환할 것이라는 것 을 설명해주고, 하락 다이버전스는 가격의 고점이 높아지는데 지표의 저점이 낮아져 곧 하락 전환할 것이라는 것을 나타내준다. RSI지표의 다이버전스 특 성을 이용한 전략을 작성해보자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-4> DD_indicator_SDIV 영역: 전략 이름: DD_indicator_SDIV Input: len1(14), len2(50), delay(4), level(0.16), s1(0.37), s2(2.7) Var1=rsi(close,len1) If Var1>llv(1,Var1,len2) And low<=llv(1,low,len2) Then Var11=1 Else Var11=-1 End If If Var1<hhv(1,Var1,len2) And high>=hhv(1,high,len2) Then Var12=1 Else Var12=-1 End If Cond1=hhv(1,Var11,delay)=1 And Var1>llv(1,Var1,len2) And Var1<60 Cond2=hhv(1,Var12,delay)=1 And Var1<hhv(1,Var1,len2) And Var1>40 If tdate<>tdate(1) Then Var50=currententrynum End If If currententrynum-var50=0 Then If ttime<1500 Then If Var1>40 And Cond2=False Then Call buy("매수1",Atstop,Def,opend+(Highd(1)-lowd(1))*s1) End If If Var1<60 And Cond1=False Then Call sell("매도1",Atstop,Def,opend-(Highd(1)-lowd(1))*s1) End If End If End If If currententrynum-var50<=2 Then If ttime<1500 Then If Cond1 And opend-(highd(1)-lowd(1))*level < close Then 10 Call buy("매수",Atstop,Def,hhv(1,high,2)) End If If Cond2 And opend+(highd(1)-lowd(1))*level>close then Call sell("매도",Atstop,Def,llv(1,low,2)) End If End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*S2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If <수식 4-38>을 보면 RSI지표가 50봉 최저 RSI값보다 높아지는데, 가격은 50봉 최저가를 유지하는 경우 상승 다이버전스라 인식하게 된다(반대의 경우 하락 다이버전스). 상승 다이버전스가 발생하면 매수하고, 하락 다이버전스가 발생 하면 매도하는 전략을 구사하게 된다. 단, 하루 첫 매매는 RSI지표가 40보다 크고 다이버전스가 발생하지 않았으면 매수하고, RSI 지표가 60보다 적고 다 이버전스가 발생하지 않았으면 매도하는 전략을 병행하였다. 적용된 그림을 보자. <그림 오류! 지정한 스타일은 사용되지 않습니다.-4> DD_indicator_SDIV 주) 지표: DD_indicator_SDIV <그림 4-35>에서 우선 하단에 있는 지표인 DD_indicator_SDIV를 보자. RSI지 표에 일정 기간 동안의 최고,최저 선이 작성되어 있으며 히스토그램으로 표시 된 부분은 상승다이버전스와 하락 다이버전스를 표시하고 있다. 8월 27일을 보면 시초가 이후 하락 다이버전스가 발생하기 전에 매수 조건이 성립되어 매 수하였다. 반면, 8월 28일 시초가는 50봉 최고가을 형성하였으나, 지표는 최 고가를 형성하지 못하여 하락 다이버전스가 발생하여 매도하였다. 단기 모멘 텀 괴리를 이용한 전략이라 할 수 있다. 그러면 여기서 테스트 결과를 보자. <표 오류! 지정한 스타일은 사용되지 않습니다.-3> 테스트 결과 비교(이동평균, 스토케스틱) 평가 항목 DD_indicator_MAFilter 총 손익 94,005.80 79,781.32 평균 손익 101.19 93.75 최대 손실 -1,132.98 -891.14 총 매매수 929 851 연속 이익 매매수 10 6 연속 손실 매매수 7 11 최대 자본 인하액 -2,941.89 -3,697.06 승률 49.84 47.83 손익비 1.74 1.69 평균손익비 1.75 1.84 보상 비율 31.95 21.58 0.37,2.7,0.37,3,8,15 25,6,0.37,2.7,50 변수 값 주) 필수적으로 보유해야 할 바수: 100 12 DD_indicator_Stoch <표 오류! 지정한 스타일은 사용되지 않습니다.-4> 테스트 결과(듀얼 스토케스틱, 단기다이버전스) 평가 항목 DD_indicator_DualStoch 총 손익 DD_indicator_SDIV 80,806.84 81,967.62 평균 손익 72.34 83.73 최대 손실 -1,014.50 -987.45 총 매매수 1,117 979 연속 이익 매매수 7 7 연속 손실 매매수 8 8 최대 자본 인하액 -5,146.98 -3,459.40 승률 46.73 45.86 손익비 1.47 1.54 평균손익비 1.67 1.82 보상 비율 15.70 23.69 7,10,90,10,70,30,0.01,2.7 14,50,4,0.16,0.37,2.7 변수 값 주) 필수적으로 보유해야 할 바수: 100 테스트 결과 DD_indicator_MAFilter가 상대적으로 높은 수익과 적은 위험 수 준을 보이고 있다. 이동평균선 필터가 진입방향을 잘 제어하고 있다는 것을 알 수 있다. 나머지 결과 모두 유용한 결과를 보였으나, DD_indicator_DualStoch 경 우 다소 위험이 큰 구조임을 알 수 있다. 지금까지 돌파 전략에서부터 수렴 돌파, 모형, 패턴분석 전략 및 기술적 지표 를 이용한 진입전략들을 설명 하였다. 위의 진입 전략들만이 유용한 진입 전략의 전부는 아니다. 위의 전략들을 기 초로 하여 실전매매 경험이나, 또 다른 이론을 추가하여 더 유용한 결과를 만 들어 내기 위한 원천 정도로 생각하기 바란다. 예를 들어 위 스토케스틱 전략 을 다른 지표들로 응용하여 더 좋은 결과를 만들거나, 돌파 전략들을 복합적 으로 활용하여 더 유용한 전략으로 발전 시켜야 한다. 제 4 장 진입 전략 투자의 핵심 원칙: 저가 매수, 돌파 확인 진입 (Low Risk Entry, Break Out Entry) 진입 전략은 언제 시장에 신규 매수, 매도 하느냐를 결정하는 방법이다. 앞서 설명한 RangeBreak 전략은 시가에 전일 변동폭의 일정 부분을 더하거나 뺀 가 격대를 돌파하면 시장에 진입하는 방법이다. 이러한 형태의 전략을 일반적으 로 돌파(breakout)전략이라 한다. 즉 추세가 형성되는 것을 확인하고 시장에 진입하는 형태이다. 돌파 전략은 역시 추세 추종적인 매매 방법이다. 앞서 설명한 또 다른 유형 중에서 패턴 인식 전략, 변동성 확대 전략도 광의의 추세 추종적인 방법에 속 한다. 상당히 다른 유형의 전략으로는 역 추세(anti–trend, counter-trend) 추종적 인 매매 전략이 있다. 즉 저가 매수, 고가 매도 전략 형태를 말한다. 하지만 진정한 의미의 역 추세 추종적인 전략은 잘 사용되지 않는다. 예를 들어 스토 케스틱이 30이하로 하락하면 매수하는 전략의 경우, 다행히 30이하에서 바로 전환되면 모를까 그렇지 않는 경우에는 위험이 상당히 커지는 매매 전략이기 때문이다. 따라서 역 추세 추종적인 매매 전략이란 현재 진행 중인 추세가 약화되고 반 대 추세로 발달할 가능성이 있는 시점에서 진입하는 저가 매수, 고가 매도 전 략을 말한다. 스토케스틱의 경우에는 다음과 같은 형태로 진입하게 되면 저가 매수 진입 전략이 된다. 스토케스틱이 30이하에서 상승 전환하고, 연속 3양봉이 발생하면 매수 이러한 저가 매수, 고가 매도의 역추세 추종적인 전략은 사용 빈도가 높다. 왜냐하면 돌파 전략 보다 심리적 거부감이 적고, 진입 위험도 상당히 적은 편 이기 때문이다. 이동평균선을 이용한 많은 매매 전략이 있는데 이러한 전략들은 크게 두 가지 분류로 구분된다(매수 기준). 돌파 매수 형태: 이동평균선 상향 돌파 매수 저가 매수 형태: 이동평균선이 상승하고 있고 가격이 이동평균선 위에서 되 돌림(예: 3일 저가 형성)이 발생하고 다시 상승할 때 매수 Æ 눌림목 매수, 되돌림 매수 대부분의 진입 전략들은 기술적 분석에 근거한다. 왜냐하면 계량화 (Quantitative)가 가능하기 때문이다. 가격, 거래량, 매매 동향, 기술적 지표 들이 모두 사용 가능하다. 이 책에서는 6가지의 기술적 분석 분야별로 진입 전략을 제공할 것이다. 1. 돌파 전략 2. 수렴 돌파 전략 3. 추세선, 지지 / 저항선 분석 전략 4. 모형 분석(geometric pattern)전략 5. 패턴 분석(pattern) 전략 6. 기술적 지표를 이용한 전략 2 이 장에서 제공되는 진입 전략들의 조건은 다음과 같다. 전략유형 및 대상: 데이 트레이딩 전략, 선물 10분 차트 매매계약수: 1계약 매매(자산관리 전략 제외) 청산전략: 단순한 청산 전략 사용 필수적으로 보유해야 할 바 수: 초기값 100, 슬리피지 1틱 수수료: 대신증권 HTS수수료 기준 테스트 기간: 2000년 1월 4일~2003년 9월 30일 제공되는 전략은 다양한 기술적 분석 방법을 이용하는 매매 전략의 기초이므 로 직접 작성해보기를 권장한다. 또한 진입 제어, 시간대 최적화, 청산 전략, 자산 관리 전략 등을 다양한 형 태로 변형해 보고, 이런 과정을 통해서 자신의 자산규모나 매매스타일에 맞는 전략으로 완성할 것을 권한다. 본격적으로 진입 전략을 알아보기 전에 재진입과 진입 필터(filter)를 우선 이해하도록 하자. 재진입이라고 하는 것은 현재 시장에서 청산으로 수익을 획득하였는데, 그 후 에도 동일 방향으로 가격이 진행되어 같은 방향으로 다시 진입하는 것을 말한 다. 예를 들어 아침에 매수를 한 뒤 추적스탑으로 수익을 획득하였으나, 상승 추세가 계속 진행되어 퇴출 가격이나 장중 최고점을 갱신하면, 다시 매수 진 입을 하는 것을 말한다. 데이 트레이딩에서는 재진입의 필요성이 시간적 제한 때문에 적어진다. 하지만 일부 전략에서는 재진입이 필요한 경우가 많으므로 기억해 둘 필요가 있다. 두 번째로 진입 필터이다. 진입 필터는 많이 사용되는 개념이다. 앞으로 설명 할 전략들에서도 많이 사용되는데, 앞서 3장에서 설명한 진입 제어 방법도 일 종의 필터이다. 여기서 필터의 종류를 정리해보도록 하자. <표 0-1> 필터의 종류 필터유형 내용 가격(시, 고, 저, 종가)의 흐름 등으로 진입을 제어 시가보다 가격 필터 전일 종가보다 시가가 크면 매수 방향 전전일 금일 현재가가 크면 매수 방향 종가 보다 전일 종가가 낮으면 매수 방향 최고가가 전일 고가 보다 크면 매수 방향 거래량 감소시 진입 제어 거래량 필터 거래량 전일 증가 시 진입 거래량 보다 증가할 경우에만 진입 거래량 이동평균선이 증가하면 진입 매매 횟수 제한 등 진입 방향 필터 하루에 같은 한번매매 방향 진입제어 특정 시간대 매매 제어 시간 필터 9시 30분 전, 14,30분 이후 진입 제어 청산 이후 일정 시간 내 진입제어 기술적 지표를 필터로 사용 기술적 지표 필터 이동평균선이 ADX, 상승 중 일 때에는 매수만 DMI 지표가 상승 전환이거나 일정 수준 이상 일 때 만 진입 변동성 축소 구간에서 매매 제어 수렴 구간 필터 변동성 관련 지표(ATR,Range)가 상승 전환할 때만 진입 삼각수렴형 기타 패턴이나 직사각형 패턴이 발달하면 진입 제어 수렴 패턴 진입 제어 전략을 개발할 때 필터를 자주 사용하게 되는데 이때 조심하지 않으면 과 최 적화(over fitting)의 함정에 빠질 수 있다. 예를 들어 손실이 발생한 매매 건 별로 문제점을 파악하고, 그 문제점이 하나 의 매매에 국한된 경우라도 각각의 필터를 추가하여 매매 전략을 개발하는 경 우이다. 이럴 경우 상당히 긴 코딩이 될 뿐만 아니라 실제 매매에서는 발생하 4 지 않거나, 반대 현상이 발생하는 등의 문제가 있다. 이런 현상이 과 최적화 이며 과 최적화 시스템은 결국 수익을 발생하지 못하게 된다. 따라서 필터는 최소한으로 사용해야 하고, 일관되게 적용하는 것이 올바른 사 용법이다. 그럼 이제부터 기술적 분석의 6가지 유형에 따른 다양한 진입 전략 을 살펴보자. 1. 돌파전략(Break Out Strategy) 데이트레이딩에서는 돌파 전략 형태가 일반적이고 유용한 전략으로 평가 받고 있다. 추세 추종적인 전략 형태로 볼 수 있으며 단기 지지 / 저항선을 이용하 여 돌파 시점을 파악하는 전략들을 의미한다. 앞서 설명한 RangeBreak 전략도 돌파 전략이다. 추가적으로 자주 사용되는 돌 파 전략을 설명하기로 한다. (1) Pivot Point 이용 피봇 포인트(pivot point)를 이용하여 지지 / 저항선을 설정하고 이를 돌파하 는 방향으로 매매를 하는 방법이다. 피봇 포인트는 피봇 포인트, 1차 저항선, 2차 저항선, 1차 지지선, 2차 지지선 등의 5가지로 선으로 구성되어 있다. <표 0-2> 피봇 포인트 계산식 피봇 포인트 계산식 2차 저항선 피봇 포인트 + 전일 고가 전일 저가 1차 저항선 피봇 포인트 * 2 - 전일 저가 피봇 포인트 (전일 고가 + 전일 저가 + 전일 종가) / 3 1차 지지선 피봇 포인트 * 2 - 전일 고가 2차 지지선 피봇 포인트 + 전일 저가 전일 고가 피봇 포인트가 가장 중요한 중심선이 되고 아래 위로 각각 2개의 지지 / 저항 선이 위치하게 된다. 전일의 고가, 저가, 종가를 이용하여 계산한 값을 금일 의 지지 / 저항선으로 사용하는 것이다. 위의 식에서 변형된 다음과 같은 피 봇 포인트 계산 방식도 사용된다. <표 0-3> 피봇 포인트 계산식(변형) 피봇 포인트 계산식 2차 저항선 피봇 포인트 + 전일 고가 전일 저가 1차 저항선 피봇 포인트 * 2 - 전일 저가 피봇 포인트 (전일 시가 + 전일 고가+ 전일 저가 + 전일 종가) / 4 1차 지지선 피봇 포인트 * 2 - 전일 고가 2차 지지선 피봇 포인트 + 전일 저가 전일 고가 <표 4-3>은 지지 / 저항선 계산 방법은 <표 4-2>와 같은 반면, 피봇포인트를 계산할 때 전일 시가를 사용한다는 점에서 차이가 있다. 두 가지 식 모두 시가의 위치에 따라 지지 / 저항선이 바뀌게 되고 어느 지 지 / 저항선을 사용하는 것이 합리적인가를 결정해야 한다. <수식 4-1>은 두 가지 피봇 포인트를 모두 적용할 수 있도록 작성한 전략식이다. 6 <수식 0-1> DD_Pivot(일반) 영역: 전략 이름: DD_Pivot(일반) Input: len(3.2), method(1) If method=1 Then Var10 = (HighD(1) + LowD(1) + closed(1)) / 3 '피봇 Var11= Var10 * 2 - LowD(1) '1차 저항 Var12= Var10 + HighD(1) - LowD(1) '2차저항 Var9= Var10 * 2 - HighD(1) '1차 지지 Var8= Var10 - HighD(1) + LowD(1) '2차지지 Else Var10 = (HighD(1) + LowD(1) + closed(1)+opend(1)) / 4 '피봇 Var11= Var10 * 2 - LowD(1) '1차 저항 Var12= Var10 + HighD(1) - LowD(1) '2차저항 Var9= Var10 * 2 - HighD(1) '1차 지지 Var8= Var10 - HighD(1) + LowD(1) '2차지지 End If If Var9 > opend And opend> Var8 Then If TTIME<=1500 Then If position=0 And tdate<>entrydate(1) Then Call buy("매수1", Atstop, Def, Var9) Call sell("매도1", Atstop, Def, Var8) End If End If End If If Var10 > opend And opend>=var9 Then If TTIME<=1500 Then If position=0 And tdate<>entrydate(1) Then Call buy("매수2", Atstop, Def, Var10) Call sell("매도2", Atstop, Def, Var8) end If End If End if If Var11 > opend And opend>=var10 Then If TTIME<=1500 Then If position=0 And tdate<>entrydate(1) Then Call buy("매수3", Atstop, Def, Var12) Call sell("매도3", Atstop, Def, Var10) End If End If End If If Var12 > opend And opend>=var11 Then If TTIME<=1500 Then If position=0 And tdate<>entrydate(1) Then Call buy("매수4", Atstop, Def, Var12) Call sell("매도4", Atstop, Def, Var11) End If End If End If If opend>=var12 Then If TTIME<=1500 Then If position=0 And tdate<>entrydate(1) Then Call buy("매수5", Atstop, Def, opend+(Var12-var11)) Call sell("매도5", Atstop, Def, Var12) End If End If End If If opend<=var8 Then If TTIME<=1500 Then If position=0 And tdate<>entrydate(1) Then Call buy("매수6", Atstop, Def, Var8) Call sell("매도6", Atstop, Def, opend-(Var9-var8)) End If End If End If If position<>0 Then Call exitlong("매수청산", Atstop, hhv(1, high, barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산", Atstop, llv(1, low, barnumsinceentry+1)+atr(20)*len) End If 주) 신호 DD_Pivot(일반)도 제공됨. 필수적으로 보유할 바 수: 100 <수식 4-1>에서 method = 1일 경우에는 <표 4-2>의 방식으로 피봇 포인트를 계산하고 1이 아닐 경우에는 <표 4-3>의 방식으로 피봇 포인트를 계산한다. 매매는 시가가 형성되는 위치에 따라서 형성되는 피봇포인트를 이용하며, 매 수, 매도의 가격대는 가까운 지지 / 저항선이거나 두 번째로 가까운 지지 / 저항선을 이용하게 된다. 청산은 기초적인 ATR청산(3장 가변청산전략 참조)을 사용하였고 매매는 하루에 한번으로 제한하였다. 8 <그림 0-1> DD_Pivot(일반) 전략 주) method=1 적용 <그림 4-1>을 보면 시가가 형성된 위치에 따라 매수3, 매수2, 매수3(원호)이 연 속적으로 발생하였다. 시가의 위치에 따라 저항선이 각각 다르게 형성되며 이 저항선을 돌파하면 매수가 발생하게 된다. 적용결과는 <표 4-4>와 같다. 두 가지 전략 다 유용한 결과를 보였으며 이 중 방법 2가 더욱 좋은 결과를 보였다. 앞서 3장에서 설명한 바와 같이 위 전략에 다양한 변형이 가능하다. 하루에 두 번 매매를 허용한다든지, 청산 전략을 변경하는 등 다양한 변형에 따라 다른 결과를 보일 것이다. 더욱이 위 식에서 사용된 지지 / 저항선을 변경해 서 더 좋은 결과를 만들어 낼 수도 있을 것이다. 그러면 이제 기초적인 피봇 전략에다 역 추세적인 진입 방법을 추가해서 또 다른 피봇 전략을 만들어 보자. 총 손익 <표 0-4> DD_Pivot(일반)전략 적용결과 DD_Pivot(일반) DD_Pivot(일반) Method = 2 Method = 1 68,075.92 71,694.90 평균 손익 85.63 90.41 최대 손실 -1,349.60 -1,071.04 총 매매수 795 793 연속 이익 매매수 6 9 연속 손실 매매수 7 9 최대 자본 인하액 평가 항목 -5,762.18 -5,399.21 승률 49.81 48.68 손익비 1.49 1.52 평균손익비 1.50 1.61 보상 비율 11.81 13.28 변수 값(len1) 3.2, 1 3.2, 2 주) 2000년 1월4일 ~ 2003년 9월 30일 주) 필수적으로 보유해야 할 바 수: 100, 단위: 천원, %, 배 1) 피봇 역추세 전략 위 <수식 4-1>의 전략식에 포지션이 있는 상태에서 가격이 일정 수준 이상을 넘어섰을 경우에 바로 반대 포지션(예: 매수포지션 보유상태에서 매도포지션 으로 전환)으로 전환하는 역매매(Reversal)전략을 추가하는 방법을 사용한다. <수식 0-2> DD_Pivot(역추세) 영역: 전략 이름: DD_Pivot(역추세) Input: len(3.2), method(1) ’이상 <수식 4-1>과 동일-----------------------------------------------If tdate<>tdate(1) Then Var50=currententrynum End If If currententrynum-var50 =1 Then ‘당일 매매가 한번 이루어진 경우 If entryname="매수2" Or entryname="매수3" Then ‘진입명칭이 매수2, 매수3인 경우 If highd>var12 And low>var11 Then 10 Call sell("역매도", Atstop, Def, Var11) End If End If If entryname="매도2" Or entryname="매도3" Then ‘진입명칭이 매도2, 매도3인 경우 If lowd<var8 And high<var9 Then Call buy("역매수", Atstop, Def, Var9) End If End If End If <수식 4-2>는 <수식 4-1>에 역추세 진입 전략을 추가하였다. 매매 횟수는 하 루에 한번 진입에 역추세를 한번만 진입하는 방법을 사용하였고, 역추세는 매 수2, 매수3 의 경우에만 역매도 전략을 사용하고 매도2, 매도3 에서만 역매수 전략을 구사하게 된다. 적용한 그림은 다음과 같다. <그림 0-2> DD_Pivot(역추세) 주) method = 1 적용 <그림 4-2>를 보면 피봇 돌파로 인한 매수2가 발생하였으며 매수 청산이 발생 하기 전에 역매도가 발생하였다. 종가 청산으로 두 번 매매 모두 수익이 발생 한 경우이다. 위와 같이 역매도가 발생하는 전략을 추가하였을 때의 테스트 결과를 보자. <표 0-5> DD_Pivot(역추세) 전략 적용결과 DD_Pivot(역추세) DD_Pivot(역추세) 평가 항목 Method = 2 Method = 1 총 손익 73,143.87 70,680.26 평균 손익 89.97 87.58 최대 손실 -1,349.60 -1,654.70 총 매매수 813 807 연속 이익 매매수 6 9 연속 손실 매매수 6 8 최대 자본 인하액 -5,762.18 -5,683.29 승률 50.06 48.70 손익비 1.52 1.51 평균손익비 1.51 1.59 보상 비율 12.69 12.44 변수 값(len, method) 3.2, 1 3.2, 2 주) 단위: 천원, %, 배 테스트 결과 방법 1은 위험 구조가 직전의 DD_Pivot(일반)과 비슷한 반면 총 손익이 증가하는 효과를 나타내었다. 반면 방법 2의 경우에는 최대 손실이 증 가하고 총손익이 소폭 감소하여 역추세 진입 효과가 없다는 것을 알 수 있다. 역추세를 모든 진입에 사용하거나, 다른 청산 전략을 사용하는 등의 다양한 변형이 가능하다. 그럼 이제부터 더 큰 변화를 시도해보자. 2) 피봇 전략의 다른 변형 피봇 자체가 지지 / 저항선을 역할을 하는 선이라는 개념을 이용하여 앞서 설 명한 DD_RangeBreak 전략과 마찬가지로 시가에서 피봇을 이용한 지지 / 저항 선을 작성하는 전략을 생각할 수 있다. 즉 전일의 변동폭이 오늘의 지지 / 저 12 항선으로 사용되는 것이 아니고 전일 가격 움직임으로 계산된 피봇 및 지지 / 저항선의 폭을 이용해서 매매하는 전략이다. <수식 0-3> DD_Pivot(변경) 영역: 전략 이름: DD_Pivot(변경) Input: len(2.7), method(1), len1(0.64) If method=1 Then Var10 = (HighD(1) + LowD(1) + closed(1)) / 3 '피봇 Var11= Var10 * 2 - LowD(1)'1차 저항 Var12= Var10 + HighD(1) - LowD(1) '2차저항 Var9= Var10 * 2 - HighD(1) '1차 지지 Var8= Var10 - HighD(1) + LowD(1) '2차지지 Else Var10 = (HighD(1) + LowD(1) + closed(1)+opend(1)) / 4 '피봇 Var11= Var10 * 2 - LowD(1)'1차 저항 Var12= Var10 + HighD(1) - LowD(1)'2차저항 Var9= Var10 * 2 - HighD(1)'1차 지지 Var8= Var10 - HighD(1) + LowD(1)'2차지지 End If Var20=var11-var10 Var21=var10-var9 Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False: Then Call buy("매수", Atstop, Def, opend+var20*len1) End If If Cond2=False Then Call sell("매도", Atstop, Def, opend-var21*len1) End If End If If position<>0 Then Call exitlong("매수청산", Atstop, hhv(1,high, barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산", Atstop, llv(1,low, barnumsinceentry+1)+atr(20)*len) End If <수식 4-3>을 보면 두 가지 피봇 계산 방법은 동일하고 피봇과 1차 저항선과 의 거리와 피봇과 1차 지지선과의 거리를 금일시가에 더하거나 빼서 계산된 가격대를 지지 / 저항선으로 활용하는 방법이다. 매매는 같은 방향으로 제어 되어 있다. 적용된 그림은 다음과 같다. 그림 0-3 DD_Pivot(변경) 그림에서 보면 매수에서 손절, 매도로 이어지는 매매가 발생하였다. 두 가지 선이 지지 / 저항선으로 작동하게 되며, 앞서 설명한 DD_RangBreak와 유사한 전략 구조를 가지고 있다. 14 평가 항목 <표 0-6> DD_Pivot(변경) 전략 적용결과 DD_Pivot(변경) DD_Pivot(변경) Method = 2 Method = 1 총 손익 77,587.82 86,028.21 평균 손익 73.75 89.61 최대 손실 -1,020.67 -1,157.12 총 매매수 1,052 960 연속 이익 매매수 8 10 연속 손실 매매수 9 8 최대 자본 인하액 -4,327.60 -5,113.40 승률 48.00 48.96 손익비 1.46 1.60 평균손익비 1.58 1.66 보상 비율 17.93 16.82 2.7, 1, 0.64 2.7, 2, 0.74 변수 값 주) 필수적으로 보유해야 할 바 수: 100, 단위: 천원, %, 배 <표 4-6>을 보면 방법2가 상대적으로 방법1보다 수익이 큰 것을 알 수 있다. 기존의 피봇 전략보다 위험은 감소, 수익은 증가하는 형태로서 유용한 변형이 라 할 수 있다. 피봇과 마찬가지로 지지 / 저항선을 설정하는 방법으로 자주 사용되는 것이 디마크(DeMark) 지지 / 저항선이 있다. (2) 디마크(DeMark) 지지 / 저항선 디마크 지지 / 저항선(DeMark’s Projected Range)은 피봇 지지 / 저항선과 유 사하다. 계산 방법은 다음과 같다. 조 건 <표 0-7> 디마크 지지 / 저항선 계산식 계산식 금일 시가>전일 종가 목표 고가=(전일고가+전일종가+2*전일저가)/2-전일저가 목표 저가=(전일고가+전일종가+2*전일저가)/2-전일고가 금일 시가<전일 종가 목표 고가=(2*전일고가+전일종가+전일저가)/2-전일저가 목표 저가=(2*전일고가+전일종가+2*전일저가)/2-전일고가 금일 시가=전일 종가 목표 고가=(전일고가+2*전일종가+전일저가)/2-전일저가 목표 저가=(전일고가+2*전일종가+전일저가)/2-전일고가 금일 시가와 전일 종가의 관계에 따라 3가지 계산식으로 금일의 목표고가, 저 가를 설정하는 방법이다. 목표 고가는 저항선이고 목표 저가는 지지선이다. 테스트 결과 다음 3가지 방법이 유용한 결과를 나타내었다. DD_DeMark(일반): 피봇 일반 전략과 다르게 디마크 목표 고가와 목표 저 가 사이에서는 매매를 하지 않고, 목표 고가, 저가를 벗어 났을 경우에만 매 매를 한다. DD_DeMark(역추세): 일반 전략에다 디마크 목표 고가와 목표 저가 사이에 서는 역추세적인 매매를 하게 구성한다. DD_DeMark(변경): 시가에 디마크 목표 고가와 목표 저가의 폭의 일정 비 율을 가감해서 돌파 전략으로 사용한다. 피봇 사용법과 거의 같으나 DD_DeMark(일반)의 경우 목표 고가 및 목표 저가 사이에서는 매매를 안 하는 방법이 더 유용한 테스트 결과를 나타내어 이 방 법을 사용하였다. 3 가지 전략식은 다음과 같다. <수식 0-4> DD_DeMark(일반) 영역: 전략 이름: DD_DeMark(일반) Input: len(3.2), len1(0.34) If opend>closed(1) Then Var1=(highd(1)+closed(1)+2*lowd(1))/2-lowd(1) Var2=(highd(1)+closed(1)+2*lowd(1))/2-highd(1) Elseif opend<closed(1) Then 16 Var1=(2*highd(1)+closed(1)+lowd(1))/2-lowd(1) Var2=(2*highd(1)+closed(1)+lowd(1))/2-highd(1) Else Var1=(highd(1)+2*closed(1)+lowd(1))/2-lowd(1) Var2=(highd(1)+2*closed(1)+lowd(1))/2-highd(1) End If Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then If opend>var1 Then Call buy("매수1",Atstop,Def,opend+(Var1-var2)*len1) End If If opend<var2 Then Call buy("매수4",Atstop,Def,Var2) End If End If If Cond2=False Then If opend>var1 Then Call sell("매도1",Atstop,Def,Var1) End If If opend<var2 Then Call sell("매도4",Atstop,Def,opend-(Var1-var2)*len1) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len) End If <수식 0-5> DD_DeMark(역추세) 영역: 전략 이름: DD_DeMark(역추세) Input: len(3.2), len1(0.34 ), len2(0.07) If opend>closed(1) Then Var1=(highd(1)+closed(1)+2*lowd(1))/2-lowd(1) Var2=(highd(1)+closed(1)+2*lowd(1))/2-highd(1) Elseif opend<closed(1) Then Var1=(2*highd(1)+closed(1)+lowd(1))/2-lowd(1) Var2=(2*highd(1)+closed(1)+lowd(1))/2-highd(1) Else Var1=(highd(1)+2*closed(1)+lowd(1))/2-lowd(1) Var2=(highd(1)+2*closed(1)+lowd(1))/2-highd(1) End If Var3=(Var1+var2)/2 Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then If opend>var1 Then Call buy("매수1",Atstop,Def,opend+(Var1-var2)*len1) End If If opend<=var1 And opend>=var2 Then If lowd<var2 And high<var2+(Var1-var2)*len1 Then Call buy("역매수",Atstop,Def,Var2+(Var1-var2)*len2) End If End If If opend<var2 Then Call buy("매수2",Atstop,Def,Var2) End If End If 18 If Cond2=False Then If opend>var1 Then Call sell("매도1",Atstop,Def,Var1) End If If opend<=var1 And opend>=var2 Then If highd>var1 And low>var1-(Var1-var2)*len1 Then Call sell("역매도",Atstop,Def,Var1-(Var1-var2)*len2) End If End If If opend<var2 Then Call sell("매도2",Atstop,Def,opend-(Var1-var2)*len1) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len) End If <수식 0-6> DD_DeMark(변경) 영역: 전략 이름: DD_DeMark(변경) Input: len(2.7), len1(0.37) If opend>closed(1) Then Var1=(highd(1)+closed(1)+2*lowd(1))/2-lowd(1) Var2=(highd(1)+closed(1)+2*lowd(1))/2-highd(1) Elseif opend<closed(1) Then Var1=(2*highd(1)+closed(1)+lowd(1))/2-lowd(1) Var2=(2*highd(1)+closed(1)+lowd(1))/2-highd(1) Else Var1=(highd(1)+2*closed(1)+lowd(1))/2-lowd(1) Var2=(highd(1)+2*closed(1)+lowd(1))/2-highd(1) End If Var3=(Var1-var2) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then Call buy("매수1",Atstop,Def,opend+var3*len1) End if If Cond2=False Then Call sell("매도1",Atstop,Def,opend-var3*len1) End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len) End If 위 세가지 디마크 사용 방법은 피봇 사용법과 거의 유사하기 때문에 적용 그 림은 생략하고 테스트 결과를 보기로 하자. 20 평가 항목 총 손익 <표 0-8> DD_DeMark전략 적용결과 비교 DD_DeMark DD_DeMark (역추세) (일반) DD_DeMark (변경) 67,831.51 85,830.70 90,962.62 평균 손익 114.39 99.11 95.65 최대 손실 -1,047.33 -1,060.50 -1,132.98 총 매매수 593 866 951 연속 이익 매매수 9 9 10 연속 손실 매매수 6 7 7 최대 자본 인하액 -4,201.80 -5,448.99 -4,438.61 승률 52.45 50.58 49.42 손익비 1.79 1.66 1.67 평균손익비 1.62 1.62 1.71 보상 비율 변수 값 16.14 15.75 20.49 3.2, 0.34 3.2, 0.34,0.07 2.7,0.37 주) 필수적으로 보유해야 할 바 수: 100, 단위: 천원, %, 배 테스트 결과 DD_DeMark(변경)이 상대적으로 좋은 결과를 보였다. 피봇 전략들과 비교해 보더라도 보다 유용한 결과임을 알 수 있다. 피봇전략과 디마크의 전략의 특징적인 차이를 하나 더 설명하면, 현재 시점의 수익곡선의 차이를 들 수 있다. 피봇 및 디마크의 일반 전략의 누적 수익곡선을 보면서 설명하겠다. <그림 0-4> 피봇전략과 디마크 전략 비교 90000.00 80000.00 피봇(일반) y = 22.14x + 20469 R2 = 0.925 70000.00 60000.00 50000.00 40000.00 디마크(일반) y = 21.918x + 16683 R2 = 0.9668 30000.00 20000.00 10000.00 0.00 1 128 255 382 509 636 763 890 1017 1144 1271 1398 1525 1652 1779 1906 2033 2160 2287 2414 2541 2668 2795 <그림 4-4>는 피봇 전략(1번 방법)과 디마크 전략의 수익곡선을 동시에 표현 한 것으로서, 굵은 선이 디마크(일반) 전략의 수익곡선이다. 선형회귀식을 보 면 둘은 비슷하지만 현시점과 선형성에서 차이를 보인다. 디마크의 선 적합도 가 96%로 피봇 전략보다 더 높으며, 현시점에서 수익곡선의 상승유지 정도가 더 좋다는 것을 알 수 있다. 하지만 디마크 전략이 모든 상황에서 피봇 전략 보다 유용하다고 할 수는 없다. 이러한 현상은 위의 모든 디마크 전략에서 확 인 가능하다. 위와 같이 유사한 돌파 전략이라도 어떻게 지지 / 저항선을 설정하느냐에 따 라서 수익 및 위험의 구조가 바뀌게 되므로 합리적인 지지 / 저항선을 개발하 는 것이 중요하다는 것을 알 수 있다. 그러면 이제 다음으로 또 하나의 지지/저항 설정 방법에 대해서 알아보기로 하자. (3) 고정 시간대 돌파 전략(Time BreakOut) 고정 시간대 돌파 전략은 특정 시간대에서 지지 / 저항선을 설정하고, 이를 이용해서 매매하는 돌파 전략이다. 주로 장 시작 이후 일정 시간대를 이용하 게 되는데, 시가에서 일정 시간 동안은 그날의 추세를 형성하는 시간대로서 추세가 없으며, 해당 시간 이후의 진행 방향이 진정한 장중 추세를 의미한다 는 논리에 근거한다. 예를 들어 9시에서 10시 까지는 전일 포지션 정리 물량 및 오늘 신규 포지션 이 형성되는 시간대로 이 시간대에서는 매매를 하지 않고 이후 추세가 발달하 는 방향으로 매매를 하는 전략이다. 22 3가지 정도의 전략을 작성해 보기로 하자. DD_TimeBreak(시간) Î 시간 이용: 시간을 이용해서 전략식을 작성한다. 단, 개장이 10시에 시작되는 날(연초, 수능일)이나, 기타 특수한 상황으로 시간대 가 바뀐 경우는 제어해야 정확한 테스트가 가능해진다. DD_TimeBreak(Bar) Î 바 카운트 이용: 위와 같은 복잡한 제어를 피하기 위해서 시간 대신에 봉(바) 카운트를 적용한다. DD_TimeBreak(변형) Î 바 카운트 이용: 바 카운트에 적절한 필터를 적용 해서 변형 전략을 작성해 본다. <수식 0-7> DD_TimeBreak(시간) 영역: 전략 이름: DD_TimeBreak(시간) Input: timee(920), len(2.7), len1(2), len2(0.18) If tdate<>tdate(1) Then Var50=currententrynum End If If ttime=timee Then Var1=hhv(1,high,len1)-atr(20)*len2 Var2=llv(1,low,len1)+atr(20)*len2 End If If tdate<>20000104 And tdate<>20010102 And tdate<> 20010912 And tdate<>20011107 _ And tdate<>20020102 And tdate<>20021106 And tdate<>20030102 _ And tdate<>20031105 And tdate<>20040102 Then If ttime>timee And ttime<1500 Then If currententrynum-var50<=0 Then Call buy("매수", Atstop, Def, Var1) Call sell("매도", Atstop, Def, Var2) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len) End If <수식 4-7>에서 매매횟수를 하루에 한번으로 제어했으며, 9시 20분에서 2봉 최고가 및 최저가에 변동성을 감안한 지지 / 저항선을 작성하고 9시 20분 이 후에 돌파 방향으로 매매하는 전략식이다. 또한 연초, 수능시험일 등 매매 시 작 시간이 9시가 아닌 날은 매매를 하지 않게 되어 있다. <수식 0-8> DD_TimeBreak(Bar) 영역: 전략 이름: DD_TimeBreak(Bar) Input: barr(1), len(2.7), len1(2), len2(0.18) If tdate<>tdate(1) Then Var50=currententrynum Var49=barnum End If If barnum-var49=barr Then Var1=hhv(1,high,len1)-atr(20)*len2 Var2=llv(1,low,len1)+atr(20)*len2 End If If barnum-var49 > barr And ttime<1500 Then If currententrynum-var50<=0 Then Call buy("매수",Atstop,Def,Var1) Call sell("매도",Atstop,Def,Var2) End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len) End If <수식 4-8>은 <수식 4-7>과 유사하나, 차이점은 개장시점부터 봉을 카운트 해 서 지지 / 저항선을 결정하는 차이가 있다. 즉 10분봉 기준으로 barr=1 이면 9시 10분을 의미하게 되며, 3분봉 기준으로 barr= 3 이면 9시 9분이 된다. 그 러므로 거래소의 개장 시간이 변경되더라도 시간에 영향을 받지 않게 된다. 24 <수식 0-9> DD_TimeBreak(변형) 영역: 전략 이름: DD_TimeBreak(변형) Input: barr(1), len(2.7), len1(2), len2(0.18) If tdate<>tdate(1) Then Var50=currententrynum Var49=barnum End If If barnum-var49=barr Then Var1=hhv(1,high,len1)-atr(20)*len2 Var2=llv(1,low,len1)+atr(20)*len2 End If If barnum-var49 > barr And ttime<1500 Then If currententrynum-var50<=0 Then If opend<=close Then Call buy("매수", Atstop, Def, Var1) End If If opend>close Then Call sell("매도", Atstop, Def, Var2) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len) End If <수식 4-9>는 <수식 4-8>에 양봉이면(opend<=close) 매수 방향만, 음봉이면 매도 방향만 매매하라는 필터를 추가하였다. 자주 사용되는 유용한 필터이다. 한가지 유의할 점은 하루에 한번으로 매매가 제어되어 있더라도 매매가 두번 발생할 수 있다는 것이다. 대부분의 돌파 전략에서 발생할 수 있는데, 그 이 유는 너무 좁은 지지 / 저항선을 사용하는 경우이다. DD_TimeBreak(Bar)를 적용한 그림을 보자. <그림 0-5> DD_TimeBreak(Bar) 위 그림을 보면 네모로 표시된 부분에서 같은 봉에 매수, 매도가 동시에 발생 하는데 이는 지지 / 저항선의 폭이 좁아서 발생하는 것으로서 실시간 매매에 서도 하루에 두 번 매매가 발생할 수 있다. 이를 실시간 매매에서 제어하기 위해서 setbaroneentry란 함수를 사용해서 한 봉에서 한번 매매만 발생하게 할 수 있다. 위 세가지 시간대 돌파 전략의 테 스트 결과는 <표 4-9>와 같다. 26 평가 항목 총 손익 <표 0-9> 고정시간대 돌파전략 적용 결과 DD_TimeBreak DD_TimeBreak (bar) (시간) DD_TimeBreak (변형) 82,876.10 84,030.95 78,394.80 평균 손익 90.48 91.14 86.15 최대 손실 -1,092.32 -1,092.32 -1,092.32 총 매매수 916 922 910 연속 이익 매매수 7 7 7 연속 손실 매매수 10 10 10 최대 자본 인하액 -8,933.93 -9,000.66 -4,813.35 승률 45.31 45.34 44.73 손익비 1.58 1.58 1.53 평균손익비 1.90 1.90 1.89 보상 비율 9.28 9.34 16.29 920, 2.7, 2, 0.18 1, 2.7, 2, 0.18 주) 필수적으로 보유해야 할 바 수: 100, 단위: 천원, %, 배 1, 2.7, 2, 0.18 변수 값 위 결과를 보면 수익 측면에서 DD_Timebreak(변형)이 가장 낮은 수준이다. 하 지만 위험 측면을 보면 DD_Timebreak(시간) 및 DD_Timebreak(Bar) 전략의 최 대자본인하액이 약 900만원 전후로서 앞서 설명한 피봇 및 디마크 전략들보다 상당히 높은 수준인 것을 알 수 있다. 따라서 보상 비율이 10을 넘지 못한다. 반면, DD_Timebreak(변형) 전략은 480만원으로서 상대적으로 작은 수준임을 알 수 있고 앞서 설명한 피봇 및 디마크 전략과 유사한 수준이다. 따라서 DD_Timebreak(시간) 및 DD_Timebreak(Bar) 전략보다 DD_Timebreak(변 형) 전략이 수익은 다소 떨어지지만, 상대적으로 위험 수준이 낮아서 실제 사 용하기에 적절한 형태인 것으로 판단된다. 그럼 이제 장중 최고가, 최저가를 이용한 돌파 전략을 만들어 보기로 하자. (4) 장 중 최고, 최저가 이용 돌파 전략 분차트에서 장중 최고가는 highD, 최저가는 lowd로 표현된다. 이 두가지 값을 이용해서 돌파 시점을 설정하여 매매하는 것이 장 중 최고, 최저가 이용 돌파 전략이다. 즉 장중 최저가 + 일정 수준선을 저항선으로 설정하고 이를 상향 돌파할 때 매수하고, 장중 최고가 – 일정 수준선을 지지선으로 설정하고 이를 하향돌파할때에 매도한다. 일정 수준은 전일 변동폭을 사용한다. 전략식은 다음과 같다. <수식 0-10> DD_HighDLowDBreak 영역: 전략 이름: DD_HighDLowDBreak Input: len(2.9), len1(0.53) Var1=highd(1)-lowd(1) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If tdate<>tdate(1) Then Var50=currententrynum Var10=atr(20)*len1 End If If ttime<1500 Then If Cond1=False And currententrynum-var50<=1 Then ‘매매횟수 제한 Call buy("매수",Atstop,Def,lowd+var1*len1) End If If Cond2=False And currententrynum-var50<=1 Then ‘매매횟수 제한 Call sell("매도",Atstop,Def,highd-var1*len1) End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len) End If 위 식은 하루 중 매매 횟수를 제어하는 식이 추가되어 있다. 1 이면 2 번 매 매를 허용하고 2 이면 3번 매매를 허용한다. 두번, 세번매매를 테스트 해보자. 우선 적용된 그림은 다음과 같다. 28 <그림 0-6> DD_HighDLowDBreak <그림 4-6>을 보면 이 전략의 특징이 한눈에 파악된다. 위 그림에서처럼 최초 매수 발생 이후 가격이 상승하게 되면 매도선이 따라서 상승하고 매수선과 역 전된다. 따라서 추적 스탑 형태를 내포하게 될 뿐만 아니라 위 그림처럼 빠른 역매도가 가능하다. 테스트 결과는 다음과 같다. <표 0-10> DD_HighDLowDBreak전략 적용 결과 DD_HighDLowDBreak DD_HighDLowDBreak 평가 항목 세번 매매 두번 매매 총 손익 91,769.77 93,797.79 평균 손익 75.47 70.31 최대 손실 -1,632.56 -1,632.56 총 매매수 1,216 1,334 연속 이익 매매수 8 8 연속 손실 매매수 10 12 최대 자본 인하액 -4,863.61 -5,839.55 47.78 47.68 손익비 1.49 1.46 평균손익비 1.63 1.61 보상 비율 18.87 16.06 2.9, 0.53 2.9,0.53 승률 변수 값 주) 필수적으로 보유해야 할 바 수: 100, 단위: 천원, %, 배 테스트 결과 두 번 매매 보다 세번까지 매매를 허용하는 것이 더 좋은 수익을 발생하였으나, 보상비율이 낮아져 위험도 같이 증가한다는 것을 알 수 있다. 다른 전략과 차이를 보이는 것은 매매 건수이다. 매매 건수가 1,000 건 이상 이면서도 수익과 위험의 구조가 양호하다는 것을 알 수 있다. 문제점이 있다 면 연속 손실 횟수가 연속 이익 횟수보다 크다는 것으로서, 다소 나쁜 진입을 제어하는 전략이 추가되면, 더 유용한 전략이 될 것이라 판단된다. 30 4. 모형(Geometric Pattern)분석 전략 모형 분석이란 기하학적인 패턴(Geometric Pattern)분석을 말한다. 일반적인 바(Bar)나 캔들(Candle) 패턴 분석과 구분하여 사용하기 위해서 모형 분석이 라는 명칭을 사용한다. 흔히 알고 있는 삼각형, 머리어깨 천정형, 바닥형 등 이 해당된다. 여기서 전략으로 사용할 모형들을 간단히 설명해보면 다음과 같다. <표 오류! 지정한 스타일은 사용되지 않습니다.-1> 모형 모형 고점/저점 테스트 모형 사각모형 삼각형, 쐐기형 내용 고점, 저점을 테스트 하는 모형들을 이용한 전략 이중 바닥형, 천정형(Double Bottom, top) 상승 함정(Bull Trap), 하락 함정(Bear Trap) 위 두 모형을 내포한 전략 수렴 모형인 사각형 모형을 이용한 전략 수렴 모형인 삼각형과 쐐기모형을 동시에 사용한 전략 그러면 각각의 전략들을 자세히 살펴보기로 하자. (1) 고점, 저점 테스트 모형 전략 직전의 고점 및 저점을 테스트 하면서 전환 포인트를 만드는 모형을 이용한 매매 전략이다. 이중 바닥/천정형을 대표로 꼽을 수 있다. <그림 오류! 지정한 스타일은 사용되지 않습니다.-1> 고점, 저점 테스트 모형 이중 천정형 이중 바닥형 상승 함정 하락 함정 이러한 모형들은 결국 직전의 고저를 테스트하는 형태로 설명이 가능해진다. 그러면 전략식을 작성해보도록 하자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-1> DD_GPattern(HiLoTest) 영역: 전략 이름: DD_GPattern(HiLoTest) Input: s1(0.37), s2(2.7), len1(0.88) Var1=highd(1)-lowd(1) Var2=max(highd(1),highd(2)) Var3=min(lowd(1),lowd(2)) If tdate<>Tdate(1) Then Var50=currententrynum Var10=Atr(20,1)*len1 End If If tdate<>Tdate(1) Then Var30=0 Var31=0 Cond1=False Cond2=False 2 Else If close>var2+var10 Then Cond1=True End If If close <var3-var10 Then Cond2=True End If If close>=var2-var10 And close<=var2+var10 And Cond1=False Then Var30=1 Else Var30=0 End If If close>=var3-var10 And close<=var3+var10 And Cond2=False Then Var31=1 Else Var31=0 End If End If If currententrynum-var50=0 Then If ttime<1500 Then If Var31=1 Then If high<var3+var10 Then Call buy("매수",Atstop,Def,Var3+var10) Else Call buy("매수",Atstop,Def,hhv(1,high,2)) End If End If If Var30=1 Then If low>var2-var10 Then Call sell("매도",Atstop,Def,Var2-var10) Else Call sell("매도",Atstop,Def,llv(1,low,2)) End If End If Call buy("매수1",Atstop,Def,opend+var1*s1) Call sell("매도1",Atstop,Def,opend-var1*S1) End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If If position=1 And entryname = “매수” Then If low>var2-var10 Then Call exitlong("청산1",Atstop,Var2-var10) End If End If If position=-1 And entryname = “매도” Then If high<var3+var10 Then Call exitshort("청산1",Atstop,Var3+var10) End If End If <수식 4-25>는 2일 동안의 최고값의 일정수준 아래 위를 레벨로 설정하고, 2 일 동안의 최저값의 일정수준 아래위를 레벨로 설정한다. 종가가 형성되는 시 점에서 고가 레벨에서는 매도를, 저가 레벨에서는 매수하는 전략으로 구성되 어 있다. 따라서 이중천정형이나 상승 함정이 발생하면 매도, 이중 바닥형이 나 하락함정이 발생하면 매수하게 된다. 또한 청산 전략에서도 모형 형성 실패 시 청산이 발생하도록 구성되어 있다. 여기에 추가 진입 방법으로 돌파 매매를 병행하였다. 적용된 그림은 다음과 같다. 4 <그림 오류! 지정한 스타일은 사용되지 않습니다.-2> DD_GPattern(HiLoTest) 주) 신호: DD_GPattern(HiLoTest) <그림 4-23>은 진입의 경우로서 원호로 표시된 2일간 저점을 이용해서 저점 대비 상단선과 하단선을 작성한다. 네모로 표시된 부분처럼 하단선을 종가가 하향 이탈하지 않을 경우 상단선을 돌파하는 시점에서 매수 진입을 한 그림이 다. 다음 청산1 이 발생한 그림을 보기로 하자. <그림 오류! 지정한 스타일은 사용되지 않습니다.-3> DD_GPattern(HiLoTest) 주) 신호: DD_GPattern(HiLoTest) <그림 4-24>를 보면 직전 고점을 테스트 하면서 시가가 시작하였으나 결국 매 도 진입이 발생하였고(원호) 진입 이후 저점 레벨까지 하락하여 “청산1”로 청 산되는 매매가 발생하였다. 실제로 많이 발생하지는 않는 청산 조건이지만 기 존 진입과 의미가 상통하는 청산 전략임을 알 수 있다. (2) 사각 모형 전략 사각 모형(Rectangle)을 이용한 매매 전략으로서 사각 모형을 수렴모형으로 간주하고, 수렴모형 돌파 방향으로 진입하는 전략을 구사하게 된다. 사각형을 설정하는 다양한 방법이 있는데 그 중 한가지 유용한 방법을 이용해서 전략 식을 작성해보도록 하자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-2> DD_Rectangle 영역: 전략 이름: DD_Rectangle Input: len1(9), len2(17), ratio(0.3), factor(1.7), factor1(0.07), s1(0.37), s2(2.7) Var1=hhv(1,high,len1) Var2=llv(1,low,len1) Var3=var1-var2 Var11=hhv(1,high,len2,len1) Var12=llv(1,low,len2,len1) Var13=var11-var12 Cond1=False If Var3>0 And Var13>0 Then If Var3/var13<=ratio And Var3<=Atr(len1)*factor Then Cond1=True End If End If If tdate<>Tdate(1) Then Var50=currententrynum 6 End If If currententrynum-var50<=3 Then If ttime<1500 Then If Cond1=True Then Call buy("매수2",Atstop,Def,Var1+Atr(20)*factor1) Call sell("매도2",Atstop,Def,Var2-Atr(20)*factor1) End If End If End If If currententrynum-var50=0 Then If ttime<1500 Then Call buy("매수1",Atstop,Def,opend+(highd(1)-lowd(1))*s1) Call sell("매도1",Atstop,Def,opend-(highd(1)-lowd(1))*S1) End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*S2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If <수식 4-26>을 보면 현재의 주가 채널과 과거 일정기간 전의 주가 채널을 비 교하는 방법에 채널의 크기 및 변동성의 크기를 고려해서 현재 사각형 모형이 진행되는지를 판단하게 된다. 우선 진입 방법은 매매가 없을 경우에는 돌파 전략으로 진입하게 되며 하루에 4 번까지 사각형 형성 및 돌파 방향으로 진입 하는 방법을 사용하였다. 적용된 그림을 보자. <그림 오류! 지정한 스타일은 사용되지 않습니다.-4> DD_Rectangle 주) 신호: DD_Rectangle <그림 4-25>를 보면 장 시작 이후 매수로 진입하였으나 매수 이후 상당히 긴 기간 동안 횡보가 발생하여 사각형 모형이 형성되었다. 그 뒤 사각형의 하단 을 하향 이탈하는 순간 매도 진입이 발생하는 것을 보여주고 있다. 변수값 조 절에 따라서 사각형 발생 빈도가 상당히 큰 차이를 보인다 점을 기억해두자. (3) 삼각형(Triangle), 쐐기형(Wedge) 전략 삼각형은 사각모형과 마찬가지로 수렴형 패턴이고, 하락쐐기모형은 상승추세 에서 재 상승을, 상승 쐐기형은 하락추세에서 재 하락을 의미하는 진행형 패 턴으로서 사용된다. 여기서 조심해야 할 것은 쐐기형 패턴이 진행형으로 만 사용되지 않고, 전환형으 로 충분히 사용된다는 것이다. 따라서 직전 추세의 진행 여부에 관계없이 쐐기형 패턴이 형성되면 형성되는 반대 방향으로 매매를 하는 것이 보다 일반적이다. 8 <수식 오류! 지정한 스타일은 사용되지 않습니다.-3> DD_Triangle,Wedge 영역: 전략 이름: DD_Triangle, Wedge Input: len(8), s1(0.37), s2(2.7) slv1=slva(1,low,len,len) slv2=slva(2,low,len,len) slb1=slba(1,low,len,len) slb2=slba(2,low,len,len) shv1=shva(1,high,len,len) shv2=shva(2,high,len,len) shb1=shba(1,high,len,len) shb2=shba(2,high,len,len) If slb2>slb1 Then low_trendline =(slv1-slv2)/(slb2-slb1)*slb1+slv1 low_radian=(((slv1-slv2)/slv2)*100)/(slb2-slb1) End If If shb2>shb1 Then high_trendline =(shv1-shv2)/(shb2-shb1)*shb1+shv1 high_radian=(((shv1-shv2)/shv2)*100)/(shb2-shb1) End If Var1=round(atn(low_radian)*180/pi,2) Var2=round(atn(high_radian)*180/pi,2) If Var1>0 And Var2>0 And Var1>var2 And high_trendline>low_trendline Then '상향쐐기형 Cond1=True Else Cond1=False End If If Var1<0 And Var2<0 And Var1>var2 And high_trendline > low_trendline Then '하향쐐기형 Cond2=True Else Cond2=False End If If Var1>0 And Var2<0 And high_trendline>low_trendline Then '삼각형 Cond3=True Else Cond3=False End If Var10=highd(1)-lowd(1) If tdate<>tdate(1) Then Var50=currententrynum End If If ttime<1500 Then If currententrynum-var50=0 Then If Cond1=True And low>low_trendline Then Call sell("쐐기매도",Atstop,Def,low_trendline ) End If If Cond2=True And high<high_trendline Then Call buy("쐐기매수",Atstop,Def,high_trendline ) End If If Cond3=True And low>low_trendline And high<high_trendline Then Call buy("삼각매수",Atstop,Def,high_trendline ) Call sell("삼각매도",Atstop,Def,low_trendline ) End If Call buy("매수",Atstop,Def,opend+var10*S1) Call sell("매도",Atstop,Def,opend-var10*S1) End If End If If ttime<1500 Then If currententrynum-var50=1 Then If Cond1=True And low>low_trendline Then Call sell("쐐기매도",Atstop,Def,low_trendline ) End If If Cond2=True And high<high_trendline Then Call buy("쐐기매수",Atstop,Def,high_trendline ) End If End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-Atr(20)*S2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+Atr(20)*S2) End If <수식 4-27>을 보면 우선 두 점의 Swing High와 Low를 설정하여 추세선을 작 성하고, 추세선의 방향 및 위치를 고려해서 상향쐐기, 하향쐐기, 삼각형을 판 단하게 된다. 이렇게 모형을 판단하고 상향 쐐기형에서는 매도만을, 하향 쐐 기형에서는 매수만을 적용하고 삼각형일 경우에는 매수, 매도를 모두 시행하 는 방법을 사용하였다. 하루 중 첫번째 매매에서만 이와 같은 전략과 돌파 형 태의 전략을 병행해서 사용하게 되며, 두번째 매매가 발생할 때에는 쐐기형만 적용하였다. 10 <그림 오류! 지정한 스타일은 사용되지 않습니다.-5> DD_Triangle,Wedge 주) 신호: DD_Trendline <그림 4-26>을 보면 상단선이 한번 변화되는 가운데 상향 쐐기형이 발달되고 있었으며, 하단선을 하향 이탈하면서 매도가 발생한 예를 보여준다. <그림 오류! 지정한 스타일은 사용되지 않습니다.-6> DD_Triangle,Wedge <그림 4-27>은 삼각형 패턴이 형성되고 난 뒤 하단을 하향 이탈하면서 매도가 발생한 예제이다. 사각형 및 쐐기형을 이와같이 설정할 수도 있으며 앞서 설 명한 추세선 전략에서 사용한 코딩을 이용해서도 사용할 수 있다. 그러면 여 기서 위 세가지 모형 전략에 대한 과거 테스트 결과를 보기로 하자. <표 오류! 지정한 스타일은 사용되지 않습니다.-2> 모형분석 전략 테스트 결과 평가 항목 총 손익 DD_GPattern (HiLoTest) DD_Rectangle DD_Triangle,Wedge 91,085.36 87,167.71 76,332.02 평균 손익 107.54 96.75 82.25 최대 손실 -961.12 -1,120.12 -1,120.12 총 매매수 847 901 928 연속 이익 매매수 7 9 10 연속 손실 매매수 9 8 9 최대 자본 인하액 -4,131.54 -3,909.35 -4,711.45 승률 48.88 48.83 47.31 손익비 1.74 1.68 1.54 평균손익비 1.82 1.76 1.71 보상 비율 22.05 22.30 16.20 9,17,0.3,1.7,0.07, 변수 값 0.37, 2.7, 0.88 8, 0.37, 2.7 0.37,2.7 주) 필수적으로 보유해야 할 바 수: 100 테스트 결과를 보면 DD_GPattern(HiLoTest)가 총손익, 평균손익, 최대 손실, 손익비, 평균손익비 에서 우월한 결과를 나타냈으며, DD_Rectangle은 최대 자 본 인하액 및 보상비율에서 나은 결과를 나타내었다. 모형을 설정하는 코딩 부분은 위의 전략이 아니더라도 유용하게 사용할 수 있는 코딩이다. 이제부터 는 패턴 분석 전략들을 알아보기로 하자. 12 2. 수렴 돌파 전략 수렴 돌파 전략은 가격 수렴이 발생한 다음에 돌파하는 방향으로 매매하는 전 략으로서 앞서 설명한 돌파 전략과 유사한 매매 전략이다. 하지만 수렴이 발 생하는 것을 전제로 한다는 차이점이 있다. 그러면 가격의 수렴이란 구체적으 로 무엇을 의미하는가? 수렴은 가격 흐름에 추세가 없고 쉬는 구간을 의미한다. 즉 횡보 추세를 의미하 는데, 이 횡보 추세가 발달하면 그 다음은 추세 구간(상승이나 하락)을 기대할 수 있다. 따라서 수렴이 발생한 다음 지지 / 저항선을 돌파하는 방향이 추세가 된다. 따라서 돌파 전략의 진입 제어인 필터(Filter)로서 유용하게 사용되며, 독립적인 전략으로도 사용 가능하다. 수렴은 Congestion, Consolidation 등으로 표기되며 주로 가격이 밀집되는 구 간이나 변동성이 축소되는 구간이라 설명할 수 있다. 기술적 분석을 통해 수 렴 국면을 찾는 다양한 방법이 있는데, 실제로 눈으로 찾기는 쉬우나 코딩을 통해 수렴 구간을 표현하기에는 어려운 점이 많다. 우선 기술적 분석에서 수 렴 구간을 표현할 수 있는 방법을 정리해보자. <표 오류! 지정한 스타일은 사용되지 않습니다.-1> 기술적 분석을 통한 수렴 구 간의 표현 구분 모형 분석 기술적 지표 항목 설명 삼각형(triangle) 상승추세선과 하락추세선의 교차 형태 사각형(rectangle) 상승추세선과 하락추세선의 평행 형태 ATR, Range, 표준편차, 역사적 변동성 등 변동성이 적은 구간 볼린저 밴드 밴드폭이 좁은 수렴 구간 그물망 장단기 이동평균선이 수렴하는 구간 일목균형표의 선행스팬 선행스팬1과 선행스팬2의 밀집구간 주가 채널 채널 폭이 좁은 구간 DMI, ADX 지표 Adx 지표가 일정 수준 이하 인사이드(inside day=ID) 전일고가>고가 and 전일저가<저가 ID1: 1 봉 인사이드 ID2: 2 봉 인사이드 Narrow range(NR) Range(고가-저가)가 적은 형태 NR2: 2 봉 수렴 NR3: 3 봉 수렴 패턴 분석 위와 같이 다양한 방법으로 수렴구간을 설정할 수 있다. 그러나 모형분석에 있어 한가지 명심해야 할 점은 깃대형이나 깃발형 또한 수렴패턴의 일종이지 만, 이것들은 상승이나 하락 후 조정(retracement)패턴으로 발생하므로 저가 진입이라는 관점에서 직전 추세와 같은 방향의 진입을 기초로 한다는 점이다. 수렴돌파 전략은 낮은 위험을 가진 진입(low risk entry)이라는 큰 장점을 가 지고 있다. 수렴이 발생하면 변동성이 작아 낮은 위험상태에서 진입할 수 있 다. 또한 되돌림 시점에서 진입하는 전략이므로 돌파 전략보다 유리한 가격 및 낮은 위험에서 진입을 하게 된다. 따라서 많은 계약수로 진입할 수 있게 되는 장점을 확보하는 전략 형태이다. 그러면 다양한 수렴 돌파 전략(DD_CongestionBreak)을 작성해보도록 하자. 2 (1) ATR, Range 이용 ATR, Range로 수렴 국면을 설정하는 방법부터 알아보기로 하자. 변동성을 대 표하는 지표인 ATR과 Range를 이용해서 변동성이 축소 되었을 때만 매매를 하 는 전략을 고려할 수 있다. 여기서 우선 기억해야 할 것은 ATR은 시가 갭을 포함한 전략 식이고, Range는 시가 갭을 포함하지 않은 가격의 진폭만으로 변동성을 측정하는 차이가 있다 는 것이다. 즉 ATR의 경우 아침 시간대에 변동성이 크게 나타나는 현상이 Range를 이용하면 해결이 된다. 또 하나 고려해야 할 것은 ATR를 사용할 경우 과거 데이터의 처음값부터 참조 하기 때문에 오프라인과 온라인 모드에서 매매신호에 차이가 발생할 수 있다. 진입과 청산 전략 모두에서 ATR을 사용할 경우 매매 신호에 차이가 발생할 수 있는데, 그 이유는 온라인 모드의 데이터 길이가 짧기 때문이다. 따라서 매매 신호가 왜곡될 수도 있다. 이러한 데이터 길이에 따른 매매 신호 왜곡 가능성 은 지수이동평균(Exponential Moving Average)도 마찬가지이다. 이러한 차이점을 인식하고 ATR, Range를 동시에 적용할 수 있는 전략 식을 작 성해보자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-1> DD_CongestionBreak(방 법1) 영역: 전략 이름: DD_CongestionBreak(방법1) Input: len(10), len1(70), len2(0.37), s1(2.7), method(1), delay(8) If method=1 Then Var1=atr(len) Var2=atr(len1) Elseif method=2 Then Var20=high-low Var1=mov(Var20,len,s) Var2=mov(Var20,len1,s) End If Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Var1<var2 Then Var10=1 Else Var10=0 End If If hhv(1,Var10,delay)=1 Then If ttime<1500 Then If Cond1=False And high<opend+(highd(1)-lowd(1))*len2 Then Call buy("매수",Atstop,Def,opend+(highd(1)-lowd(1))*len2) End If If Cond2=False And low>opend-(highd(1)-lowd(1))*len2 Then Call sell("매도",Atstop,Def,opend-(highd(1)-lowd(1))*len2) End If If Cond1=False And high>opend+(highd(1)-lowd(1))*len2 Then Call buy("매수1",Atstop,Def,hhv(1,high,delay)) End If If Cond2=False And low<opend-(highd(1)-lowd(1))*len2 Then Call sell("매도1",Atstop,Def,llv(1,low,delay)) End If End if End If If position<>0 then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s1) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s1) End If 4 <수식 4-11>은 method = 1을 입력하면 ATR을 이용하게 되며 method = 2를 입 력하면 Range를 이용하게 된다. 수렴구간의 설정은 단기 ATR이 장기 ATR보다 적은 구간으로 설정하였고, 진입 방법은 RangeBreak와 일정기간 고정 돌파를 사용하였다. 적용그림은 다음과 같다. <그림 오류! 지정한 스타일은 사용되지 않습니다.-1> DD_CongestionBreakt(방 법1) 주) 지표: DD_CongestionBreakt(방법1) 적용, 신호: 진입, 청산 적용 그림을 보면 단기 변동성이 장기 변동성이 이하에서 일정 기간 지속되면 변동 성 수렴 구간이 되며 이 구간에서 Rangebreak 이나 일정기간 고저돌파(위 그 림은 8봉 최저가 하향 돌파)로 시장에 진입하는 것을 보여주고 있다. ATR 및 Range 테스트 결과는 <표 4-12>와 같다. <표 오류! 지정한 스타일은 사용되지 않습니다.-2> DD_CongestionBreak 전략 적용결과 비교 DD_CongestionBreak(방법1) DD_CongestionBreak(방법1) 평가 항목 Method = 2 Method = 1 총 손익 88,370.01 93,058.37 평균 손익 102.16 108.46 최대 손실 -1,132.98 -1,132.98 총 매매수 865 858 연속 이익 매매수 10 10 연속 손실 매매수 6 7 최대 자본 인하액 -4,143.31 -3,120.68 승률 50.64 51.52 손익비 1.80 1.86 평균손익비 1.75 1.75 보상 비율 21.33 29.82 변수 값 10, 70, 0.37, 2.7, 1, 8 10, 50, 0.37, 2.7, 2, 7 주) 필수적으로 보유해야 할 바 수: 100 둘 다 유용한 결과를 나타냈다. 특히 Range를 이용한 경우에 보상비율이 29.82로서 높은 수익에 적은 위험 구조를 갖게되었다. 위와 같이 변동성이 적 은 구간에서 매매를 하는 방법을 통해 시스템의 위험을 줄일 수 있다는 것을 알 수 있다. 그러면 이제부터 <표 4-11>에서 설명한 다른 기술적 지표들을 이 용해서 수렴구간 매매 전략을 작성해보도록 하자. (2) 볼린저 밴드(Bollinger Band) 볼린저 밴드란 이동평균선에 가격의 표준편차를 더하거나 빼서 밴드를 표시하 는 것으로서, 추세의 확장 및 수렴을 잘 설명하는 지표이다. 3가지 선으로 구 성된다. 6 <표 오류! 지정한 스타일은 사용되지 않습니다.-3> 볼린저 밴드 구 분 내 용 상단선(Upper band) 중심선 + N 일간 종가의 표준편차 * 승수 중심선(Middle Band) N 일간 종가 단순 이동평균선 하단선(Lower Band) 중심선 - N 일간 종가의 표준편차 * 승수 밴드폭(상단선 - 하단선)이 넓다는 것은 가격 변동성이 크다는 것을 나타내고, 밴드폭이 좁다는 것은 가격 변동성이 적다는 것을 나타낸다. 또한 중심선은 이동평균선으로서 상승하면 상승추세, 하락하면 하락추세를 나타내어 추세 및 변동성을 동시에 파악 가능한 지표이다. 여기서는 수렴 구간에 대한 데이트레이딩 전략으로만 한정해서 전략식을 작성 하면 다음과 같다. <수식 오류! 지정한 스타일은 사용되지 않습니다.-2> DD_CongestionBreak(볼 린저 밴드) 영역: 전략 이름: DD_CongestionBreak(BBand) Input: len(40), len1(1), len2(30), multi(5), delay(5), s1(0.37), s2(2.7) Var50=bbandtop(close,len,len1,s) Var49=bbandbot(close,len,len1,s) Var1=var50-var49 Var2=high-low Var3=mov(Var2,len2,s)*multi Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Var1<var3 Then Var10=1 Else Var10=0 End If If hhv(1,Var10,delay)=1 then If ttime<1500 Then If Cond1=False And bbandmid(close,len,len1,s)>bbandmid(close,len,len1,s,1) Then Call buy("매수",Atstop,Def,opend+(highd(1)-lowd(1))*s1) End If If Cond2=False And bbandmid(close,len,len1,s)<bbandmid(close,len,len1,s,1) Then Call sell("매도",Atstop,Def,opend-(highd(1)-lowd(1))*s1) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If <수식 4-12>를 보면 밴드폭이 평균 Range의 일정 배수 이하일 경우에 수렴 구 간으로 판단하고, 이 구간에서만 밴드중심선이 상승하면 RangeBreak 매수 전 략을, 중심선이 하락하면 Rangebreak 매도 전략을 구사하게 된다. 지표 및 적 용된 그림은 다음과 같다. <그림 오류! 지정한 스타일은 사용되지 않습니다.-2> DD_CongestionBreak(볼 린저 밴드) 주) 신호: 진입, 청산 가격, 지표: DD_CongestionBreak(BBand) 적용 <그림 4-8>은 변동성 수렴(밴드폭 < Range)이 발생한 구간에서 매도 방향으로 매매가 발생하여 수익이 발생한 사례를 표시한 그림이다. 9월 22일에는 변동 성 확대가 지속되고 있어 매매가 발생하지 않게 된다. 테스트 결과는 나중에 8 보기로 하고 이제부터 그물망 차트를 이용한 수렴 구간 매매 전략에 대해서 알아보자. (3) 그물망 차트(Multi Moving Average Indicator) 그물망 차트란 이동 평균선의 변수값을 점진적으로 증가시키면서 중첩하여 표 시한 지표이다. 예를 들어 초기 이동평균 값이 20이고 이동 평균 개수가 10 , 증감은 2라고 하면, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40 이동 평균 선 11 개를 동시에 표시하는 지표이다. 이렇게 표시를 하게 되면 이동 평균선 들의 수렴과 확장이 잘 표시 된다. 볼린저 밴드와 함께 수렴국면 파악에 유용 하게 사용되는 지표이다. 여기서는 역시 수렴 국면 파악만을 이용한 전략을 작성하는데 수렴 국면은 이 동평균선들이 밀집되는 구간으로서 최대값을 가진 이동평균선과 최소값을 가 진 이동평균선의 차를 이용한다. <수식 오류! 지정한 스타일은 사용되지 않습니다.-3> DD_CongestionBreak(그 물망) 영역: 전략 이름: DD_CongestionBreak그물망) Input :len(20), cont(10), stepp(2), multi(2), delay(5), s1(0.37), s2(2.7) Var50=mov(close,len,s) Var49=mov(close,len,s) For i = 1 To cont If Var50<mov(close,len+stepp*i,s) Then Var50=mov(close,len+stepp*i,s) End If If Var49>mov(close,len+stepp*i,s) Then Var49=mov(close,len+stepp*i,s) End If Next Var1=var50-var49 Var2=high-low Var3=mov(Var2,len,s)*multi Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Var1<var3 Then Var10=1 Else Var10=0 End If If hhv(1,Var10,delay)=1 And hhb(1,Var10,delay)=delay-1 Then If ttime<1500 Then If Cond1=False Then Call buy("매수",Atstop,Def,opend+(highd(1)-lowd(1))*s1) End If If Cond2=False Then Call sell("매도",Atstop,Def,opend-(highd(1)-lowd(1))*s1) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If <수식 4-13>을 보면 20봉 이동 평균에서 40봉 이동평균선까지 작성하고 각 봉 마다 최대값과 최소값의 차인 변동성 폭과 Range의 가격 변동성 폭을 비교해 서 그물망의 폭이 적을 경우에 데이 트레이딩 돌파 전략을 구사하는 전략식이 다. 적용한 그림은 다음과 같다. <그림 오류! 지정한 스타일은 사용되지 않습니다.-3> DD_CongestionBreak(그 물망) 10 주) 신호: 진입, 청산가격, 그물망차트, 지표: DD_CongestionBreak(그물망) <그림 4-9>를 보면 그물망 변동폭이 Range보다 적어져서 5봉(delay=5) 이 지 나면 수렴구간으로 판단하고, 돌파 전략이 작동하기 시작한다. 여기에 대한 테스트 결과도 일목균형표를 설명한 뒤 함께 보기로 한다. (4) 일목균형표(一目均衡表) 일본에서 개발된 일목균형표는 현재 우리나라에서 인기가 많은 지표로서 엘리 어트 파동 이론이나 갠 이론 등과 함께 종합 분석(패턴, 비율, 시간)이 가능 한 기술적 지표이다. 여기서는 일목 균형표의 선행스팬1과 선행스팬2로 구성 된 구름대의 폭 만을 이용해서 수렴구간을 설정하는 전략을 만들어 보자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-4> DD_CongestionBreak(일 목) 영역: 전략 이름: DD_CongestionBreak(일목) Input: len(9), len1(24), len2(20), multi(2), delay(8), s1(0.37), s2(2.7) Var50 = (hhv(1, high,len) + llv(1, low,len)) / 2 Var49 = (hhv(1, high,len1 ) + llv(1, low,len1) ) / 2 Var48=(Var50+var49)/2 Var47 = (hhv(1, high, len1*2) + llv(1, low, len1*2) ) / 2 Var46=var47(len1-1) '선행스팬2 Var45=var48(len1-1) '선행스팬1 Var1=abs(Var45-var46) '구름대 폭 Var2=high-low Var3=mov(Var2,len2,s)*multi Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Var1<var3 Then Var10=1 Else Var10=0 End If If hhv(1,Var10,delay)=1 Then If ttime<1500 Then If Cond1=False Then Call buy("매수",Atstop,Def,opend+(highd(1)-lowd(1))*s1) End If If Cond2=False Then Call sell("매도",Atstop,Def,opend-(highd(1)-lowd(1))*s1) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If <수식 4-14>를 보면 최적화를 통해서 기본적으로 사용하는 변수값(선행스팬 1(9,26봉), 선행스팬2(52))과 다소 다르게 선행스팬1은 9, 24, 선행스팬2는 48을 사용하였다. 이 구름대의 폭이 Range보다 적으면 수렴 구간으로 간주하 고 돌파 전략을 구사한다. 적용한 그림은 다음과 같다. <그림 오류! 지정한 스타일은 사용되지 않습니다.-4> DD_CongestionBreak(일 목) 12 주) 신호: 일목균형표(구름대), 지표: DD_CongestionBreak(일목) <그림 4-10>을 보면 구름대 폭이 range폭 보다 적은 구간(히스토그램)에서 데 이트레이딩 전략 중 Rangebreak의 진입 방법을 이용해서 매도를 두 번 시행한 구간을 표시하고 있다. 앞서 설명한 볼린저 밴드와 그물망 차트, 일목 균형표를 이용한 수렴 돌파 전 략의 테스트 결과를 동시에 보기로 하자. <표 오류! 지정한 스타일은 사용되지 않습니다.-4> 테스트 결과(볼린저 밴드, 그 물망, 일목균형표) 평가 항목 총 손익 볼린저 밴드 그물망 일목균형표 79,483.71 89,154.10 83,626.37 평균 손익 106.12 100.29 98.85 최대 손실 -953.22 -1,132.98 -1,120.12 총 매매수 749 889 846 8 8 8 연속 이익 매매수 연속 손실 매매수 8 7 8 최대 자본 인하액 -2,917.82 -3,993.36 -4,197.29 승률 50.33 49.83 49.76 손익비 1.82 1.73 1.73 평균손익비 1.80 1.74 1.75 보상 비율 27.24 22.33 19.92 40,1,30,5,5,0.37,2.7 20,10,2,2,5,0.37,2.7 9,24,20,2,8,0.37,2.7 변수 값 주) 필수적으로 보유해야 할 바 수: 100, 단위: 천원, %, 배 세가지 전략 모두 평균손익이 10 만원 전후로 유용한 결과를 보였다. 특히 볼 린저 밴드의 경우 총손익이 가장 낮은 반면, 최대 손실 및 최대 자본인하액이 가장 낮은 수준으로 보상비율은 27.31로 가장 높게 나타났다. 또한 일목균형 표 보다는 그물망 차트가 수익과 위험 측면에서 좀더 좋은 결과를 나타냈다. 14 (5) 주가 채널(Price Channel) 주가 채널은 일정 기간 동안의 최고가 채널선과 최저가 선으로 구성된 지표이 다. 이동평균선과 함께 가장 기본적인 기술적 지표로서, 여기서는 수렴 돌파 형태로만 전략 식을 작성해 보도록 하자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-5> DD_CongestionBreak(주 가채널) 영역: 전략 이름: DD_CongestionBreak(주가채널) Input: len(15), multi(6), delay(5), s1(0.53), s2(2.7) Var1=hhv(1,high,len)-llv(1,low,len) Var2=high-low Var3=mov(Var2,len,s)*multi Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Var1<var3 Then Var10=1 Else Var10=0 End If If hhv(1,Var10,delay)=1 then If ttime<1500 Then If Cond1=False Then Call buy("매수1",Atstop,Def,lowd+(highd(1)-lowd(1))*s1) End If If Cond2=False Then Call sell("매도1",Atstop,Def,highd-(highd(1)-lowd(1))*s1) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End if <수식 4-15>를 보면 주가 채널의 폭이 Range의 일정 폭 이하일 경우에 수렴 국면이라 판단하고, 수렴 구간이 발생하면 돌파 진입 전략을 구사하는 전략식 이다. 적용된 그림은 다음과 같다. <그림 오류! 지정한 스타일은 사용되지 않습니다.-5> DD_CongestionBreak(주 가채널) 주) 신호: 진입, 청산가격, 지표: > DD_CongestionBreak(주가채널) <그림 4-11>을 보면 가격에는 주가 채널(price channel)이 적용되어 있다. 이 상한폭이 Range의 일정 수준 이하면 수렴 국면이라 판단하고 돌파형태의 진입 전략을 구사하게 되는데, <그림 4-11>의 경우 매수 방향으로 매매가 발생하였 다. 테스트 결과는 DMI지표와 함께 확인하고 이제 DMI지표를 활용하여 수렴 돌파매매 방법에 대해서 알아보자. (6) DMI 지표 이용 DMI(Directional Movement Index) 지표는 가장 빈번하게 사용되는 수렴 구간 파악 지표로서 +DI, -DI, ADX, ADXR 의 4가지 선으로 구성되어 있다. 여기서는 자세한 공식의 전개를 피하고 간단하게 각각의 선의 의미만을 파악해보자. 16 우선 +DI지표는 상승(uptrend) 추세를 나타내며 –DI 지표는 하락(downtrend) 추세를 나타낸다. 따라서 +DI > -DI 이면 상승추세가 진행 중이고, 반대이면 하락추세가 진행 중임을 파악할 수 있게 된다. ADX지표는 변동성을 나타내는 지표로서 ADX가 일정 수준이나 ADXR보다 크고 상승 중이면 변동성이 증가하고 있다는 것을 나타내며, 일정수준 이하거나 하락 중이면 변동성 감소나 수렴 국면이라는 것을 나타내는 지표이다. ADXR지표는 ADX지표의 이동평균선 형태 의 지표이다. 따라서 ADX가 일정 수준 이하이거나 하락하고 있는 구간을 수렴 구간으로 정 의할 수 있으며, 이러한 지표의 특성을 이용해서 수렴 돌파 전략을 작성할 수 있게 된다. <수식 오류! 지정한 스타일은 사용되지 않습니다.-6> DD_CongestionBreak(DMI) 영역: 전략 이름: DD_CongestionBreak(DMI) Input: len(21), level(30), delay(2), s1(0.37), s2(2.7) Var1=adx(len) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Var1<level And Var1>var1(delay) Then If ttime<1500 Then If Cond1=False Then Call buy("매수",Atstop,Def,opend+(highd(1)-lowd(1))*s1) End If If Cond2=False Then Call sell("매도",Atstop,Def,opend-(highd(1)-lowd(1))*s1) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If <수식 4-16>을 보면 RangeBreak 전략을 사용하는데 ADX 지표가 일정 수준 이 하에서 상승 중일 경우에만 진입 하는 식으로 구성되어 있다. 적용된 그림은 다음과 같다. <그림 오류! 지정한 스타일은 사용되지 않습니다.-6> DD_CongestionBreak(DMI) 주) 신호: 진입, 청산 가격, 지표: DMI(ADX) <그림 4-12>를 보면 7월 11일에서는 ADX지표가 상승 중이어서 진입이 가능한 시점으로 출발하였으나 30선을 넘어서면서는 매매가 발생하지 못하게 되었다. 반면 7월14일에는 다시 ADX지표가 상승중으로 매매 발생이 가능하게 출발하였 고 매수 진입이 발생하였다. 앞서 설명한 주가 채널 방법과 함께 테스트 결과를 보기로 하자. 18 <표 오류! 지정한 스타일은 사용되지 않습니다.-5> 테스트 결과(주가채널, DMI 지표) 평가 항목 주가 채널 총 손익 DMI 지표 84,119.48 82,278.42 평균 손익 62.26 118.22 최대 손실 -1,215.33 -961.12 총 매매수 1,351 696 연속 이익 매매수 7 8 연속 손실 매매수 9 7 최대 자본 인하액 -4,870.95 -3,379.31 승률 46.34 51.15 손익비 1.42 1.95 평균손익비 1.64 1.86 보상 비율 17.27 24.35 15, 6, 5, 0.53, 2.7 21, 30, 2, 0.37, 2.7 변수 값 주) 필수적으로 보유해야 할 바 수: 100 <표 4-15>를 보면 비슷한 총 손익을 보이고 있으나 주가 채널의 경우 위험이 다소 커서 모든 판단 비율(손익비, 평균손익비, 보상비율) 이 다소 낮게 나타 났다. 또한 DMI지표의 경우 평균 손익이 11만원으로 적은 매매에서 높은 수익 이 발생하였음 보여주고 있다. 따라서 DMI지표를 진입 필터로 사용한 수렴돌 파 전략이 유용하다는 것을 알 수 있다. 그러면 이제부터 패턴 분석을 통한 수렴 돌파 전략에 대해서 알아보기로 하자. (7) 인사이드 데이(Inside Day = ID)전략 인사이드 데이란 전일 고가 보다 금일 고가가 낮고, 전일 저가 보다 금일 저 가가 높은 패턴을 말한다. 인사이드 데이 반대 패턴은 아웃 사이드 데이 (Outside Day= 전일 고가 보다 금일 고가가 높고, 전일 저가 보다 금일 저가 가 낮은 패턴) 라 한다. 인사이드 데이 패턴은 말 그대로 수렴되는 패턴이 된다. 여기서는 일간 패턴 으로 간주하지 않고 단순 봉 패턴으로 간주해서 전략식을 작성해보자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-7> DD_CongestionBreak(ID) 영역: 전략 이름: DD_CongestionBreak(ID) Input: delay(9), s1(0.2), s2(2.7), s3(0.49) Var1=high-low Var2=mov(Var1,delay,s) Cond12=False If ttime<1500 Then Cond12=high(1)>=high And low(1)<=low And tdate=tdate(1) End If If Cond12=True Then Var10=1 Else Var10=0 End If Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If hhv(1,Var10,delay)=1 And tdate(hhb(1,Var10,delay))= tdate Then If ttime<1500 And Cond1=False Then If opend+(highd(1)-lowd(1))*s1<close Then Call buy("매수",Atstop,Def,high+var2*s3) End If End If If ttime<1500 And Cond2=False Then If opend-(highd(1)-lowd(1))*s1>close Then Call sell("매도",Atstop,Def,low-var2*s3) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If 20 <식 4-17>을 보면 당일 중에 ID 패턴이 발생하면 이후 9봉 이내(delay)에서는 고저 돌파 매매 전략을 구사하세 구성되어 있다. 여기에 추가로 매수의 경우 에는 시초가 대비 일정 수준 이상에서만 매수 발생, 시초가 대비 일정 수준 이하에서만 매도 발생하게 구성되어 있다. 적용된 그림은 다음과 같다. <그림 오류! 지정한 스타일은 사용되지 않습니다.-7> DD_CongestionBreak(ID) 주) 신호: DD_CongestionBreak(ID) 그림을 보면 하루 중 ID 패턴이 수 차례 발생하고 있음을 알 수 있다(저가에 화살표로 표시된 부분). 이 중에서 시초가 대비 일정 수준 이상을 나타내는 매수 레벨과 매도 레벨을 봉의 종가가 벗어난 방향으로만 매매를 하게끔 되어 있어, 위 경우에는 매도 신호가 발생하였다. (8) NR(Narrow Range) 전략 Narrow Range 패턴은 현재의 Range(고가- 저가)가 최근 N봉 중 가장 적을 경 우에 적용된다. 즉 3봉의 Range 중 현재 봉이 가장 적은 값을 가지면 NR 패턴 이 되며 이러한 패턴이 발생하면 돌파 전략을 구사하는 방법을 사용한다. <수식 오류! 지정한 스타일은 사용되지 않습니다.-8> DD_CongestionBreak(NR) 영역: 전략 이름: DD_CongestionBreak(NR) Input: len(2), s1(0.2), s2(2.7), s3(0.01) Var1=high-low Cond11=False Cond11= Var1=llv(1,Var1,len) And ttime<1500 Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then If Cond11=True And Cond11(1)=False Then If opend+(highd(1)-lowd(1))*s1<close Then Call buy("매수",Atstop,Def,high+var1*s3) End If End If End If If Cond2=False Then If Cond11=True And Cond11(1)=False Then If opend-(highd(1)-lowd(1))*s1>close Then Call sell("매도",Atstop,Def,low-var1*s3) End If End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If 22 <수식 4-18>의 경우 2 봉간 NR 이 비 연속적으로 발생한 시점에서 고저 돌파 진입 전략을 구사한다. 역시 시초가 대비 일정 수준 이상에서만 매수, 이하에 서만 매도 전략이 작동하도록 구성되어 있다. 적용된 그림을 보자. <그림 오류! 지정한 스타일은 사용되지 않습니다.-8> DD_CongestionBreak(NR) 주) 신호: DD_CongestionBreak(NR) <그림 4-14>의 원호부분을 보면 매수 레벨 이상에서 NR 패턴이 발생하였고 그 다음 봉에서 고점 돌파로 매수가 완성되었다. 그러면 이제 일간 ID, NR 패턴을 분간에 적용하는 방법을 사용해 보자. (9) 일간 ID, NR전략 일간 차트에서 Inside Day 나 Narrow Range가 발생하면 분간 차트에서 데이트레이 딩 돌파 전략을 구사하는 방법을 적용해보도록 하자. 이러한 형태는 전형적인 필터 링(Filtering) 기법으로서 일간 차트에서 패턴이 발생하여야만, 분 차트를 이용한 매매가 허용되기 때문에 나쁜 진입 신호를 필터링 해주는 역할을 한다. <수식 오류! 지정한 스타일은 사용되지 않습니다.-9> DD_CongestionBreak(IDNR_Day) 영역: 전략 이름: DD_CongestionBreak(IDNR_Day) Input: s1(0.37), s2(2.7) 'NR2 If highd(1)-lowd(1)=min(highd(1)-lowd(1),highd(2)-lowd(2)) Then Cond11=True Else Cond11=False End If 'ID,ID2 If (highd(2)>=highd(1) And lowd(2)<=lowd(1)) _ Or (highd(3)>=highd(2) And lowd(3)<=lowd(2) And _ highd(2)>=highd(1) And lowd(2)<=lowd(1))Then Cond12=True Else Cond12=False End If Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then If Cond11=True Or Cond12=True Then Call buy("매수",Atstop,Def,opend+(highd(1)-lowd(1))*s1) end if End If If Cond2=False Then If Cond11=True Or Cond12=True Then Call sell("매도",Atstop,Def,opend-(highd(1)-lowd(1))*s1) End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If 24 <수식 4-19>를 보면 2일을 이용한 Narrow Range 패턴과 2일을 이용한 Inside Day, 3일을 이용한 2일 연속 Inside Day가 발생하는 ID2 패턴을 추가하였고, 이러한 패턴이 발생하면 10분차트에 RangeBreak전략을 구사하게끔 구성된 전 략 식이다. 적용 그림은 다음과 같다. <그림 오류! 지정한 스타일은 사용되지 않습니다.-9> DD_CongestionBreak(IDNR_Day) 주) 추세: DD_CongestionBreak(IDNR_Day), 신호: 진입, 청산 가격 <그림 4-15>는 추세 영역으로 매매일과 매매를 안하는 날을 표시하였다. 매매일 은 일간으로 ID, ID2, NR 패턴이 발생한 다음날이 된다. 위 그림에서 보면 매매일 날 매수 하여 수익이 발생하는 것을 보여준다. 그러면 여기서 앞서 설명한 ID, NR 전략과 함께 과거 테스트 결과를 살펴보자. <표 오류! 지정한 스타일은 사용되지 않습니다.-6> 테스트 결과(ID, NR, ID/NR Day) 평가 항목 ID NR 75,009.44 78,923.92 70,932.34 평균 손익 90.37 90.20 126.44 최대 손실 -923.53 -912.72 -1,132.98 총 매매수 830 875 561 연속 이익 매매수 8 9 8 연속 손실 매매수 7 7 6 최대 자본 인하액 -3,936.35 -3,678.22 -3,712.55 승률 50.48 49.14 51.87 손익비 1.68 1.68 1.96 평균손익비 1.65 1.73 1.82 보상 비율 19.06 21.46 19.11 8, 0.2, 2.7, 0.49 2, 0.2, 2.7, 0.01 0.37, 2.7 총 손익 변수 값 ID/NR_Day 주) 필수적으로 보유해야 할 바 수: 100 세가지 모두 총 손익 측면에서 앞서 설명한 전략들 보다 낮은 수준을 보인다. 하지만 ID/NR_Day 전략은 매매 건수가 561건으로서 가장 작은 매매 건수인 반 면, 평균 손익이 12만원으로 나쁜 매매가 잘 제어되어 높은 평균 손익을 달성 했다. 더욱이 승률도 52% 대로 충분히 사용 가능한 전략임을 알 수 있다. 26 3. 추세선, 지지/저항선 분석 전략 추세선 및 주가 채널, 지지 / 저항 포인트인 스윙 포인트를 활용하는 전략들 을 여기서 작성해보기로 하자. 역시 돌파 전략 형태로 분류될 수 있으며 실제 매매에서 자주 활용하는 방법들이다. 전략의 개념은 다음과 같다. 추세선 전략: 상승, 하락 추세선 돌파전략 LRS전략: 전일의 선형회귀선(linear regression line)과 전일의 표준편차 등 을 이용한 선형회귀 채널 돌파전략 Price channel(fibo) 전략: 주가 채널(price channel)에 피보나치 수열 (0.382,0.618 등)을 이용한 매매 전략 스윙(swing) 전략: 주가 스윙 포인트를 이용한 매매 전략 (1) 추세선(TrendLine) 전략 추세선은 두 가지로 구분된다. 상승하는 저점을 연결하는 상승 추세선(Up Trendline)과 하락하는 고점을 연결하는 하락 추세선(Down TrendLine)이 있다. 하 락 추세선을 저항선으로, 상승추세선을 지지선으로 설정하여 전략을 작성해보자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-1> DD_TrendLine 영역: 전략 이름: DD_ TrendLine Input: len1(11), s1(0.36), s2(2.7) Set hvalue=Arrays(10,2) Set lvalue=Arrays(10,2) If shba(1,high,len1,len1)=len1 Then Var1=999999 For i = 9 To 1 Step - 1 hvalue(i,0)=hvalue(i-1,0) hvalue(i,1)=hvalue(i-1,1) Next hvalue(0,0)=shva(1,high,len1,len1) hvalue(0,1)=barnum For j = 1 To 9 If hvalue(j,0)>hvalue(0,0) Then Var1=j j=11 End If Next End If If Var1<=10 Then Var10=(hvalue(0,0)-hvalue(Var1,0))/(hvalue(0,1)-hvalue(Var1,1)) _ * shba(1,high,len1,len1)+hvalue(0,0) 2 Else Var10=999999 End If If slba(1,low,len1,len1)=len1 Then Var2=999999 For i = 9 To 1 Step - 1 lvalue(i,0)=lvalue(i-1,0) lvalue(i,1)=lvalue(i-1,1) Next lvalue(0,0)=slva(1,low,len1,len1) lvalue(0,1)=barnum For j = 1 To 9 If lvalue(j,0)<lvalue(0,0) Then Var2=j j=11 End If Next End If If Var2<=10 Then Var11=(lvalue(0,0)-lvalue(Var2,0))/(lvalue(0,1)-lvalue(Var2,1)) _ * slba(1,low,len1,len1)+lvalue(0,0) Else Var11=99999 End If If tdate<>tdate(1) Then Var50=currententrynum End If If currententrynum-var50 = 0 Then If ttime<1500 Then If high<var10 And Var1<=10 Then call buy("매수",Atstop,Def,Var10) End If If low>var11 And Var2<=10 Then Call sell("매도",Atstop,Def,Var11) End If Call sell("매도1",Atstop,Def,opend-(highd(1)-lowd(1))*S1) Call buy("매수1",Atstop,Def,opend+(highd(1)-lowd(1))*S1) End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If <수식 4-20>을 보면 배열을 사용해서 10개의 스윙고저(swing high/low)를 검 색하여 낮아지는 고가를 이용해서 하락 추세선을, 높아지는 저가를 이용해서 상승 추세선을 작성하여, 고가가 하락 추세선을 상향 돌파하면 매수, 저가가 상승 추세선을 하향 돌파하면 매도하는 전략이다. 여기에 Rangebreak 돌파 전 략을 동시에 진입 전략으로 사용하였다. 적용한 그림은 다음과 같다. <그림 오류! 지정한 스타일은 사용되지 않습니다.-1> DD_TrendLine 주) 신호: DD_Triangle 적용 <그림 4-16>을 보면 상승 추세선을 상향 돌파함으로서 매수(8월 13일)가 발생 하였으며, 그 다음날은 하락 추세선의 위에서 시가가 시작하고, 시가 + (전일 고가-저가)*0.36 시점을 돌파할 때 매수가 발생하는 것을 보여주고 있다 (Rangebreak 전략). 이와 같이 일반적인 돌파 전락과 추세선 돌파 방법을 병 행하는 방법을 사용하여 매매 건수 증감 및 수익 증가를 도모할 수 있게 된다. 4 (2) LRS(Linear Regression Slope)전략 <수식 오류! 지정한 스타일은 사용되지 않습니다.-2> DD_LRS 영역: 전략 이름: DD_LRS Input: s1(2.1), len1(56), len2(2.7) If tdate<>Tdate(1) Then Var1=lrs(close,len1,1) Var2=Stdev(close,len1,s1,1) ' Var2=Stderr(close,len1,1)*S1 '표준오차 적용 Var10=1 Var3=var1*var10+opend End If If tdate=Tdate(1) Then Var10=var10+1 Var3=var1*var10+openD End If Var4=var3+var2 Var5=var3-var2 Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then Call buy("매수",Atstop,Def,Var4) End If If Cond2=False Then Call sell("매도",Atstop,Def,Var5) End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*len2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*len2) End if 선형 회귀선은 기술적 분석에서 유용하게 사용하는 방법으로서, 채널 형태로도 자 주 사용된다. CT에서 제공하는 채널 형태는 다음과 같다. Raff Regression Channel: 일정 기간 동안의 선형 회귀선 아래 위로 고가, 저가 중 최대 거리를 표시한 채널 Standard Deviation Channel: 일정 기간 동안의 선형 회귀선 아래 위로 표 준 편차만큼을 더하거나 빼서 표시한 채널 Standard Error Channel: 일정 기간 동안의 선형 회귀선 아래 위로 표준 오 차만큼을 더하거나 빼서 표시한 채널 이러한 채널은 추세의 방향성을 파악하는데 유용하게 사용된다. <수식 4-21> 은 전일의 선형 회귀식을 통해서 계산된 기울기(=LRS)를 이용한 데이트레이딩 전략이다. <수식 4-21>은 날짜가 바뀌면 56개 봉에 대한 선형회귀선의 기울기 및 표준 편차를 계산하여 해당일 시가를 이용해서 회귀선 채널을 작성하는 방법을 사 용하였다. 여기서 56개 봉은 10분봉 기준으로 하루가 28개 봉이므로 2일간을 의미한다. 3일을 계산한다면 84개 봉을 이용하면 된다. 주석 처리된 부분은 표준편차 대신 표준오차(Standard Error)를 적용하는 전략이다. <그림 오류! 지정한 스타일은 사용되지 않습니다.-2> DD_LRS 주) 신호: DD_LRS 6 <그림 4-17>에서 원호 부분을 보면 전일과 전전일 추세가 하락 추세인 날로서 하락 채널이 적용되어, 이 채널의 상단을 상향 돌파하여 매수가 발생하였다. 그 다음날은 상승 채널이 적용되어, 상단을 돌파하는 추세나 하단을 돌파는 추세가 없어 매매가 발생하지 않았다. 테스트 결과는 나중에 확인하기로 하고, 이제부 터 주가 채널을 이용하는 방법에 대해서 알아보기로 하자. (3) 주가 채널(Price Channel(Fibo)) 전략 주가 채널은 일정 기간의 최저가가 지지선이고, 최고가가 저항선으로 작용하 는 지표이다. 주가 채널을 활용하는 방법은 상당히 다양하다. 여기서는 피보 나치 되돌림 비율을 이용해서 저가 매수, 고가 매도하는 전략을 설명하겠다. 즉 주가 채널 상단선(일정 기간 최고가) 대비 피보나치 비율(0.382) 이상 하 락이 발생하면 매수 전략을 구사하게 되고, 주가 채널 하단선(일정 기간 최저 가) 대비 피보나치 비율(0.382) 이상 상승하면 매도 전략 구사하는 방법을 말 한다. 역추세적인 진입 방법으로서 가격 되돌림(Retracement)을 이용한 매매 전략이다. <수식 오류! 지정한 스타일은 사용되지 않습니다.-3> DD_Channel(Fibo) 영역: 전략 이름: DD_Channel(Fibo) Input: len1(200), ratio(0.382), s1(0.37), s2(2.7) Var1=hhv(1,high,len1)-llv(1,low,len1) Var2=var1*ratio Var3=hhv(1,high,len1)-var2 ' high retracement Var4=llv(1,low,len1)+var2 'low retracement Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If tdate<>tdate(1) Then Var50=currententrynum End If If currententrynum-var50=0 Then If ttime<1500 Then Call buy("매수",Atstop,Def,opend+(highd(1)-lowd(1))*s1) Call sell("매도",Atstop,Def,opend-(highd(1)-lowd(1))*s1) If high<var3 And hhb(1,high,len1)<llb(1,low,len1) Then Call buy("매수1",Atstop,Def,Var3) End If If low>var4 And hhb(1,high,len1)>llb(1,low,len1) Then Call sell("매도1",Atstop,Def,Var4) End If End If End If If currententrynum-var50=1 Then If ttime<1500 Then If high<var3 And hhb(1,high,len1)<llb(1,low,len1) Then If Cond1=False Then Call buy("매수2",Atstop,Def,Var3) End If End If If low>var4 And hhb(1,high,len1)>llb(1,low,len1) then If Cond2=False Then Call sell("매도2",Atstop,Def,Var4) End If End If End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If <수식 4-22>를 보면 우선 장 시작 이후 초기 진입은 되돌림 매수, 매도와 함 께 돌파 진입을 사용하였고 두 번째 매매에서는 되돌림 매수, 매도만을 이용 하였다. 매매횟수는 하루에 두 번 매매로 제한하였다. 그림을 보면서 자세히 이해하기로 하자. 8 <그림 오류! 지정한 스타일은 사용되지 않습니다.-3> DD_Channel(Fibo) 주) 신호: DD_Channel(Fibo), 필수적으로 보유해야 할 바 수: 200 적용 <그림 4-18>를 보면 4가지 선이 적용되어 있는데 제일 위의 선은 200 봉 중 최고가 선이고 제일 아래 선은 200봉 중 최저가 선이다. 중간에 두 선은 각각 되돌림 선이 된다. 11월 20일에는 기본적인 돌파 전략이 작동하여 매도가 발 생하였고, 11월 21일에는 고점 형성 이후 38% 되돌림이 발생한 후 바로 상단 되돌림 선을 상향 돌파하여 매수가 발생한 것을 보여주고 있다. (4) 스윙(Swing) 전략 스윙 전략은 갱신되는 고점이 최저점 대비 일정 수준이상이면 상승 방향(up swing)으로, 갱신되는 저점이 최고점 대비 일정 수준 이하이면 하락 방향 (down swing)으로 판단하는 기술적 분석 기법을 이용한 전략이다. 설명만으로 이해하기 힘든 부분이 있으므로 전략식 및 그림을 통해서 자세한 설명을 하기 로 하자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-4> DD_Swing 영역: 전략 이름: DD_Swing Input: perl(0.009), perh(0.017), s1(0.37), s2(2.7) If high>=var31*(1+perL) And Var1(1)<>1 Then Var1=1 Var3=high End If If low<=var3*(1-perh) And Var1(1)<>-1 Then Var1=-1 Var31=low End If If low<var31 Then Var31=low End If If high>var3 Then Var3=high End If If tdate<>Tdate(1) Then Var50=currententrynum End If If currententrynum-var50=0 Then If ttime<1500 Then If Var1=-1 And high<var31*(1+perL) Then Call buy("매수",Atstop,Def, Var31*(1+perL)) Call sell("매도1",Atstop,Def,opend-(highd(1)-lowd(1))*S1) End If If Var1=1 And low>var3*(1-perh) Then Call sell("매도",Atstop,Def, Var3*(1-perh)) Call buy("매수1",Atstop,Def,opend+(highd(1)-lowd(1))*S1) End If End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*S2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If 10 <수식 4-23>을 보면 스윙 포인트를 설정 한 뒤 스윙 방향의 반대 방향으로는 스윙 선을, 같은 방향으로는 돌파 진입을 이용한 매매 전략이다. 우선 그림을 보면서 스윙 포인트부터 이해하기로 하자. <그림 오류! 지정한 스타일은 사용되지 않습니다.-4> 스윙 포인트 주) 신호: DD_Swing: 0.04, 0.04 적용 <그림 4-19>는 연결선물지수 10분 차트에 4% 스윙 신호를 적용한 그림이다. 4% 스윙 신호의 의미는 최고점 대비 4% 하락하면 최고점이 스윙 고점이 되며, 최저점 대비 4% 이상 상승하면 최저점이 스윙 저점이 되는 것을 말한다. 그림 을 보면 원호 시점이 최저점 대비 4% 이상 상승한 시점이 되어 상승 방향으로 전환되고, 최저점이 스윙 저점(SWINGLOW로 표시)으로 확인된 시점이 된다. 현 재는 상승 방향을 유지하는 가운데 최고점이 114 전후로서 110 포인트 전후가 4% 전환 포인트가 되는 것을 보여주고 있다. 위와 같은 스윙 포인트 및 스윙선을 이용한 매매전략을 적용한 그림을 보기로 하자. <그림 오류! 지정한 스타일은 사용되지 않습니다.-5> DD_Swing 주) 신호: DD_Swing <그림 4-20>은 스윙 신호 및 스윙 전략을 적용한 그림이다. 날짜가 진행되면 서 스윙선 위에서 주가가 형성되어 있는 상황이 지속되어 돌파 매수 진입이 3 번 연속적으로 발생하였다(네모표시). 그 뒤 스윙선 하향 이탈이 발생하면서 스윙선을 이용한 매도 진입이 발생하는 것을 보여주고 있다(원표시). 따라서 위 전략은 스윙 지표를 이용한 방향성 매매에 단기 돌파 전략이 결합된 형태 라는 알 수 있다. 스윙 포인트를 설정하는 또 다른 방법은 변동성을 이용하는 방법이다. 위 식 을 다소 변형하여 변동성 스윙 전략을 작성해보자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-5> DD_Swing(Range) 영역: 전략 이름: DD_Swing(Range) Input: perl(4.9), perh(10), len1(100), s1(0.37), s2(2.7) Var20=high-low Var21=mov(Var20,len1,S) If high>=var31+var21*Perl And Var1(1)<>1 Then Var1=1 Var3=high 12 End If If low<=var3-var21*Perh And Var1(1)<>-1 Then Var1=-1 Var31=low End If If low<var31 Then Var31=low End If If high>var3 Then Var3=high End If If tdate<>Tdate(1) Then Var50=currententrynum End If If currententrynum-var50=0 Then If ttime<1500 Then If Var1=-1 And high<var31+var21*Perl Then Call buy("매수",Atstop,Def, Var31+var21*Perl) Call sell("매도1",Atstop,Def,opend-(highd(1)-lowd(1))*S1) End If If Var1=1 And low>var3-var21*Perh Then Call sell("매도",Atstop,Def, Var3-var21*Perh) Call buy("매수1",Atstop,Def,opend+(highd(1)-lowd(1))*S1) End If End If End If If currententrynum-var50=1 Then If ttime<1500 Then If Var1=-1 And high<var31+var21*Perl Then Call buy("매수2",Atstop,Def, Var31+var21*Perl) End If If Var1=1 And low>var3-var21*Perh Then Call sell("매도2",Atstop,Def, Var3-var21*Perh) End If End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*S2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If <수식 4-24>를 보면 고가 - 저가인 Range를 이용해서 변동성를 계산하고 변동 성을 이용한 swing point 및 스윙선을 사용해서 매매를 하는 전략식이다. 전 략식은 %를 이용하는 경우와 동일하게 적용하였다. 적용된 그림을 보자. <그림 오류! 지정한 스타일은 사용되지 않습니다.-6> DD_Swing(Range) <그림 4-21>은 <그림 4-20>과 동일한 구간에 전략을 적용한 그림이다. 스윙선 위에 가격이 위치하고 있어 매수 방향만 매매하는 형태를 보이고 있는데, <그 림 4-20>과 다르게 8월 26일에도 스윙선 위에 주가가 위치하고 있어 신규매도 가 발생하지 않았다는 것을 알 수 있다. 이제 추세선, 지지 / 저항선 전략 들에 대해서 모두 알아 보았다. 여기서 설 명한 전략 이외에도 무수히 많은 진입 전략이 가능하다는 것을 이해하기 바라 며, 여기까지의 전략들의 과거 테스트 결과를 알아보기로 하자. 14 <표 오류! 지정한 스타일은 사용되지 않습니다.-1> 테스트 결과 비교(추세선, 선 형회귀선, 가격채널(피보나치)) 평가 항목 총 손익 DD_TrendLine DD_LRS DD_Channel(Fibo) 84,027.20 82,981.46 81,033.54 평균 손익 94.95 95.16 90.14 최대 손실 -1,086.88 -878.74 -1,374.66 총 매매수 885 872 899 연속 이익 매매수 7 9 7 연속 손실 매매수 10 10 8 최대 자본 인하액 -4,801.51 -3,598.05 -3,995.77 승률 47.80 48.62 49.05 손익비 1.62 1.65 1.62 평균손익비 1.77 1.74 1.68 보상 비율 17.50 23.06 20.28 11,0.36,2.7 2.1,56,2.7 200,0.382,0.37,2.7 변수 값 주) 필수적으로 보유해야 할 바 수: 100, DD_Channel(Fibo): 200 <표 오류! 지정한 스타일은 사용되지 않습니다.-2> 테스트 결과 비교(스윙, 스윙 (레인지)) 평가 항목 총 손익 DD_Swing DD_Swing(Range) 78,292.85 71,957.00 평균 손익 93.99 101.35 최대 손실 -919.18 -1,632.56 총 매매수 833 710 연속 이익 매매수 7 7 연속 손실 매매수 8 6 최대 자본 인하액 -4,457.04 -3,110.42 승률 47.18 51.55 손익비 1.61 1.73 평균손익비 1.80 1.63 보상 비율 17.57 23.13 변수 값 0.009, 0.017, 0.37, 2.7 4.9, 10, 0.37, 2.7 주) 필수적으로 보유해야 할 바 수: 100 <표 4-17>의 전략들이 유용한 결과를 나타냈다. 총손익은 DD_TrendLine전략이, 평균 손익과 승률, 손익비와 보상비율은 DD_Swing(Range)가 높게 나타났다. 최대자본인하액 및 최대 손실은 DD_LRS전략이 낮게 나타났으며, 평균 손익비 는 DD_Swing전략이 높게 나타났다. 전반적으로 추세선 및 지지 / 저항선을 이용한 매매전략에서는 수익곡선의 상 승 유지가 여타 전략들보다 다소 좋은 것이 특징이었다. 그럼 이제 모형 분석 전략에 대해서 알아보기로 하자. 16 5. 패턴(Pattern)분석 전략 가격 패턴(price pattern)이란 하나의 봉의 패턴, 2~3개의 봉의 형태를 분석 하는 방법을 말한다. 우선 가격의 봉에 대해서 알아보면 미국식 봉(bar) 차트 와 일본식 캔들스틱(candlestick) 차트로 구분된다. 각각 봉 형태의 표현 방법은 다르나, 봉 패턴은 서로 중첩되는 경우가 많다. 대표적인 패턴 분석 방법은 일본식 캔들 스틱 분석 방법(하라미, 도찌 등)으 로서 선진국에서도 널리 사용되고 있다. 반면 미국식 봉 패턴 분석 방법도 다 양한 방법이 존재하는데 앞서 설명한 Inside Day나 Narrow Range 등이 봉패턴 분석 방법에 속한다. 여기서는 일본식, 미국식 패턴 분석 방법 중 유용한 방법을 소개하고자 한다. 대부분의 데이트레이딩 매매 전략은 패턴을 이용하는 방법이 기술적 지표를 이용하는 방법보다 더 유용하다. 또한 연구자들에 따라서는 뒤에서 설명할 기 술적 지표를 이용하는 방법보다 패턴을 이용한 매매 전략이 더 범용적 (Robust)이고, 실용적이라고 주장한다. 반면, 다른 연구자들은 패턴 분석 전 략이 과거 주가에 과 최적화되는 심각한 문제점이 있다고 주장을 한다. 어느 쪽이든 패턴을 이용한 단기 매매 전략에는 상당한 개발 및 노력을 기울 이는 것이 바람직하다. 왜냐하면 단기 추세의 움직임은 패턴으로 설명하는 것 이 유용하며, 다양한 전략들을 개발할 수 있기 때문이다. 그러면 상승 갭, 하 락 갭을 이용한 매매 전략부터 알아보기로 하자. (1) 갭(Gap) 전략 갭이란 전일 고가 보다 시가가 높게 시작하는 상승 갭(gap up)과 전일 저가 보다 시가가 낮게 시작하는 하락 갭(gap down)을 의미한다. 갭이 발생한다는 것은 장 시작 전에 가격에 영향을 주는 요인이 많다는 것을 의미한다. 그러므 로 매매전략작성시 중요한 의미를 갖는다. 매매 방법은 다음과 같이 정리할 수 있다. <표 오류! 지정한 스타일은 사용되지 않습니다.-1> 갭 매매 방법 매 매 갭 업(gap up)매수 갭 다운(gap down)매도 갭 필(gap fill)매수/매도 설 명 전일 고가보다 시가가 크면 매수 방향으로 매매 전일 저가보다 시가가 적으면 매도 방향으로 매매 전일 고가보다 시가가 크고 전일 고가를 하향 돌파하면 매도 전일 저가보다 시가가 적고 전일 저가를 상향 돌파하면 매수 크게 갭 업 매매와 갭 필 매매로 구분되는데, 여기서는 갭이 발생하였을 때 이 두 가지 매매 방법을 동시에 적용하는 방법으로 전략을 작성하기로 하자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-1> DD_Pattern_Gap 영역: 전략 이름: DD_Pattern_Gap Input: ups(0.1), dns(0.1), gapup(0.29), gapfill(0.18), s2(2.7) If opend>highd(1) Then Var1=100*((opend-highd(1))/highd(1)) End If If opend<lowd(1) Then Var1=100*((lowd(1)-opend)/lowd(1)) End If If tdate<>tdate(1) Then Var50=currententrynum End If Cond1=exitdate(1)=tdate And position(1)=1 2 Cond2=exitdate(1)=tdate And position(1)=-1 If currententrynum-var50<=2 Then If ttime <1500 Then If opend>highd(1) And Var1>ups Then If Cond1=False Then Call buy("GapUp매수",Atstop,Def,opend+(highd(1)-lowd(1))*gapup) End If If Cond2=False Then Call sell("GapFill매도",Atstop,Def, _ max(highd(1),opend-(highd(1)-lowd(1))*gapfill)) End If End If If opend<lowd(1) And Var1>dns Then If Cond2=False Then Call sell("GapDown매도",Atstop,Def,opend-(highd(1)-lowd(1))*gapup) End If If Cond1=False Then Call buy("GapFill매수",Atstop,Def,_ min(lowd(1),opend+(highd(1)-lowd(1))*gapfill)) End If End If End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*S2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If <식 4-28>은 갭이 일정 비율 이상 발생할 경우 갭업 돌파전략과 갭필 돌파전 략을 적용한 식이다. 하루의 매매 횟수는 3번으로 제한 하였으며 ATR 추적 스 탑을 사용하였다. 적용된 그림을 보자. <그림 오류! 지정한 스타일은 사용되지 않습니다.-1> DD_Pattern_Gap 주) 신호: 진입, 청산 가격 <그림 4-28>을 보면 9월 8일 갭 다운이 발생하여 장중에 갭 필 매수 진입이 발생되었다. 그 다음날인 9월 9일에는 전일 고가보다 시가가 높은 갭 업이 발 생하였고, 갭 업 매수로 이어지면서 수익을 발생하였다. 9월 15일에는 갭이 발생하지 않아 매매가 일어나지 않게 된다. 이와 같이 매매가 일어나지 않는 날도 자주 발생하는 특성을 보이는 전략이다. 여기서 추가적인 갭 전략을 개발해보기로 하자. 1) 부분 갭(Partial Gap) 부분 갭이란 전일고가(저가)와 금일시가의 차이를 갭이라고 정의하지 않고, 전일 종가와 금일시가의 차이를 이용해서 갭으로 인정하는 것을 말한다. 즉 전일 종가 보다 시가가 크면 갭 업, 전일 종가보다 시가가 적으면 갭 다운으로 인정하는 것 이다. 따라서 종가보다 어느 정도 이상 상승해야 갭업으로 인정하고, 종가보다 어 느 정도 하락해야 갭 다운으로 인정하는 지를 결정하는 것이 주요 변수가 된다. 4 전략 식은 다음과 같다. <수식 오류! 지정한 스타일은 사용되지 않습니다.-2> DD_Pattern_PartialGap 영역: 전략 이름: DD_Pattern_PartialGap Input: ups(0.5), dns(0.3), gapup(0.34), gapfill(0.19), s2(2.7) If opend>=closed(1) Then Var1=100*((opend-closed(1))/closed(1)) End If If opend<closed(1) Then Var1=100*((closed(1)-opend)/closed(1)) End If If tdate<>tdate(1) Then Var3=0 Else If i_position<>0 And i_position(1)<>i_position Then Var3=var3+1 End If End If If tdate<>tdate(1) Then Var50=currententrynum End If Cond1=exitdate(1)=tdate And position(1)=1 Cond2=exitdate(1)=tdate And position(1)=-1 If currententrynum-var50<=1 Then If ttime <1500 Then If opend>closed(1) And Var1>ups Then If Cond1=False then Call buy("GapUp매수",Atstop,Def,opend+(highd(1)-lowd(1))*gapup) End If If Cond2=False then Call sell("GapFill매도",Atstop,Def,max(closed(1),opend-(highd(1)-lowd(1))*gapfill)) End If End If If opend<closed(1) And Var1>dns Then If Cond2=False Then Call sell("GapDown매도",Atstop,Def,opend-(highd(1)-lowd(1))*gapup) End If If Cond1=False Then Call buy("GapFill매수",Atstop,Def,min(closed(1),opend+(closed(1)-lowd(1))*gapfill)) End If End If End If End If If position<>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(10)*s2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(10)*S2) End If <수식 4-29>가 적용된 그림은 갭 전략과 유사하므로 생략한다. 여기서 두 전 략의 과거 테스트 결과 및 누적 수익곡선을 살펴보기로 하자. <표 오류! 지정한 스타일은 사용되지 않습니다.-2> 테스트 결과 비교(Gap, Partial Gap) 평가 항목 총 손익 DD_Pattern_Gap DD_Pattern_PartialGap 67,149.35 78,109.62 평균 손익 149.22 94.11 최대 손실 -963.31 -907.44 총 매매수 450 830 연속 이익 매매수 8 7 연속 손실 매매수 7 8 최대 자본 인하액 -4,791.24 -5,142.08 승률 51.11 47.71 손익비 2.06 1.61 평균손익비 1.97 1.77 보상 비율 14.02 15.19 0.1,0.1,0.29,0.18,2.7 0.5,0.3,0.34,0.19,2.7 변수 값 6 주) 필수적으로 보유해야 할 바 수: 100 테스트 결과 DD_Pattern_Gap 전략이 450건 매매에서 평균 손익 약 15만원이 발생하여 적은 매매에서 큰 수익이 발생함을 알 수 있다. 여기서 하나 좀더 자세히 관찰할 부분이 누적수익곡선의 발달 과정이다. DD_Pattern_Gap의 누적 수익곡선을 보기로 하자. <그림 오류! 지정한 스타일은 사용되지 않습니다.-2> DD_Pattern_Gap 누적수익 곡선 주) DD_Pattern_Gap 전략 그림을 보면 최근 장세에서 꾸준한 수익증가가 발생하고 있고, 전체적으로 선 형성이 강하다는 것을 알 수 있다. 앞서 3장에서 살펴본 바와 같이 최근 장에 서 수익 증가가 유지되기 힘든데, 이 전략은 보다 좋은 선형성을 보여 주고 있다. 이러한 현상은 DD_Pattern_PartialGap 에서 발견할 수 있다. 8 (2) 강도(Power) 분석 전략 봉이 형성될 때는 4가지 가격에 대한 정보가 있다. 즉 시가, 고가, 저가, 종 가이다. 이러한 4가지 가격이 어떻게 형성되는지를 분석하는 것이 패턴 분석 이 되며, 매수나 매도 강도에 중심을 두어 분석하는 방법의 기초가 된다. 앞서 설명한 DD_RangeBreak전략에서 전일의 고가-저가인 Range를 이용해서 돌 파 방향으로 매매하는 전략을 구사하였다. 역시 전일의 움직임이 그 다음날 주요 지지 / 저항선으로 사용되어 전일 Range가 적으면 빠른 돌파, 크면 늦은 돌파로 작동하게 된다. 이와 마찬가지로 전일 시가, 고가, 저가, 종가의 위치로 매수 / 매도 강도를 분석하여 다음날의 돌파 시점으로 사용할 수 있게 된다. 예를 들어 오늘 봉이 양봉이면 매수 강도를 종가 - 저가로 설정하고, 매도 강도는 고가 - 종가로 설정하여 다음날의 지지 / 저항선으로 사용하는 것을 말한다. 이러한 다양하 고 세밀한 패턴 분석을 통해서 DD_RangeBreak 전략은 좀더 높은 수익과 높은 승률을 가진 전략으로 진화된다. 연구 및 개발을 독자의 몫으로 남겨두고 간단하게 두 가지 전략을 만들어 보 기로 하자. 1) Max Power 전략 Max Power 전략은 전일 고가와 종가, 종가와 저가의 움직임 중에서 큰 움직임 을 다음날의 지지 / 저항선으로 사용하는 전략이다. 전략식은 다음과 같다. <수식 오류! 지정한 스타일은 사용되지 않습니다.-3> DD_Pattern_MaxPower 영역: 전략 이름: DD_Pattern_MaxPower Input: s1(0.48), s2(2.7) Var1=highd(1) Var2=closed(1) Var3=lowd(1) Var4=closed(1) If abs(Var1-var4)>=abs(Var2-var3) Then Var10=abs(Var1-var4) Else Var10=abs(Var2-var3) End If Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Ttime<1500 Then If Cond1=False Then Call buy("매수",Atstop,Def,opend+var10*S1) End If If Cond2=False Then Call sell("매도",Atstop,Def,opend-var10*s1) End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If 위 식은 전일의 고가 - 종가 와 종가 - 저가 중 큰 값을 사용해서 돌파 전략으로 작성한 식이다. 앞서 반복적인 설명이 있었기 때문에 적용 그림은 생략한다. 10 2) TrueRange 이용 전략 전일 봉뿐만이 아니라 전전 일의 흐름도 같이 반영하여 금일의 지지 / 저항선 을 작성할 수 있다. 즉 TR(=TrueRange)를 이용하는 방법이다. <수식 오류! 지정한 스타일은 사용되지 않습니다.-4> DD_Pattern(TrueRange) 영역: 전략 이름: DD_Pattern(TrueRange) Input: s1(0.37), s2(2.7) Var1=highd(1) Var2=lowd(1) Var3=closed(2) Var10=max(Var1,Var3)-min(Var2,Var3) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If Ttime<1500 Then If Cond1=False Then Call buy("매수",Atstop,Def,opend+var10*S1) End If If Cond2=False Then Call sell("매도",Atstop,Def,opend-var10*s1) End If End If If position<>0 Then Call exitlong("매수청산",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("매도청산",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*s2) End If 역시 지지 / 저항선을 전일의 TR을 이용하였을 뿐 전 식과 차이는 없다. 그러 면 여기서 테스트 결과를 보기로 하자. <표 오류! 지정한 스타일은 사용되지 않습니다.-3> 테스트 비교 결과(MaxPower, TrueRange) 평가 항목 DD_Pattern_MaxPower 총 손익 DD_Pattern(TrueRange) 92,911.19 89,094.08 평균 손익 99.16 103.00 최대 손실 -906.98 -987.45 총 매매수 937 865 연속 이익 매매수 7 7 연속 손실 매매수 7 8 최대 자본 인하액 -4,178.53 -3,822.34 승률 50.27 49.71 손익비 1.69 1.74 평균손익비 1.67 1.76 보상 비율 22.24 23.31 0.48,2.7 0.37,2.7 변수 값 주) 필수적으로 보유해야 할 바수: 100 두 가지 모두 DD_RangeBreak 전략과 유사한 결과를 나타냄을 알 수 있으며 DD_Pattern_MaxPower전략의 승률 및 총손익이 다소 좋아졌다는 것을 알 수 있 다. 이와 같이 매수 강도, 매도 강도, 가장 큰 강도 등을 계량화 하여 새로운 변형 전략으로 사용가능하며 시장에 부합되는 알고리즘일수록 더 좋은 향상이 가능하다는 것을 기억하기 바란다. (3) 연속 패턴 전략 연속 패턴(consecutive pattern) 전략이란 연속적으로 발생하는 봉의 형태를 이용한 매매 전략을 말한다. 역시 패턴 분석의 기초적인 부분으로서 시가, 고 가, 저가, 종가의 흐름을 말하는데 보통 다음과 같은 분석을 의미한다. 12 연속 시가 상승: 시가가 연속적 상승하는 경우 연속 고가 상승: 고가가 연속적 상승하는 경우 연속 저가 상승: 저가가 연속적 상승하는 경우 연속 종가 상승: 종가가 연속적 상승하는 경우 위 경우 복수 결합 다양한 결합도 가능하며 변형도 가능한데, 여기서 3봉 연속 고가상승과 3봉 연속 저가하락 전략을 작성해 보도록 하자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-5> DD_Pattern_Consec 영역: 전략 이름: DD_Pattern_Consec Input: len1(3), len2(2), level(0.13), s2(2.7), s3(0.01) Var1=opend+(highd(1)-lowd(1))*level Var2=opend-(highd(1)-lowd(1))*level Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Var1<high Then If countwhen(high>high(1),len1)=len1 Then If Cond1=False Then Call buy("매수",Atstop,Def,high+Atr(20)*S3) End If End If End If If Var2>low Then If countwhen(low<low(1),len2)=len2 Then If Cond2=False Then Call sell("매도",Atstop,Def,low-Atr(20)*S3) End If End If End If End If If position<>0 Then Call exitlong("추적스탑",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("추적스탑",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If <수식 4-32>는 고가가 3봉 연속 상승하면 매수하고 저가가 연속 하락하면 매도 하는 전략식이다. 시가 대비 고가가 전일 Range의 0.13배 이상 상승해야 매수 방향으로만 매매를 하고 저가가 전일 Range 대비 0.13배 하락해야만 매도 방향 으로 매매하는 제어를 사용하였다. 또 다른 전략을 작성해보자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-6> DD_Pattern_Consec(1) 영역: 전략 이름: DD_Pattern_Consec(1) Input: len1(2), len2(2), level(0), s2(2.7), s3(0.01) Var1=opend+(highd(1)-lowd(1))*level Var2=opend-(highd(1)-lowd(1))*level Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Var1<=close Then If countwhen(close>open,len1)=len1 And countwhen(close>close(1),len1)=len1 _ And countwhen(high>high(1),len1)=len1 Then If Cond1=False Then Call buy("매수",Atstop,Def,high+Atr(20)*S3) End If End If End If If Var2>close Then If countwhen(close<open,len2)=len2 And countwhen(close<close(1),len2)=len2 _ And countwhen(low<low(1),len2)=len2 Then If Cond2=False Then Call sell("매도",Atstop,Def,low-Atr(20)*S3) End If End If End If End If If position<>0 Then Call exitlong("추적스탑",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("추적스탑",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If 14 <수식 4-33>은 2봉 종가가 연속 상승, 연속 양봉, 연속 고가 상승이 발생하면 매수하고, 2 봉 종가가 연속 하락, 연속 음봉, 연속 저가 하락이 발생하면 매 도하게 된다. 시가 보다 종가가 클 경우에만 매수, 적을 경우에만 매도하는 제어를 사용하였다. <수식 4-33>이 적용된 그림을 보고 두 가지 전략의 과거 테스트 결과를 보기 로 하자. <그림 오류! 지정한 스타일은 사용되지 않습니다.-3> DD_Pattern_Consec 주) 신호: DD_Pattern_Consec <그림 4-30>을 보면 그림에 표시된 숫자가 연속 상승(하락)횟수를 나타내고 있다. 9월 19일에는 2봉 연속 저가 하락이 계속적으로 발생하였으나 제어 구 문에 영향을 받아 상당 기간 이후에 매도가 발생하였다. 9월 22일에도 역시 매도가 발생하였다. <표 오류! 지정한 스타일은 사용되지 않습니다.-4> 테스트 결과 평가 항목 DD_Pattern_Consec 총 손익 DD_Pattern_Consec(1) 77,195.18 71,979.58 평균 손익 116.43 84.98 최대 손실 -1,118.69 -883.00 총 매매수 663 847 연속 이익 매매수 10 10 연속 손실 매매수 9 8 최대 자본 인하액 -3,105.38 -2,987.64 승률 50.98 48.64 손익비 1.92 1.58 평균손익비 1.84 1.67 보상 비율 24.86 24.09 3,2,0.13,2.7,0.01 2,2,0,2.7,0.01 변수 값 주) 필수적으로 보유해야 할 바수: 100 테스트 결과를 보면 둘다 총 손익은 다소 적은 편이나, 평균 손익은 적정 수 준을 나타내고 있다. 최대 손실 및 최대 자본 인하액도 적은 수준이며 높은 보상 비율을 나타내고 있다. 또 다른 형태의 조합이나 연속 매매 방법들도 유 용한 전략이 될 것으로 판단할 수 있다. (4) 캔들 패턴 전략 일본식 캔들스틱 패턴을 이용한 전략을 말한다. 캔들스틱 패턴 전략에는 지속 형 및 전환형 패턴이 있는데, 여기서는 대표적인 전환형 패턴을 이용한 전략 을 작성해 보도록 하자. 사용될 전환형 패턴은 다음과 같다. 16 <표 오류! 지정한 스타일은 사용되지 않습니다.-5> 전환형 패턴 상승 전환형 하락 전환형 하나의 봉 Hammer, Inverted Hammer Doji, Dragonfly Doji 하나의 봉 Hanging Man, Shooting Star, Doji, Gravestone 두개의 봉 Bullish Engulfing, Piercing 두개의 봉 Bearish Engulfing, Dark Cloud Cover 세개의 봉 Morning Star 세개의 봉 Evening Star <표 4-25>의 패턴 이외에도 다양한 전환형 패턴이 존재하며, 위의 패턴도 정 의하기에 따라 상당히 다른 결과를 나타내게 된다. 여기서 주의할 것은 너무 엄격한 조건으로서 패턴을 정의할 경우 매매건수가 상당히 줄어든다는 것이다. 그럼 전략 식을 작성해 보도록 하자. <수식 오류! 지정한 스타일은 사용되지 않습니다.-7> DD_Pattern_Reversal 영역: 전략 이름: DD_Pattern_ Reversal Input: s2(2.7), len1(3), len2(2), s3(0.9), s4(0.29) Var1=high-low '봉의 Range Var10=high+low If open>=close Then Var2=open-close '음봉 body Elseif close>open Then Var2=close-open '양봉 body End If Cond1=close(1)<open(1) And close>open And close>open(1) And close(1)>open 'bull engulfing Cond2=close(1)>open(1) And close<open And close<open(1) And close(1)<open 'bear engulfing Cond3=var2*2<min(open,close)-low And Var10*0.7 < max(open,close) 'hammer, hanging man Cond4=var2*2<high-max(open,close) And Var10*0.3 > min(open,close) 'inverted hammer 'shooting star Cond5= open=close 'doji Cond6= open=close And close>var10*0.7 'dragonfly doji Cond7= open=close And close<var10*0.3 'garvestone Cond8=close(1)<open(1) And close>open And close>var10(1)*0.5 _ And close(1)>open And close<open(1) 'piercing Cond9=close(1)>open(1) And close<open And close<var10(1)*0.5 _ And close(1)<open And close>open(1) 'dark cloud ' 세개의 봉 Cond10=close(2)>open(2) And Var1(2)>var1(1) And close(1)>open(1) _ And close(2)<close(1) And close(2)<open(1) _ And open>close And close>close(2) 'evening star Cond11=close(2)<open(2) And Var1(2)>var1(1) And close(1)<open(1) _ And close(2)>close(1) And close(2)>open(1) _ And open<close And close<close(2) 'morning star If ttime<1500 Then If opend<=close Then If llv(1,low,len1)=low Then If Cond4 Or Cond5 Or Cond6 Then Call buy("매수",Atstop,Def,high+Atr(20)*S3) End If End If End If If opend>close Then If hhv(1,high,len1)=high Then If Cond4 Or Cond5 Or Cond7 Then Call sell("매도",Atstop,Def,low-Atr(20)*S3) end If End If End If End If If ttime<1500 Then If opend<=close Then If llv(1,low,len2)=low Then If Cond11 Or Cond1 Or Cond8 Then Call buy("매수",Atstop,Def,high+Atr(20)*S4) End If End If End If If opend>close Then If hhv(1,high,len2)=high Then 18 If Cond10 Or Cond2 Or Cond9 Then Call sell("매도",Atstop,Def,low-Atr(20)*S4) End If End If End If End If If tdate<>tdate(1) Then Var50=currententrynum End If Cond50= tdate=exitdate(1) And position(1)=1 Cond49= tdate=exitdate(1) And position(1)=-1 If currententrynum-var50<=1 Then If ttime <1500 Then If opend>highd(1) Then If Cond50=False Then Call buy("GapUp매수",Atstop,Def,opend+(highd(1)-lowd(1))*0.3)' End If If Cond49=False Then Call sell("GapFill매도",Atstop,Def,max(highd(1),opend-(highd(1)-lowd(1))*0.2)) End If End If If opend<lowd(1) Then If Cond49=False Then Call sell("GapDown매도",Atstop,Def,opend-(highd(1)-lowd(1))*0.3) End If If Cond50=False Then Call buy("GapFill매수",Atstop,Def,min(lowd(1),opend+(highd(1)-lowd(1))*0.2)) End If End If End If End If If position<>0 Then Call exitlong("추적스탑",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*s2) Call exitshort("추적스탑",Atstop,llv(1,low,barnumsinceentry+1)+atr(20)*S2) End If <수식 4-34>는 전환 패턴이 발생하면 매매를 하도록 구성되어 있는데, 시가보 다 종가가 커야 매수 방향, 시가보다 종가가 작아야만 매도하는 제어가 포함 되어 있다. 또한 상승 전환일 경우에는 현재봉의 저가가 3봉 최저가를 형성해 야 하며, 매도의 경우에는 현재봉의 고가가 2봉 최고가를 형성하면 매도 하도 록 구성되어 있어 저가 매수전략 형태라 할 수 있다. 추가적으로 앞서 설명한 갭 매매 전략을 2번 매매까지 허용하도록 하였다. 적용한 그림은 다음과 같다. <그림 오류! 지정한 스타일은 사용되지 않습니다.-4> DD_Pattern_Reversal 주) 신호: DD_Pattern_Reversal <그림 4-31>을 보면 하락전환을 예고하는 도찌(Doji)가 발생하고 그 다음 봉 에 매도가 발생하였다. 그러나 가격이 재차 상승 전환하는 듯 하였으나 흑운 형(Dark Cloud Cover)가 발생하면서 하락이 가속화된 국면을 보여주고 있다. 실제로 패턴 전략을 작성할 때 제어가 되어 있다면 전환 패턴이 그리 자주 발 생하지 않는다. 따라서 장 시작 초기에 돌파나 연속형 패턴을 이용한 전략을 추가 사용하게 된다. 청산 전략에서도 전환형 패턴은 유용하게 사용될 것이라 는 것도 짐작할 수 있다. 테스트 결과는 다음과 같다. 20 <표 오류! 지정한 스타일은 사용되지 않습니다.-6> 테스트 결과 평가 항목 DD_Pattern_Reversal 총 손익 68,114.18 평균 손익 121.20 최대 손실 -1,019.81 총 매매수 562 연속 이익 매매수 9 연속 손실 매매수 7 최대 자본 인하액 -4,547.17 승률 50.18 손익비 1.85 평균손익비 1.84 보상 비율 14.98 변수 값 2.7, 3, 2, 0.9, 0.29 주) 필수적으로 보유해야 할 바수: 100 테스트 결과를 보면 매매 건수가 562건에 평균 손익비가 12만원으로 적은 매 매에서도 상당한 수준의 수익을 창출하고 있음을 알 수 있다. 여기까지가 패 턴 분석을 통한 매매 전략이다. 추가적인 개발여지가 많은 부분이 패턴 전략 이며, 실제로 유용한 매매 전략의 상당수가 패턴을 이용한 매매 전략 분야에 속한다. 따라서 지속적이고 세밀한 관심을 갖길 바란다. 그럼 이제부터 기술적 지표를 이용한 매매 전략을 작성해 보자. 제 5 장 청산 전략 투자의 핵심 원칙: 진입보다 청산이 중요하다. (Focus on Exit) 일반적으로 시스템을 개발할 때 진입 방법 개발에 많은 노력을 기울인다. 하 지만 실제로 더 신경을 써서 개발해야 하는 것은 청산 전략이다. 증시격언에 사기(buy)는 쉬워도 팔기(Exit)는 어렵다는 말이 있다. 제 2 장에서 설명한 것처럼 매매에서 가장 큰 적은 시장이 아니고 자기 자신이다. 주식이나 파생 상품 시장에서 신규로 진입할 때는 희망을 가지고 진입한다. 하지만 포지션이 손실로 전환될 때에는 이익을 봤을 때 탐욕 때문에 청산 못한 것에 대한 후회 가 생기며, 손실 폭이 확대되기 시작하면 적은 손실에서 청산 못한 것에 대한 후회와 손실 폭이 더 확대될 것에 대한 공포가 생긴다. 특히 선물일 경우 레버리지(leverage)가 크고, 당일 결제란 특성 때문에 [언 제, 어떤 가격에 청산할 것인가]는 상당히 중요한 문제가 된다. 또 하나 청산 전략에 신경을 많이 써야 하는 이유는 심리적인 요소이다. 진입 또한 심리적인 거부감이 강한 것도 사실이나, 잘못된 청산 전략으로 인하여 이익 매매가 손실로 전환되거나 손실이 확대되는 경우에는 심리적 거부감이 상당히 크게 작용한다. 이러한 심리적 거부감은 손실을 빨리 만회하려는 욕심 으로 연결되어 계약수를 늘리거나 초과 투자(over trading)을 하게 되면서 파 산(bankruptcy)으로 이어지는 경우가 발생한다. 청산전략은 위험을 관리하는 주요 수단이다. 위험을 줄여 수익을 보존하는 것 이 청산전략의 핵심이라 하겠다. 적절한 청산 전략은 누적 수익 곡선의 선형 성을 강화시킨다. 누적 수익곡선의 선형성은 수익의 지속적은 증가를 의미하는데, 일반적으로는 청산 전략의 변경 및 분산화(Diversification) 전략을 권장한다. 그러면 다양한 청산 전략을 배우기 전에 진입 이후 가격 움직임과 Maximum Adverse Excursion(MAE), Maximum Favorable Excursion(MFE)의 개념부터 알아 보기로 하자 1. 진입 이후 가격 움직임 진입 이후에 청산까지의 가격 움직임에서 관심을 집중해야 할 부분은 청산 전 까지 진입 가격대비 얼마만큼 상승 혹은 하락하였는가 이다. <그림 0-1> 진입 후 청산까지 가격 움직임 매 수 이익 매매로 끝난 경우 손실 매매로 끝난 경우 최대미실현 이익 최대 미실현 이익 최대 미실현 손실 최대 미실현 손실 매 도 손실 매매로 끝난 경우 이익 매매로 끝난 경우 최대 미실현 손실 최대 미실현 손실 최대 미실현 이익 최대 미실현 이익 매수 이후에 이익 매매로 끝나든, 손실 매매로 끝나든 실현되지 않은 가격 움 2 직임 중에서 최대 미 실현 이익(MFE)과 최대 미 실현 손실(MAE)이 존재한다. 개념 및 사용법을 이해하기 위해서 전략을 적용한 뒤 MAE와 청산 손익, MFE와 청산 손익을 분석하는 과정을 진행해 보도록 하자. <수식 0-1> 기초 전략 영역: 전략 이름: DD_MAEMFE Input : len(0.37) Var1=highd(1)-lowd(1) If ttime<1500 Then Call buy("매수", Atstop, Def, opend+var1*len) Call sell("매도", Atstop, Def, opend-var1*len) End If 주) 속성창 설정: 슬리피지: 1틱, 필수적으로 보유해야할 바 수: 50 당일청산: 15:04, 당일진입금지: 15:05, 기간: 2000년 1월 4 일 ~ 2003년 9월 30 일 <수식 5-1>을 적용하고 난 뒤 [시뮬레이션 보고서] Æ [그래프] Æ [데이터 분류] Æ [DrawDown/Run-Up Graphs] Æ [Adverse Excursion], [Adverse Excursion(%)], [Favorable Excursion], [Favorable Excursion(%)]등의 네 가 지 그래프를 이용해서 분석을 하게 된다. 우선 합리적인 손절매 설정에 유용하게 사용되는 MAE, MAE(%) 에 대해 알아보 기로 하자. (1) 최대 미실현 손실(MAE) MAE그래프는 두 가지 있는데 하나는 금액이고 다른 하나는 비율로 표시한 것 이다. 비율(Adverse Excursion (%))로 표시한 그래프를 보기로 하겠다. <그림 5-2>의 X축은 Drawdown(%)이며, Y축은 Profit/Loss(%)로서 실현 손익을 표시하고 있다. 즉 실현 손익과 최대 미 실현 손익의 관계를 표시하고 있는 것이다. 그 다음으로 삼각형은 수익으로 청산된 매매를 나타내고, 역 삼각형 은 손실로 청산 된 매매를 표시하고 있다. <그림 0-2> Adverse Excursion(%)과 손절매 손절매 포인트 A B A점은 4.3% 수익으로 청산된 매매다. 그러나 진입 이후 최대 미 실현 손실이 약 1%까지 발생했던 것을 알 수 있다. 즉 A점은 진입 이후 최대 1% 손실이 발 생하였다가 4.3%이익으로 청산된 매매이다. B점은 4.3% 손실로 청산된 매매다. 그러나 진입 이후 최대 미 실현 손실이 약 4.3%까지 발생했던 것을 알 수 있다. 즉 B점은 진입 이후 최대 4.3% 손실이 발생하였다가 4.3% 손실로 청산된 매매이다. 그림을 보면 이익으로 청산된 매매인 삼각형은 X축의 일정범위에 모여있음을 알 수 있다. 이익으로 끝나는 매매는 최대 미 실현 손실이 일정 수준 이하라 는 것을 알 수 있다. 따라서 이익으로 끝난 매매를 최대한 보호하고 B점과 같 이 손실로 끝난 매매를 제어하는 약 2.3%(실선)가 손절매 수준이다. 왜냐하면 2.3%로 설정하게 되면 삼각형으로 표시된 이익 난 매매는 전혀 영향을 주지 4 않고 손실 매매(역 삼각형)는 4%, 5% 등의 손실 매매가 아닌 2.3% 손실 매매 로 제어되기 때문이다. 2.3% 손절매가 보수적인 접근방법이라면 좀더 공격적인 포인트는 1.9%(점선) 일 것이다. 이는 약간의 수익매매를 포기하고 보다 많은 손실매매를 줄이는 효과가 생길 것으로 판단되기 때문이다. 역시 속성창 및 코딩으로 설정할 수 있는데, 간단하게 속성 창에서 2.3%와 1.9%를 설정하고 차례로 결과를 살펴보도록 하자. <그림 0-3> 손절매 2.3% 적용 <그림 5-3>은 2.3% 손절매를 적용한 그림이다. <그림 5-2>와 비교해보면 4% 손실 매매매가 이제는 2.3% 손절매로 제어되어 그래프에서 사라졌음을 알 수 있다. 그러나 아직도 2.3%이상의 손실이 있다. 그 이유는 MAE 그래프는 수수료 및 슬리피지를 포함하지 않은 DrawDown비율 (%)을 계산하여 오차가 발생하기 때문이다. 분간 차트에서는 이와 같은 이유로 오차가 발생하지만 오버나잇 전략일 경우 에는 시가 갭으로 인하여 정확한 청산 가격이 아닐 수 있기 때문에(청산 가격 100 포인트인데 시가 갭 발생으로 99.5 포인트에 청산할 수 밖에 없는 경우) 오차가 발생한다. 테스트 결과를 보면 다음과 같다. 평가 항목 총 손익 <표 0-1> 테스트 결과 손절매 적용전 2.3% 손절매 1.9% 손절매 72,071.64 72,330.73 72,565.06 평균 손익 75.79 75.90 75.83 최대 손실 -1,964.30 -1,429.83 -1,393.40 총 매매수 951 953 957 연속 이익 매매수 8 8 8 연속 손실 매매수 6 6 6 최대 자본 인하액 -6,638.01 -6,580.26 -6,429.49 승률 53.42 53.31 53.08 손익비 1.39 1.39 1.39 평균손익비 1.21 1.22 1.23 보상 비율 10.86 10.99 11.29 주) 테스트 기간: 2000. 1. 4 ~ 2003. 9. 30 <표 5-1>을 보면 손절매를 적극적으로 수행하는 것이 수익증가와 위험감소에 더욱 도움이 되며, 다소 공격적인 손절매가 더욱 유용하다는 것을 확인할 수 있다. 그러면 이제 MFE에 대해서 알아보기로 하자. (2) 최대 미실현 이익(MFE) MFE 그래프도 두 가지가 있다. 절대 금액과 비율 그래프가 있는데, 여기서는 MAE와 같이 비율 그래프를 보기로 하자. 6 <그림 5-4>는<수식 5-1>전략의 MFE(%) 그림이다. 우선 MAE(%)와 마찬가지로 삼각형은 이익매매이며 역 삼각형은 손실매매이다. Y축은 실현 손익을 표시하 고 있고, X축은 미실현 이익(Run-Up)을 표시하고 있다. A 점은 손실로 청산된 매매로서 2.1% 미 실현 이익이 발생하였다가 최종적으 로는 약4% 손실로 청산된 매매를 나타내고 있다. B 점은 이익으로 청산된 매매로서 약 6.3 % 미 실현 이익이 발생한 뒤 약 5.5% 이익으로 청산된 매매를 나타내고 있다. <그림 0-4> Favorable Excursion(%) 그래프 A B 그림을 보면 이익 매매가 일정한 직선상으로 발달하는 것을 알 수 있는데(45 도 선) 이 직선상에 있는 수익들은 거의 최대 미 실현 이익이 청산된 이익과 같은 크기일 경우이다. 따라서 유용한 시스템 일수록 이 직선상에 가까운 이 익 청산 매매가 많을 것이라는 것을 알 수 있다. MFE(%)는 두 가지의 활용법이 있는데, 다음과 같다. 손익분기점(Breakeven point) 설정 추가 진입 시점(pyramiding trading) 설정 <그림 5-4>를 보면, 4.2%(점선) 이상 상승할 경우에는 더 이상 손실로 전환되 지 않는다는 것을 알 수 있다. 따라서 4.2%를 넘어섰을 경우에는 다시 추가 진입을 하거나, 이익을 보존하는 추적스탑(trailing stop)을 아주 짧게 설정 하는 전략을 구사할 수 있게 된다. 또한 청산 이익 매매와 청산 손실 매매의 밀집도를 보면 약 1.5% 이상에서는 손실매매가 상당량 줄어들고 이익 매매가 상당히 많음을 알 수 있다. 따라서 수익이 1.5%(실선)이상 상승하면 손절매 포인트를 진입 가격으로 이동하는 손 익분기점청산(Breakeven Stop)을 적용하여 손실매매를 제어하는 전략이 가능 한 포인트가 된다. 위와 같은 MAE, MFE의 분석 결과를 바탕으로 다양한 청산전략을 적용해보기로 한다. 손절매 적용: 손실을 제어한다. 1.9% 사용 손익분기점 청산: 이익이 1.5 % 이상 발생하면 손절매 대신에 진입가격 + 0.2 포인트를 청산 가격으로 사용한다. 손절매와 손익분기점 청산가격 사이의 가격 움직임에 대한 추적스탑적용 추적스탑: 이익이 1.5% 이상 발생하면 ATR 추적스탑을 사용해서 <그림 5-4>와 같이 최대 미실현 이익을 최대화(선형화) 되도록 한다. 빠른 추적스탑: 미실현이익이 4.2% 이상 발생하면 빠른 ATR 추적스탑을 사용해서 미실현 이익이 최대화 되도록 한다. 8 <수식 0-2> MAE와 MFE를 이용한 다양한 청산 전략 영역: 전략 이름: DD_MAEMFE Input: len(0.37), stoploss(0.019), break(0.015) bigprofit(0.042) Var1=highd(1)-lowd(1) Cond1= exitname(1)="매수추적" And tdate=exitdate(1) And exitprice(1)>opend+var1*len Cond2= exitname(1)="매도추적" And tdate=exitdate(1) And exitprice(1)<opend-var1*len Cond3= exitname(1)="매수브레이크" And tdate=exitdate(1) And _ exitprice(1)>opend+var1*len Cond4= exitname(1)="매도브레이크" And tdate=exitdate(1) And _ exitprice(1)<opend-var1*len If ttime<1500 Then If Cond1=False And Cond3=False Then Call buy("매수", Atstop, Def, opend+var1*len) End If If Cond2=False And Cond4=False Then Call sell("매도", Atstop, Def, opend-var1*len) End If End If If position <>0 Then call exitlong("매수손절",Atstop,Entryprice*(1 - stoploss)) Call exitshort("매도손절",Atstop,Entryprice*(1 + stoploss)) End If If position <>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceEntry+1)*(1 - stoploss)) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceEntry+1)*(1 + stoploss)) End If If position=1 Then If hhv(1,high,barnumsinceEntry+1)>Entryprice*(1+break) Then Call Exitlong("매수브레이크",Atstop,Entryprice+0.2) Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceEntry+1)*(1 - stoploss)) End If If hhv(1,high,barnumsinceEntry+1)>Entryprice*(1+bigprofit) Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceEntry+1)*(1 - stoploss)*0.5) End If End If If position=-1 Then If llv(1,low,barnumsinceEntry+1)<Entryprice*(1-break) Then Call Exitshort("매도브레이크",Atstop,Entryprice-0.2) Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceEntry+1)*(1 + stoploss)) End If If llv(1,low,barnumsinceEntry+1)<Entryprice*(1-bigprofit) Then Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceEntry+1)*(1 + stoploss)*0.5) End If End If 주) 속성창 설정: 슬리피지: 1틱, 필수적으로 보유해야 할 바 수: 50, 당일청산: 15:04, 당일진입금지: 15:05, 기간: 2000년 1월 4 일 ~ 2003년 9월 30 일 <표 0-2> 테스트 결과 평가 항목 총 손익 손절매(2.3%) 72,330.73 72,565.06 80,245.84 평균 손익 75.90 75.83 82.39 최대 손실 -1,429.83 -1,393.40 -1,132.98 총 매매수 953 957 974 연속 이익 매매수 8 8 10 연속 손실 매매수 6 6 6 최대 자본 인하액 -6,580.26 -6,429.49 -5,128.42 승률 53.31 53.08 55.13 손익비 1.39 1.39 1.47 평균손익비 1.22 1.23 1.20 보상 비율 10.99 11.29 15.65 주) 테스트 기간: 2000년1월4일 ~ 2003년 9월30 일 10 다양한 청산전략포함 손절매(1.9%) <표 5-2>를 보면 최대손실, 최대자본인하액이 감소하며, 수익(총손익, 평균손 익)은 대폭 상향 되었고, 보상비율 및 연속이익매매수가 좋아졌다는 것을 알 수 있다. <그림 0-5> MAE와 MFE를 이용한 다양한 청산 전략 <그림 5-4>와 <그림 5-5>를 비교해보면 원안의 이익매매는 원래 손실 매매였으나 손익분기점 청산을 통해 수익으로 전환된 것이며, 추적스탑을 통해 손실매매의 크기가 제어되어 손실매매의 구역이 삼각형 내로 제한 되는 것을 알 수 있다. 제 3 장에서 설명한 최적화를 통한 비율 추적스탑(0.36,0.015)과 비교해보기 로 하자. <표 5-3>을 보면 MAE, MFE 방법은 수익, 승률, 연속이익 매매수에서, 최적화 방법은 최대손실, 최대자본인하액, 보상비율 등에서 보다 좋은 결과를 낸다. 하지만, 어느 방법이 더 우수하다고는 할 수 없다. MAE, MFE 방법을 통해서 변수 값을 결정하고, 최소한의 최적화를 통해서 좀더 최적의 변수 값을 찾는 것이 보다 합리적인 전략 작성방법이 될 것이다. <표 0-3> 최적화 방법과 MAE, MFE를 통한 다양한 청산 방법 비교 평가 항목 총 손익 최적화방법 MAE, MFE방법 80,128.25 80,245.84 평균 손익 75.95 82.39 최대 손실 -1,081.98 -1,132.98 총 매매수 1,055 974 연속 이익 매매수 7 10 연속 손실 매매수 6 6 최대 자본 인하액 -4,295.65 -5,128.42 승률 50.71 55.13 손익비 1.45 1.47 평균손익비 1.41 1.20 보상 비율 18.65 15.65 Murray A. Ruggiero Jr.는 그의 저서 “Cybernetic Trading Strategies”에서 최적화로 청산 시점을 찾는 것과 MAE, MFE로 청산 전략을 찾은 방법의 차이점 을 다음과 같이 설명하였다. MAE, MFE 방법을 이용한 청산 전략 개발이 더 합리적인데 그 이유는 최적화 방법은 전략평가항목 중 한 두 가지에 요소(총손익, 최대자본인하액 등)에만 집중되는 반면 MAE, MFE방법은 전략전체의 유용성 증대에 기여하 기 때문이다. MAE, MFE 방법은 매매의 분포(distribution)를 이용하는 방법으로서 좀더 범용적(robust)이고 미래에도 계속 적용 가능하게 된다. MAE, MFE를 통해서 다양한 청산 전략의 필요성 및 청산 전략을 종류 및 개념에 대하여 연구해 보았다. 그러면 이제부터 코딩과 함께 다양한 청산전략의 개념을 정리해 보자. 12 2. 청산 전략 개념 정리 청산 전략을 사용하는 이유는 손실 최소화와 이익 극대화가 목적이고, 더 나 아가 심리적 안정을 증가시키고 시스템의 효율성을 증대시키기 위함이다. 일 반적으로 하나의 청산 전략만을 사용하지 않는다. 복수의 청산 전략을 사용하 게 되는데, 기억해야 할 것은 진입과는 별도로 생각해야 한다는 것이다. 심지 어 진입 효율성 검증 및 청산 효율성 검증을 따로 하기도 한다. 예를 들어 진입의 경우에는 일정 기간(5봉 강제 청산)을 사용해서 진입 효율 성을 판단하고, 청산은 무작위 진입(Random Entry)를 사용해서 청산 효율성을 평가하는 방법을 사용한다. 어쨌든 청산은 앞으로 자산 관리 전략과 밀접한 관계를 갖게 된다. 왜냐하면 둘 다 위험(Risk)를 관리하는 수단이기 때문이다. 청산 전략은 크게 두 가지 구분된다. 손실 최소화: 손절매(stoploss) 이익 극대화: 이익 보존 청산 그리고 청산 전략에 주로 사용되는 종류는 다음과 같다. 절대 금액 비율 ATR, Range 기술적 지표, 추세선, 가격 자체 이용 심리적인 요인: 큰 수익이 발생하면 그 다음날 매매 금지 등 (1) 손절매(Stop Loss) 손실을 최소화 하는 청산 전략으로 전략 개발에서 필수적으로 사용하기를 권 장한다. 손절매에 대해서는 앞서 충분한 설명이 되었기에 여기서는 생략하고 대표적인 손절매 및 코딩에 대해서 정리하기로 하자. <수식 0-3> 손절매 코딩 ‘ 포인트 이용 If position <>0 Then Call exitlong("매수손절",Atstop,Entryprice -1) Call exitshort("매도손절",Atstop,Entryprice+1) End If ‘ 비율 이용 If position <>0 Then Call exitlong("매수손절",Atstop,Entryprice*(1 – 0.02)) Call exitshort("매도손절",Atstop,Entryprice*(1 + 0.02)) End If ‘ ATR, Range 이용 If position <>0 Then Call exitlong("매수손절",Atstop,Entryprice-atr(20)*2) Call exitshort("매도손절",Atstop,Entryprice+ atr(20)*2) End If <수식 5-3>는 각각 독립적으로 사용하든지 일부 또는 전부를 결합하여 사용할 수 있다. 제공된 수식의 숫자 값은 최적화나 MAE를 이용하여 찾을 수 있다. (2) 이익 보존 청산 전략 이익을 극대화 하는 청산 전략으로서 전략에 따라 사용할 수 도 있고, 안 할 수 있다. 하지만 사용할 경우, 심리적 안정과 시스템 만족도가 증가하고, 테 스트 결과 향상을 기대할 수 있게 된다. 여기에는 다양한 방법들이 존재하며 주요 개념들은 MFE 설명에서 많이 소개하였다. 14 1) 추적스탑(trailing stop) 수익의 일정 부분을 방어하는 청산 전략으로서 이익을 보존하는 방법 중에 가 장 대표적인 청산 방법이다. 손절매 대신 단독으로 사용해서 손절매 기능을 포함하여 사용할 수 있고, 손익 분기점 청산과 함께 사용하는 경우와 단독으 로 사용한 경우 등 다양한 변형이 가능하다. <수식 0-4> 추적스탑 구 분 포 인 트 내 용 If position <>0 Then Call exitlong("매수추적", Atstop, hhv(1,high, barnumsinceEntry+1)-1) Call exitshort("매도추적", Atstop, llv(1,low, barnumsinceEntry+1)-1) End If If position <>0 Then 비 Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceEntry+1)*(1-0.02)) 추 율 Call exitshort("매도추적",Atstop, llv(1,low,barnumsinceEntry+1)*(1+0.02)) 적 End If 스 탑 A T R 고 If position <>0 Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceEntry+1)-atr(20)*3.2) Call exitshort("매도추적",Atstop, llv(1,low,barnumsinceEntry+1)+atr(20)*3.2) End If If position <>0 Then 저 Call exitlong("매수추적",Atstop, llv(1,low,5)) 이 Call exitshort("매도추적",Atstop, hhv(1,high,5)) ‘5 봉 최고가 용 ‘5 봉 최저가 End If 2) 손익분기점 청산(Breakeven stop) 손익 분기점 청산 전략은 앞서 설명한 바와 같이, 미청산수익이 일정 수준 이 상 발생하면 더 이상 손실로 청산될 가능성이 적어지는 시점에서 청산 하는 전략을 추가한다든지, 변경하는 것을 의미한다. <수식 0-5> 손익 분기점 청산 If position =1 Then If hhv(1,high,barnumsinceEntry+1)>= Entryprice +atr(20)*4 then call exitlong("매수손익",Atstop, Entryprice+atr(20)) end if end if If position =-1 Then If llv(1,low,barnumsinceEntry+1)<= Entryprice - atr(20)*4 then Call exitshort("매도손익",Atstop,Entryprice-atr(20)) end if end if <수식 5-5>는 매수의 경우 atr(20)*4 이상 수익이 발생하면 진입가+atr(20)에 서 청산하게 된다. Entryprice+atr(20)를 사용한 이유는 손익분기점 청산이 작동하더라도 수수료, 슬리피지 손실만큼은 상쇄하고 청산하기 위해서 이다. 3) 초과 수익 청산(Big Profit Stop) <수식 0-6> 초과수익청산 If position =1 Then If hhv(1,high,barnumsinceEntry+1) >= Entryprice +atr(20)*8 then call exitlong(“매수초과수익”, Atstop, llv(1,low, 3)) end if end if If position =-1 Then if llv(1,low,barnumsinceEntry+1)>= Entryprice - atr(20)*8 then call exitshort(”매도초과수익”, Atstop, hhv(1,high, 3)) end if end if 수익이 크게 발생하면 더 이상 청산을 넓게 사용하지 않는 다는 의미에서 사 용한다. 즉 초과 수익이 발생하면 아주 가까운 청산 전략을 적용해서 수익을 16 극대화 하게 된다. 역시 ATR 기준으로 작성해보자. <수식 5-6>은 매수(매도)진입하여 현재가가 진입가격±atr(20)*8 이상(이하) 가 되면 초과 수익으로 간주하고, 이때부터는 3봉 저가(고가)를 이용해서 청 산하는 전략을 구사하는 방법이다. 과거 테스트에서 많은 건수가 발생하지는 않으나, 심리적 만족도가 커지는 청산 전략이다. 4) 변동성 청산 전략(Volatility Stop) 변동성 청산 전략은 주가가 진입방향과 반대로 갑자기 움직일 경우, 빠르게 시장에서 빠져 나오기 위한 청산 전략이다. 전략은 종가 기준 급변 시점을 이 용해서 청산 전략을 구사한다. ATR 기준으로 작성해보자. <수식 0-7> 변동성 청산 If position =1 Then call exitlong(“매수변동성”, Atstop ,close-atr(20)*3.2) end if If position =-1 Then call exitshort(매도변동성”,Atstop,close_atr(20)*3.2) end if 이러한 청산 전략은 종가 대비 불리한 방향으로 급격히 변화될 때 유용한데, 선물시장이나 옵션 시장에서는 이러한 급변에 대비할 필요가 있어 유용하게 사용된다. 5) 목표이익 청산(Profit Target Stop) 목표 이익 청산은 이익이 일정 수준 도달하면 청산하는 전략이다. 즉 포지션 을 유지하여 이익이 증가하게 하는 것이 아니라, 청산으로 이익을 고정하는 방법을 말한다. 목표이익설정은 손절매 폭이나 주요 지지 / 저항선(금일 고가, 저가 등) 등이 사용된다. <수식 0-8> 목표이익 청산 + 손절매 구 분 내 용 If position <>0 Then 포 인 트 Call exitlong("매수손절",Atstop,Entryprice -1) Call exitshort("매도손절",Atstop,Entryprice+1) Call exitlong("목표이익",Atlimit,Entryprice +1.5) Call exitshort("목표이익",Atlimit,Entryprice-1.5) End If If position <>0 Then Call exitlong("매수손절",Atstop,Entryprice*(1 – 0.02)) 비 Call exitshort("매도손절",Atstop,Entryprice*(1 + 0.02)) 목 율 Call exitlong("목표이익",Atlimit,Entryprice*(1 + 0.02)) 표 Call exitshort("목표이익",Atlimit,Entryprice*(1 - 0.02)) 이 End If 익 If position <>0 Then 청 산 A T R Call exitlong("매수손절",Atstop,Entryprice-atr(20)*2) Call exitshort("매도손절",Atstop,Entryprice+ atr(20)*2) Call exitlong("목표이익",Atlimit,Entryprice+atr(20)*2) Call exitshort("목표이익",Atlimit,Entryprice- atr(20)*2) End If If position <>0 Then 고 Call exitlong("매수손절",Atstop,Entryprice-atr(20)*2) 저 Call exitshort("매도손절",Atstop,Entryprice+ atr(20)*2) 이 Call exitlong("목표이익",Atlimit,max(highd,higd(1))) 용 Call exitshort("목표이익",Atlimit,min(lowd,lowd(1))) End If 주요 지지, 저항을 이용한 경우에는 가격 자체로 목표이익을 결정하면 되나, 손절매를 이용할 경우 목표이익을 손절매의 배수로 설정한다. 예를 들어 손절 매 * 1.5 배의 목표이익을 설정한다면 시스템 평가 항목에서 손익비와 평균 손익비를 1.5 전후를 유지 할 것이다. 따라서 시스템 효율성을 유지할 수 있 는 청산 전략이라 할 수 있다. 하지만 실제적으로는 이러한 비율 조절로서 손 18 익비 및 평균 손익비를 1.5전후로 유지하기 힘들다는 점도 기억하기 바란다. <수식 5-8>의 마지막 식은 지지, 저항을 이용한 경우로서 일간 2봉 고저를 목 표가격으로 사용하였다. 목표이익 청산은 목표 이익으로 수익을 고정 시키는 방법으로서 수익을 축소시킨다는 점을 기억할 필요가 있다. 6) 시간 청산(Time Stop) <수식 0-9> 시간 청산 구 분 내 용 If position <>0 Then 진 입 If barnumsinceEntry>10 and position=1 and Entryprice>close then Call exitlong(“매수시간청산”, atmarket) 가 End if 격 If barnumsinceEntry>10 and position=-1 and Entryprice<close then 대 시 비 Call exitshort(“매도시간청산”,atmarket) End if 간 End If 청 If position <>0 Then 산 If barnumsinceEntry>10 and position=1 and Entryprice+atr(20)>close then A T R Call exitlong(“매수시간청산”,atmarket) End if If barnumsinceEntry>10 and position=-1 and Entryprice-atr(20)<close then Call exitshort(“매도시간청산”,atmarket) End if End If 시간 청산은 일정 시간이 지났는데도 수익이 발생하지 않는다면 빠르게 청산 하고 새로운 기회를 포착한다는 개념이다. 진입 이후 수익이 일정 시간 동안 에도 증가하지 않는다면 진입 방향과 반대의 힘이 강하는 의미로 청산할 필요 가 있다. 여러 가지 변형이 가능한데 [일정 기간 동안 진입 가격 이하이거나, 일정 수 준의 수익을 넘어서지 못하였다면]과 같은 수준을 변경하는 방법 등이 있다. 역시 손절매, 추적스탑 등과 결합하여 사용하는 것이 일반적이다. <수식 5-9>는 진입가격 대비 시간 청산 방법과 진입가격+일정수준(atr이용)을 이용한 시간 청산 방법을 보여주고 있다. 시간 청산 방법은 실제 매매에서 심 리적으로 기다림에 대한 불안감을 줄여준다는 의미를 가지고 있으나, 실제 진 입 이후 일정 기간 수익이 발생하지 않는 경우가 많기 때문에 사용 빈도는 다 소 떨어지는 청산 전략이다. 7) 패턴을 이용한 청산 전략 패턴은 전환 패턴(reversal pattern)을 이용하게 되는데 매수일 경우에는 매 도 전환 패턴을 이용해서 청산 전략을 구사하며, 매도일 경우에는 매수 전환 패턴을 이용해서 청산 전략을 구사하는 방법을 말한다. 청산 방법은 패턴 발 생 시점에서 바로 청산하는 방법과 발생 시점 이후 빠른 청산 전략으로 변경 하는 방법을 일반적으로 사용한다. 여기서 3연속 종가전환 패턴을 이용해서 청산 전략을 만들어 보자. <수식 5-10>를 보면 첫 번째 식은 패턴 발생시 바로 청산하는 식이고, 두 번째 식은 패턴이 발생하면 그 뒤부터는 빠른 청산으로 바꾸는 전략 식이다. 의미는 비슷하지만, 두 번째 식이 좀더 이익을 키울 수 있는 구조를 가지고 있다. 이제 모든 청산 전략의 개념 및 사용 식을 알아보았다. 청산 전략은 하나만 사용하기보다는, 복합적으로 사용하는 것이 일반적이다. 위의 청산 전략 이외 에도 자신만의 청산 방법을 개발하는 것이 유용하다는 것을 기억하고, 이제부 터 복합 청산 전략을 만들어 보기로 하자. 20 <수식 0-10> 패턴청산 구 분 내 용 If position=1 and close<close(1) and close(1)<close(2) and close(2)< _ close(3) then 즉 Call exitlong("매수패턴청산”,Atmarket) 시 End if 청 If position=-1 and close>close(1) and close(1)>close(2) and _ 산 close(2)>close(3) then Call exitshort("매도패턴청산”,Atmarket) End If 패 턴 청 A 산 T R / 빠 른 청 산 if i_position<>i_position(1) then cond1=false cond2=false end if If position=1 and close<close(1) and close(1)<close(2) and close(2)<close(3) then Cond1=true End if If position=-1 and close>close(1) and close(1)>close(2) and close(2)>close(3) then Cond2=true End If If position <>0 Then If cond1=false then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)*2) Else Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(20)) End if If cond2=false then Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+ atr(20)*2) Else Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+ atr(20)) End if End if 3. 복합 청산(Composite Exit)전략 MAE, MFE 에서 사용한 것처럼 다양한 청산 전략을 복합해서 사용하는 것이 합 리적이고 일반적인 방법이다. 진입 전략과 결합 하여 다양한 청산 전략을 평 가해보기로 하자. 기초 진입 전략은 제 3 장에서 설명한 DD_Rangebreak(v0.22)으로 한다. 청산 전략은 포인트, 비율, ATR 방법 중 가격 변화에 가변적으로 변화되는 유 용한 청산 전략인 ATR을 기초로 청산 전략을 사용하기로 한다. 다음과 같은 복합 전략이 가능하겠다. 기초: 단순 ATR 청산 목표 이익 + 추적스탑 목표 이익 + 추적스탑 + 시간 청산 추적스탑 + 손익 분기점 청산 + 빠른 추적스탑 추적스탑 + 패턴 청산 + 빠른 추적스탑 5stop: 손절매 + 추적스탑 + 변동성 청산 + 손익 분기점 청산 + 초과 수익 청산 4stop: 추적스탑 + 변동성 청산 + 손익 분기점 청산 + 초과 수익 청산 5stop1: 추적스탑 + 변동성 청산 + 손익분기점 청산 + 빠른 추적스탑+ 초과수익 청산 Range5stop1: ATR 대신 range 이용 위와 같은 결합 방법 이외에도 다양한 결합 청산 전략이 존재한다. 위의 청산 전략 중 추적스탑+손익분기점 청산+빠른 추적스탑, 5Stop, 5Stop에서 손절매 를 제외하고 빠른 추적스탑을 포함한 5Stop1, ATR대신 Range를 이용하는 Range5Stop1을 비교해 보자 22 (1) 추적스탑 + 손익분기점 청산 + 빠른 추적스탑 이 청산 전략은 기초적으로 손절매 기능을 포함한 추적스탑이 작동하다가 손 익분기점을 넘어서면 손절매 기능은 손익분기점 청산으로 전환되고, 추적스탑 은 빠른 추적스탑 전략으로 전환되는 구조를 기지고 있는 청산 전략이다. <수식 0-11> 추적 스탑 + 손익 분기점 청산 + 빠른 추적스탑 영역: 전략 이름: DD_RangeBreak (v1.1) Input: len(0.37), atrlen(20), len1(3.2), len2(2.7), Break(1.9), Level(0.3) Var1=highd(1)-lowd(1) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then Call buy("매수",Atstop,Def,opend+var1*len) End If If Cond2=False Then Call sell("매도",Atstop,Def,opend-var1*len) End If End If If position =1 Then If hhv(1,high,barnumsinceentry+1)< entryprice +atr(atrlen)*break Then Call exitlong("매수추적",Atstop,hhv(1,high,barnumsinceentry+1)-atr(atrlen)*len1) Else Call exitlong("매수손익",Atstop, entryprice+atr(atrlen)*level) Call exitlong("매수추적1",Atstop,hhv(1,high,barnumsinceentry+1)-atr(atrlen)*len2) End If End If If position =-1 Then If llv(1,low,barnumsinceentry+1)> entryprice - atr(atrlen)*break Then Call exitshort("매도추적",Atstop,llv(1,low,barnumsinceentry+1)+atr(atrlen)*len1) Else Call exitshort("매도손익",Atstop,entryprice-atr(atrlen)*level) Call exitshort("매도추적1",Atstop,llv(1,low,barnumsinceentry+1)+atr(atrlen)*len2) End If End If <수식 5-11>을 보면 손익분기점 청산에 level을 설정하게 구성되어 있으며 이 level 은 0.19가 최적 변수이다. 신호와 함께 적용된 그림은 다음과 같다. <그림 0-6> DD_RangeBreak(v1.1) 추적스탑Æ손익분기점 청산Æ빠른 추적스탑 손익분기점 포인트 <그림 5-6>의 9월 22일을 보면 매도 이후 추적스탑Æ손익분기점 청산Æ빠른 추적스탑으로 청산이 변화되는 과정 속에 종가 청산으로 수익을 획득하는 부 분이 나타나있다. 9월 25일에는 매도 이후 가격이 손익분기점 포인트 하향 이 탈이 발생(원호)함으로서 청산 포인트가 추적 스탑에서 손익 분기점 청산 포 인트로 변경되어 결국 작지만 수익 매매로 청산하는 부분이 잘 나타나 있다. 테스트 결과를 보자. 24 <표 0-4> DD_RangeBreak(v1.1) 평가 항목 DD_Rangebreak(v0.22) DD_RangeBreak(v1.1) 93,116.18 92.713.79 평균 손익 97.81 98.44 최대 손실 -1,132.98 -1.279.66 총 매매수 952 952 연속 이익 매매수 10 10 연속 손실 매매수 7 7 최대 자본 인하액 -4,438.61 -4,310.48 승률 49.47 61.03 손익비 1.68 1.69 평균손익비 1.72 1.08 보상 비율 20.98 21.74 총 손익 <표 5-4>를 보면 두 가지 특징을 보여준다. 우선 기초 전략과 수익/ 위험의 관계가 비슷한 가운데 승률과 평균 손익비의 변화가 관찰되었다. 승률은 61% 로 상당히 호전 되었다. 역시 손익분기점 청산 전략을 사용할 경우 승률의 상 승효과가 발생한다는 것을 알 수 있다. 앞서 MFE에서 설명한 바와 같이 손익 분기점 청산이 손실매매 전환을 적은 수익을 가진 이익 매매로 전환시키기 때 문이다. 반면 평균 손익비는 1.08 로 아주 나빠지게 된다. 즉 상대적으로 큰 손실 매 매에 비해 적은 이익매매가 많아지기 때문이다. 역시 1이하로 하락하면 아무 리 수익이 나는 시스템이라도 사용하기 힘들어진다. 좀더 연구를 해보자. 승률과 평균손익비, 총 손익과의 관계를 <수식 5-11> break변수값을 1 ~ 4까지 0.1씩 증가시키면서 최적화 하여 분석해 보자. <그림 0-7> 총 손익과 승률 70 (원) 승률(%) 100,000.00 95,000.00 총손익 65 90,000.00 85,000.00 60 80,000.00 55 75,000.00 70,000.00 50 승률 65,000.00 45 60,000.00 1 1.5 2 2.5 3 3.5 4 <그림 0-8> 평균손익비와 승률 70 (배) 승률(%) 1.6 1.4 65 평균손익비 1.2 60 1 55 0.8 50 0.6 승률 45 0.4 1 1.5 2 2.5 3 3.5 4 우선 손익분기점이 진입 가격에 가까운 포인트에서 넓은 포인트로 변화되면서 승률과 총 손익은 역의 상관관계를 가지며, 승률과 평균손익비도 역의 상관관 계를 가지는 것을 알 수 있다. 따라서 손익 분기점이 좁을수록 승률은 높고 (67.23%) 총손익은 적고, 평균 손익비도 작은 값을 가진다. 손익분기점이 넓 을수록 승률은 낮아지며(50.95%), 총손익과 평균손익비는 커지게 된다. 승률이 일정 수준 이상(55%)이며 총손익도 최고값 근처인 구간은 손익 분기점 26 이 1.7~2.6구간이 된다. 승률이 일정 수준 이상(55%)이며 평균손익비가 1 이 상인 구간도 역시 손익분기 점이 1.7~2.6 사이가 된다. 1.7~2.6 에서 어떤 값을 사용할 것인가는 사용자의 선택의 몫이다. 그림에서 보듯이 높은 승률을 원하면 총손익 및 평균손익비를 어느 정도 포기해야 하며, 높은 수익이나 높은 평균 손익비를 원하면 승률을 어느 정도 포기해야 하기 때문이다. (2) 복합청산전략 <수식 0-12> 복합청산전략 영역: 전략 이름: DD_RangeBreak(v1.2~4) 5stop 입력변수: len(0.37), atrlen(20), len1(2.7), len2(2.7), len3(2.2), break(1.9), level(0.3), big(8) ‘기초진입전략--------------------------------------------------------Var1=highd(1)-lowd(1) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then Call buy("매수",Atstop,Def,opend+var1*len) End If If Cond2=False Then Call sell("매도",Atstop,Def,opend-var1*len) End If End If ‘5stop매수청산전략----------------------------------------------------If position=1 Then Var50 = HHV(1,High,BarnumsinceEntry +1) Call exitlong("매수손절",Atstop,Entryprice-atr(atrlen)*len1) Call exitlong("매수추적",Atstop,Var50-atr(atrlen)*len2) Call exitlong("매수변동성",Atstop,close-atr(atrlen)*len3 ) If Var50>= Entryprice+atr(atrlen)*break Then Call exitlong("매수손익분기",Atstop,Entryprice+atr(atrlen)*level) End If If Var50>=Entryprice+atr(atrlen)*big Then Call exitlong("매수초과수익",Atstop,llv(1,low,3)) End If End If ‘5stop매도청산전략----------------------------------------------------If position=-1 Then Var50 = llV(1,low,BarnumsinceEntry +1) Call exitshort("매도손절",Atstop,Entryprice+atr(atrlen)*len1) Call exitshort("매도추적",Atstop, Var50+atr(atrlen)*len2) Call exitshort("매도변동성",Atstop,close+atr(atrlen)*len3) If Var50<= Entryprice-atr(atrlen)*break Then Call exitshort("매도손익분기",Atstop,Entryprice-atr(atrlen)*level) End If If Var50<=Entryprice-atr(atrlen)*big Then Call exitshort("매도초과수익",Atstop,hhv(1,high,3)) End If End If 5stop1 입력변수: len(0.37), atrlen(20), len1(3.2), len2(2.2), len3(2.7), break(1.9), level(0.3), big(8) ‘5stop1매수청산전략---------------------------------------------------If position=1 Then Var50 = HHV(1,High,BarnumsinceEntry +1) Call exitlong("매수추적",Atstop,Var50-atr(atrlen)*len1) Call exitlong("매수변동성",Atstop,close-atr(atrlen)*len2 ) If Var50>= Entryprice+atr(atrlen)*break Then Call exitlong("매수손익분기",Atstop,Entryprice+atr(atrlen)*level) Call exitlong("매수추적1",Atstop,Var50-atr(atrlen)*len3) End If If Var50>=Entryprice+atr(atrlen)*big Then Call exitlong("매수초과수익",Atstop,llv(1,low,3)) End If 28 End If ‘5stop1매도청산전략---------------------------------------------------If position=-1 Then Var50 = llV(1,low,BarnumsinceEntry +1) Call exitshort("매도추적",Atstop,Var50+atr(atrlen)*len1) Call exitshort("매도변동성",Atstop,close+atr(atrlen)*len2) If Var50<= Entryprice-atr(atrlen)*break Then Call exitshort("매도손익분기",Atstop,Entryprice-atr(atrlen)*level) Call exitshort("매도추적1",Atstop,Var50+atr(atrlen)*len3) end if If Var50<=Entryprice-atr(atrlen)*big Then Call exitshort("매도초과수익",Atstop,hhv(1,high,3)) End If End If Range5stop1 입력변수: len(0.37), atrlen(50), len1(3), len2(2.2), len3(2.9), break(3), level(0.5), big(8) ‘Range5Stop1매수청산전략----------------------------------------------Var2=high-low Var3=mov(Var2,atrlen,s) If position=1 Then Var50 = HHV(1,High,BarnumsinceEntry +1) Call exitlong("매수추적",Atstop,Var50-var3*len1) Call exitlong("매수변동성",Atstop,close-var3*len2 ) If Var50>= Entryprice+var3*break Then Call exitlong("매수손익분기",Atstop,Entryprice+var3*level) Call exitlong("매수추적1",Atstop,Var50-var3*len3) End If If Var50>=Entryprice+var3*big Then Call exitlong("매수초과수익",Atstop,llv(1,low,3)) End If End If ‘Range5Stop1매도청산전략----------------------------------------------If position=-1 Then Var50 = llv(1,low,BarnumsinceEntry +1) Call exitshort("매도추적",Atstop,Var50+var3*len1) Call exitshort("매도변동성",Atstop,close+var3*len2) If Var50<= Entryprice-var3*break Then Call exitshort("매도손익분기",Atstop,Entryprice-var3*level) Call exitshort("매도추적1",Atstop,Var50+var3*len3) end if If Var50<=Entryprice-var3*big Then Call exitshort("매도초과수익",Atstop, hhv(1,high,3)) End If End If 첫번째 적용된 5Stop 청산전략을 그림으로 보면 다음과 같다. <그림 0-9> 5stop(초과수익 청산) 초과수익기준선 [ 손익분기점 X Y Z 청산포인트 매수 진입 후 X손익분기점을 돌파한 순간 Y구간에서 청산포인트가 급격히 상승하며 진입가격 이상에서 형성되고 있다. 이때 가격이 하락하여도 수익을 발생시키고 종료되므로 손익분기점 청산이 잘 작동되고 있음을 알 수 있다. Z에서 가격이 지속 상승하자 청산포인트가 동반상승하며 수익을 보존하고 있 으며, [에서 초과수익 기준선을 돌파하였다가 하락하자 청산포인트가 가격에 근접하여 빠르게 청산되어 이익을 최대한 보존한 초과수익 청산이 적용되었다. 30 <그림 0-10> 5Stop(변동성 청산) <그림5-10>의 원호부분을 살펴보면, 매수 직후 봉에서 급전환되어 급락하고 있다. 이때 종가를 기준으로 반대방향으로 급변하는 것에 대한 위험 회피전략 으로 변동성 청산이 사용된다. <그림 0-11>Range5Stop1 두번째 5stop1 청산전략은 추적스탑에서 출발하여 손익분기점 청산 및 빠른 추적스탑과 변동스탑, 초과수익 청산 전략을 하나의 복합 전략으로 사용한 것 이다. 첫번째 청산전략인 5stop과의 차이점은 기존의 추적스탑의 폭을 넓게 주어 손절매 기능을 포함하는 것과 빠른 추적스탑이 추가된다는 점이다. <그림 5-11>를 보면 ATR과 유사한 흐름을 보이나 초기 추적스탑(원호 표시)이 <그림 5-9>보다 진입 가격에 가깝다는 것을 알 수 있다. 그 이유는 ATR이 계 산될 때 전일 종가 봉과 금일시가 봉사이의 갭이 발생하면 atr이 갭을 포함하 게 되어 장 시작후 일정 시간까지 시가 갭의 영향을 받게 된다. 하지만 Range 를 사용하게 되면 순수하게 봉의 Range만을 이용하게 되므로 그림에서와 같은 현상이 발생하게 된다. 결과는 다음과 같다. <표 0-5> 복합청산전략 비교 평가 항목 기본전략 DD_RangeBreak (v0.22) 5Stop DD_RangeBreak (v1.2) 5Stop1 DD_RangeBreak (v1.3) Range5Stop1 DD_RangeBreak (v1.4) 총 손익 93,116.18 95,079.27 95,172.88 96,573.99 평균 손익 97.81 99.87 99.97 101.44 최대 손실 -1,132.98 -1.132.98 -1,279.66 -1,132.98 총 매매수 952 952 952 952 연속이익매매수 10 10 10 10 연속손실매매수 7 7 7 7 최대자본인하액 -4,438.61 -4,384.57 -4,310.48 -4,427.84 승률 49.47 58.40 61.03 51.26 손익비 1.68 1.74 1.71 1.69 평균손익비 1.72 1.24 1.09 1.61 보상 비율 20.98 21.68 22.08 21.81 주) 테스트기간: 2000. 1. 4 ~ 2003. 9. 30, 슬리피지 1틱, 필수적으로 보유해야할 바수: 50 32 4. 정리 이 장에서 MAE, MFE를 이해하면서 합리적인 손절매, 손익 분기점 설정 방법에 대해서 알아 보았으며, 더 나아가 초과 수익 청산, 변동성 청산 등과 같은 다 양한 청산 전략을 공부하였다. 청산 전략개발은 전략 개발에 주요 부분으로서 많은 시간을 들여서 자신만의 청산 전략을 개발하여 사용하는 것이 중요하다 는 것을 이해하였을 것이다. 청산 전략은 하나만 사용하기 보다는 복합 청산 전략을 사용하는 것이 좋으며, 진입전략과 결합여부도 중요하다. 더 나아가 또 다른 복합 청산 전략을 개발하여 사용해서 수익 증가, 위험 감 소, 심리적 안정감 증가가 가능하도록 하는 것이 진정한 시스템 트레이딩 개 발이라 하겠다. 각각의 버전에 사용된 청산 전략들을 정리해보기로 하자. 표 0-6 제공된 청산 전략들 전략명 설명 DD_RangeBreak(v1.1) 추적 스탑 + 손익 분기점 청산 + 빠른 추적스탑 DD_RangeBreak(v1.2) 5 Stop: 손절매 + 추적스탑 + 변동성 청산 + 손익 분기점 청산 + 초과 수익 청산 DD_RangeBreak(v1.3) 5Stop1: 추적스탑 + 변동성 청산 + 손익분기점 청 산 + 빠른 추적스탑 + 초과수익청산 DD_RangeBreak(v1.4) Range5Stop1: ATR대신 Range 사용 제 6 장 자산관리전략 투자의 핵심 원칙: 살아 남아야 돈을 벌 수 있다. (Survive First, Make Money) 선물 트레이딩을 하거나 시스템 트레이딩을 하는 경우 자산 관리 전략 부분을 소홀히 하기가 쉽다. 보통은 최소 증거금을 사용해서 계약수를 결정하는 경우 가 대부분이다. 그러다가 수익이 증가하면 계약수를 늘릴 수 있게 되겠지만, 연속 손실이 발생하여 파산하기 쉽다. 고정 계약수 방법으로 매매를 하는 경우도 일반적인데, 이럴 경우 재투자 (reinvestment)를 통한 기하급수적인 수익증가(geometric growth)를 실현할 수가 없게 된다. 더 나아가 고정 계약수 방식으로 매매를 하다가 수익이 증가 하면서 매매 전략의 유용성이 확인됐다고 판단하여 공격적인 투자 방법으로 계약수를 급격히 늘리고 싶은 충동이 생기게 되는데, 계약수 증가 이후 파산 하는 경우도 많다. 자산 관리 전략은 위와 같이 얼마만큼의 자본을 투자할 것인가에 초점을 맞추 고 있다. 똑같은 승률과 손익비를 가진 시스템을 사용하는 투자가 A, B 두 사 람이 같은 기간 동안에 투자를 하더라도 자산관리 전략의 사용 여부에 따라서 A 투자가는 수익이 발생하고, B투자가는 파산으로 끝나게 된다. 자산관리 전략은 생존을 중시한다. 시스템 매매를 할 경우에 언제든지 기회는 오게 된다. 좋은 기회를 포착하여 수익을 발생시킬 수 있기 위해서는 시장에 서 살아남아 있어야 한다. 따라서 대부분의 자산관리 전략은 “보수적인 자금 운영”에 초점을 맞추고 있다. 실제로 시장에서 성공한 투자가는 수익의 일부 를 은행에 저축하는 방법이나, 수익의 일부만을 투자하는 방법(예: 30% 재투 자)을 사용한다. 즉 오버 트레이딩(over trading)이 파산으로 이르는 지름길 이 되며, 결국에는 생존하지 못하여 좋은 수익의 기회를 잃어버리게 된다. 주식 및 파생시장을 사이클(cycle)측면에서 설명해보자. 가격의 흐름은 상승 Æ 하락으로 이어지는 순환주기뿐만 아니라 상승Æ 횡보 Æ 하락 Æ 횡보 Æ 상승으로 이어지는 순환주기도 있다. 여기서 횡보가 가장 문제가 되는 구간이 다. 주가의 바닥권에서의 횡보는 초기 투자가의 자본을 줄이는 역할을 하고, 고점에서의 횡보는 수익이 발생한 투자가의 자본을 수익 감소로 이어지게 하 기 때문이다. <그림 0-1> 시장 순환주기 <그림 6-1>은 종합 주가지수 일간 차트이다. 우선 A시점은 바닥권으로서 상당 기간 횡보하는 구간이다. 이 구간에서 상승을 기대하고 매수한 투자가가 상당 기간 수익이 발생하지 않게 된다. 그러다가 지수는 상승 추세가 발달하게 되 고(화살표) 이때에는 거의 모든 투자가가 수익이 발생하게 된다. 2 그러다가 B 구간인 고점 급등락 구간에 들어가면서 투자자들이 이미 늘어난 자본을 전액 투자하고 있다면 투자를 하면 할수록 손실이 발생할 가능성이 커 진다. 그 뒤 지수는 하락하게 되는데, 선물일 경우에는 매도로서 수익을 발생 할 수 있지만, 현물일 경우에는 투자할수록 더욱 더 손실이 커지게 된다. 심 지어 원금 손실이 발생하거나 파산으로 이어지기까지 한다. 그 다음 C국면인 바닥권 횡보 국면에 진입하게 된다. 역시 매도나 매수 모두 매매 횟수가 증가할 수 밖에 없으며 손실 또한 커지게 된다. 이렇게 긴 기간 동안 수익을 발생시키지 못하고 재차 상승 추세가 발달한다. 역시 상승추세가 발달하면서 대부분의 투자가들은 수익을 발생시킨다. 하지만 짧은 상승 구간 이후 재차 D 구간인 고점 급등락 구간에 들어가게 되고 다시 수익이 감소하게 되는 것이다. 이처럼 순환 사이클을 보이는 가운데 가장 문제가 되는 구간은 B, D 구간이 된다. 왜냐하면 이 구간에 들어갈 때 이미 투자가들은 자본 증가가 발생하였 기 때문에 오버 트레이딩 가능성이 높다. 그러면 그 동안의 수익은 이제 사라지 고 원금 회복에 급급한 매매를 하게 되어 더욱 안 좋은 방향으로 진행되게 된다. 수익은 발생시키는 것도 중요하지만, 지키는 것이 더욱 더 중요하다. 따라서 B, D 구간에서는 투자자본을 보존하는 자산관리 전략이 효과적일 것이다. 또 한 A, C 구간에서는 충분한 자본이 준비되어 있어 다음 상승에 대비할 수 있 어야 한다. 자산관리 전략은 재투자 방법에 대한 연구이다. 즉, 재투자할 경우의 계약수 변경 방법을 의미하게 된다. 가장 기초적으로 알아야 할 것은 제 2 장의 <표 2-8> 에서 설명한 손실 만회 수익률이다. 여기에 수익곡선의 드로다운(equity drawdown)을 연결해서 이해해 보기로 하자. 1. 기초 지금까지 진입과 청산 전략을 알아 보았고 다양한 데이트레이딩 전략을 만들 어 보았다. 전략이 완성되었다면 이제 얼마의 자금으로 매매를 시작해야 하고, 진입할 때 몇 계약으로 진입해야 하는지를 결정해야 한다. 이러한 부분에 대한 연구가 자산 관리이며 여기서 기초부터 전문적인 방법까지 알아보기로 하자. 이 장에서도 기초 전략은 데이트레이딩 전략인 DD_RangeBreak(v0.22)를 사용 하기로 하겠다. 우선 손실 만회 수익률을 다시 한번 보자. <표 0-1> 연속손실과 만회수익률 연속손실(%) = 드로다운 만회수익률(%) = ((1/(1-손실%/100))-1)*100 5 5.26 10 11.11 15 17.65 20 25.00 25 33.33 30 42.86 35 53.85 40 66.67 45 81.82 50 100.00 60 150.00 70 233.33 80 400.00 90 900.00 드로다운이 20% 발생하면 원금을 회복하기 위해서는 25% 수익이 발생해야 된다는 관계를 나타내는 표로서 자산 관리의 기초가 되는 표이다. 그러면 이제부터 CT 에 4 서 제공하는 계약수 결정 방법을 비교해보기로 하자. (속성창 Æ 기본설정) 고정주수(계약수): 현재까지 사용한 방법, 초기 자본금 및 자본금 변화에 영 향을 받지 않는다. 고정 금액: 고정 금액을 계속해서 투자하는 방법, 초기 자본금을 결정해야 한다. 선물일 경우 15% 증거금으로 계약수 계산 됨. Æ 직접 금액 입력 누적 금액: 수익금액 전액을 재투자하는 방법, 초기 자본금을 결정해야 한 다. 선물일 경우 15% 증거금으로 계약수 계산 됨. Æ 비용 탭에서 초기자본 금 부분에 입력 <표 0-2> DD_RangeBreak(v0.22) 고정 계약수 고정 금액 (3계약) (2,300만원) 279,348.53 275,899.09 누적 금액 (2,300만원) 1,094,224,373.20 평균 손익 293.43 289.81 1,149,395.35 최대 손실 -3,398.94 -3,398.94 -127,086,539.05 총 매매수 952 952 952 연속 이익 매매수 10 10 10 연속 손실 매매수 7 7 7 최대 자본 인하액 -13,315.84 -13,315.84 -566,996,378.66 승률 49.47 49.47 49.47 손익비 1.68 1.65 1.15 평균손익비 1.72 1.69 1.18 보상 비율 20.98 20.72 1.93 평가 항목 총 손익 최소 계약수 3계약 60p대: 5계약 초기: 2계약 최대 계약수 3계약 100p이상: 2계약 253,678 계약 (단위: 천원, %, 배) 위 3 가지 방법을 서로 비교해보면서 기초적인 논리를 이해하기로 하자. 우선 주의 할 점은 누적 금액 방법은 설정하는 초기 증거금을 현행 15% 최소 증거금 으로 계약수를 계산한다는 것이다. 예를 들어 초기자본금을 2,000 만원으로 설 정하고 현재 100포인트이라면 20,000,000/(100*500,000*0.15)=2.6 = 2계약으로 계산한다. 즉 2계약*100* 500,000=100,000,000 원 금액이 진입 총 금액이 된다. 고정 계약수 방법과 고정 금액 방법의 수익과 위험 구조를 유사하게 적용하기 위해서 고정계약수 3계약, 고정 금액 방법은 2,300만원으로 설정한다. 누적 금액 방법도 초기 자본금을 2,300만원으로 설정한다. <표 6-2>는 DD_RangeBreak(v0.22)에 변수 0.37, 20, 2.7로 선물 10분 차트에 적용한 각각의 결과이다. 고정 금액방식은 최대 손실이 다소 증가하고 보상비 율이 낮아지지만, 거의 유사한 수익구조를 갖는다. 고정계약수와 유사한 수익 구조를 가짐에도 불구하고 계약수는 포인트 별로 차이를 보인다. 즉 60포인트 전후에서는 5계약, 100 포인트 이상에서는 2계약으로 매매를 하게 된다. 누적 금액방식은 어마어마한 수익이 발생하였지만 최대 손실 및 최대자본 인 하액도 어마어마하게 커져 평균 손익비 및 손익비, 보상 비율이 급격히 하락 하여 1 수준이 되었다. 또한 최대 매매 계약수가 252,495 계약으로 한번 매매 에서 실현 불가능한 계약수이며 체결 가능하더라도 엄청난 슬리피지가 발생할 것이다. 이는 실현불가능하며, 복수 투자의 효과를 관찰한다는 의미 정도이다. <그림 0-2> 고정계약수 방식과 고정금액 방식의 수익곡선과 선형회귀식 300000.00 250000.00 200000.00 고 정 계 약수 y = 74.077x + 77019 2 R = 0.9306 고정금액 y = 79.142x + 58806 2 R = 0.9356 150000.00 100000.00 50000.00 0.00 1 213 425 637 849 1061 1273 1485 1697 1909 2121 2333 2545 2757 2969 3181 3393 우선 고정 계약수와 고정 금액 방법을 좀더 자세히 살펴보기 위해서 누적 수 6 익곡선과 각각의 선형 회귀선을 보자. 고정금액 선형 회귀선(실선)의 기울기 값(79.142)이 고정계약수 선형회귀선 (점선)의 기울기(74.077) 보다 크다는 것을 알 수 있고, 원으로 표시 된 부분 처럼 고정 계약수 방법으로 수익이 발생하지 않는 구간에서는 고정 금액 방법 이 좀더 효과적으로 대처하는 것을 알 수 있다. 여기서 누적 금액 방법과 고정 금액 방법의 수익곡선을 비교해 보자 <그림 0-3> 누적금액 방식과 고정금액방식의 누적수익곡선 비교 350000.00 1800000000.00 1600000000.00 300000.00 1400000000.00 250000.00 200000.00 고정금액 y = 79.142x + 58806 58727 R 2 = 0.9356 1200000000.00 1000000000.00 800000000.00 150000.00 100000.00 600000000.00 400000000.00 200000000.00 50000.00 누적금액 y = 247.55x 2 - 371016x + 9E +07 0.00 R 2 = 0.929 1 197 393 589 785 981 11771373156917651961215723532549274529413137 0.00 -200000000.00 <그림 6-3>에서 현재의 누적금액 방법으로는 실현 불가능한 수익곡선이지만, 재투자를 할 경우 수익곡선을 기하급수적인 성장 곡선으로 만들 수 있다는 가 능성을 보여준다. 그러나 고정계약수나 고정금액 방법은 아무리 전략이 우수 하더라도 직선형태 이상의 수익곡선증가는 불가하다는 것을 알 수 있다. <그림 0-4> 고정금액 방식의 종합자산곡선 <그림 0-5> 누적금액 방식의 종합자산곡선 <그림 6-4>는 고정금액 방식의 종합자산곡선(composite asset curve)이고 <그 림 6-5>는 누적금액 방식의 종합자산곡선이다. 각 그래프 중 위의 그래프는 일별 누적 수익곡선과 선형 회귀선, 표준편차 선 이다. 아래는 누적 수익곡선 자본 인하액(equity drawdown(%))을 나타낸다. 고정금액방식은 최대 12%, 평균 4%의 자본인하가 발생하고 누적금액방식은 최 8 대 44%, 평균 30%의 자본인하가 발생함을 알 수 있다. 앞서 설명한 손실 보상 비율 표인 <표 6-1>을 다시 한번 상기해보자. 12% 자 산 감소가 발생할 경우 재차 원금을 회복하기 위해서는 약 13.6% 이상의 이익 이 발생하면 수익곡선이 신고점을 갱신하고 상승할 수 있게 된다. 하지만 50% 의 자산 감소는 100%의 이익이 발생하여야 하기 때문에 수익 곡선이 신고점을 갱신하기 힘들어진다. 따라서 이 Equity Drawdown의 발생 횟수가 적을수록, 비율이 적을수록 좋은 결과다. 결론적으로 고정계약수 방법 보다는 보수적으로 재투자하지 않는 고정금액 방법 이 좀더 수익 증가, 위험 감소의 효과가 있다. 재투자 방식은 수익 곡선의 기하급 수적인 증가를 달성할 수 있는 방법이나, 최소 증거금으로 재투자하는 누적 금액 방식은 상당히 위험이 큰 방법으로서 제어가 필요하다는 것을 알 수 있었다. 엄밀히 말하면 고정 금액 방법은 재투자가 발생하지 않기 때문에 진정한 자산 관리 방법이라 할 수는 없다. 앞으로 좀더 깊은 이해가 진행되면서 재투자를 통한 수익 증가, 위험 감소의 유용한 자산 관리 방법을 습득하기로 하자. 우선 여기서 초기 자본금과 증거금에 대해서 연구를 해보자. (1) 초기 자본금(Initial Capital) 초기 자본금을 얼마로 설정해야 할 것인가? 매매에 투하되는 금액과 구분하여 초기 자본금을 생각할 경우 많을수록 좋다. 실제로 시스템 트레이딩 매매를 할 때 적은 투자 금액으로 매매를 시작하는 경우가 가장 큰 실패의 원인이 되 기도 한다. 초기 투자금액은 과거 위험을 커버할 수 있을 수준 이상으로 설정 해야 한다. 왜냐하면 현재 진입하는 시점이 연속 손실이 발생하는 구간일 수 도 있기 때문이다. 가장 일반적으로 사용하는 방법은 과거 테스트 결과에서의 최대자본인하액의 배수와 현재 증거금을 고려한 금액을 사용한다. 초기 자본금: 최대 자본인하액×1.5(1.5 ~ 3) + 현재 최소 증거금 <표 6-2 >의 고정 금액 방법의 결과를 이용하면 다음과 같다. 13,315,840×1.5+7,500,000원(=100 포인트*500,000*0.15)=27,473,790원 13,315,840×3+7,500,000원(=100 포인트*500,000*0.15)=47,447,520원 보수적으로는 5,000만원에서, 공격적으로는 3,000만원을 초기자본금로 설정하 고 2,300만원 고정 금액 투자 방법으로 매매를 하면 된다. 식에서 보듯이 초 기 자본금은 현재 진입하였을 경우 예상할 수 있는 최대 손실의 배수와 증거 금 손실을 포함한 금액으로 결정하게 되는 것이다. 이렇게 설정하게 되면 시 스템에서 예상할 수 있는 최대 손실 이상의 자금이 준비되어 있어 마진콜이나 파산 가능성이 적어지게 된다. 그럼 고정금액 방법을 이용해서 2,300만원씩 투자를 하되 초기 자본금을 3,000 만원 ~ 7,000만원까지 변경시켜서 위에서 설명한 누적 수익곡선의 최대 드로다운(최대 자본인하액 비율)의 변화를 관찰해 보자. <표 0-3> 초기 자본금 변경에 따른 수익곡선 드로다운 변화 초기 자본금(원) 최대 드로다운 (%) 30,000,000 11% 40,000,000 9% 50,000,000 8% 60,000,000 7% 70,000,000 6% 주) 초기 자본금 설정: 속성창에서 비용 탭 Æ 초기자본금 초기 자본금이 클수록 드로다운이 줄어드는 것을 알 수 있다. 누적수익곡선의 드로다운이 준다는 것은 그만큼 자본 감소에 대한 부담이 줄어들게 되고, 파산 할 확률도 줄어들게 되는 것이다. 그럼 이제 증거금에 대해 알아보기로 하자. 10 (2) 증거금(Margin) 증거금은 레버리지(Leverage)와 관계가 깊다. 선물 시장에서는 15% 증거금만 으로 투자를 할 수 있게 되어 레버리지를 이용해서 수익을 극대화하게 된다. 그러면 어느 정도 레버리지를 사용하는 것이 합리적인가를 생각할 필요가 있 다. 앞서 설명한 누적투자 방법일 경우 최소 증거금(15%)만을 이용하였을 경 우에 수익도 증가하지만, 위험이 더 큰 폭으로 증가하여 결과가 좋지 않다(평 균 손익비, 보상 비율 1 수준). 따라서 합리적인 레버지리 수준의 결정과 실질적인 재투자 방법을 사용해서 테스트를 해 보아야 한다. 다음과 같은 사항을 고려해보자. 초기 증거금 및 유지 증거금은 유지 되어야 한다. 한번 매매시 시장에 진입하는 계약수를 제어한다(200 ~ 300 계약). <수식 0-1> DD_RangeBreak(v2.1) 영역: 전략 이름: DD_ RangeBreak(v2.1) Var1=highd(1)-lowd(1) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 cont= int((capital+i_closeequity)/(close*500000*margin)) If CONT<maxcont Then cont=cont Else CONT=maxcont End If 1. 계산된 계약수가 0이하거나 초기자본금을 포함한 누적수익이 최소 증거금인 1,500만원 이하일 경우 1계약으로 매매(DD_RangeBreak(v2.1-1) Input: len(0.37), atrlen(20), len1(2.7), capital(23000000), margin(0.15), maxcont(200) If cont<1 Or capital+i_closeequity <15000000 Then cont=1 End If 2. 계산된 계약수가 0이하이거나 초기자본금을 포함한 누적수익이 최소 증거금인 1,500만 원 이하일 경우 매매중단(DD_RangeBreak(v2.1-2) Input: len(0.37), atrlen(20), len1(2.7), capital(4000000), margin(0.15), maxcont(200) If cont<1 Or capital+i_closeequity <15000000 Then cont=0 End If If ttime<1500 Then If Cond1=False Then Call buy("매수", Atstop, cont, opend+var1*len) End If If Cond2=False Then Call sell("매도", Atstop, cont, opend-var1*len) End If End If If position<>0 Then Call exitlong("매수추적스탑", Atstop, hhv(1,high, barnumsinceEntry+1)-atr(atrlen)*len1) Call exitshort("매도추적스탑", Atstop,llv(1,low,barnumsinceEntry+1)+atr(atrlen)*len1) End If 위 식은 DD_RangeBreak(v0.22)에다 계약수 결정 방법 및 청산을 추가한 전략 식이다. cont가 계약수로서 cont를 매수, 매도식의 def(=default)와 치환하 여 사용한다. DD_RangeBreak(v.2.1-1)의 margin 0.15~1까지 변화에 다른 손익 구조를 보자. 12 <표 0-4> 증거금 비율과 손익구조-1 증거 금율 총손익 평균손익 건수 승률 손익비 평균 보상 최대 손익비 비율 자본인하액 0.15 11,837,495 12,434 952 49.5 1.51 1.54 13.33 -887,722 0.2 10,076,288 10,584 952 49.5 1.47 1.5 11.35 -887,722 0.25 8,383,310 8,806 952 49.5 1.43 1.46 9.44 -887,722 0.3 5,684,709 5,971 952 49.5 1.37 1.39 6.4 -887,722 0.35 3,508,686 3,686 952 49.5 1.31 1.34 6.17 -568,855 0.4 1,688,571 1,774 952 49.5 1.3 1.33 5.77 -292,681 0.45 1,111,498 1,168 952 49.5 1.32 1.35 6.47 -171,845 0.5 845,230 888 952 49.5 1.34 1.37 7.23 -116,857 0.55 522,393 549 952 49.5 1.36 1.39 7.84 -66,635 0.6 428,906 451 952 49.5 1.38 1.41 8.5 -50,433 0.65 377,782 397 952 49.5 1.39 1.42 9.14 -41,324 0.7 299,217 314 952 49.5 1.41 1.44 9.34 -32,032 0.75 248,339 261 952 49.5 1.42 1.45 10.12 -24,534 0.8 237,951 250 952 49.5 1.44 1.47 10.54 -22,584 0.85 203,603 214 952 49.5 1.46 1.49 11.22 -18,145 0.9 196,500 206 952 49.5 1.47 1.5 10.62 -18,501 0.95 156,028 164 952 49.5 1.47 1.5 11.72 -13,316 1 153,307 161 952 49.5 1.49 1.52 10.9 -14,062 (단위: 천원, %, 배) <표 6-4>를 보면 증거금을 80%(0.8) 이상으로 설정해야 최대자본 인하액이 초 기 투자금액인 2,300만원 이하가 된다. 더욱이 0.8을 사용하더라도 최소 1계 약으로 계속 매매하기 위해서는 추가적인 자금 유입이 필요할 수 있다. <표 6-2>의 고정금액방식과 총손익이 비슷한 수준으로 비교하기 위해서 위 < 표 6-4>의 0.7을 이용하기로 한다. 0.7일 경우 최대 자본인하액이 3,200만원 으로서 2,300만원 재투자 방법에서 추가적으로 자본금이 필요하다. 그러면 이러한 누적 금액 방법과 고정금액 방법의 결과 및 수익곡선은 어떤 차이가 있을까? 우선 테스트 결과를 비교해보면 <표 6-2> 고정 금액 방법보다 0.7을 이용한 재투자 방법의 최대 자본인하액이 1,300만원에서 3,200만원으로 2.4배 이상 증가하였다는 것을 알 수 있다. 하지만 수익곡선의 흐름을 보면 또 다른 면을 볼 수 있다. <그림 0-6> 고정금액과 누적금액 방식(0.7) 400000.00 350000.00 300000.00 250000.00 y = 79.147x + 58865 R 2 = 0.9354 200000.00 150000.00 y = 103.63x - 14129 R 2 = 0.9818 100000.00 50000.00 0.00 1 213 425 637 849 1061 1273 1485 1697 1909 2121 2333 2545 2757 2969 3181 3393 -50000.00 <그림 6-6>을 보면 고정금액 방식(얇은 실선)보다 누적금액 방식(굵은 실선) 의 선 적합도(98%)와 기울기(103.63)가 상당히 높다. 기하급수적인 성장 곡선 으로 발달하여야 하지만 레버리지를 축소하였고, 특별한 재투자 방법을 사용 하지 않았기 때문에 선형으로만 회귀선을 추정하였다. DD_RangeBreak(v.2.1-2)의 초기 자본금 4,000만원(2,300만원으로 재투자할 경 우 증거금 비율이 높으면 매매가 발생하지 않음)으로 설정하여 증거금 비율의 변화에 따른 수익의 변화를 보기로 하자. 14 <표 0-5> 증거금 비율과 손익구조-2 증거 금율 총손익 평균손익 건수 승률 손익비 평균 보상 최대 손익비 비율 자본인하액 0.15 12,820,742 13,467.17 952 49.5 1.53 1.56 14.44 -887,722 0.2 11,266,293 11,834.34 952 49.5 1.5 1.53 12.69 -887,722 0.25 9,697,227 10,186.16 952 49.5 1.46 1.49 10.92 -887,722 0.3 8,281,989 8,699.57 952 49.5 1.43 1.46 9.33 -887,722 0.35 5,708,221 5,996.03 952 49.5 1.37 1.4 6.43 -887,722 0.4 3,347,144 3,515.91 952 49.5 1.31 1.34 6.63 -505,089 0.45 2,026,367 2,128.54 952 49.5 1.32 1.35 6.44 -314,516 0.5 1,282,241 1,346.89 952 49.5 1.34 1.37 7.14 -179,531 0.55 825,854 867.49 952 49.5 1.35 1.38 7.78 -106,140 0.6 691,710 726.59 952 49.5 1.37 1.4 8.38 -82,583 0.65 400,957 423.4 947 49.2 1.37 1.42 8.58 -46,749 0.7 343,321 369.56 929 49.1 1.39 1.44 9.22 -37,220 0.75 296,572 324.48 914 49.1 1.41 1.46 9.36 -31,679 0.8 179,351 203.35 882 48.5 1.4 1.49 9.66 -18,565 0.85 100,049 120.11 833 48.0 1.39 1.5 10.02 -9,985 0.9 70,004 86.96 805 48.0 1.39 1.51 7.89 -8,877 0.95 58,998 74.87 788 47.6 1.4 1.55 11.51 -5,128 1 59,700 76.25 783 47.8 1.42 1.55 11.96 -4,993 (단위: 천원, %, 배) <표 6-5>를 보면 0.65 이상에서는 매매 건수의 변화가 발생한다. 즉 최소 증 거금이나 계약수 이하일 경우에는 매매를 하지 않게 되는 것이다. 역시 0.7 이상에서만 초기자본금으로 최대 자본 인하액을 견딜 수 있는 상황이 된다. 0.7 일 경우의 누적 수익곡선과 수익곡선의 드로다운 그래프를 보면 다음과 같다. <그림 0-7> 누적수익곡선과 드로다운 <그림 6-7>의 드로다운 그래프를 보면 최대 11%이고 평균 6%이다. <그림 6-5> 과 비교해 볼 때 상당히 개선 되었음을 알 수 있다. 결론적으로 전략에 따라 차이가 있겠지만 적절한 증거금율(50% 이상)을 적용 하고, 시스템에서 발생 가능한 최대 손실 이상의 초기 자본금을 가지고 시스 템 트레이딩을 시작해야 한다. 자산관리는 이러한 관점에서 출발하며, 재투자 를 할 경우 수익을 극대화하는 방법을 적용하는 과정이 된다. 그러면 이제부터 본격적으로 자산관리 전략에 대해서 알아보기로 하자. 크게 두 가지 개념을 이용하는데 첫째는 자본에 관계없이 계약수를 변경하는 방법, 둘째는 자산과 계약수 변경에 따른 자산관리 방법에 대해 설명하기로 한다. 16 2. 계약수 변경 방법 여기서는 자본의 변화나 자본에 미치는 위험의 크기와 관계없이 계약수를 변 경하는 방법에 대해 알아보기로 한다. 방법은 두 가지이다. 마틴게일(Martingale) 역 마틴게일(Anti-Martingale) 마틴게일 전략은 직전 매매에서 손실이 발생하면 계약수를 직전 계약수의 2배 로 증가시키고, 이익이 발생하면 다시 단위 계약수로 회귀한다. 예를 들어 단 위 계약수가 1계약일 경우 연속 손실이 3회 발생하였다면 2,4,8 계약으로 계 약수를 증가시킨다. 그러다가 이익이 발생하면 다시 1계약으로 매매를 하는 경우이다. 따라서 연속 손실 구간인 드로다운 구간에서 계약수를 증가시키는 방법으로 상당히 위험이 큰 계약수 증가 방법이다. 역마틴게일 방법은 직전 매매에서 수익이 발생하면 계약수를 직전 계약수의 2 배로 증가시키고 손실이 발생하면 기초 계약수로 회귀한다. 예를 들어 1계약 으로 매매하다가 3번 연속이익이 발생하면 2,4,8 계약으로 계약수를 증가시킨 다. 그러다가 손실이 발생하면 다시 1 계약으로 매매하게 된다. 따라서 누적 수익곡선상 고점에서 많은 계약수로 진입하였다가 손실매매를 하게 되는 경우 손실폭이 급격히 증가하는 문제점이 발생한다. <표 6-2>를 보면 연속 이익 매매 수가 최대 10번이고 연속 손실 매매 수가 최 대 7번이다. 마틴게일 전략을 사용한다면 2, 4, 8, 16, 32, 64, 128 계약으로 진입하게 되고, 역 마틴게일 전략을 사용한다면 2, 4, 8, 16, 32, 64, 128, 256, 512, 1,024 계약으로 진입하게 된다. 횟수가 증가할수록 비현실적인 계 약수로 진입하게 되어 제어가 필요해진다. 계약수 변경 방법을 테스트하기 위 해서 다음과 같은 제어를 사용한다. 연속 손실 횟수도 고려한다. 즉 마틴게일일 경우 1번 손실에서 계약수를 증 가하지 않고, 2번이나 3번 이상 연속적으로 손실이 발생해야만 계약수를 증 가시킨다. 최대 진입 계약수를 제어한다. 실현 불가능한 계약수 진입을 제어한다. 계약수의 증가는 배수뿐 아니라 1계약씩 증가시키는 방법도 있으므로 이러한 방법도 테스트 하고자 한다. <수식 0-2> DD_RangeBreak(v2.3): 마틴게일, 역마틴게일 전략 영역: 전략 이름: DD_ RangeBreak(v2.2) Input : len(0.37), atrlen(20), len1(2.7), consec(1), contlimit(200) Var1=highd(1)-lowd(1) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If barnum =1 Then Var10=1 Var11=0 End If If currentEntrynum>1 Then If i_position=0 And i_position(1)<>0 Then If i_netprofit > i_netprofit(1) Then ‘1. 마틴게일 If i_netprofit < i_netprofit(1) Then ‘2. 역마틴게일 Var11=0 Else Var11=var11+1 End If End If End If If Var11>=consec And i_position=0 And i_position(1)<>0 Then Var10=Var10*2 18 ‘3. 직전계약수 대비 2배로 증가 Var10=Var10+1 ‘4. 직전계약수 대비 1계약 추가 End If If Var11<consec Then Var10=1 End If If Var10>contlimit Then Var10=contlimit End If If ttime<1500 Then If Cond1=False Then Call buy("매수",Atstop,Var10,opend+var1*len) End If If Cond2=False Then Call sell("매도",Atstop,Var10,opend-var1*len) End If End If If position<>0 Then Call exitlong("매수추적스탑",Atstop,hhv(1,high,barnumsinceEntry+1)-atr(atrlen)*len1) Call exitshort("매도추적스탑",Atstop,llv(1,low,barnumsinceEntry+1)+atr(atrlen)*len1) End If <수식 6-2>는 마틴게일/역마틴게일을 모두 포함한 전략식으로서 contlimit로 최대 계약수를 제어하고, consec를 이용해서 연속 손실 횟수를 제어하는데 3 을 입력하면 3번 연속손실이 발생한 순간부터 계약수 변경전략이 작동하는 구 조이다. 위의 수식 중 1과 3을 활성화하면 마틴게일방법에 의해 직전계약수 대비 2배 진입하고, 2와 4를 활성화하면 역마틴게일방법에 의해 직전계약수 대비 1계약 추가 진입한다. 한 가지 주의할 것은 별도의 청산명령 없이 매수 Æ 매도, 매도 Æ 매수로 전 환되는 매매의 경우는 계약수 변경 및 연속손실 매매횟수에 영향을 주지 않게 되어있다. <표 0-6> 마틴게일, 역마틴게일 전략 테스트 결과-1 평가 항목 마틴게일 + 배수증가 역마틴게일 + 배수증가 마틴게일 + 1계약 증가 역마틴게일 + 1계약증가 472,754.39 262,507.81 206,789.67 152,826.08 평균 손익 496.59 275.74 198.07 146.39 최대 손실 -11,115.95 -76,825.46 -2,903.57 -5,252.71 총 매매수 952 952 1,044 1,044 연속 이익 매매수 10 10 10 10 연속 손실 매매수 7 7 7 7 최대 자본 인하액 -45,271.36 -79,223.18 -10,533.09 -8,223.51 승률 49.47 49.47 48.95 48.95 손익비 2.37 1.46 1.79 1.51 평균손익비 2.42 1.49 1.87 1.57 보상 비율 10.44 3.31 19.63 18.58 총 손익 consec 1 1 1 1 contlimit 128 200 8 11 (단위: 천원, %, 배) <표 6-6>을 보면 우선 마틴게일 전략이 역 마틴게일 전략보다 수익과 위험 측 면에 좀더 유용한 결과를 나타내었다. 또한 배수로 계약수를 증가시키는 방법 보다는 1계약씩 계약수를 증가시키는 방법이 보상 비율이 높아 위험이 적다는 것을 알 수 있다. 배수 및 1계약 증가 모두 연속 손실이나 이익이 1번 발생하 는 시점부터 계약수를 증가하는 방법이 유용하다고 판단된다. 우선 배수로 증가하는 방법은 상당히 많은 계약수로 진입하여야 한다. 최악의 경우 128계약(100P기준 증거금: 9억6천만원)이며, 최상의 경우 200계약(100P 기준 증거금: 15억)이다. 또한 1계약 증가 방법도 10계약(100포인트 기준 증 거금: 7,500만원)이 되어 문제가 발생할 소지가 있다. 20 이와 같이 초기자본금을 감안하면 상당히 불합리한 결과라는 것을 알 수 있다. 우선 자본금을 고려하여 개인의 자본금이 무한대가 아니고, 추가 유입 여유도 없다면 마틴게일 전략은 실제로는 아주 제한적인 방법으로 밖에 사용할 수 없 으며, 더 나아가 사용하지 않기를 권장한다. 추가적인 테스트를 실시해보자. “Beyond Technical Analysis 1, 2”의 저자인 Tusar S. Chande는 다음과 같은 전략으로 마틴게일과 역 마틴게일을 테스트 하였다. 기초: 2계약으로 매매 한다. Double or half: 전 거래가 이긴 거래이면 4계약으로, 아니면 1계약으로 매 매한다. Æ 역마틴게일 Half on loss: 전 거래가 손실 거래이면 1 계약으로, 아니면 2계약으로 매 매한다. Æ 역마틴게일 Double on loss: 전 거래가 손실거래이면 4 계약으로, 아니면 2계약으로 거래한다. Æ 마틴게일 <표 6-7>은 테스트 결과로서 우선 Double on loss방법이 가장 높은 수익을 보 여준다. 하지만 최대손실이나 최대 자본인하액이 가장 커, 위험도 크다는 것 을 알 수 있다. 가장 이상적인 것은 손실발생시 1계약으로 줄이는 Half on loss방법으로서 기초 2계약 보다 수익은 적으나, 위험 또한 작아지는 효과(최 대자본인하액 감소)가 발생하기 때문이다. 종합적으로 보면, 연속손실 발생 구간에서 계약수를 늘리는 마틴게일 전략은 상당히 위험스런 계약수 변경 방법으로서, 제한적으로 사용하거나 사용하지 않는 것이 바람직하다. 따라서 권장하는 방법은 역 마틴게일 방법이다. 즉 이익이 나면 계약수를 늘 리는 방법으로서 유용한 자산 관리 전략들은 모두 역 마틴게일 전략에 속한다. <표 0-7> 마틴게일, 역마틴게일 전략 테스트 결과-2 평가 항목 총 손익 기초: 2계약 Double or half Half on loss Double on loss 186,232.35 196,671.70 128,811.95 301,073.15 평균 손익 195.62 206.59 135.31 316.25 최대 손실 -2,265.96 -4,480.50 -2,240.25 -4,531.92 총 매매수 952 952 952 952 연속 이익 매매수 10 10 10 10 연속 손실 매매수 7 7 7 7 최대 자본 인하액 -8,877.22 -11,789.45 -5,887.39 -15,689.42 승률 49.47 49.47 49.47 49.47 손익비 1.68 1.54 1.60 1.77 평균손익비 1.72 1.57 1.64 1.81 보상 비율 20.98 16.68 21.88 19.19 최소 계약수 2 2 1 2 최대 계약수 2 4 2 4 (단위: 천원, %, 배) 계약수만 변경하는 방법은 마틴게일과 역 마틴게일을 이해하기 위해서 설명하 였다. 실제 투자 자산을 기준으로 자산관리 전략을 구사하는 것이 정상적이다. 이제부터 다양한 투자 자산 변화에 따른 계약수 변경 방법에 대해서 알아보기 로 하자. 3. 투자자산 변화에 따른 계약수 변경 방법 주식이나 선물/옵션 매매에 있어 투자자는 2가지 위험에 직면하게 된다. 투자 자산 위험(money risk)과 매매 위험(trading risk)이다. 22 투자 자산의 위험: 한번 매매 시 총자산의 어느 정도를 위험(손실)으로 설정할 것인 가를 결정한다. Î Fixed Fractional Method(고정 부분 투자방법) 매매 위험: 손절매(stop-loss)의 크기를 말한다. 예를 들어 보면, 현재 진입할 때 손절매폭이 20만원이고, 총투자자산의 위험 설정액 2%가 200만원이라 하면, 20만원은 매매 위험이 되고 200만원은 투자자 산의 위험이 된다. 이렇게 투자자산의 위험과 매매 위험을 구분하게 되면 계 약수를 계산할 수가 있게 된다. 계약수 = 투자자산위험 = 2,000,000/200,000 = 10 계약 매매위험 위와 같이 계산을 하게 되면 10계약으로 진입하게 되며, 손실이 발생하게 되 면 매매에서 발생하는 손실은 계약당 200,000 원이고 투자 자본으로는 2,000,000 원 손실이 되는 것이다. 이렇게 투자 금액의 일정 부분만 위험(손 실)에 노출시키는 방법을 고정 부분 투자방법(Fixed Fractional Method)이라 하고, 유용한 자산 관리 전략은 대부분 고정 부분 투자방법이다. 고정 부분 투자방법은 매매 위험의 원천(Source)를 무엇으로 볼 것인가에 따 라서 다양한 종류로 구분된다. 가장 대표적인 매매 위험 원천은 다음과 같다. 증거금이나 초기 자본금 최대 손실 금액, 최대 자본인하액 평균 손실의 배수, 평균 자본인하액의 배수 절대 금액 손절매, 비율 손절매, 변동성(ATR, Range) 손절매 고정 부분 투자방법은 위의 매매 위험 원천을 가지고 투자자산(계약수)을 계 산하게 된다. 계약수 = 총투자자산 × 위험노출비율 (총투자자산 = 초기자본금+누적수익) 매매위험 위 식을 기초로 해서 매매 위험을 무엇으로 보느냐에 따라서 다양한 자산 관 리 전략이 탄생하게 된다. 앞서 청산 전략에서 설명하였다시피 손절매 폭이 결국 매매의 위험이 되고, 자산관리에서 계약수 계산에 중요한 역할을 한다는 것을 알 수 있다. 그 다음으로 위험 노출 비율(F)을 결정하는 방법이 자산 관리에서 가장 중요 한 부분이 된다. 이 비율의 크기가 연속 손실이 발생할 경우에 자본 감소의 크기를 나타내기 때문이다. 예를 들어 <표 6-2> 와 같이 연속 손실이 7번 발 생한다고 할 경우에 위험 노출 비율에 따른 자산의 감소는 크기는 다음과 같 다. <표 0-8> 위험 노출 비율에 따른 자산 감소 비율 위험 노출 비율 자산 감소 비율 2% 10% 20% 30% 40% 50% 13.19% 52.17% 79.03% 91.76% 97.20% 99.22% 주) 재투자 기준 <표 6-8>처럼 위험노출 비율이 10%씩 7번 손실을 보게 되면 52%의 자산감소가 발생하며, 원금을 회복하기 위해 약 100%의 수익이 발생해야 한다. 따라서 합 리적인 위험노출비율을 선정하는 것이 중요하다. 위험노출비율은 Ralph Vince 가 개발한 Optimal F와 Secure F가 많이 사용된다. 본서에서는 Optimal F나 Secure F외에 현실적이고, 실용성이 높은 자산관리 방법을 설명하고자 한다. (1) 초기 자본금 이용: 앞서 설명한 초기 자본금 계산식인 [최대자본인하 액 *1.5 + 증거금]을 매매 위험으로 간주하고, 총 투자자산에 나누어 계약수 계산 (2) 증거금 이용: 증거금을 다 잃을 수 있다는 관점에서 증거금을 매매 위 험으로 간주하여, 총 투자자산의 일정 금액에 나누어 계약수 결정 (3) Kelly 공식 이용: Kelly가 개발한 고정 부분 방법으로 계약수 계산 24 (4) 일정 금액 이용: 매매 당 위험의 일정 금액을 이용하여 계약수 계산 (5) % risk model: % 위험을 이용한 계약수 결정 방법 사용 (6) volatility model: 변동성을 이용한 계약수 결정 방법 사용 (7) fixed ratio model: 위의 고정 부분 방법이 차이가 있는 계약수 결정 방법으로서 고정 비율 방법임 <수식 0-3>기본전략(DD_RangeBreak(v0.22)) 영역: 전략 이름: DD_RangeBreak(v 0.22) Input: len(0.37), Atrlen(20), Len1(2.7) Var1=highd(1)-lowd(1) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then Call buy("매수",Atstop, Def, opend+var1*len) End If If Cond2=False Then Call sell("매도",Atstop, Def, opend-var1*len) End If End If If position<>0 Then Call exitlong("매수추적스탑", Atstop, hhv(1,high, barnumsinceEntry+1)-atr(atrlen)*len1) Call exitshort("매도추적스탑", Atstop, llv(1,low,barnumsinceEntry+1)+atr(atrlen)*len1) End If 위의 7가지 방법에 대한 기본전략은 <수식 6-3>이며, 초기자본금이 1,500만원 이지만 자산관리전략의 특징상 초기자본금을 5,000만원으로 통일하여 적용하 고, 계약수 계산시 1계약 보다 작은 경우와 유지증거금이 1,500만원 이하가 되면 매매를 중단한다. 또한 최고 진입계약수는 200계약 이하로 한다. 각 전략에서 한번의 매매에서 발생할 수 있는 총자산(초기자본금+누적수익)대 비 최대 손실금액 비율을 확인하기 위해<수식 6-4>를 사용하기로 한다. <수식 0-4> 단일매매 최대 손실률 영역: 지표 이름: DD_단일매매 최대 손실률 Input: capital(50,000,000) Var1=capital+i_netprofit(1) If i_position=0 And i_position(1)<>0 Then If Var1<>0 And i_netprofit-i_netprofit(1)<0 Then Var2=(i_netprofit(1)-i_netprofit)/var1 End If If Var2>var3 Then Var3=var2 End If End If Call ploti1("단일매매 최대손실률",Var3) (1) 초기 자본금 이용 초기 자본금(Initial Capital)이용 방법은 [최대 자본인하액 *1.5 + 증거금] 수식을 이용하여 계약수를 변경하는 방법이다. 즉 이 금액이 3,000만원이면 1 계약으로 매매하고 6,000 만원이 되면 비로소 2계약으로 매매하게 된다. 기본식을 적용할 경우 최대자본인하액이 4,438,610원이므로, 수식에 의해 약 1,500만원이 계약수 변경의 기준이 된다(4,438,610*1.5 + 7,500,000원(100 포 인트 기준, 15% 증거금)). 초기 자본금을 5,000만원으로 설정하기로 하였으므 로 실제 증거금 계산방식을 사용하기로 한다. 26 최대 자본인하액×1.5+종가로 계산한 진입금액×증거금율 <수식 0-5> 초기자본금 이용전략 영역: 전략 이름: DD_ RangeBreak(v3.0) Input: len(0.37), atrlen(20), len1(2.7), capital(50,000,000), margin(0.15), maxdrawdown(4,500,000), maxcont(200) cont= int((capital+i_closeequity)/((close*500000*margin)+maxdrawdown*1.5)) If cont>maxcont Or cont>int((capital+i_closeequity)/(close*500000*0.15)) Then cont=maxcont Else cont=cont End If If cont<1 Or capital+i_closeequity < 15000000 Then cont=0 End If ‘이하 기본식<수식 6-3> 추가--------------------------------------------- margin을 0.15~1까지 최적화하여 이중 최대자본인하액이 5,000만원 이하인 최 적변수값의 결과는 <표 6-9>와 같다. 최대 18계약까지 진입하면서 수익곡선상 단일매매 최대손실률이 2.9% 이고 수 익곡선상의 드로다운은 11%발생하였다. 초기 자본금 5,000만원으로 견딜 수 있는 수준으로 판단된다. 총 손익이 4억6,000만원으로 초기 자본금 대비 9.3배이다. 하지만 손익비, 평 균손익비, 보상 비율이 하락하는 양상으로써 수익 증가와 위험 증가가 동시에 발생함을 알 수 있다. <표 0-9> 초기자본금 이용전략 결과 평가 항목 기본전략 총 손익 초기자본금 이용전략 93,116.17 458,268.45 평균 손익 97.81 481.37 최대 손실 -1,132.98 -9,768.46 총 매매수 952 952 연속 이익 매매수 10 10 연속 손실 매매수 7 7 최대 자본 인하액 -4,438.61 -48,719.42 승률 49.47 49.47 손익비 1.68 1.41 평균손익비 1.72 1.44 보상 비율 20.98 9.41 최소 계약수 1 최대 계약수 18 단일매매 최대손실률 2.9% 최대 수익곡선 드로다운(%) 11% 주) 최적변수: margin(0.6), (단위: 천원, %, 배) (2) 증거금 이용 초기 자본금 이용과 유사한 형태로서 증거금(Margin)을 매매 위험으로 간주하 고 다음과 같은 식으로 계약수를 계산한다. 28 투자자본 × F 종가기준진입금액 × 증거금율 <수식 0-6> 증거금 이용전략 영역: 전략 이름: DD_ RangeBreak(v3.1) Input: len(0.37), atrlen(20), len1(2.7), capital(50,000,000), margin(0.15), fraction(0.19), maxcont(200) cont= int(((capital+i_closeequity)*fraction)/(close*500000*margin)) If cont>maxcont Or cont>int((capital+i_closeequity)/(close*500000*0.15)) Then cont=maxcont Else cont=cont End If If cont<1 Or capital+i_closeequity < 15000000 Then cont=0 End If ‘이하 기본식<수식 6-3> 추가--------------------------------------------주) 변수는 최적화 변수임. <표 6-10>은 Fraction(위험 노출 비율)을 최적화하여 최대 자본 인하액이 5,000만원 이하인 최적 비율을 계산하여 적용된 결과이다. 평가 항목 <표 0-10> 증거금 이용전략 결과 기본전략 총 손익 증거금 이용전략 93,116.17 413,128.75 평균 손익 97.81 433.96 최대 손실 -1,132.98 -8,619.23 총 매매수 952 952 연속 이익 매매수 10 10 연속 손실 매매수 7 7 최대 자본 인하액 -4,438.61 -42,049.87 승률 49.47 49.47 손익비 1.68 1.41 평균손익비 1.72 1.44 보상 비율 20.98 9.82 최소 계약수 최대 계약수 단일매매 최대손실률 최대 수익곡선 드로다운(%) (단위: 천원, %, 배) 1 17 2.5% 10% 초기 자본금 이용전략보다 수익과 손실이 동시에 적게 발생하지만 큰 차이가 없는 것을 알 수 있다. (3) Kelly 공식 이용 kelly 공식은 합리적인 위험노출비율(fraction)을 결정하는 방법들 중 가장 기초가 되는 공식이다. 공식은 다음과 같다. 잔량비율(Fraction) = (평균손익비 + 1) × 승률 - 1 평균손익비 따라서 <표 6-10>의 v 0.22(기본전략)를 Kelly 공식으로 계산해보면, F= (1.72 + 1) × 0.4947 − 1 = 0.20 = 20% 1.72 즉 투자 자산의 20%를 사용해서 자산관리 전략에 적용하면 된다. Larry William은 “Long-Term Secrets to Short Term Trading” 에서 매매 위험으로 증거금(margin)을 사용하였다. 이 방법을 이용해보기로 하자. 계약수 = 투자자산 × F 종가기준진입금액 × 증거금율 위 식은 결국 앞서 설명한 증거금 이용 방법과 동일하며, 단지 F값이 20%로 고정된다. 따라서 위험조정값을 곱하여 투자 금액을 줄이고 매매 위험을 최대 손실금액으로 대치한다. 30 계약수 = 투자자산 × F × Risk 최대손실금액 최대 손실금액은 <표 6-10>을 보면 계약당 1,132,980 원로서 120 만원으로 계 산하여 테스트를 해보기로 한다. <수식 0-7> Kelly공식 이용 전략 영역: 전략 이름: DD_ RangeBreak(v3.2) Input: len(0.37), atrlen(20), len1(2.7), capital(50,000,000), margin(0.15), fraction(0.18), maxcont(200), Kelly(0.2), method(1) If method=1 Then cont= int(((capital+i_closeequity)*kelly)/(close*500000*margin)) Else cont= int(((capital+i_closeequity)*kelly*fraction)/1200000) End If If cont>maxcont Or cont>int((capital+i_closeequity)/(close*500000*0.15)) Then cont=maxcont Else cont=cont End If If cont<1 Or capital+i_closeequity < 15000000 Then cont=0 End If ‘이하 기본식<수식 6-3> 추가--------------------------------------------- <수식 6-7>에서 method=1을 선택하면 Kelly 공식에서 도출된 20%를 사용해서 계약수를 계산하고, 1외의 숫자를 선택하면 최대 손실 금액(120만원)으로 계 산하게 된다. 결과는 다음과 같다. <표 0-11> Kelly공식 이용 전략 결과 평가 항목 총 손익 기본전략 Method = 1 Method = 2 93,116.17 483,306.06 382,033.80 평균 손익 97.81 507.67 401.30 최대 손실 -1,132.98 -10,917.69 -7,216.43 총 매매수 952 952 952 연속 이익 매매수 10 10 10 연속 손실 매매수 7 7 7 최대 자본 인하액 -4,438.61 -50,719.86 -44,620.80 승률 49.47 49.47 49.47 손익비 1.68 1.41 1.41 평균손익비 1.72 1.44 1.44 보상 비율 20.98 9.53 8.56 최소 계약수 1 1 최대 계약수 20 13 단일매매 최대손실률 3% 2.6% 최대 수익곡선 드로다운(%) 10.5% 11% (단위: 천원, %, 배) <표 6-11>의 method = 1은 Kelly 공식을 이용한 것으로서 F 비율은 20%를 사 용하였고, 앞서 설명한 <표 6-10>에 있는 결과는 19%를 사용한 차이밖에 없다. method = 2는 최대 손실 금액을 이용한 결과이다. 최대 13계약까지 진입하였 으며 단일매매 최대 손실률은 2.6% 수준이다. 32 (4) 일정 금액 이용 일정 금액을 이용하는 방법과 앞으로 설명할 %risk model, volatility model 은 손절매와 바로 연결되는 자산 관리 형태로서 가장 일반적으로 사용되는 전 략이다. 일정 금액을 이용하는 방법은 말 그대로 손절매 포인트 금액을 이용 한다는 의미이다. 즉 금액이나 포인트를 이용한 손절매 방법을 사용할 경우, 해당 금액이 바로 매매 위험으로 간주되어 계약수를 계산하게 된다. 더 나아가 평균 손실의 2 ~ 3 배 수준이나 최대 자본인하액, 평균 자본 인하액의 배수 등이 사용된다. 특 히 이중에서 최대 손실을 이용하는 방법을 일반적으로 사용하는데, Larry William이 권장한 방법이라 해서 Larry William 방법이라고도 한다. 계약수 = 투자자산 × F 최대손실 위와 같은 계산식을 사용할 경우 어느 정도 금액 단위로 계약수가 변경 되며, 1계약을 매매하기 위한 초기 준비 자금은 어느 정도이어야 하는가를 계산할 수 있다. 예를 들어 2%(F=0.02)를 적용하고 최대 손실은 120만원으로 설정하 면 1계약 투자자산은 다음과 같다. 초기 자본금 = 최대손실 =1,200,000/0.02 = 60,000,000원 F 즉 6,000만원이 있어야 1계약으로 매매가 가능해지고 1억2,000만원이 되어야 2계약으로 매매가 가능해진다. 앞서 설명한 초기 자본금 결정 방법에서 위험 노출 비율을 이용할 경우의 초기 자본금 결정 방법이 된다. 여기서는 일관성을 위해서 5,000만원 초기 투자자산을 그대로 유지한다. 전략 식으로 테스트를 해보자. <수식 0-8> 일정금액 이용전략 영역: 전략 이름: DD_ RangeBreak(v3.3) Input: Len(0.37), atrlen(20), len1(2.7), capital(50000000), riskamount(1200000), fraction(0.035), maxcont(200) cont= int(((capital+i_closeequity)*fraction)/riskamount) If cont>maxcont Or cont>int((capital+i_closeequity)/(close*500000*0.15)) Then cont=maxcont Else cont=cont End If If cont<1 Or capital+i_closeequity < 15000000 Then cont=0 End If ‘이하 기본식<수식 6-3> 추가--------------------------------------------- 평가 항목 <표 0-12> 일정금액 이용전략 결과 기본전략 총 손익 385,279.05 평균 손익 97.81 404.70 최대 손실 -1,132.98 -6,895.38 총 매매수 952 952 연속 이익 매매수 10 10 연속 손실 매매수 7 7 최대 자본 인하액 -4,438.61 -42,677.58 승률 49.47 49.47 손익비 1.68 1.43 평균손익비 1.72 1.46 보상 비율 20.98 9.03 최소 계약수 최대 계약수 단일매매 최대손실률 최대 수익곡선 드로다운(%) (단위: 천원, %, 배) 34 일정금액 이용전략 93,116.17 1 13 2.2% 11.5% 최대 손실금액을 이용하여 계약수를 계산하였으며 최대 자본 인하액이 5,000 만원을 넘지 않는 범위에서 fraction의 최적값은 3.5%였다. 최대 13계약이었으며, 단일매매 최대손실률은 2.2%로 낮은 수준이었다. (5) % Risk Model % risk model이 일정금액과 다른 점은 비율을 이용한다는 것이다. 비율을 이 용한 손절매나 추적스탑과 잘 맞는 자산 관리 방법으로 Optimal F와 함께 대 표적인 역 마틴게일 전략이다. 계약수= 투자자산 × F 가격 × 손절매비율 손절매 금액을 사용하거나 손절매비율을 금액으로 환산하여 사용하거나 모 두 % Risk model 의 범주에 속하는데 여기에는 다음과 같은 격언이 있다. 총투자자산대비 한번 매매에 노출되는 투자 위험 비율은 2%를 넘지 말라. 이를 2% rule 이라 하는데, 다시 말해서 매매 위험이 어떻든 Fraction(=F)값 은 2% 이하를 사용하라는 것이다. 이는 <표 6-8>에 기인한다. 한번 매매에서 2% 자산 손실이 발생하면 7번 연속 손실에서는 자산의 13% 손실이 발생한다. 따라서 F 값을 작게 가져가는 것이 생존 여부에 중요한 역할을 하게 된다. Alexander Elder는 그의 저서 “Come Into My Trading Room”에서 위험의 크기 가 2% 룰을 벗어나는 경우엔 매매를 하지 않아야 하며, 만약 1달 내에 2% 손 실이 3번 발생하여 6%대의 손실이 발생하면 해당 달에는 매매를 중단하라고 제안하였다. 실질적으로는 1~10% 사용하게 된다. 손절매 폭이 좁을수록 많은 계약수 진입 이 가능해진다. 그러면 전략식 및 테스트를 해보기로 하자. <수식 0-9> %Risk Model전략 영역: 전략 이름: DD_ RangeBreak(v3.4) Input: len(0.36), len1(0.015), capital(50000000), fraction(0.021), maxcont(200) cont= int(((capital+i_closeequity)*fraction)/((close*len1)*500000)) If CONT>maxcont Or cont>int((capital+i_closeequity)/(close*500000*0.15)) Then cont=maxcont Else cont=cont End If If cont<1 Or capital+i_closeequity <15000000 Then cont=0 End If Var1= highd(1)-lowd(1) Cond1= exitname(1)="매수추적스탑" And tdate=exitdate(1) _ And exitprice(1)>opend+var1*len Cond2= exitname(1)="매도추적스탑" And tdate=exitdate(1) _ And exitprice(1)<opend-var1*len If ttime<1500 Then If Cond1=False Then ' cond1 이 거짓이면 Call buy("매수",Atstop,cont,opend+var1*len) End If If Cond2=False Then ' cond2가 거짓이면 Call sell("매도",Atstop,cont,opend-var1*len) End If End If If position <>0 Then '현재 포지션이 없지 않다면, 1=매수 포지션, -1 = 매도 포지션 Call exitlong("매수추적스탑",Atstop,hhv(1,high,barnumsinceEntry+1)*(1-len1)) Call exitshort("매도추적스탑",Atstop,llv(1,low,barnumsinceEntry+1)*(1+len1)) End If 36 이 식은 당일 진입하여 수익이 발생한 경우 같은 방향으로 재진입을 제한한 전략식인 DD_RangeBreak(v0.1)에 %Risk Model을 적용한 수식이다. 1.5% 추적 스탑을 매매위험으로 간주하고 계약수를 계산하였다. 변수fraction의 최적값 은 2.1% 이다. <표 0-13> %Risk Model전략 결과 평가 항목 총 손익 기본전략 %Risk Model 93,116.17 336,775.72 평균 손익 97.81 319.22 최대 손실 -1,132.98 -8,640.36 총 매매수 952 1,055 연속 이익 매매수 10 7 연속 손실 매매수 7 6 최대 자본 인하액 -4,438.61 -48,010.95 승률 49.47 50.71 손익비 1.68 1.26 평균손익비 1.72 1.22 보상 비율 20.98 7.01 최소 계약수 1 최대 계약수 16 단일매매 최대 손실률 2.2% 최대 수익곡선 드로다운(%) 12% (단위: 천원, %, 배) 최대 16계약까지 진입하며 단일매매 최대 손실률은 2.2%로서 낮은 수준이나, 최대 수익곡선 드로다운이 12%로 다소 크다는 것을 알 수 있다. (6) Volatility Model 변동성을 이용해서 매매 위험을 가변적으로 가져가는 방법은 앞서 많이 사용 한 ATR 청산 전략이다. 따라서 %risk model에서 ATR 매매 위험으로 대체 하면 된다. 계약수 = 투자자산 × F 변동감안손절매 ( ATR ) 변동성을 이용할 경우 변동성이 매우 작은 구간에서는 진입계약 수가 많아지 므로 계약수를 제한하는 최적화를 적용하여 전략을 테스트해보자 <수식 0-10> Volatility Model 전략 영역: 전략 이름: DD_ RangeBreak(v3.5) Input: len(0.37), atrlen(20), len1(2.7), capital(50000000), fraction(0.014), maxcont(200) cont= int(((capital+i_closeequity)*fraction)/(atr(atrlen)*len1*500000)) If cont>maxcont Or cont>int((capital+i_closeequity)/(close*500000*0.15)) Then cont=maxcont Else cont=cont End If If cont<1 Or capital+i_closeequity <15000000 Then cont=0 End If ‘이하 기본식<수식 6-3> 추가--------------------------------------------- 38 평가 항목 총 손익 <표 0-14> Volatility Model 전략 Volatility 기본전략 Model-1(f=.014) (계약수 무제한) 93,116.17 303,076.15 평균 손익 97.81 336.00 최대 손실 -1,132.98 -8,582.40 총 매매수 952 902 연속 이익 매매수 10 10 연속 손실 매매수 7 7 최대 자본 인하액 -4,438.61 -49,547.85 승률 49.47 49.00 손익비 1.68 1.41 평균손익비 1.72 1.47 보상 비율 20.98 6.12 최소 계약수 최대 계약수 단일매매 최대 하락률 최대 수익곡선 드로다운(%) 1 24 1.7% 12% Volatility Model-2(f=.016) (19계약수제한) 460,596.64 493.14 -9,933.46 934 10 7 -48,283.81 49.25 1.42 1.46 9.54 1 19 1.9% 10.5% (단위: 천원, %, 배) <그림 0-8> 고정계약 방법과 Volatility Model 방법의 누적수익곡선 600000.00 500000.00 400000.00 y = 121.77x + 133291 R 2 = 0.931 300000.00 200000.00 y = 0.0185x 2 + 108.07x - 21356 R 2 = 0.9829 100000.00 0.00 1 -100000.00 218 435 652 869 1086 1303 1520 1737 1954 2171 2388 2605 2822 3039 3256 3473 <표 6-14>와 같이 19계약으로 제한하였을 경우로 수익과 보상비율이 향상되었 다. 이렇게 변동성이 적어질 경우 계약수를 제어하는 방법이 유용하다는 것을 알 수 있다. <그림 6-8>은 고정계약방법과 Volatility Model방법이 적용된 전략의 누적수 익곡선을 비교한 것이다. 고정 계약 방법은 Volatility Model 방법과 수익을 맞추기 위해 5계약 진입으 로 설정하였다. 그림을 보면 고정 계약 방법(얇은 실선)이 선형적으로 수익곡 선이 발달하는 반면 Volatility Model방법(굵은 실선)은 2차 다항식형태로 수 익곡선이 발달하고 있다. 이전까지 설명한 모든 자산관리 방법은 위와 같은 수익곡선 증가 형태를 가지 고 있다. 실제로 위 자산 관리 방법들이 상당히 제어된 형태로 개발되어 수익 곡선이 기하급수적인 형태로는 잘 나타나지 않고, 선형성이 강한 형태이거나 다항식으로 설명력이 높은 형태가 된다. 다양한 청산전략 중 어떤 방법이 더 효과적일 것인가는 단언할 수 없지만, 자산관리전략을 적용하는 것이 그렇지 않은 것보다 좋다고 판단한다. 시장에서 생존할 수 있게 해주고 수익곡선의 기하급수적인 증가가 가능하기 때문이다. 지금까지 설명한 6가지가 Fixed Fractional Method(고정 부분 투자 방법)이다. 그럼 이제부터 고정 부분 투자 방법과 다소 다른 논리로 자산 관리 방법에 접 근 하는 Fixed Ratio Method(고정 비율 투자 방법)에 대해서 알아보기로 하자. (7) 고정 비율 투자 방법(Fixed Ratio Method) 고정 비율 투자 방법은 “The Trading Game”의 저자인 Ryan Jones가 개발한 자 산관리 방법이다. 고정 부분 투자 방법과 기본적인 구조는 크게 다르지 않다. 차이가 나는 부분 40 은 자본 증가나 감소에 따라 계약수를 선형적으로 증가시키느냐, 아니냐의 차 이가 있다. 고정 비율 투자 방법은 비선형적인 증가 방법을 사용한다. <그림 0-9> 고정 비율 투자 방법과 고정 부분 투자 방법 600.00 500.00 120.00 Fix e d r a tio 100.00 400.00 80.00 300.00 60.00 200.00 40.00 100.00 Fix e d Fr a c tion - 10 ,0 00 60 ,00 0 ,0 00 , 11 0, 000 00 0, 16 00 0, 0 00 0 , 21 0, 000 00 26 0,0 0 0, 00 0 0, 31 00 0, 0 00 0 , 36 0, 000 00 0, 41 00 0, 0 00 46 0,0 0 0, 00 0 0 , 51 0, 000 00 0, 00 0 - 20.00 <그림 6-9>를 보면 1,000만원에서 5억5천만 원까지 자산이 꾸준히 증가할 때, 고정 부분 투자 방법(Fixed Fractional Method)를 통해서 위험 노출 비율(=F 값) 2%을 설정하였을 경우의 계약수 그래프로서 자본증가에 따른 선형적 계약 수 증가를 보여준다. 반면 자본 증가에 따라 로그적 계약수 증가를 보이는 곡선(굵은 실선)이 바로 고정 비율 투자 방법이 된다. Ryan Jones가 개발한 고정 비율 투자 방법은 고 정 부분 투자 방법의 문제점을 해결하는 과정에서부터 시작된다. 고정 부분 투자 방법의 문제점은 비대칭 레버리지(asymmetric leverage)에 있 다. 간단한 예를 들어보자. 3,000만원으로 1계약을 매매하고 있고 1,000만원 이 증가하면 2계약으로 매매하기로 하였을 경우 3,000만원에서 200만원 손실 이 발생하는 것과 3,500만원에서 200만원이 손실이 발생하는 것은 자본 대비 6.7%와 5.7%로 차이가 있다. 즉 동일한 금액의 손실이 발생하여도 현재의 자 산규모에 따라 위험의 비율이 비대칭이 된다. 또 하나 2%룰과 같이 작은 위험 노출 비율을 사용하게 되면 대규모 투자자금 에서는 문제가 없지만, 투자 자본이 적을 경우에는 기하급수적인 상승 효과를 보기 위해서 상당히 오랜 기간을 기다려야 하는 문제점을 나타낸다. 따라서 이러한 문제점들을 해결하기 위해서 고정 비율 투자 방법을 사용하게 되는 것 이다. Ryan Jones가 설명하는 고정 비율 투자 방법의 장점은 다음과 같다. 가능한 한 빠르게 투자자본의 기하급수적인 증가(geometric growth)를 가 능하게 한다. 가능한 한 투자 위험을 감소시킬 수 있다. 대칭적인 레버리지 형태로서 균형적인 누적수익곡선 증가가 가능하다. 고정 비율 투자는 델타(delta)에 따라서 공격적인 방법과 보수적인 방법으로 구분된다. 계약수 계산식은 다음과 같다. 1 총손익 2 ) ) 계약수 = 0 .5 × (1 + (1 + 8 × delta 위 식은 초기 자본금의 크기를 고려하지 않고 총 손익의 증감을 이용해서 고 정 비율 투자 방법의 계약수를 결정하는 식이다. 여기서 문제는 delta를 어느 정도 수준으로 결정하느냐가 관건이 된다. 우선 전략 식을 작성하도록 하자. 42 <수식 0-11> 고정 비율 투자 전략 영역: 전략 이름: DD_ RangeBreak(v3.6) Input: len(0.37), atrlen(20), len1(2.7), capital(50000000), delta(8000000), maxcont(200) If i_closeequity<delta Then If int((capital+i_closeequity)/(close*500000*0.15))>1 Then cont=1 Else cont=0 End If Else cont= int(0.5*(1+power(1+8*(i_closeequity)/delta,0.5))) End If If CONT>maxcont Or cont>int((capital+i_closeequity)/(close*500000*0.15)) Then cont=maxcont Else CONT=cont End If If cont<1 Or capital+i_closeequity <15000000 Then cont=0 End If Var1=highd(1)-lowd(1) Cond1= tdate=exitdate(1) And position(1)=1 Cond2= tdate=exitdate(1) And position(1)=-1 If ttime<1500 Then If Cond1=False Then Call buy("매수",Atstop,cont,opend+var1*len) End If If Cond2=False Then Call sell("매도",Atstop,cont,opend-var1*len) End If End If If position<>0 Then Call exitlong("매수추적스탑",Atstop,hhv(1,high,barnumsinceEntry+1)-atr(atrlen)*len1) Call exitshort("매도추적스탑",Atstop,llv(1,low,barnumsinceEntry+1)+atr(atrlen)*len1) End If 위 식에서 delta에 800만원을 사용하였다. 최적화를 통해서 초기 자본금 보다 작은 최대 자본인하액을 가지는 delta값 중 최적값을 설정한 것이다. 나머지 제어 등은 이전 전략식과 동일하다. 고정 부분 투자 방법과 고정 비율 투자 방법을 비교하기 위해서 Volatility Model의 결과와 비교해 보기로 하자. <표 0-15> 고정 부분 방법(volatility model)과 고정 비율 투자 방법 비교 고정 부분 방법 평가 항목 고정 비율 방법 (volatility model) 총 손익 460,596.64 531,607.73 평균 손익 493.14 558.41 최대 손실 -9,933.46 -6,847.20 총 매매수 934 952 연속 이익 매매수 10 10 연속 손실 매매수 7 7 최대 자본 인하액 -48,283.81 -45,970.14 승률 49.25 49.47 손익비 1.42 1.48 평균손익비 1.46 1.51 보상 비율 9.54 11.56 최소 계약수 1 1 최대 계약수 19 12 단일매매 최대 하락률 1.9% 3.4% 최대 수익곡선 드로다운(%) 10.5% 9% <표 6-15>를 보면 총 매매수가 같지 않아서 정확한 비교는 힘드나 단일매매 최대 하락률이 3.4%로 증가한 것을 제외하고, 고정 비율 투자 방법이 좀더 적 은 위험에 높은 수익을 달성하였음을 알 수 있다. 그러면 여기서 고정 계약수 방법과 고정 부분 방법(volatility model)과 고정 비율 방법의 수익곡선을 비교해 보기로 하자. 44 <그림 0-10> 고정계약수, 고정부분투자방법, 고정비율투자방법의 수익곡선비교 800000.00 700000.00 고정비율 v 0.36 y = 185.38x + 16736 2 R = 0.9842 600000.00 500000.00 400000.00 고정계약(6계약) v 0.25(6계약) y = 148.55x + 162448 2 R = 0.9303 X Y 300000.00 200000.00 Z 100000.00 고정부분 v 0.35 y = 0.0198x 2 + 108.62x - 19440 2 R = 0.9844 0.00 1 212 423 634 845 1056 1267 1478 1689 1900 2111 2322 2533 2744 2955 3166 3377 -100000.00 <그림 6-10>고정계약수(X)와 고정비율방법(Y)은 선형회귀선에 의해 선 적합 도가 높아지며 Volatility Model(Z)은 선형회귀선 보다 다항식 형태의 회귀 선에 적합도가 높아진다. 그러나 고정 비율 방법이 고정 계약수 방법보다 선 적합도가 높고 Volatility Model보다 초기에 수익곡선을 가파르게 상승시킨다. 4. 정리 자산관리 전략은 언제 계약수를 늘려야 하고, 언제 계약수를 줄여야 하는지, 언제 매매를 중단해야 하는지를 결정하는 방법이다. 자산관리 전략은 투자위 험을 관리하여 시장에서 생존이 가능하게 해주는 전략이라 할 수 있다. 유용한 자산관리 전략은 이익이 나면 계약수를 늘리는 역마틴게일(antimartingale) 전략이다. 자산관리 방법은 두 가지 정도로 크게 구분되는데 고 정 부분 투자 방법(Fixed Fractional Method)과 고정 비율 투자 방법(Fixed Ratio Method)이 있다. 각각의 전략은 장단점을 가지고 있어 어느 것이 우월하다고 단언하기 어려우 며 자신의 자산의 크기와 자산 활용 목적 등에 따라 자산관리 전략들을 적절 하게 사용하는 것이 바람직하다. 제공된 전략들은 다음과 같다. <표 0-16> 제공된 계약수 변경 전략들 전략명 설명 DD_RangeBreak(v2.1-1, 2) 증거금 이용 계약수 계산 방법 DD_RangeBreak(v2.2) 마틴게일/역 마틴게일 계약수 DD_RangeBreak(v3.0) 고정 부분 투자 방법: 초기 자본금 이용 DD_RangeBreak(v3.1) 고정 부분 투자 방법: 증거금 이용 DD_RangeBreak(v3.2) 고정 부분 투자 방법: Kelly 공식 이용 DD_RangeBreak(v3.3) 고정 부분 투자 방법: 일정금액 이용 DD_RangeBreak(v3.4) 고정 부분 투자 방법: % Risk model DD_RangeBreak(v3.5) 고정 부분 투자 방법: Volatility Model DD_RangeBreak(v3.6) 고정 비율 투자 방법: Delta 이용 46 제 7 장 평가 및 최적화 투자의 핵심 원칙: 매매전략의 범용성 (Robust)을 확인하라. 시스템 트레이딩의 개발과정은 반복적인 평가가 상당 부분을 차지한다. 또한 최적화 과정에도 많은 시간이 소요된다. 진입 전략을 개발하고 평가, 청산전 략을 적용하면서 평가, 자산관리 전략을 적용하면서 평가, 더 좋은 진입이나 청산 및 자산관리 전략을 찾는 과정에서도 평가를 하게 된다. 최적화도 하나 의 전략을 개발하는 과정에서 많이, 반복적으로 진행된다. 더 나아가 실전매 매를 하면서도 평가 및 최적화를 하는 과정은 반복된다. 앞서 제 2 장에서 기초적인 평가 항목 및 평가 방법에 대해서 설명하였다. 여 기서는 추가적인 평가 항목 및 평가 방법을 심도있게 이해해 보도록 하자. 전략은 DD_RangeBreak(v0.22)를 사용하였다. 1. 평가(Evaluation) DD_RangeBreak(v0.22)를 10분봉 연결선물지수에 적용하고, 시뮬레이션 보고서 를 보면 다음과 같다. <그림 0-1> 시뮬레이션 보고서 시뮬레이션 보고서를 실행하면 종합보고서가 가장 먼저 나오며, 왼쪽 틀 (frame)에 종합보고서, 거래내역, 전략 분석, 자산 분석, 기간 분석, 시간 분 석, 그래프 등 총 7가지의 보고서를 확인 할 수 있다. 이제 각각에 대해서 알아보기로 하자. 2 (1) 종합보고서 <표 0-1> 종합 보고서 평가 항목 전체 매수 매도 총손익 93,116.18 42,326.57 50,789.61 총이익 229,400.50 110,545.32 118,855.18 총손실 -136,284.32 -68,218.75 -68,065.57 미청산 손익 0.00 0.00 0.00 지급 수수료 8,139.87 N/A N/A 추정 슬리피지 0.00 N/A N/A 평균손익 97.81 88.00 107.83 평균이익 487.05 456.80 519.02 평균손실 -283.34 -285.43 -281.26 최대이익 2,725.08 2,725.08 2,712.32 최대손실 -1,132.98 -1,132.98 -1,120.12 총 매매수 952 481 471 총 이익 매매수 471 242 229 총 손실 매매수 481 239 242 최대연속 이익매매수 10 7 6 최대연속 손실매매수 7 10 7 승 률 49.47 50.31 48.62 손익비 1.68 1.62 1.75 평균 손익비 1.72 1.60 1.85 -4,438.61 -5,454.08 -5,302.93 20.98 7.76 9.58 -4,219.36 N/A N/A 평균 총효율 -5.86 -5.32 -6.41 Sharpe Ratio 0.97 0.62 0.70 RINA Index 96.24 -34.92 -37.50 최대자본인하액 보상비율 최대누적손익인하액 (단위: 천원, %, 배) 대부분의 항목들은 기초적인 분석(제2, 3장)에서 설명하였다. 추가된 항목들 은 다음과 같다. 1) 최대 누적손익 인하액 누적 수익 곡선상의 최고 수익 대비 최대인하액으로서 최대자본인하액 계산시 미실현손실금을 제외한 청산기준 인하액을 의미한다. 2) 평균 총 효율 얼마나 시장에 잘 진입하고, 잘 청산하였는지를 나타내는 지표이다. 진입 효 율과 청산 효율로 구분되어 설명되고, 여기서는 진입과 청산의 총 효율의 평 균값을 나타내고 있다. 매수의 경우 저가에 가깝게 진입하면 진입효율이 높아 질 것이고, 고가에 가깝게 청산하면 청산효율이 높아져 평균 총 효율이 높아 질 것이다. 진입 효율: 매수 = 매매기간중최고가 - 진입가 × 100 매매기간중최고가- 매매기간중최저가 매도 = 진입가 - 매매기간중최저가 × 100 매매기간중최고가 - 매매기간중최저가 퇴출 효율: 매수청산 = 청산가 - 매매기간중최저가 × 100 매매기간중최고가 - 매매기간중최저가 매도청산 = 매매기간중최고가 − 청산가 × 100 매매기간중최고가 - 매매기간중최저가 총 효율 = (진입 효율 + 퇴출 효율) – 100 평균 총효율 = 각각 총효율의 평균 <표 7-1>을 보면 평균 총효율이 -5.86으로 상당히 안 좋은 결과를 보이고 있 다. 이유는 대부분의 돌파 전략이 일정 수준 이상 가격이 상승해야 발생하기 4 때문이다. 역 추세 추종적인 전략이 오히려 좋은 결과가 도출될 것으로 예상 된다. 따라서 독립적인 판단 보다는 보조적인 분석 도구로서 활용이 가능하다. 3) Sharpe Ratio 종합 보고서를 보면 지금까지는 테스트 기간의 마지막 결과를 분석하는 방법 이었다. 하지만 Sharpe Ratio와 뒤에서 설명할 RINA Index의 경우에는 수익곡 선의 진행과정을 분석할 수 있게 해준다. 공식은 다음과 같다. Sharpe Ratio = 평균손익 표준편차 즉 수익 곡선이 선형적으로 상승하였다면 이 수치가 높을 것이다. 반면 수익 곡선이 등락을 반복하고 있다면 표준편차가 커져, 이 수치가 낮을 것이다. 따 라서 이 수치만으로도 수익 곡선이 선형적인가 아닌가를 판단할 수 있다. 일반적으로 0.7 이상이 바람직하다. 특히 1이상은 상당히 유용한 결과라 할 수 있다. 위 결과를 보면 0.97로 유의적인 결과로서 수익 곡선의 선형성이 강 할 것으로 예상할 수 있다. 4) RINA Index RINA사에서 개발한 Index로서 다음과 같은 공식으로 계산된다. RINA Index= 특이치제거후총손익 평균드로다운 × 시장참여비율 총 손익과 드로다운을 이용한다는 관점에서 보상비율과 유사한 분석이 가능한 지표이다. 일반적으로 300 이상이면 유용한 것으로 판단한다. (2) 거래 내역 거래 내역에는 다음과 같은 상세 내역을 볼 수 있다. <그림 0-2> 거래내역 거래명, 거래단가, 거래 계약수, 수익뿐만 아니라 최대 인상액, 최대 인하액, 진입효율, 퇴출 효율, 거래기간, 총효율을 보여주고 있다. 엑셀 등으로 저장 이나 복사가 가능해서 거래 기초 데이터로 활용도가 높으며, 자신만의 평가 방법도 개발할 수 있다. 1) 최대 인하액, 인상액 인상액(run-up)은 진입 방향과 같은 방향으로 진행된 미실현 최대 수익금액을 말하며, 인하액(drawdown)은 진입과 반대 방향으로 진행된 미실현 최대 손실 금액을 말한다. 앞서 5장의 청산 전략에서 사용한 MAE 및 MFE가 바로 이것이 다. 따라서 가장 중요한 분석을 할 수 있는 기초 데이터이다. 2) 진입 효율, 퇴출 효율, 총 효율 종합 보고서에서 설명한 바와 같이 얼마나 잘 진입, 퇴출하였는가를 판단할 수 있게 해주는 지표이다. 1번 거래를 보면 매도로서 진입 효율이 79% 이고 퇴출 효율이 91% 이다. 둘 다 높을수록 좋다. 따라서 진입은 고점과 저점의 79% 수준 에서 고점에 가깝게 진입하였고, 퇴출은 저점과 고점에서 91% 수준으로 저점에 가깝게 퇴출하였다는 것을 보여준다. 총 효율은 71% 수준으로 나쁘지 않다. 6 (3) 전략 분석 <표 0-2> 전략 분석 항목 항 목 전 체 매 수 매 도 손익 분석 총손익 93,116.18 42,326.57 50,789.61 총이익 229,400.50 110,545.32 118,855.18 총손실 -136,284.32 -68,218.75 -68,065.57 손익비 1.68 1.62 1.75 평균 손익비 1.72 1.60 1.85 조정총손익 76,331.93 30,807.74 38,560.01 조정총이익 218,830.28 103,439.20 111,001.01 조정총손실 -142,498.35 -72,631.45 -72,440.99 조정 손익비 1.54 1.42 1.53 초기자본대비 수익률 931.16 423.27 507.90 연환산수익률 372.26 169.59 203.05 시스템 수익률 980.83 444.55 534.99 보유수익률 29.36 -28.61 29.36 14,173.61 15,020.33 15,037.93 6.57 2.82 3.38 평균손익 97.81 88.00 107.83 매매당 손익의표준편차 522.47 N/A N/A 변동계수 534.16 N/A N/A 특이치 제거 후 총손익 12,581.45 6,671.57 4,915.37 특이치 제거 후 총이익 88,139.96 44,229.79 43,403.88 특이치 제거 후 총손실 -75,558.51 -37,558.22 -38,488.51 평균 진입효율 53.40 53.01 53.79 평균 퇴출효율 40.75 41.67 39.80 평균 총효율 -5.86 -5.32 -6.41 최소 필요 자본 최소필요자본대비총손익 거래 내역 분석 (단위: 천원, %, 배) 전략 분석 항목에는 총손익을 조정하는 방법 등과 같이 보수적이고, 심도 있 는 분석이 가능한 항목들로 구성되어 있다. 크게 두 가지 항목으로 구분되는 데, 손익 분석과 거래 내역 분석이다. 1) 조정 총손익, 조정 총이익, 조정 총손실, 조정 손익비 이익과 손실을 조정하여 보수적인 관점에서 수익과 위험을 분석하는 방법이다. 각각의 항목은 다음과 같이 계산된다. 조정 총 이익= (이익매매수- 이익매매수 )×평균이익 조정 총 손실= (손실매매수+ 손실매매수 )×평균손실 조정 총 손익 = 조정 총 이익 – 조정 총 손실 조정 손익비 = 조정총이익 조정총손실 이와 같은 조정 방법은 이익 매매를 좀더 적게, 손실 매매는 좀더 크게 보는 방법으로 총손익, 총이익, 총손실, 손익비 대신 사용할 수 있는 항목이다. 2) 초기자본 대비 수익률, 연 환산 수익률, 시스템 수익률, 보유 수익률 수익률을 표시하는 항목들이다. 각각의 계산식은 다음과 같다. 8 초기 자본 대비 수익률 = 연 환산 수익률 = 시스템 수익률 = 보유 수익률 = 총손익 ×100 초기자본금 총손익 영업일수 × ×100 365 초기자본금 총손익 × 100 최초진입가격 최종청산가격 − 최초진입가격 × 100 최초진입가격 초기자본 대비 수익률을 연률로 환산한 것이 연 환산 수익률이 된다. <표 72>에서 연 환산 수익률이 372%이므로 연간 약 3.7배 수익 발생을 기대할 수 있는 전략이 된다. 이 두 가지가 실질적인 수익률을 의미하고, 시스템 수익률 과 보유 수익률은 연 환산 수익률, 초기자본 대비 수익률을 비교 분석하기 위 해서 사용된다. 특히 보유 수익률은 매매전략에 발생한 수익률과 비교하는 기 초적인 수익률이 된다. 비교 방법은 간단하다. 초기 자본 대비 수익률이 보유 수익률보다 크다는 것 은 매매 전략을 이용해서 초과 수익을 발생시킨다는 의미로 해석된다. 3) 최소 필요자본, 최소 필요자본 대비 총손익 자본 활용에 대한 항목으로서 계산 방법은 다음과 같다. 최소 필요 자본 = 최대 자본 인하액 + (최대 보유계약수 기간 중 최고 가 격)×증거금율(선물=0.15)×포인트 단위 가격(1 포인트=500,000원) 최소 필요 자본 대비 총손익 = 총손익 최소필요자본 위 식은 자산 관리에서 초기 자본금을 계산하는 식과 비슷하다. 여기서는 최 대자본인하액의 1.5 ~ 3 배를 사용하지 않고 1배로만 사용하였다. 그 다음 부 분은 최소 증거금을 계산하는 식인데 전체 기간 중의 최대 증거금액 발생 시 점으로 계산한다. <표 7-2>에서 최소필요자본이 14,173,610원으로 계산 되는 데, 현행 체제로는 1,500만원이 필요하다. 최소 필요 자본 대비 총 손익은 역시 클수록 좋을 것이다. 여기서는 6.57로서 투하 자금대비 6배의 수익이 발생하였다는 것을 보여준다. 4) 매매당 손익의 표준편차, 변동계수 매매당 손익의 표준 편차는 평균 손익과 깊은 관계를 가진다. <표 7-2>는 평 균 손익이 97,810원인데 매매당 손익의 표준 편차 522,470원으로 상당히 큰 값을 가진다. 즉 향후 매매를 할 때 최대 97,810+522,470 = 620,280원, 최소 97,810-522,470 =-424,660원의 손실이 발생할 수 있다는 가정이 가능해진다. 따라서 매매당 손익의 표준 편차가 적고, 평균손익과 차이가 없는 매매 전략 이 안정적인 수익을 기대할 수 있게 된다. 변동 계수 = 매매당손익의 표준편차 × 100 평균손익 변동 계수는 통계적으로 광범위 하게 사용되는 개념으로서 이 수치가 클수록 변동이 심하다는 것을 말한다. <표 7-2>에서 보면 534%로 상당히 큰 값을 가 지고 있다. 안정적인 수익 구조를 가지기 위해서는 300% 이하가 바람직 하다. 5) 특이치 제거 후 총손익 / 총이익 / 총손실 특이치 제거(outlier)는 상단에 있는 표준편차승수에 영향을 받는다. 일반적 으로 승수는 1, 2, 3을 사용하는데 특이치 제거 방법은 다음과 같다. 특이치 제거 후 총이익 = 매매당 이익의 평균 + (매매당 이익의 표준 편차 × 표준편차승수)의 범위를 벗어나는 이익매매를 제거한 총이익 특이치 제거 후 총손실 = 매매당 손실의 평균 + (매매당 손실의 표준 편차 × 표준편차승수)의 범위를 벗어나는 손실매매를 제거한 총손실 특이치 제거 후 총 손익 = 특이치 제거 후 총이익 - 특이치 제거 후 총손실 따라서 승수가 1일 경우가 가장 보수적인 구조를 가지게 되고, 승수가 클수록 기존의 총 손익 및 총 이익, 총 손실에 근접하게 된다. <표 7-2>는 승수가 3 일 경우이다. 특이치 제거 후 총 손익이 현실적으로 가능한 수익일 수 있다. 아주 큰 이익과 손실 은 앞으로 다시 발생할 확률이 적기 때문이다. 총손익 등과 비교하여 분석한다. 10 (4) 자산 분석 <표 0-3> 자산분석항목 항목 전체 매수 매도 Run-up/DrawDown 분석 최대손실(천원) -1,132.98 -1,132.98 -1,120.12 최대이익(천원) 2,725.08 2,725.08 2,712.32 금액기준 최대 DrawDown(%) -1,123.00 (2.23%) N/A N/A 비율기준 최대 DrawDown(천원) 2.23% (-1,123.00) N/A N/A 금액기준 최대 Run-Up(%) 3,011.50 (6.35%) N/A N/A 비율기준 최대 Run-Up(천원) 7.17% (2,143.75) N/A N/A 평균 DrawDown(천원) -282.88 -279.05 -286.79 평균 Run-Up(천원) 474.51 449.75 499.80 7 10 7 -1,791.68 -634.39 -654.58 10 7 6 5,092.35 3,482.71 3,613.91 고점갱신 평균기간(거래수) 176.41 (4.92 ) N/A N/A 저점갱신 평균기간(거래수) 0.00 (0.00 ) N/A N/A 총손익 대비 최대손실 1.22 2.68 2.21 보상비율 20.98 7.76 9.58 평균D/D 대비 평균 R/U 167.75 161.17 174.28 최대연속 손실매매수 최대연속 손실금액(천원) 최대연속 이익매매수 최대연속 이익금액(천원) 보상/위험 분석 (단위: 천원, %, 배) 1) 최대드로다운 / 런업 최대드로다운은 거래내역상의 매매 중 미실현손실이 가장 크게 발생했을 때의 금액과 비율로서, 금액기준으로 계산한 경우와 진입가격대비 비율로 계산한 값을 모두 표현하고 있다. 금액기준 최대드로다운은 전체의 매매 중 미실현 손실금액의 최대값이 112만 원임을 의미하며, 해당 매매에서 112만원을 진입가격대비 비율로 환산한 값이 2.23%임을 나타낸다. 2) 평균드로다운 매매건별 발생한 최대 미실현손실금액의 합을 매매횟수로 나눈 것으로써 한번 의 매매에서 평균적으로 발생할 수 있는 미실현손실금을 의미한다. 3) 최대연속 손실매매수/손실금액 연속적으로 손실이 발생한 횟수 중 가장 큰 매매횟수를 기록한 것이며, <표 7-3>에서 7회임을 알 수 있다. 이 표에서 7회 연속손실이 몇 회나 발생했는지 는 알 수 없지만, 만일 7회 연속손실이 3회 발생했다고 가정했을 경우 그때마 다의 손실금액 중 가장 큰 금액을 최대연속 손실금액으로 계산하여 항목에 표 시하게 된다. 최대자본인하액, 최대 누적손익 인하액과 더불어 해당 전략의 매매위험을 판단하는 항목으로 활용된다. 12 (5) 기간 분석 1) 단위분석 단위분석은 종합보고서상의 결과를 전체기간을 대상으로 확인하는 것이 아니 라, 사용자의 선택에 따라 연, 월, 주, 일 단위로 구분하여 평가항목들을 비 교함으로써 시뮬레이션 기간동안의 각 항목별 변화 추이를 확인할 수 있다. <표 0-4> 단위분석(예: 월 단위) 기간 총손익 평균 손익 총매매 승률 손익비 수익률 보상 비율 최대 자본 인하액 2003 년 9 월 112.12 5.6 20 30 1.04 1.12 0.07 -1693.1 2003 년 8 월 -300.39 -13.0 23 39.1 0.88 -3 -0.26 -1142.1 2003 년 7 월 163.57 6.8 24 37.5 1.07 1.64 0.14 -1197.6 2003 년 6 월 -92.45 -4.2 22 36.3 0.96 -0.92 -0.14 -680.3 2003 년 5 월 -279.54 -15.5 18 44.4 0.89 -2.8 -0.17 -1635.3 2003 년 4 월 1637.2 68.2 24 54.1 1.55 16.37 0.91 -1791.6 2003 년 3 월 -453.72 -18.1 25 44 0.87 -4.54 -0.22 -2020.4 2003 년 2 월 37.85 1.8 20 50 1.01 0.38 0.04 -993.9 2003 년 1 월 2613 145.1 18 50 2.01 26.13 1.57 -1661.0 2002 년 12 월 1186.27 53.9 22 45.4 1.5 11.86 1.62 -733.7 2002 년 11 월 1706.3 77.5 22 59.0 1.94 17.06 2.66 -640.3 2002 년 10 월 2930.18 122.0 24 54.1 1.69 29.3 1.41 -2073.6 2002 년 9 월 1301.85 59.1 22 54.5 1.59 13.02 1.28 -1016.5 2002 년 8 월 -1522.81 -63.4 24 45.8 0.69 -15.2 -0.58 -2615.7 2002 년 7 월 1168.06 53.0 22 45.4 1.24 11.68 0.29 -4012.6 2002 년 6 월 2544.75 121.1 21 52.3 1.68 25.45 1.91 -1330.8 2002 년 5 월 904.19 39.3 23 34.7 1.22 9.04 0.56 -1612.8 2002 년 4 월 4875.84 211.9 23 56.5 2.54 48.76 3.88 -1257.0 2002 년 3 월 752.85 35.8 21 42.8 1.21 7.53 0.44 -1717.6 2002 년 2 월 3337.74 196.3 17 70.5 3 33.38 4.9 -680.9 2002 년 1 월 3230.38 146.8 22 40.9 1.97 32.3 2.82 -1147.1 2001 년 12 월 420.9 17.5 24 41.6 1.07 4.21 0.15 -2755.1 2001 년 11 월 2048.79 89.0 23 47.8 1.72 20.49 1.85 -1110.0 2001 년 10 월 367.69 21.6 17 41.1 1.24 3.68 0.6 -611.9 2001 년 9 월 825.64 45.8 18 33.3 1.31 8.26 0.8 -1032.4 2001 년 8 월 1648.1 71.6 23 47.8 1.77 16.48 1.38 -1198.1 2001 년 7 월 684.26 32.5 21 47.6 1.32 6.84 0.72 -953.3 2001 년 6 월 669.12 33.4 20 40 1.29 6.69 0.94 -711.8 2001 년 5 월 817.34 35.5 23 47.8 1.32 8.17 0.83 -982.3 2001 년 4 월 2298.78 114.9 20 55 2.55 22.99 4.11 -558.8 2001 년 3 월 1878.27 93.9 20 55 2.35 18.78 2.95 -637.3 2001 년 2 월 1581.85 87.8 18 50 1.6 15.82 1.06 -1496.6 2001 년 1 월 1982.24 82.5 24 45.8 1.48 19.82 0.94 -2101.5 2000 년 12 월 731.61 38.5 19 47.3 1.21 7.32 0.56 -1309.3 2000 년 11 월 2570.64 128.5 20 70 2.39 25.71 2.35 -1093.3 2000 년 10 월 5316.38 253.1 21 57.1 2.41 53.16 3.52 -1511.1 2000 년 9 월 2236.32 106.4 21 52.3 1.93 22.36 2.09 -1071.1 2000 년 8 월 4902.47 233.4 21 61.9 2.69 49.02 5.55 -883.6 2000 년 7 월 2929.8 127.3 23 60.8 1.65 29.3 1.45 -2015.8 2000 년 6 월 2947.89 140.3 21 42.8 1.56 29.48 1.22 -2421.2 2000 년 5 월 4796.37 266.4 18 61.1 3.23 47.96 6.27 -764.6 2000 년 4 월 4252.21 236.2 18 55.5 2.42 42.52 2.95 -1442.3 2000 년 3 월 9798.16 426.0 23 65.2 3.13 97.98 7.75 -1264.9 2000 년 2 월 4172.78 189.6 22 54.5 1.91 41.73 1.38 -3030.7 2000 년 1 월 7385.33 434.4 17 64.7 5.03 73.85 13.75 -537.13 14 2) 순환분석 단위분석이 해당 연도별, 월별 등의 전략분석결과 라면, 순환분석은 가장 최 근의 단위기간부터 시뮬레이션 시작시점까지 단위기간을 합산하여 전략분석 항목을 확인할 수 있다. 단위분석과 마찬가지로 연, 월, 주, 일 단위로 합산하며 분석할 수 있다. <표 0-5> 순환분석(예: 연 단위) 기간 승률 손익비 수익률 17.72 194 42.7 1.14 126.9 -64657 27.85 456 44.3 1.86 351.1 182445 -104552 48.84 719 46.3 1.75 503.3 229400 -136284 51.89 970 46.2 1.68 1023.7 총이익 3437 27820 -24382 2003 년 ~ 2003 년 12698 120135 2002 년 ~ 2003 년 35113 2001 년 ~ 2003 년 50336 2003 년 평균 손익 총매매 총손익 총손실 표의 결과는 연 단위 순환분석 결과로서 첫 줄에 전체 기간 중 가장 최근 연 도인 2003년의 결과를 표시하고, 다음 줄부터 최근 연도로부터 연단위로 추가 하면서 시뮬레이션 결과를 보여주고 있다. 해당 기간 동안의 시뮬레이션 결과 가 누적된 것이다. 3) 평균분석 평균분석은 월 단위로만 가능하며 시뮬레이션 결과를 월별로 평균한 값을 보 여준다. 월 평균값을 계산하므로 월 단위 분석의 기준으로 사용된다. <표 0-6> 평균분석(예: 월 단위) 기간 총손익 총이익 총손실 평균 손익 1월 3802.74 6776.66 -2973.92 187.79 20 49.38 2.28 152.11 2월 2282.56 5222.27 -2939.72 118.57 19 55.84 1.78 91.3 3월 2993.89 6242.01 -3248.11 134.56 22 51.69 1.92 119.76 4월 3266.01 5925.09 -2659.07 153.69 21 55.29 2.23 130.64 5월 1559.59 4395.31 -2835.71 76.08 20 46.34 1.55 62.38 6월 1517.33 4861.14 -3343.81 72.25 21 42.86 1.45 60.69 7월 1236.42 4701.97 -3465.54 54.95 22 47.78 1.36 49.46 8월 1181.84 4281.39 -3099.55 51.95 22 48.35 1.38 47.27 9월 1118.98 3694.18 -2575.2 55.26 20 43.21 1.43 44.76 10 월 2153.56 4551.8 -2398.25 138.94 15 51.61 1.9 86.14 11 월 1581.43 3209.59 -1628.15 97.32 16 58.46 1.97 63.26 12 월 584.69 3488.74 -2904.05 35.98 16 44.62 1.2 23.39 총매매 승률 손익비 수익률 (6) 시간 분석 <표 0-7> 시간분석 항목 구분 항목 전체 시뮬레이션 기간 시 간 분 석 16 - 연단위(년) 3.74 - 월단위(월) 45.5 - 주단위(주) 195 - 일단위(일) 1,365.00 시장참여기간 15,799 시장참여비율 46.22 최장 매매중단기간 94 평균 거래기간 17.57 매매간 평균 기간 20.24 평균 이익매매기간 22.48 평균 손실매매기간 12.81 이익매매간 평균기간 51.84 손실매매간 평균기간 60.09 최대 보유 주(계약)수 1 단위: 바수 1) 시뮬레이션 기간 및 시장참여기간(비율) 시간분석 항목들은 전략의 시간측면을 고려한 것으로서, 시뮬레이션 기간은 전체 기간을 연, 월, 주, 일단위로 환산한 것이다. 시장 참여기간은 포지션을 보유한 기간 동안의 봉(10분)의 개수를 합산한 것 으로서, 전체 봉의 개수로 시장 참여기간을 나누어 시장참여비율을 계산한다. 다른 항목들이 같다면 시장참여비율이 낮을수록 전략이 우수하다고 할 수 있 다. 시장 참여 비율이 낮다는 것은 그만큼 시장의 위험에 적게 노출된다는 것 이며, 효율적인 매매를 했다는 것을 의미이기 때문이다. 2) 평균기간 평균거래기간은 진입부터 청산시까지의 봉의 개수를 각 매매 별로 산출하고, 그 값을 평균한 것으로서 진입 후 청산까지의 평균 보유기간을 의미한다. 매매간 평균기간은 청산 이후부터 신규진입까지의 봉의 개수를 산출하여 그 값을 평균한 것으로서, 청산 후 신규진입 시까지의 매매 중단기간의 평균을 의미한다. 평균 이익(손실)매매기간은 이익(손실)이 발생한 매매의 진입부터 청산시까지 의 봉의 개수를 산출하여 그 값을 평균한 것으로서, 이익(손실)매매의 평균 보유기간을 의미한다. 이익(손실)매매간 평균기간은 이익(손실)이 발생한 매 매들간의 청산시점부터 신규진입 시까지의 봉의 개수를 산출하여 그 값을 평 균한 것이다. (7) 그래프 1) 누적수익곡선 매매횟수별로 발생하는 손익을 누적한 그래프로서 초기자본금을 제외한 매매 손익만을 의미한다. 곡선상 점은 누적수익곡선상의 신고점이 갱신되면 찍히는 것으로서 테스트 초기는 신고점이 자주 갱신되었지만, 최근에는 누적수익이 증가하지 못하고 있는 현상을 보여준다. <그림 0-3> 누적수익곡선 2) 종합자산곡선 두 개의 그래프로 구성되며 상단의 경우, 누적손익곡선에 초기자본금을 포함 하여 일간기준으로 작성된 그래프이며 누적손익곡선의 선형회귀선(선형회귀식 포함)과 표준편차채널이 포함되어 있다. 하단은 자산잠식곡선(underwater equity curve)로서 일 단위 거래내역을 기준 으로 자산 신고가 대비 자산감소율을 계산한 것이다. 수익발생일은 “0”되며 직선은 일별 자산감소율의 평균값이다. 18 <그림 0-4> 종합자산곡선 선형회귀선 자산감소율 평균선 3) 월별(주별) 순 손익 매매내역을 월별(주별)로 구분하여 월(주)단위 순 손익을 계산한 것으로서 단 위 별로 수익을 확인할 수 있는 장점이 있다. 다음의 그림은 주별 순 손익그 래프로서 직선은 주별 순 손익의 평균값이다. <그림 0-5> 주별 순 손익 평균선 4) 누적손익 갱신기간 분포도 누적손익 그래프상의 신고점 갱신기간을 매매횟수로 계산하여 빈도수를 도식 한 것으로서, 그림에서 원 부분은 30번 매매만에 누적손익곡선의 신고점이 갱 신된 횟수가 2회라는 의미이다. 사각형 부분은 1번 매매만에 누적손익곡선의 신고점이 갱신된 횟수가 57회라는 의미 이다. 좋은 전략일수록 그래프 하단의 값이 커짐을 알 수 있다. <그림 0-6> 누적손익 갱신기간 분포도 5) 거래별 손익 매매건별 손익을 “0”선을 기준으로 손실과 이익을 구분하여 도식한 것이다. 그림의 원부분은 매매건별 손익의 표준편차(승수: 3) 범위 밖의 특이치로서 굵은 점으로 도식된다. 전에 설명한 특이치 제거 후 총손익을 계산할 때 사용 된다. 20 <그림 0-7> 거래별 손익 6) 손익 분포도 매매건 별 손익을 일정 구간으로 나누어 매매횟수 별로 도식한 그래프이다. 현재 -248,000원 ~ 0원까지의 손실매매가 249회로서 가장 많은 것을 알 수 있 다. 우측의 꼬리가 다소 긴 형태로서 좌측의 손실 부분은 일정 수준에서 제한 되었고, 수익은 크게 발생하는 구조임을 알 수 있다. 실선이 현재의 분포도를 의미한다면, 점선으로 그려진 것이 이상적 손익 분포도라 판단된다. <그림 0-8> 손익 분포도 7) 효율성 분석 매매건별 진입/퇴출/총효율을 도식한 그래프이다. <그림 0-9> 효율성 분석 <그림 7-9>는 총효율 그래프로서 “0”선을 기준으로 이익매매와 손실매매가 구 분되어 있으며 각각의 매매효율이 도식된 것을 알 수 있다. 그래프상 -100%인 경우 진입방향과 퇴출이 완전히 반대로 된 매매임을 알 수 있다. 그래프 상의 직선은 평균을 의미한다. 8) 거래별 자본인상율 / 인하율 분석 거래별 자본인상율은 각 매매의 진입 이후 청산시점까지의 발생 가능한 자본 인상액을 진입가격대비 비율로 계산한 것으로서 최대미실현이익(%)와 동일하 다. 거래별 자본인상율과 동일하게 매매 발생순서대로 도식된다. 거래별 자본인하율은 각 매매의 진입 이후 청산시점까지 발생 가능한 자본인 하액을 진입가격대비 비율로 계산한 것으로서, 최대미실현손실(%)과 동일하다. 다만 매매 발생순서대로 도식되는 특징이 있다. 22 이 그래프를 통해 어느 시점에서 자본인상(인하)율이 크게(작게) 발생했는지 를 파악할 수 있다. <그림 0-10> 거래별 자본인하율 <그림 0-11> 거래별 자본인상율 2. 최적화(Optimization) 최적화란 일반적으로 최적의 변수를 찾는 것을 말한다. 시스템을 작성하면 많 은 변수들이 발생한다. 기초적으로 사용하는 DD_Rangebreak(v0.22)를 보더라 도 3가지 변수를 가지고 있다. 나머지 둘을 고정하고 각각을 최적화하는 방법 도 사용되지만, 일반적으로는 세가지 변수를 동시에 최적화하는 방법을 사용 한다. 이럴 경우 하나의 변수당 100번씩 테스트를 한다면 100*100*100= 1,000,000번 테스트를 해야 한다. 상당한 시간이 필요하며, 좋은 성능의 PC도 필요하게 된다. 따라서 테스트를 할 때 우선 각 변수에 대한 값을 드문드문하게 설정하여 최적변수의 범위를 찾고, 조밀하게 최적화를 다시 시행하는 방법이 더 효율적이다. 분간 차트를 이용할 경우에도 최적화 과정이 필요하다. 분차트용 매매 전략이 완성되었다면 5분, 10분 등 몇 분차트가 전략에 최적의 시간대인지 찾는 과정 을 말한다. 또한 틱차트를 이용하는 경우도 있으며 역시 최적 틱 단위를 찾는 과정도 최적화 과정이 된다. 현물일 경우에는 해당 전략에 맞는 종목을 찾는 것도 일종의 최적화라 할 수 있다. 현물 전략에 따라서 잘 맞는 종목이 충분히 다를 수 있다. 따라서 사용 하려는 전략에 잘 맞는 종목들을 찾는 과정도 최적화 과정이라 할 수 있다. 이와 같이 매매 전략을 적용하고, 실제 매매를 하는 과정까지 무수히 많은 최 적화 과정이 남아있다. 본서에서는 변수의 최적화를 통해 최적화를 설명하고자 한다. 24 (1) 최적화의 개념과 목적 최적 변수는 과연 무엇일까 부터 생각해보자. 예를 들어 3년간 테스트를 하였 다면, 최적변수는 현재 시점에서 누적수익을 가장 크게 발생시킨 변수를 말하 게 된다. 더 나아가 최근 월에 누적수익을 가장 크게 발생시킨 변수이다. 또 하나는 현재 시점에 크게 문제점이 없다면, 오랜 기간 동안에 수익을 발생 한 변수가 최적 변수이다. 왜냐하면 오랜 기간 동안의 최적 변수는 변화될 가 능성이 적다는 논리가 적용되기 때문이다. 최적화는 최적변수를 통해 미래의 기대수익을 극대화하기 위한 것이다. 그러 나 이것만은 아니며, 사용자가 작성한 전략이 얼마나 범용적으로 사용될 수 있는가를 검증하는데도 활용된다. 그러면 DD_RangeBreak(v0.22)를 이용해서 간단히 테스트를 해보자. 3가지 변 수 중 2가지 변수(len, len1)만 이용해서 최적화를 해보기로 해자. <표 0-8> 기간별 최적 변수 최적화 기간 적용기간 len atrlen Len1 총손익(원) 2000.1.4~2003.9.30 2003.6.30~2003.9.30 0.37 20 2.7 -294,040 2003.1.4~2003.9.30 2003.6.30~2003.9.30 0.31 20 1.8 223,140 2003.6.30~2003.9.30 2003.6.30~2003.9.30 0.28 20 1.8 574,630 우선 알 수 있는 것은 기간별 최적 변수가 다르다는 것이다. 즉 최적의 변수 가 영원히 최적의 변수일 수 없다. 두 번째로 해당 기간에서의 최적 변수 수 익과 테스트 기간이 다른 최적 변수의 수익이 다르다. 심지어 기간에 따라서 해당 기간에는 전혀 수익을 못 낼 수도 있다. 최적화를 하는 이유는 최적 변수로 미래에 수익을 극대화 하겠다는 것이다. 그런데 위 결과를 보면 최적 변수도 변화하고, 최적 변수가 미래 수익을 보장 하지 못한다는 것을 보여준다. 심지어 손실이 발생할 수 있다는 심각한 문제 가 발생하게 된다. (2) 범용성 검증 매매 전략이 범용적인가는 상당히 중요한 문제이다. 전략이 미래에도 수익을 낼 수 있는지를 판단할 수 있게 해주기 때문이다. 그러면 범용성은 어떻게 판 단해야 하는가? 다음과 같은 기준들이 많이 사용된다. 전략이 단순하면서도, 수익이 나는 전략이 범용적이다. 시장에 원칙적이고, 논리적인 접근방법으로 설계된 전략이 범용적이다. 많은 시장에서 수익이 나는 전략이 범용적이다. 최적 변수의 변화가 심하지 않은 전략이 범용적이고, 변수가 적고 사용된 지표의 수가 적은 전략이 범용적이다. 최적화를 할 경우, 많은 변수에서 수익이 발생한 전략이 범용적이다. 시스템 트레이딩에서 아이러니는 이동평균선이나 일정기간 고저를 돌파하는 아주 단순한 전략이, 복잡하고 깊은 이론적 지식으로 만들어진 전략보다 더 유용하다는 점이다. 미국의 경우 1년에 수만 가지의 시스템 트레이딩 전략들 이 개발되고 사용되는데, 이중에 대부분의 전략들이 금새 사라진다. 사라지는 원인은 수익이 안 나기 때문이다. 범용성은 시스템 개발에서 아주 중요한 문제이다. 시스템 개발자는 과거 수익의 환상(illusion)을 가지고, 미래의 불확실성에 투자하게 된다. 과거의 결과가 좋 다는 것과 미래에 수익을 발생시킨다는 것과는 괴리가 있다는 것을 명심하자. 최적화 과정은 앞서 설명한 바와 같이 범용성을 검증할 수 있는 수단이 된다. <그 림 2-39 >와 같이 많은 변수에서 수익이 나는 전략이면 범용적인 전략이 되며, < 표 3-18>과 같이 대부분의 시간대에서 수익이 발생하는 경우도 범용적이라 할 수 있다. 현물일 경우 범용적인 전략은 많은 종목에서 수익이 발생할 것이다. 또한 범용적인 전략은 한국시장뿐만 아니라 미국 및 유럽시장 등에서도 유용 하다는 것이다. 실제로 기초 전략으로 사용하고 있는 DD_RangeBreak(v0.22)도 미국시장에서 개발된 전략이며, 한국 시장에도 잘 맞는다는 것을 보여줬다. 26 그러면 이제부터 일반적인 변수 최적화 방법에 대해 설명하고, 최적화의 유용 성과 올바른 최적화 방법에 대해서 알아보기로 하자. (3) 변수 최적화 방법 앞서 설정한 대로 과거의 최적 변수로 미래 수익을 극대화하는 변수 최적화에 서 고려해야 할 부분은 다음과 같은 것들이다. 최적 변수 결정 기준: 무엇을 기준으로 최적 변수를 설정해야 하는가? 최적 변수의 효용성: 전역최대값(global maximum value)을 사용해야 한다. 최적화 기간 설정 방법: In - Sample, Out – Sample, 전진 분석(walk forward test) 등 1) 최적 변수의 결정 기준 최적의 변수를 결정할 때 어떤 기준을 사용해야 하는 지가 가장 우선적으로 결정해야 할 사항이다. 예를 들어 총손익이 최대값인 변수를 사용해야 하는지, 평균 손익이 최대값인 변수를 사용해야 하는지를 결정하는 과정이다. 많이 사 용되는 결정 항목은 다음과 같다, 총손익: 최대값 평균손익: 최대값 승률: 최대값 손익비, 평균손익비: 최대값 보상비율: 최대값 최대 자본인하액: 최소값 Sharpe Ratio: 최대값 조정된 총손익, 조정된 손익비: 최대값 특이치 제거 후 총손익: 최대값 위 항목들은 주요 시스템 평가 항목으로서 CT 에서는 어느 항목을 기준으로 최적 변수를 설정할 것인가를 선택할 수 있게 되어 있다. 어느 항목을 사용하 더라도 무방한데 제 2 장에 설명한 “최적화” 부분처럼 전역최대값으로 결정해 야 하나, 전체적인 조화(수익과 위험구조)가 더 중요하다. ① 이 책에서 사용되었던 방법은 제 2 장에서 세 개 이상의 변수 최적화 방법과 3장에서 DD_RangeBreak(v0.2)의 변수를 최적화 하는 과정에 서 설명한 방법이다. 각각의 항목별 최적 변수를 결정한 뒤 그래프나 최근 장세 적합성, 전체적인 조화를 판단하여 최적의 변수를 결정하 는 방법으로 추천하는 방법이다. ② 또 다른 방법을 소개하면 Sunny Harris가 개발한 방법으로서 다음과 같은 식으로 최적 변수를 설정한다. 승률 * 손익비 * 평균 손익비 = CPC index > 1.2 예제 전략(제 3 장 DD_RangeBreak(v0.22): 0.4947*1.68*1.72 = 1.43 > 1.2 CPC Index 값이 1.2 보다 크고, 더 큰 값을 가질수록 좋은 전략으로 판단할 수 있다. ③ 또 하나 유용한 방법은 필터를 사용한 것이다. 수익과 손실의 기준을 결정해 놓고 그 값 이상의 변수를 찾아내어서 사용하는 방법이다. CT의 최적화 보고서를 보면 조건 검색 기능이 있는데, 여기에 일정 조건을 입력하여 조건에 맞는 최적 변수 값을 찾아내는 방법이다. 데이트레이딩 전략의 경우 매매 건수 100 건 이상, 평균 손익비와 손익비 1.4 이상, 승률 45% 이상, 보상 비율 5 이상 등이 일반적인 필터 조건이 될 것이다. 28 <그림 0-12> 조건검색 설정 위와 같은 조건으로 DD_RangeBreak(v 0.22) 전략을 다시 최적화 해보자 len: 0.3 ~ 0.4, 증감 0.01 len1: 1.5 ~ 3.5, 증감 0.1 위 최적화를 실시하면 전체 200 개 테스트가 실시되며, 대부분의 결과(190 개)가 위 조건을 충족하게 된다. 따라서 우선적으로 전략의 범용성을 확인할 수 있게 되며, 추가 조건을 설정하거나 조건을 강화시켜서 테스트를 할 필요 도 있을 것이다. 2) 최적 변수의 효율성 최적 변수의 효율성은 시스템의 범용성과도 통하는 부분이다. 즉 범용적인 전 략이면 많은 변수에서 수익이 발생하기 때문에, 어떤 변수를 사용하더라도 최 악의 상태인 시스템 붕괴나 과 최적화 등의 문제가 발생하지 않을 것이기 때 문이다. 효율성의 핵심은 전역최대값을 사용하는 것이다. 전역최대값(Global Maximum Value): 넓은 범위에서 수익이 발생하는 구간 중 최대값. 따라서 최적 변수 전후의 값들에서 모두 수익이 발생함. 국소최대값(Local Maxima Values): 좁은 범위에서 수익이 발생하거나, 하 나의 변수 만이 최대값을 가지는 경우로서 최적 변수로 사용할 수 없다. 전 후의 변수가 최적의 변수와 수익 격차가 심하게 발생하거나, 수익이 발생하 지 않는 경우의 변수값 이러한 전역최대값을 선택하는 방법으로 제 2 장에서 설명한 3D 그래프가 널 리 사용되고 있다. 전역최대값을 사용해야 하는 이유는 따라 변수 값이 바뀌는 경우에도 수익이 발생하기 위해서는 넓은 범위의 수익 가능 구간에 최적 변수가 포함될 확률이 높아야 하기 때문이다. 3) 최적화 기간 설정 방법 최적화 기간 설정 방법은 어느 기간 동안을 최적화하고, 어느 정도 기간 동안 이 변수를 적용해야 하는지를 결정하는 것이다. 앞서 최적화를 할 때 2000년 1월 4일부터 2003 년 9월 30일까지의 전체 테스트 기간을 사용하였다. 이 경우에는 9월 30일 이후부터 가상매매(paper trading)을 하게 되는데, 이 때부터가 최적 변수가 계속 유용한지를 확인하는 과정이 된다. In, Out-Sample방법은 전체데이터를 크게 2~3구간으로 구분하여 테스트를 하 는데, 과거 기준은 과거 변수가 현재 구간에 잘 맞는 변수인지를 보는 방법이 고, 현재 기준은 현재의 변수가 과거에도 수익이 났는지를 보는 방법이 된다. 중간 기준은 중간 시점에서의 최적 변수가 과거와 현재에도 수익을 냈는지를 보는 방법이 된다. 전진분석방법은 전체 기간을 일정 구간으로 세분하고 최적화 및 적용을 반복 하는 방법을 사용하게 된다. 최적화를 중첩해서 하느냐, 현재까지의 기간을 30 모두 하느냐에 따라 방법의 차이가 발생한다. <표 0-9> 테스트 및 최적화 방법 전체 기간 (2000.1.4 ~ 2003.9.30) In-Sample, Out–Sample Method: 테스트 기간을 크게 구분하여 In-Sample 기간 동안 최적화하여 Out-Sample에 적용해서 수익 및 위험 구조가 유사한지 평가 과거 기준 현재 기준 중간 기준 Out In-Sample Out-Sample Out-Sample In-Sample In – sample Out 전진 분석(Walk Forward Test): 일정 구간으로 세분하고 최적화 Æ 그 다음 기 적용 Æ 최적화를 반복하는 방법 회전 방식 최적화 Æ 다음 기 적용 Æ 최적화 Æ 다음 기 적용 고정 방식 최적화 Æ 다음 기 적용 Æ 전체 최적화 Æ 다음 기 적용 중첩 방식 최적화 Æ 다음 기 적용 Æ 일정 기간 추가 최적화 Æ 다음 기 적용 우선 In, Out-Sample방법을 이용해서 테스트 및 최적화를 해보기로 하자. ①In, Out-Sample방법 과거/현재/중간기준 세가지 방법을 모두 테스트 해보기로 하자. 최적화 범위 는 다음과 같이 설정하였다. len: 0.2~0.4, 증감 0.01 len1: 1.5~3.5, 증감 0.1 테스트 결과는 <표 7-10, 11, 12>와 같다. 과거 기준으로 최적화 및 테스트를 시행하고 현재까지 적용해보면, 수익은 발 생하지만 In-Sample기간 보다 상당히 뒤진 결과를 나타내고 있다. 전체 기간 으로 보았을 경우에도, 전체 기간을 최적화 한 결과 값(9,300만원)보다 나쁘 다는 것을 알 수 있다. <표 0-10> In, Out-Sample 과거기준 방법 평가 항목 총 손익 In - Sample Out - Sample 전체 70,920.66 16,365.46 89,401.42 평균 손익 154.51 37.36 99.45 최대 손실 -1,214.98 -828.14 -1,214.98 총 매매수 459 438 899 연속 이익 매매수 9 6 9 연속 손실 매매수 6 7 7 최대 자본 인하액 -3,139.57 -4,352.89 -4,352.89 승률 53.81 45.43 49.72 손익비 2.18 1.25 1.71 평균손익비 1.87 1.5 1.73 보상 비율 22.59 3.76 20.54 2000.1.4 ~ 2002.1.4 ~ 2001.12.28 2003.9.30 사용 변수 0.4, 20, 2.7 0.4, 20, 2.7 주) 보유해야 할 바 수: 50 (단위: 천원, %, 배) 2000.1.4 ~ 2003.9.30 0.4, 20, 2.7 테스트 기간 32 <표 0-11> In, Out-Sample 현재기준 방법 평가 항목 Out - Sample 총 손익 In - Sample 전체 39,712.24 28,271.47 70,486.51 평균 손익 68.23 55.98 64.73 최대 손실 -946.49 -626.51 -946.49 총 매매수 582 505 1,089 연속 이익 매매수 7 5 7 연속 손실 매매수 8 8 8 최대 자본 인하액 -4,669.67 -4,259.37 -4,669.67 승률 45.53 44.55 45.18 손익비 1.44 1.43 1.45 평균손익비 1.72 1.78 1.76 보상 비율 테스트 기간 8.5 6.64 15.09 2000.1.4 ~ 2001.12.28 사용 변수 0.31,20,2.2 주) 보유해야 할 바 수: 50 (단위: 천원, %, 배) 2002.1.4 ~ 2003.9.30 0.31,20,2.2 2000.1.4 ~ 2003.9.30 0.31,20,2.2 <표 0-12> In, Out-Sample 중간기준 방법 평가 항목 총 손익 Out–Sample(1) In–Sample Out–Sample(2) 전체 37,404.56 37,762.93 3,592.00 80,547.93 평균 손익 134.07 68.54 17.02 76.86 최대 손실 -1,320.70 -804.05 -535.04 -1,320.70 총 매매수 279 551 211 1,048 연속 이익 매매수 6 6 4 6 연속 손실 매매수 6 5 10 10 최대 자본 인하액 -4,509.68 -4,654.47 -3,364.46 -4,654.47 승률 53.05 47.37 40.76 47.61 손익비 1.66 1.49 1.14 1.5 평균손익비 1.47 1.65 1.65 1.65 보상 비율 테스트 기간 8.29 8.11 1.07 17.31 2000.1.4 ~ 2001.1.4 ~ 2000.12.28 2002.12.28 사용 변수 0.33,20,2.6 0.33,20,2.6 주) 보유해야 할 바 수: 50 (단위: 천원, %, 배) 2003.1.4 ~ 2003.9.30 0.33,20,2.6 2000.1.4 ~ 2003.9.30 0.33,20,2.6 현재기준 방식 또한 과거수익보다 상당히 뒤떨어진 결과를 보여 결국 전체 수 익이 좋지 않다. 중간 기준으로 하게 되면 과거와 중간은 거의 유사한 수익을 보였지만 현재(Out-Sample(2))는 수익이 상당폭 감소되는 양상을 보인다. 전 체적으로도 수익이 과거 기준(<표 7-10>, 8,940만원)보다 줄어드는 모습이다. 결국 In, Out-Sample방법으로 최적화 및 테스트를 하더라도 최적 변수는 변화 되며 수익구조도 유지되지 않는다는 것을 알 수 있다. 이러한 현상은 과거 기 준 및 현재 기준과 전체 최적화의 누적수익곡선을 살펴보면 분명해진다. <그림 0-13> 누적수익곡선 비교 100000.00 90000.00 과거기준 80000.00 전체 0.37,2.7 70000.00 60000.00 50000.00 현재기준 40000.00 30000.00 20000.00 10000.00 0.00 1 213 425 637 849 1061 1273 1485 1697 1909 2121 2333 2545 2757 2969 3181 3393 현재기준 누적수익곡선은 최적화를 한 기간 동안의 수익곡선(수익선 오른쪽 편) 이 가장 상승 속도 및 선형성이 강하다는 것을 보여주고 있다. 이 변수로 과거 에 적용해보면 수익곡선의 선형성 및 상승 속도가 약화되는 것을 보여주고 있다. 반면 과거 기준으로 최적화 및 테스트를 하였을 경우, 전체 기간 최적화 결과 보다 상승속도 및 선형성이 더 좋다는 것을 알 수 있으나, 현재 시점(수직선 오른쪽)에서는 과거의 선형성이 유지되지 못한다는 것을 알 수 있다. 특히 화 살표로 표시되는 부분에서는 수익곡선의 하락세가 가장 크게 발생하게 된다. 따라서 In, Out-Sample 방법으로 테스트를 하였을 경우에 미래 수익이 테스트 를 한 구간의 수익구조를 유지하지 못한다는 것을 알 수 있다. 34 결국 최적화의 유용성에 대한 의문으로 다시 연결되는데, 전진 분석에 대한 결과와 함께 최적화 유용성을 다시 한번 생각해보도록 하자. ② 전진분석 전진 분석을 통해서 테스트를 하는 이유는 수익이 발생하는 변수 범위를 결정 하거나, 현재부터 전진 분석을 반복적으로 시행할 경우에 수익 구조를 유지하 는 목적으로 사용된다. 6개월 단위 고정방식 전진분석을 해보기로 하자. <표 0-13> 고정방식 전진분석 결과 테스트 기간 2000.1~ 2000.6 2000.1~ 2000.6 2000.1~ 2000.12 2000.1~ 2001.6 2000.1~ 2001.12 2000.1~ 2002.6 2000.1~ 2002.12 2000.1~ 2003.6 주) 총손익 적용 len len1 기간 2000.1~ 0.21 3.3 2000.6 2000.7~ 0.21 3.3 2000.12 2001.1~ 0.36 2.9 2001.6 2001.7~ 0.2 3.3 2001.12 2002.1~ 0.4 3.2 2002.6 2002.7~ 0.3 3.2 2002.12 2003.1~ 0.27 2.5 2003.6 2003.7~ 0.31 1.7 2003.9 기준으로 최적화 실행(단위: 총손익 총 매매수 승률 최대자본 인하액 보상 비율 34,876.78 161 52.17 -4480.53 7.78 12,328.21 185 48.65 -4709.88 2.62 8,122.65 129 49.61 -2282.12 3.56 1,530.81 189 39.15 -3258.34 0.47 12,794.00 124 52.42 -3347.91 3.82 6,316.23 155 49.68 -4976.75 1.27 2,368.33 158 44.3 -4847.55 0.49 -783.91 77 29.87 -2214.29 -0.35 천원, %, 배) 전진분석의 특성상 처음기의 테스트 기간과 적용기간은 동일하며, 다음기부터 는 6개월씩 추가하여 테스트하고, 다음 6개월간 적용한 결과이다. 이러한 전진 분석을 사용할 경우에는 6개월 단위로 최적화를 반복적으로 하여 계획적인 투자결정이 가능해 진다. len은 0.21~0.4로 대부분이 최적화 범위(0.2~0.4)에 있으며, len1의 경우에는 1.7에서 3.3으로서 역시 대부분 최적화 범위(1.5 ~ 3.5)에 속하는 것을 알 수 있다. 하지만 일정한 패턴이 있다거나 반복적이지 않다는 것을 알 수 있다. 만약 반복적인 결과가 나온다면 그 변수가 유용한 변수라는 결론을 얻을 수 있을 것이다. 또한 총 손익을 보면 장세에 따라 총손익 편차가 심하고, 심지어 (-)를 기록한 적도 발생하는 등 문제점이 있다는 것을 알 수 있다. 결국 전진 분석으로서도 미래 수익을 보장하거나 유용한 변수를 결정하기 힘들다는 결론을 얻을 수 있다. (4) 최적화의 유용성 최적화는 유용한 것인가에 대해 보다 자세히 연구해보자. 우선 다음과 같은 질문에 답을 해보기로 한다. 1) 전진분석을 통한 일정기간 동안의 최적변수는 이후 동일기간에도 유용한가? 2) 유용하다면 그 기간은 어느 정도의 기간인가? 3) 전진 분석 방법 중 중첩 방법이 더 유용한가? 4) 최적 변수들이 일정하게 유지되는 선형성을 가지고 있는가? 주기성이 있는가? 5) 최적화 변수가 그 다음 구간에서 어느 정도 성과를 내는가? 이것들을 확인하기 위해서 기준은 전체 기간의 최적화 수익곡선 1개월, 3개월, 6개월씩 전진 분석 수익곡선 6개월 최적화, 3개월 중첩방식 수익곡선 을 비교하고 각각 최적 변수의 흐름을 분석한다. 36 <그림 0-14> 최적화 결과비교 200,000 180,000 160,000 140,000 최대6 최대3 최대1 w f6 w f3 w f1 6-3w f 전체기간 120,000 100,000 80,000 60,000 40,000 20,000 Jan-00 Jul-00 Feb-01 Au g-01 Mar-02 Sep-02 Apr-03 Nov-03 May -04 주) 최대 6, 3, 1은 최적변수에 의해 도출된 수익곡선이며, WF 6, 3, 1 은 전진 분석을 통한 수익 곡선, 6-3 WF은 중첩 전진 분석 비교결과를 보면, 우선 전체기간 최적화 수익곡선은 중심선 역할을 하고 있다. 이 선을 중심으로 위에 위치한 선들은 최적변수에 의해 도출된 것이며, 아래 에 위치한 선들은 전진 분석의 결과들이란 것을 알 수 있다. 우선 최적변수에 의해 도출된 수익 곡선을 보자. 이 선들은 시스템이 사후적 으로 최적 변수를 적용하여 얻어낸 수익 곡선으로서 가장 이론적인 (theoretical)수익 곡선이라 할 수 있다. 최적화 기간이 짧을수록 높은 이론 적인 수익곡선을 나타낸다(1개월 > 3개월 > 6개월). 그럼 이제 전진 분석 결과를 보기로 하자. 우선 전체를 최적화한 수익 곡선 보다 기울기가 낮다는 것을 알 수 있다. 그 다음으로 6개월 > 3개월 > 1개월 순의 수익곡선크기를 보여주고 있다. 따라서 짧은 기간으로 전진 분석을 하는 방법은 그다지 좋지 않다는 추정이 가능하다. 특히 원호로 표시된 부분처럼 짧은 기간 전진분석 방법일수록 수익곡선이 하향하거나, 등락이 심하게 발생 하는 것을 알 수 있다. 그러면 중첩 방법은 어떨까. 중첩 방법은 과거 데이터의 일부를 포함하여 테 스트 하므로 유용성을 기대하였지만 결과는 6개월 고정 방법과 다를 바가 없 었다. 그럼 이제 변수들의 변화 정도를 살펴보자. <그림 0-15> 1개월 단위 최적변수 0.45 0.4 0.35 0.3 0.25 0.2 0.15 0 5 10 15 20 25 30 35 40 45 50 <그림 0-16> 6개월 단위 최적변수 0.45 0.4 0.35 0.3 0.25 0.2 0.15 0 1 2 3 4 5 6 7 8 9 <그림 7-15, 16>을 보면 1개월이나 6개월 단위 최적변수 값의 변화가 무작위 적임을 짐작할 수 있다. 1개월 단위 최적변수값을 연의 검증(run test)을 통해 무작위성을 측정한 결 과 99%신뢰수준에서 무작위적임을 알 수 있었다. 즉, 직전기간의 최적 변수와 38 다음 기간의 최적 변수간 상관관계가 매우 약하다는 것을 나타내며, 특히 전전 분석의 기간이 늘어나더라도 이러한 현상이 마찬가지라는 결론을 얻게 된다. 위의 결과를 종합해 보면, 앞서 설정한 질문에 답을 얻을 수 있다. 1) 전진 분석으로서도 최적화의 유용성을 검증할 수 없었다. 따라서 최적 화가 미래 수익에 긍정적인 결과를 도출한다고 할 수 없다. 2) 최적화 기간은 짧을수록 수익곡선이 좋지 않다. 3) In, Out-Sample 방법이나 전진 분석 방법 등 다양한 방법이 있으나, 방법에 따른 최적화 유용성은 차이가 없다. 4) 도출된 변수는 일정하고, 주기적이라고 할 수 없으며, 선형성을 갖는다 고 할 수가 없다. 5) 직전 구간에 최적화된 변수를 다음 기에 적용할 경우, 전체 변수 조합 에서 최하위를 차지하는 경우는 한 차례도 없으나, 최상위를 차지하는 경우도 없었다. 그러면 최적화가 필요가 없다는 것인가? 여기에 대해 다시 한번 생각해보자. (5) 최적화에 대한 올바른 견해 최적화를 통한 변수 선택과 해당 변수를 이용한 미래 수익 극대화는 불가능하 다는 것을 알 수 있었으며, 최적 변수도 기간에 따라 추세가 없이 형성된다는 결론을 얻었다. 따라서 현재 시점에 잘 맞는 최적 변수를 찾는 작업은 무의미 한 작업이라는 것을 알 수 있다. 이러한 현상으로 인하여 최적화를 아예 하지 않거나, 수익이 발생하지 않는 변수 를 그 다음 기에 적용하는 등 역 최적화(de-optimization)를 선택하기도 한다. 하지만 시스템 트레이딩 전략의 관점에서 최적화는 다음과 같은 사항을 알 수 있게 한다. In, Out-Sample방법이나 전진분석을 통해서 기간에 따라 변수값이 안정적 으로 바뀌는 변수 안정성(parameter stability)이 검증된다면, 해당 전략은 범용성(robust)과 유용성이 크다고 할 수 있다. In, Out-Sample방법이나 전진분석에서 보여준 것처럼 일정 구간에 최적 변수는 결국 최적 변수가 아닐 가능성이 크다. 충분히 긴 기간(상승, 하락, 횡보, 변동성 확대구간, 변동성 축소구간 등을 포함한)을 통해 도출된 변수 가 시간 안정성(time stability)을 가진 변수이며, 이 변수가 최적의 변수일 것이다. 따라서 본서에서는 최적화에 대해 다음과 같은 의견을 제시한다. 1) 최적화는 미래 수익 극대화를 위해서가 아니라, 시스템의 범용성 및 유 용성의 검증에 국한해서 사용하는 것이 바람직하다. 2) 최적화는 짧은 기간을 사용할 경우 더 큰 문제점을 가지게 되므로 상승, 하락, 횡보, 변동성 확대, 축소 구간이 모두 포함된 긴 기간을 테스트 하는 것이 바람직하다. 3) 최적화를 통해 수익 곡선의 선형성, 월별 수익의 안전성 등을 분석하는 것이 더 중요하다. 4) 최적 변수는 다음 기에 최적의 변수는 아니지만 최악의 변수도 아니다. 따라서 전진 분석을 통해 도출된 최적 변수가 최악의 변수 범위에 들지 않는다면, 최적 변수로 사용하게 된다. 5) 전역최대값인지를 판단하는 것이 더 중요하다. 40 7th 감각, 시스템 트레이딩 이제 시스템 트레이딩의 모든 부분을 알아 보았다. 다양한 진입 및 청산 방법, 자산관리 방법에 대해서 상세히 설명하였으며, 모든 전략의 소스 코드를 제공 하였다. 소스 코드를 처음 접하는 독자는 이해하기 어려울 수도 있다. 하지만 한 번 익혀두면 평생을 사용할 수 있다는 점을 명심하자. 매매 전략의 구성을 다시 한번 정리해보자. 우선 언제 사느냐를 결정하는 진 입 전략인데, 진입 방법은 저가 진입을 하느냐, 추격 진입(돌파 확인 진입) 하느냐를 결정하는 과정이다. 지표를 이용할 수도 있고, 패턴을 이용할 수도 있을 것이다. 최선의 진입전략은 진입 이후 수익이 발생할 가능성이 가장 큰 시점에서 진입하는 것이다. 그 다음에 언제 파느냐를 결정하는 청산 전략을 설정해야 한다. 청산 벙법은 간단하다. 손절매를 실행하느냐, 이익을 언제 실현하느냐이다. 손절매는 피할 수 없다는 것 또한 명심하자. 손절매가 전혀 발생하지 않는 시스템은 없다. 또한 드로다운(연속손실)이 발생하지 않는 시스템도 없다. 따라서 우리가 결 정해야 할 것은 언제, 어느 가격에서 손절매를 하느냐 뿐이다. 이익을 보존하 는 방법의 개발에도 상당한 노력을 기울여야 한다. 대부분의 투자자들은 이익 이 손실로 전환될 때까지 청산을 하지 못하는 경우가 허다하다. 이익은 최대 한 보존되어야 하며, 이러한 이익 보존 방법을 사용함으로서 더욱 더 시스템 의 유용성이 증대될 것이다. 마지막으로 자신의 투자 자금에 맞는 합리적인 자산관리 전략을 사용하는 것 이다. 얼마의 자본으로 한번 매매에 따른 최대 손실을 허용할 것인가를 결정 하는 것이다. 실제로 간과하기 쉬운 부분이지만, 아주 중요한 구성 요소이다. 적절한 자산관리전략의 사용은 파산을 막아주고, 기하급수적인 수익 증가를 가능하게 해준다는 것을 명심하자. 진입, 청산, 자산관리 전략을 완성하였다면 이제 실행이다. 실행의 첫 단계는 가상 매매에서 출발한다. 왜냐하면 매매전략의 과 최적화나 범용성, 코딩 에 러 등을 검증하는 과정이 필요하기 때문이다. 모든 확인이 끝났다면, 이제 실 행을 하면 된다. 자동 주문, 모니터링 윈도우 등을 이용해서 실제 시장에 주 문을 발생시키고, 수익을 창출하게 된다. 위와 같은 과정을 통해서 매매를 하는 것이 시스템 트레이딩이다. 즉 시스템 트레이딩이란 매매에 필요한 합리적인 의사 결정들을 진입하기 전에 미리 결 정하고, 이에 따라서 매매를 하는 방법이다. 시스템 트레이딩 구성 요소인 진입, 청산, 자산관리 알고리즘은 아주 단순한 것부터 복잡하고, 학문적인 알고리즘까지 다양하다. 한가지 분명한 것은 성배 (holy grail)는 없다는 것이다. 100% 완벽한 시스템을 찾느니, 합리적인 전략 으로 매매를 실행하는 것이 더 현명한 방법이다. 많은 경험 사례나 실제 선물 매매를 하고 있는 투자자라면, 감정이나 직관에 의해서 투자하는 방법이 결국 실패로 이어진다는 것을 잘 알고 있을 것이다. 모든 매매의 적은 인간의 오감 및 육감(직관)이다. 많은 투자자들이 자신의 판단 및 직관을 이용해서 매매를 하고, 여기에 실패 의 원인이 있다. 이중 극소수 투자자는 이러한 투자 방법으로 큰 수익을 올리 기도 한다. 하지만 극소수의 투자자의 매매 패턴도 사실은 꾸준하고, 기계적 (automatic)인 매매 방법으로서 광의의 시스템 트레이딩이라 할 수 있다. 책 제목인 『7th 감각, 시스템 트레이딩』은 이러한 이유에서 출발했다. 오감, 육감을 사용하여 실패를 반복하는 매매 방법에서 벗어나, 시장의 원칙에 충실 하고 합리적인 매매 방법(7th 감각)에 따르기를 권장하는 의미이다. 실제로 시 장 원칙에 충실한 매매 원칙을 하나만이라도 찾아내면 꾸준히 수익을 만들어 내고, 매매를 직업으로 하는 “전문 투자자”, “시스템 트레이더(system trader)”가 될 수 있다. 이 책에서 제공한 모든 매매 전략들은 실제 매매에 사용 가능하다. 또한 소스 th 2 7 감각, 시스템 트레이딩 코드를 제공해서 자신의 매매 전략으로 계량화해서 사용할 수 있게 하였다. 제공된 매매 알고리즘을 기초로 해서 자신의 전략으로 개발하는 것 또한 상당 히 중요하다. 자신과 적합한 전략이 아닐 경우, 제공된 전략대로 따라서 매매 하기가 상당히 힘들어지기 때문이다. 예를 들어 3장에서 설명한 RangeBreak(v0.22)의 기초 진입 전략을 이용하여 5 장에서 다양한 청산 전략으로 변경하여, 자신만의 새로운 전략으로 만드는 것 이다. 더 나아가 진입 전략들의 결합이나, 자신만의 매매 전략을 추가해서 자신에게 잘 맞고 더 좋은 전략으로 거듭나게 되는 진화 과정을 지속하는 방법을 권장 한다. 매매 알고리즘은 시스템 트레이딩을 실행하면서 더 좋은 알고리즘을 찾 을 수 있기 때문이다. 시장은 변화된다. 변화되는 시장에 적응하기 위해서는 스스로 개발이나 변경 을 할 수 있는 능력이 있어야 한다. 남이 사용한 전략을 그대로 사용하게 되 면, 변화되는 시장에 적용할 수 없는 것은 당연한 이치이다. 전략을 이해하고 꾸준히 시장에 적응하도록 개발하고 관리하는 것이 시스템 트레이더로서 기본 자세이다. 마지막으로 자본의 여유가 있다면, 다수의 전략을 동시에 적용하는 분산화 (diversification)전략을 사용하길 권장한다. 즉 하나의 전략이 가질 수 있는 위험을 분산하여 위험을 다시 한번 최소화하고, 수익을 극대화하는 방법인 분 산화 전략을 구사하는 것이다. 앞서 3장에서 단기매매 전략과 데이트레이딩 전략을 결합할 경우 누적 수익곡 선의 선형성이 강화되는 것이 좋은 예가 될 것이다. 여기서 간단하게 앞서 제 공한 진입 전략들 중 몇 가지를 동시에 매매하였을 경우, 어떤 효과가 발생하 는지 관찰해보자. 우선 앞서 모든 테스트는 2003년 9월 30일로 제한하였다. 여기서는 2004년 2월 25일까지 테스트 결과를 보기로 하자(CTÆ포트폴리오 분 석 Æ 전략 선택). <전략 포트폴리오 결과> 항목 총손익 평균손익 총매매수 최대 자본인하액 승률 손익비 평균손익비 보상비율 243,912 103.22 2,363 DD_Pattern _consec 78,112 108.64 719 DD_Pattern _reversal 71,066 116.50 610 DD_Patten_ MaxPower 94,734 91.62 1,034 -5,817.95 -3,105.38 -4,547.17 -4,178.53 50.28 1.76 1.74 41.92 50.63 1.87 1.82 25.15 50.66 1.84 1.79 15.63 49.81 1.65 1.66 22.67 포트폴리오 주) 테스트 기간: 2000년 1월 4일 ~ 2004년 2월 25일 보상 비율 및 최대 자본인하액: 포트폴리오 경우, 수익 곡선 최대 자본인하액으로 계산 우선 포트폴리오 분석에서는 보상 비율 및 최대 자본 인하액을 계산할 때 intraday Drawdown이 아닌 Equity DrawDown 으로 계산한다. 따라서 개별 전략 보다 과소 계상된다. 어쨌든 보상비율이 40 배로 손실의 증가보다 수익이 더 증가하는 긍정적인 효과를 보였다. <전략 포트폴리오 누적수익곡선> 테스트구간 가상매매구간 위의 그림은 오른쪽 Y축이 포트폴리오 수익곡선이고 왼쪽 Y축이 개별 수익곡 선 축인데, 하나의 수익 곡선이 하향할 때 다른 수익곡선이 상승하여 상호 보 완되는 현상을 볼 수 있을 것이다. 또한 2003년 9월 30일 이후에서 2004 년 th 4 7 감각, 시스템 트레이딩 2월 25일까지 수익곡선의 변화를 보면 소폭이나마 상승세를 유지하는 것도 알 수 있다. <전략 포트폴리오 월별 순손익 곡선> 테스트구간 가상매매구간 이러한 현상을 좀더 자세히 관찰하기 위해서 월별 순 손익 그래프를 보면, 2003년 9월전에는 3개월 소폭의 손실 이외는 모두 수익이 발생하였고, 9월 이 후에는 12 월까지 수익이 발생하다 2004년 1월, 2월에 소폭 손실이 발생하였 다는 것을 보여주고 있다. 즉, 이렇게 대부분의 월에서 수익이 발생하는 효과는 분산화 전략을 통한 포 트폴리오 매매를 함으로써 구현된다는 것을 보여주고 있다 2004년 1월 및 2월 장세가 데이트레이더에게는 상당히 힘들게 진행되고 있다. 즉 추세는 상승 추세인데, 변동성이 적은 구간이 지속되고 있어 데이 트레이 딩으로 수익을 획득하기가 힘든 구간이 상당 기간 지속되고 있는 것이다. 하 지만 우리는 이미 알고 있다. 변동성 또한 수렴/확장을 반복한다는 것을•••. 이 책은 지속적으로 업데이트할 예정이다. 여기서 제공된 전략 및 개발된 또 다른 전략들도 앞으로 만나볼 기회가 있을 것이다. 시스템 트레이딩은 합리적인 투자 방법이다. 이 책을 통해서 진정한 시스템 트레이더로 거듭나고 꾸준한 수익을 올리기를 기원한다. th 6 7 감각, 시스템 트레이딩 참고자료 외국 소프트 웨어 Tradestation 가장 유명한 시스템 트레이딩 소프트웨어이다. 홈페이지를 통해 시스템 트레 이딩 전략들도 제공하고 있다. http://www.tradestationworld.com Metastock 유용한 시스템 트레이딩 소프트웨어이다. 웹사이트는 http://www.equis.com 이며 여기에도 다양한 지표 및 전략들이 있다. 엑스포(Expo, Conference) 다양한 소프트 웨어 및 매매 전략 강의를 들을 수 있는 엑스포가 있다. 미국 에 국한해서 살펴보면 다음과 같다. Onlinetrading Expo 1년에 정기적으로 두 번 열리는 Expo 이다. Trading 관련 소프트 웨어의 동향 및 유명 트레이더 및 저자들의 강의를 들을 수 있다. http://www.tradersexpo.com Tradestation Expo 2000 열리고 4년 만에 다시 열리는 Expo 로서 Tradestation사가 주최 한다. 역 시 다양한 Trading Software 및 강의를 들을 수있다(일정 2004.10.22 ~ 24). http://www.tradestationworld.com/conference/default.shtm 잡지 새로운 매매 전략 등 매매 및 선물, 옵션에 대한 월간 잡지들이다. Stock & Commodity 기술적 분석 및 시스템 매매 전문 잡지이다. 시스템 트레이더라면 상당히 유용하 게 구독할 수 있는 잡지이다. 한국에서 구독이 가능하며 10 년 이상의 연구 결과 를 CD로 구입할 수 도 있다. http://www.traders.com/S&C_homepg.html Active Trader Magazine 또 하나의 유용한 잡지로서 단기 매매 및 시스템 트레이딩 관련 연구 결과를 볼 수 가 있다. 한국에서도 구독이 가능하다. http://activetradermag.com/ Futures Magazine 선물, 옵션 관련 전략 및 시장 동향 등을 볼 수 있는 잡지이다. 한국에서 구 독 가능하다. http://www.futuresmag.com/ Traders world magazine 대부분이 피보나치, 갠 등으로 특화된 매매 방법이나 전략들을 만나볼 수 있 는 잡지이다. 이 분야에 관심이 있는 투자자라면 구독해볼 만하다. 과거 연구 결과 CD도 판매하고 있다. http://www.tradersworld.com/ 8 참고자료 관련서적 기술적 분석 및 시스템 트레이딩, 단기 매매 등에 대한 수많은 서적이 있다. 이중에서 대표적인 저자 위주로 몇 가지 서적을 소개하겠다. 책 구입은 아마 존과 http://www.traderslibrary.com 에서 구입 가능하다. Kaufman, Perry J. 다수의 책자 및 연구 업적이 있는데 이중 Trading Systems and Methods, 3rd Edition은 기술적 분석 및 시스템 트레이딩 매매 전략, 시스템 평가 등 광범 위한 부분에 대해서 상당히 깊은 수준까지 제공하는 책이다. Murphy, John 기술적 분석 분야에서는 최고의 수준으로 꼽히는 저자로서 기술적 분석에 기 초 서적이고 한국에도 번역본이 나와있는 Technical Analysis of the Financial Markets이 있다. Pring, Martin 역시 기술적 분석 분야에서 상당한 업적과 책을 출간하였는데 대표적인 책자 로는 기술적 분석의 기본 서적인 Technical Analysis Explained 과 기술적 지 표 및 모멘텀에 대한 심도있는 연구 서적인 Martin Pring on Market Momentum 이 있다. Demark, Thomas R. 이 책에서도 소개된 디마크 지지, 저항선과 유명한 TD Sequence를 개발한 기 술적 분석가이다. 대표 서적은 New Market Timing Techniques: Innovative Studies in Market Rhythm & Price Exhaustion 이 있다. Williams, Larry 유명한 트레이더 및 저자로서 실제로 수익을 발생하고 관련 서적을 출판하였 다. 이 책에서도 자주 언급된 저자이다. 데이 트레이더라면 필독해야 할 책이 다. 대표 서적은 Long-Term Secrets to Short-Term Trading 이다. Jake, Bernstein 데이 트레이딩에서는 이 사람을 빼 놓을 수 없다. 많은 책자를 출간 하였으며 훌륭한 데이트레이딩 관련 서적이 많다. 대표적인 서적은 The Compleat Guide to Day Trading Stocks, The Compleat Day Trader: Trading Systems, Strategies,..., The Compleat Day Trader II 가 있다. Elder, Alexander Triple Screen Method, 2% rule 등 다양하고 정교한 실전 기술적 분석가이다. 대표적인 책자로는 Trading for a Living: Psychology, Trading Tactics, Money Management, Come Into My Trading Room: A Complete Guide to Trading 이 있다 Chande, Tushar 시스템 트레이딩 및 가변(adaptive) 방법 및 6 가지 이상의 매매 전략을 제공 하는 책자를 작성하였고 일정 기간 지나고 나서 제공한 전략에 대한 검증을 다시 책자로 출간하였다. Beyond Technical Analysis: How to Develop and Implement a Winning Trading System, 2nd Edition 이 그것이다. Stridsman, Thomas 시스템 트레이딩 전략 및 개발 방법 등을 자세히 설명하고 tradestation을 이 용한 코딩도 제공하고 있다. Trading Systems That Work: Building and Evaluating Effective Trading Systems Pruitt, George tradestation 7.0을 이용한 추세추종적인 매매 전략 및 단기 매매 전략을 제 공한 책자의 저자로서 유용한 전략 알고리즘이 많이 소개되어 있다. Building Winning Trading Systems with TradeStationTM Raschke, Linda B. 여자로서 현재 활발한 활동 중에 있다. 성공한 데이 트레이더로서 관련 서적 은 그리 많지 않다. 가장 대표적인 책자는 Street Smarts: High Probability 10 참고자료 Trading Strategies for the Futures and Equities Markets 가 있다 Schwager, Jack D. market wizard 1,2를 작성한 저자로서 한국에도 번역 책자가 많이 있을 정도 로 유명하다. 기술적 분석 및 패턴 분석으로 유명한 책자는 Technical Analysis 가 있다. K., Tharp, Van 몇 안 되는 자산 관리 부분에 대한 심도 있게 설명한 책자를 출판한 저자로서 자산 관리에 관심이 잇는 투자자라면 필독해야 할 것이다. Financial Freedom Through Electronic Day Trading Ryan, Jones 역시 자산 관리 전략에 대한 심도 있는 연구가 있는 책을 출판한 저자이다. 이 책에서도 소개된 Fixed ratio method을 개발하였다. The Trading Game: Playing by the Numbers to Make Millions F. Ehlers, John 사이클 분석이나 DPS(digital signal processing)에 관심이 있는 투자자라면 이 저자의 책을 관심있게 보아야 할 것이다. Rocket Science for Traders: Digital Signal Processing Applications 12 참고자료 색 인 ᆨ ᆮ 가상매매 · 113 다이버전스 · 303, 310, 311, 312, 313, 갭 다운 · 284, 286 314 갭 업 · 284, 286 단위분석 · 413 갭 필 · 284, 286 독립모드 구동 · 39 고정 금액 · 357, 358, 359, 361, 362, 되돌림 · 204, 233, 262, 263, 264 366 고정 부분 투자 방법 · 392, 393, 395, 397, 398 드로다운 · 96 디마크 · 217, 218, 222, 223, 224, 229, 451 고정 비율 투자 방법 · 392, 393, 394, 396, 397, 398 ᆷ 고정주수 · 357 과 최적화 · 115, 169, 429 국소최대값 · 430 마틴게일 · 20, 369, 370, 371, 372, 373, 374, 387, 397, 398 그물망 차트 · 239, 240, 244, 303 매도 · 67 기하급수적인 수익증가 · 353 매도 청산 · 67 매매 · 8 ᆫ 매매간 평균기간 · 417 매수 · 67 누적 금액 · 357, 358, 359, 361, 365 매수 청산 · 67 누적 금액방식 · 358 모니터링 윈도우 · 118 누적 수익곡선 · 98, 99, 144, 149, 164, 모형 분석 · 204, 233, 271 169, 175, 183, 184, 223, 288, 318, 목표이익 청산 · 333, 334, 335 359, 360, 362, 367 누적손익 갱신기간 분포도 · 420 ᆸ 누적수익곡선 · 14, 22, 24, 99, 144, 167, 168, 189, 289, 359, 362, 368, 369, 범용성 · 88, 181, 426, 429, 440 391, 392, 394, 418, 434 변곡점 · 75 변동 계수 · 410 155, 156, 157, 158, 160, 162, 163, 변동성 · 123, 125, 126, 130, 133, 134, 164, 165, 176, 177, 319, 320, 321, 135, 144, 151, 170, 173, 174, 197, 322, 324, 326, 329, 330, 331, 333, 203, 206, 226, 232, 233, 234, 236, 334, 336, 338, 339, 348, 349, 375, 237, 238, 239, 241, 247, 267, 269, 376, 385, 387, 390, 443 277, 333, 338, 343, 344, 345, 347, 349, 375, 377, 390, 392, 440 수렴 돌파 · 204, 232, 233, 244, 245, 247, 249 보상비율 · 98 순환분석 · 415 보유 수익률 · 408 스윙 · 75, 184, 256, 257, 259, 264, 볼린저 밴드 · 233, 237, 238, 239, 240, 244, 303 부분 갭 · 286 266, 267, 269, 270 스토케스틱 · 130, 203, 204, 302, 306, 308, 310, 313, 314 슬리피지 · 18, 20, 30, 51, 52, 73, 84, ㅃ 117, 141, 142, 143, 149, 156, 163, 164, 205, 319, 321, 326, 332, 348, 빠른 추적스탑 · 324, 338, 339, 340, 348, 349 358, 403 승률 · 96 시뮬레이션 보고서 · 45, 46, 47, 54, 55, ᄉ 사각 모형 · 276, 278 사이보스2004 · 38, 39 삼각형 · 233, 271, 278, 279, 280, 282, 320, 323, 327 상승 함정 · 271, 272, 274 143, 319, 402 시스템 수익률 · 408 시장 참여기간 · 417 ᄊ 쐐기형 · 278, 279, 280, 281, 282 센티멘트지표 · 32 손익 분포도 · 421 ᄋ 손익분기점 · 324, 327, 331, 332, 338, 339, 340, 341, 342, 346, 348, 349 역 추세 추종적인 전략 · 79, 203, 405 손익비 · 97 연 환산 수익률 · 408 손절매 · 19, 68, 69, 72, 85, 86, 87, 91, 연결선물지수 · 33, 34, 61, 126, 128, 94, 101, 150, 151, 152, 153, 154, 129, 134, 141, 191, 266, 402 14 색인 연속 손실 · 90, 91, 93, 95, 96, 100, ᄌ 101, 102, 129, 143, 144, 149, 156, 163, 164, 168, 175, 181, 182, 183, 자유도 · 89 188, 194, 198, 212, 214, 217, 223, 전략 속성창 · 47, 50, 58, 70, 72, 84, 229, 231, 232, 237, 244, 249, 256, 141 270, 282, 288, 293, 297, 302, 313, 전역 최대값 · 106 314, 322, 326, 328, 341, 353, 357, 전역최대값 · 427, 428, 429, 430, 440 361, 369, 370, 371, 372, 374, 376, 전진 분석 · 435 380, 381, 384, 386, 387, 389, 391, 조정 손익비 · 408 396, 403, 411, 412, 432, 433 조정 총손실 · 408 연속 이익 매매수 · 95 조정 총손익 · 408 연속 패턴 · 293 조정 총이익 · 408 연속손실과 만회수익률 · 92, 356 종합자산곡선 · 418 오실레이터 · 303, 306, 310 주가 채널 · 130, 233, 245, 246, 248, 워크그룹 · 39, 40, 41, 47, 53 월별(주별) 순 손익 · 419 249, 256, 257, 262, 277, 303 증거금 · 96, 131, 132, 353, 357, 361, 위험 노출 비율 · 381 362, 363, 365, 366, 367, 368, 375, 유효성검증 · 43, 49 376, 377, 378, 380, 381, 382, 398, 이동평균선 · 9, 22, 25, 53, 54, 64, 67, 409 77, 79, 84, 87, 89, 103, 106, 109, 진입 효율 · 404 110, 127, 128, 129, 130, 133, 134, 191, 204, 206, 233, 237, 238, 240, ᄎ 241, 245, 247, 302, 303, 304, 305, 306, 314, 426 이중 바닥형 · 271, 272, 274 이중 천정형 · 272 인사이드 데이 · 249, 250 일목균형표 · 233, 242, 244, 303 일중 드로다운 · 96 차트마법사 · 40 차트패드 · 47 초 단타매매 · 76, 176 초과 수익 청산 · 332, 338, 349 초기 자본금 · 93, 357, 358, 361, 362, 366, 368, 375, 376, 378, 379, 380, 382, 385, 394, 395, 398, 408, 409 초기자본 대비 수익률 · 408 총 매매수 · 94 총손익 · 93 투자 · 8 최대 누적손익 인하액 · 404 특이치 제거 후 총 손익 · 410 최대 드로다운 · 96 특이치 제거 후 총손실 · 410 최대 미실현 손실 · 319 특이치 제거 후 총이익 · 410 최대 미실현 이익 · 322, 324 최대 일중 드로다운 · 96 ᄑ 최대 자본 인하액 · 95 최대드로다운 · 411 최대손실 · 90, 98, 163, 188, 189, 327, 패턴 분석 · 204, 233, 249, 271, 282, 283, 290, 293, 302, 314, 453 373, 378, 379, 380, 381, 384, 386, 평균 손익 · 94 387, 403, 411 평균 손익비 · 97 최소 필요자본 · 409 평균 이익(손실)매매기간 · 417 최소 필요자본 대비 총손익 · 409 평균드로다운 · 412 최적화 · 18, 37, 46, 47, 53, 56, 57, 81, 평균분석 · 415 82, 85, 87, 89, 90, 101, 103, 104, 플러그인 구동 · 38, 39 105, 106, 107, 112, 115, 129, 151, 피봇 포인트 · 207, 208, 210 153, 155, 165, 166, 167, 168, 169, 필터 · 129, 205, 206, 207, 225, 227, 174, 175, 181, 205, 206, 207, 243, 232, 249, 253, 303, 304, 306, 314, 283, 303, 327, 328, 330, 341, 379, 428 381, 390, 395, 401, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, ᄒ 435, 436, 437, 439, 440, 444 추가 진입 시점 · 324 추세 추종적인 진입 · 77, 78, 79 추세선 · 204, 233, 256, 257, 259, 269, 270, 271, 280, 282, 329 하락 함정 · 271, 272 A Atlimit · 62 추적스탑 · 참조 추적청산 Atmarket · 60, 127 추적청산 · 158, 160 ATR · 123, 124, 125, 126, 133, 134, 151, 170, 171, 172, 173, 174, 182, ᄐ 188, 191, 192, 199, 206, 210, 233, 234, 236, 285, 324, 329, 330, 331, 퇴출 효율 · 404 16 색인 333, 338, 348, 349, 375, 390 Exitshort · 참조 매도청산 Atstop · 62, 126 Average Profit · 참조 평균손익 F B Fixed Fractional Method · 참조 고정 부 분 투자 방법 Back Test · 참조 simulation Bar · 271 Fixed Ratio Method · 참조 고정 비율 투자 방법 Black Box · 27 Bollinger Band · 참조 볼린저 밴드 G Buy · 참조 매수 Geometric Pattern · 참조 모형분석 C Global Maximum · 참조 전역 최대값 Candle · 271 H Candlestick · 283 Consecutive Pattern · 참조 연속 패턴 Half on loss · 373, 374 CTA · 14, 17, 77 Hit Ratio · 참조 승률 D I Degree of Freedom · 참조 자유도 In, Out-Sample · 432 DeMark · 참조 디마크 Intra-day drawdown · 참조 일중 드로다 DMI · 233, 246, 247, 248, 249, 303 운 Double on loss · 373, 374 Double or half · 373, 374 Drawdown · 참조 드로다운 E Equity Curve · 참조 누적수익곡선 Exitlong · 참조 매수 청산 J Jake Bernstein · 131 K kelly 공식 · 382 L P Larry William · 140, 382 Paper Trading · 참조 가상매매 LRS · 260 Partial Gap · 참조 부분 갭 Pivot Point · 참조 피봇 포인트 M Price Channel · 참조 주가 채널 MAE · 151, 318, 319, 321, 323, 324, R 325, 327, 328, 330, 338, 349, 406 Max intra-day drawdown · 참조 최대 자본 인하액 Maximum drawdown · 참조 최대 드로 다운 Maximum intra-day drawdown · 참조 최대 자본 인하액 Raff Regression Channel · 261 Range · 107, 110, 123, 125, 126, 136, 140, 141, 142, 145, 146, 147, 151, 153, 154, 159, 161, 165, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 185, 186, 188, 189, 190, MetaStock · 27, 28, 29, 30, 32 191, 192, 194, 197, 198, 203, 206, MFE · 318, 319, 322, 323, 324, 325, 207, 214, 217, 233, 234, 236, 237, 327, 328, 330, 338, 341, 349, 406 239, 241, 243, 244, 246, 248, 252, Multi Moving Average Indicator · 참조 255, 259, 267, 269, 270, 271, 283, 그물망 차트 290, 292, 293, 295, 298, 304, 329, 330, 338, 339, 340, 341, 343, 345, N 347, 348, 349, 356, 357, 358, 363, 364, 370, 375, 377, 379, 381, 383, Net profit · 참조 총손익 386, 388, 389, 390, 395, 401, 402, NR · 233, 252, 253, 254, 255, 256 424, 425, 426, 428, 429, 445 Rectangle · 참조 사각모형 O Onclose · 60 Open Gap · 25, 31 Open tool box · 26 18 색인 Retracement · 참조 되돌림 Reversal pattern · 336 RINA Index · 405 S Scalping · 참조 초 단타매매 Sell · 참조 매도 Sentiment Indicator · 참조 센티멘트지 표 Sharpe Ratio · 405 Simulation · 37 Standard Deviation Channel · 261 Standard Error Channel · 261 Stochastic · 303 T TR · 123 Tradestation · 24, 27, 28, 29, 30, 32, 449 Trailing Stop · 참조 추적청산 Triangle · 참조 삼각형 U Underwater Equity Curve · 418 V Volatility Model · 392 W Wedge · 참조 쐐기형 『7th 감각, 시스템 트레이딩 with CybosTrader』첨부CD 사용법 첨부파일과 CD사용법 첨부된 CD에는 대신증권 『사이보스 트레이더』, 『사이보스2004』프로그램과 전략/신호/지표 등의 예제 파일, 『사이보스트레이더 언어활용법』이 수록되 어 있습니다. 『사이보스2004』와 『사이보스 트레이더』를 차례로 설치한 후 『사이보스 트 레이더』의 가져오기 기능을 통해 각 장별로 예제를 하드에 복사하시면 사용할 수 있습니다(『사이보스2004』가 설치되어 있는 경우 『사이보스 트레이더』만 설치하시면 됩니다.). 『사이보스 트레이더』가 설치되면, C:₩DAISHIN₩CybosTrader₩ 폴더에 저장됩 니다. 가능한 한 설치폴더의 위치를 변경하지 마십시오. 예제 파일은 settestmode 함수를 통해 실전매매에 사용할 수 없게 되어 있습 니다. 실전매매를 원하는 경우 대신증권 지점에서 계좌를 개설하신 후 담당직 원과 상담 후 settestmode를 삭제하시면 즉시 사용할 수 있습니다. 단, settestmode를 삭제한 후 발생하는 모든 문제(매매손실, 시스템오류 등)에 대 한책임은 사용자에게 귀속됨을 알려 드립니다. 이 CD와 관련하여 더욱 상세한 내용은 경제연구소 금융공학실(Tel 02-7693103, 3112)로 문의 하시기 바랍니다. 20