3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 A 股市场中,新股申购(打新)和新债申购(打债)是风险极低且收益稳定的投资方式。为了避免每日手动操作的繁琐,我们可以利用 ptrade 提供的 ipo_stocks_order 接口,编写一个全自动运行的打新打债策略,实现每日一键无脑申购,并支持黑名单过滤功能。
ipo_stocks_orderipo_stocks_order 是 ptrade 专为新股/新债申购设计的 API,仅在交易模块可用。
ipo_stocks_order(market_type=None, black_stocks=None)
market_type (int, 可选): 申购代码所属市场。如果不传,默认申购当日全部可申购的新股与可转债。
0: 上证普通代码1: 上证科创板代码2: 深证普通代码3: 深证创业板代码4: 可转债代码black_stocks (str/list, 可选): 申购黑名单。可以是单个股票代码或代码列表。传入黑名单的代码将不会被申购。代码可以是 6 位数字(如 '787001'),也可以带市场尾缀(如 '787001.SS')。返回一个 dict,包含委托代码、委托编号、委托状态(0 为失败,1 为成功)以及委托数量等信息。
run_daily 定时器。g.black_list,防止申购到不符合预期的标的。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
ipo_stocks_order 接口仅在实盘/模拟盘交易模块有效,回测环境不支持新股申购模拟。