コード例 #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
ファイル: PriceableCER.cs プロジェクト: zhangz/Highlander.Net
        /// <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);
        }
コード例 #3
0
ファイル: Dates.cs プロジェクト: zhangz/Highlander.Net
        /// <summary>
        /// Gets the Last trading day by year. This takes an array of years.
        /// </summary>
        /// <param name="exchangeCommodityName">Name of the exchange commodity.</param>
        /// <param name="yearsArray">The array of years as integers.</param>
        /// <param name="mainCycle">if set to <c>true</c> [main cycle].</param>
        /// <returns>A range of dates.</returns>
        public object[,] LastTradingDayByYear(string exchangeCommodityName, Excel.Range yearsArray, Boolean mainCycle)
        {
            List <int> unqVals = DataRangeHelper.StripIntRange(yearsArray);
            var        dates   = LastTradingDayHelper.GetLastTradingDays(exchangeCommodityName, unqVals.ToArray(), mainCycle);
            var        resVals = RangeHelper.ConvertArrayToRange(dates);

            return(resVals);
        }
コード例 #4
0
ファイル: Dates.cs プロジェクト: zhangz/Highlander.Net
        /// <summary>
        /// Gets the Last trading based on a given month.
        /// </summary>
        /// <param name="exchangeCommodityName">Name of the exchange commodity.</param>
        /// <param name="monthsArray">The array of months.</param>
        /// <param name="yearsArray">The array of years as integers.</param>
        /// <returns></returns>
        public object[,] LastTradingDayByMonth(string exchangeCommodityName, Excel.Range monthsArray, Excel.Range yearsArray)
        {
            List <int>      unqMonths = DataRangeHelper.StripIntRange(monthsArray);
            List <int>      unqYears  = DataRangeHelper.StripIntRange(yearsArray);
            List <DateTime> dates     = LastTradingDayHelper.GetLastTradingDays(exchangeCommodityName, unqMonths.ToArray(), unqYears.ToArray());
            var             resVals   = RangeHelper.ConvertArrayToRange(dates);

            return(resVals);
        }
コード例 #5
0
        /// <summary>
        /// </summary>
        /// <returns></returns>
        /// <param name="referenceDate">
        /// if 2000, IRZ8 is futures that expires in December 2008.
        /// if 2010, IRZ8 is futures that expires in December 2018.
        /// </param>
        public override DateTime GetLastTradingDay(DateTime referenceDate)
        {
            var      month = (int)LastTradingDayHelper.ParseToCode(CodeAndExpiryMonth.ImmMonthCode);
            DateTime unadjustedExpirationDate;

            if (CodeAndExpiryMonth.Year < referenceDate.Year % 10)
            {
                int realYear = referenceDate.Year - (referenceDate.Year % 10) + CodeAndExpiryMonth.Year + 10;
                unadjustedExpirationDate = new DateTime(realYear, month, 1).AddDays(-15);
            }
            else
            {
                int realYear = referenceDate.Year - (referenceDate.Year % 10) + CodeAndExpiryMonth.Year;
                unadjustedExpirationDate = new DateTime(realYear, month, 1).AddDays(-15);
            }
            return(unadjustedExpirationDate);
        }
コード例 #6
0
        /// <summary>
        /// IRH7,IRZ9 (90 day futures)
        ///
        /// IBH8,IBU9 (30 day futures)
        /// </summary>
        /// <returns></returns>
        /// <param name="referenceDate">
        /// if 2000, IRZ8 is futures that expires in December 2008.
        /// if 2010, IRZ8 is futures that expires in December 2018.
        /// </param>
        public override DateTime GetLastTradingDay(DateTime referenceDate)
        {
            var      month = (int)LastTradingDayHelper.ParseToCode(CodeAndExpiryMonth.ImmMonthCode);
            DateTime unadjustedExpirationDate;

            if (CodeAndExpiryMonth.Year < referenceDate.Year % 10)
            {
                int realYear = referenceDate.Year - referenceDate.Year % 10 + CodeAndExpiryMonth.Year + 10;
                unadjustedExpirationDate = RuleHelper.LastDayInMonth(month, realYear);
            }
            else
            {
                int realYear = referenceDate.Year - referenceDate.Year % 10 + CodeAndExpiryMonth.Year;
                unadjustedExpirationDate = RuleHelper.LastDayInMonth(month, realYear);
            }
            return(unadjustedExpirationDate);
        }
