我在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
答案 0 :(得分:1)
尝试一下。
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,后者在此处提供了答案。