public void BeforeScenario() { #if DEBUG // Ensure recycling issues are not carried over ObjectCacheTestHelper.ResetCounters(); ServerObjectCacheTestHelper.ResetCounters(); ClientObjectCacheTestHelper.ResetCounters(); ObjectCacheHelper.ResetCounters(); ServerObjectCacheHelper.ResetCounters(); ClientObjectCacheHelper.ResetCounters(); ExpectedUnaccountedForAutoRecyclingArrays = 0; ExpectedUnaccountedForDarkRiftReaders = 0; ExpectedUnaccountedForDarkRiftWriters = 0; ExpectedUnaccountedForMessages = 0; ExpectedUnaccountedForMessageBuffers = 0; ExpectedUnaccountedForSocketAsyncEventArgs = 0; ExpectedUnaccountedForActionDispatcherTasks = 0; ExpectedUnaccountedForServerMessageReceviedEventArgs = 0; ExpectedUnaccountedForServerServerMessageReceviedEventArgs = 0; ExpectedUnaccountedForClientMessageReceviedEventArgs = 0; ExpectedUnaccountedForMemory = 0; #endif }
public void TestPricingStructure() { var equityProperties = new NamedValueSet(); equityProperties.Set(CurveProp.PricingStructureType, "EquityWingVolatilityMatrix"); equityProperties.Set("BuildDateTime", DateTime.Today); equityProperties.Set(CurveProp.BaseDate, DateTime.Today); equityProperties.Set(CurveProp.Market, "LIVE"); equityProperties.Set("Identifier", "EquityWingVolatilityMatrix.AUD-BHP.07/01/2010"); equityProperties.Set("Currency", "AUD"); equityProperties.Set("CommodityAsset", "Stock"); equityProperties.Set(CurveProp.CurveName, "AUD-BHP-EquityTradingDesk"); equityProperties.Set("Algorithm", "SABR"); string[] strikes = new string[10] { "0.5", "0.6", "0.75", "0.9", "1", "1.1", "1.25", "1.4", "1.5", "1.6" }; string[] times = new string[2] { "3d", "5d" }; //string[] times = new string[10] { "1d", "2d", "3d", "5d", "1m", "3m", "6m", "1y", "2y", "5y" }; double[,] vols = new double[2, 10] { { 0.5d, 0.49d, 0.49d, 0.48d, 0.47d, 0.455d, 0.45d, 0.45d, 0.45d, 0.46d }, { 0.5d, 0.49d, 0.49d, 0.48d, 0.47d, 0.455d, 0.45d, 0.45d, 0.45d, 0.46d } }; /* { 0.5d, 0.49d, 0.49d, 0.48d, 0.47d, 0.455d, 0.45d, 0.45d, 0.45d, 0.46d} , * { 0.5d, 0.49d, 0.49d, 0.48d, 0.47d, 0.455d, 0.45d, 0.45d, 0.45d, 0.46d} , * { 0.5d, 0.49d, 0.49d, 0.48d, 0.47d, 0.455d, 0.45d, 0.45d, 0.45d, 0.46d} , * { 0.5d, 0.49d, 0.49d, 0.48d, 0.47d, 0.455d, 0.45d, 0.45d, 0.45d, 0.46d} , * { 0.5d, 0.49d, 0.49d, 0.48d, 0.47d, 0.455d, 0.45d, 0.45d, 0.45d, 0.46d} , * { 0.5d, 0.49d, 0.49d, 0.48d, 0.47d, 0.455d, 0.45d, 0.45d, 0.45d, 0.46d} , * { 0.5d, 0.49d, 0.49d, 0.48d, 0.47d, 0.455d, 0.45d, 0.45d, 0.45d, 0.46d} , * { 0.5d, 0.49d, 0.49d, 0.48d, 0.47d, 0.455d, 0.45d, 0.45d, 0.45d, 0.46d} * }; */ double[] forwards = new double[3] { 6.90d, 7d, 7.5d }; string id = ObjectCacheHelper.CreateVolatilitySurfaceWithProperties(equityProperties, times, strikes, vols, forwards); //Get the curvbe. var pricingStructure = (IStrikeVolatilitySurface)ObjectCacheHelper.GetPricingStructureFromSerialisable(id); var rows = times.Length; var width = strikes.Length; //popultate the result matrix. var result = new double[rows, width]; for (var i = 0; i < rows; i++) { for (var j = 0; j < width; j++) { result[i, j] = pricingStructure.GetValueByExpiryTermAndStrike(times[i], forwards[i + 1] * Convert.ToDouble(strikes[j])); } } }
public static string BuildAndCacheRateCurve(DateTime baseDate) { var curve = TestRateCurve(baseDate); string curveId = curve.GetPricingStructureId().UniqueIdentifier; ObjectCacheHelper.SetPricingStructureAsSerialisable(curve); return(curveId); }
public void CreateStructuredFloorTest() { #region Initialise QRLib.PricingStructures.ClearCache(); string rateCurveId = BuildMarket(_baseDate); IMarketEnvironment marketEnvironment = ObjectCacheHelper.GetMarket(_marketEnvironmentId); #endregion #region Define the Swap const string id = "TestStructuredFloor"; object[,] capFloorTerms = { { "DealReferenceIdentifier", id }, { "BasePartyBuySellsInd", "Sells" }, { "CounterpartyName", "ANZ" }, { "DealType", "Floor" }, }; object[,] streamTerms = { { "NotionalAmount", "1000000" }, { "Currency", "AUD" }, { "DayCountConvention", "ACT/365.FIXED" }, { "DiscountingType", "Standard" }, { "DiscountCurveReference", rateCurveId }, { "ForwardCurveReference", rateCurveId }, { "VolatilityCurveReference", _volatilityStructureId }, { "RateIndexName", "AUD-LIBOR-BBA" }, { "RateIndexTenor", "6m" }, { "StrikePrice", "0.07" }, }; const double notionalAmount = -1000000; object[,] couponMatrix = { { "StartDate", "EndDate", "NotionalAmount", "StrikePrice" }, { new DateTime(2009, 09, 04), new DateTime(2010, 03, 01), notionalAmount, "0.07"}, { new DateTime(2010, 03, 01), new DateTime(2010, 09, 01), notionalAmount, "0.07"}, { new DateTime(2010, 09, 01), new DateTime(2011, 03, 01), notionalAmount, "0.07"}, { new DateTime(2011, 03, 01), new DateTime(2011, 09, 05), notionalAmount, "0.07"}, }; #endregion #region Define the Valuation Criteria string[] requiredMetrics = { "NPV", "BreakEvenRate" }; #endregion #region Create & Value the Swap string returnedId = QRLib.Rates.InterestRateCapFloor.CreateStructured(capFloorTerms, streamTerms, couponMatrix); Assert.AreEqual(id, returnedId); InterestRateCapFloor capFloor = ProductHelper.Get <InterestRateCapFloor>(id); Assert.IsNotNull(capFloor); CreditSettings creditSettings = new CreditSettings(ServerStore.Client); IDictionary <string, object> valuation = capFloor.BasicValuation(_baseDate, marketEnvironment, requiredMetrics, creditSettings); #endregion #region Validate the Results Assert.AreEqual(CapBreakEvenRate, Convert.ToDouble(valuation["BreakEvenRate"]), 0.0000001); Assert.AreEqual(_pv, Convert.ToDouble(valuation["NPV"]), 3); #endregion #region Reset QRLib.PricingStructures.ClearCache(); #endregion }
public void CreateAmortisedFloorTest() { #region Initialise QRLib.PricingStructures.ClearCache(); string rateCurveId = BuildMarket(_baseDate); IMarketEnvironment marketEnvironment = ObjectCacheHelper.GetMarket(_marketEnvironmentId); #endregion #region Define the Swap const string id = "TestAmortisedFloor"; object[,] capFloorTerms = { { "DealReferenceIdentifier", id }, { "BasePartyBuySellsInd", "Sells" }, { "CounterpartyName", "ANZ" }, { "DealType", "Floor" }, { "EffectiveDate", _baseDate }, { "TerminationDate", _baseDate.AddYears(2) }, { "AdjustCalculationDates", true }, }; object[,] streamTerms = { { "NotionalAmount", "1000000" }, { "Currency", "AUD" }, { "ScheduleGeneration", "Forward" }, { "BusinessCenters", "Sydney" }, { "CouponPeriod", "6m" }, { "RollDay", "1" }, { "CouponDateAdjustment", "FOLLOWING" }, { "DayCountConvention", "ACT/365.FIXED" }, { "DiscountingType", "Standard" }, { "DiscountCurveReference", rateCurveId }, { "FixedOrObservedRate", "0.07" }, { "ObservedRateSpecified", "FALSE" }, { "ForwardCurveReference", rateCurveId }, { "FixingDateBusinessCenters", "Sydney" }, { "FixingDateResetInterval", "0D" }, { "FixingDateAdjustmentConvention", "NONE" }, { "RateIndexName", "AUD-LIBOR-BBA" }, { "RateIndexTenor", "6m" }, { "Spread", "0" }, { "VolatilityCurveReference", _volatilityStructureId }, { "StrikePrice", "0.07" }, }; #endregion #region Define the Valuation Criteria string[] requiredMetrics = { "NPV", "BreakEvenRate" }; #endregion #region Create & Value the Swap string returnedId = QRLib.Rates.InterestRateCapFloor.CreateAmortised(capFloorTerms, streamTerms, null); Assert.AreEqual(id, returnedId); InterestRateCapFloor capFloor = ProductHelper.Get <InterestRateCapFloor>(id); Assert.IsNotNull(capFloor); CreditSettings creditSettings = new CreditSettings(ServerStore.Client); IDictionary <string, object> valuation = capFloor.BasicValuation(_baseDate, marketEnvironment, requiredMetrics, creditSettings); #endregion #region Validate the Results Assert.AreEqual(CapBreakEvenRate, Convert.ToDouble(valuation["BreakEvenRate"]), 0.0000001); Assert.AreEqual(_pv, Convert.ToDouble(valuation["NPV"]), 3); #endregion #region Reset QRLib.PricingStructures.ClearCache(); #endregion }