/// <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); }
/// <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); }