트레이딩뷰 전략 목록에는 피벗이라는 단어가 붙은 게 몇 개 있는데, 그중 피벗 확장 전략은 이름이 뜻하는 그대로 움직인다. 최근 몇 봉 사이에서 국지적인 고점·저점을 찾고, 그 피벗이 확정되는 순간 반대 방향 포지션을 정리하며 새 방향으로 갈아탄다. 오늘은 이 규칙을 비트코인 캐시(BCH) 위에 얹어 뜯어본다.

한 가지는 시작하기 전에 짚어야겠다. 이 글은 성과를 잰 기록이 아니라 규칙의 구조를 뜯어보는 기록이다. BCH 시세를 한 번도 열어보지 않았으니 이 전략이 몇 번 이겼고 몇 번 졌는지는 아예 쓸 수 있는 재료가 없다. 대신 leftBars·rightBars처럼 규칙이 스스로 정의하는 숫자는 그대로 밝히고 왜 그 값인지를 따진다. 아래 나오는 봉 그림들도 실제로 관측된 가격이 아니라 규칙의 동작을 보여주려고 손으로 구성한 모식도다.

규칙: 피벗은 확정되기 전까지 피벗이 아니다

피벗 확장 전략의 뼈대는 트레이딩뷰의 피벗 고점·저점 판정 함수 두 개다. 어떤 봉을 피벗 저점으로 인정하려면, 그 봉의 저가가 왼쪽 leftBars개 봉과 오른쪽 rightBars개 봉을 통틀어 가장 낮아야 한다. 피벗 고점은 대칭이다. 왼쪽·오른쪽 모두를 통틀어 가장 높은 고가를 가진 봉이 피벗 고점이다.

피벗 저점 조건: low[i] 가 [i-leftBars, i+rightBars] 구간에서 최솟값
피벗 고점 조건: high[i] 가 [i-leftBars, i+rightBars] 구간에서 최댓값

피벗 저점 확정 → 롱 진입 (숏 보유 중이면 청산 후 전환)
피벗 고점 확정 → 숏 진입 (롱 보유 중이면 청산 후 전환)

여기서 트레이딩뷰가 예시로 붙여 둔 기본값은 leftBars 4, rightBars 2다. 이 숫자가 왜 눈여겨볼 만하냐면, 판정 구조 자체에 봉이 나온 순서와 다른 시차가 끼어 있기 때문이다. i번 봉이 피벗 저점인지 알려면 i+rightBars번 봉까지 봐야 한다. i번 봉이 지나가는 시점에는 아직 오른쪽 두 봉이 안 나왔으니 판정을 내릴 수가 없다. 아래 그림에 이 지연 구조를 풀어 뒀다. 저가가 가장 낮은 봉이 나온 뒤에도 두 봉이 더 지나야 비로소 그 봉이 피벗 저점으로 확정되고, 그때 가서야 롱 진입 신호가 뜬다.

leftBars·rightBars로 피벗 저점을 확정하는 구조 모식도

판정 두 개, 전환 하나로 정리하면

이 전략을 조건문으로 옮기면 판정 함수 두 개와 포지션 전환 로직 하나로 끝난다.

if pivotlow(low, leftBars, rightBars) confirmed at i:
    if position == short: close short
    enter long at i+1

if pivothigh(high, leftBars, rightBars) confirmed at i:
    if position == long: close long
    enter short at i+1

종가와 시가의 대소만 비교하는 규칙이라면 손댈 손잡이가 아예 없어서 과최적화 자체가 성립하지 않는다. 피벗 확장 전략은 그 축복을 못 받는다. leftBars와 rightBars라는 손잡이가 각각 따로 움직이고, 둘을 어떻게 조합하느냐에 따라 신호가 나오는 자리와 확정까지 걸리는 시간이 통째로 바뀐다. 손잡이가 하나가 아니라 둘이라는 건 돌려볼 조합의 수가 곱으로 늘어난다는 뜻이라, 손잡이 하나짜리 규칙보다 과거 데이터에 끼워 맞출 여지가 오히려 넓다. 트레이딩뷰가 미리 잡아 둔 4와 2를 그대로 쓸지, 백테스트 성적을 보고 다른 조합으로 바꿀지는 결국 쓰는 사람이 정할 몫으로 남는다.

