🚀 AI 一键生成 ptrade 策略代码

PTrade API 详解:如何使用 get_stock_info 获取股票上市日期、所属板块等信息?

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

问题描述

怎样才能获取一只股票的上市日期和它所属的行业板块?

解决方案

在 PTrade 量化交易平台中,获取股票的上市日期和所属行业板块分别需要使用不同的 API 接口。

以下是具体的实现方法和代码示例:

1. 获取上市日期:get_stock_info

使用 get_stock_info 函数,并通过 field 参数指定 'listed_date' 字段来获取。

  • 接口说明get_stock_info(stocks, field=None)
  • 参数
    • stocks: 股票代码(字符串或列表)。
    • field: 需要获取的字段列表,获取上市日期需包含 'listed_date'
  • 返回值:返回一个嵌套字典,包含指定字段的信息。

2. 获取所属行业板块:get_stock_blocks

使用 get_stock_blocks 函数可以获取股票所属的所有板块信息,包括行业、概念、地域等。

  • 接口说明get_stock_blocks(stock_code)
  • 参数
    • stock_code: 股票代码(字符串)。
  • 返回值:返回一个字典,Key 为板块类型(如 'HY' 代表行业,'GN' 代表概念),Value 为板块名称列表。

完整策略代码示例

您可以将以下代码复制到 PTrade 的策略编辑区域进行回测或运行,它将在日志中打印出指定股票的上市日期和行业信息。

def initialize(context):
    # 设置我们要查询的股票,例如:恒生电子
    g.security = '600570.SS'
    # 设置股票池(虽然查询基础信息不强制要求set_universe,但作为策略规范建议加上)
    set_universe(g.security)

def before_trading_start(context, data):
    # --- 1. 获取上市日期 ---
    # field参数必须指定 'listed_date',否则默认只返回股票名称
    info = get_stock_info(g.security, field=['stock_name', 'listed_date'])
    
    # 解析返回的数据
    if info and g.security in info:
        stock_name = info[g.security]['stock_name']
        listed_date = info[g.security]['listed_date']
        log.info("股票名称: %s, 上市日期: %s" % (stock_name, listed_date))
    
    # --- 2. 获取所属行业板块 ---
    blocks = get_stock_blocks(g.security)
    
    if blocks:
        # 'HY' 键通常对应所属行业
        industry_info = blocks.get('HY', [])
        # 'GN' 键通常对应概念板块
        concept_info = blocks.get('GN', [])
        
        log.info("所属行业(HY): %s" % str(industry_info))
        log.info("所属概念(GN): %s" % str(concept_info))
        log.info("全部板块信息: %s" % str(blocks))

def handle_data(context, data):
    pass

代码运行结果说明

运行上述代码后,您将在日志(Log)中看到类似以下的输出:

  1. 上市日期:例如 股票名称: 恒生电子, 上市日期: 2003-12-16
  2. 行业信息get_stock_blocks 返回的字典中,'HY' 对应的是行业分类(通常是申万或证监会行业),例如 [['710200.XBHS', '计算机应用']]

注意事项

  1. Python 版本兼容性:PTrade 环境通常支持 Python 3,但为了兼容旧版本(如 Python 3.5),建议使用 %s 格式化字符串,而不是 f-string。
  2. 未来函数get_stock_blocks 获取的是当前的板块信息。如果在回测中使用,它返回的是该股票现在所属的板块,而不是历史上某一天的板块分类。这在回测中属于“未来函数”,请谨慎用于历史回测策略逻辑判断。
  3. 上市日期格式listed_date 返回的是字符串格式(如 '2003-12-16'),如果需要进行日期计算,需要自行转换为 datetime 对象。

Q&A

Q: get_stock_blocks 返回的字典中,Key 分别代表什么意思?
A: 返回字典中常见的 Key 含义如下:

  • 'HY': 行业板块(Industry)
  • 'GN': 概念板块(Concept)
  • 'DY': 地域板块(Region)
  • 'ZJHHY': 证监会行业分类
  • 'HGT': 是否属于沪股通标的

Q: 如果我想筛选出上市超过 90 天的股票,应该怎么写?
A: 您可以结合 get_stock_info 获取的 listed_date 和当前回测日期进行比较。示例逻辑如下:

import datetime

def check_is_old_stock(stock_code, current_dt):
    info = get_stock_info(stock_code, field=['listed_date'])
    listed_date_str = info[stock_code]['listed_date']
    # 将字符串转换为 datetime 对象
    listed_date = datetime.datetime.strptime(listed_date_str, '%Y-%m-%d')
    # 计算天数差
    days_diff = (current_dt - listed_date).days
    return days_diff > 90

Q: get_stock_info 如果不传 field 参数会返回什么?
A: 如果不传 field 参数,默认只返回包含 stock_name(股票名称)的字典,不会包含上市日期或退市日期。因此查询日期时必须显式指定 field=['listed_date']