🚀 AI 一键生成 ptrade 策略代码

PTrade 策略开发:利用 get_stock_blocks 筛选特定地域板块股票

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

问题描述

如何筛选出属于雄安新区或粤港澳大湾区的股票?

解决方案

在PTrade中,筛选特定概念板块(如雄安新区或粤港澳大湾区)的股票,主要使用 get_industry_stocks 接口。你需要知道对应的概念板块代码,并在代码后加上后缀 .XBHS

根据PTrade的数据字典:

  • 雄安新区 的概念代码为 003813
  • 粤港澳自贸区(通常用于指代粤港澳相关概念)的概念代码为 003677

核心步骤

  1. 获取成分股:使用 get_industry_stocks('代码.XBHS') 分别获取两个板块的股票列表。
  2. 合并列表:将两个列表相加。
  3. 去重:因为某些股票可能同时属于两个概念,需要使用 set 进行去重处理。
  4. 设置股票池:使用 set_universe 将筛选出的股票设置为当前策略的股票池。

策略代码实现

以下是一个完整的策略示例,它会在每天盘前筛选出属于这两个板块的股票,并打印数量和代码列表。

def initialize(context):
    # 初始化函数,设置策略基本参数
    # 这里先初始化一个空的股票列表,实际筛选在 before_trading_start 进行
    g.security = []
    set_universe(g.security)

def before_trading_start(context, data):
    """
    盘前处理函数,每日开盘前运行
    在此处获取最新的概念板块成分股
    """
    # 1. 获取“雄安新区”概念的股票列表
    # 代码 003813 对应 雄安新区
    xiongan_stocks = get_industry_stocks('003813.XBHS')
    
    # 2. 获取“粤港澳自贸区”概念的股票列表
    # 代码 003677 对应 粤港澳自贸区
    bay_area_stocks = get_industry_stocks('003677.XBHS')
    
    # 3. 合并两个列表并去重
    # 使用 set() 去除重复的股票代码,再转回 list
    combined_stocks = list(set(xiongan_stocks + bay_area_stocks))
    
    # 4. 将筛选出的股票设置为当天的股票池
    g.security = combined_stocks
    set_universe(g.security)
    
    # 5. 打印日志信息
    log.info("========== 板块筛选结果 ==========")
    log.info("雄安新区概念股数量: %s" % len(xiongan_stocks))
    log.info("粤港澳概念股数量: %s" % len(bay_area_stocks))
    log.info("合并去重后总数量: %s" % len(g.security))
    # 如果需要查看具体代码,可以取消下面这行的注释
    # log.info("筛选出的股票列表: %s" % g.security)

def handle_data(context, data):
    """
    盘中运行函数
    """
    # 这里可以编写具体的买卖逻辑
    # 例如:遍历 g.security 中的股票进行交易
    pass

代码解析

  1. get_industry_stocks: 这是核心API。注意必须添加 .XBHS 后缀,这代表获取的是概念板块数据。
  2. set(): 集合操作,用于自动去除重复元素。如果一只股票既是雄安概念又是粤港澳概念,直接相加会出现两次,使用 set 可以确保每个股票代码只出现一次。
  3. 执行时机: 建议在 before_trading_start 中调用。因为板块成分股可能会随时间调整(虽然频率不高),在盘前获取能保证当天使用的是最新数据。

Q&A

Q1: 如何查找其他概念板块的代码?
A1: 您可以在PTrade客户端的行情界面查看板块指数,或者参考API文档中的“附录:概念板块”章节。例如,“一带一路”的代码是 003712,“新能源车”是 003900。使用时记得加上 .XBHS 后缀。

Q2: get_industry_stocks 获取的是当下的成分股还是历史成分股?
A2: 该函数获取的是当下的数据。在回测模式中,它不能取到真正匹配回测历史日期的成分股变动(即存在“未来函数”问题)。如果您的策略严格依赖历史某时刻的成分股名单,需要谨慎使用或自行准备历史成分股数据文件。但在实盘或模拟交易中,获取当下数据是正确的做法。

Q3: 筛选出的股票可以直接全仓买入吗?
A3: 不建议直接全仓买入。筛选出的股票数量可能很多(几十甚至上百只),直接全仓买入会导致资金过于分散且每只股票买入金额过小(甚至不足一手)。通常需要在筛选出板块股票后,再结合技术指标(如均线、MACD)或基本面数据(如市盈率)进行二次过滤,选出最优质的几只进行交易。