스크립트/스트래티지가 페이지 리프레쉬 뒤에 결과가 달라집니다 (리페인팅)

히스토리 데이터에는 프라이스가 바안에서 어떻게 움직였는지에 대한 정보가 없습니다; 오로지 시고저종 (OHLC). 이런 까닭으로 스크립트가 리얼타임과 히스토리 데이터에 대해 때때로 다르게 돌아가곤 합니다. 리얼타임 데이터에서는 오로지 오픈 프라이스만 알 수 있고 마지막 하이, 로우, 클로즈 밸류는 리얼타임 바가 클로즈되고 나서야 정해지기 때문입니다.

차트에 스트립트를 넣고 다수의 리얼타임 바에 대해 셈을 할 때까지 기다린 뒤 페이지를 리로드하게 되면 스크립트 플롯이 살짝 달라져 있는 것을 볼 수 있습니다. 이러한 인디케이터 리페인팅  이라 불리는 현상의 하나입니다. 이러한 리페인팅은 스크립트에서 어떤 특성을 쓰게 될 경우 히스토리와 리얼타임 바에 대해 그 셈이 달라지기 때문에 나타나는 현상입니다.

다른 타입의 리페인팅에는 지난 바에 대한 네가티브 오프셋과 security 펑크션을 잘 못 콜함으로써 알 수 없는 미래 정보를 써서 플롯팅함으로 생기는 리페인팅이 있습니다. 이런 경우 스크립트를 셈하면서 그에 필요한 리얼타임 데이터를 쓸 수 없게 됩니다.

모든 인디케이터가 여기 나오는 리페인팅 문제가 있는 것은 아니고, 특정 펑크션이나 랭귀지 요소가 코드에 쓰였을 경우에 나타납니다. 리페인팅은 버그가 아닙니다.  트레이딩뷰의 리얼타임 및 히스토리 데이터의 근본적인 차이로 인한 결과일 뿐입니다.

다음 경우 리페인팅이 나타납니다:

1. calc_on_every_tick=true 를 쓰는 스트래티지. calc_on_every_tick = false 파라미터를 쓰는 스트래티지는 심하지는 않지만 리페인팅이 나타나곤 합니다.

2. 차트 메인 심볼 레졸루션보다 더 큰 레졸루션 데이터를 security 를 써서 리퀘스트할 때:

// Add this study on 1 minute chart
//@version=4
study("My Script")
c = security(syminfo.tickerid, "5", lose)
plot(close)
plot(c, color=color.red)

이 스터디는 리얼타임과 히스토리 데이터에 따라 다르게 셈이 됩니다. 룩어헤드 파라미터 밸류와는 상관없습니다 (룩어헤드란? 를 보십시오).

3. 차트 메인 심볼 레졸루션보다 더 작은 레졸루션 데이터를 security 를 써서 리퀘스트할 때 (자세한 내용은 여기에) :

// Add this study on 5 minute chart
//@version=3
study("My Script")
c = security(tickerid, "1", close, lookahead=false)
plot(close)
plot(c, color=red)

lookahead=false이면 리페인팅이 일어납니다. lookahead=true이면 리페인팅은 잘 일어나지 않습니다. 그래도 1분 과 5분 업데이트가 서로를 앞질러 달릴 때는 (outrun) 리페인팅이 일어날 수 있습니다.

4. 계산이 스타팅 포인트 에 의존하는 모든 스크립트들. 인트라데이 데이터는 레졸루션에 따라 주, 달, 해의 시작 포인트로 얼라인됩니다. 이 때문에 스크립트 결과가 시간에 따라 다를 수 있습니다. 스타팅 포인트에 의존하는 스크립트 케이스가 아래에 나옵니다:

  • valuewhen, barssince 또는 ema 펑크션을 쓸 때 (알고리즘의 특성때문에)
  • 모든 백테스팅 스트래티지 (calc_on_every_tick 파라미터가 어떻게 디파인되건 상관없이)

레졸루션과 스타팅 포인트 얼라인먼트사이에는 의존성이 있습니다:

  • 1–14 분 — 한 주의 시작으로 얼라인
  • 15–29 분 — 한 달의 시작으로 얼라인
  • 30 분 이상 — 한 해의 시작으로 얼라인

히스토리 길이에 대한 다음 제한은 데이터 프로세싱때 고려가 됩니다:

  • 얼티밋 플랜의 경우 40000 히스토리 바
  • 엘리트 플랜의 경우 30000개의 히스토리 바
  • 프로페셔널 플랜의 경우 25000개의 히스토리 바
  • 프리미엄 플랜의 경우 20000개의 히스토리 바
  • 프로 및 프로+ 플랜의 경우 10000개의 히스토리 바
  • 기타 플랜의 경우 5000개의 히스토리 바

5. 보기로, 스플릿으로 인한 히스토리 데이터 바뀜

6. 스크립트에 아래 베어리어블이 들어 있으면 보톨 리페인팅이 일어납니다: