コード例 #1
0
        /// <summary>
        /// Replaces a QuotedAssetSet with this. Note that the referential integrity between the assets
        /// and valuations is checked and maintained.
        /// </summary>
        /// <param name="additional">The additional QuotedAssetSet.</param>
        /// <returns></returns>
        public void Replace(QuotedAssetSet additional)
        {
            var qas = XmlSerializerHelper.Clone(additional);

            instrumentSet = qas.instrumentSet;
            assetQuote    = qas.assetQuote;
        }
コード例 #2
0
        public QuotedAssetSet Create()
        {
            var result = new QuotedAssetSet();
            var assets = new List <Asset>();
            var quotes = new List <BasicAssetValuation>();

            foreach (Pair <Asset, BasicAssetValuation> assetAndQuote in _assetAndQuotes)
            {
                assets.Add(assetAndQuote.First);
                quotes.Add(assetAndQuote.Second);
            }
            var instrumentSet = new InstrumentSet {
                Items = assets.ToArray()
            };

            result.instrumentSet = instrumentSet;
            result.assetQuote    = quotes.ToArray();
            return(result);
        }
コード例 #3
0
        /// <summary>
        /// Maps from a list of asset pairs to a quoted asset set.
        /// </summary>
        /// <param name="assetPairs"></param>
        /// <returns></returns>
        internal static QuotedAssetSet MapFromAssetPairs(List <Pair <Asset, BasicAssetValuation> > assetPairs)
        {
            var quotedAssetSet = new QuotedAssetSet();
            var assets         = new Asset[assetPairs.Count];
            var bavs           = new BasicAssetValuation[assetPairs.Count];
            var index          = 0;

            foreach (var pair in assetPairs)
            {
                assets[index] = pair.First;
                bavs[index]   = pair.Second;
                index++;
            }
            quotedAssetSet.assetQuote = bavs;
            var instrumentSet = new InstrumentSet {
                Items = assets.ToArray()
            };

            quotedAssetSet.instrumentSet = instrumentSet;
            return(quotedAssetSet);
        }
