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); }
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)); }
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)); }
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)); }
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 }); }
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 }); }
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)); }
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 }); }
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() }); }
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); }
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)); }
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)); }