Esempio n. 1
0
        protected List <BasicAssetValuation> ConvertProviderResultsToStandardValuations(
            Dictionary <string, BasicQuotation> providerResults,
            RequestContext requestContext)
        {
            var results = new List <BasicAssetValuation>();

            // build standard results (and convert quote units)
            Logger.LogDebug("    Results     :");
            for (int i = 0; i < requestContext.RequestItems.Count; i++)
            {
                RequestItem         requestItem       = requestContext.RequestItems[i];
                Asset               standardAsset     = requestItem.StandardAsset;
                BasicQuotation      standardQuote     = requestItem.StandardQuote;
                string              standardInstrId   = standardAsset.id;
                string              standardFieldId   = standardQuote.GetStandardFieldName();
                PriceQuoteUnitsEnum standardQuoteUnit = requestItem.StandardUnits;
                PriceQuoteUnitsEnum providerQuoteUnit = requestItem.ProviderUnits;
                string              providerInstrId   = requestContext.InstrConversionMap[standardInstrId.ToLower()];
                string              providerFieldId   = requestContext.FieldConversionMap[standardFieldId.ToLower()];
                string              providerQuoteKey  = FormatProviderQuoteKey(providerInstrId, providerFieldId);
                if (providerResults.TryGetValue(providerQuoteKey, out var providerQuote))
                {
                    BasicQuotation convertedQuote;
                    if (providerQuote.valueSpecified)
                    {
                        // valid value returned
                        decimal convertedValue = PriceQuoteUnitsHelper.ConvertPriceQuoteUnitsValue(providerQuoteUnit, standardQuoteUnit, providerQuote.value);
                        convertedQuote = BasicQuotationHelper.Create(standardQuote, convertedValue);
                        // debug
                        Logger.LogDebug("      [{0}] '{1}/{2}' ({3}/{4}) [{5}] --> '{6}/{7}' ({8}/{9}) [{10}]", i,
                                        providerInstrId, providerFieldId, AssetMeasureEnum.MarketQuote, providerQuoteUnit, providerQuote.value,
                                        standardInstrId, standardFieldId, AssetMeasureEnum.MarketQuote, standardQuoteUnit, convertedQuote.value);
                        // end debug
                    }
                    else
                    {
                        // no value - copy error details
                        convertedQuote = providerQuote;
                        // debug
                        Logger.LogDebug("      [{0}] '{1}/{2}' ({3}/{4}) [{5}] --> '{6}/{7}' ({8}/{9}) [{10}]", i,
                                        providerInstrId, providerFieldId, providerQuote.measureType.Value, providerQuote.quoteUnits.Value, providerQuote.value,
                                        standardInstrId, standardFieldId, convertedQuote.measureType.Value, convertedQuote.quoteUnits.Value, convertedQuote.value);
                        // end debug
                    }
                    // add other provider info
                    convertedQuote.timeSpecified          = providerQuote.timeSpecified;
                    convertedQuote.time                   = providerQuote.time;
                    convertedQuote.valuationDateSpecified = providerQuote.valuationDateSpecified;
                    convertedQuote.valuationDate          = providerQuote.valuationDate;
                    convertedQuote.informationSource      = providerQuote.informationSource;
                    results.Add(new BasicAssetValuation {
                        objectReference = new AnyAssetReference {
                            href = standardAsset.id
                        },
                        quote = new[] { convertedQuote }
                    });
                }
            }
            return(results);
        }
Esempio n. 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="commodityType"></param>
        /// <param name="commodityDetails"></param>
        /// <param name="currency"></param>
        /// <param name="multiplier"></param>
        /// <param name="specifiedPrice"></param>
        /// <param name="deliveryDateRollConvention"></param>
        /// <param name="priceQuoteUnits"></param>
        /// <param name="deliveryDates"></param>
        /// <param name="exchangeId"></param>
        /// <param name="informationSource"></param>
        /// <returns></returns>
        public static Commodity Create(string commodityType, string commodityDetails, string currency, int multiplier, SpecifiedPriceEnum specifiedPrice,
                                       Offset deliveryDateRollConvention, PriceQuoteUnitsEnum priceQuoteUnits, DeliveryDatesEnum deliveryDates, string exchangeId, string informationSource)
        {
            var commodity = new Commodity
            {
                currency = new Currency {
                    Value = currency
                },
                commodityBase = new CommodityBase {
                    Value = commodityType
                },
                commodityDetails = new CommodityDetails {
                    Value = commodityDetails
                },
                deliveryDateRollConvention = deliveryDateRollConvention,
                Item1                   = deliveryDates,
                multiplier              = multiplier,
                multiplierSpecified     = true,
                specifiedPriceSpecified = true,
                unit           = new QuantityUnit(),
                specifiedPrice = specifiedPrice
            };

            commodity.unit.Value = priceQuoteUnits.ToString();
            if (exchangeId != null)
            {
                commodity.Item = ExchangeIdHelper.Parse(exchangeId);
            }
            else
            {
                commodity.Item = InformationSourceHelper.Create(informationSource);
            }
            return(commodity);
        }
 public static PriceQuoteUnits Create(PriceQuoteUnitsEnum quoteUnits)
 {
     return(new PriceQuoteUnits
     {
         Value = quoteUnits.ToString()
     });
 }
