트레이딩뷰에 기본으로 딸려 오는 전략 목록을 처음부터 훑다 보면 의외로 싱거운 게 하나 나온다. Consecutive Up/Down Strategy, 그대로 옮기면 “연속 상승/하락 전략"이다. 지표도 아니고 이동평균도 안 쓴다. 어제 종가보다 오늘 종가가 높았는지 낮았는지, 그것만 센다. 그 카운트가 정해둔 숫자에 닿으면 진입한다. 이번 편은 이 규칙을 솔라나(SOL)를 무대로 해부한다.
먼저 이 시리즈의 성격을 밝혀둔다. 이 글은 솔라나 가격을 받아 전략 성과를 검증한 글이 아니라, 트레이딩뷰 기본 전략 하나의 규칙 자체를 해부한 글이다. 승률도 수익률도 한 번도 안 나오는 이유가 그거다. 시세 API를 부르지 않았고, 이 글에 나오는 숫자는 전부 규칙이 정의로 갖는 파라미터뿐이다.
솔라나를 고른 건 이 코인의 최근 시세가 좋아서도 나빠서도 아니다. 배정 순서가 그렇게 됐을 뿐이고, 가격을 안 보니 판단할 근거도 없다. 대신 솔라나가 대표하는 “레이어1 코인"이라는 성격을 규칙과 겹쳐 볼 무대로 쓴다.
무엇을 세는가
이 전략이 보는 값은 딱 하나, 직전 봉 대비 종가의 방향이다. 트레이딩뷰 공식 문서에 실린 핵심 로직을 그대로 옮기면 이렇다.
ups := close > close[1] ? nz(ups[1]) + 1 : 0
dns := close < close[1] ? nz(dns[1]) + 1 : 0
롱 진입: ups >= consecutiveBarsUp
숏 진입: dns >= consecutiveBarsDown
ups는 종가가 직전 종가보다 높았던 봉이 몇 번 연속으로 나왔는지 세는 카운터고, dns는 그 반대다. 기본값은 둘 다 3이다. 즉 종가가 사흘 연속(일봉 기준) 올랐으면 롱, 사흘 연속 내렸으면 숏이다. 아래 그림은 이 카운트가 어떻게 쌓이고 어디서 진입이 터지는지 보여주는 모식도다. 실제 시세가 아니라 규칙을 설명하기 위해 손으로 만든 값을 썼다.

임계값이 왜 3이냐고 물으면 답은 싱겁다. 트레이딩뷰가 골라 넣은 기본값일 뿐, 통계적으로 최적화된 숫자가 아니다. 다만 3이라는 숫자에는 나름의 균형이 있다. 1이나 2로 잡으면 거의 매번 방향이 한 번만 바뀌어도 신호가 나서 사실상 “전일 대비 상승/하락"과 다를 게 없어진다. 반대로 7, 8로 올리면 신호 자체가 드물어져서 트렌드가 이미 다 지나간 뒤에야 뒤늦게 올라타게 된다. 3은 그 사이 어디쯤에서 “우연한 하루 이틀의 반등"과 “며칠은 이어진 방향성"을 가르는, 가장 무난한 절충값 정도로 이해하면 된다.
여기서 놓치기 쉬운 세부 규칙이 하나 있다. 비교 연산자가 >와 <이지 >=가 아니라서, 종가가 직전과 정확히 같은 날(보합)이 나오면 ups와 dns가 둘 다 0으로 리셋된다. 상승도 하락도 아닌 날은 카운트를 유지해주는 게 아니라 아예 끊어버린다는 뜻이다. 사흘 연속 오르다가 나흘째 종가가 딱 직전과 같으면, 그 흐름은 카운트상으로는 없었던 일이 된다.
청산 규칙이 없다는 것의 의미
이 전략 목록(strategy 카테고리)을 다룰 때는 진입만큼 청산을 봐야 한다는 게 이 시리즈의 원칙인데, 이 규칙은 청산 규칙이 아예 없다. 트레이딩뷰 공식 코드에도 손절이나 목표가, 반대매매 신호와 별개인 청산 조건이 없다. 그럼 포지션은 언제 닫히는가 — 답은 “안 닫힌다, 반대 방향 진입 신호가 나올 때까지는”. 롱을 잡고 있다가 사흘 연속 하락이 나오면 그 신호가 롱을 청산하는 동시에 숏을 새로 연다. 청산이 별도로 있는 게 아니라 반대 진입이 청산을 겸한다.
이게 왜 중요하냐면, 리스크 관리가 이 전략 안에 전혀 내장돼 있지 않다는 뜻이기 때문이다. 사흘 연속 오른 뒤 진입한 롱이 그대로 열흘 동안 미끄러져도, 반대 방향으로 사흘 연속 하락이 채워지지 않는 한 포지션은 살아있다. 상승 하루, 하락 하루, 상승 하루가 반복되는 구간에서는 두 카운터 모두 3에 닿지 못한 채 포지션만 계속 붙들려 있을 수도 있다. 아래 그림은 이 흐름 — 반대 신호가 날 때까지 포지션이 그대로 유지되고, 그 반대 신호가 곧 청산이자 새 진입이 되는 구조를 모식도로 정리한 것이다.

