示例#1
0
        private void visualizerButton_Click(object sender, RoutedEventArgs e)
        {
            YieldCurve yc = ((PricingRequestWithResult)requestsListBox.SelectedItem).Request.Ycs.get();

            DiscountCurve dc = (DiscountCurve)yc;
            //IProcess hwp = new HullWhiteCalibrator().Calibrate(dc);
            IProcess rsp = RSCalibrator.Calibrate(dc);
            //var visualizerWindow1 = new ProcessVisualizer(yc, hwp);
            var visualizerWindow2 = new ProcessVisualizer(yc, rsp);

            visualizerWindow2.Show();
        }
        private void generatePlot()
        {
            dc      = (DiscountCurve)QuandlDataProvider.Instance.GetYieldCurve();
            process = RSCalibrator.Calibrate(dc);

            //ZBP1/////////////////////////////////////////////////////////
            Bond b = new Bond()
            {
                FaceValue = 1, Maturity = 1, Rate = 0.0, Coupon = CouponPaymentType.None
            };

            double[] bondPrices1 = BondPrices(b);

            var bond1 = AvgConvergencePlot(bondPrices1);

            double b1base    = dc[1.0];
            var    bond1base = new List <DataPoint>();

            bond1base.Add(new DataPoint(1, b1base));
            bond1base.Add(new DataPoint(n, b1base));

            var bond1error = bond1.Select(p => new DataPoint(p.X, Math.Abs(p.Y - b1base) / b1base * 100)).ToList();
            /////////////////////////////////////////////////////////////

            //ZBP10/////////////////////////////////////////////////////////
            Bond b2 = new Bond()
            {
                FaceValue = 1, Maturity = 10, Rate = 0.0, Coupon = CouponPaymentType.None
            };

            double[] bondPrices2 = BondPrices(b2);

            var bond2 = AvgConvergencePlot(bondPrices2);

            double b2base    = dc[10.0];
            var    bond2base = new List <DataPoint>();

            bond2base.Add(new DataPoint(1, b2base));
            bond2base.Add(new DataPoint(n, b2base));

            var bond2error = bond2.Select(p => new DataPoint(p.X, Math.Abs(p.Y - b2base) / b2base * 100)).ToList();
            /////////////////////////////////////////////////////////////


            Bond b3 = new Bond()
            {
                FaceValue = 1, Maturity = 5, Rate = 0.02, Coupon = CouponPaymentType.Annual
            };
            var bond = AvgConvergencePlot(BondPrices(b3));

            BondOption bo = new BondOption()
            {
                ExecutionTime = 3, StrikePrice = 0.8, Type = BondOption.OptionType.Call, UnderlyingBond = b3
            };
            var bondoption = AvgConvergencePlot(BondOptionPrices(bo));

            Swap sw = new Swap()
            {
                FaceValue = 1, Maturity = 5, Rate = 0.02, Coupon = CouponPaymentType.Annual, Type = Swap.SwapType.Receiver
            };
            var swap = AvgConvergencePlot(SwapPrices(sw));

            Swaption swo = new Swaption()
            {
                ExecutionTime = 3, UnderlyingSwap = sw
            };
            var swaption = AvgConvergencePlot(SwaptionPrices(swo));

            /////////////////////////////////////////////////////////////////

            Bond b4 = new Bond()
            {
                FaceValue = 1, Maturity = 5, Rate = 0.002, Coupon = CouponPaymentType.Annual
            };
            BondOption bo2 = new BondOption()
            {
                ExecutionTime = 3, Type = BondOption.OptionType.Call, UnderlyingBond = b3
            };

            var boladder = new List <DataPoint>();
            //for (double sp = 0.9; sp < 1.0; sp += 0.005)
            //{
            //    bo2.StrikePrice = sp;
            //    double price = BondOptionPrices(bo2).Average();
            //    boladder.Add(new DataPoint(sp, price));

            //}

            //WIENER////

            WienerProcess wp = new WienerProcess(0, 1);

            double t  = -1;
            var    w1 = new List <DataPoint>(wp.generatePathFrom(new WienerProcess.State(0), 0, 1, 100).Select(fx => new DataPoint(t += 1, fx.r)));

            t = -1;
            var w2 = new List <DataPoint>(wp.generatePathFrom(new WienerProcess.State(0), 0, 1, 100).Select(fx => new DataPoint(t += 1, fx.r)));

            t = -1;
            var w3 = new List <DataPoint>(wp.generatePathFrom(new WienerProcess.State(0), 0, 1, 100).Select(fx => new DataPoint(t += 1, fx.r)));

            t = -1;
            var w4 = new List <DataPoint>(wp.generatePathFrom(new WienerProcess.State(0), 0, 1, 100).Select(fx => new DataPoint(t += 1, fx.r)));

            t = -1;
            var w5 = new List <DataPoint>(wp.generatePathFrom(new WienerProcess.State(0), 0, 1, 100).Select(fx => new DataPoint(t += 1, fx.r)));
            //////////

            ////GAUSS///////

            Func <double, double, double, double> nrd = (nu, sigma, x) => {
                return(1.0 / Math.Sqrt(2 * Math.PI * sigma * sigma) * Math.Exp(-(x - nu) * (x - nu) / (2 * sigma * sigma)));
            };

            var nrd1 = new List <DataPoint>();
            var nrd2 = new List <DataPoint>();
            var nrd3 = new List <DataPoint>();
            var nrd4 = new List <DataPoint>();

            for (double x = -5; x < 5; x += 0.05)
            {
                nrd1.Add(new DataPoint(x, nrd(0, 1, x)));
                nrd2.Add(new DataPoint(x, nrd(0, 0.5, x)));
                nrd3.Add(new DataPoint(x, nrd(0, 0.1, x)));
                nrd4.Add(new DataPoint(x, nrd(-2, 0.4, x)));
            }

            ////////////////

            this.DataContext = new
            {
                bond1      = bond1,
                bond1base  = bond1base,
                bond1error = bond1error,
                bond2      = bond2,
                bond2base  = bond2base,
                bond2error = bond2error,
                bond       = bond,
                bondoption = bondoption,
                swap       = swap,
                swaption   = swaption,
                boladder   = boladder,
                w1         = w1,
                w2         = w2,
                w3         = w3,
                w4         = w4,
                w5         = w5,
                nrd1       = nrd1,
                nrd2       = nrd2,
                nrd3       = nrd3,
                nrd4       = nrd4
            };
        }