示例#1
0
        public static AsianSwap CreateTermAsianSwap(DateTime start, DateTime end, double strike, string assetId, Calendar fixingCalendar, DateTime payDate, Currency currency, TradeDirection tradeDirection = TradeDirection.Long, Frequency spotLag = new Frequency(), double notional = 1, DateGenerationType fixingDateType = DateGenerationType.BusinessDays)
        {
            var fixingDates = start == end ? new List <DateTime> {
                start
            } :
            fixingDateType == DateGenerationType.BusinessDays ?
            start.BusinessDaysInPeriod(end, fixingCalendar) :
            start.FridaysInPeriod(end, fixingCalendar);

            if (!fixingDates.Any() && start == end) //hack for bullet swaps where system returns fixing date on holiday
            {
                start = start.IfHolidayRollForward(fixingCalendar);
                end   = start;
                fixingDates.Add(start);
            }
            var swap = new AsianSwap
            {
                AssetId          = assetId,
                AverageStartDate = start,
                AverageEndDate   = end,
                FixingCalendar   = fixingCalendar,
                Strike           = strike,
                SpotLag          = spotLag,
                FixingDates      = fixingDates.ToArray(),
                PaymentDate      = payDate,
                PaymentCurrency  = currency,
                Direction        = tradeDirection,
                Notional         = notional,
                FxConversionType = currency.Ccy == "USD" ? FxConversionType.None : FxConversionType.AverageThenConvert
            };

            return(swap);
        }
示例#2
0
 public static AsianSwap CreateTermAsianSwap(string period, double strike, string assetId, Calendar fixingCalendar, Calendar payCalendar, Frequency payOffset, Currency currency, TradeDirection tradeDirection = TradeDirection.Long, Frequency spotLag = new Frequency(), double notional = 1, DateGenerationType fixingDateType = DateGenerationType.BusinessDays)
 {
     var(Start, End) = period.ParsePeriod();
     return(CreateTermAsianSwap(Start, End, strike, assetId, fixingCalendar, payCalendar, payOffset, currency, tradeDirection, spotLag, notional, fixingDateType));
 }
示例#3
0
        public static AsianSwap CreateTermAsianSwap(DateTime start, DateTime end, double strike, string assetId, Calendar fixingCalendar, Calendar payCalendar, Frequency payOffset, Currency currency, TradeDirection tradeDirection = TradeDirection.Long, Frequency spotLag = new Frequency(), double notional = 1, DateGenerationType fixingDateType = DateGenerationType.BusinessDays)
        {
            var payDate = end.AddPeriod(RollType.F, payCalendar, payOffset);

            return(CreateTermAsianSwap(start, end, strike, assetId, fixingCalendar, payDate, currency, tradeDirection, spotLag, notional, fixingDateType));
        }
示例#4
0
 public static BackPricingOption CreateBackPricingOption(string period, string assetId, OptionType putCall, Calendar fixingCalendar, Calendar payCalendar, Frequency payOffset, Currency currency, TradeDirection tradeDirection = TradeDirection.Long, Frequency spotLag = new Frequency(), double notional = 1, DateGenerationType fixingDateType = DateGenerationType.BusinessDays)
 {
     var(Start, End) = period.ParsePeriod();
     return(CreateBackPricingOption(Start, End, End, assetId, putCall, fixingCalendar, payCalendar, payOffset, currency, tradeDirection, spotLag, notional, fixingDateType));
 }
示例#5
0
        public static MultiPeriodBackpricingOption CreateMultiPeriodBackPricingOption(Tuple <DateTime, DateTime>[] periodDates, DateTime decision, string assetId, OptionType putCall, Calendar fixingCalendar, DateTime payDate, Currency currency, TradeDirection tradeDirection = TradeDirection.Long, Frequency spotLag = new Frequency(), double notional = 1, DateGenerationType fixingDateType = DateGenerationType.BusinessDays)
        {
            var fixingDates = fixingDateType == DateGenerationType.BusinessDays ?
                              periodDates.Select(pd => pd.Item1.BusinessDaysInPeriod(pd.Item2, fixingCalendar).ToArray()).ToList() :
                              periodDates.Select(pd => pd.Item1.FridaysInPeriod(pd.Item2, fixingCalendar).ToArray()).ToList();

            return(new MultiPeriodBackpricingOption
            {
                AssetId = assetId,
                PeriodDates = periodDates,
                DecisionDate = decision,
                FixingCalendar = fixingCalendar,
                FixingDates = fixingDates,
                SpotLag = spotLag,
                CallPut = putCall,
                PaymentDate = payDate,
                SettlementDate = payDate,
                PaymentCurrency = currency,
                Direction = tradeDirection,
                Notional = notional,
                FxConversionType = currency.Ccy == "USD" ? FxConversionType.None : FxConversionType.AverageThenConvert
            });
        }
