Example #1
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(ICollection <Pair <Asset, BasicAssetValuation> > assetPairs)
        {
            var quotedAssetSet       = new QuotedAssetSet();
            var assets               = new Asset[assetPairs.Count];
            var basicAssetValuations = new BasicAssetValuation[assetPairs.Count];
            var types = new List <ItemsChoiceType19>();
            var index = 0;

            foreach (var pair in assetPairs)
            {
                assets[index] = pair.First;
                basicAssetValuations[index] = pair.Second;
                var properties    = new PriceableAssetProperties(assets[index].id);
                var assetTypeFpML = AssetTypeConvertor.ParseEnumStringToFpML(properties.AssetType.ToString());
                types.Add(assetTypeFpML);
                index++;
            }
            quotedAssetSet.assetQuote = basicAssetValuations;
            var instrumentSet = new InstrumentSet {
                Items = assets.ToArray(), ItemsElementName = types.ToArray()
            };

            quotedAssetSet.instrumentSet = instrumentSet;
            return(quotedAssetSet);
        }
        public DataTable GetDataTable()
        {
            if (null != _lastQuotedAssetSet)
            {
                foreach (DataRow dataRow in _dataTable.Rows)
                {
                    var instrumentId = (string)dataRow["InstrumentId"];
                    List <BasicAssetValuation> basicAssetValuations =
                        QuotedAssetSet.GetAssetQuote(_lastQuotedAssetSet, instrumentId);
                    if (basicAssetValuations.Count > 0)
                    {
                        BasicAssetValuation bav0 = basicAssetValuations[0];
                        foreach (DataColumn dataColumn in _dataTable.Columns)
                        {
                            string         columnName     = dataColumn.ColumnName;
                            BasicQuotation basicQuotation = BasicAssetValuationHelper.GetQuotationByTiming(bav0, columnName);
                            if (null != basicQuotation)
                            {
                                dataRow[columnName] = basicQuotation.value;
                            }
                        }
                    }
                }
            }
            _dataTable.AcceptChanges();
            DataTable copy = _dataTable.Copy();

            //  remove "InstrumentId" column
            //
            copy.Columns.Remove("InstrumentId");
            copy.AcceptChanges();
            return(copy);
        }
        public QuotedAssetSet Create()
        {
            var result = new QuotedAssetSet();
            var assets = new List <Asset>();
            var quotes = new List <BasicAssetValuation>();
            var types  = new List <ItemsChoiceType19>();

            foreach (Pair <Asset, BasicAssetValuation> assetAndQuote in _assetAndQuotes)
            {
                assets.Add(assetAndQuote.First);
                quotes.Add(assetAndQuote.Second);
                //Handles the case of tenor curves
                var id            = assetAndQuote.First?.id ?? assetAndQuote.Second?.objectReference?.href;
                var properties    = new PriceableAssetProperties(id);
                var assetTypeFpML = AssetTypeConvertor.ParseEnumStringToFpML(properties.AssetType.ToString());
                types.Add(assetTypeFpML);
            }
            var instrumentSet = new InstrumentSet {
                Items = assets.ToArray(), ItemsElementName = types.ToArray()
            };

            result.instrumentSet = instrumentSet;
            result.assetQuote    = quotes.ToArray();
            return(result);
        }
Example #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RateBasisCurve"/> class.
 /// </summary>
 /// <param name="logger">The logger.</param>
 /// <param name="cache">The cache.</param>
 ///  <param name="nameSpace">The client namespace</param>
 /// <param name="underlyingAsset">THe underlying asset used for security.</param>
 /// <param name="referenceCurve">The reference parent curveid.</param>
 /// <param name="spreadAssets">The spreads by asset.</param>
 /// <param name="properties">The properties of the new spread curve.</param>
 /// <param name="fixingCalendar">The fixingCalendar.</param>
 /// <param name="rollCalendar">The rollCalendar.</param>
 public SecuredRateBasisCurve(ILogger logger, ICoreCache cache, string nameSpace, Asset underlyingAsset,
                              IRateCurve referenceCurve, QuotedAssetSet spreadAssets, NamedValueSet properties,
                              IBusinessCalendar fixingCalendar, IBusinessCalendar rollCalendar)
     : base(logger, cache, nameSpace, referenceCurve, spreadAssets, properties, fixingCalendar, rollCalendar)
 {
     UnderlyingAsset = underlyingAsset;
 }
