트레이딩뷰 차트에서 심층 분석을 시작하는 방법

대표 이미지
트레이딩뷰의 성과 요약: 롱/숏만으로는 부족합니다

트레이딩뷰의 전략 백테스트 기능은 초기 설정만으로도 롱과 숏, 두 가지 케이스에 대한 성과를 표시해줍니다.

트레이딩뷰 전략 백테스트 성과 요약창
트레이딩뷰 전략 백테스트 성과 요약창

이 기능은 매우 유용하지만, 자신의 전략을 구체화하다 보면 더 세부적인 분석을 하고 싶은 욕구가 생기기 마련입니다.

예를 들어, 같은 매수 상황이라도

  • 거래량이 많은 경우와 적은 경우
  • 이동평균선 위에서 발생한 매수 신호, 아래에서 발생한 매수 신호

와 같이 같은 조건이라고 하여도 '한단계 더 심층 으로 들어가게 되면 어떻게 될까?' 라는 궁금증은 백테스트를 진행하면서 한 번쯤 떠오를 만한 질문일 것입니다.

아쉽게도 이런 기능은 트레이딩뷰에서 기본적으로 제공하지 않는데요. 우리는 어떻게 해야할까요?

일반적인 해결 방식

위의 상황을 해결하는 방법에는 몇 가지가 있습니다. 가장 일반적으로 사용되는 방식은 전략을 분할하는 것입니다.
예를 들어, 채널 돌파 전략에서 돌파 위치가 이동평균선 위인지 아래인지에 따른 수익률 차이를 확인하고 싶다면, 전략을 4개로 나누고 각 전략의 트리거 포인트를 수정한 뒤 결과를 비교하는 방식입니다.
하지만 이 방법은 실제로 사용해 보면 상당히 번거롭습니다.
처음부터 정답을 찾을 수 있다면 다행이겠지만, 대부분의 경우 한번에 결론에 도달하는 경우는 많지 않고 반복적으로 전략을 수정하면서 결과를 확인해야하는데 그때마다 모든 전략을 수정해야하기 때문입니다.

거래 목록 내보내기(export)를 통한 해결 방식

좀 더 발전되고 효율적인 방법은 strategy.entry의 ID를 활용하는 것입니다.
아래는 전통적인 채널 브레이크아웃 전략에서 매수·매도 타이밍이 이동평균선 위인지 아래인지를 ID로 구분하기 위한 코드 예시입니다.

  //@version=6
strategy("ChannelBreakOutStrategy", overlay=true)

// 사용자 입력값 설정
length = input.int(title="Length", minval=1, maxval=1000, defval=5)
ma_length = input.int(title="MA Length", minval=1, maxval=100, defval=20) // 이동평균선 길이

// 상단 및 하단 채널 계산
upBound = ta.highest(high, length)
downBound = ta.lowest(low, length)

// 이동평균선 계산
ma = ta.sma(close, ma_length)

// 현재 가격이 이동평균선 위에 있는지 확인
isAboveMA = close > ma

if (not na(close[length]))
    // 상향돌파
    if (isAboveMA)
        strategy.entry("상향돌파 (이동평균선 위)", strategy.long, stop=upBound + syminfo.mintick, comment="상향돌파 (이동평균선 위)")
    else
        strategy.entry("상향돌파 (이동평균선 아래)", strategy.long, stop=upBound + syminfo.mintick, comment="상향돌파 (이동평균선 아래)")

    // 하향돌파
    if (isAboveMA)
        strategy.entry("하향돌파 (이동평균선 위)", strategy.short, stop=downBound - syminfo.mintick, comment="하향돌파 (이동평균선 위)")
    else
        strategy.entry("하향돌파 (이동평균선 아래)", strategy.short, stop=downBound - syminfo.mintick, comment="하향돌파 (이동평균선 아래)")

// 이동평균선과 채널 표시
plot(ma, title="Moving Average", color=color.blue, linewidth=2)
plot(upBound, title="Upper Bound", color=color.green, linewidth=1, style=plot.style_dotted)
plot(downBound, title="Lower Bound", color=color.red, linewidth=1, style=plot.style_dotted)

이처럼 ID를 구분하여 설정하면, 거래 목록 창에서 ID가 출력됩니다.
그 데이터를 CSV로 내보낸 후 스프레드시트 소프트웨어를 사용해 피벗 테이블을 작성하면, 한 가지 전략으로도 아래와 같은 분석이 가능해집니다:

  • 롱(이동평균선 위)
  • 롱(이동평균선 아래)
  • 숏(이동평균선 위)
  • 숏(이동평균선 아래)

진입 정보가 추가된 거래목록
진입 정보가 추가된 거래목록

마무리

이러한 환경적 요소를 분석하는 과정에서 얻는 정보는 새로운 전략에 대한 힌트가 되기도 합니다. 지금 자신의 전략에 만족하고 계신가요? 어쩌면 한 껍질 더 벗겨야 보이는 새로운 세계가 있을지도 모릅니다.