コード例 #7
0
        /// <summary>
        ///
        /// IRH7,IRZ9 (90 day futures)
        ///
        /// IBH8,IBU9 (30 day futures)
        /// </summary>
        /// <returns></returns>
        /// <param name="referenceDate">
        /// if 2000, Z8 is futures that expires in December 2008.
        /// if 2010, Z8 is futures that expires in December 2018.
        /// </param>
        public virtual DateTime GetLastTradingDay(DateTime referenceDate)
        {
            var month = (int)LastTradingDayHelper.ParseToCode(CodeAndExpiryMonth.ImmMonthCode);
            //  Expiration - 2nd (2) Friday (4) of month.
            //
            DateTime unadjustedExpirationDate;

            if (CodeAndExpiryMonth.Year < referenceDate.Year % 10)
            {
                int realYear = referenceDate.Year - (referenceDate.Year % 10) + CodeAndExpiryMonth.Year + 10;
                unadjustedExpirationDate = RuleHelper.GetNthDayInMonth(month, 3, 3, realYear, 0, 0);
            }
            else
            {
                int realYear = referenceDate.Year - (referenceDate.Year % 10) + CodeAndExpiryMonth.Year;
                unadjustedExpirationDate = RuleHelper.GetNthDayInMonth(month, 3, 3, realYear, 0, 0);
            }
            return(unadjustedExpirationDate);
        }
コード例 #8
0
        /// <summary>
        /// IRH7,IRZ9 (90 day futures)
        ///
        /// IBH8,IBU9 (30 day futures)
        /// </summary>
        /// <returns></returns>
        /// <param name="referenceDate">
        /// if 2000, IRZ8 is futures that expires in December 2008.
        /// if 2010, IRZ8 is futures that expires in December 2018.
        /// </param>
        public override DateTime GetLastTradingDay(DateTime referenceDate)
        {
            //FuturesPrefixImmMonthCodeAndYear futuresPrefixImmMonthCodeAndYear = BreakCodeIntoPrefixAndYear(futuresCode);
            var month = (int)LastTradingDayHelper.ParseToCode(CodeAndExpiryMonth.ImmMonthCode);
            //  Expiration - 3rd (3) Wednesday (3) of month.
            //
            //DateTime unadjustedExpirationDate = DateHelper.nthWeekday(2, 5, month, referenceYear + futuresPrefixImmMonthCodeAndYear.Year);
            DateTime unadjustedExpirationDate;

            if (CodeAndExpiryMonth.Year < referenceDate.Year % 10)
            {
                int realYear = referenceDate.Year - (referenceDate.Year % 10) + CodeAndExpiryMonth.Year + 10;
                unadjustedExpirationDate = RuleHelper.GetNthDayInMonth(month, 3, 3, realYear, 0, 0);
            }
            else
            {
                int realYear = referenceDate.Year - (referenceDate.Year % 10) + CodeAndExpiryMonth.Year;
                unadjustedExpirationDate = RuleHelper.GetNthDayInMonth(month, 3, 3, realYear, 0, 0);
            }
            return(unadjustedExpirationDate);
        }
コード例 #9
0
ファイル: Dates.cs プロジェクト: zhangz/Highlander.Net
        /// <summary>
        /// whether or not the given date is an IMM date
        /// </summary>
        /// <param name="exchangeCommodityName">Currently defined for:  ED, ER, RA, BAX, L, ES, EY, HR, IR, IB and W.</param>
        /// <param name="date">THe date to verify.</param>
        /// <param name="mainCycle">Is the contract a main cycle type?</param>
        /// <returns>true/false</returns>
        public bool IsLastTradingDate(string exchangeCommodityName, DateTime date, bool mainCycle)
        {
            bool result = LastTradingDayHelper.IsLastTradingDate(exchangeCommodityName, date, mainCycle);

            return(result);
        }
コード例 #10
0
ファイル: Dates.cs プロジェクト: zhangz/Highlander.Net
        /// <summary>
        /// next IMM date following the given date
        /// returns the 1st delivery date for next contract listed in the
        /// International Money Market section of the Chicago Mercantile
        /// Exchange.
        /// </summary>
        /// <param name="exchangeCommodityName">Name of the exchange commodity.</param>
        /// <param name="refDate">THe refernce date to use.</param>
        /// <param name="mainCycle">Is the contract a main cycle type.</param>
        /// <returns></returns>
        public DateTime GetNextLastTradingDate(string exchangeCommodityName, DateTime refDate, bool mainCycle)
        {
            DateTime date = LastTradingDayHelper.GetNextLastTradingDate(exchangeCommodityName, refDate, mainCycle);

            return(date);
        }
コード例 #11
0
ファイル: Dates.cs プロジェクト: zhangz/Highlander.Net
        /// <summary>
        /// returns the IMM code for next contract listed in the
        /// relevant Exchange.
        /// </summary>
        /// <param name="exchangeCommodityName">Currently defined for:  ED, ER, RA, BAX, L, ES, EY, HR, IR, IB and W.</param>
        /// <param name="date">The date.</param>
        /// <param name="mainCycle">Is the contract a main cycle type?</param>
        /// <returns>The futures code string</returns>
        public string GetNextFuturesCode(string exchangeCommodityName, DateTime date, bool mainCycle)
        {
            string result = LastTradingDayHelper.GetNextFuturesCode(exchangeCommodityName, date, mainCycle);

            return(result);
        }