🚀 AI 一键生成 ptrade 策略代码

PTrade 策略中的日期处理:get_trade_days, get_trading_day 函数使用指南

ptrade | 发布时间: 2025/11/26
以下内容由 EasyQuant 生成。

问题描述

如何获取上一个交易日的日期,或者获取某个月份所有的交易日?

解决方案

在PTrade量化交易平台中,获取交易日历相关数据主要依赖于 get_trading_dayget_trade_days 这两个API接口。

以下是具体的实现方法和代码示例。

1. 获取上一个交易日

使用 get_trading_day(day) 函数。

  • 参数day (int)。
    • 0 表示当前交易日。
    • -1 表示前一个交易日。
    • 1 表示后一个交易日。
  • 返回值datetime.date 对象。

2. 获取某个月份所有的交易日

使用 get_trade_days(start_date, end_date) 函数。

  • 参数
    • start_date (str): 该月份的起始日期(如 '2023-10-01')。
    • end_date (str): 该月份的结束日期(如 '2023-10-31')。
  • 返回值:包含指定范围内所有交易日的 numpy.ndarray 数组。

策略代码示例

以下代码展示了如何在 initializehandle_data 中实现这两个需求。

def initialize(context):
    # 初始化
    g.security = '600570.SS'
    set_universe(g.security)
    
    # --- 示例1:获取上一个交易日 ---
    # 注意:在回测模式下,get_trading_day(0) 返回的是回测当天的日期
    # get_trading_day(-1) 返回的是回测当天的前一个交易日
    prev_trading_day = get_trading_day(-1)
    log.info("上一个交易日是: %s" % prev_trading_day)
    
    # --- 示例2:获取某个月份(例如2023年10月)的所有交易日 ---
    target_month_start = '2023-10-01'
    target_month_end = '2023-10-31'
    
    # 获取指定范围内的交易日列表
    month_trade_days = get_trade_days(start_date=target_month_start, end_date=target_month_end)
    
    log.info("2023年10月的所有交易日如下:")
    for day in month_trade_days:
        # month_trade_days 中的元素通常是 numpy.datetime64 或 str 类型,具体取决于版本
        # 这里直接打印即可
        log.info(str(day))

def handle_data(context, data):
    # 在盘中运行时,也可以动态获取
    # 获取当前回测日期的上一个交易日
    last_day = get_trading_day(-1)
    # log.info("当前回测日期的上一交易日: %s" % last_day)
    pass

注意事项

  1. 日期格式get_trade_days 的入参建议使用 'YYYY-MM-DD''YYYYMMDD' 格式的字符串。
  2. 非交易日调用:如果在非交易日(例如周末或节假日)调用 get_trading_day(0),系统通常会返回下一交易日的日期。
  3. 数据类型get_trading_day 返回的是 datetime.date 对象,而 get_trade_days 返回的是 numpy 数组,如果需要进行日期计算,可能需要进行类型转换。

Q&A

Q: get_trading_day(-1) 在周一调用时,返回的是周日还是上周五?
A: 返回的是上周五(假设上周五是正常交易日)。该函数只返回交易所开市的日期,会自动跳过周末和法定节假日。

Q: 如果我想获取未来5天的交易日怎么办?
A: 可以使用 get_trade_days(start_date=今天, count=5)get_trade_days 支持 count 参数,表示从 start_date 开始往后获取指定数量的交易日。

Q: get_trade_days 返回的数据可以直接用于 get_price 吗?
A: 可以。get_trade_days 返回的日期格式通常可以直接作为 get_priceget_history 等函数的日期参数使用,但建议先将其转换为字符串格式以确保兼容性。