public void LoadInterestRateCurveGbpNullTenorTest()
        {
            var curve = CurveEngine.LoadInterestRateCurve(Market, "GBP", null, null);

            Assert.IsNotNull(curve);
            // curve without tenor exists
            Assert.AreEqual("NotFound", curve.GetPricingStructureId().Properties.GetString("IndexTenor", "NotFound"));
        }
Exemple #2
0
        public void LoadInterestRateCurveAud1MTest()
        {
            var curve = CurveEngine.LoadInterestRateCurve(Market, "AUD", "1M", null);

            Assert.IsNotNull(curve);
            // 1M does exist
            Assert.AreEqual("1M", curve.GetPricingStructureId().Properties.GetString("IndexTenor", true));
        }
        public void LoadInterestRateCurveAud6MTest()
        {
            var curve = CurveEngine.LoadInterestRateCurve(Market, "AUD", "6M", null);

            Assert.IsNotNull(curve);
            // 6M does not exist, 3M loaded instead
            Assert.AreEqual("3M", curve.GetPricingStructureId().Properties.GetString("IndexTenor", true));
        }
Exemple #4
0
        public static void AssemblyInitialize(TestContext testContext)
        {
            UTE = new UnitTestEnvironment();
            var logger = Reference <ILogger> .Create(UTE.Logger);

            PricingStructures = new PricingStructures(logger, UTE.Cache, UTE.NameSpace);
            //LpmPublisher = new LpmPublisher(logger, UTE.Cache);
            CurveEngine = new CurveEngine(logger.Target, UTE.Cache);
        }
Exemple #5
0
        public void LoadInterestRateVolCurveWithStrikeTest()
        {
            CreateStrikeRateVolCurve("AUD", "3M", IrVolInstruments2, IrVolValues2, IrStrikes2);
            var curve = CurveEngine.LoadVolatilityCurve(Market, "AUD", "3M", null);

            Assert.IsNotNull(curve);
            // 3M does exist
            Assert.AreEqual("3M", curve.GetPricingStructureId().Properties.GetString("IndexTenor", true));
        }
Exemple #6
0
 public static void ClassInitialize(TestContext context)
 {
     UTE         = new UnitTestEnvironment();
     CurveEngine = new CurveEngine(UTE.Logger, UTE.Cache);
     CreateFxCurve("AUD", "USD", AudUsdInstruments, AudUsdValues);
     CreateFxCurve("GBP", "USD", GbpUsdInstruments, GbpUsdValues);
     CreateFxCurve("USD", "JPY", UsdJpyInstruments, UsdJpyValues);
     CreateRateCurve("AUD", "1M", IrInstruments, IrValues);
     CreateRateCurve("AUD", "3M", IrInstruments, IrValues);
     CreateDiscountCurve("GBP", IrInstruments, IrValues);
     CreateBondDiscountCurve("AUD", AudBondInstruments, AudBondValues);
     CreateBondCurve("AUD", AudBondForwardInstruments, AudBondForwardValues);
     CreateBondFinancingCurve("AUD", AudBondFinancingInstruments, AudBondFinancingValues);
     CreateBondFinancingBasisCurve("AUD", AudBondFinancingBasisInstruments, AudBondFinancingBasisValues);
 }
Exemple #7
0
        private static void CreateDiscountCurve(string currency1, string[] instruments, decimal[] values)
        {
            NamedValueSet properties = new NamedValueSet();

            properties.Set("PricingStructureType", "DiscountCurve");
            properties.Set("CreditInstrumentId", "LIBOR");
            properties.Set("CreditSeniority", "SENIOR");
            properties.Set("CurveName", currency1 + "-LIBOR-SENIOR");
            properties.Set("Currency", currency1);
            properties.Set("MarketName", Market);
            properties.Set("BaseDate", DateTime.Today);
            var    rateCurve = CurveEngine.CreatePricingStructure(properties, ProcessValues(instruments, values));
            string name      = rateCurve.GetPricingStructureId().UniqueIdentifier;
            Market market    = rateCurve.GetMarket();

            CurveEngine.SaveCurve(market, name, properties, new TimeSpan(0, 1, 0));
        }
