본문 바로가기
AyoProject/Ayotera-Trade

[AT] 22. MACD 지표에 대한 구현 및 매매시점 예측 (6)

by 청양호박이 2020. 11. 16.

이번에는 얼마전에 해본 테스트를 다시 해보려고 합니다. 아마 이를 통해서 만족할 만한 결과를 얻을 수도 있고, 왠지 실망할 결과를 얻을 수도 있습니다. 하지만 이것은 결국 MACD도 매매를 위한 보조수단이라는 것은 마음속에 분명히 하고 가야 합니다.

 

하지만 저는 향후에는 MACD만으로 최적의 포인트를 찾아서 매매 실험을 해보려고 합니다. 여튼 이제 본론으로 들어가서... 지난 시간에 구현한 MACD와 MACD Signal의 Cross 상태를 자동으로 찍어준 결과에 대해서 12가지 조건에 대해서 기간별로 실제 발생이 가능한 수익에 대해서 백테스팅(Back Testing)을 수행해 보겠습니다. 이 시뮬레이션으로 아마 가장 EMA (Exponential Moving Average)를 통해서 구현한 MACD로 최적의 구현 식이 어떤 것이지를 확인 할 수 있을 것 입니다.

 

  • MACD에 대한 정의 및 구현
  • 구현된 결과에 대한 정합성 확인
  • MACD를 활용한 매매기법 확인 및 적용
  • 매매기법 별 시뮬레이션 및 실험실
  • 향상된 이동평균산정 법칙 적용 및 실험실

 

우선 백테스팅(Back Testing)을 위한 프로그램을 만들고, Parameter를 조정하면서 결과를 확인해 보겠습니다. 사실 기존에 만들어놓은 테스팅 프로그램에서 원하는 컬럼으로 바꾸기만 하면 모든 준비가 끝나게 됩니다.

 

 

1. 각 조건 별 백테스트 수행 및 검증


[종목코드 : 005930, 종목명 : 삼성전자]

 

측정기간 : 2020년 05월 01일 ~ 2020년 11월 13일 (약 6개월, 반기기준)

 

(1) 조건 : MACD가 0선 아래서 MACD Signal과 GC(Golden Cross)하고, 매수는 시초가, 매도는 시초가

    # chk**Price 1은 시초가, 4는 종가
    chkBuyPrice = 1
    chkSellPrice = 1
    # zeroLine -1은 미만, 0을 상관없고, 1은 이상
    zeroLine = -1
    startTime = '20200501'
==================================================

[결과]
20200519  매수가 :  50000
20200615  매도가 :  51200 , 수익 :  1200
Total GC count :  1 , Total DC count :  6
Total Earn count :  1200

(2) 조건 : MACD가 0선 아래서 MACD Signal과 GC(Golden Cross)하고, 매수는 시초가, 매도는 종가

    # chk**Price 1은 시초가, 4는 종가
    chkBuyPrice = 1
    chkSellPrice = 4
    # zeroLine -1은 미만, 0을 상관없고, 1은 이상
    zeroLine = -1
    startTime = '20200501'
================================================

[결과]
20200519  매수가 :  50000
20200615  매도가 :  52100 , 수익 :  2100
Total GC count :  1 , Total DC count :  6
Total Earn count :  2100

(3) 조건 : MACD가 0선 아래서 MACD Signal과 GC(Golden Cross)하고, 매수는 종가, 매도는 시초가

    # chk**Price 1은 시초가, 4는 종가
    chkBuyPrice = 4
    chkSellPrice = 1
    # zeroLine -1은 미만, 0을 상관없고, 1은 이상
    zeroLine = -1
    startTime = '20200501'
================================================

[결과]
20200519  매수가 :  50000
20200615  매도가 :  51200 , 수익 :  1200
Total GC count :  1 , Total DC count :  6
Total Earn count :  1200

