관리 메뉴

Leo's Garage

BackTrader - MACD 활용 본문

파이프라인 만들기/Algo Trading

BackTrader - MACD 활용

LeoBehindK 2023. 1. 27. 08:00
728x90
반응형

이번에는 MACD를 활용해서 전략을 작성해보겠다.

MACD(Moving Average Convergence Divergence)는 장단기 이동평균선(SMA) 차이를 이용해서 매매신호를 포착하는 기법이다.

MACD의 원리는 장기 이동평균선과 단기 이동평균선이 서로 멀어지면 (Divergence) 다시 가까워지는 (Convergence) 성질을 이용하여 두 개의 이동평균선이 멀어지는 시점을 찾으려 하는 것이다.

공식은 아래와 같다.

MACD : 12일 이동평균선 - 26일 이동평균선

Signal : MACD의 9일 지수이동평균선

Osillator : MACD - Signal

MACD 곡선과 Signal선이 교차하는 신호를 매매 신호로 본다. 

보통 MACD가 Signal보다 커질 때 매수하고, MACD가 Signal보다 작아질 때 매도한다.

해당 전략을 BackTrader로 작성하면 아래와 같다. 

import backtrader as bt
import yfinance as yf

class MACDStrategy(bt.Strategy):
    params = (
        ("fast", 12),
        ("slow", 26),
        ("signal", 9),
        ("stop_loss", 0.03),
        ("take_profit", 0.05),
    )

    def __init__(self):
        self.macd = bt.indicators.MACD(
            self.data.close,
            period_me1=self.params.fast,
            period_me2=self.params.slow,
            period_signal=self.params.signal
        )

    def next(self):
        if not self.position:
            if self.macd.macd[0] > self.macd.signal[0]:
                self.buy()
        else:
            if self.macd.macd[0] < self.macd.signal[0]:
                self.sell()

cerebro = bt.Cerebro()

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

cerebro.addstrategy(MACDStrategy)

cerebro.run()

cerebro.plot()

그리고 해당 전략을 테슬라 2018 ~ 2021 주가에 적용하면 결과는 아래와 같다. 

초기 자본은 10000이었고, 10187.41까지 수익을 본 것을 알 수 있다. 

728x90
반응형
Comments