내 봇의 게이트 기준으로 보면 이 지점이 가장 걸린다. 내가 지금 쓰는 진입 규칙들은 전부 최대 손실 폭을 미리 정해두는 스톱을 동반하는데, 이 규칙은 스톱이라는 개념 자체가 없다. 붙이려면 내가 직접 얹어야 하는데, 그 순간 이 규칙은 트레이딩뷰 기본값 그대로가 아니라 내가 새로 설계한 변형이 된다.
이 규칙이 못 보는 것
ups와 dns는 오직 방향만 센다. 어제보다 0.1% 오른 것과 8% 오른 것이 카운터에는 완전히 똑같은 +1이다. 변동성이 낮아서 매일 조금씩 꿈틀거리는 구간과, 하루 만에 크게 튀어 오른 구간을 이 전략은 구분하지 못한다. 거래량도 안 본다. 거래량이 바닥을 친 채로 3연속 상승이 나온 경우와, 거래량이 평소의 몇 배로 실리며 3연속 상승이 나온 경우를 같은 신호로 취급한다.
또 하나, 이 규칙은 추세 추종(모멘텀) 쪽에 서 있다. 사흘 연속 오른 뒤에 “더 오를 것"에 베팅해 롱을 잡는다. 사흘 연속 내린 뒤에 “반등"을 노리는 역추세 규칙이 아니라는 뜻이다. RSI 과매도 진입 같은 역추세 규칙과는 정반대 가정 위에 서 있는 셈이라, 두 규칙을 같은 자산에 동시에 걸면 정면으로 충돌하는 신호가 나올 수 있다.
파라미터가 있다는 점도 짚어야 한다. consecutiveBarsUp, consecutiveBarsDown이 각각 3이라는 값을 갖고 있으니, 이 규칙은 “파라미터가 없어서 과최적화에서 자유로운” 부류는 아니다. 3을 4나 5로 올리면 신호 빈도와 진입 시점이 달라진다. 아래 그림은 같은 흐름에서 임계값을 3에서 5로만 바꿔도 진입이 두 봉 늦어지고, 그사이 되돌림을 더 많이 떠안게 되는 모습을 보여주는 모식도다. 임계값을 과거 데이터에 맞춰 5나 7로 조정하고 싶은 유혹이 생긴다면, 그건 이미 최적화이지 기본 규칙이 아니다.

코인 시장에서 걸리는 함정
주식은 거래소가 하나의 공식 마감 시각을 못 박아 둔다. 그런데 코인은 24시간 쉬지 않고 거래되고, “오늘의 종가"를 어디서 끊을지는 순전히 거래소나 차트 설정이 정한다. 업비트 원화 마켓 일봉은 한국시간(KST) 자정을 기준으로 끊기고, 해외 거래소 상당수는 UTC 자정을 기준으로 끊는다. 두 시각 사이에는 아홉 시간의 차이가 있다.
이 전략은 오직 “종가가 직전 종가보다 높았는가"만 보기 때문에, 일봉을 어디서 끊느냐가 신호 자체를 바꿔버린다. 같은 시간대의 같은 흐름이라도, 마감을 KST로 잡으면 사흘 연속 상승으로 카운트되는 구간이 UTC로 잡으면 이틀 연속 상승에서 한 번 꺾이는 구간으로 쪼개질 수 있다. 아래 그림은 하나의 시간 단위 흐름을 KST 자정과 UTC 자정, 두 기준으로 각각 일봉을 끊었을 때 방향열이 어떻게 달라지는지 보여주는 모식도다. 같은 시장을 보고도 어느 거래소의 일봉을 참조하느냐에 따라 진입 여부가 갈릴 수 있다는 뜻이다.