Example #5
0
 public void TestMDSBloomberg()
 {
     // test basic start, request snapshot, and stop functions
     // - create a MDS client with direct connection to provider
     using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true)))
     {
         IModuleInfo clientInfo = new V131ModuleInfo(new V131ClientInfo());
         using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv(BuildConst.BuildEnv).Create())
         {
             const string curveName  = "Orion.V5r3.Configuration.PricingStructures.QR_LIVE.RateCurve.AUD-BBR-BBSW-3M";
             ICoreItem    marketItem = client.LoadItem <Market>(curveName);
             if (marketItem == null)
             {
                 throw new ApplicationException("Market '" + curveName + "' not found!");
             }
             var market = (Market)marketItem.Data;
             //PricingStructure ps = market.Items[0];
             PricingStructureValuation psv            = market.Items1[0];
             QuotedAssetSet            quotedAssetSet = ((YieldCurveValuation)psv).inputs;
             using (IMarketDataClient mdc = new MarketDataRealtimeClient(
                        loggerRef, null, client,
                        MDSProviderId.Bloomberg))//MDSProviderId.GlobalIB
             {
                 QuotedAssetSet data = mdc.GetMarketQuotes(
                     MDSProviderId.Bloomberg, clientInfo, Guid.NewGuid(), true,
                     null,
                     quotedAssetSet).Result;
                 Assert.IsNotNull(data);
             }
         }
     }
 }
Example #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RateBasisCurve"/> class.
        /// </summary>
        /// <param name="logger">The logger.</param>
        /// <param name="cache">The cache.</param>
        ///  <param name="nameSpace">The client namespace</param>
        /// <param name="baseDiscountingCurve">The reference curve.</param>
        /// <param name="clearedRateAssets">The cleared rate asset.</param>
        /// <param name="properties">The properties of the new spread curve.</param>
        /// <param name="fixingCalendar">The fixingCalendar.</param>
        /// <param name="rollCalendar">The rollCalendar.</param>
        public ClearedRateCurve(ILogger logger, ICoreCache cache, string nameSpace,
                                IRateCurve baseDiscountingCurve, QuotedAssetSet clearedRateAssets, NamedValueSet properties,
                                IBusinessCalendar fixingCalendar, IBusinessCalendar rollCalendar)
            : base(logger, cache, nameSpace, new RateCurveIdentifier(properties), fixingCalendar, rollCalendar)
        {
            PricingStructureData        = new PricingStructureData(CurveType.Child, AssetClass.Rates, properties);
            BaseDiscountingCurve        = baseDiscountingCurve;
            ReferenceDiscountingCurveId = BaseDiscountingCurve.GetPricingStructureId();
            if (PricingStructureIdentifier.PricingStructureType != PricingStructureTypeEnum.ClearedRateCurve)
            {
                return;
            }
            var termCurve  = SetConfigurationData();
            var curveId    = GetRateCurveId();
            var indexTenor = curveId.ForecastRateIndex?.indexTenor;

            //Set the priceable assets.
            PriceableClearedRateAssets = PriceableAssetFactory.CreatePriceableClearedRateAssetsWithBasisSwaps(logger, cache, nameSpace, indexTenor, clearedRateAssets, PricingStructureIdentifier.BaseDate, fixingCalendar, rollCalendar);
            termCurve.point            = ClearedRateBootstrapper.Bootstrap(PriceableClearedRateAssets, BaseDiscountingCurve, curveId.BaseDate, termCurve.extrapolationPermitted,
                                                                           termCurve.interpolationMethod, Tolerance);
            CreatePricingStructure(curveId, termCurve, clearedRateAssets);
            // CreatePricingStructure(curveId, termCurve, PriceableAssetFactory.Parse(PriceableClearedRateAssets));
            // Interpolate the DiscountFactor curve based on the respective curve interpolation
            SetInterpolator(termCurve);
        }
