Пример #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PriceableCEROption"/> class.
        /// </summary>
        /// <param name="baseDate">The base date.</param>
        /// <param name="nodeStruct">The nodeStruct.</param>
        /// <param name="rollCalendar">THe rollCalendar.</param>
        /// <param name="fixedRate"></param>
        public PriceableCEROption(DateTime baseDate, CommodityFutureNodeStruct nodeStruct,
                                  IBusinessCalendar rollCalendar, BasicQuotation fixedRate)
            : base(baseDate, nodeStruct, rollCalendar, fixedRate)
        {
            Id              = nodeStruct.Future.id;
            Future          = nodeStruct.Future;
            ModelIdentifier = "CommoditiesFuturesOptionAsset";
            var idParts = Id.Split('-');
            var exchangeCommodityName = idParts[2];
            var immCode = idParts[3];
            int intResult;

            //Catch the relative rolls.
            if (int.TryParse(immCode, out intResult))
            {
                var tempTradingDate = LastTradingDayHelper.ParseCode(immCode);
                immCode = tempTradingDate.GetNthMainCycleCode(baseDate, intResult);
            }
            var lastTradingDay = LastTradingDayHelper.Parse(exchangeCommodityName, immCode);

            LastTradeDate     = lastTradingDay.GetLastTradingDay(baseDate);
            RiskMaturityDate  = LastTradeDate;
            OptionsExpiryDate = LastTradeDate;
            TimeToExpiry      = (decimal)DayCounter.YearFraction(BaseDate, RiskMaturityDate);
        }
