'파인이 시리즈 참조 길이를 정할 수 없습니다. max_bars_back 을 써 보십시오' 에러가 납니다.

파인 스크립트는 각 베어리어블 또는 펑크션에 대해 히스토리 버퍼를 만듭니다. 그 버퍼에는 베어리어블/펑크션의 이전 값 정보가 들어 있어 코드에서 [] 히스토리-레퍼런싱 오퍼레이터를 써서 지나간 값을 찾아 쓰게 됩니다. 버퍼 사이즈는 얼마나 오래 히스토리 밸류를 쓸 수 있을 지를 정하게 됩니다.

파인은 스크립트를 셈하면서 첫 244 바에서 쓰인 히스토리 값들을 분석하여 모든 베어리어블/펑크션에 대한 버퍼 사이즈를 알아서 결정합니다. 지난 값을 하나도 쓰지 않을 경우 베어리어블/펑크션에 디폴트 디폴트 버퍼 사이즈를 줍니다. 디폴트 베어리어블 버퍼 사이즈는 300바, 펑크션은 한 바입니다.

어떤 경우에는 파인에서 그 펑크션에 대한 알맞은 버퍼 사이즈를 주지 못해 대신에 디폴트 버퍼 사이즈를 쓰게 되는데 다음과 같은 경우입니다:

  • 조건문 (if, iff, 또는 ?) 안에서 244번째 바가 이미 지났을 때 베어리어블/펑크션의 히스토리 레퍼런스를 처음 하였을 때 .
  • 다이내믹 렝쓰를 서포트하는 펑크션에서 244번째 바 다음에 펑크션으로 보낸 렝쓰 밸류가 그보아 앞서 보낸 밸류보다 더 클 때 (버퍼가 셈이 되고 있었을 때).

 아래 코드를 보시기 바랍니다. 앞서 얘기한 에러가 나게 되는데 그 까닭은:

  • 컴파일 때 var1 베어리어블 밸류를 알 수 없기 때문입니다
  • test 베어리어블은 차트의 첫 244 바동안 아무런 지난 데이터를 쓰지 않기 때문입니다

이런 까닭으로 

test 베어리어블은 크기가 300인 디폴트 버퍼를 갖게 됩니다. 스크립트에서 베어리어블 버퍼 사이즈를 벗어나는 지나간 301 번째 바 밸류를 찾으면 에러가 납니다. 

//@version=4study("max_bars_back var",overlay=true)var1 = input(301)test = 0.0//max_bars_back(test, 301)if bar_index > 244    test := test[var1]plot(test)
Java

max_bars_back 파라미터 및 max_bars_back() 펑크션으로 이 이슈를 풀 수 있습니다. 이 두 펑크션으로 디폴트 버퍼가 모자랄 때 올바른 베어리어블/펑크션 버퍼 사이즈를 줄 수 있습니다. 위 코드에서 max_bars_back() 을 언코멘트하십시오. 테스트 베어리어블 버퍼 크기가 301이 되어 스크립트가 잘 돌아가게 됩니다.

다음 보기에서는 첫 244 바동안 펑크션 콜이 불리지 않아 디폴트로 1-바 버퍼 사이즈가 정해집니다. [] 오퍼레이터를 써서 명확하게 지난 밸류를 참조하지는 않지만 그럼에도 불구하고 그 펑크션은 지난 20 밸류가 있어야 셈을 할 수 있습니다. 그런 까닭으로 이 스크립트는 max_bars_back 에러를 내게 됩니다:

//@version=4study("Requires max_bars_back")test = 0.0if bar_index > 1000    test := vwma(close, 20)plot(test)
Java

펑크션으로 어떤 펑크션에 특정 버퍼 사이즈를 줄 수는 없습니다. 그게 필요할 경우 또는 모든 베어리어블/펑크션에 대해 디폴트 버퍼 사이즈를 세팅하고 싶으면 스크립트의 study 또는 strategy 에 max_bars_back parameter 넣도록 하십시오. 이 파라미터를 쓰게 되면 스크립트의 리소스 사용이 늘어나게 됩니다.  따라서 이 방법은 필요할 때 만 써야 합니다.

//@version=4study("Requires max_bars_back", max_bars_back=20)test = 0.0if bar_index > 1000    test := vwma(close, 20)plot(test)
Java

그리고 조건문 브랜치로부터 문제의 익스프레션을 빼내는 것도 한가지 방법입니다. 이경우 max_bars_back 파라미터는 필요하지 않게 됩니다.

//@version=4study("Requires max_bars_back")test = 0.0vwma20 = vwma(close, 20)if bar_index > 1000    test := vwma20plot(test)
Java

max_bars_back 에 대한 자세한 것과 연관 에러는 당사 유저 매뉴얼에 나와 있습니다.