Example #7
0
 protected virtual void OnPublishMarketData(
     Guid requestId,
     NamedValueSet requestParams,
     TimeSpan dataLifetime,
     QuotedAssetSet marketDataSet)
 {
     throw new NotSupportedException("This provider (" + ProviderId.ToString() + ") does not support the OnPublishMarketData method!");
 }
 public static Boolean QuotedAssetSetIsValid(QuotedAssetSet quotedAssetSet)
 {
     return(quotedAssetSet != null &&
            quotedAssetSet.assetQuote != null &&
            quotedAssetSet.instrumentSet != null &&
            quotedAssetSet.instrumentSet.Items != null &&
            quotedAssetSet.instrumentSet.Items.Length == quotedAssetSet.assetQuote.Length);
 }
Example #9
0
 public void PublishMarketData(
     IModuleInfo clientInfo,
     Guid requestId,
     NamedValueSet requestParams,
     TimeSpan dataLifetime,
     QuotedAssetSet marketDataSet)
 {
     OnPublishMarketData(requestId, requestParams, dataLifetime, marketDataSet);
 }
Example #10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RateSpreadCurve"/> class.
 /// </summary>
 /// <param name="logger">The logger.</param>
 /// <param name="cache">The cache.</param>
 ///  <param name="nameSpace">The client namespace</param>
 /// <param name="referenceCurve">The reference parent curve id.</param>
 /// <param name="spreadAssets">The spreads by asset.</param>
 /// <param name="properties">The properties of the new spread curve.</param>
 /// <param name="fixingCalendar">The fixingCalendar.</param>
 /// <param name="rollCalendar">The rollCalendar.</param>
 public RateSpreadCurve(ILogger logger, ICoreCache cache, string nameSpace,
                        IRateCurve referenceCurve, QuotedAssetSet spreadAssets, NamedValueSet properties,
                        IBusinessCalendar fixingCalendar, IBusinessCalendar rollCalendar)
     : base(logger, cache, nameSpace, ProcessQuotedAssetSet(logger, cache, nameSpace, referenceCurve, spreadAssets, properties, fixingCalendar, rollCalendar), properties, fixingCalendar, rollCalendar)
 {
     PricingStructureData = new PricingStructureData(CurveType.Child, AssetClass.Rates, properties);
     BaseCurve            = referenceCurve;
     ReferenceCurveId     = BaseCurve.GetPricingStructureId();
 }
Example #11
0
 protected virtual MDSResult <QuotedAssetSet> OnRequestMarketData(
     IModuleInfo clientInfo,
     Guid requestId,
     MDSRequestType requestType,
     NamedValueSet requestParams,
     DateTimeOffset subsExpires,
     QuotedAssetSet standardQuotedAssetSet)
 {
     throw new NotSupportedException("This provider (" + ProviderId + ") does not support the OnRequestMarketData method!");
 }
Example #12
0
 protected override MDSResult <QuotedAssetSet> OnRequestMarketData(
     IModuleInfo clientInfo,
     Guid requestId,
     MDSRequestType requestType,
     NamedValueSet requestParams,
     DateTimeOffset subsExpires,
     QuotedAssetSet standardQuotedAssetSet)
 {
     return(RunBloombergRequest(clientInfo, requestId, requestParams, MDSRequestType.Current, DateTimeOffset.Now, standardQuotedAssetSet));
 }
Example #13
0
 public void StartRealtimeFeed(
     IModuleInfo clientInfo,
     Guid subscriptionId,
     NamedValueSet requestParams,
     QuotedAssetSet instruments,
     TimeSpan subsLifetime,
     AsyncQueueCallback <QuotedAssetSet> callback)
 {
     _mds.StartRealtimeFeed(
         clientInfo, subscriptionId, requestParams, instruments, subsLifetime, callback);
 }
