시스템 트레이딩/트레이딩 전략

변동성 돌파 전략 - 비트코인 수익률 백테스트

앤테바 2021. 12. 4. 23:36
반응형

이전 글에서 변동성 돌파 전략에 대해서 기본적인 이론 지식을 습득하였습니다.

2021.12.04 - [시스템 트레이딩/트레이딩 전략] - 변동성 돌파 전략 - 3초 만에 이해

 

변동성 돌파 전략 - 3초 만에 이해

변동성 돌파 전략 기본 래리 윌리암스 (Larry Williams)에 의해 고안됨 트렌드 추종을 기본으로 함. 상승하는 놈이 계속 상승한다!!! 전략이 굉장히 심플하지만 강력함 변동성 돌파 전략 핵심 돌파 가

wellsw.tistory.com

 

정말 너무 간단한 전략인데, 과연 이게 수익이 발생할까요???

변동성 돌파 전략을 백테스트를 수행해서 수익률을 확인해 보겠습니다.

업비트의 open api를 사용해서 데이터를 다운로드 받고 비트코인의 수익률을 확인 하겠습니다.

 

비트코인 일봉 데이터 다운로드

import numpy as np
import pandas as pd
import pyupbit


# 비트코인 일봉 데이터 다운로드
ticker = 'KRW-BTC'
df = pyupbit.get_ohlcv(ticker)

비트코인 일봉은 최대 200일 수 데이터를 가져옵니다.

데이터의 최근 5개 예시 화면은 아래와 같습니다.

비트코인 가격 추이 확인

ax = df.open.plot(title='비트코인 가격 추이', figsize=(14, 8), grid=True)
ax.set(xlabel='일', ylabel='가격')

 

비트코인 단순 보유 수익률

2021-05-19에 비트코인을 매수해서 2021-11-15 매도했을 경우 1.274 수익률이 발생합니다.

initial_price = df.open[0]
print(f'날짜 : {df.iloc[0].name}, 가격 : {df.open[0]}')

today_price = df.open[-1]
print(f'날짜 : {df.iloc[-1].name}, 가격 : {df.open[-1]}')

earning_rate = today_price / initial_price
print(f'수익률 : {earning_rate}')
날짜 : 2021-05-19 09:00:00, 가격 : 53404000.0
날짜 : 2021-11-25 09:00:00, 가격 : 68068000.0
단순 보유 수익률 : 1.2745861733203505

목표가 계산

고가에서 저가를 빼주는 계산을 합니다. 범위 계산 시 shift(1)을 해주는 이유는 전날의 고가와 저가에서 계산한 값을 한 행씩 미루게 만들어 줘서 목표가 연산을 쉽게 할 수 있습니다. 

 

목표가 계산 시 k 값은 0.5로 설정하였습니다.

# 범위
df['range'] = (df['high'] - df['low']).shift(1)

# 목표가 
df['target_price'] = df['open'] + df['range'] * 0.5

매수 유무 컬럼 추가

오늘의 고가가 돌파 가격을 넘어 섰다면 1(매수), 아니면 0 값을 갖는 컬럼을 추가합니다.

df['buy'] = np.where(df['high'] > df['target_price'], 1, 0)

일별 수익률 계산

수익율은 종가/목표가 입니다.

매수를 하지 않았다면 수익률은 1입니다.

# buy가 1이면, 수익률 = 종가/목표가
# buy가 1이면, 수익률 = 1
df['earning_rate'] = np.where(df['buy'] == 1, df['close'] / df['target_price'], 1)

일별 수익률로는 비교하기가 어렵습니다.

누적 수익률을 구해 보겠습니다.

누적 수익률 계산

pandas에 누적곱 연산을 하는 cumprod() 함수를 제공합니다.

earning_rate 컬럼에 cumprod() 함수를 적용하며 쉽게 누적 수익률을 계산할 수 있습니다.

# 수익률에 대한 누적곱
df['earning_rate'].cumprod()

변동성 돌파 전략을 적용 했을 때 누적 수익률이 1.255입니다.

단순 보유했을 경우 1.274였는데 오히려 낮네요. ㅡ,.ㅡ;;

 

k 값을 변경하며 누적 수익률 계산

k 값을 0.1 ~ 0.9까지 변경하며 누적 수익률 계산하였습니다. k 값이 누적 수익률에 큰 영향을 미치며 k=0.3일 때 누적 수익률 1.756 갖습니다. k 값을 단순히 0.5 또는 0.6을 사용하는 전략이 아닌 종목에 따라서 최적의 k 값을 적용해서 변동성 돌파 전략을 사용하는 것이 수익률을 극대화할 수 있을 것 같습니다.

k	누적 수익률
0.1	1.062
0.2	1.017
0.3	1.756
0.4	1.514
0.5	1.255
0.6	1.34
0.7	1.348
0.8	1.226
0.9	1.21

비트코인_변동성돌파전략_백테스트.csv
0.03MB

 

리플 코인에 변동성 돌파 전략 적용 누적 수익률

위와 똑같은 방식으로 리플 코인에도 적용 하였습니다.

리플 코인 단순 보유 수익률은 0.589입니다. 변동성 돌파 전략을 적용하여 k=0.4일 때 누적 수익률은 1.413 입니다.

날짜 : 2021-05-19 09:00:00, 가격 : 1985.0
날짜 : 2021-11-25 09:00:00, 가격 : 1170.0
단순 보유 수익률 : 0.5894206549118388

 

최대 누적 수익률이 2.0까지 올라간 경우도 있습니다.

k=0.4일 때 누적 수익률이 최대치입니다. k 값이 0.2 이하이거나, 0.7 이상이면 누적 수익률이 급격히 나빠짐을 볼 수 있습니다. 

리플_변동성돌파전략_k=0.4_백테스트.csv
0.02MB

 

이렇게 변동성 돌파 전략을 비트코인에 적용해서 백테스트를 통해서 검증 하였습니다.

단순 보유한 것 보다는 누적 수익률이 높다는 것을 확인하였으며, k 값에 따라서 누적 수익률에 크게 영향 받음을 확인 할 수 있었습니다.

반응형