Exemple #8
0
        private static void CreateRateCurve(string currency1, string indexTenor, string[] instruments, decimal[] values)
        {
            NamedValueSet properties = new NamedValueSet();

            properties.Set("CurveName", "AUD-BBR-BBSW-" + indexTenor);
            properties.Set("PricingStructureType", "RateCurve");
            properties.Set("Currency", currency1);
            properties.Set("IndexTenor", indexTenor);
            properties.Set("IndexName", "AUD-BBR-BBSW");
            properties.Set("MarketName", Market);
            properties.Set("BaseDate", DateTime.Today);
            var    rateCurve = CurveEngine.CreatePricingStructure(properties, ProcessValues(instruments, values));
            string name      = rateCurve.GetPricingStructureId().UniqueIdentifier;
            Market market    = rateCurve.GetMarket();

            CurveEngine.SaveCurve(market, name, properties, new TimeSpan(0, 1, 0));
        }
Exemple #9
0
        private static void CreateFxCurve(string currency1, string currency2, string[] instruments, decimal[] values)
        {
            NamedValueSet properties = new NamedValueSet();

            properties.Set("CurveName", "FxCurve" + currency1 + "-" + currency2);
            properties.Set("PricingStructureType", "FxCurve");
            properties.Set("Currency", currency1);
            properties.Set("Currency2", currency2);
            properties.Set("CurrencyPair", currency1 + "-" + currency2);
            properties.Set("QuoteBasis", "Currency2PerCurrency1");
            properties.Set("MarketName", Market);
            properties.Set("BaseDate", DateTime.Today);
            var    fxCurve = CurveEngine.CreatePricingStructure(properties, ProcessValues(instruments, values));
            string name    = fxCurve.GetPricingStructureId().UniqueIdentifier;
            Market market  = fxCurve.GetMarket();

            CurveEngine.SaveCurve(market, name, properties, new TimeSpan(0, 1, 0));
        }
Exemple #10
0
        private static void CreateBondDiscountCurve(string currency1, string[] instruments, decimal[] values)
        {
            NamedValueSet properties = new NamedValueSet();

            properties.Set("PricingStructureType", "BondDiscountCurve");
            properties.Set("Currency", currency1);
            properties.Set("CreditInstrumentId", "WATC");
            properties.Set("CreditSeniority", "SENIOR");
            properties.Set("MarketName", Market1);
            properties.Set("Algorithm", "LinearZero");
            properties.Set("MarketQuote", "YieldToMaturity");
            properties.Set("BaseDate", new DateTime(2010, 3, 1));
            var    bondCurve = CurveEngine.CreatePricingStructure(properties, ProcessValues(instruments, values));
            string name      = bondCurve.GetPricingStructureId().UniqueIdentifier;
            Market market    = bondCurve.GetMarket();

            CurveEngine.SaveCurve(market, name, properties, new TimeSpan(0, 1, 0));
        }
Exemple #11
0
        public void LoadInterestRateVolCurveTest()
        {
            CreateATMRateVolCurve("AUD", "3M", IrVolInstruments, IrVolValues, IrStrikes);
            var curve = (CapVolatilityCurve)CurveEngine.LoadVolatilityCurve(Market, "AUD", "3M", null);

            Assert.IsNotNull(curve);
            // 3M does exist
            Assert.AreEqual("3M", curve.GetPricingStructureId().Properties.GetString("IndexTenor", true));
            //var baseDate = curve.GetBaseDate();
            var expiration = VolatilitySurfaceHelper.GetDimensionValues(curve.GetVolatilityMatrix().dataPoints?.point,
                                                                        CubeDimension.Expiration);
            var volatilities = VolatilitySurfaceHelper.GetDimensionValues(curve.GetVolatilityMatrix().dataPoints?.point,
                                                                          CubeDimension.Volatility);
            var valArray = new List <Decimal>();

            foreach (var vol in volatilities)
            {
                valArray.Add((decimal)vol);
            }
            var expiryArray = new List <TimeDimension>();

            //var valArray = new List<Decimal>();
            //Debug.Print(baseDate.ToString(CultureInfo.InvariantCulture));
            foreach (var expiry in expiration)
            {
                //Temporary
                if (expiry is TimeDimension timeDimension)
                {
                    expiryArray.Add(timeDimension);
                }
                //var date = expiry as DateTime? ?? baseDate.AddDays(1);
                //expiryArray.Add(date);
                //Debug.Print(expiry.ToString());
            }
            var termPoints = TermPointsFactory.Create(expiryArray, valArray);
            var termCurve  = new TermCurve {
                point = termPoints
            };
            var output = XmlSerializerHelper.SerializeToString(termCurve);

            Debug.Print(output);
        }
