Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

한결같이

변동성 돌파전략 백테스트 : part 1 본문

투자일기

변동성 돌파전략 백테스트 : part 1

크바시르 2025. 1. 1. 06:06

최근 핫하디 핫한 알트코인에 발을 담근 지 한달이 지났다. 시작하자마자 어떤 망나니가 계엄을 선포하는 바람에 폭락장에 자동손절되어 20%가 날아가긴 했지만. ㅠㅠ

기본적으로 알트코인은 변동성이 워낙에 크다보니 단순히 buy&hold 하는 전략으론 내 심장이 버티지 못할 것 같아 어떤 전략이 좋을까 찾아보다가 큰 변동성 자체를 이용해 변동성돌파를 기준으로 하는 전략을 선택했다. 
변동성돌파 전략에 대한 내용은 systrader79 의 [실전투자전략 51 - 비트코인을 이용한 변동성 돌파전략] 과 책 [가상화폐 투자 마법공식] 를 참고했다.

여담이긴 한데, 세부적인 전략을 결정하기 위해 백테스트를 해보려고 했는데... 60/40 처럼 자산간 비중만 조절하면 되는 자산배분 전략은 엑셀로 대충 뚝딱뚝딱 만들면 되는 반면 변동성돌파 전략은 그렇게 하긴 좀 복잡했다. 고민을 좀 하다가 결국 엑셀에서 바로 연동할 수 있는 비주얼베이직을 써보기로 했다. 학교 졸업 후 거의 15년만에 코딩을 해보는 셈이다. 그것도 비주얼베이직은 생전 처음이라 인터넷도 뒤져보고 책도 빌려놓고 있었는데... 그냥 GPT만 있으면 되더라. GPT는 나의 친구. 나의 구원자. 오오오. 보통 코딩하다 실수하게 되는 변수정의나 초기화, 오타를 찾아주는 건 기본이고 내가 만든 코드 로직을 간략화하거나 다른 방식도 제안해주는 등 GPT만 있으면 다른 매뉴얼 따위는 필요가 없었다.


각설하고, 백테스트 기본 조건은 다음과 같다.

 자산군 : 시가총액 규모가 큰 알트코인 7개 (ETH, XRP, Solana, DOGE, ADA, AVAX, TRX)
 분석기간 : 2021.1.~2024.12. (알트코인이 생긴지 오래되지 않아 기간이 길지 않음)
 투자주기 : 매주 초기 매수조건 설정, 매주 주말 일괄 매도
 투자전략 : 변동성돌파를 기본으로 세부설정값 조정
 벤치마크 : 7개 코인을 동일비중으로 Buy&Hold 한 경우

 분석기간이 짧은게 마음에 들진 않지만 2022~2023년에 코인이 폭락했던 시기가 포함되어 있어 위기대응성능을 어느정도 확인할 수 있을 듯 하다.

 

백테스트 할 때마다 헷갈리거나 종종 실수하는 내용인데, 이전 주기의 데이터와 비교해 모멘텀이나 이동평균 등을 구할 때 아직 시작되지 않은 미래데이터를 포함하지 않도록 index에 주의해야 한다.
예를 들어 이번주(i) 시작시점에 투자를 결정하는 과정에서 이번주 종가(i)는 현재 시점에서 아직 결정되지 않은 값이다. 만일 "현재 가격이 4주 이동평균보다 높으면 투자한다" 라는 전략이라면 현재가격은 지난주 종가, 즉 종가(i-1) 이고 4주 이동평균은 {종가(i-2)+종가(i-3)+종가(i-4)+종가(i-5)} / 4 가 된다. 
내가 자주 실수한 부분은 4주 이동평균을 {종가(i-1)+종가(i-2)+종가(i-3)+종가(i-4)} / 4 로 계산한거다. 이러면 수식이 종가(i-1) > {종가(i-1)+종가(i-2)+종가(i-3)+종가(i-4)} / 4 가 되어서 지난주 종가인 종가(i-1)이 양변에 중복되고 결국 4주이평이 아닌 3주이평 같은 결과가 되어버린다. 이게 기간이 길면 큰 차이가 나지 않지만 2주이동평균처럼 기간이 짧아지면 이상한 결과가 나올 수 있다.


기본적인 변동성돌파 전략을 시작으로 조건을 조금씩 추가해가며 결과를 비교해 보았다.

1. 벤치마크 전략 : 동일비율 투자 후 Buy&Hold

 21년 말에 7개 종목을 동일비유로 매수했다면 이때를 고점으로 찍고 22년 하락구간에 피눈물을 흘렸을 것이다. 비록 23년말부터 다시 상승해 최종적으로 CAGR은 20%에 달하지만 80%를 넘어가는 MDD를 보면 나는 이런 Buy&Hold 전략은 죽었다 깨어나도 못써먹을 듯.