Example #14
0
 public MDSResult <QuotedAssetSet> GetMarketQuotes(
     MDSProviderId provider,
     IModuleInfo clientInfo,
     Guid requestId,
     bool throwOnError,
     NamedValueSet requestParams,
     QuotedAssetSet instruments)
 {
     // construct market data request
     return(_mds.GetMarketQuotes(
                provider, clientInfo, requestId, throwOnError, requestParams, instruments));
 }
        /// <summary>
        /// Handles the case of tenor curves
        /// </summary>
        /// <returns></returns>
        public QuotedAssetSet CreateTenorSet()
        {
            var result = new QuotedAssetSet();
            var quotes = new List <BasicAssetValuation>();

            foreach (Pair <Asset, BasicAssetValuation> assetAndQuote in _assetAndQuotes)
            {
                quotes.Add(assetAndQuote.Second);
            }
            result.instrumentSet = null;
            result.assetQuote    = quotes.ToArray();
            return(result);
        }
Example #16
0
        private void AddBaseCurveInputs(List <BasicAssetValuation> assetQuotes)
        {
            QuotedAssetSet baseCurveInputs = ((YieldCurveValuation)BaseCurve?.GetFpMLData().Second)?.inputs;

            if (baseCurveInputs?.assetQuote != null)
            {
                foreach (BasicAssetValuation assetQuote in baseCurveInputs.assetQuote)
                {
                    BasicAssetValuation clonedAssetQuote = XmlSerializerHelper.Clone(assetQuote);
                    clonedAssetQuote.definitionRef = BaseCurveName;
                    assetQuotes.Add(clonedAssetQuote);
                }
            }
        }
        public void AddQuotedAssetSet(QuotedAssetSet quotedAssetSet)
        {
            quotedAssetSet = BinarySerializerHelper.Clone(quotedAssetSet);

            //_lastQuotedAssetSet = quotedAssetSet;
            if (null == _lastQuotedAssetSet)
            {
                _lastQuotedAssetSet = quotedAssetSet;
            }
            else
            {
                MergeQuotedAssetSet(quotedAssetSet);
            }
        }
Example #18
0
 private void RemoveMarketQuoteValues(QuotedAssetSet marketData)
 {
     // strip out market quote values
     foreach (var item in marketData.assetQuote)
     {
         foreach (var quote in item.quote)
         {
             if (quote.measureType.Value != "MarketQuote")
             {
                 continue;
             }
             quote.valueSpecified = false;
             quote.value          = 0.0m;
         }
     }
 }
Example #19
0
 public MDSResult <QuotedAssetSet> RequestMarketQuotes(
     IModuleInfo clientInfo,
     Guid requestId,
     NamedValueSet requestParams,
     MDSRequestType requestType,
     DateTimeOffset subsExpires,
     QuotedAssetSet standardQuotedAssetSet)
 {
     Logger.LogDebug("{0}.RequestMarketQuotes", GetType().Name);
     Logger.LogDebug("  Inputs:");
     Logger.LogDebug("    Request Id  : {0}", requestId);
     Logger.LogDebug("    Request Type: {0}", requestType);
     Logger.LogDebug("    Other params: {0}", requestParams.Serialise());
     return(OnRequestMarketData(
                clientInfo, requestId, requestType, requestParams, subsExpires, standardQuotedAssetSet));
 }
Example #20
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RateBasisCurve"/> class.
 /// </summary>
 /// <param name="logger">The logger.</param>
 /// <param name="cache">The cache.</param>
 ///  <param name="nameSpace">The client namespace</param>
 /// <param name="referenceCurve">The reference parent curve id.</param>
 /// <param name="spreadAssets">The spreads by asset.</param>
 /// <param name="properties">The properties of the new spread curve.</param>
 /// <param name="fixingCalendar">The fixingCalendar.</param>
 /// <param name="rollCalendar">The rollCalendar.</param>
 public RateBasisCurve(ILogger logger, ICoreCache cache, string nameSpace,
                       IRateCurve referenceCurve, QuotedAssetSet spreadAssets, NamedValueSet properties,
                       IBusinessCalendar fixingCalendar, IBusinessCalendar rollCalendar)
     : base(logger, cache, nameSpace, ProcessQuotedAssetSet(logger, cache, nameSpace, referenceCurve, spreadAssets, properties, fixingCalendar, rollCalendar), properties, fixingCalendar, rollCalendar)
 {
     PricingStructureData = new PricingStructureData(CurveType.Child, AssetClass.Rates, properties);
     BaseCurve            = referenceCurve;
     ReferenceCurveId     = BaseCurve.GetPricingStructureId();
     if (PricingStructureIdentifier.PricingStructureType != PricingStructureTypeEnum.RateBasisCurve)
     {
         return;
     }
     //Set the spread sets.
     PriceableRateSpreadAssets = PriceableAssetFactory.CreatePriceableRateSpreadAssets(logger, cache, nameSpace, PricingStructureIdentifier.BaseDate, spreadAssets, fixingCalendar, rollCalendar);
     Build(logger, cache, nameSpace, fixingCalendar, rollCalendar);
 }
