/// <summary>
        /// A helper to extract properties from a namedvalueset..
        /// </summary>
        /// <param name="propertyCollection">The collection of properties.</param>
        public static QuotedCurrencyPair ExtractQuotedCurrencyPair(NamedValueSet propertyCollection)
        {
            var dictionaryKeys = propertyCollection.ToDictionary();

            string currencyPair = "AUD-USD";

            if (dictionaryKeys.ContainsKey(CurveProp.CurrencyPair))
            {
                currencyPair = propertyCollection.Get(CurveProp.CurrencyPair).AsValue <string>();
            }
            else
            {
                if (dictionaryKeys.ContainsKey(CurveProp.CurveName))
                {
                    var curveName = ExtractCurveName(propertyCollection);

                    try
                    {
                        currencyPair = curveName;
                    }
                    catch (System.Exception)
                    {
                        throw new System.Exception("CurveName property is not valid.");
                    }
                }
            }
            var pair = currencyPair.Split('-');

            var quoteBasis = ExtractQuoteBasis(propertyCollection);

            return(QuotedCurrencyPair.Create(pair[0], pair[1], quoteBasis));
        }
        //public static Market CreateYieldCurveConfiguration(string curveId, string[] assetIdentifiers)
        //{
        //    var market = new Market {id = curveId};

        //    //Create the quotedAssetSet.
        //    var qas = QuotedAssetSetFactory.Parse(assetIdentifiers);

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

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

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

        //    return market;
        //}

        public static Market CreateFxCurveConfiguration(string curveId, string currency1, string currency2, string quoteBasis, FxRateSet quotedAssetSet)
        {
            //<QuoteBasisEnum>
            var basis = EnumHelper.Parse <QuoteBasisEnum>(quoteBasis, true);
            var quotedCurrencyPair = QuotedCurrencyPair.Create(currency1, currency2, basis);
            var currency           = CurrencyHelper.Parse(currency1);
            var market             = new Market {
                id = curveId
            };

            //Create the curve information.
            var curve = new FxCurve {
                id = curveId, name = curveId, currency = currency, quotedCurrencyPair = quotedCurrencyPair
            };

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

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

            return(market);
        }
 private void SetProperties(QuoteBasisEnum quoteBasis)
 {
     QuotedCurrencyPair            = PropertyHelper.ExtractQuotedCurrencyPair(Properties);
     QuotedCurrencyPair.quoteBasis = quoteBasis;
     CurveName        = $"{Currency.Value}-{QuoteCurrency.Value}";
     UniqueIdentifier = BuildUniqueId();
     Id = BuildId();
 }
示例#4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="currency1"></param>
        /// <param name="currency2"></param>
        /// <param name="quoteBasis"></param>
        /// <returns></returns>
        public static QuotedCurrencyPair Create(string currency1, string currency2, QuoteBasisEnum quoteBasis)
        {
            var quotedCurrencyPair = new QuotedCurrencyPair
            {
                currency1  = Parse(currency1),
                currency2  = Parse(currency2),
                quoteBasis = quoteBasis
            };

            return(quotedCurrencyPair);
        }
示例#5
0
        /// <summary>
        /// A helper to extract properties from a named value set.
        /// </summary>
        /// <param name="properties">The collection of properties.</param>
        public static QuotedCurrencyPair ExtractQuotedCurrencyPair(NamedValueSet properties)
        {
            string currency      = ExtractCurrency(properties);
            string quoteCurrency = ExtractCurrency2(properties);

            if (string.IsNullOrEmpty(currency) || string.IsNullOrEmpty(quoteCurrency))
            {
                string currencyPair = properties.GetString(CurveProp.CurrencyPair, false);
                if (!string.IsNullOrEmpty(currencyPair))
                {
                    if (!GetCurrencyPair(currencyPair, out currency, out quoteCurrency))
                    {
                        throw new ArgumentException("Currency pair is invalid, it should be of the type XXX-YYY");
                    }
                }
                else
                {
                    currencyPair = properties.GetString("CurveName", false);
                    if (!string.IsNullOrEmpty(currencyPair))
                    {
                        if (!GetCurrencyPair(currencyPair, out currency, out quoteCurrency))
                        {
                            throw new ArgumentException("CurveName is invalid, it should be of the type XXX-YYY");
                        }
                    }
                    else
                    {
                        string id = properties.GetString("Identifier", false);
                        if (!string.IsNullOrEmpty(currencyPair) && id.Split('.').Length < 2)
                        {
                            currencyPair = id.Split('.').Last();
                            if (!GetCurrencyPair(currencyPair, out currency, out quoteCurrency))
                            {
                                throw new ArgumentException("Identifier is invalid, it should be of the type XXX-YYY");
                            }
                        }
                        else
                        {
                            throw new ArgumentException("Mandatory field CurrencyPair or QuoteCurrency, not set.");
                        }
                    }
                }
            }
            QuoteBasisEnum quoteBasis = ExtractQuoteBasis(properties);

            return(QuotedCurrencyPair.Create(currency, quoteCurrency, quoteBasis));
        }
示例#6
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="outputQuote"></param>
 public void SetValueDirection(QuotedCurrencyPair outputQuote)
 {
     throw new NotImplementedException();
 }