(4) 조건 : MACD가 0선 아래서 MACD Signal과 GC(Golden Cross)하고, 매수는 종가, 매도는 종가

    # chk**Price 1은 시초가, 4는 종가
    chkBuyPrice = 4
    chkSellPrice = 4
    # zeroLine -1은 미만, 0을 상관없고, 1은 이상
    zeroLine = -1
    startTime = '20200501'
================================================

[결과]
20200519  매수가 :  50000
20200615  매도가 :  52100 , 수익 :  2100
Total GC count :  1 , Total DC count :  6
Total Earn count :  2100

(5) 조건 : MACD가 0선 상관없이 MACD Signal과 GC(Golden Cross)하고, 매수는 시초가, 매도는 시초가

    # chk**Price 1은 시초가, 4는 종가
    chkBuyPrice = 1
    chkSellPrice = 1
    # zeroLine -1은 미만, 0을 상관없고, 1은 이상
    zeroLine = 0
    startTime = '20200501'
================================================

[결과]
20200519  매수가 :  50000
20200615  매도가 :  51200 , 수익 :  1200
20200706  매수가 :  55800
20200709  매도가 :  53100 , 수익 :  -2700
20200715  매수가 :  54800
20200814  매도가 :  58900 , 수익 :  4100
20200908  매수가 :  58200
20200923  매도가 :  57700 , 수익 :  -500
20201012  매수가 :  61000
20201023  매도가 :  60400 , 수익 :  -600
20201109  매수가 :  60500
Total GC count :  6 , Total DC count :  6
Total Earn count :  1500

(6) 조건 : MACD가 0선 상관없이 MACD Signal과 GC(Golden Cross)하고, 매수는 시초가, 매도는 종가

    # chk**Price 1은 시초가, 4는 종가
    chkBuyPrice = 1
    chkSellPrice = 4
    # zeroLine -1은 미만, 0을 상관없고, 1은 이상
    zeroLine = 0
    startTime = '20200501'
================================================

[결과]
20200519  매수가 :  50000
20200615  매도가 :  52100 , 수익 :  2100
20200706  매수가 :  55800
20200709  매도가 :  52700 , 수익 :  -3100
20200715  매수가 :  54800
20200814  매도가 :  58400 , 수익 :  3600
20200908  매수가 :  58200
20200923  매도가 :  57800 , 수익 :  -400
20201012  매수가 :  61000
20201023  매도가 :  60400 , 수익 :  -600
20201109  매수가 :  60500
Total GC count :  6 , Total DC count :  6
Total Earn count :  1600

(7) 조건 : MACD가 0선 상관없이 MACD Signal과 GC(Golden Cross)하고, 매수는 종가, 매도는 시초가

    # chk**Price 1은 시초가, 4는 종가
    chkBuyPrice = 4
    chkSellPrice = 1
    # zeroLine -1은 미만, 0을 상관없고, 1은 이상
    zeroLine = 0
    startTime = '20200501'
================================================

[결과]
20200519  매수가 :  50000
20200615  매도가 :  51200 , 수익 :  1200
20200706  매수가 :  53400
20200709  매도가 :  53100 , 수익 :  -300
20200715  매수가 :  53800
20200814  매도가 :  58900 , 수익 :  5100
20200908  매수가 :  58400
20200923  매도가 :  57700 , 수익 :  -700
20201012  매수가 :  60900
20201023  매도가 :  60400 , 수익 :  -500
20201109  매수가 :  60200
Total GC count :  6 , Total DC count :  6
Total Earn count :  4800

(8) 조건 : MACD가 0선 상관없이 MACD Signal과 GC(Golden Cross)하고, 매수는 종가, 매도는 종가

    # chk**Price 1은 시초가, 4는 종가
    chkBuyPrice = 4
    chkSellPrice = 4
    # zeroLine -1은 미만, 0을 상관없고, 1은 이상
    zeroLine = 0
    startTime = '20200501'
===============================================

