3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 PTrade 中,如果您不想指定 start_date,只想获取最近的 N 根 K 线,您需要使用 count 参数。
根据 PTrade API 文档的规定,start_date 与 count 是互斥的,必须且只能选择输入其中一个。
调用 get_price 时,不要传入 start_date,直接设置 count=100,并指定 end_date(可选,不填则默认为当前时间)和 frequency(频率)。
以下代码展示了如何获取“恒生电子(600570.SS)”截止到当前时刻的最近 100 根日线数据:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 获取最近 100 根日线数据
# end_date 不传默认为当前回测/交易时间
# count=100 表示获取 100 条数据
# frequency='1d' 表示日线
df = get_price(
g.security,
count=100,
end_date=None,
frequency='1d',
fields=['open', 'high', 'low', 'close', 'volume']
)
log.info("获取到的 K 线数量: %s" % len(df))
log.info(df.tail())
count (int):
100 即表示获取 100 条数据。'1d', '1m', '5m' 等具体频率有效。start_date:
None。如果同时设置了 start_date 和 count,程序会报错。end_date (str, 可选):
None),系统会自动取当前策略运行的时间(回测中为当前回测日期,实盘中为系统当前日期)。'20230101')。frequency (str):
'1d' (日线), '1m' (1分钟线), '30m' (30分钟线) 等。get_price 返回的数据通常不包括 end_date 当天(或当根未走完的 K 线)的数据。它返回的是历史行情。如果您在盘中运行并需要包含当天的实时数据,通常需要结合 get_snapshot 或使用 get_history(get_history 的 include 参数可控制是否包含当前 K 线,但 get_price 主要用于获取历史切片)。pandas.DataFrame。Q: get_price 和 get_history 获取最近 100 根 K 线有什么区别?
A: get_price 是通过指定 end_date 往前推 count 数量来获取数据的,适合获取指定日期段的数据。而 get_history 默认是基于当前策略时间往前推 count 数量。在大多数简单的策略编写中,如果只是想拿“当前时刻往前 N 根”,使用 get_history(100, ...) 往往更简洁,但 get_price 提供了更灵活的 end_date 指定功能。
Q: 为什么我设置了 count=100,但返回的数据少于 100 条?
A: 这通常是因为该股票上市时间不足,或者中间存在停牌,导致有效交易数据不足 100 条。此外,如果 end_date 设置得过早,早于股票上市时间,也可能返回空数据。
Q: 可以同时使用 start_date 和 count 吗?
A: 不可以。API 文档明确规定 start_date 与 count 必须且只能选择输入一个。如果同时输入,系统无法判断截取逻辑,会抛出异常。
Q: get_price 支持哪些频率的 count 参数?
A: 支持 '1m', '5m', '15m', '30m', '60m', '120m', '1d', '1w', '1M' (月线), '1q' (季线), '1y' (年线) 等。注意分钟级数据通常只能获取较近几年的历史。