3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 PTrade 中,针对你提出的三个不同场景,分别有对应的 API 函数可以最方便地实现需求。
以下是具体的函数推荐及使用说明:
推荐函数: get_trading_day(day)
day 为整数。0 表示当天,-1 表示前一个交易日,1 表示后一个交易日。-1 即可获取上一个交易日。推荐函数: get_trade_days(start_date=None, end_date=None, count=None)
count 参数。例如 get_trade_days(count=22) 会返回截止到当前日期的过去 22 个交易日。start_date 和 end_date。推荐函数: get_all_trades_days(date=None)
date 为指定的截止日期(如 '20230101')。如果不传,默认截止到当前回测或交易日期。以下是一个完整的策略代码示例,展示了如何在 initialize 中调用这三个函数并打印结果:
def initialize(context):
# 1. 获取上一个交易日
# 返回的是 datetime.date 对象
prev_day = get_trading_day(-1)
log.info("上一个交易日: %s" % prev_day)
# 2. 获取过去一个月的交易日列表 (方式一:按大概交易日数)
# 假设一个月约有 22 个交易日,返回的是 numpy.ndarray
last_month_days_by_count = get_trade_days(count=22)
log.info("过去22个交易日列表: %s" % last_month_days_by_count)
# 2. 获取过去一个月的交易日列表 (方式二:指定日期范围)
# 获取指定范围内的交易日
specific_range_days = get_trade_days(start_date='20230101', end_date='20230201')
log.info("2023年1月全月交易日: %s" % specific_range_days)
# 3. 获取特定日期之前的所有交易日
# 获取 2022年1月1日 之前的所有交易日
all_days_before_2022 = get_all_trades_days(date='20220101')
# 打印最后5个以验证
log.info("2022年1月1日之前的最后5个交易日: %s" % all_days_before_2022[-5:])
def handle_data(context, data):
pass
Q: get_trade_days 和 get_all_trades_days 返回的数据类型是什么?
A: 这两个函数返回的都是 numpy.ndarray 类型的数组,里面包含的是字符串格式或日期格式的交易日数据(通常在打印时显示为字符串形式)。
Q: 如果我在非交易日调用 get_trading_day(0) 会返回什么?
A: 如果当前日期是非交易日,get_trading_day(0) 通常会返回下一交易日的日期。建议在策略中使用 is_trade() 或检查当前日期是否在交易日列表中来避免逻辑错误。
Q: get_trade_days 的 count 参数包含当天吗?
A: 是的,count 表示获取 end_date(默认为当前日期)往前的 count 个交易日,包含 end_date 当天(如果当天是交易日)。
Q: 如何判断今天是交易日还是节假日?
A: 可以使用 get_trading_day(0) 获取当前系统认为的交易日,或者判断当前日期是否存在于 get_all_trades_days() 返回的列表中。在回测和交易中,handle_data 函数本身只会在交易日触发。