能不能把这个sar指标改一下?

这是很久以前论坛里某个网友写的,比较接近文华的sar,因为自己也比较习惯了文华的sar。 但这个指标有个问题,就是反转的第一根K线不显示sar值,导致取不了反转时的sar值,谁能帮改一下,或者另外写一个也行,出来效果跟这个一样就行了。 //代码如下 Params Numeric AfStep(2);//参数设为2比较接近文华 Numeric AfLimit(2); Numeric Length(20); Vars series<Numeric> Mysar; Series<Numeric> Mysar1; Series<Numeric> Mysar2; Series<Numeric> HH; Series<Numeric> LL; Series<Numeric> MaxH; Series<Numeric> MinL; Numeric Xp; Numeric Xk; Numeric J; Events onBar(ArrayRef<Integer> indexs) { HH = HighestFC(H,Length); LL = LowestFC(L,Length); If(CurrentBar< Length+1) { Mysar = 0.5*(L+H); Mysar1 = 0; Mysar2 = 88888; MaxH = HH; MinL = LL; }Else If(CurrentBar == Length+1) { If(H<MaxH) { MaxH = Max(HH,MaxH[1]); MinL = Min(LL,MinL[1]); Mysar = MaxH; Mysar1 = MaxH; Mysar2 = 88888; SetGlobalVar(0,CurrentBar); }Else { MaxH = Max(HH,MaxH[1]); MinL = Min(LL,MinL[1]); Mysar = MinL; Mysar1 = 0; Mysar2 = MinL; SetGlobalVar(0,CurrentBar); } }Else If(CurrentBar > Length+1) { J = CurrentBar - GetGlobalVar(0); If(J == 0) { If(Mysar1 > 0) { MaxH = Max(H,MaxH[1]); MinL = Min(L,MinL[1]); Mysar = MaxH; Mysar1 = MaxH; Mysar2 = 88888; }Else If(Mysar2<88888) { MaxH = Max(H,MaxH[1]); MinL = Min(L,MinL[1]); Mysar = MinL; Mysar1 = 0; Mysar2 = MinL; } }Else If( J>0 ) { If(H[1] <= Mysar1[1]) { Xp = L[1] - Mysar1[1]; If(J<11) { Mysar1 = Mysar1[1]+AfStep*j*XP/100; MaxH = Min(H,MaxH[1]); MinL = Min(L,MinL[1]); Mysar2 = 88888; If(H > Mysar1) { SetGlobalVar(0,CurrentBar); //满足条件的Bar索引号// MaxH = Max(H,MaxH[1]); MinL = Min(L,MinL[1]); Mysar1 = 0; Mysar2 = MinL; Return; } }Else { Mysar1 = Mysar1[1]+AfLimit*XP/10; MaxH = Min(H,MaxH[1]); MinL = Min(L,MinL[1]); Mysar2 = 88888; If(H > Mysar1) { SetGlobalVar(0,CurrentBar); //满足条件的Bar索引号// MaxH = Max(H,MaxH[1]); MinL = Min(L,MinL[1]); Mysar1 = 0; Mysar2 = MinL; Return; } } }Else If(Low[1] >= Mysar2[1]) { Xk =High[1] - Mysar2[1]; If(J<11) { Mysar2 = Mysar2[1]+AfStep*j*Xk/100; MaxH = Max(H,MaxH[1]); MinL = Max(L,MinL[1]); Mysar1 = 0; If(Low < Mysar2) { SetGlobalVar(0,CurrentBar); //满足条件的Bar索引号// MaxH = Max(H,MaxH[1]); MinL = Max(L,MinL[1]); Mysar1 = MaxH; Mysar2 = 88888; Return; } }Else { Mysar2 = Mysar2[1]+AfLimit*Xk/10; MinL = Max(L,MinL[1]); MaxH = Max(H,MaxH[1]); Mysar1 = 0; If(Low <= Mysar2) { SetGlobalVar(0,CurrentBar); //满足条件的Bar索引号// MaxH = Max(H,MaxH[1]); MinL = Max(L,MinL[1]); Mysar1 = MaxH; Mysar2 = 88888; Return; } } } If(Mysar1 > 0) { Mysar = Mysar1; }Else If(Mysar2<88888) { Mysar = Mysar2; } } } PlotNumeric( "1" , Mysar) ; }

参考内建函数ParabolicSAR是不是你想要的

回复:TB自带的那个不是我想要的

回复:我之前写过一个,麻烦你自己对比一下是不是一样? //------------------------------------------------------------------------ // 简称: SarWH // 名称: 抛物线转向指标_文华 // 类别: 公式应用 // 类型: 用户应用 // 输出: //------------------------------------------------------------------------ Params Numeric Length(4); Numeric AfStep( 0.02); Numeric AfLimit( 0.2 ) ; Vars Numeric SarValue; Begin SarValue = Abs(ParabolicWH(Length,AfStep,AfLimit)); PlotNumeric("SarWH",SarValue); End //------------------------------------------------------------------------ // 简称: ParabolicWH // 名称: // 类别: 用户函数 // 类型: 用户函数 // 输出: 数值型 //------------------------------------------------------------------------ Params Numeric Length(4); Numeric AfStep(0.02); Numeric AfLimit(0.2); Vars NumericSeries Af(0); NumericSeries Position(0); NumericSeries NextSar; NumericSeries CurSar; NumericSeries HHValue(0); NumericSeries LLValue(99999999); Begin If(CurrentBar < Length) { HHValue = Max(HHValue,H); LLValue = Min(LLValue,L); } Else { If(CurrentBar == Length) { If(C[1] > O[Length]) { Position = 1; CurSar = Min(LLValue[1],L); HHValue = H; } Else { Position = -1; CurSar = Max(HHValue[1],H); LLValue = L; } Af = AfStep; } Else If((Position[1] == 1 And L < NextSar[1]) Or (Position[1] == -1 And H > NextSar[1])) // 转向 { If(Position[1] == 1 And L < NextSar[1]) { Position = -1; CurSar = Max(H,HHValue[1]); LLValue = L; } If(Position[1] == -1 And H > NextSar[1]) { Position = 1; CurSar = Min(L,LLValue[1]); HHValue = H; } Af = AfStep; } Else // 无转向发生 { CurSar = NextSar[1]; HHValue = Max(H,HHValue[1]); LLValue = Min(L,LLValue[1]); Af = Min(Af + AfStep,AfLimit); } If(Position == 1) NextSar = CurSar + (H - CurSar) * Af; If(Position == -1) NextSar = CurSar - (CurSar - L) * Af; } If(Position == 1) Return CurSar; Else If(Position == -1) Return -1*CurSar; Else Return 0; End

回复:这个可以,太感谢了!

回复:这个可以,太感谢了

回复:大神,我在V6旗舰版里面,实际编译了一下,对于 If (Position == 1) Return CurSar; 这一行,系统报错:RETURN语句的返回值类型与公式定义的返回值类型不符。请教大神,怎么破:)