Esempio n. 1
0
        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,
            });
        }
Esempio n. 2
0
        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,
            });
        }