Pine script Tradingview-将脚本从Pine v2转换为v4时获取不同的图表

Pine script Tradingview-将脚本从Pine v2转换为v4时获取不同的图表,pine-script,Pine Script,几天来,我一直试图理解这件事的奥秘。我在v2中有一个脚本,我将其转换为v4,作为abel来正确测试策略,但是转换给了我不同的行和不同的结果。知道为什么吗 V2脚本: //// Calculate EMA values symbolHigh1 = security(tickerid, tfMA1, high) symbolLow1 = security(tickerid, tfMA1, low) symbolHigh2 = security(tickerid, tfMA2, high) sy

几天来,我一直试图理解这件事的奥秘。我在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中的未来数据,但现在情况不再如此,因为它产生了不切实际的结果

虽然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

与此同时,我通过添加
lookahead=barmerge.lookahead_on
获得了与v2相同的结果(我的初始目标)。非常感谢您的建议。同时,我通过在secuirty()上添加lookahead=bamerge.lookahead_,获得了与v2中相同的结果(我的初始目标)。是的,在v2中使用lookahead将产生与v2中相同的错误结果。这就是为什么在v3中更改了
lookahead=
的默认值的原因:您的计算将使用将来的数据,这些数据在历史条形图中不应可见,并且在实时条形图中运行时将无法再现该行为,因为没有将来的条形图可查看,使您的脚本无用,并且其计算具有误导性。看见