Thinkscript 有一个看似简单的函数来计算自适应 EMA。但是,它使用了 thinkscript 的内置 CompoundValue 函数,而 Pine Script 中没有。
我在 Pine Script 中重新创建 CompoundValue 函数时遇到问题。它应该是递归的,但我在另一个答案中看到它实际上是某种嵌套的 if 语句。
AdaptiveEMA 的 thinkscript 代码:
input price = close;
input length = 10;
input highLowLength = 10;
def multiplier1 = 2 / (length + 1);
def multiplier2 = AbsValue((close - Lowest(low, highLowLength)) - (Highest(high, highLowLength) - close)) / (Highest(high, highLowLength) - Lowest(low, highLowLength));
def alpha = multiplier1 * (1 + multiplier2);
def ma = CompoundValue(1, ma[1] + alpha * (price - ma[1]), Average(price, length));
plot AEMA = ma;
AEMA.SetDefaultColor(GetColor(1));
我试图使它成为一个函数,这样我就可以在一个图表上拥有两个 AdaptiveEMA,并像这样调用它们:
plot AEMAshort = adaptiveEMA(close, 25, 25);
plot AEMAlong = adaptiveEMA(close, 50, 50);
CompoundValue 让我失望的一件事是第一个参数是第一个参数。从thinkscript参考:
根据以下规则计算复合值:如果柱数大于长度,则返回可见数据值,否则返回历史数据值。此函数用于使用递归初始化研究。
如果 AdapativeEMA 脚本中 CompoundValue 中的第一个参数是 1,那么除了一天的第一分钟之外,barindex 是否几乎总是大于 1?
如何分解 Pine Script 中的 CompoundValue 函数并在此处使用它?任何帮助,将不胜感激。