变量不会在每次滴答时更新

Variable not updated on each tick

我正在尝试创建一个简单的脚本,它只计算报价并画一条线来跟踪每个柱上的报价。我是一名开发人员,熟悉代码,所以我尝试了很多不同的方法来实现这一点,包括使用全局变量、局部变量、数组,甚至使用 strategy(calc_on_every_tick=true) 而不是 study() 来尝试欺骗系统...没有任何效果。

这是我做过的最简单的尝试,我是 PineScript 初学者,我希望它能工作但没有:

//@version=4

study(
     title="Tick Count",
     overlay=false,
     precision=0)

//
// Global variables
//

var int lastTickTime = na
var int tickCount = 0

//
// Processing
//

if (barstate.isrealtime)
    lastTickTime := timenow
    tickCount := tickCount + 1

//
// Plots
//

plot(tickCount)
plot(lastTickTime)

lastTickTime 实时正确更新,这意味着脚本在每个 tick 上按预期输入 if。然而,它并没有像预期的那样在每个价格变动上更新 tickCount,而是只在每个柱的第一个价格变动上更新。

为什么 PineScript 更新一个值而不更新另一个值?如果可能的话,我如何强制它在每个刻度上更新和重新绘制 tickCount?如果不可能,为什么?有什么解决方法吗?

原因是 Pine Script 在实时柱上的表现与在历史柱上的表现不同。
由于实时柱上发生的回滚过程,您看不到分时增量。
对于实时柱中的每个报价变动,用户变量都会回滚到它们在该实时柱打开时的状态。

这就是为什么您经常看到 tickCount 的值 1
它的初始状态是 0 并且 1 在每个滴答时添加到 0

您看到 lastTickTime 具有正确值的原因是,尽管它在每个刻度上都被重置为 na 的初始状态,但它也被分配了值 timenow 在每次滴答时,始终是当前时间。

有关回滚过程的说明,请参阅 Execution Model - Calculation based on realtime bars

摘自link:

实时柱线流程总结:

  • 脚本在实时柱开盘时执行,然后每 更新。
  • 在每次实时更新之前回滚变量。
  • 变量在收盘柱更新时提交一次。