관리 메뉴

Leo's Garage

BackTrader - 역추세 매매 (SMA 이용) 본문

파이프라인 만들기/Algo Trading

BackTrader - 역추세 매매 (SMA 이용)

LeoBehindK 2023. 2. 2. 23:03
728x90
반응형

이전에 올렸던 역추세 매매 전략은 볼린져 밴드를 이용한 방법이었다.

https://downyk.tistory.com/50

 

BackTrader - 역추세 매매

Backtrader로 간단한 역추세 매매 로직을 만들어보자 역추세 매매란 결국 시장의 가격이 평균으로 회귀하는 성질을 이용하는 것이라 볼 수 있다. 그래서 이를 평균회귀 전략이라고도 한다. MeanRevers

downyk.tistory.com

오늘 해 볼 역추세 매매는 SMA(Simple Moving Average)를 이용해 보려고 한다. 

전략은 간단한데 사는 전략은 아래와 같다.

30일 SMA가 10일 SMA보다 커지는 순간에 산다. 

이 때 가격을 기준으로 3% 손실이 나거나 5% 수익인 경우에 대해서 stop loss와 take profit 가격을 설정한다. 

 

그리고 파는 전략은 아래와 같다. 

금일 종가가 Take Profit 가격보다 크거나 같을 때 혹은 Stop loss 가격보다 작거나 같을 때 이다. 

이를 코드로 작성하면 아래와 같다. 

import backtrader as bt
import yfinance as yf

class ReverseTrend(bt.Strategy):
    params = (
        ('fast_ma_period', 10),
        ('slow_ma_period', 30),
        ('stop_loss', 0.03),
        ('take_profit', 0.05),
    )

    def __init__(self):
        self.fast_ma = bt.indicators.SimpleMovingAverage(
            self.data.close, period=self.params.fast_ma_period)
        self.slow_ma = bt.indicators.SimpleMovingAverage(
            self.data.close, period=self.params.slow_ma_period)
        
        self.order = None
        self.stop_price = None
        self.take_price = None

    def next(self):
        if self.order:
            if self.data.close[0] >= self.take_price or \
               self.data.close[0] <= self.stop_price:
                self.sell()
            return

        if self.fast_ma[0] < self.slow_ma[0] and \
           self.fast_ma[-1] > self.slow_ma[-1]:
            self.order = self.buy()
            self.stop_price = self.data.close[0] * (1.0 - self.params.stop_loss)
            self.take_price = self.data.close[0] * (1.0 + self.params.take_profit)


cerebro = bt.Cerebro()

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

cerebro.addstrategy(ReverseTrend)

cerebro.run()

cerebro.plot()

그리고 해당 코드를 Tesla 2021년 한 해의 주가 추이에 적용하면 아래와 같은 결과가 나오게 된다.

초기 자본금이 10000이었는데 1년 이후에 61572.69가 되었다.

물론 해당 전략에 대해서 Tesla 주가가 워낙 상승만 했기 때문에 잘 먹혔는지도 모르겠다. 

728x90
반응형

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

BackTesting.py - SMA  (1) 2023.02.05
BackTrader란  (0) 2023.02.03
BackTrader - Bullish 전략 (2)  (0) 2023.01.29
BackTrader - Bullish 전략 (1)  (0) 2023.01.28
BackTrader - MACD 활용  (0) 2023.01.27
Comments