【问题标题】:Convert thinkscript's AdaptiveEMA to pine script将 thinkscript 的 AdaptiveEMA 转换为 pine 脚本
【发布时间】:2021-12-29 18:51:55
【问题描述】:

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 参考:

根据以下规则计算复合值:如果是条形 number 大于 length 则返回可见数据值, 否则返回历史数据值。使用此功能 用递归初始化研究。

如果 AdapativeEMA 脚本中 CompoundValue 中的第一个参数是 1,那么除了一天的第一分钟之外,barindex 是不是几乎总是大于 1?

如何分解 Pine Script 中的 CompoundValue 函数并在此处使用它? 任何帮助将不胜感激。

【问题讨论】:

    标签: pine-script thinkscript


    【解决方案1】:
    //@version=5
    indicator("adaptive ema", overlay = true)
    
    price1 = input.source(close, title = "price 1")
    price2 = input.source(close, title = "price 2")
    
    length1 = input.int(10, title = "length 1")
    highLowLength1 = input.int(10, title = "highlow length 1")
    
    length2 = input.int(20, title = "length 2")
    highLowLength2 = input.int(20, title = "highlow length 2")
    
        
    f_adaptiveEMA(_price, _length, _highLowLength) =>
        _multiplier1 = 2 / (_length + 1)
        _multiplier2 = math.abs((_price - ta.lowest(low, _highLowLength)) - (ta.highest(high, _highLowLength) - _price)) / (ta.highest(high, _highLowLength) - ta.lowest(low, _highLowLength))
        _alpha = _multiplier1 * (1 + _multiplier2)
        float _ma = na
        _ma := _price * _alpha + (1 - _alpha) * nz(_ma[1], _price)
        _ma
        
        
    ma1 = f_adaptiveEMA(price1, length1, highLowLength1)
    ma2 = f_adaptiveEMA(price2, length2, highLowLength2)    
    
    plot(ma1, color = color.yellow)
    plot(ma2, color = color.red)
    

    【讨论】:

    • 做到了。非常感谢。我让它变得比它需要的更难。
    猜你喜欢
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2022-10-15
    相关资源
    最近更新 更多