🚀 AI 一键生成 ptrade 策略代码

如何在 PTrade 平台实现新股和可转债的一键批量申购?

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

问题描述

我每天都需要手动申购新股,有没有办法用代码实现一键申购当天所有可打的新股和新债?

解决方案

在PTrade中,可以使用 ipo_stocks_order 函数来实现一键申购当日所有新股和新债。

这是一个纯交易功能的策略,不需要复杂的逻辑分析。我们可以通过 run_daily 函数设置一个定时任务(例如每天上午10:15),自动调用申购接口。

以下是完整的策略代码:

import time

def initialize(context):
    """
    策略初始化函数
    """
    # 设置每天上午 10:15 执行自动申购任务
    # 建议避开开盘9:30的流量高峰,选择盘中时间
    run_daily(context, auto_ipo_task, time='10:15')

def auto_ipo_task(context):
    """
    自动申购执行函数
    """
    log.info("========== 开始执行今日新股/新债一键申购 ==========")
    
    # PTrade API: ipo_stocks_order(market_type=None, black_stocks=None)
    # market_type参数说明:
    # 0: 上证普通代码
    # 1: 上证科创板代码
    # 2: 深证普通代码
    # 3: 深证创业板代码
    # 4: 可转债代码
    
    # 定义需要申购的市场类型列表
    targets = [
        (0, "上证普通股"),
        (1, "上证科创板"),
        (2, "深证普通股"),
        (3, "深证创业板"),
        (4, "可转债")
    ]
    
    for m_type, m_name in targets:
        try:
            log.info("正在发起申购: %s" % m_name)
            # 调用一键申购接口
            ipo_stocks_order(market_type=m_type)
            
            # 为了防止请求发送过快导致柜台拥堵,建议每次请求间暂停几秒
            time.sleep(3)
            
        except Exception as e:
            log.error("申购 %s 时发生异常: %s" % (m_name, str(e)))
            
    log.info("========== 今日申购任务执行完毕 ==========")

def handle_data(context, data):
    # 该策略仅用于打新,无需在盘中处理行情数据
    pass

代码说明:

  1. initialize: 使用 run_daily 设置定时任务。这里设置为 10:15,你也可以根据需要修改为其他交易时间段(如 14:00)。
  2. auto_ipo_task: 这是自定义的执行函数。
    • 虽然 ipo_stocks_order() 不传参数默认会申购全部,但为了让日志更清晰,以及避免瞬间向柜台发送过多请求,代码中将不同板块(沪深主板、科创板、创业板、可转债)分开循环调用。
    • time.sleep(3): 在每次申购之间增加了3秒的延时,这是一种保护机制,防止因请求频率过高被系统拒绝。
  3. ipo_stocks_order: 这是PTrade专门用于打新的API,它会自动检测当日可申购的标的并按顶格(或资金允许的最大数量)进行申购。

注意事项:

  • 适用环境:此代码仅在**交易(实盘/仿真)**模块有效,回测模式下无法进行打新操作。
  • 资金要求:申购新股需要持有对应的底仓市值(T-2日),申购可转债(代码尾缀为4)通常不需要底仓和预缴款(中签后缴款),具体规则请以交易所和券商规定为准。
  • 黑名单:如果你不想申购某只特定的新股,可以在 ipo_stocks_order 中传入 black_stocks=['股票代码'] 参数。