코인 박연구원

시리즈 2편: 전략 고도화 및 백테스트 - 나만의 승률 높이기 본문

AI활용

시리즈 2편: 전략 고도화 및 백테스트 - 나만의 승률 높이기

지식박연구소 2025. 4. 21. 09:13

 

전략 고도화 및 백테스트 방법

 

📈 전략 고도화와 백테스트, 자동매매의 실력 차이를 만드는 핵심

자동매매 봇을 만들었다면, 이제는 실제로 수익을 낼 수 있는 전략으로 고도화하는 것이 다음 단계입니다. 이 글에서는 스퀴즈 모멘텀 전략에 Bollinger BandKeltner Channel을 결합하여 신호의 정밀도를 높이는 방법과, 백테스트를 통해 전략이 과거 데이터에서 어떤 성과를 보였는지 검증하는 방법을 소개합니다.

1️⃣ 스퀴즈 조건 추가 - 볼린저 밴드 + 켈트너 채널

스퀴즈 모멘텀 전략의 핵심은 '수축 후 폭발'입니다. 이를 정량적으로 구현하려면, 볼린저 밴드가 켈트너 채널 안에 들어올 때를 수축으로 판단합니다.


from ta.volatility import BollingerBands, KeltnerChannel

def is_squeeze(df):
    bb = BollingerBands(df['close'], window=20, window_dev=2)
    kc = KeltnerChannel(df['high'], df['low'], df['close'], window=20)
    
    in_squeeze = (bb.bollinger_hband() < kc.keltner_channel_hband()) & \
                 (bb.bollinger_lband() > kc.keltner_channel_lband())
    return in_squeeze

2️⃣ 조건 강화 - 스퀴즈 탈출 + 모멘텀 상승

이제 수축 구간을 탈출하고 모멘텀이 상승 전환되면 진입하는 방식으로 신호를 정제할 수 있습니다.


def entry_signal(df):
    squeeze = is_squeeze(df)
    prev_squeeze, curr_squeeze = squeeze.iloc[-2], squeeze.iloc[-1]
    prev_mom, curr_mom = momentum_signal(df)

    if prev_squeeze and not curr_squeeze and curr_mom > 0 and curr_mom > prev_mom:
        return 'buy'
    elif prev_squeeze and not curr_squeeze and curr_mom < 0 and curr_mom < prev_mom:
        return 'sell'
    return None

3️⃣ 백테스트 - 과거 데이터를 통한 성능 검증

전략이 실제로 잘 작동하는지 확인하는 가장 좋은 방법은 백테스트입니다. 간단한 누적 수익률 계산을 통해 방향성을 확인해볼 수 있습니다.


capital = 1000
position = 0
for i in range(20, len(df)):
    sliced = df.iloc[:i]
    signal = entry_signal(sliced)
    price = sliced['close'].iloc[-1]

    if signal == 'buy' and position == 0:
        position = capital / price
        capital = 0
    elif signal == 'sell' and position > 0:
        capital = position * price
        position = 0

print(f'최종 수익률: {capital + (position * df["close"].iloc[-1]):.2f}')

✅ 마무리

백테스트는 전략의 생존 가능성을 확인하는 필수 도구입니다. 실전 전에 수십 번의 실험을 해보고, 손절/익절 조건도 함께 조정해보는 걸 추천드립니다. 다음 편에서는 슬랙이나 텔레그램으로 신호를 알림받고, 클라우드 서버에 자동 배포하는 방법까지 정리해드릴게요.