Pine script TradingView PinScript值当不使用for迭代器变量(i)时

Pine script TradingView PinScript值当不使用for迭代器变量(i)时,pine-script,Pine Script,我想用valuewhen获得最新的五个curPosition。但它不起作用。 我认为用for I迭代器调用valuewhencurPosition>0,curPosition,I是个问题。你能帮我吗 //@version=4 strategy(title="Test", shorttitle="Test", overlay=true) // curPosition // 0 == "-" // 1 == "LONG" // 2 == "SHORT" curPosition = 0 longC

我想用valuewhen获得最新的五个curPosition。但它不起作用。 我认为用for I迭代器调用valuewhencurPosition>0,curPosition,I是个问题。你能帮我吗

//@version=4
strategy(title="Test", shorttitle="Test", overlay=true)

// curPosition
// 0 == "-"
// 1 == "LONG"
// 2 == "SHORT"
curPosition = 0

longCnt = 0
shortCnt = 0
noneCnt = 0

prevPosition = 0
for i = 1 to 5
    prevPosition := valuewhen(curPosition>0, curPosition, i)
    if (prevPosition == 1)
        longCnt := longCnt + 1
    if (prevPosition == 2)
        shortCnt := shortCnt + 1
    if na(prevPosition)
        noneCnt := noneCnt + 1

if (open>close)
    curPosition := 1
if (open<close)
    curPosition := 2
plotchar(longCnt, "LONG CNT", "", location=location.top)
plotchar(shortCnt, "SHORT CNT", "", location=location.top)
plotchar(noneCnt , "NONE CNT", "", location=location.top)

我找到了根本原因。别针脚本引擎工作异常

请参阅pine脚本文档,参见下面的说明

//@version=4
study("SMA in for loop")
sum = 0
for i = 1 to 2
    sum := sum + sma(close, i)
plot(sum)
虽然您可能期望总和将包含smaclose,1+smaclose,2,但事实并非如此。它将包含smaclose,1+smaclose,1,因为一旦sma用长度1初始化,该长度将被存储,直到脚本从图表中删除为止。为了避免这种情况,您可以使用自己的无状态函数实现。这是具有相同行为的内置函数列表: