관리 메뉴

Leo's Garage

BackTrader - 여러 지표 섞어서 만들기 (1) 본문

파이프라인 만들기/Algo Trading

BackTrader - 여러 지표 섞어서 만들기 (1)

LeoBehindK 2023. 1. 25. 19:13
728x90
반응형

이번에는 지표 2개를 섞어서 매수 매도 하는 전략을 만들어보겠다.

사용할 지표는 SMA(이동평균선)과 RSI(상대 강도)이다. 

전략의 내용은 간단하게 아래와 같다. 

포지션이 없을 경우, 20일 SMA가 50일 SMA보다 크면서 동시에 7일 RSI가 40보다 작으면 매수한다. 

포지션이 있을 경우, 20일 SMA가 50일 SMA보다 작거나 7일 RSIrk 60보다 크면 매도한다.

import backtrader as bt
import yfinance as yf

class MultiIndicatorStrategy(bt.Strategy):
    params = (
        ('sma1_period', 20),
        ('sma2_period', 50),
        ('rsi_period', 7),
        ('rsi_oversold', 40),
        ('rsi_overbought', 60),
    )

    def __init__(self):
        self.sma1 = bt.indicators.SimpleMovingAverage(
            self.data.close, period=self.params.sma1_period)
        self.sma2 = bt.indicators.SimpleMovingAverage(
            self.data.close, period=self.params.sma2_period)
        self.rsi = bt.indicators.RelativeStrengthIndex(self.data.close, period=self.params.rsi_period)

    def next(self):
        if not self.position:
            if self.sma1[0] > self.sma2[0] and self.rsi[0] < self.params.rsi_oversold:
                self.buy()
        else:
            if self.sma1[0] < self.sma2[0] or self.rsi[0] > self.params.rsi_overbought:
                self.close()

cerebro = bt.Cerebro()

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

cerebro.addstrategy(MultiIndicatorStrategy)

cerebro.run()

cerebro.plot()

backtrader를 이용해 위와 같이 간단하게 코드를 만들었다. 

결과를 살펴보자.

테슬라 주식을 2018 ~ 2021 사이에 사고 팔아보았다. 

2가지 전략을 단순 적용한 경우는 위와 같다.

초기 자본 10000 에서 10041.49가 되었다. 

 

728x90
반응형
Comments