你的问题在于你用了序列模式,应该要用逐K线模式你的思路才能得到正确执行。
HaClose:=(Open+High+Low+Close)/4;
haOpen:=OPEN;
Opentmp:=REF(haOpen,1)+REF(HaClose,1);
IF BARSTATUS=1 THEN
begin
haOpen:=OPEN;
end
ELSE
begin
haOpen:=Opentmp/2 ;
HaHigh:=Max(High,Max(haOpen,HaClose));
HaLow:=Min(Low,Min(haOpen,HaClose));
end
kline(haOpen,HaHigh,HaLow,HaClose,1);
上面是帮你改好的代码
建议你仔细看看
深度理解金字塔公式系统的工作机理
http://www.weistock.com/bbs/dispbbs.asp?boardid=10&Id=29594
里面有这2种运行模式的不同的描述
代码又重新改了一下
HaClose:=(Open+High+Low+Close)/4;
IF BARSTATUS=1 THEN
begin
haOpen:=OPEN;
end
ELSE
begin
haOpen:=(haOpen[barpos-1]+HaClose[barpos-1])/2 ;
HaHigh:=Max(High,Max(haOpen,HaClose));
HaLow:=Min(Low,Min(haOpen,HaClose));
end
kline(haOpen,HaHigh,HaLow,HaClose,1);
由于REF不能在逐K线模式在IF语句中,可以使用数组的方式解决,这样改的代码就根你之前的逻辑一样了
我这里可以通过的,你估计是把代码改了吧。
金字塔的数组是从1开始的,如果你在代码的第一跟K线上就运行到数组这一行语句是肯定要越界的