首页 > 解决方案 > 如何将这个长赋值语句转换为 Amibroker 中的函数?

问题描述

我在 Amibroker 中有这个很长的赋值语句。

num_times_above = iif(Ref(CLOSE, -0)>Ref(CLOSE, -4) , 1, 0)
                    + iif(Ref(CLOSE, -1)>Ref(CLOSE, -4), 1, 0)
                    + iif(Ref(CLOSE, -2)>Ref(CLOSE, -4), 1, 0)
                    + iif(Ref(CLOSE, -3)>Ref(CLOSE, -4), 1, 0)
                    + iif(Ref(CLOSE, -4)>Ref(CLOSE, -4), 1, 0)
                    ;

我想把这个长语句转换成一个接受参数 n 的通用函数。

function get_num_times_above(n)
{
  //code
}

上面的代码适用于n == 4. 由于 Amibroker 中使用的数组格式,我陷入了这个看似简单的问题。

如果n == 3,则等效代码为;

num_times_above = iif(Ref(CLOSE, -0)>Ref(CLOSE, -3) , 1, 0)
                    + iif(Ref(CLOSE, -1)>Ref(CLOSE, -3), 1, 0)
                    + iif(Ref(CLOSE, -2)>Ref(CLOSE, -3), 1, 0)
                    + iif(Ref(CLOSE, -3)>Ref(CLOSE, -3), 1, 0)
                    ;

我正在使用 Amibroker ver6.28

标签: amibroker

解决方案


尝试这个。

function get_num_times_above(n)
{
    num_times_above = 0;
    refn = Ref(C, -n);
    for (i=0; i<n; i++) 
        num_times_above += Ref(C, -i)>refn;
    return num_times_above;
}   

归功于在这里提供答案的 fxshrat。

https://forum.amibroker.com/t/how-to-make-convert-this-long-assignment-statement-into-a-function/7181/2


推荐阅读