 
等级: 机构版
- 注册:
- 2021-5-20
- 曾用名:
- wjxkjs
|
saR的原逻辑是用某个K线的高点和低点的,因为存在长上影和长下影,我的想法是用周期滤波高低点,我让豆包写了一个,在金字塔里测试没有通过,看看怎么改??
//============================================// 重构SAR:修正单K毛刺极值,采用周期滤波高低点// 核心改动:EP不再使用原生H/L,使用平滑滚动高低,消除偶然影线干扰//============================================PARAMSStep:=0.02;MaxAF_Fixed:=0.2; //最大加速上限Filter_Length:=2; //高低点滤波周期,2~3效果较佳,越大越迟钝Vars SAR_Val:Numeric; EP:Numeric; AF:Numeric; LongFlag:Bool; //多头模式标记// 【关键:滤波修正高低点,过滤单根偶然毛刺】Filter_High:=HHV(H,Filter_Length);Filter_Low:=LLV(L,Filter_Length);If(BarPos=1) ThenBegin SAR_Val:=L[1]; EP:=Filter_High; AF:=Step; LongFlag:=True;EndElseBegin If(LongFlag) Begin SAR_Val:=SAR_Val + AF*(EP - SAR_Val); // 原逻辑:If(H>EP) → 修改为 滤波高点对比 If(Filter_High > EP) Then Begin EP:=Filter_High; AF:=AF + Step; End; AF:=MIN(AF,MaxAF_Fixed); //翻转判断仍使用原始高低(也可改为Filter_Low按需测试) If(SAR_Val > L) Then Begin LongFlag:=False; EP:=Filter_Low; AF:=Step; SAR_Val:=EP; End; End Else Begin SAR_Val:=SAR_Val + AF*(EP - SAR_Val); //空头极值采用滤波低点 If(Filter_Low < EP) Then Begin EP:=Filter_Low; AF:=AF + Step; End; AF:=MIN(AF,MaxAF_Fixed); If(SAR_Val < H) Then Begin LongFlag:=True; EP:=Filter_High; AF:=Step; SAR_Val:=EP; End; End;End;//交易信号LongSig:= LongFlag AND REF(LongFlag,1)=False;ShortSig:= NOT LongFlag AND REF(LongFlag,1)=True;//交易指令IF LongSig THENBEGIN SellShort(1,C); Buy(1,C);END;IF ShortSig THENBEGIN Sell(1,C); SellShort(1,C);END;//绘图#SAR_Val,COLORYELLOW,CIRCLE;DRAWICON(LongSig,L*0.97,1);DRAWICON(ShortSig,H*1.03,2);
|
|