이건 사소한 흠이 아니다. 이 전략의 정의 전체가 “종가와 종가의 비교"인데, 그 종가를 정의하는 경계 자체가 시장마다 다르다면 규칙을 그대로 옮겨도 봇마다 다른 신호를 낼 수 있다는 뜻이다. 내 봇을 어느 거래소, 어느 시간대 기준으로 돌릴지부터 못 박아야 이 규칙이 재현 가능해진다.
또 하나, 코인 시장은 주말이 없다. 주식판이었다면 한 주에 일봉 다섯 개만 쌓이지만 코인은 일곱 개가 쌓인다. 같은 3연속이라는 조건이라도 코인 쪽이 달력 기준으로는 더 자주 채워질 여지가 있다는 뜻이고, 이건 신호의 옳고 그름과는 별개로 신호 빈도 자체가 시장 구조 때문에 달라진다는 걸 의미한다.
마지막으로, 이 전략은 숏 신호도 낸다. 사흘 연속 하락이면 숏을 열라는 신호다. 그런데 현물 지갑에 솔라나를 들고 있는 봇이라면 공매도 자체가 불가능하다. 숏 신호가 나와도 실제로 취할 수 있는 행동은 “보유 중인 롱을 정리하고 무포지션으로 대기"까지가 한계이고, 진짜 숏 포지션을 잡으려면 파생상품 계정으로 옮겨야 한다. 전략을 그대로 현물 봇에 얹으면 롱 신호와 숏 신호의 무게가 애초에 같지 않다.
솔라나라는 무대
솔라나는 레이어1 블록체인이다. 이 시리즈의 원칙대로, 가격을 보지 않았으니 솔라나가 잘했다 못했다는 말은 하지 않는다. 대신 레이어1이라는 성격이 이 규칙과 만났을 때 뭐가 걸리는지만 짚는다.
레이어1 코인의 가격은 네트워크 자체의 상태와 얽혀 움직일 때가 있다. 솔라나는 과거 몇 차례 네트워크가 멈추거나 검증인 처리 지연을 겪은 이력이 있는 체인으로 알려져 있다. 이런 사건이 터지면 가격은 짧은 시간에 크게 움직이고, 정상화 소식이 나오면 반등도 빠르게 나올 수 있다. 문제는 이 전략이 “왜 올랐는지"를 전혀 구분하지 못한다는 점이다. 사흘 연속 종가가 오른 게 수요가 꾸준히 붙어서인지, 네트워크 장애 이후 급반등의 잔여 흐름인지, 카운터 입장에서는 완전히 같은 +1, +1, +1이다. 체인 단위의 일회성 사건이 만든 반등을 추세로 오인해 진입할 위험이 다른 자산보다 크다는 뜻이다.
또한 레이어1 코인에는 검증인 수, 네트워크 처리량(TPS), 온체인 활성 주소 수 같은 그 체인 고유의 지표가 따로 있다. 이 지표들은 종가 하나만 보는 이 전략에는 애초에 들어올 자리가 없다. 종가 연속 카운트는 그 자체로 완결된 규칙이라, 온체인 데이터를 곁들이려면 이 전략과는 별도의 필터를 하나 더 쌓아야 한다.
결론: 내 봇에 넣을 것인가
넣지 않기로 했다. 이유는 하나가 아니라 셋이 겹친다. 첫째, 청산 규칙이 없어서 손실 폭이 반대 신호가 채워질 때까지 이론상 무한히 열려 있다. 둘째, 일봉 경계가 거래소마다 달라서 같은 규칙도 내가 어느 기준으로 짜느냐에 따라 다른 신호를 낼 수 있다 — 재현성이 흔들리는 규칙은 봇에 올리기 전에 먼저 기준을 못 박아야 하는데, 그 못을 박는 순간 트레이딩뷰 기본값 그대로가 아니게 된다. 셋째, 현물 봇이라 숏 신호의 절반은 애초에 실행할 방법이 없다.
다만 카운트 자체는 버리지 않는다. 독립된 진입 규칙으로는 위험하지만, 다른 진입 신호 위에 “최근 며칠간 방향이 얼마나 일관됐는가"를 확인하는 보조 필터로는 써볼 만하다고 본다. 예를 들어 이미 다른 규칙으로 롱 신호가 나왔을 때, dns가 아직 2 이하인지(즉 최근 급격한 반대 흐름이 없었는지) 확인하는 용도라면 이 규칙의 단순함이 오히려 장점이 된다. 독립 전략으로는 기각하고 필터 후보로만 남겨둔다 — 버린 이유를 적어두는 건 나중에 판단이 바뀔 때를 위해서다.
이 글은 투자 권유가 아니다. 여기 나온 임계값과 계산식은 트레이딩뷰가 제공하는 기본 전략의 정의일 뿐, 특정 자산의 매수·매도를 권하는 근거가 아니다.
약어 풀이
- SOL (Solana) — 솔라나. 이번 편의 무대가 된 레이어1 블록체인의 코인 심볼.
- BTC (Bitcoin) — 비트코인.
- ETH (Ethereum) — 이더리움.
- KST (Korea Standard Time) — 한국 표준시. 업비트 등 국내 거래소 일봉이 자정을 끊는 기준.
- UTC (Coordinated Universal Time) — 협정 세계시. 다수 해외 거래소가 일봉을 끊는 기준.
- TPS (Transactions Per Second) — 초당 처리 가능한 거래 수. 레이어1 체인의 처리량을 나타낼 때 쓰는 지표.
- RSI (Relative Strength Index) — 상대강도지수. 이 글에서는 역추세 규칙의 예시로만 비교됐다.
- API (Application Programming Interface) — 응용 프로그램 인터페이스. 이 글에서는 시세 조회용 인터페이스를 가리키며, 이번 편에서는 호출하지 않았다.