金融科技科学计算【免费下载链接】tf-quant-financeHigh-performance TensorFlow library for quantitative finance.项目地址https://gitcode.com/gh_mirrors/tf/tf-quant-finance点击查看免费下载导读WeekendMask是 tf-quant-finance 日期模块tff.datetime中用于声明一周内哪些天算作周末的核心常量类。在构建HolidayCalendar假日日历时通过weekend_mask参数传入掩码即可让工作日计算、日期滚动roll与息票/期限日程schedule自动跳过周末。读完本文你将掌握WeekendMask四个预置掩码的确切语义、与WeekDay的索引对齐关系以及如何在create_holiday_calendar、PeriodicSchedule等场景中组合使用它与自定义掩码。WeekendMask 是什么WeekendMask定义于日期模块的常量文件中tf_quant_finance/datetime/constants.py其官方 API 文档api_docs/tf_quant_finance/datetime/WeekendMask.md给出的描述是Provides weekend masks for some of the common weekend patterns.为一些常见周末模式提供周末掩码。在 tf-quant-finance 中周末被当作一种特殊的节假日处理——抽象基类HolidayCalendar的文档明确指出 Weekends are treated as holidays周末视同节假日。因此一个掩码本质上定义了每个日历日是否是工作日的基准规则再叠加法定节假日后就构成了完整的非交易日集合。WeekendMask虽然名称像枚举但其源码实现是一个普通类四个类属性各是一个长度为 7 的整数元组0 表示工作日1 表示休息日索引 0 对应周一类变量掩码值周一→周日适用地区源码注释语义SATURDAY_SUNDAY(0, 0, 0, 0, 0, 1, 1)美、英、欧洲等US/UK/Europe etc.周六、周日为周末FRIDAY_SATURDAY(0, 0, 0, 0, 1, 1, 0)中东多数国家Most countries in the Middle East周五、周六为周末周日是工作日SUNDAY_ONLY(0, 0, 0, 0, 0, 0, 1)印度、尼泊尔India, Nepal仅周日为周末NONE(0, 0, 0, 0, 0, 0, 0)默认值Default value无周末一周七天都是工作日与 WeekDay 枚举的索引对齐掩码的索引约定与同文件中的WeekDay枚举完全一致constants.pyMONDAY 0、TUESDAY 1、WEDNESDAY 2、THURSDAY 3、FRIDAY 4、SATURDAY 5、SUNDAY 6即周一起始、零基编号。因此FRIDAY_SATURDAY (0,0,0,0,1,1,0)中位置 4、5 的两个 1 恰好对应周五FRIDAY与周六SATURDAY。这一约定贯穿整个日期模块自定义掩码时必须遵循否则掩码会整体错位。源码实现掩码如何进入日历类定义本体WeekendMask的完整源码仅一个类、四个元组属性没有任何方法constants.pyclass WeekendMask(object): Provides weekend masks for some of the common weekend patterns. # E.g. US/UK/Europe etc. SATURDAY_SUNDAY (0, 0, 0, 0, 0, 1, 1) # E.g. Most countries in the Middle East. FRIDAY_SATURDAY (0, 0, 0, 0, 1, 1, 0) # E.g. India, Nepal. SUNDAY_ONLY (0, 0, 0, 0, 0, 0, 1) # Default value. NONE (0, 0, 0, 0, 0, 0, 0)它没有继承enum.Enum而是普通object子类取值用 0/1 而非True/False但下游 API 一律以布尔语义解释1/True 表示休息日。这也是为什么它能与用户自定义的[0,0,0,0,1,0,1]这类列表/Tensor 自由混用——create_holiday_calendar的weekend_mask参数接受的正是任意可转换为 7 元素 Tensor 的对象。通过工厂函数进入 HolidayCalendar掩码的唯一正式入口是create_holiday_calendarholiday_calendar_factory.pydef create_holiday_calendar( weekend_maskNone, holidaysNone, start_yearNone, end_yearNone): ...其中weekend_mask的官方定义为布尔Tensor共 7 个元素、每个元素对应一周中的一天索引 0 为周一True表示该天是周末False表示工作日默认None表示不应用任何周末。工厂内部holiday_calendar_factory.py会根据是否提供了holidays或start_year/end_year边界选择性能更优的BoundedHolidayCalendar预计算整张工作日查询表或更灵活的UnboundedHolidayCalendar。两种实现都会消费weekend_maskBoundedHolidayCalendarbounded_holiday_calendar.py构造时执行tf.convert_to_tensor(weekend_mask or constants.WeekendMask.NONE)即不传掩码时自动落到WeekendMask.NONE随后在_compute_is_bus_day_table中bounded_holiday_calendar.py通过week_days (ordinals - 1) % 7计算星期并tf.gather(self._weekend_mask, week_days)标记休息日再以tf.bitwise.bitwise_or叠加法定节假日最终生成按 ordinal 索引的is_bus_day查询表。UnboundedHolidayCalendarunbounded_holiday_calendar.py将掩码tf.cast(..., dtypetf.bool)后交给holiday_utils.business_day_mappers构造工作日空间与 ordinal 空间的互映射holiday_utils.py其中用tf.roll(weekend_mask, -_DAYOFWEEK_0, axis0)调整掩码对齐后做工作日偏移累计。从源码结构可以推断掩码直接决定了工作日空间的密度与形状——例如FRIDAY_SATURDAY下工作日是 5 天/周但落在周日周四SUNDAY_ONLY下工作日是 6 天/周。所有基于日历的日期加减、滚动都在这套空间中进行因此掩码选错会系统性影响全部计算结果。实战一创建不同地区的假日日历最典型的用法是把掩码作为weekend_mask传入create_holiday_calendar再配合holidays传入法定节假日列表。参考 holiday_calendar_test.py 的测试模式import tf_quant_finance as tff dates tff.datetime # 美式日历周六周日为周末叠加元旦与圣诞节 cal dates.create_holiday_calendar( weekend_maskdates.WeekendMask.SATURDAY_SUNDAY, holidays[(2020, 1, 1), (2020, 12, 25), (2021, 1, 1)]) date_tensor dates.dates_from_tuples([(2020, 1, 1), (2020, 5, 1), (2020, 12, 25), (2021, 3, 8), (2021, 1, 1)]) cal.is_business_day(date_tensor) # 输出: [False, True, False, True, False] # 元旦 工作日 圣诞 工作日 元旦若把掩码换成中东模式cal_me dates.create_holiday_calendar( weekend_maskdates.WeekendMask.FRIDAY_SATURDAY, start_year2020, end_year2021)此时周五、周六被判定为非工作日而周日反而是工作日——这正是FRIDAY_SATURDAY的核心价值。自定义掩码打破周六周日假设仓库测试明确支持自定义掩码holiday_calendar_test.py# 周六上班、周五和周日休息 weekend_mask [0, 0, 0, 0, 1, 0, 1] cal dates.create_holiday_calendar( weekend_maskweekend_mask, start_year2020, end_year2021) d dates.dates_from_tuples([(2020, 1, 2), (2020, 1, 3), # 周四、周五 (2020, 1, 4), (2020, 1, 5), # 周六、周日 (2020, 1, 6), (2020, 5, 1), # 周一、周五 (2020, 5, 2)]) # 周六 cal.is_business_day(d) # 输出: [True, False, True, False, True, False, True]自定义掩码需满足长度恰好为 7、索引 0 为周一、1 表示休息日。它可以是 Python 列表、NumPy 数组或tf.Tensor工厂与两种日历实现都会自动做类型转换。实战二与日程生成Schedule配合WeekendMask并不只服务于判断某天是否营业它是整个业务日程系统的地基。在 schedules_test.py 中PeriodicSchedule周期日程如付息日序列正是通过掩码构建日历actual_schedule dates.PeriodicSchedule( start_datestart_dates, end_dateend_dates, tenortenors, holiday_calendardates.create_holiday_calendar( weekend_maskdates.WeekendMask.SATURDAY_SUNDAY, start_year2020, end_year2028), roll_conventiondates.BusinessDayConvention.MODIFIED_FOLLOWING, backwardbackward, end_of_monthend_of_month).dates()同样BusinessDaySchedule纯工作日日程也接受携带掩码的日历schedules_test.py。可见WeekendMask与BusinessDayConvention滚动约定如FOLLOWING、MODIFIED_FOLLOWING是一对固定搭档掩码决定哪些天要滚约定决定往哪个方向滚、如何避开跨月。当掩码改变周末定义时同一组日期在roll_to_business_day、add_business_days等 API定义于 holiday_calendar.py 的抽象基类下的滚动结果会相应变化。注意事项与最佳实践NONE是默认兜底值create_holiday_calendar与BoundedHolidayCalendar在weekend_maskNone时都自动回落到WeekendMask.NONEbounded_holiday_calendar.py此时一周七天全是工作日。需要周末过滤时必须显式传掩码。索引从周一开始与 Pythondatetime约定datetime.weekday()周一0一致但注意WeekDay枚举与 ISO 8601周日7不同自定义掩码时最容易踩的坑就是按周日开头排列 0/1。掩码负责周末holidays负责法定节假日两者通过tf.bitwise.bitwise_or叠加。官方建议在提供holidays时注意把落在周末的节日人工调整如 2021-12-25 圣诞落在周六时调整为 12-24或直接借助 Pandas 的AbstractHolidayCalendar生成参见 create_holiday_calendar.md 与 holiday_calendar_factory.py 中的示例。提供边界以换取性能create_holiday_calendar文档明确提示给出holidays和/或start_year/end_year会得到性能更好的BoundedHolidayCalendar同时每个日历实例应在单个计算图/tf.function 上下文中使用。测试覆盖可靠holiday_calendar_test.py 中的test_both_impls装饰器保证每个行为在BoundedHolidayCalendar与UnboundedHolidayCalendar两种实现上结果一致说明掩码语义在两条实现路径上是等价且被持续验证的。结语WeekendMask虽小却是 tf-quant-finance 日期体系中周末定义的唯一事实来源。四个预置掩码覆盖了全球主流交易市场的周末结构六日休、周五六休、仅周日休、无周末而自定义掩码机制让任意地区的特殊周末安排都能以一行元组表达。理解其索引约定与在HolidayCalendar内部的消费方式是正确开展业务日计算、付息日程生成与日期滚动的前提。赞分享金融科技科学计算【免费下载链接】tf-quant-financeHigh-performance TensorFlow library for quantitative finance.项目地址https://gitcode.com/gh_mirrors/tf/tf-quant-finance点击查看免费下载相关推荐tf-quant-finance 日期模块 HolidayCalendar 深入指南节假日日历与工作日滚动约定tf quant finance 日期模块 HolidayCalendar 深入指南节假日日历与工作日滚动约定 HolidayCalendar 是 tf qu金融科技科学计算tf-quant-finance datetime 模块完全指南DateTensor、PeriodTensor、假日日历与 Day Count 实践tf quant finance datetime 模块完全指南DateTensor、PeriodTensor、假日日历与 Day Count 实践 tf_q金融科技科学计算tf-quant-finance 周期日期调度PeriodicSchedule实战指南日期序列生成、假日调整与批量调度tf quant finance 周期日期调度PeriodicSchedule实战指南日期序列生成、假日调整与批量调度 导读 本文围绕 tf quant金融科技科学计算上一篇daisyUI 语义颜色Semantic Colors完全指南主题化、CSS 变量与透明度机制深度解析下一篇cross与cargo-deadlinks检查跨平台文档中的无效链接创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考