예제 #1
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);
        }
예제 #2
0
        /// <summary>
        /// Creates a vanilla fx option.
        /// </summary>
        /// <param name="buyerPartyReference"></param>
        /// <param name="sellerPartyReference"></param>
        /// <param name="fxEuropeanExercise"></param>
        /// <param name="soldAs"></param>
        /// <param name="fxCashSettlement"></param>
        /// <param name="putCurrencyAmount"></param>
        /// <param name="callCurrencyAmount"></param>
        /// <param name="fxStrikePrice"></param>
        /// <param name="valueDate"></param>
        /// <param name="premia"></param>
        /// <returns></returns>
        public static FxOption CreateVanillaFXOption(PartyReference buyerPartyReference,
                                                     PartyReference sellerPartyReference, FxEuropeanExercise fxEuropeanExercise,
                                                     PutCallEnum soldAs, FxCashSettlement fxCashSettlement,
                                                     //QuotedAs quotedAs, ExpiryDateTime expiryDate, ExerciseStyleEnum exerciseStyle,
                                                     NonNegativeMoney putCurrencyAmount, NonNegativeMoney callCurrencyAmount, FxStrikePrice fxStrikePrice,
                                                     DateTime valueDate, List <FxOptionPremium> premia)
        {
            var fxOption = new FxOption
            {
                putCurrencyAmount    = putCurrencyAmount,
                callCurrencyAmount   = callCurrencyAmount,
                strike               = fxStrikePrice,
                buyerPartyReference  = buyerPartyReference,
                sellerPartyReference = sellerPartyReference,
                premium              = premia.ToArray(),
                soldAs               = soldAs,
                cashSettlement       = fxCashSettlement,
                Item = fxEuropeanExercise
            };

            return(fxOption);
        }