관리 메뉴

Leo's Garage

BackTrader - 볼린져 밴드 전략 본문

파이프라인 만들기/Algo Trading

BackTrader - 볼린져 밴드 전략

LeoBehindK 2023. 1. 15. 14:53
728x90
반응형

이번에는 볼린져 밴드 전략을 이용하여 BackTrader로 BackTesting을 해보겠다. 

우선 볼린져 밴드에 대해 간략히 설명하자면,

주가 또는 지수와 같은 시계열 데이터의 변동 범위를 설정해서 데이터의 변동성을 분석하는 도구라고 보면 된다.

쉽게 말해서 주가나 지수같은 데이터들은 특정 범위 내에서 변동성을 가지는데 그 상한과 하한을 표현하는 방법이라고 보면 된다.

 

볼린져 밴드를 계산하는 방법은 다음과 같다.

중심선 : 이동 평균선
상단선 : 주가 이동 평균 + (주가 표준편차 * Factor)
하단선 : 주가 이동 평균 - (주가 표준 편차 * Factor)

 

이동 평균은 흔히 생각하는 SMA를 뜻하고 표준편차란 결국 얼마나 중심에서 멀어져 있는가를 의미한다.

이를 이용해 BackTrader에서 전략을 작성해보자

import backtrader as bt
import yfinance as yf

class BollingerBands(bt.Strategy):
    params = (
        ('period', 10),
        ('devfactor', 2),
    )

    def __init__(self):
        self.bb = bt.indicators.BollingerBands(self.data.close, period=self.params.period, devfactor=self.params.devfactor)

    def next(self):
        if not self.position:
            if self.data.close[0] < self.bb.lines.bot[0]:
                self.buy()
        else:
            if self.data.close[0] > self.bb.lines.top[0]:
                self.close()

cerebro = bt.Cerebro()

data = bt.feeds.PandasData(dataname= yf.download('TSLA','2019-01-01','2021-12-31'))
cerebro.adddata(data)

cerebro.addstrategy(BollingerBands)

cerebro.run()

cerebro.plot()

코드를 보다시피 볼린져 밴드 지표를 하나 생성했다.

이 볼린져 밴드는 10일 이평선과 Factor로는 2를 사용했다.

즉 주가 이동평균의 표준편차의 2배를 넣어서 볼린져 밴드를 만들었다는 이야기이다.

이렇게 작성한 전략을 2019년부터 2021년까지의 테슬라 주가에 넣어 돌려보았다.

결과는 위와 같이 나오게 된다.

지수 위에 점선으로 표시된 부분이 볼린져 밴드이다.

초기 10000로 시작했는데 10126으로 끝나면서 수익을 기록했다.

 

728x90
반응형
Comments