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

ptrade 平台如何实现每日新股与可转债一键自动申购?(附 Python 源码)

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: ptrade 自动化运维:编写每日新股与可转债一键无脑申购策略

Question: 如何使用ptrade的ipo_stocks_order函数实现一键自动申购新股,并排除黑名单?

解决方案

ptrade 自动化运维:每日新股与可转债一键无脑申购策略

在 A 股市场中,新股申购(打新)和新债申购(打债)是风险极低且收益稳定的投资方式。为了避免每日手动操作的繁琐,我们可以利用 ptrade 提供的 ipo_stocks_order 接口,编写一个全自动运行的打新打债策略,实现每日一键无脑申购,并支持黑名单过滤功能。


一、 核心接口介绍:ipo_stocks_order

ipo_stocks_order 是 ptrade 专为新股/新债申购设计的 API,仅在交易模块可用。

1. 接口定义

ipo_stocks_order(market_type=None, black_stocks=None)

2. 参数说明

  • market_type (int, 可选): 申购代码所属市场。如果不传,默认申购当日全部可申购的新股与可转债。
    • 0: 上证普通代码
    • 1: 上证科创板代码
    • 2: 深证普通代码
    • 3: 深证创业板代码
    • 4: 可转债代码
  • black_stocks (str/list, 可选): 申购黑名单。可以是单个股票代码或代码列表。传入黑名单的代码将不会被申购。代码可以是 6 位数字(如 '787001'),也可以带市场尾缀(如 '787001.SS')。

3. 返回值

返回一个 dict,包含委托代码、委托编号、委托状态(0 为失败,1 为成功)以及委托数量等信息。


二、 策略设计思路

  1. 定时触发:打新不需要实时监控盘口,我们只需在每日开盘后的固定时间(例如上午 9:35)触发一次申购即可。可以使用 run_daily 定时器。
  2. 黑名单机制:设置一个全局黑名单列表 g.black_list,防止申购到不符合预期的标的。
  3. 状态防重:使用全局变量 g.has_ordered 记录当日是否已执行申购,避免在服务器重启或策略重载时重复报单。

三、 完整策略源码

以下是适用于 ptrade 实盘环境的完整自动化打新打债策略代码:

import time

def initialize(context):
    # 设置基准
    set_benchmark('000300.SS')
    
    # 定义申购黑名单(支持6位数字或带尾缀格式)
    g.black_list = ['787001', '301001.SZ']
    
    # 初始化当日申购状态标识
    g.has_ordered = False
    
    # 每天上午 9:35 定时执行一键申购函数
    run_daily(context, auto_ipo_job, time='09:35')

def before_trading_start(context, data):
    # 每日盘前重置申购状态
    g.has_ordered = False
    log.info("盘前准备:重置当日打新状态为【未申购】")

def auto_ipo_job(context):
    """
    每日定时打新任务
    """
    if g.has_ordered:
        log.info("今日已执行过自动申购,跳过本次任务。")
        return
        
    log.info("开始执行每日一键自动打新任务...")
    
    try:
        # 调用一键申购接口,不传 market_type 默认申购沪深所有新股与可转债
        # 同时传入黑名单列表排除特定标的
        result = ipo_stocks_order(market_type=None, black_stocks=g.black_list)
        
        log.info("自动申购执行完毕,柜台返回结果如下:")
        log.info(str(result))
        
        # 标记今日已申购
        g.has_ordered = True
        
    except Exception as e:
        log.error("自动申购过程中出现异常: %s" % str(e))

def handle_data(context, data):
    # 盘中无需进行高频处理,保持空置
    pass

四、 注意事项

  1. 实盘环境限制:该策略及 ipo_stocks_order 接口仅在实盘/模拟盘交易模块有效,回测环境不支持新股申购模拟。
  2. 额度限制:一键申购能否成功取决于您账户中对应的沪深市场市值额度。若额度不足,柜台会返回申购失败的废单信息。
  3. 黑名单代码格式:建议黑名单中的代码与交易所公布的申购代码保持一致,而非上市后的股票代码。