Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- 백테스터
- hmstr
- 애드센스
- hamster kombat
- Head
- 알트코인추천
- findseong
- 슬랙
- 바이낸스
- 스퀴즈
- 모멘텀
- Hamster
- 바이낸스상장예정
- 볼린저 밴드 + 켈트너 채널
- 자동투자봇
- 슬랫봇
- 바로적용 코드
- html최적화
- 햄스터
- 자동봇
- 볼린저 밴드
- 티스토리최적화
- 추천코인
- 지식박연구소
- 오토봇
- 텔레그램봇
- 비트코인
- 클라우드
- 티스토리html
- OKX
Archives
- Today
- Total
코인 박연구원
시리즈 2편: 전략 고도화 및 백테스트 - 나만의 승률 높이기 본문

📈 전략 고도화와 백테스트, 자동매매의 실력 차이를 만드는 핵심
자동매매 봇을 만들었다면, 이제는 실제로 수익을 낼 수 있는 전략으로 고도화하는 것이 다음 단계입니다. 이 글에서는 스퀴즈 모멘텀 전략에 Bollinger Band와 Keltner 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}')
✅ 마무리
백테스트는 전략의 생존 가능성을 확인하는 필수 도구입니다. 실전 전에 수십 번의 실험을 해보고, 손절/익절 조건도 함께 조정해보는 걸 추천드립니다. 다음 편에서는 슬랙이나 텔레그램으로 신호를 알림받고, 클라우드 서버에 자동 배포하는 방법까지 정리해드릴게요.
'AI활용' 카테고리의 다른 글
| 시리즈 3편: 슬랙/텔레그램 알림 & 실전 배포 자동화 (0) | 2025.04.21 |
|---|---|
| 시리즈 1편: 오픈 API로 자동 투자 봇 만들기 - Gate.io & OKX 편 (0) | 2025.04.21 |
| 티스토리 블로그 HTML <head> 태그 완전 정복 (0) | 2025.04.20 |