IF THEN 语句的描述
例如:
input:atrn1(1,1,10),atrn2(5,2,20);
if atrn1<atrn2 and vol>20000 then
begin
TR1:= MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATRn_1:= MA(TR1,atrn1);
ATRn_2:= MA(TR1,atrn2);
end;
上述公式语句由于将REF和MA函数放在了IF语句之中,所以该公式无法正常编译。解决办法是将他们放到IF语句之外去执行:
input:atrn1(1,1,10),atrn2(5,2,20);
A1:=REF(CLOSE,1);
MA1:=MA(TR1,atrn1);
MA2:=MA(TR1,atrn2);
if atrn1<atrn2 and vol>20000 then
begin
TR1:= MAX(MAX((HIGH-LOW),ABS(A1-HIGH)),ABS(A1-LOW));
ATRn_1:= MA1;
ATRn_2:= MA2;
end;
这样经过修正的公式就可以正常编译了,此外公式还将两次REF语句引用合并到一个语句中,这样做还可以提高公式系统的运行效率,因为REF统计语句只执行了一次。
对于REF较为有效率的使用改进方案
金字塔提供了强大的数组功能,完成可以代替REF函数,使用数组代替REF不仅可以解决不能再IF THEN语句的限制,还可以提高运行效率,我们举例如下:
If Barpos-1 = N then
BEGIN
UpperMove := ref(High,1) ;
end
将REF修改为数组模式的代码为
If Barpos-1 = N then
BEGIN
UpperMove := High[Barpos-1] ; //取上一个K线高点
end