示例#7
0
        /// <summary>
        /// Creates a vanilla fx option.
        /// </summary>
        /// <param name="buyerPartyReference"></param>
        /// <param name="sellerPartyReference"></param>
        /// <param name="soldAs"></param>
        /// <param name="period"> </param>
        /// <param name="expiryDate"></param>
        /// <param name="expiryBusinessCenter"> </param>
        /// <param name="cutName"> </param>
        /// <param name="isCashSettled"></param>
        /// <param name="settlementCurrency"></param>
        /// <param name="fixingDate"></param>
        /// <param name="quotedCurrencyPair"></param>
        /// <param name="putCurrencyAmount"></param>
        /// <param name="putCurrency"></param>
        /// <param name="callCurrencyAmount"></param>
        /// <param name="spotRate"></param>
        /// <param name="callCurrency"></param>
        /// <param name="strikeQuoteBasis"></param>
        /// <param name="valueDate"></param>
        /// <param name="strikePrice"></param>
        /// <param name="premia"></param>
        /// <param name="time"> </param>
        /// <returns></returns>
        public static FxOption CreateVanillaOption(string buyerPartyReference, string sellerPartyReference, PutCallEnum?soldAs, string period,
                                                   DateTime expiryDate, DateTime time, string expiryBusinessCenter, CutName cutName, decimal putCurrencyAmount, string putCurrency,
                                                   decimal callCurrencyAmount, string callCurrency, StrikeQuoteBasisEnum strikeQuoteBasis, DateTime valueDate, Decimal strikePrice, decimal?spotRate,
                                                   bool isCashSettled, Currency settlementCurrency, DateTime?fixingDate, QuotedCurrencyPair quotedCurrencyPair, List <FxOptionPremium> premia)
        {
            CutName cut = null;

            if (cutName != null)
            {
                cut = new CutName {
                    Value = cutName.Value
                };
            }
            var expiryDateTime = new FxEuropeanExercise
            {
                expiryDate = expiryDate,
                expiryTime =
                    new BusinessCenterTime
                {
                    hourMinuteTime = time,
                    businessCenter = new BusinessCenter {
                        Value = expiryBusinessCenter
                    }
                },
                cutName            = cut,
                valueDate          = valueDate,
                valueDateSpecified = true
            };

            FxOptionPremium[] premiumValues = null;
            if (premia != null)
            {
                premiumValues = premia.ToArray();
            }
            var fxOption = new FxOption
            {
                Items = new object[] { new ProductType {
                                           Value = ProductTypeSimpleEnum.FxOption.ToString()
                                       } },
                ItemsElementName   = new[] { ItemsChoiceType2.productType },
                putCurrencyAmount  = MoneyHelper.GetNonNegativeAmount(putCurrencyAmount, putCurrency),
                callCurrencyAmount = MoneyHelper.GetNonNegativeAmount(callCurrencyAmount, callCurrency),
                strike             =
                    new FxStrikePrice {
                    rate = strikePrice, rateSpecified = true, strikeQuoteBasis = strikeQuoteBasis, strikeQuoteBasisSpecified = true
                },
                buyerPartyReference  = PartyReferenceFactory.Create(buyerPartyReference),
                sellerPartyReference =
                    PartyReferenceFactory.Create(sellerPartyReference),
                premium = premiumValues,
                Item    = expiryDateTime,
            };

            if (spotRate != null)
            {
                fxOption.spotRate          = (decimal)spotRate;
                fxOption.spotRateSpecified = true;
            }
            if (period != null)
            {
                var tenorPeriod = PeriodHelper.Parse(period);
                fxOption.tenorPeriod = tenorPeriod;
            }
            if (soldAs != null)
            {
                fxOption.soldAs          = (PutCallEnum)soldAs;
                fxOption.soldAsSpecified = true;
            }
            if (isCashSettled)
            {
                fxOption.cashSettlement = new FxCashSettlement {
                    settlementCurrency = settlementCurrency
                };
                var fxFixing = new FxFixing();
                if (fixingDate != null)
                {
                    fxFixing.fixingDate          = (DateTime)fixingDate;
                    fxFixing.fixingDateSpecified = true;
                }
                fxFixing.quotedCurrencyPair    = quotedCurrencyPair;
                fxOption.cashSettlement.fixing = new [] { fxFixing };
            }
            return(fxOption);
        }
示例#8
0
        public static Trade CreateVanillaFxOption(string tradeId, DateTime tradeDate, string buyerPartyReference, string sellerPartyReference, //FxOptionType optionType,
                                                  PutCallEnum?soldAs, string period, DateTime expiryDate, DateTime time, string expiryBusinessCenter,
                                                  CutName cutName, decimal putCurrencyAmount, string putCurrency, decimal callCurrencyAmount,
                                                  string callCurrency, StrikeQuoteBasisEnum strikeQuoteBasis, DateTime valueDate, Decimal strikePrice, decimal?spotRate,
                                                  bool isCashSettled, Currency settlementCurrency, DateTime?fixingDate, QuotedCurrencyPair quotedCurrencyPair, List <FxOptionPremium> premia)
        {
            var trade = new Trade {
                id = tradeId, tradeHeader = new TradeHeader()
            };
            var party1 = PartyTradeIdentifierHelper.Parse(tradeId, "party1");
            var party2 = PartyTradeIdentifierHelper.Parse(tradeId, "party2");

            trade.tradeHeader.partyTradeIdentifier = new[] { party1, party2 };
            trade.tradeHeader.tradeDate            = new IdentifiedDate {
                Value = tradeDate
            };
            FxOption fxOption = CreateVanillaOption(buyerPartyReference, sellerPartyReference, soldAs,
                                                    period, expiryDate, time, expiryBusinessCenter, cutName, putCurrencyAmount, putCurrency, callCurrencyAmount, callCurrency,
                                                    strikeQuoteBasis, valueDate, strikePrice, spotRate, isCashSettled, settlementCurrency, fixingDate, quotedCurrencyPair, premia);

            FpMLFieldResolver.TradeSetFxOptionLeg(trade, fxOption);
            return(trade);
        }