返回《給 CFD 交易者的 TradingView PineScript》
第二部分

迴圈:for 與 while

Pine 的迴圈跟你可能知道的不一樣——有界的 for、單次語義,以及迭代次數上限。

中級閱讀時間約 8 分鐘初學 → 進階第 07 / 17 堂
在 TradingView 實際跑一次
用 for 掃描一個小的回看窗口

那個迴圈只涵蓋 2 根 K 線——那就是重點。Pine 的迴圈是給小的、固定的窗口用的;其他一切都該用內建函式或陣列。

//@version=5
indicator("Lesson 7 - Loops", overlay=true)

// Is this bar's low below the previous two lows?
threeBarLow = true
for i = 1 to 2
    if low >= low[i]
        threeBarLow := false

plotshape(threeBarLow, "3-bar low", shape.triangleup, location.belowbar,
          color=color.green, size=size.tiny)

// Count up-closes over the last 5 bars.
upCount = 0
for i = 0 to 4
    if close[i] > open[i]
        upCount := upCount + 1

// Show the count on the last bar only.
if barstate.islast
    label.new(bar_index, high, "Up closes (last 5): " + str.tostring(upCount),
              style=label.style_label_down, color=color.teal, textcolor=color.white)
如何執行
  1. 1. 在 TradingView 打開任一圖表,點選下方的 Pine Editor
  2. 2. 把編輯器裡的內容全選,用這段程式覆蓋過去,然後按 Save
  3. 3. 點選 Add to chart。如果是策略, 再打開 Strategy Tester 分頁。

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% 的指標工作根本不需要迴圈。

你剛完成了什麼

給 CFD 交易者的 TradingView PineScript》的第 07 / 17 堂課。跑完範例或讀完這段之後, 把它勾起來,然後進下一堂課。