2. 변동성돌파 : 지난주 종가기준 변동성 k배 이상 상승돌파 시 매수

변동성돌파 전략이 가장 기본 버젼으로 변동성이 큰 기간 중 가격이 급상승하는 시점에 매수하고 짧은 기간 후 매도해 수익을 누적한다. 좀더 자세히 말하면 지난주기 고가와 저가 차이를 변동성으로 정의하고 이번 주기 중 변동성의 0.5배만큼 상승하면 매수하고 이번 주기 종료시점에 일괄 매도한다.
 

1) 자산별 레인지 계산 : 레인지 = (지난주 고가) - (지난주 저가)
2) 목표매수가 = (지난주 종가) + 레인지 * k
3) 변동성돌파기준 k = 0.4~0.6 정도 (default 0.5)
4) 매수조건 : (이번주 고가) > (목표매수가)
5) 매수조건 만족하면 이번주 수익금 = (이번주 고가) - (목표매수가), 불만족하면 이번주 수익금=0 (투자 안함)
6) 이번주 평균수익률 = sum(자산별 수익률 / 투자자산 수)
7) 이번주말 총자산 = (1+rate) * (지난주말 총자산)

    - range = high_pr(i-1) - low_pr(i-1)
    - target_pr = close(i-1) + range * k
    - if high_pr(i) > target_pr then position=1 
    - if position=1 then earn = high_pr(i) - target_pr, else earn = 0
    - rate = sum( earn / target_pr / no_asset )

  CAGR 변동성 샤프지수 MDD 궤양지수 궤양성과지수
Buy&Hold 20% 65% 0.29 81% 57% 0.35
k=0.4 38% 36% 0.99 41% 21% 1.83
k=0.5 49% 31% 1.54 19% 9% 5.22
k=0.6 46% 28% 1.62 17% 8% 5.71
k=0.7 40% 25% 1.51 18% 8% 5.13
k=0.8 31% 23% 1.27 18% 8% 3.93
k=0.9 25% 22% 1.10 20% 8% 2.98
k=1.0 25% 20% 1.21 20% 8% 3.08


이 전략에서 변수는 변동성돌파 지표인 k 값으로 보통 0.4~0.6 범위를 추천하는데 나는 0.4~1.0 범위에 대해 계산해 보았다.
기본적으로 k 값이 얼마가 되더라도 Buy&Hold 전략이 폭락해 MDD 80%를 찍을 때 MDD를 20% 정도로 감소시킬 수 있었다. k가 커질수록 보수적으로 투자하는 경향이 되는만큼 CAGR과 변동성 모두 감소하는 경향을 보이지만 k=0.5 인 경우에도 샤프지수와 궤양성과지수는 나쁘지 않으면서 높은 수익을 가져갈 수 있다. 고로 k=0.5를 default 값으로 사용하기로 하자.

 

3. 변동성돌파 + 개별상층추세 : 1.전략에 각자산 상승추세 만족 시 매수

각 자산이 변동성을 돌파해 급상승하는 조건에 추가로 과거 일정기간 대비 상승추세인 조건을 모두 만족할 때 매수하는 전략이다. 매수조건이 추가되는 만큼 좀 더 보수적이고 안정적일 것으로 예상할 수 있겠다.

1) 자산별 레인지 계산 : 레인지 = (지난주 고가) - (지난주 저가)
2) 목표매수가 = (지난주 종가) + 레인지 * k
3) 변동성돌파기준 k = 0.4~0.6 정도 (default 0.5)
4) 매수조건a : (이번주 고가) > (목표매수가)
5) 자산별 n주 이동평균 계산 
6) 매수조건b : (지난주 종가) > (n주 이동평균)
7) 매수조건 a, b 모두 만족 시 매수
8) 매수조건 만족하면 이번주 수익금 = (이번주 고가) - (목표매수가), 불만족하면 이번주 수익금=0 (투자 안함)
9) 이번주 평균수익률 = sum(자산별 수익률 / 투자자산 수)
10) 이번주말 총자산 = (1+rate) * (지난주말 총자산)

    - range = high_pr(i-1) - low_pr(i-1)
    - target_pr = close(i-1) + range * k
    - if high_pr(i) > target_pr then position_a=1, else position_a=0
    - mov_ave = average( close(i-2) ~ close(i-1-n) )
    - if close(i-1) > mov_ave then position_b=1, else position_b=0
    - position = position_a * position_b
    - if position=1 then earn = high_pr(i) - target_pr, else earn = 0
    - rate = sum( earn / target_pr / no_asset )
    - total_asset(i) = (1+rate) * total_asset(i-1)

 

