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

ptrade 平台如何查询新股与可转债中签信息?(附 get_lucky_info 自动卖出策略源码)

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

问题描述

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

Title: ptrade 中签套利:如何通过 get_lucky_info 获取历史中签并实现自动卖出?

Question: ptrade能查询到新股和可转债的中签信息吗?对应的API是什么?

解决方案

ptrade 能查询到新股和可转债的中签信息吗?

是的,ptrade 交易系统完全支持查询新股和可转债的中签信息。

在 ptrade 交易环境中,您可以通过调用内置的 get_lucky_info 接口,获取指定时间范围内的历史中签数据(包括新股与新债)。


对应 API 详解:get_lucky_info

1. 接口说明

用于获取指定时间范围内的中签信息。为了减小对柜台的压力,该函数在股票交易模块中同一分钟内多次调用时,会返回当前分钟首次查询的缓存数据。

  • 使用场景:该函数**仅在交易模块(实盘/模拟盘)**使用,对接 jz_ufx 柜台的环境暂不支持该函数。

2. 接口定义

get_lucky_info(start_date, end_date)

3. 参数说明

  • start_date (str):开始日期,格式为 "YYYYmmdd",例如 "20220928"
  • end_date (str):结束日期,格式为 "YYYYmmdd",例如 "20220929"

4. 返回值格式

正常返回一个列表套字典的数据结构。若无中签信息或异常则返回空列表 []

返回数据示例如下:

[
    {
        'stock_code': '371002.SZ',   # 证券代码
        'occur_amount': 10.0,        # 中签数量(发生数量)
        'business_price': 100.0,     # 成交价格(发行价/面值)
        'stock_name': '高新发债',     # 证券名称
        'init_date': 20220928        # 交易日期
    }
]

实盘应用:中签新股/新债自动监控与上市首日卖出策略

以下是一个实用的 ptrade 策略源码。该策略在每天盘前(before_trading_start)自动获取上一交易日至今日的中签信息,并在盘中实时监控,一旦中签标的上市交易,则自动执行卖出套利。

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

def initialize(context):
    # 初始化策略,设置一个默认股票池
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 存储中签标的信息的全局字典
    g.lucky_stocks = {}
    g.checked_today = False

def before_trading_start(context, data):
    g.checked_today = False
    g.lucky_stocks.clear()
    
    # 1. 获取上一交易日和今天的日期
    pre_date = str(get_trading_day(-1)).replace("-", "")
    current_date = context.blotter.current_dt.strftime("%Y%m%d")
    
    log.info("正在查询 %s 至 %s 的中签信息..." % (pre_date, current_date))
    
    try:
        # 2. 调用 ptrade API 获取中签信息
        lucky_info = get_lucky_info(pre_date, current_date)
        
        if lucky_info:
            log.info("发现中签信息:%s" % str(lucky_info))
            for item in lucky_info:
                code = item['stock_code']
                name = item['stock_name']
                amount = item['occur_amount']
                # 记录中签代码与数量
                g.lucky_stocks[code] = {
                    'name': name,
                    'amount': amount
                }
        else:
            log.info("该时间段内无中签信息。")
    except Exception as e:
        log.error("获取中签信息失败,错误: %s" % str(e))

def handle_data(context, data):
    # 限制每日只在开盘初期执行一次上市状态检查与卖出委托
    if g.checked_today:
        return
        
    if not g.lucky_stocks:
        g.checked_today = True
        return

    # 遍历中签标的,检查是否已上市并有持仓,若有则直接市价卖出
    for code, info in list(g.lucky_stocks.items()):
        # 获取当前标的持仓
        pos = get_position(code)
        
        # 如果账户中已有该中签标的的可用持仓,说明已上市到账,执行卖出
        if pos and pos.enable_amount > 0:
            log.info("检测到中签标的 %s (%s) 已上市到账,可用持仓: %s,准备卖出!" % (code, info['name'], pos.enable_amount))
            
            # 使用最优五档即时成交剩余撤销(market_type=4)快速市价卖出
            order_market(code, -pos.enable_amount, market_type=4)
            
            # 移除已处理的标的
            del g.lucky_stocks[code]
            
    g.checked_today = True