问题描述
使用get_price获取周线数据时,传入start_date和end_date参数后报错,为什么?
解决方案
报错原因分析
在 ptrade 量化平台中,使用 get_price 接口获取历史行情数据时,对于不同频率(frequency)的数据,参数的支持情况有所不同。
根据 ptrade API 文档规定:当频率为周线('weekly', '1w')、月线('monthly', 'mo')、季线('quarter', '1q')和年线('yearly', '1y')时,不支持 start_date 和 end_date 组合的入参形式。
如果您在获取这些长周期数据时同时传入了 start_date 和 end_date,系统就会抛出错误。
正确的解决方法
要获取周线、月线等长周期数据,必须使用 end_date 和 count 组合的入参形式。
end_date:指定获取数据的结束日期。count:指定获取结束日期往前推的 K 线根数。
代码示例
以下是获取周线和月线数据的正确代码示例:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 错误用法(会报错):
# wrong_data = get_price('600570.SS', start_date='20230101', end_date='20231231', frequency='1w')
# 正确用法 1:获取指定结束日期前 10 周的周线数据
week_data = get_price('600570.SS', end_date='20231231', frequency='1w', count=10)
log.info("获取的周线数据:\n%s" % week_data)
# 正确用法 2:获取指定结束日期前 5 个月的月线数据
month_data = get_price('600570.SS', end_date='20231231', frequency='mo', count=5)
log.info("获取的月线数据:\n%s" % month_data)
补充说明
count参数只针对特定的频率有效,包括:'daily', 'weekly', 'monthly', 'quarter', 'yearly', '1d', '1m', '5m', '15m', '30m', '60m', '120m', '1w', 'mo', '1q', '1y'。- 返回的周线、月线数据是由日线数据合成的。
- 如果确实需要获取特定时间段(如 2023年1月1日 到 2023年12月31日)的周线数据,您需要先计算出该时间段内包含多少周(即
count的值),然后再使用end_date和count进行获取。