复盘表写着“一个月”不表示里面一定装着整个月的期货样本。月份有多少个自然日、日历里有多少个交易日、你的资料实际覆盖了多少天是三个不同的数。如果一个月的结果来自完整日期范围另一个月却少了几天直接比较总信号数或总盈亏就可能把样本覆盖差异也算进了策略表现。看月度结果之前值得把这三个数并列看清。日历天数不是交易日数量不能把月份天数当作可交易天数也不宜简单数一遍周一到周五。节假日安排会影响交易日历具体年历还需要已经更新到所研究的年份。TqSdk的get_trading_calendar可以查询一段时间的交易日历。返回的表有两列date是北京时间的日期类型为datetime64[ns]trading是布尔值表示该日期是否为交易日。数交易日应该数trading为真的日期而不是把整张表的行数直接当答案。下面的参考代码接在已有合法连接的api上以一个已经结束的月份为例获取所选月份的交易日日历并筛出交易日。fromdatetimeimportdate start_daydate(2026,5,1)end_daydate(2026,5,31)calendarapi.get_trading_calendar(start_dtstart_day,end_dtend_day,)# 只取日历标记为交易日的日期保留为日期集合。trading_dates{day.date()fordayincalendar.loc[calendar[trading],date]}print(日历交易日数,len(trading_dates))start_dt和end_dt都支持date与datetime。这次要研究日期覆盖直接传日期更清楚若传datetime这个接口看的是该时刻所在的年月日不是因此改查一段盘中时长。得到日期集合以后日历问题才有了明确答案。但它还没有告诉你自己的研究表是否真的包含这些日期。样本有几天要到样本里数一根K线是一行一天可以有很多行。研究表有几千行不代表覆盖了几千个交易日同一天多取了几个周期也不会多出一个日期。因此对照日历时要用去重后的样本交易日而不是原表行数。假设已有研究表sample只保留同一具体合约、同一研究区间内通过数据检查的有效记录。其中trading_day是研究表自己保存并已核实归属的交易日标签每个值为datetime.date。它不是get_trading_calendar自动添加到行情上的列也不能拿夜盘时间戳的自然日期直接充当。沿用上段的trading_dates可以把样本覆盖分成三部分# sample来自已有研究资料不在这里请求行情。sample_datesset(sample[trading_day])covered_datestrading_datessample_dates missing_datestrading_dates-sample_dates outside_datessample_dates-trading_datesprint(样本覆盖的日历交易日数,len(covered_dates))print(日历中有、样本中没有,sorted(missing_dates))print(样本中有、日历中没有,sorted(outside_dates))两份日期取交集得到的是双方对得上的日期日历减去样本留下没有对应记录的日期。反方向也要看样本里若出现日历范围外的日期应核对研究区间、日期标签和资料来源不要为了让数字好看而悄悄删除。这种比较的用途是让“覆盖了多少”后面跟着具体日期而不是只报一个总数。少了两天先问少的是哪两天用一组纯假设说明结果不对应前面代码中的真实月份某月有31个自然日日历标记21个交易日而样本只覆盖其中19天。计数假设数量它能说明什么自然日数31月份的日期跨度日历交易日数21这份日历中被标为交易日的日期数样本覆盖的交易日数19样本在其中19个日期至少有有效记录尚无对应样本的日期数2需要继续核对的日期缺口这时样本不是“完整21天”。但少两天也不能立即判成数据服务漏了行情还可能涉及合约上市或到期范围、原来的筛选条件、资料导入范围等。日历给出的是日期背景不保证每张合约在每个日期都有你需要的记录。同样19天里每天有一条有效记录只证明这19个日期出现过不证明每一天的全部交易时段、每根K线都齐全。日期覆盖、盘中连续性和字段有效性仍是不同层面的检查。若研究要求本来就只取部分日期应在比较前明确这个范围若要求整月覆盖就把缺口列出来核实。不要拿19天的总量直接冒充21天的总量再把差额解释成策略更安静或更少赚钱。用TqSdk让月度比较有同一把日期尺做期货月度复盘我推荐用TqSdk的交易日历与已有样本日期做这份对照。它的关键价值是把“这个月应该观察哪些日期”和“手里实际上有什么”分开呈现而不是仅在报表标题上写一个月份。日历查询提供日期与交易日标记样本对照保留覆盖和缺口。两者合起来能帮助你判断月度差异究竟值得进入策略分析还是应先回到资料范围继续核对。这不会自动补齐缺失数据却能让后面的比较建立在说得清的样本上。
阅读完成 · 觉得有帮助?