2021.12.09 - [Python] - [Python] finterstellar를 사용하여 RSI로 주식 매매 시그널 만들기
먼저 핀터스텔라가 처음이라면 이전 글을 보고 와주세요.
MACD (Moving Average Convergence Divergence)
MACD는 이동평균수렴확산지수라고 말하며, 대표적인 보조 지표 중 하나입니다.
MACD를 계산할 때 MA(Moving Average)를 사용하여 주가 추이를 보면, 몇 일간의 누적 데이터가 필요하므로 실제 추이보다 늦어질 수 밖에 없습니다.
이를 해결하기 위해 최근의 데이터에 더 높은 가중치를 주고 계산한 EMA(Exponential Moving Average)를 사용합니다.
이 EMA를 사용하여 MACD의 보조 지표들을 계산할 수 있습니다.
수식을 보시면, MACD는 12일 간의 단기 이동평균에서 26일 간의 장기 이동평균을 빼서 만듭니다.
따라서, 양수면 상승 추세, 음수면 하락 추세라는 것을 알 수 있죠.
MACD signal은 9일간의 MACD 이동평균으로 MACD의 후행적 특징을 개선하는 데 도움이 됩니다.
MACD Oscillator는 MACD의 강도 및 변화 추이를 쉽게 확인하기 위해 만들어진 지표입니다.
투자전략으로는 MACD가 양수이면 매수, 음수이면 매도를 하는 전략과 MACD Oscillator가 양수면 매수, 음수면 매도하는 전략이 있습니다.
MACD가 MACD signal을 상향 돌파하면 매수하고 하향 돌파하면 매도하라는 말과 같은 말입니다.
백테스팅
이번에는 테슬라의 주가로 한 번 테스트를 해보겠습니다.
MACD역시 finterstellar에서 제공이 됩니다.
macd(데이터, 단기일 수=12, 장기일 수=26, signal일 수=9)
기본 날짜는 위와 같고, 변경도 물론 가능합니다.
실제로 돌려보겠습니다.
df = fs.get_price('TSLA', start_date='2021-01-01', end_date='2021-11-30')
fs.macd(df)
fs.draw_chart(df, left='TSLA', right=['macd', 'macd_signal', 'macd_oscillator'])
이해하기 쉬운 그래프가 보이네요.
이제, 2가지의 매매 전략을 각각 테스트 해보겠습니다.
fs.indicator_to_signal(df, factor='macd', buy=0, sell=0)
fs.position(df)
fs.draw_chart(df, left='macd', right='position_chart')
먼저, MACD를 사용한 전략입니다.
배웠던 대로 수익률도 계산해보도록 하겠습니다.
fs.evaluate(df, cost=.0025)
fs.draw_trade_results(df)
보라색 부분이 주식을 들고 있던 부분인데, 한 번의 손실이 있었지만 최종적으로 큰 이득을 얻은 모습을 볼 수 있네요.
다음으로 바로 MACD Oscillator를 사용한 전략을 보겠습니다.
fs.indicator_to_signal(df, factor='macd_oscillator', buy=0, sell=0)
fs.position(df)
fs.evaluate(df, cost=.0025)
fs.draw_trade_results(df)
MACD에 비해 상당히 빈번한 매매가 발생했네요.
대충보니 MACD에 비해 낮은 수익을 얻은 것처럼 보이네요.
투자 성과분석
이제 각각의 성과를 눈으로 살펴보겠습니다.
MACD | MACD Oscillator |
그래프에서 본 것처럼 테슬라의 경우, 올해는 MACD 전략이 더 유효한 전략이었네요.
심지어 평균 수익률은 -임에도 벤치를 웃도는 수익률을 보입니다.
아마도 마지막에 매도를 하지 않고 들고 있어서겠죠. ^^
위험에 대한 방어는 두 전략모두 벤치보다 나은 모습을 보이고, 샤프 비율도 MACD를 사용한 전략쪽이 좀 더 나은 모습을 보이네요.
맺음말
이번 포스팅에서는 finterstellar module을 사용하여 MACD를 이용한 매매에 대해 살펴보았습니다.
MACD는 모멘텀 투자 전략중 하나로 알려져 있고, 상승세에 있는 종목에 적합하다고 평가됩니다.
본인만의 매매 전략을 짜실 때, 참고가 될만한 지표이니 잘 공부해보시기 바래요.
'Python' 카테고리의 다른 글
[Python] finterstellar를 사용하여 Envelope로 주식 매매 시그널 만들기 (0) | 2021.12.11 |
---|---|
[Python] Getting Started with Kaggle (0) | 2021.12.11 |
[Python] finterstellar를 사용하여 RSI로 주식 매매 시그널 만들기 (0) | 2021.12.09 |
[Python] Singleton Pattern (0) | 2021.11.02 |
[Python] String (0) | 2021.10.31 |
댓글