청산이 아니라 방향 전환

방금 옮긴 조건문을 다시 들여다보면 손절가도 목표가도 적을 자리가 없다는 게 눈에 들어온다. 포지션을 닫는 조건이 따로 있는 게 아니라, 반대 방향 피벗이 확정되는 사건이 청산과 재진입을 동시에 처리한다. 롱을 잡은 상태에서 피벗 고점이 확정되면 그 주문 하나로 롱이 닫히고 곧바로 숏이 열린다. 계좌는 사실상 쉬는 시간이 없다.

피벗 저점·고점 확정 지점과 그에 따른 상시 보유 포지션 상태 모식도

그림 3의 아래쪽 단은 이 계좌 상태를 계단 그래프로 그린 것이다. 무포지션에서 출발해 첫 피벗 저점이 확정되자마자 롱으로 올라서고, 다음 피벗 고점이 확정되기 전까지는 그 자리에서 안 내려온다. 문제는 그 사이 가격이 어디까지 밀려도 규칙에는 멈출 이유가 없다는 점이다. 롱으로 올라선 직후 가격이 반대로 무너져도 다음 피벗 고점이 뜨기 전까지는 계속 들고 가야 한다. 이 계좌를 실제로 운용하려면 진입 신호는 전략에서 받되 청산은 별도의 손절 규칙으로 감싸는 이중 구조가 필요하다는 뜻이고, 그러면 원래 전략의 반전 로직 절반은 이미 무력화된 셈이다.

파라미터 두 개가 만드는 차이

leftBars·rightBars를 짧게 두느냐 길게 두느냐는 신호 빈도와 확정 지연 둘 다를 바꾼다. 그림 2는 같은 가격 경로에 (4, 2)와 (10, 10)을 나란히 적용한 모식도다.

leftBars·rightBars 조합에 따른 신호 빈도와 확정 지연 비교 모식도

짧은 창은 사소한 굴곡에도 피벗 조건이 자주 채워지고, 확정까지 걸리는 지연도 rightBars가 2봉이라 짧다. 긴 창은 정반대다. 좌우로 훨씬 넓은 구간을 통틀어 최댓값·최솟값이어야 하니 조건 자체가 까다로워지고, 그림에서처럼 같은 구간 안에서 신호가 아예 하나도 안 나올 수도 있다. 대신 확정까지 10봉을 기다려야 하니 지연도 그만큼 커진다. 짧은 창은 반응이 빠른 대신 얕은 굴곡에도 반응하고, 긴 창은 굴곡을 걸러내는 대신 반응이 훨씬 늦다. 트레이딩뷰 기본값 (4, 2)가 어느 쪽에 무게를 둔 선택인지는 좌우 폭 자체가 말해준다. 빠른 반응 쪽이다.

이 규칙이 못 보는 것

피벗 저점·고점 조건은 좌우 구간의 최솟값·최댓값이라는 숫자 하나만 본다. 그 최솟값이 어떻게 만들어졌는지는 안 본다. 여러 봉에 걸쳐 완만하게 내려갔다가 다시 오르는 저점과, 봉 하나가 긴 꼬리로 순간적으로 찍고 올라온 저점이 규칙 안에서는 똑같이 “그 구간의 최솟값"이라는 값 하나로 수렴한다.

여러 봉에 걸친 완만한 반전과 봉 하나의 긴 꼬리 스파이크를 나란히 비교한 모식도

