🚀 AI 一键生成 ptrade 策略代码

PTrade 数据获取:如何查询周线 (1w) 和月线 (1mo) 历史行情?

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

问题描述

如何获取股票的周K线、月K线和季K线数据?

解决方案

在PTrade量化交易平台中,获取股票的周K线、月K线和季K线数据主要通过调用 get_historyget_price 函数来实现。

关键在于设置 frequency(频率)参数。

核心参数说明

get_historyget_price 函数中,frequency 参数支持以下设置:

  • 周K线: 设置为 '1w''weekly'
  • 月K线: 设置为 'mo''monthly'
  • 季K线: 设置为 '1q''quarter'

代码实现示例

以下是一个完整的策略示例代码,展示了如何在 handle_data 中获取指定股票过去5个周期的周线、月线和季线数据,并打印出来。

def initialize(context):
    # 初始化设置
    g.security = '600570.SS' # 恒生电子
    set_universe(g.security)

def handle_data(context, data):
    # 1. 获取过去5周的周K线数据
    # frequency='1w' 表示周线
    # include=True 表示包含当前尚未结束的这一周(如果需要)
    weekly_data = get_history(
        count=5, 
        frequency='1w', 
        field=['open', 'high', 'low', 'close', 'volume'], 
        security_list=g.security,
        include=True
    )
    log.info("周K线数据(最后5周):\n%s" % weekly_data)

    # 2. 获取过去5个月的月K线数据
    # frequency='mo' 表示月线
    monthly_data = get_history(
        count=5, 
        frequency='mo', 
        field=['open', 'high', 'low', 'close', 'volume'], 
        security_list=g.security,
        include=True
    )
    log.info("月K线数据(最后5月):\n%s" % monthly_data)

    # 3. 获取过去5个季度的季K线数据
    # frequency='1q' 表示季线
    quarterly_data = get_history(
        count=5, 
        frequency='1q', 
        field=['open', 'high', 'low', 'close', 'volume'], 
        security_list=g.security,
        include=True
    )
    log.info("季K线数据(最后5季):\n%s" % quarterly_data)

注意事项

  1. 数据合成机制:PTrade中的周线、月线、季线数据通常是由日线数据合成的。
  2. include参数
    • 默认情况下 include=False,即不包含当前正在进行的周期。例如,如果在周三运行策略,获取周线且 include=False,则返回的数据截止到上周五。
    • 如果设置 include=True,则会包含本周(截止到当前回测时间)的数据。
  3. count参数:表示获取K线的数量。例如 count=5frequency='1w' 表示获取最近5周的数据。
  4. get_price 接口:如果你需要获取指定日期范围(如 2022-01-01 到 2022-12-31)的周/月/季线,可以使用 get_price 函数,参数设置逻辑相同。

Q&A

Q: 获取年K线数据应该设置什么参数?
A: 获取年K线数据,可以将 frequency 参数设置为 '1y''yearly'

Q: 为什么有时候获取的周线数据最后一条是变动的?
A: 如果你在 get_history 中设置了 include=True,且当前处于交易周的中间(例如周三),那么最后一条周K线数据是基于本周一到周三的数据合成的,随着行情变化,这条K线的收盘价、最高价等会实时变动,直到周五收盘固定下来。

Q: get_history 返回的数据类型是什么?
A: 当查询单只股票时,通常返回 pandas.DataFrame,行索引为时间,列索引为字段(如 open, close);当查询多只股票且查询多个字段时,在 Python 3.5 环境下可能返回 pandas.Panel,在 Python 3.11 环境下通常返回 MultiIndex 的 DataFrame 或字典(取决于 is_dict 参数)。建议在处理多股数据时先打印数据结构确认。