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
        }
Пример #2
0
        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]));
                }
            }
        }
Пример #3
0
        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
        }