그림 4의 왼쪽은 여러 봉에 걸쳐 매도세가 잦아들며 만들어진 저점이고, 오른쪽은 거래 하나가 몰리며 봉 하나가 아래로 길게 튀었다가 바로 회복한 경우다. leftBars·rightBars 조건은 이 둘을 구분할 방법이 없다. 두 경우 모두 그 구간의 최저가라는 숫자 하나로 요약되는 순간 똑같이 피벗 저점이 되고 똑같이 롱 신호를 낸다. 거래량이 실렸는지, 그 저가가 몇 초 만에 찍혔는지는 애초에 함수 입력값(고가·저가 배열)에 들어 있지도 않다. 판정 대상을 고가·저가에서 거래량이나 몸통 크기까지 넓히지 않는 한, 이 구분은 규칙 안에서 영원히 불가능하다.

코인 시장에서 걸리는 함정

이 전략을 코인 시장에 얹으면 주식판에서는 잘 안 불거지는 함정이 두 가지 붙는다.

첫째는 봉을 끊는 기준 시각이 거래소마다 다르다는 점이다. 코인 시장은 주식과 달리 개장·폐장이 없어서, 하루짜리 봉을 어느 순간에 자를지가 거래소 설정값으로만 정해진다. 업비트 기준으로는 한국 표준시(KST) 자정이 그 경계고, 해외 거래소 다수는 협정 세계시(UTC) 자정을 쓴다. 두 기준 사이의 격차는 아홉 시간이다. 피벗 확장 전략은 몸통의 방향이 아니라 고가·저가라는 절댓값을 비교하므로 언뜻 경계 이동에 둔감해 보이지만, 실제로는 그렇지 않다. 같은 24시간 구간이라도 자르는 위치가 아홉 시간 어긋나면 그 구간의 최고가와 최저가가 완전히 다른 두 봉에 나뉘어 담길 수 있고, 그러면 leftBars·rightBars 창에 걸리는 봉의 구성 자체가 바뀌어 어느 봉이 피벗으로 확정되느냐가 뒤집힌다. 창이 짧을수록(4, 2) 봉 하나의 재배정이 창 전체에서 차지하는 비중이 크다는 점도 같이 따라온다.

둘째는 얇은 유동성이 만드는 꼬리다. 국내 현물 시장 기준으로 비트코인 캐시는 비트코인보다 시가총액과 거래대금이 작고, 그만큼 호가창이 얇다고 알려진 코인이다. 호가창이 얇으면 큰 매도 주문 하나가 순간적으로 가격을 눌렀다가 금방 되돌리는 긴 아래꼬리를 남기기 쉽다. 앞서 그림 4에서 본 “봉 하나짜리 꼬리"가 실제로 나올 확률이, 유동성이 두꺼운 자산보다 구조적으로 높다는 뜻이다. 피벗 확장 전략은 그 꼬리가 진짜 수급 반전인지 유동성 부족이 만든 잡음인지 구분하지 못한다.

비트코인 캐시라는 무대

굳이 비트코인 캐시를 골라 온 이유를 밝혀 둔다. 이 코인은 애초에 “블록을 얼마나 키울 것인가"라는 논쟁에서 태어났다. 2017년 비트코인 블록체인이 블록 용량 확장 방식을 두고 갈라섰을 때, 더 큰 블록으로 온체인 결제를 늘리자는 쪽이 떨어져 나와 BCH가 됐다. 갈라선 역사는 거기서 끝나지 않는다. BCH는 2018년에 다시 한번 쪼개져 비트코인 SV(BSV)를 낳았다. 시세를 보지 않는 이번 편에서는 이 분기들이 실제 가격에 어떤 자국을 남겼는지 판단할 근거가 없다. 다만 이렇게 여러 번 갈라진 자산일수록 거래소·커뮤니티별로 취급이 흩어지고, 그 결과 하나의 코인이 가질 수 있었던 유동성이 여러 갈래로 쪼개져 있다는 점은 일반적으로 알려진 사실이다. 앞서 짚은 얇은 호가창 이야기와도 이어지는 대목이다.

결론: 내 봇 게이트에 넣을 것인가