Esempio n. 4
0
 public static BasicQuotation Create(AssetMeasureEnum measureType, PriceQuoteUnitsEnum priceUnits, string sideAsString)
 {
     ParseQuotationSideEnum(sideAsString, out var sideSpecified, out var side);
     return(new BasicQuotation
     {
         valueSpecified = false,
         measureType = AssetMeasureTypeHelper.Create(measureType),
         quoteUnits = PriceQuoteUnitsHelper.Create(priceUnits),
         sideSpecified = sideSpecified,
         side = side
     });
 }
Esempio n. 5
0
        public static PriceQuoteUnits Parse(string quoteUnitsAsString)
        {
            PriceQuoteUnitsEnum quoteUnitsEnum = PriceQuoteUnitsEnum.Undefined;

            if (quoteUnitsAsString != null)
            {
                quoteUnitsEnum = PriceQuoteUnitsScheme.ParseEnumString(quoteUnitsAsString);
            }
            return(new PriceQuoteUnits {
                Value = quoteUnitsEnum.ToString()
            });
        }
Esempio n. 6
0
 private void AddUnitsMap(int priority, MDSRequestType requestType, string sourcePattern, PriceQuoteUnitsEnum targetUnits)
 {
     _rules.Locked(rules => rules.Add(new MapRule(
                                          MDSDictionaryType.QuoteUnits,
                                          MDSProviderId.GlobalIB, _provider,
                                          requestType,
                                          priority,
                                          sourcePattern, targetUnits.ToString())));
 }
        /// <summary>
        /// Converts the price quote value between source/target units.
        /// </summary>
        /// <param name="sourceUnits">The source units.</param>
        /// <param name="targetUnits">The target units.</param>
        /// <param name="sourceValue">The source value.</param>
        /// <returns></returns>
        public static decimal ConvertPriceQuoteUnitsValue(PriceQuoteUnitsEnum sourceUnits, PriceQuoteUnitsEnum targetUnits, decimal sourceValue)
        {
            if (targetUnits == sourceUnits)
            {
                // no conversion required
                return(sourceValue);
            }

            // convert source value to normalised value
            decimal normalValue = sourceValue;

            switch (sourceUnits)
            {
            // normalised units that do not need conversion
            case PriceQuoteUnitsEnum.DecimalRate:
            case PriceQuoteUnitsEnum.DecimalSpread:
                break;

            // other units that require conversion
            case PriceQuoteUnitsEnum.InverseDecimalRate:     // to DecimalRate
                normalValue = (1.0M / sourceValue);
                break;

            case PriceQuoteUnitsEnum.RateSpread:     // to DecimalSpread
                normalValue = (sourceValue / 10000.0M);
                break;

            case PriceQuoteUnitsEnum.Rate:     // to DecimalRate
                normalValue = (sourceValue / 100.0M);
                break;

            case PriceQuoteUnitsEnum.IRFuturesPrice:     // to DecimalRate
                normalValue = ((100.0M - sourceValue) / 100.0M);
                break;

            default:     // conversion not supported/implemented
                throw new NotSupportedException($"Cannot convert value ({sourceValue}) from units ({sourceUnits})");
            }

            // convert normalised value to target value
            decimal targetValue = normalValue;

            switch (targetUnits)
            {
            // normalised units that do not need conversion
            case PriceQuoteUnitsEnum.DecimalRate:
            case PriceQuoteUnitsEnum.DecimalSpread:
                break;

            // other units that require conversion
            case PriceQuoteUnitsEnum.InverseDecimalRate:     // from DecimalRate
                targetValue = (1.0M / normalValue);
                break;

            case PriceQuoteUnitsEnum.RateSpread:     // from DecimalSpread
                normalValue = (normalValue * 10000.0M);
                break;

            case PriceQuoteUnitsEnum.Rate:     // from DecimalRate
                targetValue = (normalValue * 100.0M);
                break;

            case PriceQuoteUnitsEnum.IRFuturesPrice:     // from DecimalRate
                targetValue = (100.0M - (normalValue * 100.0M));
                break;

            default:     // conversion not supported/implemented
                throw new NotSupportedException($"Cannot convert value ({normalValue}) to units ({targetUnits})");
            }
            return(targetValue);
        }
Esempio n. 8
0
 public static BasicQuotation Create(decimal value, AssetMeasureEnum assetMeasureEnum, PriceQuoteUnitsEnum priceQuoteUnitsEnum)
 {
     return(new BasicQuotation
     {
         valueSpecified = true,
         value = value,
         measureType = new AssetMeasureType {
             Value = AssetMeasureScheme.GetEnumString(assetMeasureEnum)
         },
         quoteUnits = new PriceQuoteUnits {
             Value = PriceQuoteUnitsScheme.GetEnumString(priceQuoteUnitsEnum)
         }
     });
 }