🚀 AI 一键生成 ptrade 策略代码

PTrade `ipo_stocks_order` 函数进阶:利用 black_stocks 参数实现精准申购

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

问题描述

使用一键新股申购功能时,如何排除某些特定的股票不参与申购?

解决方案

在PTrade中,使用一键新股申购功能时,可以通过 ipo_stocks_order 函数的 black_stocks 参数来排除特定的股票。

核心方法

调用 ipo_stocks_order 函数时,将不需要申购的股票代码赋值给 black_stocks 参数。

  • 参数说明black_stocks
  • 数据类型:字符串(单个股票)或 列表(多个股票)。
  • 代码格式:支持6位数字代码(如 '787001')或带后缀的代码(如 '787001.SS')。

策略代码示例

以下是一个完整的策略示例,展示了如何在每日交易中执行一键申购,同时排除指定的股票代码。

def initialize(context):
    # 初始化策略,设置一个默认股票池(打新策略对此依赖不大,但需符合框架规范)
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 定义一个全局变量,用于控制当天是否已经执行过申购
    g.has_ipo_ordered = False

def before_trading_start(context, data):
    # 每天盘前重置申购状态,确保每天都会尝试申购
    g.has_ipo_ordered = False

def handle_data(context, data):
    # 如果当天还没有执行过申购
    if not g.has_ipo_ordered:
        
        # 定义黑名单列表(不想申购的股票代码)
        # 支持6位代码,也支持带后缀的代码
        # 假设我们要排除一只科创板股票和一只创业板股票
        exclude_list = ['787001', '300001.SZ']
        
        # 执行一键申购
        # market_type=None 表示申购所有市场的新股
        # black_stocks=exclude_list 表示排除列表中的股票
        ipo_result = ipo_stocks_order(market_type=None, black_stocks=exclude_list)
        
        # 打印日志方便查看
        log.info("执行一键新股申购")
        log.info("排除的股票列表: %s" % exclude_list)
        log.info("申购结果: %s" % ipo_result)
        
        # 将标志位设为True,防止在同一天内重复调用
        g.has_ipo_ordered = True

详细参数说明

ipo_stocks_order(market_type=None, black_stocks=None)

  1. market_type (可选):

    • 如果不传或传 None,默认申购所有板块的新股。
    • 如果只想申购特定板块,可以传入整数:
      • 0:上证普通代码
      • 1:上证科创板代码
      • 2:深证普通代码
      • 3:深证创业板代码
      • 4:可转债代码
  2. black_stocks (可选):

    • 这是实现你需求的关键参数。
    • 传入单个股票字符串:black_stocks='787001'
    • 传入股票列表:black_stocks=['787001', '300015.SZ']
    • 被列入此参数的股票将不会被申购。

注意事项

  1. 运行环境ipo_stocks_order 函数仅在交易模块(实盘/模拟盘)可用,在回测模块中无法使用。
  2. 执行频率:建议配合标志位(如示例中的 g.has_ipo_ordered)使用,确保每天只调用一次,避免重复发送请求。
  3. 代码格式:虽然支持不带后缀的6位代码,但为了避免跨市场代码冲突(极少见但理论存在),建议尽量使用带后缀的标准格式(如 .SS, .SZ)。

Q&A

Q: 如果我想只申购科创板的新股,同时排除某一只特定的科创板股票,该怎么写?
A: 你需要同时指定 market_typeblack_stocks。代码如下:

ipo_stocks_order(market_type=1, black_stocks=['787xxx.SS'])

其中 market_type=1 代表仅申购上证科创板。

Q: black_stocks 参数可以排除可转债吗?
A: 可以。如果你在进行可转债申购(market_type=4 或默认全部申购)时,可以将不想申购的可转债代码放入 black_stocks 列表中。

Q: 如果我不设置 black_stocks,会发生什么?
A: 如果不设置该参数(默认为 None),系统将按照 market_type 指定的范围,自动申购当日所有可申购的新股或可转债。