示例#6
0
        public static BackPricingOption CreateBackPricingOption(DateTime start, DateTime end, DateTime decision, string assetId, OptionType putCall, Calendar fixingCalendar, DateTime payDate, Currency currency, TradeDirection tradeDirection = TradeDirection.Long, Frequency spotLag = new Frequency(), double notional = 1, DateGenerationType fixingDateType = DateGenerationType.BusinessDays)
        {
            var fixingDates = fixingDateType == DateGenerationType.BusinessDays ?
                              start.BusinessDaysInPeriod(end, fixingCalendar) :
                              start.FridaysInPeriod(end, fixingCalendar);

            return(new BackPricingOption
            {
                AssetId = assetId,
                StartDate = start,
                EndDate = end,
                DecisionDate = decision,
                FixingCalendar = fixingCalendar,
                FixingDates = fixingDates.ToArray(),
                SpotLag = spotLag,
                CallPut = putCall,
                PaymentDate = payDate,
                SettlementDate = payDate,
                PaymentCurrency = currency,
                Direction = tradeDirection,
                Notional = notional,
                FxConversionType = currency.Ccy == "USD" ? FxConversionType.None : FxConversionType.AverageThenConvert
            });
        }
示例#7
0
        public static BackPricingOption CreateBackPricingOption(DateTime start, DateTime end, DateTime decision, string assetId, OptionType putCall, Calendar fixingCalendar, Calendar payCalendar, Frequency payOffset, Currency currency, TradeDirection tradeDirection = TradeDirection.Long, Frequency spotLag = new Frequency(), double notional = 1, DateGenerationType fixingDateType = DateGenerationType.BusinessDays)
        {
            var payDate = end.AddPeriod(RollType.F, fixingCalendar, payOffset);

            return(CreateBackPricingOption(start, end, decision, assetId, putCall, fixingCalendar, payDate, currency, tradeDirection, spotLag, notional, fixingDateType));
        }
示例#8
0
        public static AsianOption CreateAsianOption(DateTime start, DateTime end, double strike, string assetId, OptionType putCall, Calendar fixingCalendar, DateTime payDate, Currency currency, TradeDirection tradeDirection = TradeDirection.Long, Frequency spotLag = new Frequency(), double notional = 1, DateGenerationType fixingDateType = DateGenerationType.BusinessDays)
        {
            var fixingDates = start == end?new List <DateTime> {
                start
            } :
            fixingDateType == DateGenerationType.BusinessDays ?
            start.BusinessDaysInPeriod(end, fixingCalendar) :
            start.FridaysInPeriod(end, fixingCalendar);

            return(new AsianOption
            {
                AssetId = assetId,
                AverageStartDate = start,
                AverageEndDate = end,
                FixingCalendar = fixingCalendar,
                Strike = strike,
                FixingDates = fixingDates.ToArray(),
                SpotLag = spotLag,
                CallPut = putCall,
                PaymentDate = payDate,
                PaymentCurrency = currency,
                Direction = tradeDirection,
                Notional = notional,
                FxConversionType = currency.Ccy == "USD" ? FxConversionType.None : FxConversionType.AverageThenConvert
            });
        }