Exemple #12
0
        private static void CreateBondFinancingBasisCurve(string currency1, string[] instruments, decimal[] values)
        {
            NamedValueSet properties = new NamedValueSet();

            properties.Set("PricingStructureType", "BondFinancingBasisCurve");
            properties.Set("ReferenceBond", "Govt.WATC.Fixed.7.15/10/2019");
            properties.Set("ReferenceCurveUniqueId", "Market." + Market + ".DiscountCurve.GBP-LIBOR-SENIOR");
            properties.Set("CurveName", "AUD-GC-SECURED");
            properties.Set("Currency", currency1);
            properties.Set("BondType", "AGB");
            properties.Set("CreditSeniority", "SECURED");
            properties.Set("CreditInstrumentId", "GC");
            properties.Set("MarketName", Market);
            properties.Set("Algorithm", "LinearZero");
            properties.Set("MarketQuote", "YieldToMaturity");
            properties.Set("BaseDate", new DateTime(2010, 3, 1));
            var    bondCurve = CurveEngine.CreatePricingStructure(properties, ProcessValues(instruments, values));
            string name      = bondCurve.GetPricingStructureId().UniqueIdentifier;
            Market market    = bondCurve.GetMarket();

            CurveEngine.SaveCurve(market, name, properties, new TimeSpan(0, 1, 0));
        }
