public override IVolSurface RollSurface(DateTime newOrigin) { var newMaturities = Expiries.Where(x => x > newOrigin).ToArray(); var newVols = new double[newMaturities.Length][]; var newATMs = newMaturities.Select(m => GetForwardATMVol(newOrigin, m)).ToArray(); var newRRs = new double[newMaturities.Length][]; var newBFs = new double[newMaturities.Length][]; var numDropped = Expiries.Length - newMaturities.Length; var newFwds = Forwards.Skip(numDropped).ToArray(); var newLabels = PillarLabels.Skip(numDropped).ToArray(); for (var i = 0; i < newMaturities.Length; i++) { newRRs[i] = Riskies[i + numDropped]; newBFs[i] = Flies[i + numDropped]; } return(new RiskyFlySurface(newOrigin, newATMs, newMaturities, WingDeltas, newRRs, newBFs, newFwds, WingQuoteType, AtmVolType, StrikeInterpolatorType, TimeInterpolatorType, newLabels) { AssetId = AssetId, Currency = Currency, Name = Name, }); }
public override IVolSurface RollSurface(DateTime newOrigin) { //_suppressVarianceErrors = true; var newMaturities = Expiries.Where(x => x > newOrigin).ToArray(); var newVols = new double[newMaturities.Length][]; var newATMs = newMaturities.Select(m => GetForwardATMVol(newOrigin, m)).ToArray(); //var newATMs = new double[newMaturities.Length]; var newRRs = new double[newMaturities.Length][]; var newBFs = new double[newMaturities.Length][]; var numDropped = Expiries.Length - newMaturities.Length; var newFwds = Forwards.Skip(numDropped).ToArray(); var newLabels = PillarLabels.Skip(numDropped).ToArray(); for (var i = 0; i < newMaturities.Length; i++) { newRRs[i] = Riskies[i + numDropped]; newBFs[i] = Flies[i + numDropped]; //newATMs[i] = GetVolForDeltaStrike(0.5, newMaturities[i], newFwds[i]); } if (newATMs.Length == 0) { return new ConstantVolSurface(OriginDate, 0.32) { Name = Name, AssetId = AssetId, Currency = Currency, } } ; return(new RiskyFlySurface(newOrigin, newATMs, newMaturities, WingDeltas, newRRs, newBFs, newFwds, WingQuoteType, AtmVolType, StrikeInterpolatorType, TimeInterpolatorType, newLabels) { AssetId = AssetId, Currency = Currency, Name = Name, }); }