【发布时间】:2020-04-16 19:30:59
【问题描述】:
//@version=4
study("Keep data across bars (var)", overlay=true)
// Variables
var bool canGoShort = true
var bool canGoLong = true
var int myTest = 5
// Functions
f_print(_txt) => t = time + (time - time[1]) * 3, var _lbl = label.new(t, high, _txt, xloc.bar_time, yloc.price, #00000000, label.style_none, color.gray, size.large), label.set_xy(_lbl, t, high + 3 * tr)
// MAIN
if canGoShort
myTest := myTest + 1
if canGoLong
myTest := myTest + 1
f_print("myTest=" + tostring(myTest))
我对这个似乎无法按预期工作的简单脚本感到困惑。
我用值 5 初始化了一个 var 变量 myTest。
由于canGoShort 和canGoLong 总是true,我希望myTest 的值在每个柱上增加1,两次:
一次在if canGoShort,一次在if canGoLong。
假设我们有 5000 个柱,那么我希望它以 5 + (5000 * 2) = 10005 结束。
但是,在运行脚本时,会打印myTest=7?
我的印象是声明 var int myTest = 5 在每个柱上执行。
据我了解,使用关键字var 定义的变量在所有条形图中都保持其值,但似乎并非如此。
文档清楚地表明它应该保持它的价值:
-
https://www.tradingview.com/pine-script-reference/#op_var
var 是用于变量赋值和一次性初始化的关键字。 -
https://www.pinecoders.com/faq_and_code/#techniques
从 v4 开始,var 关键字提供了一种仅在数据集的第一个柱上初始化变量的方法,而不是像以前那样在运行脚本的每个柱上初始化变量。这个很有用 自动处理值传播的好处 整个酒吧
我在这里错过了什么?
【问题讨论】:
标签: pine-script