Exemple #13
0
        public void ProcessItems()
        {
            int count = Interlocked.Decrement(ref _queuedCalls);

            // exit if there are more callbacks following us
            //if (count % 10000 == 0)
            _loggerRef.Target.LogDebug("ProcessItems: Queued calls remaining: {0}", count);
            if (count != 0)
            {
                return;
            }
            ICoreItem item = null;

            _queuedItems.Locked(queue =>
            {
                if (queue.Count > 0)
                {
                    item = queue.Dequeue();
                }
            });
            while (item != null)
            {
                var qas = item.Data as QuotedAssetSet;
                if (qas != null)
                {
                    // 1. Get the property values that uniquely identify the curves to refresh.
                    // This is the process for the workflow request. Alternatively, a direct build of the curve can occur.
                    //
                    var nameSpace          = item.AppProps.GetValue <string>(EnvironmentProp.NameSpace);
                    var market             = item.AppProps.GetValue <string>(CurveProp.Market);//For real time use Market and not MarketAndDate
                    var curveType          = item.AppProps.GetValue <string>(CurveProp.PricingStructureType);
                    var curveName          = item.AppProps.GetValue <string>(CurveProp.CurveName);
                    var configIdentifier   = FunctionProp.Configuration + ".PricingStructures." + market + "." + curveType + "." + curveName;
                    var identifier         = FunctionProp.Market + "." + market + "." + curveType + "." + curveName;
                    List <ICoreItem> items = null;
                    // 2.Check if the dependent curves should be refreshed
                    //
                    if (chkBoxDependentCurves.Checked)
                    {
                        //Find all the QAS's where the ReferenceCurveName is equal to the curveType.curveName!
                        var requestProperties = new NamedValueSet();
                        requestProperties.Set(EnvironmentProp.NameSpace, NameSpace);
                        requestProperties.Set(CurveProp.Market, market);
                        requestProperties.Set(EnvironmentProp.Function, FunctionProp.Configuration);
                        requestProperties.Set(CurveProp.ReferenceCurveName, curveType + '.' + curveName);
                        IExpression queryExpr = Expr.BoolAND(requestProperties);
                        _loggerRef.Target.LogDebug("Dependent curve property request set at {0}", DateTime.Now.ToLongTimeString());
                        items = _cache.LoadItems <Market>(queryExpr);
                    }
                    // 3. If the build is a local build then use the curve engine.
                    //
                    if (!chkBoxWorkflow.Checked)
                    {
                        _loggerRef.Target.LogDebug("Request to build base curve {0} locally at : {1}", identifier,
                                                   DateTime.Now.ToLongTimeString());
                        var curve = CurveEngine.RefreshPricingStructureFromConfiguration(_loggerRef.Target, _cache, nameSpace, configIdentifier, identifier, qas, DateTime.Now, DateTime.Now);
                        _loggerRef.Target.LogDebug("Built the base curve {0} locally at : {1}", curve,
                                                   DateTime.Now.ToLongTimeString());
                        if (items != null)
                        {
                            foreach (var dataItem in items)
                            {
                                var spreadCurve = dataItem.Data as Market;
                                if (spreadCurve == null)
                                {
                                    continue;
                                }
                                //var bootstrap = dataItem.AppProps.GetValue<bool>(CurveProp.BootStrap, false);
                                //if (!bootstrap) { dataItem.AppProps.Set(CurveProp.BootStrap, true); }
                                try
                                {
                                    var curveId = spreadCurve.id;
                                    if (String.IsNullOrEmpty(curveId))
                                    {
                                        curveId = spreadCurve.Items[0].id;
                                        //use yieldCurve.id, CurveGen 1.X compatible
                                    }
                                    dataItem.AppProps.Set(CurveProp.BaseDate, DateTime.Now);
                                    dataItem.AppProps.Set(CurveProp.BuildDateTime, DateTime.Now);
                                    var marketData =
                                        new Pair <PricingStructure, PricingStructureValuation>(spreadCurve.Items[0],
                                                                                               spreadCurve.Items1[0]);
                                    var ps = PricingStructureFactory.Create(_loggerRef.Target, _cache, nameSpace, null, null,
                                                                            marketData, dataItem.AppProps);
                                    if (ps != null)
                                    {
                                        CurveEngine.SaveCurve(_cache, nameSpace, ps);
                                    }
                                    _loggerRef.Target.LogDebug("Built the spread curve {0} locally at : {1}",
                                                               curveId,
                                                               DateTime.Now.ToLongTimeString());
                                }
                                catch (Exception e)
                                {
                                    _loggerRef.Target.LogDebug(e.ToString());
                                }
                            }
                        }
                    }
                    else
                    {
                        // 4. Set the parameters for the work request.
                        //
                        var curveGenRequest = new OrdinaryCurveGenRequest
                        {
                            NameSpace   = nameSpace,
                            BaseDate    = DateTime.Now,
                            RequestId   = Guid.NewGuid().ToString(),
                            RequesterId = new UserIdentity
                            {
                                Name        = _cache.ClientInfo.Name,
                                DisplayName = _cache.ClientInfo.UserFullName
                                              //Name = _clientRef.Target.ClientInfo.Name,
                                              //DisplayName = _clientRef.Target.ClientInfo.UserFullName
                            },
                            UseSavedMarketData     = true,
                            ForceGenerateEODCurves = true
                        };
                        // 5. Set the base curve in the curve selection for the work request.
                        //
                        var curveSelector = new List <CurveSelection>
                        {
                            new CurveSelection
                            {
                                NameSpace  = nameSpace,
                                MarketName = market,
                                CurveType  = curveType,
                                CurveName  = curveName
                            }
                        };
                        // 6.Include all other dependent curvenames i.e. spread curves.
                        //
                        if (items != null)
                        {
                            curveSelector.AddRange(from childCurve in items
                                                   let spreadCurveType =
                                                       childCurve.AppProps.GetValue <string>(
                                                           CurveProp.PricingStructureType)
                                                       let spreadCurveName =
                                                           childCurve.AppProps.GetValue <string>(CurveProp.CurveName)
                                                           select new CurveSelection
                            {
                                NameSpace  = nameSpace,
                                MarketName = market,
                                CurveType  = spreadCurveType,
                                CurveName  = spreadCurveName
                            });
                        }
                        curveGenRequest.CurveSelector = curveSelector.ToArray();
                        // 7. Set the actual work request.
                        //
                        IWorkContext context = new WorkContext(_loggerRef.Target, _cache, "DEV");
                        //IWorkContext context = new WorkContext(_loggerRef.Target, _clientRef.Target, "DEV");
                        _loggerRef.Target.LogDebug("WorkContext set at {0}", DateTime.Now.ToLongTimeString());
                        using (var workflow = new WFGenerateOrdinaryCurve())
                        {
                            workflow.Initialise(context);
                            WorkflowOutput <HandlerResponse> output = workflow.Execute(curveGenRequest);
                            WorkflowHelper.ThrowErrors(output.Errors);
                            foreach (var error in output.Errors)
                            {
                                _loggerRef.Target.LogInfo("WorkFlow error: {0} at {1}", error.Message, DateTime.Now.ToLongTimeString());
                            }
                        }
                        _loggerRef.Target.LogDebug("WorkFlow executed at {0}", DateTime.Now.ToLongTimeString());
                        //item = null;
                        //_queuedItems.Locked(queue =>
                        //    {
                        //        if (queue.Count > 0)
                        //            item = queue.Dequeue();
                        //    });
                    }
                }
            }
        }
        private void ValueStripMenuItemClick(object sender, EventArgs e)
        {
            var itemToValue = treeNavigation.SelectedNode?.Tag as ICoreItem;

            if (itemToValue == null)
            {
                return;
            }
            var   schema = itemToValue.AppProps.GetValue <string>(TradeProp.Schema, true);
            Trade trade;

            if (schema == FpML5R3NameSpaces.ConfirmationSchema)
            {
                var xml    = itemToValue.Text; //XmlSerializerHelper.SerializeToString(itemToValue.Data);
                var newxml = xml.Replace("FpML-5/confirmation", "FpML-5/reporting");
                trade = XmlSerializerHelper.DeserializeFromString <Trade>(newxml);
            }
            else
            {
                trade = XmlSerializerHelper.DeserializeFromString <Trade>(itemToValue.Text);
            }
            if (trade != null)
            {
                // the item
                var properties        = itemToValue.AppProps;
                var party1            = properties.GetValue <string>(TradeProp.Party1, true);
                var baseParty         = comboBoxParty.Text == party1 ? "Party1" : "Party2";
                var nameSpace         = properties.GetValue <string>(EnvironmentProp.NameSpace, true);
                var valuationDate     = dateTimePickerValuation.Value;
                var market            = comboBoxMarket.Items[comboBoxMarket.SelectedIndex].ToString();
                var reportingCurrency = comboBoxCurrency.Items[comboBoxCurrency.SelectedIndex].ToString();
                //Predefined metrics
                var metrics = new List <string> {
                    "NPV", "Delta0", "Delta1", "LocalCurrencyNPV", "NFV"
                };
                var requestedMetrics = listBoxMetrics.SelectedItems;
                foreach (var metric in requestedMetrics)
                {
                    if (!metrics.Contains(metric.ToString()))
                    {
                        metrics.Add(metric.ToString());
                    }
                }
                var uniqueTradeId = itemToValue.Name;
                var product       = trade.Item;
                try
                {
                    _loggerRef.Target.LogDebug("Valuing the trade: ." + uniqueTradeId);
                    var pricer = new TradePricer(_loggerRef.Target, _client, nameSpace, null, trade, itemToValue.AppProps);
                    //Get the market
                    var marketEnviroment     = CurveEngine.GetMarket(_loggerRef.Target, _client, nameSpace, product, market, reportingCurrency, false);
                    var controller           = TradePricer.CreateInstrumentModelData(metrics, valuationDate, marketEnviroment, reportingCurrency, baseParty);
                    var assetValuationReport = pricer.Price(controller, ValuationReportType.Full);
                    _loggerRef.Target.LogDebug("Valued the trade: ." + uniqueTradeId);
                    var id = uniqueTradeId.Split('.')[uniqueTradeId.Split('.').Length - 1];
                    //Build the val report properties
                    var valProperties = properties.Clone();
                    //Trade type
                    var tradeType = ProductTypeHelper.TradeTypeHelper(product);
                    valProperties.Set(ValueProp.PortfolioId, tradeType + "." + id);
                    valProperties.Set(ValueProp.BaseParty, baseParty);
                    valProperties.Set(ValueProp.MarketName, market);
                    valProperties.Set(ValueProp.CalculationDateTime, valuationDate);
                    valProperties.Set(TradeProp.UniqueIdentifier, null);
                    //The unique identifier for the valuation report
                    var valuationIdentifier = new ValuationReportIdentifier(valProperties);
                    _client.SaveObject(assetValuationReport, nameSpace + "." + valuationIdentifier.UniqueIdentifier, valProperties);
                    _loggerRef.Target.LogDebug("Valued and saved results for the trade: {0}", uniqueTradeId);
                }
                catch (Exception excp)
                {
                    MessageBox.Show(excp.ToString(), Resources.CoreViewerForm_ValueStripMenuItemClick_Value_failed, MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
 public static void Setup(TestContext context)
 {
     UTE = new UnitTestEnvironment();
     //Set the calendar engine
     CurveEngine = new CurveEngine(UTE.Logger, UTE.Cache, UTE.NameSpace);
 }
Exemple #16
0
        public void LoadInterestRateCurveFailTest()
        {
            var curve = CurveEngine.LoadInterestRateCurve(Market, "NZD", "3M", null);

            Assert.IsNull(curve);
        }