for 迴圈是有界的
Pine 的 for 迴圈在編譯時就必須有已知長度。它們不能是無窮的。
for i = 0 to 49
sum += close[i]
這會加總最近 50 根收盤價。0 to 49 這個界就是迭代次數。
while 迴圈是單次的
Pine 的 while 迴圈每根 K 線以內部狀態執行一次。它們無法在單一根 K 線內跑過整段圖表歷史——沒有辦法「等下一根 K 線」。這是從 Python 過來的人最常踩的坑。
100,000 次迭代上限
Pine 限制單一根 K 線的執行能使用的總迭代次數。如果你把一個 for 巢狀放進一個 while,而內層迴圈跑了 100,000 次,你的腳本會丟出執行期錯誤。這個上限是為了讓圖表保持反應。實務上,除非你做了某種病態的事,很少會撞到。
在 Pine 裡迴圈適合做什麼
多數 Pine 工作是向量化的,你永遠不需要迴圈。for 會發光的地方:組一個內建函式沒覆蓋的自訂滾動計算、掃描一個小的回看窗口找型態,或是迭代一個陣列(下一堂課)。
一個型態辨識範例
偵測一個三根 K 線的型態:第 N 根的低點低於第 N-1 與 N-2 根:
threeBarLow = true
for i = 1 to 2
if low >= low[i]
threeBarLow := false
plotshape(threeBarLow, style=shape.triangleup, location=location.belowbar)
什麼時候不要用迴圈
如果你發現自己在寫 for i = 0 to 9999 去掃描整張圖找某個東西,你幾乎肯定要的是一個陣列或一個內建函式。Pine 的設計就是讓 90% 的指標工作根本不需要迴圈。