Example #21
0
 private void LogResults(ILogger logger, QuotedAssetSet results)
 {
     foreach (BasicAssetValuation instrument in results.assetQuote)
     {
         logger.LogDebug("{0}:", instrument.objectReference.href);
         foreach (BasicQuotation field in instrument.quote)
         {
             logger.LogDebug("  '{0}' ({1}/{2}) = {3} (as at {4}) (received {5})",
                             (field.timing != null) ? field.timing.Value : "Last", // side (null=last)
                             field.measureType.Value,                              // usually "MarketQuote" unless error
                             field.quoteUnits.Value,                               // usually "Rate" unless error
                             field.valueSpecified ? field.value.ToString(CultureInfo.InvariantCulture) : "#N/A",
                             field.valuationDateSpecified ? field.valuationDate.ToShortTimeString() : "???",
                             field.timeSpecified ? field.time.ToShortTimeString() : "???");
         }
     }
 }
Example #22
0
 private static void LogResults(ILogger logger, QuotedAssetSet results)
 {
     foreach (BasicAssetValuation instrument in results.assetQuote)
     {
         logger.LogDebug("{0}:", instrument.objectReference.href);
         foreach (BasicQuotation field in instrument.quote)
         {
             logger.LogDebug("  '{0}' ({1}/{2}) = {3} [Source:{4},Recd:{5}]",
                             field.GetStandardFieldName(), // field name
                             field.measureType.Value,      // usually "MarketQuote" unless error
                             field.quoteUnits.Value,       // usually "Rate" unless error
                             field.valueSpecified ? field.value.ToString(CultureInfo.InvariantCulture) : "#N/A",
                             ProviderName(field.informationSource),
                             //field.valuationDateSpecified ? field.valuationDate.ToShortTimeString() : "???",
                             field.timeSpecified ? field.time.ToShortTimeString() : "???");
         }
     }
 }
Example #23
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;
            quotedAssetSet.instrumentSet = assets;

            return(quotedAssetSet);
        }
        //  Assumption - QAS contains one BAV with one BQ
        //
        private static void MergeQuotedAssetSet(QuotedAssetSet quotedAssetSet)
        {
            BasicAssetValuation bavNew = quotedAssetSet.assetQuote[0];
            BasicQuotation      bqNew  = bavNew.quote[0];
            string newInstrumentId     = bavNew.objectReference.href;
            List <BasicAssetValuation> basicAssetValuationsOldWithTheSameIdAsNew = QuotedAssetSet.GetAssetQuote(_lastQuotedAssetSet, newInstrumentId);

            if (basicAssetValuationsOldWithTheSameIdAsNew.Count == 0)
            {
                //  Add
                //
                var temp = new List <BasicAssetValuation>(_lastQuotedAssetSet.assetQuote)
                {
                    bavNew
                };
                _lastQuotedAssetSet.assetQuote = temp.ToArray();
            }
            else
            {
                //update
                BasicAssetValuation bavOld = basicAssetValuationsOldWithTheSameIdAsNew[0];
                bool bqUpdated             = false;
                foreach (BasicQuotation bqOld in bavOld.quote)
                {
                    if (bqNew.timing.Value == bqOld.timing.Value)
                    {
                        bqOld.value = bqNew.value;

                        bqUpdated = true;
                        break;
                    }
                }
                if (!bqUpdated)
                {
                    //  Add
                    //
                    var tempBQ = new List <BasicQuotation>(bavOld.quote)
                    {
                        bqNew
                    };
                    bavOld.quote = tempBQ.ToArray();
                }
            }
        }
