[PEL] 复制代码 input:cyc(10,1,100,2);
runmode:0; //使用逐周期运行模式
//保证variable声明的变量都尽量在公式的最前面,防止带有if语句的分支执行影响变量的初始化
variable:step = 2 / 100; //步长
variable:fmax = 20 / 100; //最大值
variable:sarx=0;
variable:trendx=0;
variable:ep=0;
variable:af=0;
//计算高点低点的值放到if前面,防止前面语句直接退出导致最前cyc个周期的数据无法统计到
highprice:=ref(hhv(c,cyc),1);
lowprice:=ref(llv(c,cyc),1);
原始sar:sar(10,2,20);
if barpos <= cyc then
exit;//不到cyc的统计周期,直接退出等待下个周期再做判断
if barpos = cyc+1 then
begin
af:=step;
ep:=-1;
if (high[barpos]-high[barpos-1])+(low[barpos]-low[barpos-1]) > 0 then
begin
//看跌
trendx:= -1;
sarx:=highprice;
end
else
begin
//看涨
trendx:= 1;
sarx:=lowprice;
end
goto endandshow;//跳转到末尾直接显示
end
//判断出这些日子数据的上涨,或者下跌
if trendx > 0 then
begin
//是否为跳转标志
if ep > 0 then
begin
sarx:=lowprice;
ep:=-1;
goto endandshow;//跳转到末尾直接显示
end
//如果今日最高价大于前n的最高价,加速因子需要增加
if high > highprice then
begin
af := af+step;
if af > fmax then
af := fmax;
end
fsar := sarx + af * (highprice - sarx);
//是否跳转
if fsar > low then
begin
trendx:=-1;
ep:=1;
af:=step;
end
sarx:=fsar;
end
else
begin
if ep > 0 then
begin
sarx:=highprice;
ep:=-1;
goto endandshow; //跳转到末尾直接显示
end
//看跌
if low < lowprice then
begin
af := af + step;
if af > fmax then
af := fmax;
end
fsar := sarx + af * (lowprice-sarx);
//是否跳转
if fsar < high then
begin
trendx := 1;
ep := 1;
af := step;
end
sarx := fsar;
end
//显示变量
endandshow@; //此为语句标号,gogo语句可以用这个标号直接跳转到这里
showsar:sarx;
|