Esempio n. 1
0
        /// <summary>
        /// Values at, overriding calibrated Wing Model with supplied parms
        /// </summary>
        /// <param name="stock"></param>
        /// <param name="expiry">The expiry.</param>
        /// <param name="strikes">The strikes.</param>
        /// <param name="parms">The parms.</param>
        /// <param name="oride"></param>
        /// <param name="cache">if set to <c>true</c> [cache].</param>
        /// <returns></returns>
        public ForwardExpiry ValueAt(Stock stock, DateTime expiry, List <Double> strikes, OrcWingParameters parms, bool oride, bool cache)
        {
            var fwdExpiry = new ForwardExpiry {
                ExpiryDate = expiry
            };
            double forward = stock.GetForward(stock.Date, expiry);

            fwdExpiry.FwdPrice = Convert.ToDecimal(forward);
            foreach (double strike in strikes)
            {
                double           val = OrcWingVol.Value(strike, parms);
                IVolatilityPoint vp  = new VolatilityPoint();
                vp.SetVolatility(Convert.ToDecimal(val), VolatilityState.Default());
                bool   node = VolatilitySurfaceHelper.IsMatch(strike, expiry, NodalExpiries);
                Strike newstrike;
                if (node & oride)
                {
                    newstrike = VolatilitySurfaceHelper.GetStrike(strike, expiry, NodalExpiries);
                    //new data points, derefernce fitting model
                    newstrike.InterpModel = null;
                }
                else
                {
                    //var wingModel = new WingInterp {WingParams = parms};
                    newstrike = new Strike {
                        StrikePrice = strike, InterpModel = null
                    };
                    //newstrike.InterpModel = wingModel;
                    fwdExpiry.AddStrike(newstrike, node);
                }
                newstrike.SetVolatility(vp);
            }
            return(fwdExpiry);
        }
        private static object[,] DisplayVolatilitySurface2(Pair <PricingStructure, PricingStructureValuation> fpMLPair)
        {
            var points = ((VolatilityMatrix)fpMLPair.Second).dataPoints.point;
            var matrixAsTwoDimArray = VolatilitySurfaceHelper.GetExpirationByStikeVolatilityMatrixWithDimensions(points);

            return(matrixAsTwoDimArray);
        }
Esempio n. 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="expirationAsDate"></param>
        /// <param name="strike"></param>
        /// <returns></returns>
        public double GetValueByExpirationAndStrike(DateTime expirationAsDate, double strike)
        {
            var    dataPoints = GetDataPoints();
            var    baseDate   = PricingStructureValuation.baseDate.Value;
            double dimension1 = (expirationAsDate - baseDate).TotalDays / 365.0;

            return(VolatilitySurfaceHelper.GetValue(dataPoints, dimension1, strike));
        }
Esempio n. 4
0
        public void LoadInterestRateVolCurveTest()
        {
            CreateATMRateVolCurve("AUD", "3M", IrVolInstruments, IrVolValues, IrStrikes);
            var curve = (CapVolatilityCurve)CurveEngine.LoadVolatilityCurve(Market, "AUD", "3M", null);

            Assert.IsNotNull(curve);
            // 3M does exist
            Assert.AreEqual("3M", curve.GetPricingStructureId().Properties.GetString("IndexTenor", true));
            //var baseDate = curve.GetBaseDate();
            var expiration = VolatilitySurfaceHelper.GetDimensionValues(curve.GetVolatilityMatrix().dataPoints?.point,
                                                                        CubeDimension.Expiration);
            var volatilities = VolatilitySurfaceHelper.GetDimensionValues(curve.GetVolatilityMatrix().dataPoints?.point,
                                                                          CubeDimension.Volatility);
            var valArray = new List <Decimal>();

            foreach (var vol in volatilities)
            {
                valArray.Add((decimal)vol);
            }
            var expiryArray = new List <TimeDimension>();

            //var valArray = new List<Decimal>();
            //Debug.Print(baseDate.ToString(CultureInfo.InvariantCulture));
            foreach (var expiry in expiration)
            {
                //Temporary
                if (expiry is TimeDimension timeDimension)
                {
                    expiryArray.Add(timeDimension);
                }
                //var date = expiry as DateTime? ?? baseDate.AddDays(1);
                //expiryArray.Add(date);
                //Debug.Print(expiry.ToString());
            }
            var termPoints = TermPointsFactory.Create(expiryArray, valArray);
            var termCurve  = new TermCurve {
                point = termPoints
            };
            var output = XmlSerializerHelper.SerializeToString(termCurve);

            Debug.Print(output);
        }
Esempio n. 5
0
        /// <summary>
        /// Values at.
        /// </summary>
        /// <param name="stock"></param>
        /// <param name="expiries">The expiries.</param>
        /// <param name="strikes">The strikes.</param>
        /// <param name="?">Cache to vol object</param>
        /// <param name="cache"></param>
        /// <returns></returns>
        public List <ForwardExpiry> ValueAt(Stock stock, List <DateTime> expiries, List <Double> strikes, bool cache)
        {
            var forwardExpiries = new List <ForwardExpiry>();

            foreach (DateTime exp in expiries)
            {
                var fwdExpiry = new ForwardExpiry();
                foreach (double str in strikes)
                {
                    var    wingModel = new WingInterp();
                    double forward   = stock.GetForward(stock.Date, exp.Date);
                    double spot      = Convert.ToDouble(stock.Spot);
                    fwdExpiry.FwdPrice = Convert.ToDecimal(forward);
                    double y     = str;
                    double x     = (exp.Subtract(Date)).Days / 365.0;
                    IPoint point = new Point2D(x, y);
                    InterpCurve.Forward = forward;
                    InterpCurve.Spot    = spot;
                    var val             = InterpCurve.Value(point);
                    IVolatilityPoint vp = new VolatilityPoint();
                    vp.SetVolatility(Convert.ToDecimal(val), VolatilityState.Default());
                    fwdExpiry.ExpiryDate = exp;
                    bool node = VolatilitySurfaceHelper.IsMatch(str, exp, NodalExpiries);
                    // copy model used to return ForwardExpiry object
                    var newstrike = new Strike {
                        StrikePrice = str
                    };
                    var wing = (WingModelInterpolation)InterpCurve.GetYAxisInterpolatingFunction();
                    //SABRModelInterpolation wing = (SABRModelInterpolation)_interpCurve.GetYAxisInterpolatingFunction();
                    wingModel.WingParams  = wing.WingParameters;
                    newstrike.InterpModel = wingModel;
                    fwdExpiry.AddStrike(newstrike, node);

                    newstrike.SetVolatility(vp);
                }
                forwardExpiries.Add(fwdExpiry);
            }
            return(forwardExpiries);
        }
Esempio n. 6
0
        ///<summary>
        ///</summary>
        ///<param name="dimension1"></param>
        ///<param name="dimension2"></param>
        ///<returns></returns>
        ///<exception cref="NotImplementedException"></exception>
        public double GetValue(double dimension1, double dimension2)
        {
            var dataPoints = GetDataPoints();

            return(VolatilitySurfaceHelper.GetValue(dataPoints, dimension1, dimension2));
        }