래리 윌리암스의 변동성 돌파 전략 (Larry Williams Volatility Breakout Strategy)

개념

래리 윌리암스의 변동성 돌파 전략은 미국의 유명 트레이더이자 작가인 래리 윌리암스가 제안한 투자 전략이다. 이 전략은 시장의 변동성을 활용하여 매매 시점을 결정하는 것이 특징이다. 변동성 돌파 전략은 전일 고가와 저가의 차이인 변동성을 계산하고, 당일 시장 가격이 전일 변동성의 일정 비율을 돌파할 때 매매 신호가 발생한다.

예를 들어, 전일 고가가 100달러, 저가가 90달러였다면 변동성은 10달러이다. 변동성 돌파 비율을 50%로 설정했다면, 당일 시장 가격이 전일 종가에서 변동성의 50%인 5달러를 초과하여 상승하면 매수 신호가, 5달러 이상 하락하면 매도 신호가 발생한다. 이를 통해 시장의 추세를 따라가며 수익을 추구할 수 있다.

매매 전략

  1. 전일 고가와 저가의 차이를 계산하여 변동성을 구한다.
  2. 변동성에 사용자가 설정한 돌파 비율을 곱하여 돌파 값을 계산한다.
  3. 당일 시장 가격이 전일 종가에서 돌파 값 이상 상승하면 매수 신호가 발생하고, 돌파 값 이상 하락하면 매도 신호가 발생한다.
  4. 매수 신호가 발생하면 시장가로 매수하고, 매도 신호가 발생하면 보유 중인 전량을 시장가로 매도한다.
  5. 매매 시점마다 stop-loss와 take-profit을 설정하여 리스크를 관리한다.

파이썬 코드 예시

먼저 필요한 라이브러리를 설치한다.

pip install yfinance pandas numpy matplotlib

야후 파이낸스에서 VOO ETF 데이터를 가져와 변동성 돌파 전략을 백테스트하는 코드는 다음과 같다.

import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# VOO ETF 데이터 가져오기
data = yf.download('VOO', start='2010-01-01', end='2023-06-09')

# 변동성 계산
data['volatility'] = data['High'] - data['Low']

# 변동성 돌파 값 계산 (50%)
data['breakout'] = data['volatility'] * 0.5

# 매매 신호 생성
data['signal'] = np.where((data['Close'] > data['Close'].shift(1) + data['breakout'].shift(1)), 1, 0)
data['signal'] = np.where((data['Close'] < data['Close'].shift(1) - data['breakout'].shift(1)), -1, data['signal'])

# 수익률 계산
data['returns'] = data['Close'] / data['Close'].shift(1)
data['strategy_returns'] = data['signal'].shift(1) * data['returns']

# 누적 수익률 계산
data['cumulative_returns'] = data['strategy_returns'].cumprod()

# 백테스트 결과 시각화
plt.figure(figsize=(12, 6))
plt.plot(data['cumulative_returns'])
plt.title('Volatility Breakout Strategy')
plt.xlabel('Date')
plt.ylabel('Cumulative Returns')
plt.grid(True)
plt.show()

이 코드는 야후 파이낸스에서 VOO ETF의 데이터를 가져와 변동성 돌파 전략을 백테스트한다. 변동성은 전일 고가와 저가의 차이로 계산되며, 변동성의 50%를 돌파할 때 매매 신호가 발생한다. 매수 신호가 발생하면 1, 매도 신호가 발생하면 -1, 그 외에는 0으로 표시된다. 전략의 수익률은 매매 신호에 따른 일간 수익률로 계산되며, 누적 수익률로 전략의 성과를 평가할 수 있다. 마지막으로 전략의 누적 수익률을 그래프로 시각화하여 백테스트 결과를 확인할 수 있다.

Leave a Reply

error: Content is protected !!