🚀 AI 一键生成 ptrade 策略代码

PTrade 数据 API:使用 count 参数灵活获取指定数量 K 线

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

问题描述

我不想指定开始日期,只想获取最近 100 根 K 线,该怎么用 get_price?

解决方案

在 PTrade 中,如果您不想指定 start_date,只想获取最近的 N 根 K 线,您需要使用 count 参数。

根据 PTrade API 文档的规定,start_datecount互斥的,必须且只能选择输入其中一个。

使用方法

调用 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())

关键参数说明

  1. count (int):
    • 设置为 100 即表示获取 100 条数据。
    • 注意:该参数只针对 '1d', '1m', '5m' 等具体频率有效。
  2. start_date:
    • 必须省略或显式设置为 None。如果同时设置了 start_datecount,程序会报错。
  3. end_date (str, 可选):
    • 如果不传(默认为 None),系统会自动取当前策略运行的时间(回测中为当前回测日期,实盘中为系统当前日期)。
    • 如果需要获取指定历史日期往前推 100 根,可以传入具体的日期字符串(如 '20230101')。
  4. frequency (str):
    • 指定 K 线周期,如 '1d' (日线), '1m' (1分钟线), '30m' (30分钟线) 等。

注意事项

  • 包含关系get_price 返回的数据通常不包括 end_date 当天(或当根未走完的 K 线)的数据。它返回的是历史行情。如果您在盘中运行并需要包含当天的实时数据,通常需要结合 get_snapshot 或使用 get_historyget_historyinclude 参数可控制是否包含当前 K 线,但 get_price 主要用于获取历史切片)。
  • 数据类型:默认返回 pandas.DataFrame

Q&A: PTrade get_price 常见问题

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_datecount 必须且只能选择输入一个。如果同时输入,系统无法判断截取逻辑,会抛出异常。

Q: get_price 支持哪些频率的 count 参数?
A: 支持 '1m', '5m', '15m', '30m', '60m', '120m', '1d', '1w', '1M' (月线), '1q' (季线), '1y' (年线) 等。注意分钟级数据通常只能获取较近几年的历史。