不适用于迭代器变量的TradingView Pinescript值(i)

时间:2020-05-25 18:55:27

标签: pine-script

我想获得价值时最新的五个位置。但这不起作用。 我认为为i迭代器调用valuewhen(curPosition> 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)

1 个答案:

答案 0 :(得分:1)

我找到了原因的根源。 Pins脚本引擎的工作方式很奇怪。

请参阅pine脚本文档,请参见下面的描述。

//@version=4
study("SMA in for loop")
sum = 0
for i = 1 to 2
    sum := sum + sma(close, i)
plot(sum)

虽然您可能希望总和包含sma(close,1)+ sma(close,2),但事实并非如此。它将包含sma(close,1)+ sma(close,1),因为一旦将sma初始化为长度1,就会存储该长度,直到从图表中删除脚本为止。为避免这种情况,您可以使用自己的无状态函数实现。这是具有相同行为的内置函数的列表: