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); }
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.######")); }
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); } } }