private static double GetValue(ValueRequirement req) { if (req.TargetSpecification.Type != ComputationTargetType.Primitive) { throw new NotImplementedException(); } using (var remoteClient = Context.CreateFinancialClient()) { var viewDefinition = new ViewDefinition(TestUtils.GetUniqueName()); var viewCalculationConfiguration = new ViewCalculationConfiguration("Default", new List <ValueRequirement> { req }, new Dictionary <string, HashSet <Tuple <string, ValueProperties> > >()); viewDefinition.CalculationConfigurationsByName.Add("Default", viewCalculationConfiguration); var uid = remoteClient.ViewDefinitionRepository.AddViewDefinition(new AddViewDefinitionRequest(viewDefinition)); viewDefinition.UniqueID = uid; try { using (var viewClient = Context.ViewProcessor.CreateClient()) { var viewComputationResultModel = viewClient.GetResults(viewDefinition.UniqueID, ExecutionOptions.SingleCycle).First(); return((double)viewComputationResultModel["Default", req].Value); } } finally { remoteClient.ViewDefinitionRepository.RemoveViewDefinition(viewDefinition.Name); } } }
private static double GetValue(ValueRequirement req) { if (req.TargetSpecification.Type != ComputationTargetType.Primitive) throw new NotImplementedException(); using (var remoteClient = Context.CreateFinancialClient()) { var viewDefinition = new ViewDefinition(TestUtils.GetUniqueName()); var viewCalculationConfiguration = new ViewCalculationConfiguration("Default", new List<ValueRequirement> { req }, new Dictionary<string, HashSet<Tuple<string, ValueProperties>>>()); viewDefinition.CalculationConfigurationsByName.Add("Default", viewCalculationConfiguration); var uid = remoteClient.ViewDefinitionRepository.AddViewDefinition(new AddViewDefinitionRequest(viewDefinition)); viewDefinition.UniqueID = uid; try { using (var viewClient = Context.ViewProcessor.CreateClient()) { var viewComputationResultModel = viewClient.GetResults(viewDefinition.UniqueID, ExecutionOptions.SingleCycle).First(); return (double)viewComputationResultModel["Default", req].Value; } } finally { remoteClient.ViewDefinitionRepository.RemoveViewDefinition(viewDefinition.Name); } } }
private static ViewDefinition GetViewDefinition(ValueRequirement req, string name) { var viewDefinition = new ViewDefinition(name); var viewCalculationConfiguration = new ViewCalculationConfiguration("Default", new List <ValueRequirement> { req }, new Dictionary <string, HashSet <Tuple <string, ValueProperties> > >()); viewDefinition.CalculationConfigurationsByName.Add("Default", viewCalculationConfiguration); return(viewDefinition); }
private static void AssertEquivalent(ViewCalculationConfiguration aVal, ViewCalculationConfiguration bVal) { Assert.Equal(aVal.Name, bVal.Name); Assert.Equal(aVal.SpecificRequirements.ToList().Count, bVal.SpecificRequirements.ToList().Count); var matchedRequirements = aVal.SpecificRequirements.Join(bVal.SpecificRequirements, a => a, b => b, (a, b) => a, new ValueReqEquivalentComparer()); Assert.Equal(aVal.SpecificRequirements.Count(), matchedRequirements.Count()); Assert.Equal(aVal.PortfolioRequirementsBySecurityType.ToList().Count, bVal.PortfolioRequirementsBySecurityType.ToList().Count); AssertEquivalent(aVal.DeltaDefinition, bVal.DeltaDefinition); }
public void CanGetUSDVolatilityCube(string currencyName) { const string cubeName = "BLOOMBERG"; var valueProperties = ValueProperties.Create(new Dictionary<string, ISet<string>> { { "Cube", new HashSet<string> { cubeName } } }, new HashSet<string>()); var viewCalculationConfiguration = new ViewCalculationConfiguration("Default", new[] { new ValueRequirement("VolatilityCubeMarketData", new ComputationTargetSpecification(ComputationTargetType.Primitive, Currency.Create(currencyName).UniqueId), valueProperties) }, new Dictionary<string, HashSet<Tuple<string, ValueProperties>>>()); var vdName = string.Join("-", TestUtils.GetUniqueName(), cubeName, currencyName); var defn = new ViewDefinition(vdName, new ResultModelDefinition(ResultOutputMode.TerminalOutputs), calculationConfigurationsByName: new Dictionary<string, ViewCalculationConfiguration> {{"Default", viewCalculationConfiguration}}, maxFullCalcPeriod:TimeSpan.FromSeconds(1)); using (var remoteClient = Context.CreateFinancialClient()) { var uid = remoteClient.ViewDefinitionRepository.AddViewDefinition(new AddViewDefinitionRequest(defn)); defn.UniqueID = uid; try { using (var remoteViewClient = Context.ViewProcessor.CreateClient()) { var viewComputationResultModels = remoteViewClient.GetResults(defn.UniqueID, new ExecutionOptions(new InfiniteViewCycleExecutionSequence(), ViewExecutionFlags.AwaitMarketData | ViewExecutionFlags.TriggersEnabled, null, new ViewCycleExecutionOptions(default(DateTimeOffset), new LiveMarketDataSpecification()))); int i = 0; foreach (var viewComputationResultModel in viewComputationResultModels) { if (viewComputationResultModel.AllLiveData.Any()) { var liveDataCount = viewComputationResultModel.AllLiveData.Count(); if (liveDataCount > 10 && liveDataCount == i) { var volatilityCubeData = (VolatilityCubeData) viewComputationResultModel.AllResults.Single().ComputedValue.Value; Assert.InRange(volatilityCubeData.DataPoints.Count, 1, int.MaxValue); Assert.InRange(volatilityCubeData.Strikes.Count, 1, int.MaxValue); Assert.Empty(volatilityCubeData.OtherData.DataPoints); var actual = volatilityCubeData.DataPoints.Count + volatilityCubeData.OtherData.DataPoints.Count + volatilityCubeData.Strikes.Count; Assert.InRange(actual, liveDataCount * 0.5, liveDataCount); //Allow 50% for PLAT-1383 var pays = volatilityCubeData.DataPoints.Where(k => k.Key.RelativeStrike < 0); var recvs = volatilityCubeData.DataPoints.Where(k => k.Key.RelativeStrike > 0); Assert.NotEmpty(pays); Assert.NotEmpty(volatilityCubeData.DataPoints.Where(k => k.Key.RelativeStrike == 0)); Assert.NotEmpty(recvs); foreach (var dataPoint in volatilityCubeData.DataPoints.Keys) { var strike = volatilityCubeData.Strikes[GetStrikeKey(dataPoint)]; Assert.True(strike > 0.0); } break; } i = liveDataCount; } } } } finally { remoteClient.ViewDefinitionRepository.RemoveViewDefinition(defn.Name); } } }
public static void AssertSensibleValue(ViewCalculationConfiguration calculationConfiguration) { AssertSensibleValue(calculationConfiguration.SpecificRequirements); AssertSensibleValue(calculationConfiguration.PortfolioRequirementsBySecurityType); AssertSensibleValue(calculationConfiguration.ResolutionRuleTransform); }
public void CanGetUSDVolatilityCube(string currencyName) { const string cubeName = "BLOOMBERG"; var valueProperties = ValueProperties.Create(new Dictionary <string, ISet <string> > { { "Cube", new HashSet <string> { cubeName } } }, new HashSet <string>()); var viewCalculationConfiguration = new ViewCalculationConfiguration("Default", new[] { new ValueRequirement("VolatilityCubeMarketData", new ComputationTargetSpecification(ComputationTargetType.Primitive, Currency.Create(currencyName).UniqueId), valueProperties) }, new Dictionary <string, HashSet <Tuple <string, ValueProperties> > >()); var vdName = string.Join("-", TestUtils.GetUniqueName(), cubeName, currencyName); var defn = new ViewDefinition(vdName, new ResultModelDefinition(ResultOutputMode.TerminalOutputs), calculationConfigurationsByName: new Dictionary <string, ViewCalculationConfiguration> { { "Default", viewCalculationConfiguration } }, maxFullCalcPeriod: TimeSpan.FromSeconds(1)); using (var remoteClient = Context.CreateFinancialClient()) { var uid = remoteClient.ViewDefinitionRepository.AddViewDefinition(new AddViewDefinitionRequest(defn)); defn.UniqueID = uid; try { using (var remoteViewClient = Context.ViewProcessor.CreateClient()) { var viewComputationResultModels = remoteViewClient.GetResults(defn.UniqueID, new ExecutionOptions(new InfiniteViewCycleExecutionSequence(), ViewExecutionFlags.AwaitMarketData | ViewExecutionFlags.TriggersEnabled, null, new ViewCycleExecutionOptions(default(DateTimeOffset), new LiveMarketDataSpecification()))); int i = 0; foreach (var viewComputationResultModel in viewComputationResultModels) { if (viewComputationResultModel.AllLiveData.Any()) { var liveDataCount = viewComputationResultModel.AllLiveData.Count(); if (liveDataCount > 10 && liveDataCount == i) { var volatilityCubeData = (VolatilityCubeData)viewComputationResultModel.AllResults.Single().ComputedValue.Value; Assert.InRange(volatilityCubeData.DataPoints.Count, 1, int.MaxValue); Assert.InRange(volatilityCubeData.Strikes.Count, 1, int.MaxValue); Assert.Empty(volatilityCubeData.OtherData.DataPoints); var actual = volatilityCubeData.DataPoints.Count + volatilityCubeData.OtherData.DataPoints.Count + volatilityCubeData.Strikes.Count; Assert.InRange(actual, liveDataCount * 0.5, liveDataCount); //Allow 50% for PLAT-1383 var pays = volatilityCubeData.DataPoints.Where(k => k.Key.RelativeStrike < 0); var recvs = volatilityCubeData.DataPoints.Where(k => k.Key.RelativeStrike > 0); Assert.NotEmpty(pays); Assert.NotEmpty(volatilityCubeData.DataPoints.Where(k => k.Key.RelativeStrike == 0)); Assert.NotEmpty(recvs); foreach (var dataPoint in volatilityCubeData.DataPoints.Keys) { var strike = volatilityCubeData.Strikes[GetStrikeKey(dataPoint)]; Assert.True(strike > 0.0); } break; } i = liveDataCount; } } } } finally { remoteClient.ViewDefinitionRepository.RemoveViewDefinition(defn.Name); } } }