변동성 돌파지수 k=0.5로 고정하면 이 전략의 변수는 개별 자산의 상승추세를 결정하는 이동평균 기간이다. 주간 단위로 돌아가니 이동평균 기간도 주 단위로 해서 2주~12주까지 비교했다.

  CAGR 변동성 샤프지수 MDD 궤양지수 궤양성과지수
Buy&Hold 20% 65% 0.29 81% 57% 0.35
2주 이평 30% 23% 1.27 16% 7% 4.14
4주 이평 33% 22% 1.43 10% 4% 7.31
6주 이평 31% 21% 1.41 9% 5% 6.11
8주 이평 30% 21% 1.33 14% 7% 4.30
10주 이평 23% 20% 1.11 15% 8% 3.00
12주 이평 13% 16% 0.73 17% 9% 1.41

 

보통 주식들을 생각하면 이동평균 기간이 길어지면 큰 추세를 보게 되니 더 안정적인 결과가 나올 것으로 생각할텐데 알트코인에 대해선 이동평균 기간이 너무 길어지면 변동성은 대비 수익률이 더 많이 감소해 별로 좋지 않은 결과가 나왔다. 아마 코인이 움직이는 주기, 성격이 일반적인 주식보다 훨씬 빠르고 많이 움직여서 그런게 아닐까 싶은데... 이유가 뭐던간에, 이동평균은 대략 4주 정도로 투자주기의 4배가 좋아보인다. 

4. 변동성돌파 + 개별상승추세 + BTC상승추세 : 2.전략에 코인전체시장의 상황파악 위해 BTC의 상승추세 조건 추가

위의 전략에 BTC이 상승추세일 경우에만 매수하는 조건을 추가한다. S&P500이 상승추세라면 어떤 주식을 사도 좋을 확률이 높은 것처럼, 코인시장에선 BTC이 오르고 있을 때가 유리하다는 컨셉이다.

 1) 자산별 레인지 계산 : 레인지 = (지난주 고가) - (지난주 저가)
 2) 목표매수가 = (지난주 종가) + 레인지 * k
 3) 변동성돌파기준 k = 0.4~0.6 정도 (default 0.5)
 4) 매수조건a : (이번주 고가) > (목표매수가)
 5) 자산별 n주 이동평균 계산 
 6) 매수조건b : (지난주 종가) > (n주 이동평균)
 7) BTC n주 이동평균 계산
 8) 매수조건c : (지난주 BTC종가) > (BTC n주 이동평균)
 9) 매수조건 a, b,c 모두 만족 시 매수
 8) 매수조건 만족하면 이번주 수익금 = (이번주 고가) - (목표매수가), 불만족하면 이번주 수익금=0 (투자 안함)
 9) 이번주 평균수익률 = sum(자산별 수익률 / 투자자산 수)
 10) 이번주말 총자산 = (1+rate) * (지난주말 총자산)

    - range = high_pr(i-1) - low_pr(i-1)
    - target_pr = close(i-1) + range * k
    - if high_pr(i) > target_pr then position_a=1, else position_a=0
    - mov_ave = average( close(i-2) ~ close(i-1-n) )
    - if close(i-1) > mov_ave then position_b=1, else position_b=0
    - mov_ave_BTC = average( close_BTC(i-2) ~ close_BTC(i-1-n) )
    - if close_BTC(i-1) > mov_ave then position_c=1, else position_c=0
    - position = position_a * position_b * position_c
    - if position=1 then earn = high_pr(i) - target_pr, else earn = 0
    - rate = sum( earn / target_pr / no_asset )
    - total_asset(i) = (1+rate) * total_asset(i-1)

  CAGR 변동성 샤프지수 MDD 궤양지수 궤양성과지수
Buy&Hold 20% 65% 0.29 81% 57% 0.35
2주 이평 28% 22% 1.20 18% 8% 3.73
4주 이평 34% 22% 1.49 8% 4% 7.93
6주 이평 33% 21% 1.48 9% 5% 6.99
8주 이평 32% 21% 1.43 14% 7% 4.78
10주 이평 21% 19% 1.01 15% 9% 2.46
12주 이평 13% 15% 0.74 15% 9% 1.39

 

k=0.5로 고정하고 이동평균기간을 2주~12주로 바꿔가며 결과를 비교했다.
3번 전략의 결과와 거의 유사한 값들을 보이며 4주 이동평균이 좋아보인다. 

5. 변동성돌파 + 개별상승추세 + BTC상승추세 + 자금관리

