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")); }
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)); }
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); }
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)); }
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); }
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)); }
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)); }
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)); }
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)); }
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); }
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)); }
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); }
public void LoadInterestRateCurveFailTest() { var curve = CurveEngine.LoadInterestRateCurve(Market, "NZD", "3M", null); Assert.IsNull(curve); }