변동성 돌파 전략이란?
변동성 돌파 전략(Volatility Breakout Strategy)은 래리 윌리엄스(Larry Williams)가 고안한 단기 트레이딩 전략으로, 전일 변동폭(고가-저가)의 일정 비율(K값)을 당일 시가에 더한 가격을 돌파할 때 매수하는 방식이다. 국내 퀀트 투자자들 사이에서 가장 널리 알려진 전략 중 하나로, 비트코인·주식 자동매매에 자주 활용된다.
핵심 공식은 다음과 같다:
매수 기준가 = 당일 시가 + (전일 고가 - 전일 저가) × K
K값은 보통 0.4~0.6 사이를 사용하며, 백테스트를 통해 최적값을 탐색한다. K가 클수록 진입 조건이 까다로워지고, 작을수록 빈번하게 진입한다.
전략의 핵심 로직 구조
변동성 돌파 전략을 자동매매 봇에 구현할 때 기본 흐름은 아래와 같다:
- 장 시작 시 전일 캔들 데이터 조회 — 전일 시가, 고가, 저가, 종가를 가져온다
- 매수 기준가 계산 — 당일 시가 + range × K
- 실시간 가격 모니터링 — 현재가가 매수 기준가를 상향 돌파하면 매수
- 장 마감 시 전량 매도 — 다음 날 시가에 청산하거나 일정 시간에 청산
파이썬으로 구현하면 다음과 같은 구조가 된다:
import ccxt
import time
exchange = ccxt.binance({'apiKey': 'YOUR_KEY', 'secret': 'YOUR_SECRET'})
symbol = 'BTC/USDT'
K = 0.5
def get_target_price():
ohlcv = exchange.fetch_ohlcv(symbol, '1d', limit=2)
yesterday = ohlcv[-2]
today_open = ohlcv[-1][1]
yesterday_high = yesterday[2]
yesterday_low = yesterday[3]
target = today_open + (yesterday_high - yesterday_low) * K
return target
def run():
target_price = get_target_price()
print(f"매수 기준가: {target_price}")
while True:
ticker = exchange.fetch_ticker(symbol)
current = ticker['last']
if current >= target_price:
# 매수 실행
balance = exchange.fetch_balance()['USDT']['free']
amount = balance * 0.98 / current
exchange.create_market_buy_order(symbol, amount)
print(f"매수 체결: {current}")
break
time.sleep(1)
K값 최적화와 과적합 문제
K값은 전략의 수익률을 결정하는 핵심 파라미터다. 일반적인 최적화 방법은 과거 N일 데이터에서 K값별 수익률을 비교하는 것이다.
| K값 | 연 수익률 | MDD | 승률 |
|---|---|---|---|
| 0.3 | 42% | -28% | 58% |
| 0.5 | 35% | -18% | 52% |
| 0.7 | 22% | -12% | 47% |
K값이 낮으면 수익률은 높지만 MDD(최대 낙폭)도 커진다. 반대로 K값이 높으면 안정적이지만 수익률이 낮아진다. 여기서 중요한 건 특정 기간에 최적이었던 K값이 미래에도 최적일 보장이 없다는 점이다.
백테스트 과적합 방지법에서 다뤘듯이, 고정 K값 대신 최근 N일 적응형 K값을 사용하는 방법이 실전에서 더 견고하다:
def adaptive_k(ohlcv_list, lookback=20):
"""최근 lookback일 중 수익이 발생한 K값의 평균"""
best_ks = []
for i in range(lookback, len(ohlcv_list)):
best_k = 0.5
best_return = -999
for k in [x/10 for x in range(2, 9)]:
prev = ohlcv_list[i-1]
curr = ohlcv_list[i]
target = curr[1] + (prev[2] - prev[3]) * k
if curr[2] >= target: # 고가가 기준가 이상
ret = (curr[4] - target) / target # 종가 기준 수익
if ret > best_return:
best_return = ret
best_k = k
best_ks.append(best_k)
return sum(best_ks[-5:]) / 5 # 최근 5일 평균
실전 적용 시 필수 고려사항
1. 슬리피지와 수수료
백테스트에서 수익이 나도 실전에서 손해를 보는 가장 큰 원인이 슬리피지다. 변동성 돌파 전략은 가격이 급등하는 순간 시장가 매수를 해야 하므로, 호가창이 얇은 종목이나 거래소에서는 체결가가 기대보다 높아진다.
- 백테스트에 편도 0.1~0.2% 슬리피지를 반드시 반영
- 거래소 수수료(메이커/테이커)도 포함해야 실전과 유사한 결과
- 유동성이 낮은 시간대(새벽)에는 슬리피지가 더 커질 수 있다
2. 노이즈 필터링
변동성이 극도로 낮은 날(전일 range가 매우 작은 날)에는 아주 작은 가격 움직임에도 매수 신호가 발생한다. 이런 노이즈 진입을 방지하려면:
- 최소 range 필터 — 전일 range가 평균의 50% 이하면 매수 스킵
- 거래량 필터 — 당일 거래량이 일정 수준 이상일 때만 진입
- 이동평균 필터 — 현재가가 5일 이동평균 위일 때만 매수(상승 추세 확인)
def should_trade(ohlcv_list, ma_period=5):
"""진입 필터: 이동평균 + 최소 range"""
recent = ohlcv_list[-ma_period:]
ma = sum(c[4] for c in recent) / ma_period
yesterday = ohlcv_list[-1]
avg_range = sum(c[2]-c[3] for c in ohlcv_list[-20:]) / 20
today_range = yesterday[2] - yesterday[3]
if ohlcv_list[-1][4] < ma:
return False # 하락 추세 → 매수 스킵
if today_range < avg_range * 0.5:
return False # 변동성 너무 낮음
return True
3. 손절과 자금 관리
원래 전략은 "장 마감에 무조건 청산"이지만, 실전에서는 급락 시 손실이 커질 수 있다. 계좌 생존 규칙을 참고하여 아래와 같은 안전장치를 추가한다:
- 손절 라인 설정 — 진입가 대비 -2~3% 하락 시 즉시 청산
- 1회 투입 금액 제한 — 전체 자금의 30~50%만 투입
- 연속 손실 시 휴식 — 3연패 시 1일 매매 중단
멀티 자산 분산 전략
변동성 돌파 전략의 약점은 특정 종목이 횡보할 때 수익을 내기 어렵다는 점이다. 이를 보완하기 위해 여러 자산에 동시 적용하는 방법이 있다:
symbols = ['BTC/USDT', 'ETH/USDT', 'SOL/USDT']
allocation = 1.0 / len(symbols) # 균등 배분
for symbol in symbols:
target = get_target_price(symbol)
current = get_current_price(symbol)
if current >= target and should_trade(symbol):
buy_amount = total_balance * allocation * 0.98
execute_buy(symbol, buy_amount)
자산 간 상관관계가 낮을수록 분산 효과가 크다. BTC와 ETH는 상관관계가 높으므로(0.85+), 주식이나 원자재를 섞으면 더 나은 리스크 조정 수익을 기대할 수 있다.
변동성 돌파 전략의 한계
이 전략이 만능은 아니다. 반드시 알아야 할 한계점:
- 횡보장에서 연속 손실 — 추세가 없으면 진입 후 청산 시 수수료+슬리피지만큼 손해
- 갭 상승 리스크 — 시가가 전일 종가 대비 크게 갭업하면 이미 기준가를 넘긴 상태에서 시작
- 급락 시 대응 한계 — 진입 후 순간 급락하면 손절이 체결되지 않을 수 있다
- 거래소 API 장애 — 자동매매 봇이 돌아가는 환경의 안정성이 수익에 직결
결국 변동성 돌파 전략은 "추세가 있을 때 빠르게 올라타는" 전략이다. 추세 유무를 판별하는 필터와 철저한 자금 관리가 결합되어야 실전에서 살아남을 수 있다.
정리
변동성 돌파 전략은 구현이 간단하고 직관적이어서 퀀트 입문자에게 추천되는 전략이다. 하지만 K값 최적화의 과적합 문제, 슬리피지, 횡보장 취약성 등 실전에서 마주치는 문제를 반드시 고려해야 한다. 적응형 K값, 노이즈 필터, 멀티 자산 분산을 조합하면 훨씬 견고한 전략을 만들 수 있다.