게이트 열한 번째 자리에는 안 넣기로 했다. 왜 뺐는지는 나중에 다시 판단할 수 있게 그대로 적어 둔다.

첫째, 확정 자체에 rightBars만큼의 구조적 지연이 박혀 있다. 지연이 있는 규칙 자체는 문제가 아니다. 이동평균도 지연이 있다. 문제는 이 지연이 진입 시점과 정확히 겹친다는 점이다. 신호가 뜨는 순간은 이미 저점에서 rightBars봉만큼 지나간 시점이고, 그 사이 가격이 어디로 갔는지는 규칙이 신경 쓰지 않는다. 반등이 얕게 끝나는 구간에서는 이미 오를 만큼 오른 다음에 들어가는 그림이 나온다.

둘째, 진입과 청산을 하나의 사건으로 묶어 처리하는 구조가 걸린다. 내 봇은 언제 살지와 언제 팔지를 서로 다른 모듈이 판단하도록 나눠 놨는데, 이 전략은 애초에 그 둘을 나눌 수 있게 설계돼 있지 않다. 반대 피벗이 뜨기 전까지 무조건 버티는 부분만 떼어내 별도 손절로 바꾸면, 남는 건 “진입만 있는” 절반짜리 규칙이다.

셋째, leftBars·rightBars라는 두 손잡이가 코인 시장 특유의 얇은 유동성과 만나면 어느 쪽으로 돌려도 걸리는 문제가 생긴다. 짧게 두면 꼬리 하나에도 반응하고, 길게 두면 지연이 더 늘어난다. 값을 손대지 않고 기본값 그대로만 놓고 보기로 한 이번 편의 규칙 안에서는, 이 트레이드오프를 피해 갈 구멍이 안 보인다.

그래도 통째로 버리기는 아깝다. 좌우를 동시에 확인해서 국지적 극값을 잡아낸다는 발상 자체는 여전히 쓸모가 있다. 진입 신호는 이 방식 그대로 받아 오고, 반대 피벗을 기다리는 대신 변동성 기반 트레일링 스톱으로 청산만 갈아 끼우면 둘째 문제는 풀린다. 다음에 스윙 계열 규칙을 다시 다룰 때 이 조합을 한 번 시험해 볼 만하다는 메모로 남긴다.

“시장은 당신이 옳은지 그른지 신경 쓰지 않는다. 신경 쓰는 건 당신이 옳을 때 얼마나 벌고 그를 때 얼마나 잃느냐다.” (마틴 슈워츠)

피벗 확장 전략에 없는 게 정확히 그거다. 반대 피벗이 뜰 때까지는 얼마를 잃든 버티라고만 말하는 규칙이라, 옳을 때와 그를 때의 손익 비율을 규칙 스스로는 관리하지 않는다. 그 관리는 결국 규칙 바깥에서 붙여야 한다는 걸 이번 편에서 다시 확인했다.

투자를 권하는 글이 아니라는 점을 다시 적어 둔다. 여기 실은 수식과 그림은 규칙이 어떻게 짜여 있는지 보여주려는 것이지, 지금 사거나 팔라는 신호가 아니다.

약어 풀이

  • BCH (Bitcoin Cash) — 비트코인 캐시. 2017년 블록 용량 확장을 두고 비트코인에서 갈라져 나온 하드포크 코인.
  • BSV (Bitcoin SV) — 비트코인 SV. 2018년 비트코인 캐시에서 다시 갈라져 나온 하드포크 코인.
  • BTC (Bitcoin) — 비트코인. BCH가 갈라져 나온 원본 체인이며, 지금도 이 시리즈의 다른 편에서 기준 자산으로 자주 등장한다.
  • KST (Korea Standard Time) — 한국이 쓰는 표준시. 협정 세계시보다 9시간 앞선다.
  • UTC (Coordinated Universal Time) — 세계 여러 거래소가 공통 기준으로 삼는 협정 세계시.