Пример #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PriceableCER"/> class.
        /// </summary>
        /// <param name="baseDate">The base date.</param>
        /// <param name="nodeStruct">The nodeStruct.</param>
        /// <param name="rollCalendar">THe rollCalendar.</param>
        /// <param name="fixedRate"></param>
        public PriceableCER(DateTime baseDate, CommodityFutureNodeStruct nodeStruct,
                            IBusinessCalendar rollCalendar, BasicQuotation fixedRate)
            : base(baseDate, nodeStruct.Future, nodeStruct.BusinessDayAdjustments, fixedRate, null)
        {
            Id                  = nodeStruct.Future.id;
            Future              = nodeStruct.Future;
            PriceQuoteUnits     = nodeStruct.PriceQuoteUnits;
            ModelIdentifier     = "CommoditiesFuturesAsset";
            SettlementBasis     = "The business day prior to the 15th calendar day of the contract month";
            ContractMonthPeriod = nodeStruct.ContractMonthPeriod;
            ContractSeries      = "March (H), May (K), July (N), September (U) & December (Z)";
            var idParts = Id.Split('-');
            var exchangeCommodityNames = idParts[2].Split('.');
            var commodityCode          = exchangeCommodityNames[0];

            if (exchangeCommodityNames.Length > 1)
            {
                commodityCode = exchangeCommodityNames[1];
            }
            var immCode = idParts[3];

            //Catch the relative rolls.
            if (int.TryParse(immCode, out var intResult))
            {
                var tempTradingDate = LastTradingDayHelper.ParseCode(commodityCode);
                immCode = tempTradingDate.GetNthMainCycleCode(baseDate, intResult);
            }
            var lastTradingDay = LastTradingDayHelper.Parse(commodityCode, immCode);

            LastTradeDate    = lastTradingDay.GetLastTradingDay(baseDate);
            RiskMaturityDate = LastTradeDate;
            TimeToExpiry     = (decimal)DayCounter.YearFraction(BaseDate, RiskMaturityDate);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="PriceableIceBrentFuture"/> class.
        /// </summary>
        /// <param name="baseDate">The base date.</param>
        /// <param name="nodeStruct">The nodeStruct.</param>
        /// <param name="rollCalendar">THe rollCalendar.</param>
        /// <param name="fixedRate"></param>
        public PriceableIceBrentFuture(DateTime baseDate, CommodityFutureNodeStruct nodeStruct,
                                       IBusinessCalendar rollCalendar, BasicQuotation fixedRate)
            : base(baseDate, nodeStruct.Future, nodeStruct.BusinessDayAdjustments, fixedRate, new Offset
        {
            dayType         = DayTypeEnum.Business, dayTypeSpecified = true, period = PeriodEnum.D, periodMultiplier = "0",
            periodSpecified = true
        })
        {
            Id              = nodeStruct.Future.id;
            Future          = nodeStruct.Future;
            PriceQuoteUnits = nodeStruct.PriceQuoteUnits;
            ModelIdentifier = "CommoditiesFuturesAsset";
            SettlementBasis = "EFP Delivery with an option to cash settle.";
            ContractSeries  = "Monthly";
            var idParts = Id.Split('-');
            //var exchangeCommodityName = idParts[2];
            var immCode = idParts[3];
            int intResult;

            //Only the relative rolls.
            if (int.TryParse(immCode, out intResult))
            {
                var lastTradingDay = new FirstDayLessFifteen().GetNthLastTradingDay(baseDate, intResult);
                //Do the date adjustment logic.
                LastTradeDate = rollCalendar.Advance(lastTradingDay, RollOffset,
                                                     BusinessDayConventionEnum.PRECEDING);
                RiskMaturityDate = LastTradeDate;
                TimeToExpiry     = (decimal)DayCounter.YearFraction(BaseDate, RiskMaturityDate);
            }
        }
Пример #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PriceableLMEFuture"/> class.
        /// </summary>
        /// <param name="baseDate">The base date.</param>
        /// <param name="nodeStruct">The nodeStruct.</param>
        /// <param name="rollCalendar">THe rollCalendar.</param>
        /// <param name="fixedRate"></param>
        public PriceableLMEFuture(DateTime baseDate, CommodityFutureNodeStruct nodeStruct,
                                  IBusinessCalendar rollCalendar, BasicQuotation fixedRate)
            : base(baseDate, nodeStruct.Future, nodeStruct.BusinessDayAdjustments, fixedRate, new Offset
        {
            dayType         = DayTypeEnum.Business, dayTypeSpecified = true, period = PeriodEnum.D, periodMultiplier = "0",
            periodSpecified = true
        })
        {
            Id                  = nodeStruct.Future.id;
            CommodityType       = Future.description;
            Future              = nodeStruct.Future;
            PriceQuoteUnits     = nodeStruct.PriceQuoteUnits;
            ModelIdentifier     = "CommoditiesFuturesAsset";
            SettlementBasis     = "EFP Delivery with an option to cash settle.";
            ContractMonthPeriod = nodeStruct.ContractMonthPeriod;
            ContractSeries      = "Daily:3M/Weekly:6M/Monthly:" + ContractMonthPeriod.ToString();
            ExchangeIdentifier  = nodeStruct.Future.exchangeId.Value;
            var idParts = Id.Split('-');
            var immCode = idParts[3];

            if (int.TryParse(immCode, out int intResult))
            {
                //If the roll is less that 3M then daily roll.
                //Less the number of business days in the next 3 months i.e. approximately 60.
                //TODO This hsould be all moved to configuration!
                var dailyCutoverOffset = new Offset
                {
                    dayType          = DayTypeEnum.Calendar,
                    dayTypeSpecified = true,
                    period           = PeriodEnum.M,
                    periodMultiplier = "3",
                    periodSpecified  = true
                };
                var dailyCutoverDate = rollCalendar.Advance(BaseDate, dailyCutoverOffset, BusinessDayConventionEnum.MODFOLLOWING);
                var businessDays     = rollCalendar.BusinessDaysBetweenDates(BaseDate, dailyCutoverDate);
                if (intResult <= businessDays.Count)
                {
                    LastTradeDate = businessDays[intResult];
                }
                //TODO
                //If the roll is greater than 3M and less than 6M then weekly on a Wednesday.
                //Less the number of weeks in the following 3 months i.e. approximately 12
                //
                else
                {
                    //Remember thefirst expiry is after the 3 motn cutover!
                    //TODO this should be the 6 ContractMonthPeriod.
                    var rollDate       = baseDate.AddMonths(intResult - businessDays.Count + 3);
                    var lastTradingDay = new LastTradingDate().GetLastTradingDay(rollDate.Month, rollDate.Year);
                    //Do the date adjustment logic.
                    LastTradeDate = rollCalendar.Advance(lastTradingDay, RollOffset,
                                                         BusinessDayConventionEnum.PRECEDING);
                }
            }
            //This means that the value should be a period.
            else
            {
                var term = PeriodHelper.Parse(immCode);
                LastTradeDate = GetEffectiveDate(BaseDate, rollCalendar, term, nodeStruct.BusinessDayAdjustments.businessDayConvention);
            }
            RiskMaturityDate = LastTradeDate;
            TimeToExpiry     = (decimal)DayCounter.YearFraction(BaseDate, RiskMaturityDate);
        }