0

这是我的代码:

def TrueRange = ATR(14)[1];

在每个新烛台上,thinkorswim 都会生成一个新的 ATR 值,TrueRange 会使用前一个烛台的 ATR 值进行填充。

我正在寻找一种方法来将图表上第一个烛台的 ATR 值保持在 TrueRange 内,而不会随着每个新烛台的变化而变化。

谁能帮我?

4

1 回答 1

0

您可以使用递归变量:

def TrueRange;
if BarNumber() == 1 {
    TrueRange = ATR(14)[1];
} else {
    TrueRange = TrueRange[1];
}
  • 第一行声明了变量。
  • 如果您在第一个栏,请将变量设置为该栏的值。
  • 否则,将变量保持为之前的值。

编辑:您也可以在一行中执行此操作:

def TrueRange = ( if BarNumber() == 1 then ATR(14)[1] else TrueRange[1] );

编辑 2:如果您使用多个偏移/长度值,thinkScript 将覆盖变量和绘图上的长度/偏移值,以使用脚本中存在的最大值,而不是指定的值。在这种情况下,您需要使用 CompoundValue 来强制脚本使用正确的偏移量。

def TrueRange = CompoundValue(length=1, "visible data"=if BarNumber() == 1 then ATR(14)[1] else TrueRange[1], "historical data"=Double.NaN);

参考我在理解和转换 ThinkScripts CompoundValue 函数 中的 CompoundValue 讨论

于 2021-03-22T21:12:53.350 回答