💡 요약 / TL;DR
- 캔들은 경로가 아니라 요약입니다. 시가·고가·저가·종가는 네 개의 스냅샷일 뿐, 고가와 저가가 어떤 순서로 찍혔는지는 버려집니다.
- 손절과 익절이 한 봉 안에 같이 들어오면, 캔들은 “둘 다 닿았다"까지만 말합니다. 무엇이 먼저인지는 알려주지 못합니다. 엔진은 그 빈자리를 고정된 가정으로 메우고, 그 가정은 측정이 아니라 선택입니다.
- 타임프레임을 바꾸면 이런 모호한 거래 수가 달라지므로 결과가 움직입니다. 매매하는 봉과 같거나 더 잘게 백테스트하고, 엔진이 어떤 체결 가정을 쓰는지 확인하십시오.
1시간봉에선 수익인데 15분봉으로 바꾸니 손실이 나는 전략
전략을 하나 설계했다고 가정해 보겠습니다. 1시간봉으로 백테스트를 수행하면 수익을 기록합니다. 다른 설정은 유지한 채 캔들 타임프레임만 15분으로 조정하여 동일한 규칙으로 다시 실행합니다. 이번에는 손실로 결과가 바뀝니다. 다른 변수는 전혀 변경하지 않았습니다. 동일한 시장, 동일한 분석 기간, 동일한 진입 및 청산 조건입니다. 달라진 점은 오직 캔들의 크기 하나뿐입니다.
입문 단계에서 가장 자주 부딪히는 벽입니다. “매매하는 타임프레임으로 백테스트하라"는 조언은 맞지만, 왜 그래야 하는지는 거의 설명되지 않습니다. 결과가 움직이는 이유는 코드 버그도, 우연도 아닙니다. 캔들이라는 것이 무엇이고, 무엇을 조용히 버리는지에서 나옵니다. 그 지점을 보고 나면 “어떤 타임프레임을 써야 하나"라는 질문에는 저절로 답이 나옵니다.
캔들은 경로가 아니라 요약입니다
단일 캔들에는 네 가지 수치(시가, 고가, 저가, 종가)만 저장됩니다. 이것이 기록의 전부입니다. 1시간봉은 60분 동안 발생한 가격 변동을 단 네 개의 가격 정보로 압축합니다.
캔들이 보존하는 정보와 폐기하는 정보를 명확히 인지해야 합니다. 캔들은 해당 기간 도달한 최고가와 최저가를 남기지만, 각각의 수치가 언제, 어떤 순서로 찍혔는지는 기록하지 않습니다. 가격이 먼저 고가로 상승한 뒤 저가로 하락했는지, 혹은 저가로 하락한 후에 고가로 상승했는지는 알 수 없습니다. 어느 경로를 거쳤든 캔들에 기록되는 네 가지 수치는 동일합니다. 즉, 가격이 실제로 이동한 경로와 체결 순서 정보는 완전히 소실됩니다.
차트를 분석하는 대부분의 상황에서는 이러한 정보의 소실이 큰 영향을 주지 않습니다. 네 가지 수치만으로도 추세나 지지·저항을 충분히 파악할 수 있기 때문입니다. 문제가 발생하는 시점은 전략의 청산 조건이 봉 내부의 가격 움직임 순서에 의존할 때입니다.
손절과 익절이 한 봉 안에 같이 들어올 때
소실된 경로 정보가 왜곡을 일으키는 대표적인 사례가 바로 손절(SL)과 익절(TP) 동시 도달 구간입니다. 매수(Long) 포지션에 진입하는 상황을 가정합니다. 진입 가격 하단에는 손절선(SL)을, 상단에는 익절선(TP)을 각각 설정합니다. 만약 단일 봉이 생성되는 과정에서 그 봉의 고가가 익절선에 도달하고, 저가가 손절선에 도달한다면 두 가격선이 모두 터치된 상황이 발생합니다.
실제 가격 흐름에서는 두 사건 중 하나가 먼저 발생합니다. 가격이 손절선에 먼저 도달하여 손실로 청산되었거나, 익절선에 먼저 도달하여 수익으로 실현되었을 것입니다. 이는 완전히 상반된 결과입니다. 그러나 최종 완성된 캔들 데이터에는 고가와 저가가 모두 닿았다는 사실만 기록될 뿐, 도달 순서는 보존되지 않습니다. 거래의 성패를 가르는 결정적인 정보가 캔들 압축 과정에서 유실된 셈입니다.
실제 체결 순서의 쏠림 여부를 확인하기 위해 분석을 수행했습니다. 비트코인(BTC) 시장에서 손절선과 익절선을 가장 좁고 대칭으로 설정하여 두 선이 한 봉에 함께 도달하기 쉬운 시나리오를 설계한 뒤, 체결 여부가 모호한 거래들을 1분봉 해상도로 세분화하여 실제 체결 순서를 정밀 판정했습니다. 타임프레임이 큰 봉 하나 내에서 두 가격선에 모두 도달한 총 1,820건의 거래를 분석한 결과, 손절선이 먼저 체결된 거래가 910건, 익절선이 먼저 체결된 거래가 910건으로 정확히 50:50의 대칭을 이루었습니다. 이는 큰 타임프레임의 캔들만으로는 체결 순서에 대한 어떠한 단서도 확보할 수 없음을 증명합니다. 즉, 실제 체결 방향은 동전 던지기와 같은 확률적 분포를 따릅니다.
실제 체결 순서 실측 데이터 (BTC 1분봉 해상도 판정)
| 구분 | 실제 체결 건수 (건) | 실제 체결 비율 (%) |
|---|---|---|
| 손절선(SL) 먼저 도달 | 910 | 50.0% |
| 익절선(TP) 먼저 도달 | 910 | 50.0% |
| 합계 | 1,820 | 100.0% |
그래서 엔진은 빈자리를 가정으로 메웁니다
캔들이 “무엇이 먼저냐"에 답하지 못하니, 백테스트 엔진은 거래를 닫기 위해 무언가를 가정해야 합니다. 쓸 수 있는 측정값이 없으니 규칙을 하나 정해 둡니다.
- 낙관(익절 먼저): 손절보다 익절이 먼저 터치되었다고 가정합니다. 차트 기반의 기본 백테스트 엔진들이 주로 채택하는 방식이며, 결과를 실제보다 왜곡하여 긍정적으로 표현합니다.
- 비관(손절 먼저): 익절보다 손절이 먼저 도달했다고 가정합니다. 성과가 지나치게 부풀려지는 현상을 예방하기 위해 보수적으로 청산을 집행하는 엔진(예: 시장가 진입 시
backtesting.py)에서 사용합니다. - 시가→고가→저가→종가 순: 네 개의 가격 수치를 정해진 경로대로만 순서대로 탐색합니다. 이 방식 역시 실행 순서에 대한 또 하나의 고정된 추측에 불과합니다.
세 가지 처리 방식 모두 개별 거래의 실측 경로가 아닌 임의의 알고리즘적 선택에 의존합니다. 그리고 이 지점에서 타임프레임과의 연관성이 발생합니다. 캔들의 크기가 클수록 내부에 더 긴 시간 범위가 포함되므로, 손절선과 익절선에 동시 도달하는 모호한 거래 건수도 비례하여 증가합니다. 일봉은 15분봉에 비해 훨씬 많은 모호성 거래를 가두게 됩니다. 타임프레임을 전환하면 실측 가격 흐름 대신 고정된 가정에 의해 승패가 가르는 거래의 비중이 변하며, 이것이 봉 크기를 바꿀 때 백테스트 결과가 뒤집히는 직접적인 원인이 됩니다. 예를 들어 1시간봉에서는 일부 거래가 유리하게 가정되어 통계에 잡혔다면, 15분봉에서는 다른 거래들이 다른 가정으로 처리되어 손실로 귀결되는 식입니다.
그래서 어떤 타임프레임으로 백테스트해야 할까요
“어떤 타임프레임"이라는 질문에서 이 원리가 답하는 부분은 체결 정밀도입니다. 너무 많은 거래가 실제 가격이 아니라 가정으로 결정되지 않게 하는 것입니다.
매매하는 타임프레임과 같거나 더 세분화된 타임프레임으로 백테스트하십시오. 15분봉으로 진입하고 관리한다면 일봉으로 백테스트하지 마십시오. 일봉은 봉 안의 순서를 훨씬 많이 가리므로, 엔진이 청산을 가정에 떠넘기는 거래가 그만큼 늘어납니다. 매매 봉과 같거나 그보다 작은 봉을 쓰면 모호한 거래의 비중이 낮게 유지되고, 결과가 가정보다 실제 가격 움직임에서 나옵니다.
그다음 엔진이 어떤 체결 가정을 쓰는지 확인하십시오. 익절 먼저인지, 손절 먼저인지, 시가-고가-저가-종가 순인지 알아보십시오. 낙관 쪽으로 가정한다면, 거친 봉에서 손절과 익절을 좁게 잡은 백테스트는 부풀려진 것으로 보십시오. 두 선이 한 봉에 갇히기 딱 좋은 설정이기 때문입니다. 비관 쪽으로 가정한다면 같은 설정이 부당하게 나쁘게 나옵니다. 어느 쪽이든 가정을 알면 내 수치가 어느 방향으로 휘었는지 알 수 있습니다.
이 원리가 답하지 않는 부분은 “내 매매 스타일에 가장 좋은 타임프레임” 같은 더 넓은 질문입니다. 스캘퍼가 1분봉을 써야 하는지, 스윙 트레이더가 4시간봉을 써야 하는지는 데이터 기간, 표본 수, 전략 자체의 논리에 달린 별개의 축입니다. (그쪽은 아래 관련 글을 참고하십시오.)
💡 Tip: 미세한 봉은 문제를 줄일 뿐 완전히 해결하지는 못합니다. 1분봉도 결국 하나의 봉이기에, 그 1분 안의 가격 순서는 여전히 알 수 없습니다. 다만 일봉에서 1분봉으로 내려가면 해상도가 1,440배 높아지므로 모호한 거래의 비중이 크게 감소합니다. 가정으로 메우는 부분을 줄이는 것이지 없애는 것은 아닙니다.
자주 묻는 질문
Q1. 같은 전략인데 타임프레임만 바꾸면 왜 백테스트 결과가 달라지나요?
캔들 하나에 기록되는 가격은 시가·고가·저가·종가 네 개뿐입니다. 고가와 저가가 어떤 순서로 찍혔는지는 남지 않습니다. 타임프레임이 클수록 그 네 개 숫자 안에 더 긴 시간이 담기므로, 손절과 익절이 한 봉 안에 같이 들어오는 거래가 늘어납니다. 그렇게 되면 엔진은 무엇이 먼저 닿았는지 알 수 없어 고정된 가정으로 메웁니다. 타임프레임을 바꾸면 이렇게 가정으로 처리되는 거래 수가 달라지므로 결과도 움직입니다.
Q2. 손절과 익절이 한 봉 안에 둘 다 있으면 백테스트는 무엇으로 칩니까?
실제로 무슨 일이 있었는지가 아니라, 엔진의 가정에 따라 갈립니다. 어떤 엔진은 최악(손절 먼저)으로, 어떤 엔진은 최선(익절 먼저)으로 가정하고, 어떤 엔진은 시가에서 고가, 저가, 종가 순으로 훑습니다. 셋 다 측정이 아닙니다. 가장 타이트한 경우를 BTC로 실측해 보니 실제 순서는 동전 던지기였습니다. 한 봉 안에 둘 다 닿은 거래 1,820건 가운데 손절이 먼저인 경우 910건, 익절이 먼저인 경우 910건. 캔들에는 답이 들어 있지 않습니다.
Q3. 백테스트는 어떤 타임프레임으로 해야 하나요?
체결 정밀도 측면에서는 실제 매매하는 타임프레임과 같거나 더 잘게 잡으십시오. 15분봉으로 매매한다면 일봉으로 백테스트하지 마십시오. 일봉은 15분봉보다 봉 안의 순서를 훨씬 많이 가립니다. 봉이 잘수록 모호한 경우에 빠지는 거래가 줄어듭니다. 그다음 엔진이 어떤 체결 가정을 쓰는지 확인하면, 모호한 거래에서 그 가정이 나를 띄워 주는지 깎아내리는지 알 수 있습니다.
Q4. 더 세분화된 타임프레임을 쓰면 문제가 완전히 사라지나요?
사라지지 않고 줄어듭니다. 1분봉도 결국 하나의 봉이기에, 그 1분 안의 가격 순서는 여전히 알 수 없습니다. 다만 일봉에서 1분봉으로 내려가면 해상도가 1,440배 높아지므로, 한 봉에 둘 다 닿는 거래의 비중이 크게 감소합니다. 가정으로 메우는 부분을 줄이는 것이지 없애는 것은 아닙니다. 이 점이 핵심입니다. 거친 봉에서 손절·익절을 좁게 잡은 설정은 의심하고 보라는 뜻이기 때문입니다.
관련 글
- 전체 그림 — 허브 가이드부터: 백테스트가 거짓말하는 7가지 방법 (이론이 아닌 측정된 데이터) — 7가지 구조적 실패 패턴을 한곳에서 측정해 정리합니다.
- 백테스트 부검 시리즈:
- ChatGPT가 절대 못 잡는 룩어헤드 편향 디버깅: 백테스트가 미래 데이터를 과거 결정에 끌어오는 방식과 이를 걸러내는 법.
- 슬리피지 시뮬레이션, 체결 지연과 계좌 감소 측정: 종이 위 성과를 실제 체결에 맞추는 법.
- 상관관계는 방향이 아니다: 수렴하는 상관관계가 매매 방향을 알려주지 못하는 이유.
실측 핵심 수치
자주 묻는 질문
같은 전략인데 타임프레임만 바꾸면 왜 백테스트 결과가 달라지나요?
손절과 익절이 한 봉 안에 둘 다 있으면 백테스트는 무엇으로 칩니까?
백테스트는 어떤 타임프레임으로 해야 하나요?
더 잘은 타임프레임을 쓰면 문제가 완전히 사라지나요?
출처 및 1차 자료
- TradingView Pine Script v6 공식 레퍼런스www.tradingview.com
- OHLC 봉 정의en.wikipedia.org
교육용 콘텐츠이며 투자 권유나 금융 조언이 아닙니다. 데이터·가격·도구 사양은 바뀔 수 있으니, 실거래 전 직접 검증하고 페이퍼 트레이딩으로 확인하시기 바랍니다.
