Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="spotT"></param>
        /// <param name="priceT"></param>
        /// <param name="myZero"></param>
        /// <param name="myDiv"></param>
        public void MakeTheta(ITree spotT, Pricer priceT, ZeroCurve myZero, DivList myDiv)
        {
            SetParam(spotT, priceT);
            var   type = spotT.GetType();
            ITree t1   = (ITree)Activator.CreateInstance(type);
            ITree t2   = (ITree)Activator.CreateInstance(type);

            t1.Tau       = Tau;
            t1.Gridsteps = Gridsteps;
            t1.Sig       = Sig;
            t1.Spot      = Spot;
            t1.MakeGrid(myZero, myDiv);
            priceT.MakeGrid(t1);
            double  p1       = priceT.Price();
            DivList shiftDiv = new DivList {
                Divpoints = myDiv.Divpoints
            };

            shiftDiv.MakeArrays();
            for (int idx = 0; idx < myDiv.Divpoints; idx++)
            {
                shiftDiv.SetD(idx, myDiv.GetD(idx), myDiv.GetT(idx) - 1 / 365.0);
            }
            double t = Tau - 1.00 / 365.00;

            t2.Tau       = t;
            t2.Gridsteps = Gridsteps;
            t2.Sig       = Sig;
            t2.Spot      = Spot;
            t2.MakeGrid(myZero, shiftDiv);
            priceT.MakeGrid(t2);
            double p2 = priceT.Price();

            Theta = (p2 - p1);
        }
Exemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="spotT"></param>
        /// <param name="priceT"></param>
        /// <param name="myZero"></param>
        /// <param name="myDiv"></param>
        public void MakeVega(ITree spotT, Pricer priceT, ZeroCurve myZero, DivList myDiv)
        {
            SetParam(spotT, priceT);
            var   type = spotT.GetType();
            ITree t1   = (ITree)Activator.CreateInstance(type);
            ITree t2   = (ITree)Activator.CreateInstance(type);

            t1.Tau       = Tau;
            t1.Gridsteps = Gridsteps;
            t1.Sig       = .99 * Sig;
            t1.Spot      = Spot;
            t1.MakeGrid(myZero, myDiv);
            priceT.MakeGrid(t1);
            double p1 = priceT.Price();

            t2.Tau       = Tau;
            t2.Gridsteps = Gridsteps;
            t2.Sig       = 1.01 * Sig;
            t2.Spot      = Spot;
            t2.MakeGrid(myZero, myDiv);
            priceT.MakeGrid(t2);
            double p2 = priceT.Price();

            if (Sig != 0)
            {
                Vega = 0.01 * (p2 - p1) / (2 * 0.01 * Sig);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="style"></param>
        /// <param name="spot"></param>
        /// <param name="strike"></param>
        /// <param name="vol"></param>
        /// <param name="today"></param>
        /// <param name="expiry"></param>
        /// <param name="paystyle"></param>
        /// <param name="zeroDates"></param>
        /// <param name="zeroRates"></param>
        /// <param name="divDates"></param>
        /// <param name="divAms"></param>
        /// <param name="gridsteps"></param>
        /// <param name="smoo"></param>
        /// <param name="flatFlag"></param>
        /// <returns></returns>
        public static double[,] BinomialRelativeGetGreeks(string style, double spot, double strike, double vol, DateTime today, DateTime expiry,
                                                          string paystyle, DateTime[] zeroDates, double[] zeroRates, DateTime[] divDates, double[] divAms, double gridsteps, string smoo, bool flatFlag)
        {
            const int arrsize = 4;

            gridsteps = (gridsteps == 0.0) ? 20 : gridsteps;
            int       nGridsteps = Convert.ToInt32(gridsteps);
            string    smoothing  = (smoo.ToLower().Equals("n")) ? "n" : "y";
            var       retArray   = new double[arrsize, arrsize];
            double    t          = expiry.Subtract(today).Days / 365.0;
            ZeroCurve myZero     = (new Wrapper()).UnpackZero(today, zeroDates, zeroRates);
            DivList   myDiv      = (new Wrapper()).UnpackDiv(today, expiry, divDates, divAms);
            //create the tree
            var myTree = new PropTree(t, vol, spot, nGridsteps, true)
            {
                Gridsteps = nGridsteps
            };

            myTree.MakeGrid(myZero, myDiv);
            //create pricer
            var myPrice = new Pricer(strike, paystyle, smoothing, style);

            myPrice.MakeGrid(myTree);
            myPrice.Price();
            var myGreeks = new Greeks();

            myGreeks.MakeDeltaGamma(myTree, myPrice, myZero, myDiv);
            double delta = myGreeks.Delta;
            double gamma = myGreeks.Gamma;

            myGreeks.MakeVega(myTree, myPrice, myZero, myDiv);
            double vega = myGreeks.Vega;

            myGreeks.MakeTheta(myTree, myPrice, myZero, myDiv);
            double theta = myGreeks.Theta;

            retArray[0, 0] = delta;
            retArray[0, 1] = gamma;
            retArray[0, 2] = vega;
            retArray[0, 3] = theta;
            return(retArray);
        }
Exemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="myZero"></param>
        /// <param name="myDiv"></param>
        /// <param name="orcParams"></param>
        /// <param name="t"></param>
        /// <param name="strike"></param>
        /// <param name="spot"></param>
        /// <param name="style"></param>
        /// <param name="paystyle"></param>
        /// <param name="gridsteps"></param>
        /// <returns></returns>
        public static double FindPrice(ZeroCurve myZero, DivList myDiv, double[] orcParams, double t,
                                       double strike, double spot, string style, string paystyle, double gridsteps)
        {
            //get the atfwd
            double atFwd = GetATMfwd(myZero, myDiv, spot, t);
            //unpack the orc paramters
            //double currentVol = OrcParams[0];
            //double slopeRef = OrcParams[1];
            //double putCurve = OrcParams[2];
            //double callCurve = OrcParams[3];
            //double dnCutOff = OrcParams[4];
            //double upCutOff = OrcParams[5];
            //double refFwd = OrcParams[6];
            //double refVol = OrcParams[7];
            //double vcr = OrcParams[8];
            //double scr = OrcParams[9];
            //double ssr = OrcParams[10];
            //double dsr = OrcParams[11];
            //double usr = OrcParams[12];

            //set up the tree
            var myTree     = new DiscreteTree();
            var myVol      = new OrcWingVol();
            int nGridsteps = (gridsteps < 20.0) ? 20 : Convert.ToInt32(gridsteps);

            myTree.Gridsteps = nGridsteps;
            myTree.Tau       = t;
            myTree.Sig       = myVol.Orcvol(atFwd, strike);
            myTree.Spot      = spot;
            myTree.MakeGrid(myZero, myDiv);
            //create pricer
            var myPrice = new Pricer {
                Strike = strike, Payoff = paystyle, Smoothing = "y", Style = style
            };

            myPrice.MakeGrid(myTree);
            double pr = myPrice.Price();

            return(pr);
        }
Exemplo n.º 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="style"></param>
        /// <param name="spot"></param>
        /// <param name="strike"></param>
        /// <param name="vol"></param>
        /// <param name="today"></param>
        /// <param name="expiry"></param>
        /// <param name="paystyle"></param>
        /// <param name="zeroDates"></param>
        /// <param name="zeroRates"></param>
        /// <param name="divDates"></param>
        /// <param name="divAms"></param>
        /// <param name="gridsteps"></param>
        /// <param name="smoo"></param>
        /// <param name="flatFlag"></param>
        /// <returns></returns>
        public static double BinomialRelativePricer(string style, double spot, double strike, double vol, DateTime today, DateTime expiry,
                                                    string paystyle, DateTime[] zeroDates, double[] zeroRates, DateTime[] divDates, double[] divAms, double gridsteps, string smoo, bool flatFlag)
        {
            gridsteps = (gridsteps == 0.0) ? 20 : gridsteps;
            int       nGridsteps = Convert.ToInt32(gridsteps);
            string    smoothing  = (smoo.ToLower().Equals("n")) ? "n" : "y";
            double    t          = expiry.Subtract(today).Days / 365.0;
            var       wrapper    = new Wrapper();
            ZeroCurve myZero     = wrapper.UnpackZero(today, zeroDates, zeroRates);
            DivList   myDiv      = wrapper.UnpackDiv(today, expiry, divDates, divAms);
            //create the tree
            var myTree = new PropTree(t, vol, spot, nGridsteps, true);

            myTree.MakeGrid(myZero, myDiv);
            //create pricer
            var myPrice = new Pricer(strike, paystyle, smoothing, style);

            myPrice.MakeGrid(myTree);
            double pr = myPrice.Price();

            return(pr);
        }