scheduleGenerator

首发版本:3.00.6

语法

scheduleGenerator(start, end, frequency, calendar, [businessDayConvention='Following'], [endOfMonth=false], [stubPolicy='Initial'], [brokenPeriodType='Long'], [method='AbsoluteNormal'])

详情

生成一组按规则排列的日期序列。该函数根据起始日期、终止日期及频率,可结合交易日历和业务日调整规则,生成多个关键日期(如付息日、观察日、现金流日等)。

该函数适用于债券付息日、利率重置日、支付日等金融计算场景,支持以下规则组合:

  • 基于给定频率生成日期序列。
  • 基于指定交易日历对非交易日进行工作日调整。
  • 支持月末规则处理。
  • 支持期初或期末存根期处理。
  • 支持长存根或短存根处理。
  • 支持两种日期列表生成方法:绝对常规和绝对迭代。

注意:当起止日期之间的总期限不能被 frequency 整除时,会产生非完整周期,其处理方式由 stubPolicybrokenPeriodType 参数共同决定。

参数

start DATE 类型标量,指定起始日期。

end DATE 类型标量,指定结束日期。

frequency 字符串标量,指定日期生成频率。可选值为:

  • "Once":仅生成一次
  • "Annual":每年一次
  • "Semiannual":每年两次
  • "EveryFourthMonth":每四个月一次
  • "Quarterly":每三个月一次
  • "BiMonthly":每两个月一次
  • "Monthly":每月一次
  • "EveryFourthWeek":每四周一次
  • "BiWeekly":每两周一次
  • "Weekly":每周一次
  • "Daily":每天一次

calendar 字符串标量,指定交易日历。

businessDayConvention 可选参数,字符串标量,指定工作日惯例,用于指定当生成日期为非交易日时的业务日调整规则。默认值为 "Following"。可选值为:

  • "Following":调整到下一个交易日
  • "ModifiedFollowing":调整到下一个交易日;若生成日期跨月,则调整到上一个交易日
  • "Preceding":调整到上一个交易日
  • "ModifiedPreceding":调整到上一个交易日;若生成日期跨月,则调整到下一个交易日
  • "Unadjusted":不调整
  • "HalfMonthModifiedFollowing":调整到下一个交易日;若生成日期跨过月中(15 日)或月末,则调整到上一个交易日
  • "Nearest":调整到最近的交易日;若前后距离相同,则调整到下一个交易日

endOfMonth 可选参数,布尔标量,指定是否启用月末规则,即当起始日是某一个月的最后工作日,那么生成序列中的各期日期也要是某一个月最后工作日。默认值为 false。

stubPolicy 可选参数,字符串标量,指定存根策略。默认值为 "Initial"。可选值为:

  • "Initial":将非完整周期放在期初
  • "Final":将非完整周期放在期末

brokenPeriodType 可选参数,字符串标量,指定非完整周期的类型。默认值为 "Long"。可选值为:

  • "Long":非完整周期按长周期处理
  • "Short":非完整周期按短周期处理

method 可选参数,字符串标量,表示日期列表生成方法。默认值为 "AbsoluteNormal"。可选值为:

  • "AbsoluteNormal"(绝对常规):先根据起始日期和频率一次性生成完整的日期序列,再统一根据业务日规则进行调整。
  • "AbsoluteRecursive"(绝对迭代):从起始日期开始逐期生成,每生成一个日期后立即进行业务日调整,并以调整后的日期作为下一期计算的基准,逐步递推生成完整序列。

返回值

DATE 类型向量。

例子

例1. 根据指定的频率,生成日期列表。

// 仅生成一次
scheduleGenerator(start=2023.01.01, end=2025.01.01, frequency="Once", calendar="XSHG")
// 输出:[2023.01.03,2025.01.02]

// 按季度生成日期列表,并使用默认工作日调整规则
scheduleGenerator(start=2023.01.01, end=2025.01.01, frequency="Quarterly", calendar="XSHG")
// 输出:[2023.01.03,2023.04.03,2023.07.03,2023.10.09,2024.01.02,2024.04.01,2024.07.01,2024.10.08,2025.01.02]

// 每月一次
scheduleGenerator(start=2023.01.01, end=2025.01.01, frequency="Monthly", calendar="XSHG")
// 输出:[2023.01.03,2023.02.01,2023.03.01,2023.04.03,2023.05.04,2023.06.01,2023.07.03,2023.08.01,2023.09.01,2023.10.09,2023.11.01,2023.12.01,2024.01.02,2024.02.01,2024.03.01,2024.04.01,2024.05.06,2024.06.03,2024.07.01,2024.08.01,2024.09.02,2024.10.08,2024.11.01,2024.12.02,2025.01.02]

例2. 期末短存根,使用 "AbsoluteNormal" 生成日期列表。

scheduleGenerator(start=2023.01.01, end=2024.12.01, frequency="Quarterly", calendar="XSHG", businessDayConvention="Following", endOfMonth=false, stubPolicy="Final", brokenPeriodType="Short", method="AbsoluteNormal")
// 输出:[2023.01.03,2023.04.03,2023.07.03,2023.10.09,2024.01.02,2024.04.01,2024.07.01,2024.10.08,2024.12.02]

例3. 期初短存根,使用 "AbsoluteRecursive" 生成日期列表。

scheduleGenerator(start=2023.01.01, end=2024.12.01, frequency="Quarterly", calendar="XSHG", businessDayConvention="Following", endOfMonth=false, stubPolicy="Initial", brokenPeriodType="Short", method="AbsoluteRecursive")
// 输出:[2023.01.03,2023.03.06,2023.06.05,2023.09.04,2023.12.04,2024.03.04,2024.06.03,2024.09.02,2024.12.02]

例4. 按周生成日期列表。

scheduleGenerator(start=2023.09.25, end=2023.10.30, frequency="Weekly", calendar="XSHG", businessDayConvention="Following", endOfMonth=false, stubPolicy="Final", brokenPeriodType="Short", method="AbsoluteNormal")
// 输出:[2023.09.25,2023.10.09,2023.10.16,2023.10.23,2023.10.30]

// 调整 businessDayConvention 为 Unadjusted
scheduleGenerator(start=2023.09.25, end=2023.10.30, frequency="Weekly", calendar="XSHG", businessDayConvention="Unadjusted", endOfMonth=false, stubPolicy="Final", brokenPeriodType="Short", method="AbsoluteNormal")
// 输出:[2023.09.25,2023.10.02,2023.10.09,2023.10.16,2023.10.23,2023.10.30]

例5. 期末长存根,使用 "AbsoluteRecursive" 生成日期列表。

scheduleGenerator(start=2023.01.01, end=2024.12.01, frequency="Quarterly", calendar="XSHG", businessDayConvention="Following", endOfMonth=false, stubPolicy="Final", brokenPeriodType="Long", method="AbsoluteRecursive")
// 输出:[2023.01.03,2023.04.03,2023.07.03,2023.10.09,2024.01.09,2024.04.09,2024.07.09,2024.12.02]

相关函数:yearFrac, dateGenerator