public void TestExtrapolate2() { IStock stockASXParent = LoadStock("AGK"); IStock stockASXChild = LoadStock("ANZ"); IStock stockSDParent = LoadStock("BHP"); IVolatilitySurface child = CreateNullVolSurface(); ExtrapolationHelper extrapHelper = new ExtrapolationHelper(); double factor = 0.314843 / 0.290393; double parentVol1 = 0.394634; double scal = extrapHelper.CalcExtrapFactor(stockASXParent, stockASXChild, new DateTime(2009, 9, 30)); Assert.AreEqual(scal, factor, 0.001); double parentVol2 = 0.38754555; double parentVol3 = 0.71063645; if (stockASXParent.VolatilitySurface.Expiries[0].Strikes[0].InterpModel.GetType() == typeof(WingInterp)) { extrapHelper.DoExtrap(stockASXParent, stockASXChild, stockSDParent, child); //moneyness = 0.3; Assert.AreEqual(Convert.ToDouble(child.NodalExpiries[2].Strikes[0].Volatility.Value), factor * parentVol3, 0.001); //moneyness = 1.0; Assert.AreEqual(Convert.ToDouble(child.NodalExpiries[2].Strikes[1].Volatility.Value), factor * parentVol1, 0.001); //moneyness = 1.2; Assert.AreEqual(Convert.ToDouble(child.NodalExpiries[2].Strikes[2].Volatility.Value), factor * parentVol2, 0.001); } }
public void TestExtrapolate3() { IStock stockASXParent = LoadStock("AGK"); IStock stockASXChild = LoadStock("ANZ"); IStock stockSDParent = LoadStock("BHP"); IVolatilitySurface child = CreateOnePointChild(); ExtrapolationHelper extrapHelper = new ExtrapolationHelper(); double scal = extrapHelper.CalcExtrapFactor(stockASXParent, stockASXChild, new DateTime(2009, 9, 10)); Assert.AreEqual(scal, 1.05239899198348, 0.001); //OLD 0.314301/0.298668 //1.06102304848855 extrapHelper.DoExtrap(stockASXParent, stockASXChild, stockSDParent, child); Assert.AreEqual(Convert.ToDouble(child.Expiries[0].Strikes[0].Volatility.Value), 0.997545918986369, 0.001); //0.930043543995147 }
public void TestExtrapolate1() { IStock stockASXParent = LoadStock("AGK"); IStock stockASXChild = LoadStock("ANZ"); IStock stockSDParent = LoadStock("AGK"); IVolatilitySurface child = CreateTestVolSurface(); ExtrapolationHelper extrapHelper = new ExtrapolationHelper(); if (stockASXParent.VolatilitySurface.Expiries[0].Strikes[0].InterpModel.GetType() == typeof(WingInterp)) { extrapHelper.DoExtrap(stockASXParent, stockASXChild, stockSDParent, child); Assert.AreEqual(Convert.ToDouble(child.NodalExpiries[0].Strikes[0].Volatility.Value), 0.295126142, 0.0001); } }