【问题标题】:How to address a thinkScript IDataHolder array in a scan如何在扫描中处理 thinkScript IDataHolder 数组
【发布时间】:2019-04-20 22:03:15
【问题描述】:

由于变量无法修改,计数器等由 IDataHolder 数组实现,其中计数器通过将一个值与前一个值相加来获取值,然后将其存储在当前位置,然后再前进到下一个位置。这种机制在以下扫描脚本中部分中断,读取变量似乎会更改其值,我想了解原因:

# Sum Test

# Build sum starting at the left end
def sum;
if (BarNumber() < 5) {
    if (BarNumber() == 1) {
        sum = 1;
    } else {
        sum = sum[1] + 1;
    }
} else {
    sum = sum[1]; # This causes the problem.
    #sum = Double.NaN;# alternative: does not change previous value but useless.
}

# Test that the first sum entry is 1 as expected
plot scan = GetValue(sum, BarNumber() -1) == 1;

【问题讨论】:

    标签: thinkscript


    【解决方案1】:

    这是一个错误,是当前 thinkScript 版本中的一个缺陷。 Referencing Historical Data,即读取它会覆盖问题中描述的常见情况下的历史数据,导致数据损坏,数据丢失。值得注意的是,在强大但有限的 thinkScript 系统中,可以使用问题中的简单语句来检查包含历史数据的 IDataHolder 数组var 中具有固定偏移量的单元格:

    input offset = 0;
    plot scan = GetValue(var, BarNumber() -1 + offset);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2022-01-09
      • 1970-01-01
      相关资源
      最近更新 更多