본문 바로가기
Python

[주식 분석 프로젝트] 4편 – 기술적 지표 전략 백테스팅

by ramzee 2025. 4. 25.

📌 이번 실습 목표

  • 볼린저 밴드와 RSI를 활용한 전략 수립
  • 매수/매도 조건을 구현하고 실제로 시뮬레이션
  • 누적 수익률 계산 및 시각화

📈 전략 아이디어 수립

이번 실습에서는 다음과 같은 조건으로 매수 전략을 수립합니다.

  • 매수 조건: RSI < 30 and 주가 < 볼린저 하단선
  • 매도 조건: RSI > 70 or 주가 > 볼린저 상단선

이 조건은 심리적 침체 구간에서 매수하고, 과열 구간에서 매도하는 전략입니다.


🧮 조건 계산 및 매수/매도 시점 구하기

# 매수/매도 조건 계산
buy_signal = (df['RSI'] < 30) & (df['Close'] < df['Lower'])
sell_signal = (df['RSI'] > 70) | (df['Close'] > df['Upper'])

# 포지션 열 생성 (1=보유, 0=미보유)
df['Position'] = 0
position = 0

for i in range(1, len(df)):
    if buy_signal.iloc[i] and position == 0:
        df.at[df.index[i], 'Position'] = 1
        position = 1
    elif sell_signal.iloc[i] and position == 1:
        df.at[df.index[i], 'Position'] = 0
        position = 0
    else:
        df.at[df.index[i], 'Position'] = df.at[df.index[i-1], 'Position']

💹 수익률 및 누적 수익률 계산


df['Daily Return'] = df['Close'].pct_change()
df['Strategy Return'] = df['Daily Return'] * df['Position']
df['Cumulative Return'] = (1 + df['Strategy Return']).cumprod()
df['Cumulative BuyHold'] = (1 + df['Daily Return']).cumprod()

📊 전략 vs 단순 보유 수익률 비교 시각화


plt.figure(figsize=(14, 6))
plt.plot(df['Cumulative BuyHold'], label='Buy & Hold')
plt.plot(df['Cumulative Return'], label='Strategy (RSI + Bollinger)')
plt.title('전략 백테스트 누적 수익률 비교')
plt.legend()
plt.grid(True)
plt.show()


📌 전략 결과 해석

  • Buy & Hold: 단순히 계속 보유했을 경우의 수익률
  • Strategy: RSI와 볼린저 조건에 따라 매수/매도한 결과

그래프를 통해 전략이 시장보다 더 좋은 성과를 냈는지, 혹은 손실 회피에 유리했는지를 파악할 수 있습니다.


✅ 오늘의 요약

  • 기술적 지표 조합으로 실전 전략 수립 가능
  • 조건에 따라 매매 시뮬레이션 → 누적 수익률 분석
  • 단순 보유 전략과 비교해 전략의 유효성 검증