본문 바로가기

Quant

볼린저 밴드 적용

가끔 주변 분들이 내가 트레이딩이랑 프로그래밍을 다 잘해서 이걸 하는 줄 알던데 전혀 그렇지 않다.

둘 다 못 한다. 트레이딩 기법은 하나씩 배워나가고 있고, 코딩은 매번 새로운 문제에 마주친다.

 

그렇다고 몇년동안 책 읽고 수련한 다음에 도전할 생각은 없다.

아는 것보다 모르는게 더 많지만, 현실은 격식있는 시험이 아니니 있는 수를 계속 짜내서 도전할 뿐이다.

오늘은 그런 맥락으로 볼린저 밴드를 배우고 적용했다.


 

1. 볼린저 밴드란? Bollinger Bands (BB)

미국 사람 볼린저 형님이 개발한 분석 도구로, 주가 변동이 정규분포를 따른다 가정하고 주가가 움직이는 밴드를 계산한 식이다.

출처 : AI 자동 투자 봇 만들기, 노트북 하나로 월급을 두 배 불리는 비법 wiki

중심선, 상한선, 하한선이 있으며 각각의 계산식은 아래와 같다.

 

이 선을 기준으로 매수, 매도 로직을 강화해보려 한다.

 

 

2. 코드 구현

@staticmethod
def create_bollinger_bands(df: DataFrame):
    bb = ta.bbands(df["close"], length=20, std=2)
    bb_cols = ["BBL_20_2.0", "BBM_20_2.0", "BBU_20_2.0"]
    df = df.join(bb[bb_cols])
    return df

 

표준편차, 이동평균선을 직접 계산해도 괜찮지만

ta 라이브러리(Technical Analysis)를 활용하면 더 괜찮다.

필요한건 상한선, 중심선, 하한선이니 해당 값만 추출한다.

ref. https://github.com/twopirllc/pandas-ta/blob/main/pandas_ta/volatility/bbands.py

 

3. 시각화

차트 분석에 볼린저 밴드를 적용할 예정이니, 직관을 위한 시각화도 필요하다.

시각화 로직에 아래 코드를 추가한다.

@staticmethod
def _create_bollinger_bands(one_day_dataframe: DataFrame):
    add_plot = []
    lower_col = 'BBL_20_2.0'
    mid_col = 'BBM_20_2.0'
    upper_col = 'BBU_20_2.0'

    if all(col in one_day_dataframe.columns for col in [lower_col, mid_col, upper_col]):
        add_plot.append(mpf.make_addplot(one_day_dataframe[lower_col], color='magenta', type='line', width=1))
        add_plot.append(mpf.make_addplot(one_day_dataframe[mid_col], color='black', type='line', width=1))
        add_plot.append(mpf.make_addplot(one_day_dataframe[upper_col], color='magenta', type='line', width=1))
    return add_plot

 

4. Backtesting

이제 추가 가능한 전략들을 테스트 해본다.

 

- 1) 기존 전략 그대로

- 2) 상한선 도달 시 매도

- 3) 중심선보다 낮을 때만 매수

- 4) 상한선 도달 시 매도 + 중심선보다 낮을 때만 매수

 

아래는 영업일 37일 기준 백테스팅 결과다

전략 1 2 3 4
Total trades 94 117 83 106
winning trades 46 61 42 57
win rate 48.94% 52.14% 50.60% 53.77%
total profit 81.17% 54.93% 85.83% 57.47%

 

볼린저 밴드 적용 시, 전부 승률이 늘었고

매수 조건만 강화하니, 수익률이 4.67%p 상승했다.

적용을 하자

 

5. 적용

trading bot, backtesting에 각각 적용

 

'Quant' 카테고리의 다른 글

재진입과 데이터 분석  (1) 2025.03.01
Trading bot 업데이트 (4)  (2) 2025.03.01
Trading bot 업데이트 (4)  (0) 2025.02.26
Trading bot 업데이트 (3)  (0) 2025.02.25
Trading bot 업데이트 (2)  (0) 2025.02.25