[결과]
20200519  매수가 :  50000
20200615  매도가 :  52100 , 수익 :  2100
20200706  매수가 :  53400
20200709  매도가 :  52700 , 수익 :  -700
20200715  매수가 :  53800
20200814  매도가 :  58400 , 수익 :  4600
20200908  매수가 :  58400
20200923  매도가 :  57800 , 수익 :  -600
20201012  매수가 :  60900
20201023  매도가 :  60400 , 수익 :  -500
20201109  매수가 :  60200
Total GC count :  6 , Total DC count :  6
Total Earn count :  4900

(9) 조건 : MACD가 0선 위에서 MACD Signal과 GC(Golden Cross)하고, 매수는 시초가, 매도는 시초가

    # chk**Price 1은 시초가, 4는 종가
    chkBuyPrice = 1
    chkSellPrice = 1
    # zeroLine -1은 미만, 0을 상관없고, 1은 이상
    zeroLine = 1
    startTime = '20200501'
================================================

[결과]
20200706  매수가 :  55800
20200709  매도가 :  53100 , 수익 :  -2700
20200715  매수가 :  54800
20200814  매도가 :  58900 , 수익 :  4100
20200908  매수가 :  58200
20200923  매도가 :  57700 , 수익 :  -500
20201012  매수가 :  61000
20201023  매도가 :  60400 , 수익 :  -600
20201109  매수가 :  60500
Total GC count :  5 , Total DC count :  6
Total Earn count :  300

(10) 조건 : MACD가 0선 위에서 MACD Signal과 GC(Golden Cross)하고, 매수는 시초가, 매도는 종가

    # chk**Price 1은 시초가, 4는 종가
    chkBuyPrice = 1
    chkSellPrice = 4
    # zeroLine -1은 미만, 0을 상관없고, 1은 이상
    zeroLine = 1
    startTime = '20200501'
================================================

[결과]
20200706  매수가 :  55800
20200709  매도가 :  52700 , 수익 :  -3100
20200715  매수가 :  54800
20200814  매도가 :  58400 , 수익 :  3600
20200908  매수가 :  58200
20200923  매도가 :  57800 , 수익 :  -400
20201012  매수가 :  61000
20201023  매도가 :  60400 , 수익 :  -600
20201109  매수가 :  60500
Total GC count :  5 , Total DC count :  6
Total Earn count :  -500

(11) 조건 : MACD가 0선 위에서 MACD Signal과 GC(Golden Cross)하고, 매수는 종가, 매도는 시초가

    # chk**Price 1은 시초가, 4는 종가
    chkBuyPrice = 4
    chkSellPrice = 1
    # zeroLine -1은 미만, 0을 상관없고, 1은 이상
    zeroLine = 1
    startTime = '20200501'
================================================

[결과]
20200706  매수가 :  53400
20200709  매도가 :  53100 , 수익 :  -300
20200715  매수가 :  53800
20200814  매도가 :  58900 , 수익 :  5100
20200908  매수가 :  58400
20200923  매도가 :  57700 , 수익 :  -700
20201012  매수가 :  60900
20201023  매도가 :  60400 , 수익 :  -500
20201109  매수가 :  60200
Total GC count :  5 , Total DC count :  6
Total Earn count :  3600

(12) 조건 : MACD가 0선 위에서 MACD Signal과 GC(Golden Cross)하고, 매수는 종가, 매도는 종가

    # chk**Price 1은 시초가, 4는 종가
    chkBuyPrice = 4
    chkSellPrice = 4
    # zeroLine -1은 미만, 0을 상관없고, 1은 이상
    zeroLine = 1
    startTime = '20200501'
================================================

[결과]
20200706  매수가 :  53400
20200709  매도가 :  52700 , 수익 :  -700
20200715  매수가 :  53800
20200814  매도가 :  58400 , 수익 :  4600
20200908  매수가 :  58400
20200923  매도가 :  57800 , 수익 :  -600
20201012  매수가 :  60900
20201023  매도가 :  60400 , 수익 :  -500
20201109  매수가 :  60200
Total GC count :  5 , Total DC count :  6
Total Earn count :  2800

 

 