コード例 #4
0
        /// <summary>
        /// Merges a QuotedAssetSet with this. Note that the referential integrity between the assets
        /// and valuations is checked and maintained.
        /// </summary>
        /// <param name="additional">The additional QuotedAssetSet.</param>
        /// <param name="checkValuationAssetReferences">if set to <c>true</c> [check valuation asset references].</param>
        /// <param name="includeEmptyCurrentQuotes">if set to <c>true</c> [include empty current quotes].</param>
        /// <param name="includeEmptyAdditionalQuotes">if set to <c>true</c> [include empty additional quotes].</param>
        /// <returns></returns>
        public QuotedAssetSet Merge(QuotedAssetSet additional,
                                    bool checkValuationAssetReferences,
                                    bool includeEmptyCurrentQuotes,
                                    bool includeEmptyAdditionalQuotes)
        {
            var result = new QuotedAssetSet();
            // build unique instrumentSet and valuation quote lists
            var instrumentMap = new Dictionary <string, Asset>();
            var itemsMap      = new Dictionary <string, ItemsChoiceType19>();
            var valuationMap  = new Dictionary <string, BasicAssetValuation>();

            if (instrumentSet?.Items != null && instrumentSet.ItemsElementName != null)
            {
                if (instrumentSet.Items.Length == instrumentSet.ItemsElementName.Length)
                {
                    var index = 0;
                    foreach (Asset asset in instrumentSet.Items) //The asset type
                    {
                        string assetId = asset.id;
                        instrumentMap[assetId.ToLower()] = asset;
                        itemsMap[assetId.ToLower()]      = instrumentSet.ItemsElementName[index];
                        index++;
                    }
                }
            }
            if (assetQuote != null)
            {
                foreach (BasicAssetValuation currentValuation in assetQuote)
                {
                    string assetId = currentValuation.objectReference.href;
                    if (checkValuationAssetReferences)
                    {
                        if (!instrumentMap.TryGetValue(assetId.ToLower(), out _))
                        {
                            throw new ApplicationException($"Cannot find asset '{assetId}' for assetQuote");
                        }
                    }
                    // merge the quotes
                    if (valuationMap.TryGetValue(assetId.ToLower(), out var existingValuation))
                    {
                        //Trace.WriteLine(String.Format("Merge: Asset: '{0}' updating existing valuation", assetId);
                    }
                    else
                    {
                        // not found - create a new valuation
                        //Trace.WriteLine(String.Format("Merge: Asset: '{0}' creating existing valuation", assetId);
                        existingValuation = new BasicAssetValuation
                        {
                            objectReference = new AnyAssetReference {
                                href = assetId
                            },
                            quote = new List <BasicQuotation>().ToArray()
                        };
                        valuationMap[assetId.ToLower()] = existingValuation;
                    }
                    // append the asset quotes
                    var quotes = new List <BasicQuotation>(existingValuation.quote);
                    quotes.AddRange(currentValuation.quote.Where(quote => quote.valueSpecified || includeEmptyCurrentQuotes));
                    existingValuation.quote = quotes.ToArray();
                }
            }
            // add extra instruments
            if (additional.instrumentSet?.Items != null && additional.instrumentSet.ItemsElementName != null)
            {
                if (additional.instrumentSet.Items.Length == additional.instrumentSet.ItemsElementName.Length)
                {
                    var index = 0;
                    foreach (Asset asset in additional.instrumentSet.Items)
                    {
                        string assetId = asset.id;
                        if (!instrumentMap.ContainsKey(assetId.ToLower()))
                        {
                            instrumentMap[assetId.ToLower()] = asset;
                            itemsMap[assetId.ToLower()]      = additional.instrumentSet.ItemsElementName[index];
                            //Trace.WriteLine(String.Format("Merge: Additional asset: '{0}'", assetId);
                        }
                        index++;
                    }
                }
            }
            // append valuation quotes
            if (additional.assetQuote != null)
            {
                foreach (BasicAssetValuation additionalValuation in additional.assetQuote)
                {
                    string assetId = additionalValuation.objectReference.href;
                    if (checkValuationAssetReferences)
                    {
                        if (!instrumentMap.TryGetValue(assetId.ToLower(), out _))
                        {
                            throw new ApplicationException($"Cannot find asset '{assetId}' for assetQuote");
                        }
                    }
                    // merge the quotes
                    if (valuationMap.TryGetValue(assetId.ToLower(), out var existingValuation))
                    {
                        //Trace.WriteLine(String.Format("Merge: Asset: '{0}' updating additional valuation", assetId);
                    }
                    else
                    {
                        // not found - just add the valuation
                        existingValuation = new BasicAssetValuation
                        {
                            objectReference = new AnyAssetReference {
                                href = assetId
                            },
                            quote = new List <BasicQuotation>().ToArray()
                        };
                        valuationMap[assetId.ToLower()] = existingValuation;
                        //Trace.WriteLine(String.Format("Merge: Asset: '{0}' creating additional valuation", assetId);
                    }
                    // append the asset quotes
                    var quotes = new List <BasicQuotation>(existingValuation.quote);
                    quotes.AddRange(additionalValuation.quote.Where(quote => quote.valueSpecified || includeEmptyAdditionalQuotes));
                    existingValuation.quote = quotes.ToArray();
                }
            }
            var instSet = new InstrumentSet {
                Items = instrumentMap.Values.ToArray(), ItemsElementName = itemsMap.Values.ToArray()
            };

            result.instrumentSet = instSet;
            result.assetQuote    = valuationMap.Values.ToArray();
            return(result);
        }
コード例 #5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="quotedAssetSet"></param>
 /// <param name="instrumentId"></param>
 /// <returns></returns>
 public static List <BasicAssetValuation> GetAssetQuote(QuotedAssetSet quotedAssetSet, string instrumentId)
 {
     return(quotedAssetSet.assetQuote.Where(basicAssetValuation => basicAssetValuation.objectReference.href == instrumentId).ToList());
 }
コード例 #6
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="quotedAssetSet"></param>
 /// <returns></returns>
 public static Boolean QuotedAssetSetIsValid(QuotedAssetSet quotedAssetSet)
 {
     return(quotedAssetSet?.assetQuote != null && quotedAssetSet.instrumentSet?.Items != null && quotedAssetSet.instrumentSet.Items.Length == quotedAssetSet.assetQuote.Length);
 }