[팁]TradingView 전략에 기간을 지정하는 방법
TradingView에서 전략을 만들고 백테스트를 진행할 때, 기간을 명확히 지정하는 것은 매우 중요합니다.
Pine Script로 작성된 전략은 로딩된 캔들 데이터를 기준으로 시뮬레이션되는데, 열려있는 차트의 시간 프레임(예: 1시간봉, 1일봉, 1주일봉)에 따라 로딩되는 캔들 수가 달라지기 때문에, 어느 시간 프레임을 사용하느냐에 따라 백테스트이 기간이 변하게 되기 때문입니다.
따라서 TradingView에서 Pinescript로 전략을 만들 때에는 시간 프레임이 변경되더라도 같은 기간을 대상으로 백테스트를 할 수 있도록 기간을 조절해 주는 게 필요합니다.
이를 위한 가장 간단한 해결방법은 Premium요금제 부터 제공되는 딥 백테스팅이라는 기능을 이용하는 방법 입니다.

이 방법을 사용하면 과거 데이터의 일부 구간이 아닌 모든 구간을 대상으로 백테스트를 할 수 있지만 비용이 추가로 발생하는 문제가 있습니다.
그럴때 Pine Script 전략에 아래의 코드를 사용하면 간이적으로 백테스트 기간을 명확히 설정할 수 있습니다.
// 날짜 입력
fromDay = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input.int(defval = 10, title = "From Month", minval = 1, maxval = 12)
fromYear = input.int(defval = 2009, title = "From Year", minval = 1970)
toDay = input.int(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input.int(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input.int(defval = 2100, title = "To Year", minval = 1970)
// 시간 조건
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate
// 롱과 숏 진입 조건
longCondition = time_cond and close > ta.sma(close, 50)
shortCondition = time_cond and close < ta.sma(close, 50)
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
백테스트 시작 시점을 지정하는 코드 샘플
코드 설명
- 사용자 입력 값
fromDay
,fromMonth
,fromYear
: 시작 날짜를 지정하는 입력값입니다.toDay
,toMonth
,toYear
: 종료 날짜를 지정하는 입력값입니다.
- 타임스탬프 생성
timestamp()
함수를 사용하여 시작 날짜와 종료 날짜의 타임스탬프를 생성합니다.
- 기간 조건
time_cond
: 현재 캔들의 시간(time
)이 지정된 기간 안에 포함되는지를 확인합니다.
- 롱과 숏 조건
longCondition
: SMA(50)보다 종가가 높고, 지정된 기간 안에 있는 경우 롱 포지션 진입.shortCondition
: SMA(50)보다 종가가 낮고, 지정된 기간 안에 있는 경우 숏 포지션 진입.
이 조건을 전략 코드에 추가하면, 선택한 기간에 해당하는 데이터만 백테스트에 반영되며, 조건에 맞는 롱과 숏 진입을 자동으로 실행할 수 있습니다.
마무리
물론 비용적인 여유가 있다면 딥 백테스트 기능을 사용하는 것이 좋습니다. 일반적으로 많이 쓰이는 1시간 봉을 기준으로 한다면 트레이딩뷰에서는 약 3~4년 정도 기간의 백테스트가 가능합니다.
주식 시장의 큰 트렌드가 10년에 한 번 정도 바뀐다고 가정한다면 아무래도 약간 부족한 감이 있으니까요.