在 thinkscript 图表和扫描中,任何脚本都会针对每个柱执行多次。此类执行之间的程序状态存储在数组变量中,这些变量可以直接访问或通过[]或通过偏移量访问GetValue()。许多涉及某种模式识别的脚本需要通过为这些变量分配初始值来在第一个柱处初始化这些变量。在后续柱上执行时,脚本会复制先前的值或创建新值。然后,根据某些其他条件,脚本可能会检查当前数组条目是否仍等于第一个数组条目,以发现数据中是否发生了有趣的事情。
以下测试脚本遵循这个简单的模式。它的唯一目的是使用扫描器来验证单个变量的第一个条目是否保留其值。
扫描在最后一个柱处执行单个绘图语句。该脚本的唯一标准是被测试的变量保持其值并且不会被其他东西改变。在 thinkscript 中更改变量或变量数组条目是非法的,不应该发生。但是,此脚本显示变量的第一个条目被覆盖。这是如何发生的以及如何避免这种情况?
def index;
def myVar;
if (BarNumber() == 1) {
index = -1;
myVar = close;
} else {
if (close > myVar[1]) {
myVar = close;
index = index[1];
} else {
if (close <= myVar[1]) {
index = 1;
} else {
index = index[1];
}
myVar = myVar[1];
}
}
plot scan = GetValue(index, BarNumber() -1) == -1;
Run Code Online (Sandbox Code Playgroud) thinkscript ×1