위 전략에 자금관리 기법을 추가했다. 지금까지의 전략은 모두 N개의 알트코인 자산군에 대해 특정 코인을 매수하게 되면 총 자금의 1/N 만큼 투입했다. 자금관리를 추가하게 되면 변동성이 큰 코인은 투입금을 그 비율만큼 줄여서 위험을 줄이게 된다. 자세히 설명하면 자금관리 기준을 a%로 설정했는데 특정 코인의 변동율 (=레인지/종가)이 b% 라면 투입금은 1/N * (a/b) 로 설정한다. 물론 매수조건을 만족하지 않으면 매수하지 않는다. 그리고 기준값 a를 크게 하다 보면 a/b 가 1보다 커서 1/N보다 투입금의 비율이 커지는 경우가 생기니 min ( 1/N * (a/b) , 1/N) 조건으로 최대치를 1/N 으로 제한해줄 필요가 있다.

k=0.5, 이동평균은 4주로 고정하고 이 전략의 변수인 자금관리기준 a %에 대해 결과를 비교했다.
일단  자금관리 기준을 빡빡하게(작게) 가져가면 변동성과 MDD는 확실히 감소한다. 그렇지만 CAGR도 함께 감소하여 자금관리 2% 기준에선 CAGR 5% 가 되어 투자효과를 기대하기 힘든 수준이 된다. 이번 계산에선 기준치를 20%까지 높게 잡아도 MDD 8% 수준에서 CAGR 29%라는 좋은 결과가 나왔다.

  CAGR 변동성 샤프지수 MDD 궤양지수 궤양성과지수
Buy&Hold 20% 65% 0.29 81% 57% 0.35
자금관리 2% 5% 4% 1.02 1% 1% 8.14
자금관리 5% 13% 9% 1.26 3% 2% 7.90
자금관리 10% 22% 16% 1.30 6% 3% 6.69
자금관리 15% 27% 19% 1.37 7% 4% 7.14
자금관리 20% 29% 20% 1.43 8% 4% 7.37

 

보통 자금관리기법 문헌에선 자금관리 기준 2% 이상은 위험하다고들 언급하던데 왜 그럴까? 일단 내가 본 책에선 투자주기가 weekly 가 아니라 daily 였다. 하루하루의 변동성보다 일주일간의 변동성이 커질 수밖에 없고 특히 평일 주간시간에만 돌아가는 주식과 달리 1년 365일 24시간 내내 돌아가는 코인시장은 일주일 변동성이 더욱 클 것이다. 또한, 코인 자체의 변동성이 주식보다 훨씬 클 거라는 특성 역시 큰 영향을 줄 거 같다.

 

6. 전략 1 ~ 전략 5 비교

위에서 여러 변수들에 대해 비교했던 전략들 중 대표적인 것들을 함께 비교해서 요약하면 다음과 같다.

전략1: 균일비중 Buy & Hold
전략2: 변동성 돌파전략 (k=0.5)
전략3: 변동성 돌파전략 + 상승추세 (k=0.5, 4주 이동평균)
전략4: 변동성 돌파전략 + 상승추세 + BTC상승추세 (k=0.5, 4주 이동평균)
전략5: 변동성 돌파전략 + 상승추세 + BTC상승추세 + 자금관리 (k=0.5, 4주 이동평균, 자금관리 20%)

 

  CAGR 변동성 샤프지수 MDD 궤양지수 궤양성과지수
전략1 20% 65% 0.29 81% 57% 0.35
전략2 49% 31% 1.54 19% 9% 5.22
전략3 33% 22% 1.43 10% 4% 7.31
전략4 34% 22% 1.49 8% 4% 7.93
전략5 29% 20% 1.43 8% 4% 7.37

 

벤치마크 대상인 전략1을 제외하고 나머지 전략은 제한조건이 증가할수록 수익률이 감소하는 경향을 보이지만 변동성과 MDD도 감소하여 샤프지수와 궤양성과지수는 큰 차이가 나지 않는다. 특정 전략이 더 우수하다고 말하기보다 개인의 취향에 따라 선호정도가 달라진다고 봐야겠다. 

개인적으로 2022년 코인 폭락 시기를 포함함에도 불구하고 MDD를 10% 이하로 유지하는 안정적인 전략 4나 전략 5를 선택하면 안정적으로 굴릴 수 있을 거 같다.

'투자일기' 카테고리의 다른 글

2024년 12월 결산  (0) 2025.01.02
알트코인과 계엄령  (1) 2024.12.04
그란블라트의 마법공식은 지금도 유용할까?  (0) 2024.11.23
BTC 을 메인으로 하는 포트폴리오  (1) 2024.11.16
2024년 10월 결산  (0) 2024.11.03