scheduleGenerator
首发版本:3.00.6
语法
scheduleGenerator(start, end, frequency, calendar,
[businessDayConvention='Following'], [endOfMonth=false], [stubPolicy='Initial'],
[brokenPeriodType='Long'], [method='AbsoluteNormal'])
详情
生成一组按规则排列的日期序列。该函数根据起始日期、终止日期及频率,可结合交易日历和业务日调整规则,生成多个关键日期(如付息日、观察日、现金流日等)。
该函数适用于债券付息日、利率重置日、支付日等金融计算场景,支持以下规则组合:
- 基于给定频率生成日期序列。
- 基于指定交易日历对非交易日进行工作日调整。
- 支持月末规则处理。
- 支持期初或期末存根期处理。
- 支持长存根或短存根处理。
- 支持两种日期列表生成方法:绝对常规和绝对迭代。
注意:当起止日期之间的总期限不能被 frequency 整除时,会产生非完整周期,其处理方式由 stubPolicy 和 brokenPeriodType 参数共同决定。
参数
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
