관리 메뉴

Leo's Garage

BackTrader - 변동성 돌파 매매 본문

파이프라인 만들기/Algo Trading

BackTrader - 변동성 돌파 매매

LeoBehindK 2023. 1. 14. 23:16
728x90
반응형

BackTrader를 이용하여 간단한 변동성 돌파 매매 전략을 만들어보자.

변동성 돌파 매매는 Larry Williams에 의해 소개된 전략이다.

상승 추세를 따라가면서 일 단위로 빠르게 수익을 실현하는 단기 매매 전략이다. 

 

아이디어의 골자는 트랜드 추종을 기본으로 하면서 상승하는 종목이 더 상승할 것이라는 추측을 기저로 한다.

전략 자체는 간단하다.

 

여러가지 개념이 있지만, 내가 사용한 전략을 설명하면,

금일 고가가 전일 종가 + ATR(Average True Range)보다 크면 매수한다.

여기서 ATR이란 변동성을 측정하는 지표면서 해당 종목의 위험도를 알려주는 지표이다.

TR은 아래 3가지를 통해 계산하는데

1. 금일 고가 - 금일 저가
2. 금일 고가 - 전일 종가
3. 금일 저가 - 전일 종가

이 3가지 중에 절대값이 가장 큰 값이 TR이 된다.

이 TR을 특정 주기만큼 이동평균 시킨 값을 ATR이라고 한다.

나는 여기서 주기를 7일로 하여 테스트해보겠다.

import backtrader as bt
import yfinance as yf


class VolatilityBreakout(bt.Strategy):
    params = (
        ('atr_period', 7),
        ('stop_loss_factor', 5),
        ('take_profit_factor', 1)
    )

    def __init__(self):
        self.atr = bt.indicators.ATR(self.data, period=self.params.atr_period)
        self.stop_loss_factor = self.params.stop_loss_factor
        self.take_profit_factor = self.params.take_profit_factor
        # self.take_profit = bt.indicators.TakeProfit(self.data, period=self.params.atr_period, factor=self.params.take_profit_factor)
        self.stop_loss_level = None
        self.take_profit_level = None
        self.order = None

    def next(self):
        if not self.position:
            if self.data.high[0] > self.data.close[-1] + self.atr[-1]:
                self.stop_loss_level = self.data.close[-1] - (self.stop_loss_factor * self.atr[-1])
                self.take_profit_level = self.data.close[-1] + (self.take_profit_factor * self.atr[-1])
                self.order = self.buy()
        else:
            if self.data.low[0] < self.stop_loss_level:
                self.close()
            elif self.data.high[0] > self.take_profit_level:
                self.close()

cerebro = bt.Cerebro()

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

cerebro.addstrategy(VolatilityBreakout)

cerebro.run()

cerebro.plot()

간단한 변동성 돌파 전략을 만들었다. 

21년 1년간의 테슬라 주식을 대상으로 전략을 돌렸으며, 스탑로스 상수는 5, 수익 실현 상수는 1로 지정하였다. 

 

결과를 뽑아보았다. 단기매매 전략이다 보니, 매수 매도 시점이 그리 멀지 않음을 알 수 있다. 

 

728x90
반응형

'파이프라인 만들기 > Algo Trading' 카테고리의 다른 글

PineScript란?  (0) 2023.01.15
PineScript4 - 변동성 돌파 알람  (0) 2023.01.14
PineScript4 - 알람 만들기  (0) 2023.01.14
PineScript5 - 시작하기  (0) 2023.01.14
BackTrader - RSI 지표를 이용한 매매  (0) 2023.01.14
Comments