🚀 AI 一键生成 ptrade 策略代码
立即体验

PTrade 平台如何使用 ipo_stocks_order 接口过滤特定板块新股申购?(附 Python 源码)

ptrade | 发布时间: 2026/8/4
以下内容由 EasyQuant 生成。

问题描述



Title: PTrade 新股申购:ipo_stocks_order 接口的高级黑名单过滤实战

Question: ptrade 的 ipo_stocks_order 如何过滤特定板块的新股申购?

解决方案

PTrade 平台如何使用 ipo_stocks_order 接口过滤特定板块新股申购?

在 PTrade 量化交易平台中,ipo_stocks_order 接口提供了一键申购当日全部新股与新债的功能。然而,许多量化投资者在实盘中需要规避特定板块(例如科创板或创业板)的新股,以控制风险。本文将详细介绍如何通过结合 get_stock_info 接口获取上市板块信息,并利用 ipo_stocks_orderblack_stocks 参数实现高级黑名单过滤。


一、 核心接口解析

1. ipo_stocks_order (新股一键申购)

ipo_stocks_order(market_type=None, black_stocks=None)

  • market_type: 申购代码所属市场。不传时默认申购全部。可选值包括:0 (上证普通)、1 (上证科创板)、2 (深证普通)、3 (深证创业板)、4 (可转债)。
  • black_stocks: 黑名单股票。可以是单个股票代码(如 '787001''787001.SS')或代码列表。传入的黑名单标的将不会被申购。

2. get_stock_info (获取股票基础信息)

get_stock_info(stocks, field=None)
用于获取股票、可转债等基础信息,通过解析代码前缀或后缀,可以判断其所属的特定板块。


二、 过滤特定板块的实战策略

由于新股申购时使用的是申购代码(例如沪市科创板申购代码通常为 787xxx,深市创业板申购代码通常为 30xxxx),我们可以通过编写一个过滤函数,在每日盘中执行申购前,动态识别当日新股列表,并将不符合要求的板块代码加入 black_stocks 黑名单中。

Python 源码实现

以下是一个完整的 PTrade 策略示例,展示了如何在每日 9:45 自动执行打新,并过滤掉所有科创板的新股:

# -*- coding: utf-8 -*-

def initialize(context):
    # 初始化策略,设置基准
    set_benchmark('000300.SS')
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 设定定时任务:每天 09:45 执行一键打新
    run_daily(context, auto_ipo_subscription, time='09:45')

def auto_ipo_subscription(context):
    log.info("开始执行每日新股申购流程...")
    
    # 假设我们通过某种方式获取了今日可申购的列表(实盘中柜台会自动处理,此处我们定义需要过滤的黑名单规则)
    # 在 PTrade 中,我们可以直接将已知需要规避的板块特征代码加入黑名单
    
    # 示例:过滤科创板新股(科创板申购代码通常以 787 开头)
    # 示例:过滤创业板新股(创业板申购代码通常以 30 或者是 31 开头)
    
    black_list = []
    
    # 假设今日有以下申购代码(模拟数据)
    today_ipo_codes = ['787001', '301234', '001234'] 
    
    for code in today_ipo_codes:
        # 规则 1:过滤科创板 (上证科创板申购代码以 787 开头)
        if code.startswith('787'):
            black_list.append(code)
            log.info(f"已将科创板申购代码 {code} 加入黑名单")
            
        # 规则 2:过滤创业板 (深证创业板申购代码以 30 开头)
        elif code.startswith('30'):
            black_list.append(code)
            log.info(f"已将创业板申购代码 {code} 加入黑名单")

    # 执行一键申购,传入黑名单列表
    if len(black_list) > 0:
        log.info(f"今日申购黑名单: {black_list}")
        # 申购除黑名单外的所有新股/新债
        result = ipo_stocks_order(black_stocks=black_list)
    else:
        log.info("今日无黑名单限制,全额申购")
        result = ipo_stocks_order()
        
    log.info(f"申购委托结果: {result}")

def handle_data(context, data):
    pass

三、 注意事项

  1. 申购代码精度:传入 black_stocks 的代码可以是 6 位纯数字字符串(如 '787001'),也可以带市场后缀(如 '787001.SS')。建议保持格式统一。
  2. 两融账户限制:部分券商的信用账户(两融)不支持 ipo_stocks_order 接口,请在普通股票账户环境下运行此策略。
  3. 流控保护:一键申购接口内部会与柜台进行多次交互,请避免在 handle_datatick_data 等高频事件中重复调用,推荐使用 run_daily 每天仅执行一次。