3. 결과


물론 다양한 종목으로 다양한 기간으로 테스트를 해봐야겠지만, 삼성전자로 적용한 결과는 아래의 조건일때, 생각하지않고 단순 투자를 할 경우 EMA상황에서 가장 큰 수익을 얻을 수 있습니다.

 

(8) 조건 : MACD가 0선 상관없이 MACD Signal과 GC(Golden Cross)하고, 매수는 종가, 매도는 종가

 

아무래도... 매수 시점은 위험성을 고려했을때 골든크로스때 매수하는건 바람직해 보입니다. 하지만 데드크로스일때 매도하는 것은 아무래도 좀 시점이 늦지 않나 싶습니다. 왜냐하면 우리는 게다가 익일 종가에 매도하기 때문입니다. 그럼 다음에는 좀 심화로... 적당한 포인트에 매도를 하는 로직을 적용해서 시뮬레이션 해보겠습니다.

 

이게 다 마무리 된다면... MACD로 매수 타임이 오는 종목과, 매도 타임이 오는 종목에 대해서 가능하면 매일 블로그에 기재하고.. 실제로 매매를 해보려고 합니다. 당연히 그 결과 실 수익도 올려보겠습니다.

 

- Ayotera Lab -

 

 

 

0. 기본 매매기법 Remind


 

[MACD를 활용한 기본 매매기법 조건 - 매수]

  조건 식 매매 유무
조건 1 - MACD가 MACD Signal을 아래서 위로 교차하고 (GC, Golden Cross)
- MACD가 0선 아래에 있고
- MA는 항상 이전일 종가를 기준으로 하기때문에, 실제 매매는 익일
  이루어 지며, 매매 기준은 시초가로 함
매수
조건 2 - MACD가 MACD Signal을 아래서 위로 교차하고 (GC, Golden Cross)
- MACD가 0선 아래에 있고
- MA는 항상 이전일 종가를 기준으로 하기때문에, 실제 매매는 익일
  이루어 지며, 매매 기준은 종가로 함
매수
조건 3 - MACD가 MACD Signal을 아래서 위로 교차하고 (GC, Golden Cross)
- MACD가 0선 위에에 있고
- MA는 항상 이전일 종가를 기준으로 하기때문에, 실제 매매는 익일
  이루어 지며, 매매 기준은 시초가로 함
매수
조건 4 - MACD가 MACD Signal을 아래서 위로 교차하고 (GC, Golden Cross)
- MACD가 0선 위에에 있고
- MA는 항상 이전일 종가를 기준으로 하기때문에, 실제 매매는 익일
  이루어 지며, 매매 기준은 종가로 함
매수
조건 5 - MACD가 MACD Signal을 아래서 위로 교차하고 (GC, Golden Cross)
- MACD가 0선 상관없이
- MA는 항상 이전일 종가를 기준으로 하기때문에, 실제 매매는 익일
  이루어 지며, 매매 기준은 시초가로 함
매수
조건 6 - MACD가 MACD Signal을 아래서 위로 교차하고 (GC, Golden Cross)
- MACD가 0선 상관없이
- MA는 항상 이전일 종가를 기준으로 하기때문에, 실제 매매는 익일
  이루어 지며, 매매 기준은 종가로 함
매수

[MACD를 활용한 기본 매매기법 조건 - 매도]

  조건 식 매매 유무
조건 1 - MACD가 MACD Signal을 위에서 아래로 교차하고 (DC, Dead Cross)
- MA는 항상 이전일 종가를 기준으로 하기때문에, 실제 매매는 익일
  이루어 지며, 매매 기준은 시초가로 함
매도
조건 2 - MACD가 MACD Signal을 위에서 아래로 교차하고 (DC, Dead Cross)
- MA는 항상 이전일 종가를 기준으로 하기때문에, 실제 매매는 익일
  이루어 지며, 매매 기준은 종가로 함
매도

 

댓글