示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="orcParams"></param>
        /// <param name="tradeDate"></param>
        /// <returns></returns>
        public static WingCurvature[] UnpackWing(WingParamsRange orcParams, DateTime tradeDate)
        {
            var wc = new[] { new WingCurvature() };

            //set the curvature
            wc[0].EtoDate = tradeDate;
            wc[0][WingCurvature.WingCurvatureProperty.CurrentVolatility]    = orcParams.CurrentVolatility;
            wc[0][WingCurvature.WingCurvatureProperty.SlopeReference]       = orcParams.SlopeReference;
            wc[0][WingCurvature.WingCurvatureProperty.PutCurvature]         = orcParams.PutCurvature;
            wc[0][WingCurvature.WingCurvatureProperty.CallCurvature]        = orcParams.CallCurvature;
            wc[0][WingCurvature.WingCurvatureProperty.DownCutOff]           = orcParams.DownCutOff;
            wc[0][WingCurvature.WingCurvatureProperty.UpCutOff]             = orcParams.UpCutOff;
            wc[0][WingCurvature.WingCurvatureProperty.VolChangeRate]        = orcParams.VolChangeRate;
            wc[0][WingCurvature.WingCurvatureProperty.SlopeChangeRate]      = orcParams.SlopeChangeRate;
            wc[0][WingCurvature.WingCurvatureProperty.SkewSwimmingnessRate] = orcParams.SkewSwimmingnessRate;
            wc[0][WingCurvature.WingCurvatureProperty.DownSmoothingRange]   = orcParams.DownSmoothingRange;
            wc[0][WingCurvature.WingCurvatureProperty.UpSmoothingRange]     = orcParams.UpSmoothingRange;
            wc[0][WingCurvature.WingCurvatureProperty.ReferenceForward]     = orcParams.ReferenceForward;
            return(wc);
        }
示例#2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="underlying"></param>
        /// <param name="spot"></param>
        /// <param name="putStrike"></param>
        /// <param name="style"></param>
        /// <param name="tradeDate"></param>
        /// <param name="expiryDate"></param>
        /// <param name="zeroArray"></param>
        /// <param name="divArray"></param>
        /// <param name="orcParams"></param>
        /// <returns></returns>
        public static double CallCollarPricer(String underlying, double spot, double putStrike,
                                              string style, DateTime tradeDate, DateTime expiryDate, List <ZeroCurveRange> zeroArray,
                                              List <DividendRange> divArray, WingParamsRange orcParams)
        {
            // Skew;
            WingCurvature[] wingCurve = Wrapper.UnpackWing(orcParams, tradeDate);
            // Dividends;
            DividendList dList = Wrapper.UnpackDiv(divArray);
            // ZeroCurve;
            ZeroAUDCurve zeroCurve = Wrapper.UnpackZero(zeroArray, tradeDate);
            var          ist       = new Stock(underlying, underlying, dList, wingCurve);
            //test the price
            var col = new Collar();
            var tr  = new TransactionDetail(underlying)
            {
                CurrentSpot = spot
            };

            if (style == "A")
            {
                tr.PayStyle = PayStyleType.American;
            }
            else if (style == "E")
            {
                tr.PayStyle = PayStyleType.European;
            }
            else
            {
                tr.PayStyle = PayStyleType.NotSpecified;
            }
            tr.TradeDate    = tradeDate;
            tr.ExpiryDate   = expiryDate;
            ist.Transaction = tr;
            //test collar
            var testSt = new Strike(OptionType.Put, putStrike);

            ist.Transaction.SetStrike(testSt);
            double callStrike = col.FindZeroCostCallStrike(ist, zeroCurve);

            return(callStrike);
        }