public override ValueSpecification DeserializeImpl(IFudgeFieldContainer msg, IFudgeDeserializer deserializer)
        {
            string          valueName  = null;
            ValueProperties properties = null;

            foreach (var fudgeField in msg)
            {
                switch (fudgeField.Name)
                {
                case "valueName":
                    valueName = (string)fudgeField.Value;
                    break;

                case "properties":
                    properties = deserializer.FromField <ValueProperties>(fudgeField);
                    break;

                default:
                    break;
                }
            }

            var targetSpecification = new ComputationTargetSpecificationBuilder(deserializer.Context, typeof(ComputationTargetSpecification)).DeserializeImpl(msg, deserializer); //Can't register twice

            return(new ValueSpecification(valueName, targetSpecification, properties));
        }
Beispiel #2
0
        public ColumnHeader(string configuration, string valueName, ValueProperties requiredConstraints)
        {
            _configuration = configuration;
            _valueName     = valueName;

            _requiredConstraints = requiredConstraints;
        }
 public ViewCalculationConfiguration(string name, IEnumerable <ValueRequirement> specificRequirements, Dictionary <string, HashSet <Tuple <string, ValueProperties> > > portfolioRequirementsBySecurityType, DeltaDefinition deltaDefinition, ValueProperties defaultProperties, IResolutionRuleTransform resolutionRuleTransform)
 {
     ArgumentChecker.NotNull(deltaDefinition, "deltaDefinition");
     _name = name;
     _specificRequirements = specificRequirements;
     _portfolioRequirementsBySecurityType = portfolioRequirementsBySecurityType;
     _defaultProperties       = defaultProperties;
     _resolutionRuleTransform = resolutionRuleTransform;
     _deltaDefinition         = deltaDefinition;
 }
 public void TestOptionalValues()
 {
     AssertEncodeDecodeCycle(
         ValueProperties.Create(new Dictionary <string, ISet <string> >
     {
         { "OptAny", new HashSet <string>() },
         { "OptSome", new HashSet <string> {
               "a"
           } },
     }, new HashSet <string> {
         "OptAny", "OptSome"
     }));
 }
Beispiel #5
0
        public void UberView()
        {
            var      defn      = Context.ViewProcessor.ViewDefinitionRepository.GetViewDefinition("Mixed Instrument VaR View");
            UniqueId portfolio = defn.PortfolioIdentifier;

            var remoteAvailableOutputs = Context.RemoteAvailableOutputs;

            remoteAvailableOutputs.MaxNodes     = 2;
            remoteAvailableOutputs.MaxPositions = 2;

            var availableOutputs = remoteAvailableOutputs.GetPortfolioOutputs(portfolio);

            Assert.NotNull(availableOutputs);

            var valueNames = availableOutputs.SecurityTypes.ToDictionary(s => s, s => availableOutputs.GetPositionOutputs(s).Select(a => a.ValueName));

            foreach (var securityType in availableOutputs.SecurityTypes)
            {
                ICollection <AvailableOutput> positionOutputs = availableOutputs.GetPositionOutputs(securityType);
                foreach (var availableOutput in positionOutputs)
                {
                    Assert.Null(availableOutput.PortfolioNodeProperties);
                    Assert.True(new[] { securityType }.SequenceEqual(availableOutput.PositionProperties.Keys));
                    ValueProperties positionProperty = availableOutput.PositionProperties[securityType];
                    Assert.NotNull(positionProperty);
                    Assert.NotNull(positionProperty.GetValues("Function"));
                }
            }

            var viewCalculationConfiguration = GetDefaultCalculations(valueNames);
            var newDefn = new ViewDefinition(TestUtils.GetUniqueName(), portfolioIdentifier: portfolio, defaultCurrency: defn.DefaultCurrency, calculationConfigurationsByName: new Dictionary <string, ViewCalculationConfiguration> {
                { "Default", viewCalculationConfiguration }
            });

            using (var remoteClient = Context.CreateFinancialClient())
            {
                remoteClient.ViewDefinitionRepository.AddViewDefinition(new AddViewDefinitionRequest(newDefn));
                RemoteViewCycleTests.WithViewCycle(delegate(ViewDefinitionCompiledArgs comp, IViewCycle cycle, RemoteViewClient client)
                {
                    var allLiveData             = cycle.GetResultModel().AllLiveData;
                    var dependencyGraphExplorer = cycle.GetCompiledViewDefinition().GetDependencyGraphExplorer("Default");
                    var dependencyGraph         = dependencyGraphExplorer.GetWholeGraph();
                    var dependencyNodes         = dependencyGraph.DependencyNodes;
                    var valueSpecifications     = dependencyNodes.SelectMany(n => n.OutputValues).ToLookup(s => s).Select(g => g.Key).ToList();
                    Assert.NotEmpty(valueSpecifications);
                    var first = cycle.QueryComputationCaches(new ComputationCacheQuery("Default", valueSpecifications));
                    Assert.InRange(allLiveData.Count(), 1, valueSpecifications.Count);
                    Assert.InRange(first.Results.Count, allLiveData.Count() + 1, valueSpecifications.Count);
                }, defn.Name);
            }
        }
 public void TestValues()
 {
     AssertEncodeDecodeCycle(
         ValueProperties.Create(new Dictionary <string, ISet <string> >
     {
         { "Any", new HashSet <string>() },
         { "One", new HashSet <string> {
               "a"
           } },
         { "Two", new HashSet <string> {
               "b", "c"
           } },
     }, new HashSet <string> {
         "Three"
     }));
 }
