交易视图 - 将脚本从 Pine v2 转换为 v4 时获得不同的图表



几天来我一直在努力理解这个事件的奥秘。我在 v2 中有一个脚本,我将其转换为 v4,以便成为 abel 以正确测试策略,但转换给了我不同的行和不同的结果。知道为什么吗?

V2 脚本:

//// Calculate EMA values
symbolHigh1 = security(tickerid, tfMA1, high)
symbolLow1  = security(tickerid, tfMA1, low)
symbolHigh2 = security(tickerid, tfMA2, high)
symbolLow2  = security(tickerid, tfMA2, low)
maFibs = exponential1 ? ema(security(tickerid, tfMA1,FValue), maLength1) : sma(security(tickerid, tfMA1,FValue), maLength1)
ma2 = exponential2 ? ema(security(tickerid, tfMA2,ma2src), maLength2) : sma(security(tickerid, tfMA2,ma2src), maLength2)

V4

//// Calculate EMA values
symbolHigh1 = security(syminfo.tickerid, tfMA1, high)
symbolLow1 = security(syminfo.tickerid, tfMA1, low)
symbolHigh2 = security(syminfo.tickerid, tfMA2, high)
symbolLow2 = security(syminfo.tickerid, tfMA2, low)
symbolClose2 = security(syminfo.tickerid, tfMA2, close)
security_1 = security(syminfo.tickerid, tfMA1, FValue)
ema_1 = ema(security_1, maLength1)
security_2 = security(syminfo.tickerid, tfMA1, FValue)
sma_1 = sma(security_2, maLength1)
maFibs = exponential1 ? ema_1 : sma_1
security_3 = security(syminfo.tickerid, tfMA2, ma2src)
ema_2 = ema(security_3, maLength2)
security_4 = security(syminfo.tickerid, tfMA2, ma2src)
sma_2 = sma(security_4, maLength2)
ma2 = exponential2 ? ema_2 : sma_2

这是因为 v2 和 v3 之间security()的工作方式发生了变化。它曾经在 v1 和 v2 中默认使用未来数据,但现在情况不再如此,因为它产生了不切实际的结果。有关详细信息,请参阅此处的 usrman。

虽然 v4 代码不会重现 v2 行为,但这是一件好事。

为了提高效率,您的代码应如下所示。它将使用较少的security()调用:

//@version=4
study("")
[symbolHigh1, symbolLow1] = security(syminfo.tickerid, tfMA1, [high, low])
[symbolHigh2, symbolLow2, symbolClose2] = security(syminfo.tickerid, tfMA2, [high, low, close])
ema_1S = ema(close, maLength1)
sma_1S = sma(close, maLength1)
[ema_1, sma_1] = security(syminfo.tickerid, tfMA1, [ema_1S, sma_1S])
maFibs = exponential1 ? ema_1 : sma_1

与此同时,我设法获得了与 v2(我最初的目标(相同的结果,通过为安全性添加lookahead=barmerge.lookahead_on((。

最新更新