protected override decimal ComputeNextValue(TradeBar input) { decimal N = _period; CcOc.Update(input); OcCp.Update(input); OHL.Update(input); MuOpen.Update(input.Time, OcCp.Current.Value); MuClose.Update(input.Time, CcOc.Current.Value); var delta_sq = Math.Pow((double)(OcCp.Current.Value - MuOpen.Current.Value), 2); OpenVol.Update(input.Time, (decimal)delta_sq); var SigmaOpen = OpenVol.Current.Value * (1 / (N - 1)); var delta_sq2 = Math.Pow((double)(CcOc.Current.Value - MuClose.Current.Value), 2); CloseVol.Update(input.Time, (decimal)delta_sq2); var SigmaClose = CloseVol.Current.Value * (1 / (N - 1)); RSVol.Update(input.Time, OHL.Current.Value); var SigmaRS = RSVol.Current.Value * (1 / (N - 1)); var sum = SigmaOpen + 0.16433333m * SigmaClose + 0.83566667m * SigmaRS; var res = (decimal)(Math.Sqrt((double)sum) * Math.Sqrt(252d)); return(res); }
public override void Reset() { MuClose.Reset(); MuOpen.Reset(); OHL.Reset(); OcCp.Reset(); CcOc.Reset(); OpenVol.Reset(); CloseVol.Reset(); RSVol.Reset(); base.Reset(); }