//sar是个很有用的处理止损功能的函数,由于算法特殊,普通的软件的公式系统是无法进行描述的,这里我们将向大家展示金字塔PEL语言强大的算法描述功能,可以简单实现SAR算法功能。此外,用户可以通过该公式算法,加入自己的代码,进行特定的实盘操作。
INPUT:CYC(10,1,100,2);
RUNMODE:0; //使用逐周期运行模式
//保证variable声明的变量都尽量在公式的最前面,防止带有IF语句的分支执行影响变量的初始化
variable:Step = 2 / 100; //步长
variable:fMax = 20 / 100; //最大值
variable:sarx=0;
variable:T=0;
variable:EP=0;
variable:AF=0;
//计算高点低点的值放到IF前面,防止前面语句直接退出导致最前CYC个周期的数据无法统计到
highprice:=ref(hhv(high,cyc),1);
lowPrice:=ref(llv(low,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
//看跌
T:= -1;
sarx:=highprice;
end
else
begin
//看涨
T:= 1;
sarx:=lowPrice;
end
GOTO ENDANDSHOW;//跳转到末尾直接显示
End
//判断出这些日子数据的上涨,或者下跌
if T > 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
T:=-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
T := 1;
EP := 1;
AF := Step;
end
sarx := fSar;
end
//显示变量
ENDANDSHOW@; //此为语句标号,GOGO语句可以用这个标号直接跳转到这里
ShowSar:sarx;
谢谢老师!
sar随着C上升而上升即为上升;SAR随着C下降而下降为下降。主要是,我看不懂你们技术指标公式中定义的上升和下降过程,就是找不到这块,写不出来。麻烦老师指导一下,谢谢
c>ref(c,1) and sar>ref(sar,1) ;//c 和sar都上升
你一楼给的是通过编程实现sar函数。我们不建议用户在策略中使用goto 这类跳转语句。
你的需求如下
mysar:SAR(10,2,20);
if mysar>ref(mysar,1) and CROSS(mysar,c) then begin
sell();
BUYSHORT()
end
if mysar<ref(mysar,1) and CROSS(c,mysar) then begin
sellshort();
BUY()
end
又如:SAR(10,2,20)表示计算10日抛物转向,步长为2%,极限值为20%
20%该如何理解?
SAR函数不就是现成的吗。
你一楼的公式实现的功能等价于SAR函数。
至于极限值参数的作用意义,你可以询问下做交易的人。