Beispiel #7
0
        private static string GetPropertiesString(ValueProperties constraints)
        {
            if (constraints.IsEmpty)
            {
                return("No constraints");
            }

            var  sb            = new StringBuilder();
            bool firstProperty = true;

            foreach (string propertyName in constraints.Properties)
            {
                if (propertyName == "Function")
                {
                    continue;
                }
                if (firstProperty)
                {
                    firstProperty = false;
                }
                else
                {
                    sb.Append("; \n");
                }
                sb.Append(propertyName).Append("=");
                ISet <string> propertyValues = constraints.GetValues(propertyName);
                if (propertyValues.Count() == 0)
                {
                    sb.Append("[empty]");
                }
                else if (propertyValues.Count() == 1)
                {
                    sb.Append(propertyValues.Single());
                }
                else
                {
                    sb.Append("(");
                    sb.Append(string.Join(", ", propertyValues));
                    sb.Append(")");
                }
            }
            return(sb.ToString());
        }
Beispiel #8
0
        public void CanGetOutputs(ViewDefinition defn)
        {
            UniqueId portfolio = defn.PortfolioIdentifier;

            if (portfolio == null)
            {
                return;
            }
            var remoteAvailableOutputs = Context.RemoteAvailableOutputs;

            remoteAvailableOutputs.MaxNodes     = 2;
            remoteAvailableOutputs.MaxPositions = 2;
            var availableOutputs = remoteAvailableOutputs.GetPortfolioOutputs(portfolio);

            Assert.NotNull(availableOutputs);
            foreach (var securityType in availableOutputs.SecurityTypes)
            {
                ICollection <AvailableOutput> positionOutputs = availableOutputs.GetPositionOutputs(securityType);
                Assert.NotEmpty(positionOutputs);
                foreach (var availableOutput in positionOutputs)
                {
                    Assert.Null(availableOutput.PortfolioNodeProperties);
                    Assert.True(new[] { securityType }.SequenceEqual(availableOutput.PositionProperties.Keys));
                    ValueProperties positionProperty = availableOutput.PositionProperties[securityType];
                    Assert.NotNull(positionProperty);
                    Assert.NotNull(positionProperty.GetValues("Function"));
                }
            }

            ICollection <AvailableOutput> portfolioNodeOutputs = availableOutputs.GetPortfolioNodeOutputs();

            Assert.NotNull(portfolioNodeOutputs);
            foreach (var availableOutput in portfolioNodeOutputs)
            {
                Assert.Empty(availableOutput.PositionProperties);
                ValueProperties properties = availableOutput.PortfolioNodeProperties;
                Assert.NotNull(properties);
                Assert.NotNull(properties.GetValues("Function"));
            }
        }
Beispiel #9
0
        public override string ToString()
        {
            var stringBuilder = new StringBuilder();

            stringBuilder.Append($"ViewModel.{ModelProperty}.{ViewModelProperty}");

            switch (Mode)
            {
            case ViewModelToModelMode.Explicit:
                stringBuilder.Append(" <= explicit => ");
                break;

            case ViewModelToModelMode.OneWay:
                stringBuilder.Append(" <= ");
                break;

            case ViewModelToModelMode.OneWayToSource:
                stringBuilder.Append(" => ");
                break;

            case ViewModelToModelMode.TwoWay:
                stringBuilder.Append(" <=> ");
                break;
            }

            var property = ValueProperties.FirstOrDefault();

            if (ValueProperties.Length > 1)
            {
                property += $"+ {ValueProperties.Length}";
            }

            stringBuilder.Append($"{ModelPropertyType.Name}.{property}");

            return(stringBuilder.ToString());
        }
Beispiel #10
0
 public ValueRequirement(string valueName, ComputationTargetSpecification targetSpecification, ValueProperties constraints)
 {
     _valueName = string.Intern(valueName); //Should be small static set
     _constraints = constraints;
     _targetSpecification = targetSpecification;
 }
 public ViewCalculationConfiguration(string name, IEnumerable <ValueRequirement> specificRequirements, Dictionary <string, HashSet <Tuple <string, ValueProperties> > > portfolioRequirementsBySecurityType, DeltaDefinition deltaDefinition)
     : this(name, specificRequirements, portfolioRequirementsBySecurityType, deltaDefinition, ValueProperties.Create(), null)
 {
 }
Beispiel #12
0
 public static void AssertSensibleValue(ValueProperties props)
 {
     Assert.NotNull(props);
     Assert.True(props.IsEmpty || props.Properties.Count > 0);
 }
 public void TestNearlyAllProperties()
 {//PLAT-1126
     AssertEncodeDecodeCycle(ValueProperties.WithoutAny(new[] { "SomeProp" }));
 }
 public void TestEmptyProperties()
 {
     AssertEncodeDecodeCycle(ValueProperties.Create());
 }
        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);
                }
            }
        }
Beispiel #16
0
        private static ViewCalculationConfiguration GetDefaultCalculations(Dictionary <string, IEnumerable <string> > valueNames)
        {
            Dictionary <string, HashSet <Tuple <string, ValueProperties> > > portfolioRequirementsBySecurityType = valueNames.ToDictionary(k => k.Key, k => new HashSet <Tuple <string, ValueProperties> >(k.Value.Select(v => Tuple.Create(v, ValueProperties.Create()))));

            return(new ViewCalculationConfiguration("Default", new ValueRequirement[] { }, portfolioRequirementsBySecurityType));
        }