Example #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Strike"/> class.
 /// </summary>
 /// <param name="moneyness">The moneyness.</param>
 /// <param name="fwdPrice">The FWD price.</param>
 /// <param name="callPosition">The call position.</param>
 /// <param name="putPosition">The put position.</param>
 public Strike(Double moneyness, double fwdPrice, OptionPosition callPosition, OptionPosition putPosition)
 {
     VolatilityHasBeenSet = false;
     Volatility           = null;
     Moneyness            = 0;
     PriceUnits           = Units.Cents;
     InputValidator.NotZero("StrikePrice", moneyness, true);
     StrikePrice      = moneyness * fwdPrice;
     _strikePositions = new Pair <OptionPosition, OptionPosition>(callPosition, putPosition);
     //this.InterpModel = new SABRInterp();
     InterpModel = new WingInterp();
 }
Example #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Strike"/> class.
 /// </summary>
 /// <param name="strikePrice">The strike price.</param>
 /// <param name="callPosition">The call position.</param>
 /// <param name="putPosition">The put position.</param>
 /// <param name="units">The units.</param>
 public Strike(Double strikePrice, OptionPosition callPosition, OptionPosition putPosition, Units units)
 {
     VolatilityHasBeenSet = false;
     Volatility           = null;
     Moneyness            = 0;
     InputValidator.NotZero("StrikePrice", strikePrice, true);
     StrikePrice      = strikePrice;
     _strikePositions = new Pair <OptionPosition, OptionPosition>(callPosition, putPosition);
     // this.InterpModel = new SABRInterp();
     InterpModel = new WingInterp();
     PriceUnits  = units;
 }
Example #3
0
 /// <summary>
 /// Calibrates this instance.
 /// </summary>
 public void Calibrate()
 {
     SetInterpolatedCurve();
     foreach (ForwardExpiry fwdExp in NodalExpiries)
     {
         foreach (Strike strike in fwdExp.Strikes)
         {
             var wingModel = new WingInterp();
             InterpCurve.Forward = Convert.ToDouble(fwdExp.FwdPrice);
             InterpCurve.Spot    = Convert.ToDouble(SpotPrice);
             wingModel.Fit(this, strike.StrikePrice, fwdExp.ExpiryDate);
             strike.InterpModel = wingModel;
         }
     }
 }
Example #4
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);
        }