我在 2021 年 3 月 30 日对此进行测试,因此 OP 的原始问题可能已修复
首先,为了看看 ThinkOrSwim 对这段代码做了什么,我拿了第一个例子,把它放到了一个图表研究中。使用标签和图表气泡,我可以演示 thinkScript 处理每个条形时发生的情况。
# OP's example code
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;
# labels; do non-variable offset values show correct values based on code?
def numBars = HighestAll( BarNumber() );
AddLabel(yes, " numBars: " + numBars + " ", Color.CYAN);
def barNum = if BarNumber() == 0 then 0
else if BarNumber() == 1 then 1 else -6;
AddLabel(yes,
" Bar 1: " + "index[5]: " + index[5] + ", GetValue(index, 5): " + GetValue(index, 5) + " ",
Color.LIGHT_ORANGE );
AddLabel(yes,
" Bar 2: " + "index[4]: " + index[4] + ", GetValue(index, 4): " + GetValue(index, 4) + " ",
Color.LIGHT_ORANGE );
AddLabel(yes,
" Bar 3: " + "index[3]: " + index[3] + ", GetValue(index, 3): " + GetValue(index, 3) + " ",
Color.LIGHT_ORANGE );
AddLabel(yes,
" Bar 4: " + "index[2]: " + index[2] + ", GetValue(index, 2): " + GetValue(index, 2) + " ",
Color.LIGHT_ORANGE );
AddLabel(yes,
" Bar 5: " + "index[1]: " + index[1] + ", GetValue(index, 1): " + GetValue(index, 1) + " ",
Color.LIGHT_ORANGE );
AddLabel(yes,
" Bar 6: " + "index[0]: " + index[0] + ", GetValue(index, 0): " + GetValue(index, 0) + " ",
Color.LIGHT_ORANGE );
# chart bubbles; displaying variable values - are they what we expect?
AddChartBubble(yes, high,
"Bar Number: " + BarNumber() + "\nclose: " + close + "\nmyVar: " + myVar + "\nindex: " + index,
Color.YELLOW, if BarNumber() % 2 == 0 then no else yes);
# yes! the first entry of both variables actually remain the same
AddChartBubble(yes, low,
"BarNumber() -1 == " + (BarNumber() -1) + "\nGetValue(index, " + (BarNumber() -1) + ") == " + GetValue(index, BarNumber() -1) + "\nGetValue(myVar, " + (BarNumber() -1) + ") == " + GetValue(myVar, BarNumber() -1),
Color.YELLOW, if BarNumber() % 2 == 0 then yes else no);
我将图表设置为显示 6 个(每日)柱,因此结果很容易看到。
- 以下是 2021 年 3 月 19 日至 2021 年 3 月 26 日期间 TRCH 图表上的结果:
可以看到两者 index
的值和myVar
第一个柱的值确实保持了它们的值。在每个条的处理过程中,它们也确实发生了变化。
现在来测试扫描:扫描函数是一个过滤器,它返回任何满足编码条件的股票。对于扫描,我们可以创建一个显示指定值的列,而不是基于返回的结果数量进行测试。
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);
- 然后,我根据该研究创建了一个自定义列。当我添加指向自定义研究的绘图时,thinkScript 将拉入当前代码并设置列代码。在这种情况下,完成的列代码如下所示:
script SO_ScanProofOfConcept_Column {
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);
}
plot scan = SO_ScanProofOfConcept_Column().scan;
现在,我可以看到自定义列中的所有内容实际上都是 -1.0。浏览从左起第 4 列,从“Custom04-...”开始:
所以,至少在这个日期,扫描引擎会像我们预期的那样保留变量的值。数据数组中的数据似乎没有损坏。