示例#9
0
        public static AsianSwapStrip CreateMonthlyAsianSwap(DateTime start, DateTime end, double strike, string assetId, Calendar fixingCalendar, Calendar payCalendar, Frequency payOffset, Currency currency, TradeDirection tradeDirection = TradeDirection.Long, Frequency spotLag = new Frequency(), double notional = 1, DateGenerationType fixingDateType = DateGenerationType.BusinessDays)
        {
            var m        = start;
            var swaplets = new List <AsianSwap>();

            if (start.Month + start.Year * 12 == end.Month + end.Year * 12)
            {
                var fixingDates = fixingDateType == DateGenerationType.BusinessDays ?
                                  start.BusinessDaysInPeriod(end, fixingCalendar) :
                                  start.FridaysInPeriod(end, fixingCalendar);

                swaplets.Add(new AsianSwap
                {
                    AssetId          = assetId,
                    AverageStartDate = start,
                    AverageEndDate   = end,
                    FixingCalendar   = fixingCalendar,
                    Strike           = strike,
                    FixingDates      = fixingDates.ToArray(),
                    SpotLag          = spotLag,
                    PaymentCalendar  = payCalendar,
                    PaymentLag       = payOffset,
                    PaymentDate      = end.AddPeriod(RollType.F, fixingCalendar, payOffset),
                    PaymentCurrency  = currency,
                    Direction        = tradeDirection,
                    Notional         = notional,
                    FxConversionType = currency.Ccy == "USD" ? FxConversionType.None : FxConversionType.AverageThenConvert
                });
            }
            else
            {
                while ((m.Month + m.Year * 12) <= (end.Month + end.Year * 12))
                {
                    var fixingDates = fixingDateType == DateGenerationType.BusinessDays ?
                                      m.BusinessDaysInPeriod(m.LastDayOfMonth(), fixingCalendar) :
                                      m.FridaysInPeriod(m.LastDayOfMonth(), fixingCalendar);

                    swaplets.Add(new AsianSwap
                    {
                        AssetId          = assetId,
                        AverageStartDate = m,
                        AverageEndDate   = m.LastDayOfMonth(),
                        FixingCalendar   = fixingCalendar,
                        Strike           = strike,
                        FixingDates      = fixingDates.ToArray(),
                        SpotLag          = spotLag,
                        PaymentCalendar  = payCalendar,
                        PaymentLag       = payOffset,
                        PaymentDate      = m.LastDayOfMonth().AddPeriod(RollType.F, fixingCalendar, payOffset),
                        PaymentCurrency  = currency,
                        Direction        = tradeDirection,
                        Notional         = notional,
                        FxConversionType = currency.Ccy == "USD" ? FxConversionType.None : FxConversionType.AverageThenConvert
                    });
                    m = m.LastDayOfMonth().AddDays(1);
                }
            }
            return(new AsianSwapStrip {
                Swaplets = swaplets.ToArray()
            });
        }
示例#10
0
        public static AsianBasisSwap CreateTermAsianBasisSwap(DateTime start, DateTime end, double strike, string assetIdPay, string assetIdRec, Calendar fixingCalendarPay, Calendar fixingCalendarRec, DateTime payDate, Currency currency, Frequency spotLagPay = new Frequency(), Frequency spotLagRec = new Frequency(), double notionalPay = 1, double notionalRec = 1, DateGenerationType fixingDateType = DateGenerationType.BusinessDays)
        {
            var swapPay = CreateTermAsianSwap(start, end, -strike, assetIdPay, fixingCalendarPay, payDate, currency, TradeDirection.Long, spotLagPay, notionalPay);
            var swapRec = CreateTermAsianSwap(start, end, 0, assetIdRec, fixingCalendarRec, payDate, currency, TradeDirection.Short, spotLagRec, notionalRec);

            var swap = new AsianBasisSwap
            {
                PaySwaplets = new [] { swapPay },
                RecSwaplets = new [] { swapRec },
            };

            return(swap);
        }
示例#11
0
        public static AsianBasisSwap CreateTermAsianBasisSwap(DateTime start, DateTime end, double strike, string assetIdPay, string assetIdRec, Calendar fixingCalendarPay, Calendar fixingCalendarRec, Calendar payCalendar, Frequency payOffset, Currency currency, Frequency spotLagPay = new Frequency(), Frequency spotLagRec = new Frequency(), double notionalPay = 1, double notionalRec = 1, DateGenerationType fixingDateType = DateGenerationType.BusinessDays)
        {
            var payDate = end.AddPeriod(RollType.F, payCalendar, payOffset);

            return(CreateTermAsianBasisSwap(start, end, strike, assetIdPay, assetIdRec, fixingCalendarPay, fixingCalendarRec, payDate, currency, spotLagPay, spotLagRec, notionalPay, notionalRec, fixingDateType));
        }
示例#12
0
 public static AsianBasisSwap CreateTermAsianBasisSwap(string period, double strike, string assetIdPay, string assetIdRec, Calendar fixingCalendarPay, Calendar fixingCalendarRec, Calendar payCalendar, Frequency payOffset, Currency currency, Frequency spotLagPay = new Frequency(), Frequency spotLagRec = new Frequency(), double notionalPay = 1, double notionalRec = 1, DateGenerationType fixingDateType = DateGenerationType.BusinessDays)
 {
     var(Start, End) = period.ParsePeriod();
     return(CreateTermAsianBasisSwap(Start, End, strike, assetIdPay, assetIdRec, fixingCalendarPay, fixingCalendarRec, payCalendar, payOffset, currency, spotLagPay, spotLagRec, notionalPay, notionalRec, fixingDateType));
 }