コード例 #1
0
        public void RecombineNodesInTree()
        {
            var tree = new CapmBinTree(4);

            var node2 = tree.GetUpDependantNode(tree.GetRootNode());
            var node3 = tree.GetDownDependantNode(tree.GetRootNode());

            Assert.AreEqual(2, node2.NodeIndex);
            Assert.AreEqual(3, node3.NodeIndex);

            var node5A = tree.GetDownDependantNode(node2);
            var node5B = tree.GetUpDependantNode(node3);

            Assert.AreSame(node5A, node5B);
        }
コード例 #2
0
        private static void SingleConvergeTest()
        {
            int numberOfSteps = 2000;
            var tree          = new CapmBinTree(numberOfSteps);

            tree.InitialStockPrice = 100;
            tree.Volatility        = 0.2;
            tree.StrikePrice       = 105;
            tree.TotalTimeYears    = 0.5;
            tree.RiskFree          = 0.03;
            tree.MarketRiskPremium = 0.06;
            tree.StockBeta         = 1;
            // B&S = call: 4.17 (con strike =105)

            double callPriceBS = BlackScholes.CallPrice((double)tree.InitialStockPrice,
                                                        (double)tree.StrikePrice,
                                                        (double)tree.TotalTimeYears,
                                                        (double)tree.RiskFree,
                                                        (double)tree.Volatility);

            Console.WriteLine("call B&S: " + callPriceBS.ToString("##0.######"));


            tree.CalculateStockPrices();
            tree.CalculateOptionPrices();

            Console.WriteLine();
            //OutputTree(tree, delegate(BinTree.Node node) { return node.StockPrice.ToString("##0.##"); });
            Console.WriteLine("call: " + tree.GetRootNode().OptionPrice.ToString("##0.######"));
        }
コード例 #3
0
        private static void IterateByAmountOfSteps()
        {
            double InitialStockPrice = 100;
            double Volatility        = 0.2;
            double StrikePrice       = 105;
            double TotalTimeYears    = 0.5;
            double RiskFree          = 0.03;
            double MarketRiskPremium = 0.06;
            double StockBeta         = 1;
            double callPriceBS       = BlackScholes.CallPrice((double)InitialStockPrice,
                                                              (double)StrikePrice,
                                                              (double)TotalTimeYears,
                                                              (double)RiskFree,
                                                              (double)Volatility);

            int minNumberOfSteps = 7000;
            int maxNumberOfSteps = 9000;

            bool createHeaders = !File.Exists("output.csv");


            using (var writer = new StreamWriter("output.csv", true))
            {
                if (createHeaders)
                {
                    writer.WriteLine("Steps,CallValueBS,CallValueCAPM");
                }

                var tree = new CapmBinTree(maxNumberOfSteps);

                tree.InitialStockPrice = InitialStockPrice;
                tree.Volatility        = Volatility;
                tree.StrikePrice       = StrikePrice;
                tree.TotalTimeYears    = TotalTimeYears;
                tree.RiskFree          = RiskFree;
                tree.MarketRiskPremium = MarketRiskPremium;
                tree.StockBeta         = StockBeta;

                for (int steps = minNumberOfSteps; steps < maxNumberOfSteps; steps += (int)Math.Pow(Math.Log10(steps), 3))
                {
                    tree.NumberOfSteps = steps;
                    tree.ResetTreeParameterCalcs();
                    tree.CalculateStockPrices();
                    tree.CalculateOptionPrices();

                    writer.WriteLine(steps + "," + callPriceBS.ToString("##0.#############################") +
                                     ", " + tree.GetRootNode().OptionPrice.ToString("##0.#############################"));

                    writer.Flush();

                    Console.WriteLine("Step Number: " + steps);
                }
            }
        }