Example #1
0
        public void DoubleBarrierOptionTest()
        {
            //var nsimu = new[] {1000, 10000, 20000, 100000, 500000};
            var nsimu      = new[] { 100, 200, 300 };
            var mcTrials   = 6;
            var mc         = new[] { true, false };
            var marketInfo = TestMarket();

            MarketFunctions.BuildMarket(marketInfo, out QdpMarket market);

            Console.WriteLine("NSimulation,TrialNum,PV,Delta,Gamma,Vega,Rho,Theta");
            for (var k = 0; k < nsimu.Length; k++)
            {
                for (var i = 0; i < mc.Length; ++i)
                {
                    var trial = mc[i] ? mcTrials : 1;
                    for (var j = 0; j < trial; j++)
                    {
                        var barrierOptionInfo = new BarrierOptionInfo
                                                    ("", strike: 1.05,
                                                    underlyingTicker: "", underlyingInstrumentType: "EquityIndex",
                                                    valuationParameter: new OptionValuationParameters("Fr007", "Dividend", "VolSurf", "000300.SH"),
                                                    startDate: "2016-12-13",
                                                    exerciseDates: "2017-12-13",
                                                    optionType: "Call",
                                                    exercise: "European",
                                                    calendar: "chn",
                                                    dayCount: "Act365",
                                                    notional: 1000000,
                                                    monteCarlo: mc[i],
                                                    parallelDegree: 1,
                                                    nsimulations: nsimu[k]
                                                    )
                        {
                            BarrierType       = "DoubleTouchOut",
                            Barrier           = 0.75,                   //80% of S0//1e-6
                            UpperBarrier      = 1.25,                   //120% of S0 //1e6
                            Coupon            = 0.01,
                            ParticipationRate = 1.0,
                            Rebate            = 0.02,
                            Fixings           = "2016-12-12,0.995;2016-12-13,1.0",
                            UseFourier        = true,
                        };

                        var barrierOptionVf = new BarrierOptionVf(barrierOptionInfo);
                        var result          = barrierOptionVf.ValueTrade(market, PricingRequest.All);
                        Console.WriteLine("{0},{1},{2},{3},{4},{5},{6},{7}", nsimu[k], mc[i] ? "MonteCarlo" : "Analytical", result.Pv, result.Delta, result.Gamma, result.Vega, result.Rho, result.Theta);
                    }
                }
            }
        }
Example #2
0
        public static IValuationFunction ToVf(TradeInfoBase tradeInfo)
        {
            IValuationFunction vf;

            // sean todo // tradeInfo.GetValuationFunction
            if (tradeInfo is BondInfoBase)
            {
                vf = new BondVf((BondInfoBase)tradeInfo);
            }
            else if (tradeInfo is VanillaOptionInfo)
            {
                vf = new VanillaOptionVf((VanillaOptionInfo)tradeInfo);
            }
            else if (tradeInfo is BarrierOptionInfo)
            {
                vf = new BarrierOptionVf((BarrierOptionInfo)tradeInfo);
            }
            else if (tradeInfo is BinaryOptionInfo)
            {
                vf = new BinaryOptionVf((BinaryOptionInfo)tradeInfo);
            }
            else if (tradeInfo is AsianOptionInfo)
            {
                vf = new AsianOptionVf((AsianOptionInfo)tradeInfo);
            }
            else if (tradeInfo is RainbowOptionInfo)
            {
                vf = new RainbowOptionVf((RainbowOptionInfo)tradeInfo);
            }
            else if (tradeInfo is SpreadOptionInfo)
            {
                vf = new SpreadOptionVf((SpreadOptionInfo)tradeInfo);
            }
            else if (tradeInfo is InterestRateSwapInfo)
            {
                vf = new InterestRateSwapVf((InterestRateSwapInfo)tradeInfo);
            }
            else if (tradeInfo is FixedLegInfo)
            {
                vf = new FixedLegVf((FixedLegInfo)tradeInfo);
            }
            else if (tradeInfo is FloatingLegInfo)
            {
                vf = new FloatingLegVf((FloatingLegInfo)tradeInfo);
            }
            else if (tradeInfo is BondFuturesInfo)
            {
                vf = new BondFuturesVf((BondFuturesInfo)tradeInfo);
            }
            else if (tradeInfo is LoanInfo)
            {
                vf = new LoanVf((LoanInfo)tradeInfo);
            }
            else if (tradeInfo is HoldingPeriodInfo)
            {
                vf = new HoldingPeriodVf((HoldingPeriodInfo)tradeInfo);
            }
            else if (tradeInfo is AbsWithRepurchaseInfo)
            {
                vf = new AbsWithRepurchaseVf((AbsWithRepurchaseInfo)tradeInfo);
            }
            else if (tradeInfo is ConvertibleBondInfo)
            {
                vf = new ConvertibleBondVf((ConvertibleBondInfo)tradeInfo);
            }
            else
            {
                throw new PricingLibraryException("Unknowy trade info type");
            }

            return(vf);
        }