【迅投 QMT】QMT如何判断交易日?get_trading_calendar()交易日历完整教程

  本方案由 EasyQuant AI量化助手 提供。

问题背景

量化策略常需要判断“今天是否交易日”“下一个交易日是什么时候”或“本月还有几个交易日”。如果仅按自然日期处理,会在周末和节假日错误执行策略。

QMT 可通过 xtdata.get_trading_calendar() 获取沪深市场交易日历,用于节假日过滤、定时调仓和交易日计算。

完整代码示例

from xtquant import xtdata
from datetime import datetime


def download_calendar():
    """
    下载节假日数据。
    首次使用或需要未来交易日时建议执行。
    """
    xtdata.download_holiday_data()
    print("节假日数据下载完成")


def get_trade_calendar():
    """
    获取指定日期范围内的上交所交易日。
    """
    trade_days = xtdata.get_trading_calendar(
        market="SH",
        start_time="20260101",
        end_time="20261231"
    )

    return trade_days


def is_trade_day(date_text, trade_days):
    """
    判断日期是否为交易日。
    date_text格式:YYYYMMDD
    """
    return date_text in trade_days


def get_next_trade_day(date_text, trade_days):
    """
    获取指定日期之后的下一个交易日。
    """
    for trade_day in trade_days:
        if trade_day > date_text:
            return trade_day

    return None


def main():
    # 第一步:下载节假日数据
    download_calendar()

    # 第二步:获取全年交易日历
    trade_days = get_trade_calendar()

    print("全年交易日数量:", len(trade_days))
    print("前10个交易日:", trade_days[:10])

    # 获取今天日期
    today = datetime.now().strftime("%Y%m%d")

    # 判断今天是否交易日
    if is_trade_day(today, trade_days):
        print(today, "是交易日")
    else:
        print(today, "不是交易日")

    # 获取下一个交易日
    next_trade_day = get_next_trade_day(
        today,
        trade_days
    )

    print("下一个交易日:", next_trade_day)


if __name__ == "__main__":
    main()

判断月末交易日示例

def is_month_last_trade_day(
    current_day,
    trade_days
):
    current_index = trade_days.index(current_day)

    # 已是交易日历最后一天
    if current_index == len(trade_days) - 1:
        return True

    next_day = trade_days[current_index + 1]

    # 下一个交易日月份不同,说明当前是本月最后交易日
    return current_day[:6] != next_day[:6]

使用场景

  • 周末、法定节假日不执行策略。

  • 每月最后一个交易日自动调仓。

  • 获取下一个交易日,安排盘前任务。

  • 判断长假前是否需要降低仓位。

  • 计算两个日期之间的实际交易日数量。

注意事项

  1. 调用前建议执行 xtdata.download_holiday_data(),保证节假日数据完整。

  2. 上交所可传入 SH,深交所可传入 SZ

  3. 返回日期格式为 YYYYMMDD 字符串。

  4. 交易日不等于自然工作日,周末、法定节假日和临时休市都应以交易日历为准。

总结

get_trading_calendar() 是 QMT 策略处理日期和定时任务的重要接口。通过交易日历判断,可以避免在非交易日执行策略,并提高月度调仓和节假日风控的可靠性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值