관리 메뉴

Leo's Garage

BackTrader - KDJ index 본문

파이프라인 만들기/Algo Trading

BackTrader - KDJ index

LeoBehindK 2023. 2. 25. 22:28
728x90
반응형

오늘은 KDJ index를 사용해서 전략을 만들어보도록 하겠다. 

우선 KDJ index에 대해서 먼저 설명하겠다.

KDJ index는 주가 트랜드의 변화를 예측하고 분석하는데 사용되는 지표이며 다른 말로는 랜덤 지표라고도 알려져 있다. 

이 지표는 시장의 단기 트랜드를 분석하는데 아주 자주 사용된다.

 

KDJ 지표는 스토케스틱 오실레이터 지표의 파생형 지표인데 기존 지표에 J라인이 추가된 점이 차이점이다.

% K, %D라인 값은 주식이 과매수 (80 이상), 과매도 (20 미만) 인지 나타낸다.

% J 라인 값은 상승과 하락이 전환되는 시점에 0 혹은 100으로 가는 성질이 있다. 

따라서 K 라인과 D 라인의 상대적 위치 (떨어져 있는지, 모였는지), 기울기 그리고 RSI 지표 등을 같이 살피면 고점, 저점에서 매수, 매도를 할 수 있다. 

 

코드는 아래와 같다. 

import backtrader as bt
import yfinance as yf



class MyStrategy(bt.Strategy):
    
    def __init__(self):
        self.stock = self.datas[0]
        self.order = None
        self.kdj = bt.indicators.Stochastic(self.stock, period=14, period_dfast=3, period_dslow=3)
        self.sma = bt.indicators.SimpleMovingAverage(self.stock, period=200)

    def next(self):
        if self.order:
            return  # if an order is pending, don't do anything

        if not self.position:  # if not in the market
            if self.kdj.lines.percK[0] > 20 and self.kdj.lines.percD[0] > 20 and (3 * self.kdj.lines.percD[0] - 2 * self.kdj.lines.percK[0]) > 20 and self.stock.close[0] > self.sma[0]:
                self.buy()  # enter a long position
        else:
            if self.kdj.lines.percK[0] < 80 and self.kdj.lines.percD[0] < 80 and (3 * self.kdj.lines.percD[0] - 2 * self.kdj.lines.percK[0]) < 80:
                self.sell()  # exit the long position


cerebro = bt.Cerebro()
cerebro.addstrategy(MyStrategy)

# Add data feed to cerebro
nasdaq_data = bt.feeds.PandasData(dataname= yf.download('^GSPC','2018-01-01','2021-12-31'))
data = bt.feeds.PandasData(dataname= yf.download('TSLA','2018-01-01','2021-12-31'))

cerebro.adddata(nasdaq_data)
cerebro.adddata(data)

cerebro.run()
cerebro.plot()

상기 코드를 테슬라 3개년 데이터에 적용해보았다. 

결과는 아래와 같다. 

최초 10000에서 시작한 자산은 10746.60까지 증가하였다. 

728x90
반응형

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

BackTrader - 일목균형표  (0) 2023.02.21
BackTrader - WMA 활용  (0) 2023.02.20
BackTrader - S&P500 활용  (0) 2023.02.17
BackTrader - Nasdaq 100 적용  (0) 2023.02.16
BackTrader - 단순 종가 비교 전략  (0) 2023.02.15
Comments