Example #25
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);
        }
        public static Market CreateYieldCurveConfiguration(string curveId, QuotedAssetSet quotedAssetSet)
        {
            var market = new Market {
                id = curveId
            };

            //Create the curve information.
            var curve = new YieldCurve {
                id = curveId
            };

            //reate the valuation structure that contains qas.
            var curveValuation = new YieldCurveValuation {
                id = curveId, inputs = quotedAssetSet
            };

            //Set the market.
            market.Items  = new[] { (PricingStructure)curve };
            market.Items1 = new[] { (PricingStructureValuation)curveValuation };

            return(market);
        }
Example #27
0
        protected override MDSResult <QuotedAssetSet> OnRequestPricingStructure(
            IModuleInfo clientInfo,
            Guid requestId,
            MDSRequestType requestType,
            NamedValueSet requestParams,
            DateTimeOffset subsExpires,
            NamedValueSet structureParams)
        {
            var combinedResult = new QuotedAssetSet();
            var debugRequest   = requestParams.GetValue <bool>("DebugRequest", false);

            Client.DebugRequests = debugRequest;
            IExpression           query           = Expr.BoolAND(structureParams);
            List <QuotedAssetSet> providerResults = Client.LoadObjects <QuotedAssetSet>(query);

            Client.DebugRequests = false;
            // merge multiple results
            combinedResult = providerResults.Aggregate(combinedResult, (current, providerResult) => current.Merge(providerResult, false, true, true));
            return(new MDSResult <QuotedAssetSet>
            {
                Result = combinedResult
            });
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="RateXccySpreadCurve"/> class,
        /// by applying spreads to an existing RateCurve. Using FX Curve to create synthetic swaps
        /// for the period under 1Y.
        /// </summary>
        /// <param name="logger">The logger.</param>
        /// <param name="cache">The cache.</param>
        /// <param name="nameSpace">THe client namespace</param>
        /// <param name="properties">The properties of the new curve. One of the mandatory properties for this curve type:
        /// CutOverTerm, is the tenor at which point all Fx Curve points are removed form the RateXccyCurve bootstrap.
        /// Normally this is 1Y.</param>
        /// <param name="currency1Curve">The base zero curve.</param>
        /// <param name="fxCurve">The FX curve, used for constructing synthetic deposits. The fx points map from the base curve to the non-base curve.</param>
        /// <param name="currency2Curve">The non-Base Curve.</param>
        /// <param name="spreadInstruments">The spread instruments and their values.</param>
        /// <param name="fixingCalendar">The fixingCalendar.</param>
        /// <param name="rollCalendar">The rollCalendar.</param>
        public RateXccySpreadCurve(ILogger logger, ICoreCache cache, String nameSpace, NamedValueSet properties, RateCurve currency1Curve, IFxCurve fxCurve,
                                   RateCurve currency2Curve, QuotedAssetSet spreadInstruments, IBusinessCalendar fixingCalendar, IBusinessCalendar rollCalendar)
            : base(logger, cache, nameSpace, new RateCurveIdentifier(properties))
        {
            //Set the base curve.
            BaseCurve        = currency1Curve;
            ReferenceCurveId = BaseCurve.GetPricingStructureId();
            //PricingStructureIdentifier = new RateCurveIdentifier(properties);
            Currency2Curve = currency2Curve;
            //Get the cut-over date.
            var cutOverTerm = properties.GetValue <string>("CutOverTerm");

            if (cutOverTerm != null)
            {
                CutOverTerm = PeriodHelper.Parse(cutOverTerm);
            }
            //set the fx curve.
            ReferenceFxCurve     = fxCurve;
            IsCurrency1RateCurve = properties.GetValue <bool>("Currency1RateCurve");
            //Check the pricing structure type.
            var pricingStructureId = (RateCurveIdentifier)PricingStructureIdentifier;

            if (pricingStructureId.PricingStructureType != PricingStructureTypeEnum.RateXccyCurve ||
                ReferenceFxCurve == null)
            {
                return;
            }
            //There must be a valid quoted asset set in order to bootstrap.
            if (!XsdClassesFieldResolver.QuotedAssetSetIsValid(spreadInstruments))
            {
                return;
            }
            PriceableRateSpreadAssets =
                PriceableAssetFactory.CreatePriceableRateSpreadAssets(logger, cache, nameSpace, pricingStructureId.BaseDate, spreadInstruments, fixingCalendar, rollCalendar);
            Build(logger, cache, nameSpace, fixingCalendar, rollCalendar);
        }
Example #29
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RateBasisCurve"/> class.
 /// </summary>
 /// <param name="logger">The logger.</param>
 /// <param name="cache">The cache.</param>
 ///  <param name="nameSpace">The client namespace</param>
 /// <param name="properties">The properties.</param>
 /// <param name="refCurve">The reference parent curve id.</param>
 /// <param name="spreadValueSet">The spread ValueSet.</param>
 /// <param name="fixingCalendar">The fixingCalendar.</param>
 /// <param name="rollCalendar">The rollCalendar.</param>
 public RateBasisCurve(ILogger logger, ICoreCache cache, string nameSpace, NamedValueSet properties, IPricingStructure refCurve, QuotedAssetSet spreadValueSet,
                       IBusinessCalendar fixingCalendar, IBusinessCalendar rollCalendar)
     : base(logger, cache, nameSpace, AdjustMarketQuotes(spreadValueSet, refCurve.GetFpMLData(), PropertyHelper.ExtractUniqueCurveIdentifier(properties)), properties,
            fixingCalendar, rollCalendar)
 {
     PricingStructureData = new PricingStructureData(CurveType.Child, AssetClass.Rates, properties);
     ReferenceCurveId     = refCurve.GetPricingStructureId();
 }
Example #30
0
        protected override MDSResult <QuotedAssetSet> OnRequestMarketData(
            IModuleInfo clientInfo,
            Guid requestId,
            MDSRequestType requestType,
            NamedValueSet requestParams,
            DateTimeOffset subsExpires,
            QuotedAssetSet standardQuotedAssetSet)
        {
            // process request parameters
            RequestProperties requestProperties = ProcessRequestParams(requestParams);

            // process the asset/quote lists to produce 1 or more instrument/field matrices
            RequestContext requestContext = ConvertStandardAssetQuotesToProviderInstrFieldCodes(requestType, standardQuotedAssetSet);

            // process the instr/field code sets
            var results = new List <BasicAssetValuation>();

            foreach (ProviderInstrFieldCodeSet instrFieldCodeSet in requestContext.ProviderInstrFieldCodeSets)
            {
                var providerResults = new Dictionary <string, BasicQuotation>();
                // simulated reply
                var rng = new Random();
                //List<BasicAssetValuation> results = new List<BasicAssetValuation>();
                foreach (string t in instrFieldCodeSet.InstrumentIds)
                {
                    var quote = new BasicAssetValuation
                    {
                        objectReference =
                            new AnyAssetReference {
                            href = t
                        },
                        quote = new BasicQuotation[instrFieldCodeSet.FieldNames.Count]
                    };
                    foreach (string t1 in instrFieldCodeSet.FieldNames)
                    {
                        var providerQuote = new BasicQuotation
                        {
                            measureType =
                                new AssetMeasureType
                            {
                                Value = AssetMeasureEnum.MarketQuote.ToString()
                            },
                            quoteUnits =
                                new PriceQuoteUnits
                            {
                                Value = PriceQuoteUnitsEnum.Rate.ToString()
                            },
                            value          = Convert.ToDecimal(rng.NextDouble() * 10.0),
                            valueSpecified = true
                        };
                        // field value
                        // simulator returns a random decimal value
                        // field done
                        string providerQuoteKey = FormatProviderQuoteKey(t, t1);
                        providerResults[providerQuoteKey] = providerQuote;
                    }
                }

                // process provider results
                //Dictionary<string, BasicQuotation> providerResults = BuildProviderResultsIndex(pages);
                results.AddRange(ConvertProviderResultsToStandardValuations(providerResults, requestContext));
            }
            return(new MDSResult <QuotedAssetSet>
            {
                Result = new QuotedAssetSet {
                    assetQuote = results.ToArray()
                }
            });
        }