본문 바로가기
Python

[Python] finterstellar를 사용하여 Bollinger Band로 주식 매매 시그널 만들기

by llHoYall 2021. 12. 12.

2021.12.09 - [Python] - [Python] finterstellar를 사용하여 RSI로 주식 매매 시그널 만들기

먼저 finterstellar가 처음이라면 이전 글을 보고 와주세요.

Bollinger Band

Bollinger Band는 이동평균에 변동성을 결합한 그래프 입니다.

Z-Score: 표준 점수

X: 각 데이터 값

µ: 평균 값 

σ: 표준편차

 

즉, X 값이 평균에서 표준편차의 몇 배만큼 떨어져 있는가를 나타내며, 표준편차가 곧 변동성이므로 주가가 변동성 대비 어느 정도 수준에 위치해 있는지를 나타내게 됩니다.

볼린저 밴드의 각각의 선은 다음과 같습니다.

밴드 상단선: N일 간의 이동평균 + k × 표준편차

밴드 중심선: N일 간의 이동평균

밴드 중심선: N일 간의 이동평균 - k × 표준편차

 

볼린저 밴드를 사용한 매매 전략은 envelope과 유사합니다.

모멘텀 전략을 사용할 때는 밴드 상단에서 매매를 하며, 평균회귀 전략을 사용할 때는 밴드 하단에서 매매를 합니다.

볼린저 밴드 매매법을 만든 존 볼린저는 모멘텀 전략을 더 추천했으며, 단타를 하는 투자자들에게 매우 애용되는 지표입니다.

백테스팅

2021.12.11 - [Python] - [Python] finterstellar를 사용하여 Envelope로 주식 매매 시그널 만들기

볼린저 밴드는 envelope과 유사한 면이 많으니 이전 글을 보시면 조금 더 도움이 되실 거에요.

 

finterstellarbollinger() 함수로 이 기능을 제공하고 있습니다.

bollinger(데이터, 기간, 밴드 폭)

요번에는 애플 사의 주식으로 테스트 해보겠습니다.

df = fs.get_price('AAPL', start_date='2021-01-01', end_date='2021-11-30')
fs.bollinger(df, w=20, k=2)
fs.draw_band_chart(df)

오를 때는 밴드 상단을 타고 오르고, 내릴때는 하단을 타고 내리는 모습이 보이네요.

 

다음으로 매매 시그널을 만들어봐야겠죠?

이번에도 모멘텀 전략과 평균회귀 전략을 모두 사용해 보겠습니다.

먼저, 모멘텀 전략입니다.

fs.band_to_signal(df, buy='A', sell='B')
fs.position(df)
fs.evaluate(df, cost=.0025)
fs.draw_trade_results(df)

그다지 좋은 성과를 얻진 못한 것 같네요. ^^;;

다음으로 평균회귀 전략입니다.

fs.band_to_signal(df, buy='D', sell='B')
fs.position(df)
fs.evaluate(df, cost=.0025)
fs.draw_trade_results(df)

애플같은 경우 올 한해 성장 모멘텀이 있는 주가 추이를 보였지만, 볼린저 밴드를 사용한 매매로는 좋은 성과를 얻지 못했을 것으로 보입니다.

투자 성과분석

모멘텀 전략 평균회귀 전략

볼린저 밴드만 이용했다면 어떤 전략을 썼더라도 좋은 성과를 거두진 못했을 거 같네요.

합성 전략

한 번 모멘텀투자도 하면서 평균회귀 투자도 하면 어떨까요?

finterstellar는 이런 합성 전략도 손쉽게 할 수 있게 도와줍니다.

df = fs.bollinger(df, w=20, k=2)
df['s1'] = fs.band_to_signal(df, buy='A', sell='B')
df['s2'] = fs.band_to_signal(df, buy='D', sell='B')
fs.combine_signal_or(df, 's1', 's2')
fs.position(df)
fs.evaluate(df, cost=.0025)
fs.performance(df, rf_rate=.01)
fs.draw_band_chart(df)
fs.draw_trade_results(df)

파이썬이 익숙하시면 쉽게 이해하실 수 있을 거에요.

각각의 전략을 s1, s2라는 이름으로 데이터 프레임을 만들어 준 후, combine_signal_or() 함수를 사용하여 합성을 해줄 수 있습니다.

이 경우에는 합쳐도 개선되는 모습을 보이진 못했네요.

맺음말

볼린저 밴드를 사용한 투자 전략은 모멘텀과 평균회귀 전략 모두에 사용할 수 있지만, 모멘텀 전략이 더 추천됩니다.

주로 단타를 하는 투자자들이 애용하는 지표이며, 이전에 소개해드린 지표들과 함께 사용하여 자신만의 좋은 투자법을 만들어나가시길 바래요.

이동평균선을 구하는 기간, 밴드 폭 등을 변경하면서 튜닝도 해보시고요.

댓글